diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index c338d7561..fec865394 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -47,6 +47,7 @@ public class GlobalUserPreferences{ public static boolean collapseLongPosts; public static boolean spectatorMode; public static boolean autoHideFab; + public static boolean unreadNotifications; public static String publishButtonText; public static ThemePreference theme; public static ColorPreference color; @@ -101,6 +102,7 @@ public class GlobalUserPreferences{ collapseLongPosts=prefs.getBoolean("collapseLongPosts", true); spectatorMode=prefs.getBoolean("spectatorMode", false); autoHideFab=prefs.getBoolean("autoHideFab", true); + unreadNotifications=prefs.getBoolean("unreadNotifications", false); publishButtonText=prefs.getString("publishButtonText", ""); theme=ThemePreference.values()[prefs.getInt("theme", 0)]; recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>()); @@ -150,6 +152,7 @@ public class GlobalUserPreferences{ .putBoolean("collapseLongPosts", collapseLongPosts) .putBoolean("spectatorMode", spectatorMode) .putBoolean("autoHideFab", autoHideFab) + .putBoolean("unreadNotifications", unreadNotifications) .putString("publishButtonText", publishButtonText) .putBoolean("bottomEncoding", bottomEncoding) .putInt("theme", theme.ordinal()) diff --git a/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java b/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java index 5e76cf809..b876027b3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java +++ b/mastodon/src/main/java/org/joinmastodon/android/PushNotificationReceiver.java @@ -83,6 +83,8 @@ public class PushNotificationReceiver extends BroadcastReceiver{ @Override public void onSuccess(org.joinmastodon.android.model.Notification result){ MastodonAPIController.runInBackground(()->PushNotificationReceiver.this.notify(context, pn, accountID, result)); + GlobalUserPreferences.unreadNotifications = true; + GlobalUserPreferences.save(); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java index 2dcd2a382..68d18910d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java @@ -16,6 +16,10 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import androidx.annotation.IdRes; +import androidx.annotation.Nullable; + +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; @@ -28,8 +32,6 @@ import org.parceler.Parcels; import java.util.ArrayList; -import androidx.annotation.IdRes; -import androidx.annotation.Nullable; import me.grishka.appkit.FragmentStackActivity; import me.grishka.appkit.fragments.AppKitFragment; import me.grishka.appkit.fragments.LoaderFragment; @@ -52,6 +54,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene private TabBar tabBar; private View tabBarWrap; private ImageView tabBarAvatar; + private ImageView notificationTabIcon; @IdRes private int currentTab=R.id.tab_home; @@ -117,6 +120,9 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene Account self=AccountSessionManager.getInstance().getAccount(accountID).self; ViewImageLoader.load(tabBarAvatar, null, new UrlImageLoaderRequest(self.avatar, V.dp(28), V.dp(28))); + notificationTabIcon=content.findViewById(R.id.tab_notifications); + setNotificationBadge(); + if(savedInstanceState==null){ getChildFragmentManager().beginTransaction() .add(R.id.fragment_wrap, homeTabFragment) @@ -255,6 +261,13 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene scrollable.scrollToTop(); return; } + + if(tab == R.id.tab_notifications){ + GlobalUserPreferences.unreadNotifications = false; + GlobalUserPreferences.save(); + setNotificationBadge(); + } + getChildFragmentManager().beginTransaction().hide(fragmentForTab(currentTab)).show(newFragment).commit(); maybeTriggerLoading(newFragment); currentTab=tab; @@ -327,4 +340,8 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene // getChildFragmentManager().putFragment(outState, "notificationsFragment", notificationsFragment); // getChildFragmentManager().putFragment(outState, "profileFragment", profileFragment); } + + private void setNotificationBadge() { + notificationTabIcon.setImageDrawable(getContext().getDrawable(GlobalUserPreferences.unreadNotifications ? R.drawable.ic_notifications_tab_badged : R.drawable.ic_fluent_alert_28_selector)); + } } diff --git a/mastodon/src/main/res/drawable/ic_notifications_tab_badged.xml b/mastodon/src/main/res/drawable/ic_notifications_tab_badged.xml new file mode 100644 index 000000000..c5608a960 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_notifications_tab_badged.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file