Add proper coloring to send buttons.

fork-5.53.8
Alex Hart 2022-06-17 13:45:44 -03:00 zatwierdzone przez Cody Henthorne
rodzic cd8fa58d7e
commit 53c60e1f6d
10 zmienionych plików z 105 dodań i 65 usunięć

Wyświetl plik

@ -3,21 +3,24 @@ package org.thoughtcrime.securesms.contactshare;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme; 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 class ContactShareEditActivity extends PassphraseRequiredActivity implements ContactShareEditAdapter.EventListener {
public static final String KEY_CONTACTS = "contacts"; public static final String KEY_CONTACTS = "contacts";
private static final String KEY_CONTACT_URIS = "contact_uris"; 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 static final int CODE_NAME_EDIT = 55;
private final DynamicTheme dynamicTheme = new DynamicTheme(); private final DynamicTheme dynamicTheme = new DynamicTheme();
@ -40,11 +44,12 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
private ContactShareEditViewModel viewModel; private ContactShareEditViewModel viewModel;
public static Intent getIntent(@NonNull Context context, @NonNull List<Uri> contactUris) { public static Intent getIntent(@NonNull Context context, @NonNull List<Uri> contactUris, @ColorInt int sendButtonColor) {
ArrayList<Uri> contactUriList = new ArrayList<>(contactUris); ArrayList<Uri> contactUriList = new ArrayList<>(contactUris);
Intent intent = new Intent(context, ContactShareEditActivity.class); Intent intent = new Intent(context, ContactShareEditActivity.class);
intent.putParcelableArrayListExtra(KEY_CONTACT_URIS, contactUriList); intent.putParcelableArrayListExtra(KEY_CONTACT_URIS, contactUriList);
intent.putExtra(KEY_SEND_BUTTON_COLOR, sendButtonColor);
return intent; return intent;
} }
@ -68,6 +73,7 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
} }
View sendButton = findViewById(R.id.contact_share_edit_send); 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())); sendButton.setOnClickListener(v -> onSendClicked(viewModel.getFinalizedContacts()));
RecyclerView contactList = findViewById(R.id.contact_share_edit_list); RecyclerView contactList = findViewById(R.id.contact_share_edit_list);

Wyświetl plik

