From d06f66975e40ebbf599ea66ed4c9794de085a890 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Fri, 17 Jul 2020 16:13:55 +0800 Subject: Add a boolean variable isSendingMessage to avoid sending multiple messages before the first message is sent in ViewPrivateMessageActivity. When the message is being sent, the send button will have a secondary text color. Use wrap_content for comment content in item_comment. --- .../Activity/ViewPrivateMessagesActivity.java | 138 +++++++++++++-------- .../infinityforreddit/Message/Message.java | 14 ++- .../infinityforreddit/Message/ParseMessage.java | 3 +- .../infinityforreddit/Utils/JSONUtils.java | 1 + app/src/main/res/layout/item_comment.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 99 insertions(+), 61 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 ea162250..80cff550 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPrivateMessagesActivity.java @@ -92,6 +92,9 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit private String mUserAvatar; private ArrayList mProvideUserAvatarCallbacks; private LoadUserDataAsyncTask mLoadUserDataAsyncTask; + private boolean isSendingMessage = false; + private int mSecondaryTextColor; + private int mSendMessageIconColor; @Override protected void onCreate(Bundle savedInstanceState) { @@ -114,9 +117,6 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit Intent intent = getIntent(); privateMessage = intent.getParcelableExtra(EXTRA_PRIVATE_MESSAGE); - if (privateMessage != null) { - mToolbar.setTitle(privateMessage.getSubject()); - } setSupportActionBar(mToolbar); setToolbarGoToTop(mToolbar); @@ -151,6 +151,23 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit } private void bindView() { + if (privateMessage != null) { + if (privateMessage.getAuthor().equals(mAccountName)) { + mToolbar.setTitle(privateMessage.getDestination()); + mToolbar.setOnClickListener(view -> { + Intent intent = new Intent(this, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getDestination()); + startActivity(intent); + }); + } else { + mToolbar.setTitle(privateMessage.getAuthor()); + mToolbar.setOnClickListener(view -> { + Intent intent = new Intent(this, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getAuthor()); + startActivity(intent); + }); + } + } mAdapter = new PrivateMessagesDetailRecyclerViewAdapter(this, mSharedPreferences, getResources().getConfiguration().locale, privateMessage, mAccountName, mCustomThemeWrapper); mLinearLayoutManager = new LinearLayoutManager(this); @@ -159,63 +176,72 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit mRecyclerView.setAdapter(mAdapter); goToBottom(); mSendImageView.setOnClickListener(view -> { - if (!mEditText.getText().toString().equals("")) { - //Send Message - if (privateMessage != null) { - Message replyTo; - ArrayList replies = privateMessage.getReplies(); - if (replies != null && !replies.isEmpty()) { - replyTo = replies.get(replies.size() - 1); - } else { - replyTo = privateMessage; - } - if (replyTo != null) { - ReplyMessage.replyMessage(mEditText.getText().toString(), replyTo.getFullname(), - getResources().getConfiguration().locale, mOauthRetrofit, mAccessToken, - new ReplyMessage.ReplyMessageListener() { - @Override - public void replyMessageSuccess(Message message) { - if (mAdapter != null) { - mAdapter.addReply(message); - } - goToBottom(); - mEditText.setText(""); - EventBus.getDefault().post(new RepliedToPrivateMessageEvent(message, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1))); - } - - @Override - public void replyMessageFailed(String errorMessage) { - if (errorMessage != null && !errorMessage.equals("")) { - Snackbar.make(mCoordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show(); - } else { - Snackbar.make(mCoordinatorLayout, R.string.reply_message_failed, Snackbar.LENGTH_LONG).show(); - } - } - }); - StringBuilder fullnames = new StringBuilder(); - if (privateMessage.isNew()) { - fullnames.append(privateMessage.getFullname()).append(","); - } + if (!isSendingMessage) { + if (!mEditText.getText().toString().equals("")) { + //Send Message + if (privateMessage != null) { + Message replyTo; + ArrayList replies = privateMessage.getReplies(); if (replies != null && !replies.isEmpty()) { - for (Message m : replies) { - if (m.isNew()) { - fullnames.append(m).append(","); - } - } + replyTo = replies.get(replies.size() - 1); + } else { + replyTo = privateMessage; } - if (fullnames.length() > 0) { - fullnames.deleteCharAt(fullnames.length() - 1); - ReadMessage.readMessage(mOauthRetrofit, mAccessToken, fullnames.toString(), - new ReadMessage.ReadMessageListener() { + if (replyTo != null) { + isSendingMessage = true; + mSendImageView.setColorFilter(mSecondaryTextColor, android.graphics.PorterDuff.Mode.SRC_IN); + ReplyMessage.replyMessage(mEditText.getText().toString(), replyTo.getFullname(), + getResources().getConfiguration().locale, mOauthRetrofit, mAccessToken, + new ReplyMessage.ReplyMessageListener() { @Override - public void readSuccess() {} + public void replyMessageSuccess(Message message) { + if (mAdapter != null) { + mAdapter.addReply(message); + } + goToBottom(); + mEditText.setText(""); + mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN); + isSendingMessage = false; + EventBus.getDefault().post(new RepliedToPrivateMessageEvent(message, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1))); + } @Override - public void readFailed() {} + public void replyMessageFailed(String errorMessage) { + if (errorMessage != null && !errorMessage.equals("")) { + Snackbar.make(mCoordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show(); + } else { + Snackbar.make(mCoordinatorLayout, R.string.reply_message_failed, Snackbar.LENGTH_LONG).show(); + } + mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN); + isSendingMessage = false; + } }); + 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 { + isSendingMessage = false; + Snackbar.make(mCoordinatorLayout, R.string.error_getting_message, Snackbar.LENGTH_LONG).show(); } - } else { - Snackbar.make(mCoordinatorLayout, R.string.error_getting_message, Snackbar.LENGTH_LONG).show(); } } } @@ -285,9 +311,11 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit applyAppBarLayoutAndToolbarTheme(mAppBarLayout, mToolbar); mDivider.setBackgroundColor(mCustomThemeWrapper.getDividerColor()); mEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor()); - mEditText.setHintTextColor(mCustomThemeWrapper.getSecondaryTextColor()); + mSecondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor(); + mEditText.setHintTextColor(mSecondaryTextColor); mEditTextLinearLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor()); - mSendImageView.setColorFilter(mCustomThemeWrapper.getSendMessageIconColor(), android.graphics.PorterDuff.Mode.SRC_IN); + mSendMessageIconColor = mCustomThemeWrapper.getSendMessageIconColor(); + mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN); } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Message/Message.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Message/Message.java index a53b11f2..771d675e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Message/Message.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Message/Message.java @@ -20,6 +20,7 @@ public class Message implements Parcelable { private String fullname; private String subject; private String author; + private String destination; private String parentFullName; private String title; private String body; @@ -34,9 +35,9 @@ public class Message implements Parcelable { private ArrayList replies; Message(String kind, String subredditName, String subredditNamePrefixed, String id, String fullname, - String subject, String author, String parentFullName, String title, String body, String context, - String distinguished, String formattedTime, boolean wasComment, boolean isNew, int score, - int nComments, long timeUTC) { + String subject, String author, String destination, String parentFullName, String title, String body, + String context, String distinguished, String formattedTime, boolean wasComment, boolean isNew, + int score, int nComments, long timeUTC) { this.kind = kind; this.subredditName = subredditName; this.subredditNamePrefixed = subredditNamePrefixed; @@ -44,6 +45,7 @@ public class Message implements Parcelable { this.fullname = fullname; this.subject = subject; this.author = author; + this.destination = destination; this.parentFullName = parentFullName; this.title = title; this.body = body; @@ -66,6 +68,7 @@ public class Message implements Parcelable { fullname = in.readString(); subject = in.readString(); author = in.readString(); + destination = in.readString(); parentFullName = in.readString(); title = in.readString(); body = in.readString(); @@ -120,6 +123,10 @@ public class Message implements Parcelable { return author; } + public String getDestination() { + return destination; + } + public String getParentFullName() { return parentFullName; } @@ -197,6 +204,7 @@ public class Message implements Parcelable { parcel.writeString(fullname); parcel.writeString(subject); parcel.writeString(author); + parcel.writeString(destination); parcel.writeString(parentFullName); parcel.writeString(title); parcel.writeString(body); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Message/ParseMessage.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Message/ParseMessage.java index 6d489703..410d1886 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Message/ParseMessage.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Message/ParseMessage.java @@ -60,6 +60,7 @@ public class ParseMessage { String fullname = rawMessageJSON.getString(JSONUtils.NAME_KEY); String subject = rawMessageJSON.getString(JSONUtils.SUBJECT_KEY); String author = rawMessageJSON.getString(JSONUtils.AUTHOR_KEY); + String destination = rawMessageJSON.getString(JSONUtils.DEST_KEY); String parentFullname = rawMessageJSON.getString(JSONUtils.PARENT_ID_KEY); String title = rawMessageJSON.has(JSONUtils.LINK_TITLE_KEY) ? rawMessageJSON.getString(JSONUtils.LINK_TITLE_KEY) : null; String body = Utils.modifyMarkdown(rawMessageJSON.getString(JSONUtils.BODY_KEY)); @@ -84,7 +85,7 @@ public class ParseMessage { } Message message = new Message(kind, subredditName, subredditNamePrefixed, id, fullname, subject, - author, parentFullname, title, body, context, distinguished, formattedTime, + author, destination, parentFullname, title, body, context, distinguished, formattedTime, wasComment, isNew, score, nComments, timeUTC); if (replies != null) { message.setReplies(replies); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java index 28c6ddfe..1c47eb2a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java @@ -121,4 +121,5 @@ public class JSONUtils { public static final String S_KEY = "s"; public static final String X_KEY = "x"; public static final String Y_KEY = "y"; + public static final String DEST_KEY = "dest"; } diff --git a/app/src/main/res/layout/item_comment.xml b/app/src/main/res/layout/item_comment.xml index dee6d50c..e2ab9170 100644 --- a/app/src/main/res/layout/item_comment.xml +++ b/app/src/main/res/layout/item_comment.xml @@ -106,7 +106,7 @@ Autoplay Videos Visible Area Offset (Landscape) Start autoplaying videos when %1$d%% of them are visible Immersive Interface - Does Not Apply to All Pages + Does Not Apply to All Pages\nMay Not Work On Android 11 Ignore Navigation Bar in Immersive Interface Prevent the Bottom Navigation Bar Having Extra Padding Customize Tabs in Main Page -- cgit v1.2.3