From 3a72c5a1f8f37010459794a4c6e80e0141030907 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Thu, 2 Jul 2020 13:12:36 +0800 Subject: [PATCH] Open message tab in InboxActivity when opening a message notification. --- .../Activity/InboxActivity.java | 20 +++++++++++-------- .../Adapter/MessageRecyclerViewAdapter.java | 6 ++---- .../infinityforreddit/FetchMessages.java | 4 ++-- .../Fragment/InboxFragment.java | 2 +- .../infinityforreddit/MessageDataSource.java | 2 +- .../infinityforreddit/ParseMessage.java | 2 +- .../PullNotificationWorker.java | 3 ++- 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/InboxActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/InboxActivity.java index 4a94d3ab..66072a2b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/InboxActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/InboxActivity.java @@ -49,6 +49,7 @@ import retrofit2.Retrofit; public class InboxActivity extends BaseActivity implements ActivityToolbarInterface { public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN"; + public static final String EXTRA_VIEW_MESSAGE = "EVM"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String ACCESS_TOKEN_STATE = "ATS"; @@ -123,13 +124,13 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE); if (!mNullAccessToken && mAccessToken == null) { - getCurrentAccountAndFetchMessage(); + getCurrentAccountAndFetchMessage(savedInstanceState); } else { - bindView(); + bindView(savedInstanceState); } } else { mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME); - getCurrentAccountAndFetchMessage(); + getCurrentAccountAndFetchMessage(savedInstanceState); } } @@ -150,7 +151,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf applyTabLayoutTheme(tabLayout); } - private void getCurrentAccountAndFetchMessage() { + private void getCurrentAccountAndFetchMessage(Bundle savedInstanceState) { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { if (mNewAccountName != null) { if (account == null || !account.getUsername().equals(mNewAccountName)) { @@ -165,11 +166,11 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf mAccessToken = newAccount.getAccessToken(); } - bindView(); + bindView(savedInstanceState); }).execute(); } else { mAccessToken = account.getAccessToken(); - bindView(); + bindView(savedInstanceState); } } else { if (account == null) { @@ -178,12 +179,12 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf mAccessToken = account.getAccessToken(); } - bindView(); + bindView(savedInstanceState); } }).execute(); } - private void bindView() { + private void bindView(Bundle savedInstanceState) { sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override @@ -198,6 +199,9 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf viewPager.setAdapter(sectionsPagerAdapter); viewPager.setOffscreenPageLimit(2); tabLayout.setupWithViewPager(viewPager); + if (savedInstanceState == null && getIntent().getBooleanExtra(EXTRA_VIEW_MESSAGE, false)) { + viewPager.setCurrentItem(1); + } } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java index bd9e5ed1..f450700b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java @@ -106,10 +106,8 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter { - if (mMessageType == FetchMessages.MESSAGE_TYPE_NOTIFICATION + if (mMessageType == FetchMessages.MESSAGE_TYPE_INBOX && message.getContext() != null && !message.getContext().equals("")) { Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext()); Intent intent = new Intent(mContext, LinkResolverActivity.class); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java index 8d929a15..a1a6552c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java @@ -21,9 +21,9 @@ public class FetchMessages { public static final String WHERE_COMMENTS = "comments"; public static final String WHERE_MESSAGES = "messages"; public static final String WHERE_MESSAGES_DETAIL = "messages_detail"; - public static final int MESSAGE_TYPE_NOTIFICATION = 0; + public static final int MESSAGE_TYPE_INBOX = 0; public static final int MESSAGE_TYPE_PRIVATE_MESSAGE = 1; - public static final int MESSAGE_TYPE_PRIVATE_MESSAGE_DETAIL = 2; + public static final int MESSAGE_TYPE_NOTIFICATION = 2; static void fetchInbox(Retrofit oauthRetrofit, Locale locale, String accessToken, String where, String after, int messageType, FetchMessagesListener fetchMessagesListener) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java index 1b7a12c9..9129bec2 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java @@ -102,7 +102,7 @@ public class InboxFragment extends Fragment implements FragmentCommunicator { mRecyclerView.setPadding(0, 0, 0, mActivity.getNavBarHeight()); } - mWhere = arguments.getString(EXTRA_MESSAGE_WHERE); + mWhere = arguments.getString(EXTRA_MESSAGE_WHERE, FetchMessages.WHERE_INBOX); mAdapter = new MessageRecyclerViewAdapter(mActivity, mOauthRetrofit, mCustomThemeWrapper, mAccessToken, mWhere, () -> mMessageViewModel.retryLoadingMore()); mLinearLayoutManager = new LinearLayoutManager(mActivity); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MessageDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MessageDataSource.java index 66fd7647..f81d1894 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MessageDataSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MessageDataSource.java @@ -32,7 +32,7 @@ class MessageDataSource extends PageKeyedDataSource { if (where.equals(FetchMessages.WHERE_MESSAGES)) { messageType = FetchMessages.MESSAGE_TYPE_PRIVATE_MESSAGE; } else { - messageType = FetchMessages.MESSAGE_TYPE_NOTIFICATION; + messageType = FetchMessages.MESSAGE_TYPE_INBOX; } paginationNetworkStateLiveData = new MutableLiveData<>(); initialLoadStateLiveData = new MutableLiveData<>(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseMessage.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseMessage.java index 5f704567..c605a5f3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseMessage.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseMessage.java @@ -44,7 +44,7 @@ public class ParseMessage { @Nullable private static Message parseSingleMessage(JSONObject messageJSON, Locale locale, int messageType) throws JSONException { String kind = messageJSON.getString(JSONUtils.KIND_KEY); - if ((messageType == FetchMessages.MESSAGE_TYPE_NOTIFICATION && kind.equals("t4")) || + if ((messageType == FetchMessages.MESSAGE_TYPE_INBOX && kind.equals("t4")) || (messageType == FetchMessages.MESSAGE_TYPE_PRIVATE_MESSAGE && !kind.equals("t4"))) { return null; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java index 67d7490e..52886ecb 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java @@ -98,7 +98,7 @@ public class PullNotificationWorker extends Worker { NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); - int messageSize = Math.min(messages.size(), 5); + int messageSize = Math.min(messages.size(), 20); long lastNotificationTime = mSharedPreferences.getLong(SharedPreferencesUtils.PULL_NOTIFICATION_TIME, -1L); boolean hasValidMessage = false; @@ -164,6 +164,7 @@ public class PullNotificationWorker extends Worker { } else if (kind.equals(Message.TYPE_MESSAGE)) { Intent intent = new Intent(context, InboxActivity.class); intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName); + intent.putExtra(InboxActivity.EXTRA_VIEW_MESSAGE, true); PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 3, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(summaryPendingIntent); } else if (kind.equals(Message.TYPE_SUBREDDIT)) {