@ -1100,7 +1100,8 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
MultiselectForwardFragmentArgs.create(requireContext(), MultiselectForwardFragmentArgs.create(requireContext(),
multiselectParts, multiselectParts,
args -> MultiselectForwardFragment.showBottomSheet(getChildFragmentManager(), args)); args -> MultiselectForwardFragment.showBottomSheet(getChildFragmentManager(),
args.withSendButtonTint(listener.getSendButtonTint())));
} }
private void handleResendMessage(final MessageRecord message) { private void handleResendMessage(final MessageRecord message) {
@ -1426,6 +1427,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
} }
public interface ConversationFragmentListener extends VoiceNoteMediaControllerOwner { public interface ConversationFragmentListener extends VoiceNoteMediaControllerOwner {
int getSendButtonTint();
boolean isKeyboardOpen(); boolean isKeyboardOpen();
boolean isAttachmentKeyboardOpen(); boolean isAttachmentKeyboardOpen();
void openAttachmentKeyboard(); void openAttachmentKeyboard();

Wyświetl plik

@ -1249,7 +1249,7 @@ public class ConversationParentFragment extends Fragment
AttachmentManager.selectContactInfo(this, PICK_CONTACT); AttachmentManager.selectContactInfo(this, PICK_CONTACT);
break; break;
case LOCATION: case LOCATION:
AttachmentManager.selectLocation(this, PICK_LOCATION); AttachmentManager.selectLocation(this, PICK_LOCATION, getSendButtonColor(sendButton.getSelectedSendType()));
break; break;
case PAYMENT: case PAYMENT:
if (recipient.get().hasProfileKeyCredential()) { if (recipient.get().hasProfileKeyCredential()) {
@ -2743,7 +2743,7 @@ public class ConversationParentFragment extends Fragment
} }
private void openContactShareEditor(Uri contactUri) { 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); startActivityForResult(intent, GET_CONTACT_DETAILS);
} }
@ -3953,6 +3953,11 @@ public class ConversationParentFragment extends Fragment
}); });
} }
@Override
public int getSendButtonTint() {
return getSendButtonColor(sendButton.getSelectedSendType());
}
@Override @Override
public boolean isKeyboardOpen() { public boolean isKeyboardOpen() {
return container.isKeyboardOpen(); return container.isKeyboardOpen();

Wyświetl plik

@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.conversation.mutiselect.forward package org.thoughtcrime.securesms.conversation.mutiselect.forward
import android.content.res.ColorStateList
import android.graphics.Rect import android.graphics.Rect
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
@ -13,6 +14,7 @@ import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.annotation.PluralsRes import androidx.annotation.PluralsRes
import androidx.core.view.ViewCompat
import androidx.core.view.doOnNextLayout import androidx.core.view.doOnNextLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
@ -95,6 +97,9 @@ class MultiselectForwardFragment :
private val isSelectionOnly: Boolean private val isSelectionOnly: Boolean
get() = requireArguments().getBoolean(ARG_FORCE_SELECTION_ONLY, false) 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 { override fun onGetLayoutInflater(savedInstanceState: Bundle?): LayoutInflater {
return if (parentFragment != null) { return if (parentFragment != null) {
requireParentFragment().onGetLayoutInflater(savedInstanceState) requireParentFragment().onGetLayoutInflater(savedInstanceState)
@ -135,6 +140,10 @@ class MultiselectForwardFragment :
val sendButton: View = bottomBar.findViewById(R.id.share_confirm) val sendButton: View = bottomBar.findViewById(R.id.share_confirm)
val backgroundHelper: View = bottomBar.findViewById(R.id.background_helper) val backgroundHelper: View = bottomBar.findViewById(R.id.background_helper)
if (sendButtonTint != -1) {
ViewCompat.setBackgroundTintList(sendButton, ColorStateList.valueOf(sendButtonTint))
}
FullscreenHelper.configureBottomBarLayout(requireActivity(), bottomBarSpacer, bottomBar) FullscreenHelper.configureBottomBarLayout(requireActivity(), bottomBarSpacer, bottomBar)
backgroundHelper.setBackgroundColor(callback.getDialogBackgroundColor()) 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_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_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_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_KEY = "result_key"
const val RESULT_SELECTION = "result_selection_recipients" const val RESULT_SELECTION = "result_selection_recipients"
const val RESULT_SENT = "result_sent" const val RESULT_SENT = "result_sent"
@ -478,6 +488,7 @@ class MultiselectForwardFragment :
putBoolean(ARG_FORCE_DISABLE_ADD_MESSAGE, multiselectForwardFragmentArgs.forceDisableAddMessage) putBoolean(ARG_FORCE_DISABLE_ADD_MESSAGE, multiselectForwardFragmentArgs.forceDisableAddMessage)
putBoolean(ARG_FORCE_SELECTION_ONLY, multiselectForwardFragmentArgs.forceSelectionOnly) putBoolean(ARG_FORCE_SELECTION_ONLY, multiselectForwardFragmentArgs.forceSelectionOnly)
putBoolean(ARG_SELECT_SINGLE_RECIPIENT, multiselectForwardFragmentArgs.selectSingleRecipient) putBoolean(ARG_SELECT_SINGLE_RECIPIENT, multiselectForwardFragmentArgs.selectSingleRecipient)
putInt(ARG_SEND_BUTTON_TINT, multiselectForwardFragmentArgs.sendButtonTint)
} }
} }
} }

