From 092dad03b7464ba0e4e7cfba7c3d9dbc526fe45f Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 17 Jun 2021 14:34:50 +1000 Subject: [PATCH] Add expanding attachment buttons --- .../conversation/v2/ConversationActivityV2.kt | 29 +++++++++++++--- .../v2/input_bar/InputBarButton.kt | 20 ++++++++--- .../res/layout/activity_conversation_v2.xml | 34 +++++++++++++++++++ .../main/res/values-notnight-v21/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + 5 files changed, 75 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index d28ca345fc..a8d853a76f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -23,6 +23,7 @@ import kotlinx.android.synthetic.main.view_input_bar_recording.* import kotlinx.android.synthetic.main.view_input_bar_recording.view.* import network.loki.messenger.R import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity +import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarButton import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarDelegate import org.thoughtcrime.securesms.conversation.v2.menus.ConversationActionModeCallback import org.thoughtcrime.securesms.conversation.v2.menus.ConversationMenuHelper @@ -36,7 +37,6 @@ import kotlin.math.roundToInt import kotlin.math.sqrt class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDelegate { - private val lockViewExpansionMargin by lazy { toDp(3, resources) } private val lockViewHitMargin by lazy { toPx(40, resources) } private var threadID: Long = -1 private var actionMode: ActionMode? = null @@ -70,9 +70,12 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe private val glide by lazy { GlideApp.with(this) } - private val screenWidth by lazy { - Resources.getSystem().displayMetrics.widthPixels - } + private val screenWidth by lazy { Resources.getSystem().displayMetrics.widthPixels } + + private val gifButton by lazy { InputBarButton(this, R.drawable.ic_gif_white_24dp, hasOpaqueBackground = true) } + private val documentButton by lazy { InputBarButton(this, R.drawable.ic_document_small_dark, hasOpaqueBackground = true) } + private val libraryButton by lazy { InputBarButton(this, R.drawable.ic_baseline_photo_library_24, hasOpaqueBackground = true) } + private val cameraButton by lazy { InputBarButton(this, R.drawable.ic_baseline_photo_camera_24, hasOpaqueBackground = true) } // region Settings companion object { @@ -87,7 +90,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe threadID = intent.getLongExtra(THREAD_ID, -1) setUpRecyclerView() setUpToolBar() - inputBar.delegate = this + setUpInputBar() } private fun setUpRecyclerView() { @@ -120,6 +123,22 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe profilePictureView.update(thread, threadID) } + private fun setUpInputBar() { + inputBar.delegate = this + // GIF button + gifButtonContainer.addView(gifButton) + gifButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) + // Document button + documentButtonContainer.addView(documentButton) + documentButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) + // Library button + libraryButtonContainer.addView(libraryButton) + libraryButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) + // Camera button + cameraButtonContainer.addView(cameraButton) + cameraButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) + } + override fun onPrepareOptionsMenu(menu: Menu): Boolean { ConversationMenuHelper.onPrepareOptionsMenu(menu, menuInflater, thread, this) { onOptionsItemSelected(it) } super.onPrepareOptionsMenu(menu) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt index 08a2ece80c..cf95a7c4eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt @@ -27,6 +27,7 @@ import kotlin.math.abs class InputBarButton : RelativeLayout { private val gestureHandler = Handler(Looper.getMainLooper()) private var isSendButton = false + private var hasOpaqueBackground = false @DrawableRes private var iconID = 0 private var longPressCallback: Runnable? = null private var onDownTimestamp = 0L @@ -43,7 +44,15 @@ class InputBarButton : RelativeLayout { private val expandedImageViewPosition by lazy { PointF(0.0f, 0.0f) } private val collapsedImageViewPosition by lazy { PointF((expandedSize - collapsedSize) / 2, (expandedSize - collapsedSize) / 2) } - private val defaultColorID by lazy { if (isSendButton) R.color.accent else R.color.input_bar_button_background } + private val colorID by lazy { + if (hasOpaqueBackground) { + R.color.input_bar_button_background_opaque + } else if (isSendButton) { + R.color.accent + } else { + R.color.input_bar_button_background + } + } val expandedSize by lazy { resources.getDimension(R.dimen.input_bar_button_expanded_size) } val collapsedSize by lazy { resources.getDimension(R.dimen.input_bar_button_collapsed_size) } @@ -53,7 +62,7 @@ class InputBarButton : RelativeLayout { val size = collapsedSize.toInt() result.layoutParams = LayoutParams(size, size) result.setBackgroundResource(R.drawable.input_bar_button_background) - result.mainColor = resources.getColorWithID(defaultColorID, context.theme) + result.mainColor = resources.getColorWithID(colorID, context.theme) result } @@ -72,9 +81,10 @@ class InputBarButton : RelativeLayout { constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { throw IllegalAccessException("Use InputBarButton(context:iconID:) instead.") } constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { throw IllegalAccessException("Use InputBarButton(context:iconID:) instead.") } - constructor(context: Context, @DrawableRes iconID: Int, isSendButton: Boolean = false) : super(context) { + constructor(context: Context, @DrawableRes iconID: Int, isSendButton: Boolean = false, hasOpaqueBackground: Boolean = false) : super(context) { this.isSendButton = isSendButton this.iconID = iconID + this.hasOpaqueBackground = hasOpaqueBackground val size = resources.getDimension(R.dimen.input_bar_button_expanded_size).toInt() val layoutParams = LayoutParams(size, size) this.layoutParams = layoutParams @@ -90,13 +100,13 @@ class InputBarButton : RelativeLayout { } fun expand() { - GlowViewUtilities.animateColorChange(context, imageViewContainer, defaultColorID, R.color.accent) + GlowViewUtilities.animateColorChange(context, imageViewContainer, colorID, R.color.accent) imageViewContainer.animateSizeChange(R.dimen.input_bar_button_collapsed_size, R.dimen.input_bar_button_expanded_size, animationDuration) animateImageViewContainerPositionChange(collapsedImageViewPosition, expandedImageViewPosition) } fun collapse() { - GlowViewUtilities.animateColorChange(context, imageViewContainer, R.color.accent, defaultColorID) + GlowViewUtilities.animateColorChange(context, imageViewContainer, R.color.accent, colorID) imageViewContainer.animateSizeChange(R.dimen.input_bar_button_expanded_size, R.dimen.input_bar_button_collapsed_size, animationDuration) animateImageViewContainerPositionChange(expandedImageViewPosition, collapsedImageViewPosition) } diff --git a/app/src/main/res/layout/activity_conversation_v2.xml b/app/src/main/res/layout/activity_conversation_v2.xml index d50a07e101..0c7582aca9 100644 --- a/app/src/main/res/layout/activity_conversation_v2.xml +++ b/app/src/main/res/layout/activity_conversation_v2.xml @@ -12,6 +12,40 @@ android:layout_height="match_parent" android:layout_marginBottom="@dimen/input_bar_height" /> + + + + + + + + + + + + #FFFFFF #FCFCFC #0D000000 + #EFEFEF #FCFCFC #66000000 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bc99fea95b..45d1eb8454 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -29,6 +29,7 @@ #000000 #171717 #0DFFFFFF + #232323 #171717 #66FFFFFF