Commit Diff


commit - 1cee6d59aa47aca6320733ee439ce796c06dcab6
commit + b033cd4afa42d64c5b01fd35f68e79572787db8b
blob - 668ab76d41eb69e23c2fd0177e567f97c137830e
blob + 780971e96c9f2cf09b9c9c427a783f9dd6108820
--- mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsNotificationsFragment.java
+++ mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsNotificationsFragment.java
@@ -319,20 +319,22 @@ public class SettingsNotificationsFragment extends Bas
 			bannerText.setText(R.string.notifications_disabled_in_system);
 			bannerButton.setText(R.string.open_system_notification_settings);
 			bannerButton.setOnClickListener(v->openSystemNotificationSettings());
-		}else if(BuildConfig.BUILD_TYPE.equals("fdroidRelease") && useUnifiedPush){
+		}else if(BuildConfig.BUILD_TYPE.equals("fdroidRelease") && !useUnifiedPush){
 			bannerAdapter.setVisible(true);
 			bannerIcon.setImageResource(R.drawable.ic_fluent_warning_24_filled);
 			bannerTitle.setVisibility(View.VISIBLE);
 			bannerTitle.setText(R.string.mo_settings_unifiedpush_warning);
-			if(!hasAnyUnifiedPushDistrib) {
-				bannerText.setText(R.string.mo_settings_unifiedpush_warning_no_distributors);
-				bannerButton.setText(R.string.info);
-				bannerButton.setOnClickListener(v->UiUtils.launchWebBrowser(getContext(), "https://unifiedpush.org/"));
-			} else {
-				bannerText.setText(R.string.mo_settings_unifiedpush_warning_disabled);
-				bannerButton.setText(R.string.mo_settings_unifiedpush_enable);
-				bannerButton.setOnClickListener(v->onUnifiedPushClick());
-			}
+			bannerText.setText(R.string.mo_settings_unifiedpush_warning_disabled);
+			bannerButton.setText(R.string.mo_settings_unifiedpush_enable);
+			bannerButton.setOnClickListener(v->onUnifiedPushClick());
+		}else if(useUnifiedPush && !hasAnyUnifiedPushDistrib) {
+			bannerAdapter.setVisible(true);
+			bannerIcon.setImageResource(R.drawable.ic_fluent_warning_24_filled);
+			bannerTitle.setVisibility(View.VISIBLE);
+			bannerTitle.setText(R.string.mo_settings_unifiedpush_warning);
+			bannerText.setText(R.string.mo_settings_unifiedpush_warning_no_distributors);
+			bannerButton.setText(R.string.info);
+			bannerButton.setOnClickListener(v->UiUtils.launchWebBrowser(getContext(), "https://unifiedpush.org/"));
 		}else if(pauseTime>System.currentTimeMillis()){
 			bannerAdapter.setVisible(true);
 			bannerIcon.setImageResource(R.drawable.ic_fluent_alert_snooze_24_regular);
@@ -354,6 +356,7 @@ public class SettingsNotificationsFragment extends Bas
 		unifiedPushItem.toggle();
 		rebindItem(unifiedPushItem);
 		useUnifiedPush = false;
+		updateBanner();
 	}
 
 	private void showUnifiedPushRegisterDialog(List<String> distributors){
@@ -365,6 +368,7 @@ public class SettingsNotificationsFragment extends Bas
 					unifiedPushItem.toggle();
 					rebindItem(unifiedPushItem);
 					useUnifiedPush = true;
+					updateBanner();
 				}).setOnCancelListener(d->rebindItem(unifiedPushItem)).show();
 	}
 
blob - f3c4f4fa8e43ad26f0d39e96d28c7287d6243c54
blob + bc64a02cc066163b613db67508f0299762d18af2
--- mastodon/src/main/java/org/joinmastodon/android/model/PushSubscription.java
+++ mastodon/src/main/java/org/joinmastodon/android/model/PushSubscription.java
@@ -10,6 +10,7 @@ import androidx.annotation.NonNull;
 public class PushSubscription extends BaseModel implements Cloneable{
 	public int id;
 	public String endpoint;
+	public Boolean standard=false;
 	public Alerts alerts;
 	public String serverKey;
 	public Policy policy=Policy.ALL;
@@ -21,6 +22,7 @@ public class PushSubscription extends BaseModel implem
 		return "PushSubscription{"+
 				"id="+id+
 				", endpoint='"+endpoint+'\''+
+				", standard="+standard+
 				", alerts="+alerts+
 				", serverKey='"+serverKey+'\''+
 				", policy="+policy+
blob - 7497763dd43a10d6680164830091425b5b46892c
blob + cdcc4633d069822323b3d34460d9b6afda8e3530
--- mastodon/src/main/java/org/joinmastodon/android/utils/UnifiedPushHelper.java
+++ mastodon/src/main/java/org/joinmastodon/android/utils/UnifiedPushHelper.java
@@ -5,9 +5,9 @@ import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 
-import org.joinmastodon.android.api.requests.oauth.GetOauthToken;
 import org.joinmastodon.android.api.session.AccountSession;
 import org.joinmastodon.android.api.session.AccountSessionManager;
+import org.joinmastodon.android.model.PushSubscription;
 import org.unifiedpush.android.connector.UnifiedPush;
 
 public class UnifiedPushHelper {
@@ -31,17 +31,26 @@ public class UnifiedPushHelper {
 
 	public static void registerAllAccounts(@NonNull Context context) {
 		for (AccountSession accountSession : AccountSessionManager.getInstance().getLoggedInAccounts()){
+			String vapidKey = accountSession.app.vapidKey;
 			// Sometimes this is null when the account's server has died (don't ask me how I know this)
-			if (accountSession.app.vapidKey == null) {
+			if (vapidKey == null) {
 				// TODO: throw this on a translatable string and tell the user to log out and back in
 				Toast.makeText(context, "Error on unified push subscription: no valid vapid key for account " + accountSession.getFullUsername(), Toast.LENGTH_LONG).show();
 				break;
 			}
+			PushSubscription sub = accountSession.pushSubscription;
+			if (sub == null || sub.standard) {
+				vapidKey = vapidKey.replaceAll("=","");
+			} else {
+				// If we know the server doesn't support the _standard_ VAPID,
+				// we register without vapid
+				vapidKey = null;
+			}
 			UnifiedPush.register(
 					context,
 					accountSession.getID(),
-					null,
-					accountSession.app.vapidKey.replaceAll("=","")
+					accountSession.self.fqn,
+					vapidKey
 			);
 		}
 	}