aboutsummaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2020-07-01 13:48:39 +0000
committerAlex Ning <chineseperson5@gmail.com>2020-07-01 13:48:39 +0000
commiteff385ccd61caea2e272e378d572ca53b67a1e67 (patch)
tree9210412f0eeb6c293baa97b6e7ac49c570445c5e /app/src
parent707316c7ad674aab128b711b6ca94b68cf129a60 (diff)
downloadinfinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar.gz
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar.bz2
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar.lz
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar.xz
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.tar.zst
infinity-for-reddit-eff385ccd61caea2e272e378d572ca53b67a1e67.zip
Read all the replies when replying a message. Update the replied message in InboxFragment.
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java37
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java28
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/PrivateMessagesDetailRecyclerViewAdapter.java5
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Event/RepliedToPrivateMessageEvent.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java27
-rw-r--r--app/src/main/res/layout/activity_view_private_messages.xml1
6 files changed, 97 insertions, 14 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java
index 94bf8287..aecc78ab 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java
@@ -23,6 +23,8 @@ import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.snackbar.Snackbar;
import com.r0adkll.slidr.Slidr;
+import org.greenrobot.eventbus.EventBus;
+
import java.util.ArrayList;
import javax.inject.Inject;
@@ -35,9 +37,11 @@ import ml.docilealligator.infinityforreddit.Adapter.PrivateMessagesDetailRecycle
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.LoadUserDataAsyncTask;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
+import ml.docilealligator.infinityforreddit.Event.RepliedToPrivateMessageEvent;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.Message;
import ml.docilealligator.infinityforreddit.R;
+import ml.docilealligator.infinityforreddit.ReadMessage;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.ReplyMessage;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
@@ -46,6 +50,7 @@ import retrofit2.Retrofit;
public class ViewPrivateMessagesActivity extends BaseActivity implements ActivityToolbarInterface {
public static final String EXTRA_PRIVATE_MESSAGE = "EPM";
+ public static final String EXTRA_MESSAGE_POSITION = "EMP";
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS";
@@ -66,6 +71,8 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
EditText mEditText;
@BindView(R.id.send_image_view_view_private_messages_activity)
ImageView mSendImageView;
+ @BindView(R.id.edit_text_wrapper_linear_layout_view_private_messages_activity)
+ LinearLayout mEditTextLinearLayout;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@@ -163,9 +170,9 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
Message replyTo;
ArrayList<Message> replies = privateMessage.getReplies();
if (replies != null && !replies.isEmpty()) {
- replyTo = privateMessage;
- } else {
replyTo = replies.get(replies.size() - 1);
+ } else {
+ replyTo = privateMessage;
}
if (replyTo != null) {
ReplyMessage.replyMessage(mEditText.getText().toString(), replyTo.getFullname(),
@@ -178,6 +185,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
}
goToBottom();
mEditText.setText("");
+ EventBus.getDefault().post(new RepliedToPrivateMessageEvent(message, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1)));
}
@Override
@@ -189,6 +197,28 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
}
}
});
+ StringBuilder fullnames = new StringBuilder();
+ if (privateMessage.isNew()) {
+ fullnames.append(privateMessage.getFullname()).append(",");
+ }
+ if (replies != null && !replies.isEmpty()) {
+ for (Message m : replies) {
+ if (m.isNew()) {
+ fullnames.append(m).append(",");
+ }
+ }
+ }
+ if (fullnames.length() > 0) {
+ fullnames.deleteCharAt(fullnames.length() - 1);
+ ReadMessage.readMessage(mOauthRetrofit, mAccessToken, fullnames.toString(),
+ new ReadMessage.ReadMessageListener() {
+ @Override
+ public void readSuccess() {}
+
+ @Override
+ public void readFailed() {}
+ });
+ }
} else {
Snackbar.make(mCoordinatorLayout, R.string.error_getting_message, Snackbar.LENGTH_LONG).show();
}
@@ -259,6 +289,9 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
mLinearLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
applyAppBarLayoutAndToolbarTheme(mAppBarLayout, mToolbar);
mDivider.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
+ mEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
+ mEditText.setHintTextColor(mCustomThemeWrapper.getSecondaryTextColor());
+ mEditTextLinearLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
mSendImageView.setColorFilter(Color.parseColor("#4185F4"), android.graphics.PorterDuff.Mode.SRC_IN);
}
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 d3f010da..bd9e5ed1 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MessageRecyclerViewAdapter.java
@@ -18,6 +18,8 @@ import androidx.paging.PagedListAdapter;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
+import java.util.ArrayList;
+
import butterknife.BindView;
import butterknife.ButterKnife;
import io.noties.markwon.AbstractMarkwonPlugin;
@@ -137,6 +139,13 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
if (holder instanceof DataViewHolder) {
Message message = getItem(holder.getAdapterPosition());
if (message != null) {
+ ArrayList<Message> replies = message.getReplies();
+ Message displayedMessage;
+ if (replies != null && !replies.isEmpty() && replies.get(replies.size() - 1) != null) {
+ displayedMessage = replies.get(replies.size() - 1);
+ } else {
+ displayedMessage = message;
+ }
if (message.isNew()) {
((DataViewHolder) holder).itemView.setBackgroundColor(
mUnreadMessageBackgroundColor);
@@ -148,10 +157,10 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
}
- ((DataViewHolder) holder).authorTextView.setText(message.getAuthor());
- String subject = message.getSubject().substring(0, 1).toUpperCase() + message.getSubject().substring(1);
+ ((DataViewHolder) holder).authorTextView.setText(displayedMessage.getAuthor());
+ String subject = displayedMessage.getSubject().substring(0, 1).toUpperCase() + displayedMessage.getSubject().substring(1);
((DataViewHolder) holder).subjectTextView.setText(subject);
- mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getBody());
+ mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, displayedMessage.getBody());
((DataViewHolder) holder).itemView.setOnClickListener(view -> {
if (mMessageType == FetchMessages.MESSAGE_TYPE_NOTIFICATION
@@ -163,10 +172,11 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
} else if (mMessageType == FetchMessages.MESSAGE_TYPE_PRIVATE_MESSAGE) {
Intent intent = new Intent(mContext, ViewPrivateMessagesActivity.class);
intent.putExtra(ViewPrivateMessagesActivity.EXTRA_PRIVATE_MESSAGE, message);
+ intent.putExtra(ViewPrivateMessagesActivity.EXTRA_MESSAGE_POSITION, holder.getAdapterPosition());
mContext.startActivity(intent);
}
- if (message.isNew()) {
+ if (displayedMessage.isNew()) {
((DataViewHolder) holder).itemView.setBackgroundColor(mMessageBackgroundColor);
message.setNew(false);
@@ -247,6 +257,16 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
}
}
+ public void updateMessageReply(Message newReply, int position) {
+ if (position >= 0 && position < super.getItemCount()) {
+ Message message = getItem(position);
+ if (message != null) {
+ message.addReply(newReply);
+ notifyItemChanged(position);
+ }
+ }
+ }
+
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/PrivateMessagesDetailRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/PrivateMessagesDetailRecyclerViewAdapter.java
index 4b17a966..04bc5423 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/PrivateMessagesDetailRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/PrivateMessagesDetailRecyclerViewAdapter.java
@@ -112,10 +112,6 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
}
if (message != null) {
if (holder instanceof MessageViewHolder) {
- if (message.isNew()) {
- ((MessageViewHolder) holder).itemView.setBackgroundColor(
- mUnreadMessageBackgroundColor);
- }
mMarkwon.setMarkdown(((MessageViewHolder) holder).messageTextView, message.getBody());
((MessageViewHolder) holder).messageTextView.setOnClickListener(view -> ((MessageViewHolder) holder).itemView.performClick());
@@ -212,7 +208,6 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
this.messageTextView = messageTextView;
this.timeTextView = timeTextView;
- itemView.setBackgroundColor(mMessageBackgroundColor);
messageTextView.setTextColor(Color.WHITE);
timeTextView.setTextColor(mSecondaryTextColor);
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Event/RepliedToPrivateMessageEvent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Event/RepliedToPrivateMessageEvent.java
new file mode 100644
index 00000000..4e89b4ec
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Event/RepliedToPrivateMessageEvent.java
@@ -0,0 +1,13 @@
+package ml.docilealligator.infinityforreddit.Event;
+
+import ml.docilealligator.infinityforreddit.Message;
+
+public class RepliedToPrivateMessageEvent {
+ public Message newReply;
+ public int messagePosition;
+
+ public RepliedToPrivateMessageEvent(Message newReply, int messagePosition) {
+ this.newReply = newReply;
+ this.messagePosition = messagePosition;
+ }
+}
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 f8b9ad31..1b7a12c9 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/InboxFragment.java
@@ -21,6 +21,9 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+
import javax.inject.Inject;
import javax.inject.Named;
@@ -29,6 +32,8 @@ import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Activity.BaseActivity;
import ml.docilealligator.infinityforreddit.Adapter.MessageRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
+import ml.docilealligator.infinityforreddit.Event.RepliedToPrivateMessageEvent;
+import ml.docilealligator.infinityforreddit.FetchMessages;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.MessageViewModel;
@@ -63,6 +68,7 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
@Inject
CustomThemeWrapper mCustomThemeWrapper;
private String mAccessToken;
+ private String mWhere;
private MessageRecyclerViewAdapter mAdapter;
private RequestManager mGlide;
private LinearLayoutManager mLinearLayoutManager;
@@ -81,6 +87,8 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
ButterKnife.bind(this, rootView);
+ EventBus.getDefault().register(this);
+
applyTheme();
Bundle arguments = getArguments();
@@ -94,9 +102,9 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
mRecyclerView.setPadding(0, 0, 0, mActivity.getNavBarHeight());
}
- String where = arguments.getString(EXTRA_MESSAGE_WHERE);
+ mWhere = arguments.getString(EXTRA_MESSAGE_WHERE);
mAdapter = new MessageRecyclerViewAdapter(mActivity, mOauthRetrofit, mCustomThemeWrapper,
- mAccessToken, where, () -> mMessageViewModel.retryLoadingMore());
+ mAccessToken, mWhere, () -> mMessageViewModel.retryLoadingMore());
mLinearLayoutManager = new LinearLayoutManager(mActivity);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.setAdapter(mAdapter);
@@ -104,7 +112,7 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
mRecyclerView.addItemDecoration(dividerItemDecoration);
MessageViewModel.Factory factory = new MessageViewModel.Factory(mOauthRetrofit,
- getResources().getConfiguration().locale, mAccessToken, where);
+ getResources().getConfiguration().locale, mAccessToken, mWhere);
mMessageViewModel = new ViewModelProvider(this, factory).get(MessageViewModel.class);
mMessageViewModel.getMessages().observe(getViewLifecycleOwner(), messages -> mAdapter.submitList(messages));
@@ -169,8 +177,21 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ EventBus.getDefault().unregister(this);
+ }
+
+ @Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mActivity = (BaseActivity) context;
}
+
+ @Subscribe
+ public void onRepliedToPrivateMessageEvent(RepliedToPrivateMessageEvent repliedToPrivateMessageEvent) {
+ if (mAdapter != null && mWhere.equals(FetchMessages.WHERE_MESSAGES)) {
+ mAdapter.updateMessageReply(repliedToPrivateMessageEvent.newReply, repliedToPrivateMessageEvent.messagePosition);
+ }
+ }
} \ No newline at end of file
diff --git a/app/src/main/res/layout/activity_view_private_messages.xml b/app/src/main/res/layout/activity_view_private_messages.xml
index 728d5df1..bd0bfbe5 100644
--- a/app/src/main/res/layout/activity_view_private_messages.xml
+++ b/app/src/main/res/layout/activity_view_private_messages.xml
@@ -40,6 +40,7 @@
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<LinearLayout
+ android:id="@+id/edit_text_wrapper_linear_layout_view_private_messages_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"