Cancel notifications on opening notifications tab (#450)

This commit is contained in:
Ivan Kupalov 2017-11-13 21:05:23 +03:00 committed by Konrad Pozniak
commit ddc4954f8a
7 changed files with 84 additions and 57 deletions

View file

@ -15,6 +15,8 @@
package com.keylesspalace.tusky.fragment;
import android.app.Activity;
import android.app.NotificationManager;
import android.arch.core.util.Function;
import android.content.Context;
import android.content.SharedPreferences;
@ -36,6 +38,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.keylesspalace.tusky.MainActivity;
import com.keylesspalace.tusky.NotificationPullJobCreator;
import com.keylesspalace.tusky.adapter.FooterViewHolder;
import com.keylesspalace.tusky.adapter.NotificationsAdapter;
import com.keylesspalace.tusky.R;
@ -129,12 +132,12 @@ public class NotificationsFragment extends SFragment implements
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_timeline, container, false);
@NonNull Context context = inflater.getContext(); // from inflater to silence warning
// Setup the SwipeRefreshLayout.
Context context = getContext();
swipeRefreshLayout = rootView.findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setOnRefreshListener(this);
// Setup the RecyclerView.
@ -176,6 +179,7 @@ public class NotificationsFragment extends SFragment implements
super.onActivityCreated(savedInstanceState);
MainActivity activity = (MainActivity) getActivity();
if (activity == null) throw new AssertionError("Activity is null");
// MainActivity's layout is guaranteed to be inflated until onCreate returns.
TabLayout layout = activity.findViewById(R.id.tab_layout);
@ -232,15 +236,30 @@ public class NotificationsFragment extends SFragment implements
@Override
public void onDestroyView() {
TabLayout tabLayout = getActivity().findViewById(R.id.tab_layout);
tabLayout.removeOnTabSelectedListener(onTabSelectedListener);
Activity activity = getActivity();
if (activity == null) {
Log.e(TAG, "Activity is null");
} else {
TabLayout tabLayout = activity.findViewById(R.id.tab_layout);
tabLayout.removeOnTabSelectedListener(onTabSelectedListener);
LocalBroadcastManager.getInstance(getContext())
.unregisterReceiver(timelineReceiver);
LocalBroadcastManager.getInstance(activity)
.unregisterReceiver(timelineReceiver);
}
super.onDestroyView();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//noinspection ConstantConditions
((NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE))
.cancel(NotificationPullJobCreator.NOTIFY_ID);
}
}
@Override
public void onRefresh() {
sendFetchNotificationsRequest(null, topId, FetchEnd.TOP, -1);

View file

@ -25,7 +25,7 @@ import android.support.annotation.XmlRes;
import com.keylesspalace.tusky.BuildConfig;
import com.keylesspalace.tusky.PreferencesActivity;
import com.keylesspalace.tusky.R;
import com.keylesspalace.tusky.util.NotificationMaker;
import com.keylesspalace.tusky.util.NotificationManager;
public class PreferencesFragment extends PreferenceFragment {
@ -56,7 +56,7 @@ public class PreferencesFragment extends PreferenceFragment {
//on Android O and newer, launch the system notification settings instead of the app settings
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationMaker.createNotificationChannels(getContext());
NotificationManager.createNotificationChannels(getContext());
notificationPreferences.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override