commit b033cd4afa42d64c5b01fd35f68e79572787db8b from: LucasGGamerM <71328265+LucasGGamerM@users.noreply.github.com> via: GitHub date: Thu Jun 12 00:26:46 2025 UTC Merge pull request #628 from p1gp1g/master Fix UnifiedPush 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 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 ); } }