diff options
author | Taesu Lee <taesu82.lee@samsung.com> | 2020-02-12 15:58:00 +0900 |
---|---|---|
committer | Luca Stefani <luca.stefani.ge1@gmail.com> | 2020-03-16 16:29:45 +0100 |
commit | 2151ff224d657573595aeff2d547b1dd48ab683e (patch) | |
tree | fee34a5941b1042b097043c6bc5fedbedf07ebf8 | |
parent | fbd77a9f2ae29cfc8dccffc251ea3d47910f37f2 (diff) | |
download | android_packages_apps_Messaging-2151ff224d657573595aeff2d547b1dd48ab683e.tar.gz android_packages_apps_Messaging-2151ff224d657573595aeff2d547b1dd48ab683e.tar.bz2 android_packages_apps_Messaging-2151ff224d657573595aeff2d547b1dd48ab683e.zip |
Show attachments size during composing MMS
It shows attachments size during composing MMS.
Note: Images could be resized before sending.
Test: Manual
Change-Id: I63eafe0d57259a7742ab839c4d96d595675e70e9
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
-rw-r--r-- | res/layout/compose_message_view.xml | 8 | ||||
-rw-r--r-- | res/values-ldrtl/styles.xml | 6 | ||||
-rw-r--r-- | res/values/colors.xml | 2 | ||||
-rw-r--r-- | res/values/dimens.xml | 2 | ||||
-rw-r--r-- | res/values/styles.xml | 6 | ||||
-rw-r--r-- | src/com/android/messaging/ui/conversation/ComposeMessageView.java | 105 |
6 files changed, 92 insertions, 37 deletions
diff --git a/res/layout/compose_message_view.xml b/res/layout/compose_message_view.xml index fd60e2a..8bb8249 100644 --- a/res/layout/compose_message_view.xml +++ b/res/layout/compose_message_view.xml @@ -88,8 +88,8 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - <!-- Contains compose message bubble and character counter for SMS which should be left - aligned --> + <!-- Contains compose message bubble and character counter for SMS or attachments size + for MMS which should be left aligned --> <LinearLayout android:layout_width="0dp" android:layout_weight="1" @@ -128,8 +128,8 @@ </LinearLayout> <TextView - android:id="@+id/char_counter" - style="@style/ComposeMessageViewTextCounterStyle" + android:id="@+id/message_body_size" + style="@style/ComposeMessageViewMessageBodySizeStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" diff --git a/res/values-ldrtl/styles.xml b/res/values-ldrtl/styles.xml index f106ce0..50e6c68 100644 --- a/res/values-ldrtl/styles.xml +++ b/res/values-ldrtl/styles.xml @@ -167,9 +167,9 @@ <item name="android:layout_marginStart">4dp</item> </style> - <style name="ComposeMessageViewTextCounterStyle"> - <item name="android:textColor">@color/message_text_counter_color</item> - <item name="android:textSize">@dimen/message_text_counter_size</item> + <style name="ComposeMessageViewMessageBodySizeStyle"> + <item name="android:textColor">@color/message_body_size_text_color</item> + <item name="android:textSize">@dimen/message_body_size_text_size</item> <item name="android:fontFamily">sans-serif</item> <item name="android:layout_gravity">end|center_vertical</item> <item name="android:paddingEnd">@dimen/compose_message_text_box_padding_side</item> diff --git a/res/values/colors.xml b/res/values/colors.xml index e55ad8e..480d03b 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -127,7 +127,7 @@ <color name="fab_pressed_color">#3ea4dc</color> <color name="fab_ripple">#40ffffff</color> - <color name="message_text_counter_color">#555555</color> + <color name="message_body_size_text_color">#555555</color> <color name="mms_indicator_color">#681faf</color> <color name="list_empty_text">#6d6d6d</color> <color name="low_storage_action_item_color">#ff000000</color> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index ff966d5..4934865 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -114,7 +114,7 @@ <dimen name="fab_elevation_pressed">6dp</dimen> <dimen name="fab_bottom_margin">12dp</dimen> <dimen name="fab_left_right_margin">14dp</dimen> - <dimen name="message_text_counter_size">12sp</dimen> + <dimen name="message_body_size_text_size">12sp</dimen> <dimen name="vcard_detail_group_indicator_width">40dp</dimen> <dimen name="mms_indicator_size">12sp</dimen> diff --git a/res/values/styles.xml b/res/values/styles.xml index 26a8020..b889852 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -357,9 +357,9 @@ <item name="android:dividerHeight">0dp</item> </style> - <style name="ComposeMessageViewTextCounterStyle"> - <item name="android:textColor">@color/message_text_counter_color</item> - <item name="android:textSize">@dimen/message_text_counter_size</item> + <style name="ComposeMessageViewMessageBodySizeStyle"> + <item name="android:textColor">@color/message_body_size_text_color</item> + <item name="android:textSize">@dimen/message_body_size_text_size</item> <item name="android:fontFamily">sans-serif</item> <item name="android:layout_gravity">right|center_vertical</item> <item name="android:paddingRight">@dimen/compose_message_text_box_padding_side</item> diff --git a/src/com/android/messaging/ui/conversation/ComposeMessageView.java b/src/com/android/messaging/ui/conversation/ComposeMessageView.java index bd63c98..ec0f06e 100644 --- a/src/com/android/messaging/ui/conversation/ComposeMessageView.java +++ b/src/com/android/messaging/ui/conversation/ComposeMessageView.java @@ -28,6 +28,7 @@ import android.text.InputFilter.LengthFilter; import android.text.InputType; import android.text.TextUtils; import android.text.TextWatcher; +import android.text.format.Formatter; import android.util.AttributeSet; import android.view.ContextThemeWrapper; import android.view.KeyEvent; @@ -68,7 +69,9 @@ import com.android.messaging.util.ContentType; import com.android.messaging.util.LogUtil; import com.android.messaging.util.MediaUtil; import com.android.messaging.util.OsUtil; +import com.android.messaging.util.SafeAsyncTask; import com.android.messaging.util.UiUtils; +import com.android.messaging.util.UriUtil; import org.lineageos.messaging.util.PrefsUtils; @@ -115,7 +118,7 @@ public class ComposeMessageView extends LinearLayout private PlainTextEditText mComposeEditText; private PlainTextEditText mComposeSubjectText; - private TextView mCharCounter; + private TextView mMessageBodySize; private TextView mMmsIndicator; private SimIconView mSelfSendIcon; private ImageButton mSendButton; @@ -174,7 +177,7 @@ public class ComposeMessageView extends LinearLayout final int counterColor = mHost.overrideCounterColor(); if (counterColor != -1) { - mCharCounter.setTextColor(counterColor); + mMessageBodySize.setTextColor(counterColor); } } @@ -320,7 +323,7 @@ public class ComposeMessageView extends LinearLayout mAttachmentPreview = (AttachmentPreview) findViewById(R.id.attachment_draft_view); mAttachmentPreview.setComposeMessageView(this); - mCharCounter = (TextView) findViewById(R.id.char_counter); + mMessageBodySize = (TextView) findViewById(R.id.message_body_size); mMmsIndicator = (TextView) findViewById(R.id.mms_indicator); } @@ -491,6 +494,8 @@ public class ComposeMessageView extends LinearLayout final String subject = data.getMessageSubject(); final String message = data.getMessageText(); + boolean hasAttachmentsChanged = false; + if ((changeFlags & DraftMessageData.MESSAGE_SUBJECT_CHANGED) == DraftMessageData.MESSAGE_SUBJECT_CHANGED) { mComposeSubjectText.setText(subject); @@ -511,12 +516,13 @@ public class ComposeMessageView extends LinearLayout DraftMessageData.ATTACHMENTS_CHANGED) { final boolean haveAttachments = mAttachmentPreview.onAttachmentsChanged(data); mHost.onAttachmentsChanged(haveAttachments); + hasAttachmentsChanged = true; } if ((changeFlags & DraftMessageData.SELF_CHANGED) == DraftMessageData.SELF_CHANGED) { updateOnSelfSubscriptionChange(); } - updateVisualsOnDraftChanged(); + updateVisualsOnDraftChanged(hasAttachmentsChanged); } @Override // From DraftMessageDataListener @@ -635,7 +641,44 @@ public class ComposeMessageView extends LinearLayout mConversationDataModel.getData().getParticipantsLoaded(); } + private static class AsyncUpdateMessageBodySizeTask + extends SafeAsyncTask<List<MessagePartData>, Void, Long> { + + private final Context mContext; + private final TextView mSizeTextView; + + public AsyncUpdateMessageBodySizeTask(final Context context, final TextView tv) { + mContext = context; + mSizeTextView = tv; + } + + @Override + protected Long doInBackgroundTimed(final List<MessagePartData>... params) { + final List<MessagePartData> attachments = params[0]; + long totalSize = 0; + for (final MessagePartData attachment : attachments) { + final Uri contentUri = attachment.getContentUri(); + if (contentUri != null) { + totalSize += UriUtil.getContentSize(attachment.getContentUri()); + } + } + return totalSize; + } + + @Override + protected void onPostExecute(Long size) { + if (mSizeTextView != null) { + mSizeTextView.setText(Formatter.formatFileSize(mContext, size)); + mSizeTextView.setVisibility(View.VISIBLE); + } + } + } + private void updateVisualsOnDraftChanged() { + updateVisualsOnDraftChanged(false); + } + + private void updateVisualsOnDraftChanged(boolean hasAttachmentsChanged) { final String messageText = mComposeEditText.getText().toString(); final DraftMessageData draftMessageData = mBinding.getData(); draftMessageData.setMessageText(messageText); @@ -651,26 +694,39 @@ public class ComposeMessageView extends LinearLayout final boolean hasWorkingDraft = hasMessageText || hasSubject || mBinding.getData().hasAttachments(); - // Update the SMS text counter. - final int messageCount = draftMessageData.getNumMessagesToBeSent(); - final int codePointsRemaining = draftMessageData.getCodePointsRemainingInCurrentMessage(); - // Show the counter only if: - // - We are not in MMS mode - // - We are going to send more than one message OR we are getting close - boolean showCounter = false; - if (!draftMessageData.getIsMms() && (messageCount > 1 || - codePointsRemaining <= CODEPOINTS_REMAINING_BEFORE_COUNTER_SHOWN)) { - showCounter = true; - } - - if (showCounter) { - // Update the remaining characters and number of messages required. - final String counterText = messageCount > 1 ? codePointsRemaining + " / " + - messageCount : String.valueOf(codePointsRemaining); - mCharCounter.setText(counterText); - mCharCounter.setVisibility(View.VISIBLE); - } else { - mCharCounter.setVisibility(View.INVISIBLE); + final List<MessagePartData> attachments = draftMessageData.getReadOnlyAttachments(); + if (draftMessageData.getIsMms()) { // MMS case + if (draftMessageData.hasAttachments()) { + if (hasAttachmentsChanged) { + // Calculate message attachments size and show it. + new AsyncUpdateMessageBodySizeTask(getContext(), mMessageBodySize) + .executeOnThreadPool(attachments, null, null); + } else { + // No update. Just show previous size. + mMessageBodySize.setVisibility(View.VISIBLE); + } + } else { + mMessageBodySize.setVisibility(View.INVISIBLE); + } + } else { // SMS case + // Update the SMS text counter. + final int messageCount = draftMessageData.getNumMessagesToBeSent(); + final int codePointsRemaining = + draftMessageData.getCodePointsRemainingInCurrentMessage(); + // Show the counter only if we are going to send more than one message OR we are getting + // close. + if (messageCount > 1 + || codePointsRemaining <= CODEPOINTS_REMAINING_BEFORE_COUNTER_SHOWN) { + // Update the remaining characters and number of messages required. + final String counterText = + messageCount > 1 + ? codePointsRemaining + " / " + messageCount + : String.valueOf(codePointsRemaining); + mMessageBodySize.setText(counterText); + mMessageBodySize.setVisibility(View.VISIBLE); + } else { + mMessageBodySize.setVisibility(View.INVISIBLE); + } } // Update the send message button. Self icon uri might be null if self participant data @@ -710,7 +766,6 @@ public class ComposeMessageView extends LinearLayout } // Update the text hint on the message box depending on the attachment type. - final List<MessagePartData> attachments = draftMessageData.getReadOnlyAttachments(); final int attachmentCount = attachments.size(); if (attachmentCount == 0) { final SubscriptionListEntry subscriptionListEntry = |