From 53c60e1f6d0599d881fcd9239f3da52f6b831686 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 17 Jun 2022 13:45:44 -0300 Subject: [PATCH] Add proper coloring to send buttons. --- .../ContactShareEditActivity.java | 14 +++-- .../conversation/ConversationFragment.java | 4 +- .../ConversationParentFragment.java | 9 +++- .../forward/MultiselectForwardFragment.kt | 11 ++++ .../forward/MultiselectForwardFragmentArgs.kt | 8 ++- .../securesms/maps/PlacePickerActivity.java | 11 ++-- .../securesms/mms/AttachmentManager.java | 5 +- .../layout/activity_contact_share_edit.xml | 22 ++++---- .../layout/activity_map_bottom_sheet_view.xml | 52 +++++++++---------- ...ultiselect_forward_fragment_bottom_bar.xml | 34 ++++++------ 10 files changed, 105 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditActivity.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditActivity.java index 5c64c9297..8599fcf16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditActivity.java @@ -3,21 +3,24 @@ package org.thoughtcrime.securesms.contactshare; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.Toast; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicTheme; @@ -31,8 +34,9 @@ import static org.thoughtcrime.securesms.contactshare.ContactShareEditViewModel. public class ContactShareEditActivity extends PassphraseRequiredActivity implements ContactShareEditAdapter.EventListener { - public static final String KEY_CONTACTS = "contacts"; - private static final String KEY_CONTACT_URIS = "contact_uris"; + public static final String KEY_CONTACTS = "contacts"; + private static final String KEY_CONTACT_URIS = "contact_uris"; + private static final String KEY_SEND_BUTTON_COLOR = "send_button_color"; private static final int CODE_NAME_EDIT = 55; private final DynamicTheme dynamicTheme = new DynamicTheme(); @@ -40,11 +44,12 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme private ContactShareEditViewModel viewModel; - public static Intent getIntent(@NonNull Context context, @NonNull List contactUris) { + public static Intent getIntent(@NonNull Context context, @NonNull List contactUris, @ColorInt int sendButtonColor) { ArrayList contactUriList = new ArrayList<>(contactUris); Intent intent = new Intent(context, ContactShareEditActivity.class); intent.putParcelableArrayListExtra(KEY_CONTACT_URIS, contactUriList); + intent.putExtra(KEY_SEND_BUTTON_COLOR, sendButtonColor); return intent; } @@ -68,6 +73,7 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme } View sendButton = findViewById(R.id.contact_share_edit_send); + ViewCompat.setBackgroundTintList(sendButton, ColorStateList.valueOf(getIntent().getIntExtra(KEY_SEND_BUTTON_COLOR, Color.RED))); sendButton.setOnClickListener(v -> onSendClicked(viewModel.getFinalizedContacts())); RecyclerView contactList = findViewById(R.id.contact_share_edit_list); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index afbaf7ed3..2536eb4d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -1100,7 +1100,8 @@ public class ConversationFragment extends LoggingFragment implements Multiselect MultiselectForwardFragmentArgs.create(requireContext(), multiselectParts, - args -> MultiselectForwardFragment.showBottomSheet(getChildFragmentManager(), args)); + args -> MultiselectForwardFragment.showBottomSheet(getChildFragmentManager(), + args.withSendButtonTint(listener.getSendButtonTint()))); } private void handleResendMessage(final MessageRecord message) { @@ -1426,6 +1427,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect } public interface ConversationFragmentListener extends VoiceNoteMediaControllerOwner { + int getSendButtonTint(); boolean isKeyboardOpen(); boolean isAttachmentKeyboardOpen(); void openAttachmentKeyboard(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 0abda3086..ca511994a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -1249,7 +1249,7 @@ public class ConversationParentFragment extends Fragment AttachmentManager.selectContactInfo(this, PICK_CONTACT); break; case LOCATION: - AttachmentManager.selectLocation(this, PICK_LOCATION); + AttachmentManager.selectLocation(this, PICK_LOCATION, getSendButtonColor(sendButton.getSelectedSendType())); break; case PAYMENT: if (recipient.get().hasProfileKeyCredential()) { @@ -2743,7 +2743,7 @@ public class ConversationParentFragment extends Fragment } private void openContactShareEditor(Uri contactUri) { - Intent intent = ContactShareEditActivity.getIntent(requireContext(), Collections.singletonList(contactUri)); + Intent intent = ContactShareEditActivity.getIntent(requireContext(), Collections.singletonList(contactUri), getSendButtonColor(sendButton.getSelectedSendType())); startActivityForResult(intent, GET_CONTACT_DETAILS); } @@ -3953,6 +3953,11 @@ public class ConversationParentFragment extends Fragment }); } + @Override + public int getSendButtonTint() { + return getSendButtonColor(sendButton.getSelectedSendType()); + } + @Override public boolean isKeyboardOpen() { return container.isKeyboardOpen(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt index 545e7ab19..e02417a59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.conversation.mutiselect.forward +import android.content.res.ColorStateList import android.graphics.Rect import android.os.Bundle import android.os.Handler @@ -13,6 +14,7 @@ import android.widget.EditText import android.widget.TextView import android.widget.Toast import androidx.annotation.PluralsRes +import androidx.core.view.ViewCompat import androidx.core.view.doOnNextLayout import androidx.core.view.isVisible import androidx.fragment.app.DialogFragment @@ -95,6 +97,9 @@ class MultiselectForwardFragment : private val isSelectionOnly: Boolean get() = requireArguments().getBoolean(ARG_FORCE_SELECTION_ONLY, false) + private val sendButtonTint: Int + get() = requireArguments().getInt(ARG_SEND_BUTTON_TINT, -1) + override fun onGetLayoutInflater(savedInstanceState: Bundle?): LayoutInflater { return if (parentFragment != null) { requireParentFragment().onGetLayoutInflater(savedInstanceState) @@ -135,6 +140,10 @@ class MultiselectForwardFragment : val sendButton: View = bottomBar.findViewById(R.id.share_confirm) val backgroundHelper: View = bottomBar.findViewById(R.id.background_helper) + if (sendButtonTint != -1) { + ViewCompat.setBackgroundTintList(sendButton, ColorStateList.valueOf(sendButtonTint)) + } + FullscreenHelper.configureBottomBarLayout(requireActivity(), bottomBarSpacer, bottomBar) backgroundHelper.setBackgroundColor(callback.getDialogBackgroundColor()) @@ -439,6 +448,7 @@ class MultiselectForwardFragment : const val ARG_FORCE_DISABLE_ADD_MESSAGE = "multiselect.forward.fragment.force.disable.add.message" const val ARG_FORCE_SELECTION_ONLY = "multiselect.forward.fragment.force.disable.add.message" const val ARG_SELECT_SINGLE_RECIPIENT = "multiselect.forward.framgent.select.single.recipient" + const val ARG_SEND_BUTTON_TINT = "multiselect.forward.fragment.send.button.tint" const val RESULT_KEY = "result_key" const val RESULT_SELECTION = "result_selection_recipients" const val RESULT_SENT = "result_sent" @@ -478,6 +488,7 @@ class MultiselectForwardFragment : putBoolean(ARG_FORCE_DISABLE_ADD_MESSAGE, multiselectForwardFragmentArgs.forceDisableAddMessage) putBoolean(ARG_FORCE_SELECTION_ONLY, multiselectForwardFragmentArgs.forceSelectionOnly) putBoolean(ARG_SELECT_SINGLE_RECIPIENT, multiselectForwardFragmentArgs.selectSingleRecipient) + putInt(ARG_SEND_BUTTON_TINT, multiselectForwardFragmentArgs.sendButtonTint) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt index c4cd7a332..6bf066a51 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.conversation.mutiselect.forward import android.content.Context import android.net.Uri +import androidx.annotation.ColorInt import androidx.annotation.StringRes import androidx.annotation.WorkerThread import org.signal.core.util.StreamUtil @@ -30,15 +31,18 @@ import java.util.function.Consumer * @param forceSelectionOnly Force the fragment to only select recipients, never actually performing the send. * @param selectSingleRecipient Only allow the selection of a single recipient. */ -class MultiselectForwardFragmentArgs @JvmOverloads constructor( +data class MultiselectForwardFragmentArgs @JvmOverloads constructor( val canSendToNonPush: Boolean, val multiShareArgs: List = listOf(), @StringRes val title: Int = R.string.MultiselectForwardFragment__forward_to, val forceDisableAddMessage: Boolean = false, val forceSelectionOnly: Boolean = false, - val selectSingleRecipient: Boolean = false + val selectSingleRecipient: Boolean = false, + @ColorInt val sendButtonTint: Int = -1 ) { + fun withSendButtonTint(@ColorInt sendButtonTint: Int) = copy(sendButtonTint = sendButtonTint) + companion object { @JvmStatic fun create(context: Context, mediaUri: Uri, mediaType: String, consumer: Consumer) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java index 20a0233cb..5b944b8e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java @@ -4,6 +4,8 @@ import android.Manifest; import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.location.Address; import android.location.Geocoder; import android.os.AsyncTask; @@ -12,10 +14,12 @@ import android.os.Bundle; import android.view.View; import android.view.animation.OvershootInterpolator; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import com.google.android.gms.maps.CameraUpdateFactory; @@ -46,6 +50,7 @@ public final class PlacePickerActivity extends AppCompatActivity { private static final int ANIMATION_DURATION = 250; private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(); + private static final String KEY_CHAT_COLOR = "chat_color"; private SingleAddressBottomSheet bottomSheet; private Address currentAddress; @@ -54,8 +59,8 @@ public final class PlacePickerActivity extends AppCompatActivity { private AddressLookup addressLookup; private GoogleMap googleMap; - public static void startActivityForResultAtCurrentLocation(@NonNull Fragment fragment, int requestCode) { - fragment.startActivityForResult(new Intent(fragment.requireActivity(), PlacePickerActivity.class), requestCode); + public static void startActivityForResultAtCurrentLocation(@NonNull Fragment fragment, int requestCode, @ColorInt int chatColor) { + fragment.startActivityForResult(new Intent(fragment.requireActivity(), PlacePickerActivity.class).putExtra(KEY_CHAT_COLOR, chatColor), requestCode); } public static AddressData addressFromData(@NonNull Intent data) { @@ -71,9 +76,9 @@ public final class PlacePickerActivity extends AppCompatActivity { View markerImage = findViewById(R.id.marker_image_view); View fab = findViewById(R.id.place_chosen_button); + ViewCompat.setBackgroundTintList(fab, ColorStateList.valueOf(getIntent().getIntExtra(KEY_CHAT_COLOR, Color.RED))); fab.setOnClickListener(v -> finishWithAddress()); - if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index de29f1721..2c3653978 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -33,6 +33,7 @@ import android.util.Pair; import android.view.View; import android.widget.Toast; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; @@ -395,12 +396,12 @@ public class AttachmentManager { .execute(); } - public static void selectLocation(Fragment fragment, int requestCode) { + public static void selectLocation(Fragment fragment, int requestCode, @ColorInt int chatColor) { Permissions.with(fragment) .request(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION) .ifNecessary() .withPermanentDenialDialog(fragment.getString(R.string.AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location)) - .onAllGranted(() -> PlacePickerActivity.startActivityForResultAtCurrentLocation(fragment, requestCode)) + .onAllGranted(() -> PlacePickerActivity.startActivityForResultAtCurrentLocation(fragment, requestCode, chatColor)) .execute(); } diff --git a/app/src/main/res/layout/activity_contact_share_edit.xml b/app/src/main/res/layout/activity_contact_share_edit.xml index bee338f86..3ab4b760d 100644 --- a/app/src/main/res/layout/activity_contact_share_edit.xml +++ b/app/src/main/res/layout/activity_contact_share_edit.xml @@ -1,23 +1,27 @@ + android:layout_height="match_parent"> + android:clipToPadding="false" + android:paddingBottom="80dp" /> - + app:tint="@color/white" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_bottom_sheet_view.xml b/app/src/main/res/layout/activity_map_bottom_sheet_view.xml index bb6acaed2..674636026 100755 --- a/app/src/main/res/layout/activity_map_bottom_sheet_view.xml +++ b/app/src/main/res/layout/activity_map_bottom_sheet_view.xml @@ -6,21 +6,6 @@ android:layout_height="match_parent" android:layout_gravity="bottom"> - - + android:background="@drawable/compose_divider_background" + android:scaleType="fitXY" /> - + + \ No newline at end of file diff --git a/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml index 1a6c5405b..b60c93ae0 100644 --- a/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml +++ b/app/src/main/res/layout/multiselect_forward_fragment_bottom_bar.xml @@ -11,7 +11,7 @@ android:id="@+id/background_helper" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintBottom_toBottomOf="@id/selected_list" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/selected_list" /> @@ -21,8 +21,7 @@ android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/signal_divider_major" - app:layout_constraintBottom_toBottomOf="@id/share_confirm_frame" - app:layout_constraintTop_toTopOf="@id/share_confirm_frame" /> + app:layout_constraintTop_toTopOf="parent" /> + android:textAppearance="@style/Signal.Text.Body" + android:textColorHint="@color/signal_colorOnSurfaceVariant" /> + android:padding="8dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> -