Add Helper for some UnifiedPush functions
This commit is contained in:
@@ -34,6 +34,7 @@ import org.joinmastodon.android.model.EmojiCategory;
|
|||||||
import org.joinmastodon.android.model.LegacyFilter;
|
import org.joinmastodon.android.model.LegacyFilter;
|
||||||
import org.joinmastodon.android.model.Instance;
|
import org.joinmastodon.android.model.Instance;
|
||||||
import org.joinmastodon.android.model.Token;
|
import org.joinmastodon.android.model.Token;
|
||||||
|
import org.joinmastodon.android.utils.UnifiedPushHelper;
|
||||||
import org.unifiedpush.android.connector.UnifiedPush;
|
import org.unifiedpush.android.connector.UnifiedPush;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -127,7 +128,7 @@ public class AccountSessionManager{
|
|||||||
MastodonAPIController.runInBackground(()->writeInstanceInfoFile(wrapper, instance.uri));
|
MastodonAPIController.runInBackground(()->writeInstanceInfoFile(wrapper, instance.uri));
|
||||||
|
|
||||||
updateMoreInstanceInfo(instance, instance.uri);
|
updateMoreInstanceInfo(instance, instance.uri);
|
||||||
if (UnifiedPush.getAckDistributor(context) != null) {
|
if (UnifiedPushHelper.isUnifiedPushEnabled(context)) {
|
||||||
UnifiedPush.register(
|
UnifiedPush.register(
|
||||||
context,
|
context,
|
||||||
session.getID(),
|
session.getID(),
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.joinmastodon.android.model.viewmodel.ListItem;
|
|||||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
import org.joinmastodon.android.utils.UnifiedPushHelper;
|
||||||
import org.unifiedpush.android.connector.UnifiedPush;
|
import org.unifiedpush.android.connector.UnifiedPush;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@@ -57,6 +58,7 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
|
|
||||||
// MEGALODON
|
// MEGALODON
|
||||||
private boolean useUnifiedPush = false;
|
private boolean useUnifiedPush = false;
|
||||||
|
private boolean hasAnyUnifiedPushDistrib = false;
|
||||||
private CheckableListItem<Void> uniformIconItem, deleteItem, onlyLatestItem, unifiedPushItem;
|
private CheckableListItem<Void> uniformIconItem, deleteItem, onlyLatestItem, unifiedPushItem;
|
||||||
private CheckableListItem<Void> postsItem, updateItem;
|
private CheckableListItem<Void> postsItem, updateItem;
|
||||||
|
|
||||||
@@ -72,7 +74,8 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
lp=AccountSessionManager.get(accountID).getLocalPreferences();
|
lp=AccountSessionManager.get(accountID).getLocalPreferences();
|
||||||
|
|
||||||
getPushSubscription();
|
getPushSubscription();
|
||||||
useUnifiedPush=UnifiedPush.getAckDistributor(getContext()) != null;
|
useUnifiedPush=UnifiedPushHelper.isUnifiedPushEnabled(getContext());
|
||||||
|
hasAnyUnifiedPushDistrib=UnifiedPushHelper.hasAnyDistributorInstalled(getContext());
|
||||||
|
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
pauseItem=new CheckableListItem<>(getString(R.string.pause_all_notifications), getPauseItemSubtitle(), CheckableListItem.Style.SWITCH, false, R.drawable.ic_fluent_alert_snooze_24_regular, i->onPauseNotificationsClick(false)),
|
pauseItem=new CheckableListItem<>(getString(R.string.pause_all_notifications), getPauseItemSubtitle(), CheckableListItem.Style.SWITCH, false, R.drawable.ic_fluent_alert_snooze_24_regular, i->onPauseNotificationsClick(false)),
|
||||||
@@ -94,7 +97,7 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
));
|
));
|
||||||
|
|
||||||
//only enable when distributors, who can receive notifications, are available
|
//only enable when distributors, who can receive notifications, are available
|
||||||
unifiedPushItem.isEnabled=!UnifiedPush.getDistributors(getContext()).isEmpty();
|
unifiedPushItem.isEnabled=hasAnyUnifiedPushDistrib;
|
||||||
if (!unifiedPushItem.isEnabled) {
|
if (!unifiedPushItem.isEnabled) {
|
||||||
unifiedPushItem.subtitleRes=R.string.sk_settings_unifiedpush_no_distributor_body;
|
unifiedPushItem.subtitleRes=R.string.sk_settings_unifiedpush_no_distributor_body;
|
||||||
}
|
}
|
||||||
@@ -316,12 +319,12 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
bannerText.setText(R.string.notifications_disabled_in_system);
|
bannerText.setText(R.string.notifications_disabled_in_system);
|
||||||
bannerButton.setText(R.string.open_system_notification_settings);
|
bannerButton.setText(R.string.open_system_notification_settings);
|
||||||
bannerButton.setOnClickListener(v->openSystemNotificationSettings());
|
bannerButton.setOnClickListener(v->openSystemNotificationSettings());
|
||||||
}else if(BuildConfig.BUILD_TYPE.equals("fdroidRelease") && UnifiedPush.getAckDistributor(getContext()) != null){
|
}else if(BuildConfig.BUILD_TYPE.equals("fdroidRelease") && useUnifiedPush){
|
||||||
bannerAdapter.setVisible(true);
|
bannerAdapter.setVisible(true);
|
||||||
bannerIcon.setImageResource(R.drawable.ic_fluent_warning_24_filled);
|
bannerIcon.setImageResource(R.drawable.ic_fluent_warning_24_filled);
|
||||||
bannerTitle.setVisibility(View.VISIBLE);
|
bannerTitle.setVisibility(View.VISIBLE);
|
||||||
bannerTitle.setText(R.string.mo_settings_unifiedpush_warning);
|
bannerTitle.setText(R.string.mo_settings_unifiedpush_warning);
|
||||||
if(UnifiedPush.getDistributors(getContext()).isEmpty()) {
|
if(!hasAnyUnifiedPushDistrib) {
|
||||||
bannerText.setText(R.string.mo_settings_unifiedpush_warning_no_distributors);
|
bannerText.setText(R.string.mo_settings_unifiedpush_warning_no_distributors);
|
||||||
bannerButton.setText(R.string.info);
|
bannerButton.setText(R.string.info);
|
||||||
bannerButton.setOnClickListener(v->UiUtils.launchWebBrowser(getContext(), "https://unifiedpush.org/"));
|
bannerButton.setOnClickListener(v->UiUtils.launchWebBrowser(getContext(), "https://unifiedpush.org/"));
|
||||||
@@ -342,23 +345,15 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onUnifiedPushClick(){
|
private void onUnifiedPushClick(){
|
||||||
if(UnifiedPush.getAckDistributor(getContext()) == null){
|
if(!useUnifiedPush){
|
||||||
List<String> distributors = UnifiedPush.getDistributors(getContext());
|
List<String> distributors = UnifiedPush.getDistributors(getContext());
|
||||||
showUnifiedPushRegisterDialog(distributors);
|
showUnifiedPushRegisterDialog(distributors);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
UnifiedPushHelper.unregisterAllAccounts(getContext());
|
||||||
for (AccountSession accountSession : AccountSessionManager.getInstance().getLoggedInAccounts()) {
|
|
||||||
UnifiedPush.unregister(
|
|
||||||
getContext(),
|
|
||||||
accountSession.getID()
|
|
||||||
);
|
|
||||||
|
|
||||||
//re-register to fcm
|
|
||||||
accountSession.getPushSubscriptionManager().registerAccountForPush(getPushSubscription());
|
|
||||||
}
|
|
||||||
unifiedPushItem.toggle();
|
unifiedPushItem.toggle();
|
||||||
rebindItem(unifiedPushItem);
|
rebindItem(unifiedPushItem);
|
||||||
|
useUnifiedPush = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showUnifiedPushRegisterDialog(List<String> distributors){
|
private void showUnifiedPushRegisterDialog(List<String> distributors){
|
||||||
@@ -366,16 +361,10 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
|||||||
(dialog, which)->{
|
(dialog, which)->{
|
||||||
String userDistrib = distributors.get(which);
|
String userDistrib = distributors.get(which);
|
||||||
UnifiedPush.saveDistributor(getContext(), userDistrib);
|
UnifiedPush.saveDistributor(getContext(), userDistrib);
|
||||||
for (AccountSession accountSession : AccountSessionManager.getInstance().getLoggedInAccounts()){
|
UnifiedPushHelper.registerAllAccounts(getContext());
|
||||||
UnifiedPush.register(
|
|
||||||
getContext(),
|
|
||||||
accountSession.getID(),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
unifiedPushItem.toggle();
|
unifiedPushItem.toggle();
|
||||||
rebindItem(unifiedPushItem);
|
rebindItem(unifiedPushItem);
|
||||||
|
useUnifiedPush = true;
|
||||||
}).setOnCancelListener(d->rebindItem(unifiedPushItem)).show();
|
}).setOnCancelListener(d->rebindItem(unifiedPushItem)).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package org.joinmastodon.android.utils;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
|
import org.unifiedpush.android.connector.UnifiedPush;
|
||||||
|
|
||||||
|
public class UnifiedPushHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param context
|
||||||
|
* @return `true` if UnifiedPush is used
|
||||||
|
*/
|
||||||
|
public static boolean isUnifiedPushEnabled(@NonNull Context context) {
|
||||||
|
return UnifiedPush.getAckDistributor(context) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If any distributor is installed on the device
|
||||||
|
* @param context
|
||||||
|
* @return `true` if at least one is installed
|
||||||
|
*/
|
||||||
|
public static boolean hasAnyDistributorInstalled(@NonNull Context context) {
|
||||||
|
return !UnifiedPush.getDistributors(context).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerAllAccounts(@NonNull Context context) {
|
||||||
|
for (AccountSession accountSession : AccountSessionManager.getInstance().getLoggedInAccounts()){
|
||||||
|
UnifiedPush.register(
|
||||||
|
context,
|
||||||
|
accountSession.getID(),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unregisterAllAccounts(@NonNull Context context) {
|
||||||
|
for (AccountSession accountSession : AccountSessionManager.getInstance().getLoggedInAccounts()){
|
||||||
|
UnifiedPush.unregister(
|
||||||
|
context,
|
||||||
|
accountSession.getID()
|
||||||
|
);
|
||||||
|
// use FCM again
|
||||||
|
accountSession.getPushSubscriptionManager().registerAccountForPush(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user