Wyświetl plik

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.conversation.mutiselect.forward
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import androidx.annotation.ColorInt
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import org.signal.core.util.StreamUtil 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 forceSelectionOnly Force the fragment to only select recipients, never actually performing the send.
* @param selectSingleRecipient Only allow the selection of a single recipient. * @param selectSingleRecipient Only allow the selection of a single recipient.
*/ */
class MultiselectForwardFragmentArgs @JvmOverloads constructor( data class MultiselectForwardFragmentArgs @JvmOverloads constructor(
val canSendToNonPush: Boolean, val canSendToNonPush: Boolean,
val multiShareArgs: List<MultiShareArgs> = listOf(), val multiShareArgs: List<MultiShareArgs> = listOf(),
@StringRes val title: Int = R.string.MultiselectForwardFragment__forward_to, @StringRes val title: Int = R.string.MultiselectForwardFragment__forward_to,
val forceDisableAddMessage: Boolean = false, val forceDisableAddMessage: Boolean = false,
val forceSelectionOnly: 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 { companion object {
@JvmStatic @JvmStatic
fun create(context: Context, mediaUri: Uri, mediaType: String, consumer: Consumer<MultiselectForwardFragmentArgs>) { fun create(context: Context, mediaUri: Uri, mediaType: String, consumer: Consumer<MultiselectForwardFragmentArgs>) {

Wyświetl plik

@ -4,6 +4,8 @@ import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.location.Address; import android.location.Address;
import android.location.Geocoder; import android.location.Geocoder;
import android.os.AsyncTask; import android.os.AsyncTask;
@ -12,10 +14,12 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.animation.OvershootInterpolator; import android.view.animation.OvershootInterpolator;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.google.android.gms.maps.CameraUpdateFactory; 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 int ANIMATION_DURATION = 250;
private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(); private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator();
private static final String KEY_CHAT_COLOR = "chat_color";
private SingleAddressBottomSheet bottomSheet; private SingleAddressBottomSheet bottomSheet;
private Address currentAddress; private Address currentAddress;
@ -54,8 +59,8 @@ public final class PlacePickerActivity extends AppCompatActivity {
private AddressLookup addressLookup; private AddressLookup addressLookup;
private GoogleMap googleMap; private GoogleMap googleMap;
public static void startActivityForResultAtCurrentLocation(@NonNull Fragment fragment, int requestCode) { public static void startActivityForResultAtCurrentLocation(@NonNull Fragment fragment, int requestCode, @ColorInt int chatColor) {
fragment.startActivityForResult(new Intent(fragment.requireActivity(), PlacePickerActivity.class), requestCode); fragment.startActivityForResult(new Intent(fragment.requireActivity(), PlacePickerActivity.class).putExtra(KEY_CHAT_COLOR, chatColor), requestCode);
} }
public static AddressData addressFromData(@NonNull Intent data) { 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 markerImage = findViewById(R.id.marker_image_view);
View fab = findViewById(R.id.place_chosen_button); View fab = findViewById(R.id.place_chosen_button);
ViewCompat.setBackgroundTintList(fab, ColorStateList.valueOf(getIntent().getIntExtra(KEY_CHAT_COLOR, Color.RED)));
fab.setOnClickListener(v -> finishWithAddress()); fab.setOnClickListener(v -> finishWithAddress());
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)
{ {

Wyświetl plik

@ -33,6 +33,7 @@ import android.util.Pair;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -395,12 +396,12 @@ public class AttachmentManager {
.execute(); .execute();
} }
public static void selectLocation(Fragment fragment, int requestCode) { public static void selectLocation(Fragment fragment, int requestCode, @ColorInt int chatColor) {
Permissions.with(fragment) Permissions.with(fragment)
.request(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION) .request(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
.ifNecessary() .ifNecessary()
.withPermanentDenialDialog(fragment.getString(R.string.AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location)) .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(); .execute();
} }

Wyświetl plik

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/contact_share_edit_list" android:id="@+id/contact_share_edit_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingBottom="80dp" android:clipToPadding="false"
android:clipToPadding="false"/> android:paddingBottom="80dp" />
<com.google.android.material.floatingactionbutton.FloatingActionButton <ImageView
android:id="@+id/contact_share_edit_send" android:id="@+id/contact_share_edit_send"
android:layout_width="wrap_content" android:layout_width="40dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_gravity="end|bottom" android:layout_gravity="end|bottom"
android:tint="@color/white" android:layout_margin="@dimen/floating_action_button_margin"
android:background="@drawable/circle_tintable"
android:contentDescription="@string/conversation_activity__send"
android:scaleType="centerInside"
app:backgroundTint="@color/signal_colorPrimary"
app:srcCompat="@drawable/ic_send_lock_24" app:srcCompat="@drawable/ic_send_lock_24"
android:layout_margin="@dimen/floating_action_button_margin"/> app:tint="@color/white" />
</FrameLayout> </FrameLayout>

Wyświetl plik

@ -6,21 +6,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="bottom"> android:layout_gravity="bottom">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/place_chosen_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:contentDescription="@string/PlacePickerActivity_accept_address"
android:scaleType="center"
android:tint="@color/white"
app:backgroundTint="?attr/colorPrimary"
app:elevation="3dp"
app:fabSize="normal"
app:layout_anchor="@id/root_bottom_sheet"
app:layout_anchorGravity="top|end"
app:srcCompat="@drawable/ic_check_24" />
<LinearLayout <LinearLayout
android:id="@+id/root_bottom_sheet" android:id="@+id/root_bottom_sheet"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -31,8 +16,8 @@
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="3dp" android:layout_height="3dp"
android:scaleType="fitXY" android:background="@drawable/compose_divider_background"
android:background="@drawable/compose_divider_background"/> android:scaleType="fitXY" />
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -48,35 +33,34 @@
<TextView <TextView
android:id="@+id/text_view_place_name" android:id="@+id/text_view_place_name"
style="@style/Signal.Text.TitleSmall"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="18dp" android:layout_marginTop="16dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="70dp"
style="@style/Signal.Text.Body"
android:fontFamily="sans-serif-medium"
android:ellipsize="end" android:ellipsize="end"
android:fontFamily="sans-serif-medium"
android:maxLines="1" android:maxLines="1"
android:textColor="@color/signal_text_primary" android:textColor="@color/signal_text_primary"
tools:text="Short address" /> tools:text="Short address" />
<TextView <TextView
android:id="@+id/text_view_place_address" android:id="@+id/text_view_place_address"
style="@style/Signal.Text.BodyMedium"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="8dp" android:layout_marginEnd="70dp"
android:layout_marginEnd="16dp"
style="@style/Signal.Text.Preview"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textColor="@color/signal_text_secondary" android:textColor="@color/signal_text_secondary"
tools:text="Precise address" /> tools:text="Precise address" />
</LinearLayout> </LinearLayout>
<ProgressBar <com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/progress_bar_place" android:id="@+id/progress_bar_place"
style="?android:attr/progressBarStyle" style="?circularProgressIndicatorStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
@ -88,4 +72,20 @@
</LinearLayout> </LinearLayout>
<ImageView
android:id="@+id/place_chosen_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="16dp"
android:background="@drawable/circle_tintable"
android:contentDescription="@string/PlacePickerActivity_accept_address"
android:scaleType="center"
app:backgroundTint="?attr/colorPrimary"
app:elevation="0dp"
app:fabSize="normal"
app:layout_anchor="@id/root_bottom_sheet"
app:layout_anchorGravity="center_vertical|end"
app:srcCompat="@drawable/ic_check_24"
app:tint="@color/white" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

Wyświetl plik

@ -11,7 +11,7 @@
android:id="@+id/background_helper" android:id="@+id/background_helper"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/selected_list" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/selected_list" /> app:layout_constraintTop_toTopOf="@id/selected_list" />
@ -21,8 +21,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:background="@color/signal_divider_major" android:background="@color/signal_divider_major"
app:layout_constraintBottom_toBottomOf="@id/share_confirm_frame" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="@id/share_confirm_frame" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/selected_list" android:id="@+id/selected_list"
@ -41,45 +40,48 @@
<FrameLayout <FrameLayout
android:id="@+id/add_message_wrapper" android:id="@+id/add_message_wrapper"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/signal_colorSurface1"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/share_confirm_frame"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/selected_list"> app:layout_constraintTop_toBottomOf="@id/selected_list">
<org.thoughtcrime.securesms.components.emoji.EmojiEditText <org.thoughtcrime.securesms.components.emoji.EmojiEditText
android:id="@+id/add_message" android:id="@+id/add_message"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dsl_settings_gutter" android:layout_marginStart="16dp"
android:layout_marginEnd="@dimen/dsl_settings_gutter" android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:background="@drawable/rounded_rectangle_surface_variant" android:background="@drawable/rounded_rectangle_surface_variant"
android:hint="@string/MultiselectForwardFragment__add_a_message" android:hint="@string/MultiselectForwardFragment__add_a_message"
android:textColorHint="@color/signal_colorOnSurfaceVariant"
android:inputType="textCapSentences" android:inputType="textCapSentences"
android:minHeight="44dp" android:minHeight="44dp"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:textAppearance="@style/Signal.Text.Body" /> android:textAppearance="@style/Signal.Text.Body"
android:textColorHint="@color/signal_colorOnSurfaceVariant" />
</FrameLayout> </FrameLayout>
<FrameLayout <FrameLayout
android:id="@+id/share_confirm_frame" android:id="@+id/share_confirm_frame"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:clipChildren="false" android:clipChildren="false"
android:clipToPadding="false" android:clipToPadding="false"
android:padding="16dp" android:padding="8dp"
app:layout_constraintBottom_toBottomOf="@id/divider" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton <ImageView
android:id="@+id/share_confirm" android:id="@+id/share_confirm"
android:layout_width="56dp" android:layout_width="40dp"
android:layout_height="56dp" android:layout_height="40dp"
android:background="@drawable/circle_tintable"
android:contentDescription="@string/ShareActivity__share" android:contentDescription="@string/ShareActivity__share"
android:scaleType="centerInside"
app:backgroundTint="@color/signal_accent_primary" app:backgroundTint="@color/signal_accent_primary"
app:srcCompat="@drawable/ic_send_24" /> app:srcCompat="@drawable/ic_send_24" />