kopia lustrzana https://github.com/ryukoposting/Signal-Android
Refactor reactions dialog to match Material3 spec.
rodzic
0e7ace0da4
commit
56a2b27745
|
@ -1,17 +1,18 @@
|
|||
package org.thoughtcrime.securesms.reactions;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
@ -23,9 +24,9 @@ import com.google.android.material.tabs.TabLayoutMediator;
|
|||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiImageView;
|
||||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
import org.thoughtcrime.securesms.util.FullscreenHelper;
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.WindowUtil;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
@ -68,15 +69,21 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
|
|||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
if (ThemeUtil.isDarkTheme(requireContext())) {
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Signal_BottomSheetDialog_Fixed_ReactWithAny);
|
||||
} else {
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Signal_Light_BottomSheetDialog_Fixed_ReactWithAny);
|
||||
}
|
||||
setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Signal_BottomSheetDialog_Fixed_ReactWithAny);
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||
Dialog dialog = super.onCreateDialog(savedInstanceState);
|
||||
|
||||
FullscreenHelper.showSystemUI(dialog.getWindow());
|
||||
WindowUtil.setNavigationBarColor(dialog.getWindow(), ContextCompat.getColor(requireContext(), R.color.signal_colorSurface1));
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable View onCreateView(@NonNull LayoutInflater inflater,
|
||||
@Nullable ViewGroup container,
|
||||
|
@ -92,7 +99,7 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
|
|||
disposables.bindTo(getViewLifecycleOwner());
|
||||
|
||||
setUpRecipientsRecyclerView();
|
||||
setUpTabMediator(savedInstanceState);
|
||||
setUpTabMediator(view, savedInstanceState);
|
||||
|
||||
MessageId messageId = new MessageId(requireArguments().getLong(ARGS_MESSAGE_ID), requireArguments().getBoolean(ARGS_IS_MMS));
|
||||
setUpViewModel(messageId);
|
||||
|
@ -105,21 +112,9 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
|
|||
callback.onReactionsDialogDismissed();
|
||||
}
|
||||
|
||||
private void setUpTabMediator(@Nullable Bundle savedInstanceState) {
|
||||
private void setUpTabMediator(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
if (savedInstanceState == null) {
|
||||
FrameLayout container = requireDialog().findViewById(R.id.container);
|
||||
LayoutInflater layoutInflater = LayoutInflater.from(requireContext());
|
||||
View statusBarShader = layoutInflater.inflate(R.layout.react_with_any_emoji_status_fade, container, false);
|
||||
TabLayout emojiTabs = (TabLayout) layoutInflater.inflate(R.layout.reactions_bottom_sheet_dialog_fragment_tabs, container, false);
|
||||
|
||||
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewUtil.getStatusBarHeight(container));
|
||||
|
||||
statusBarShader.setLayoutParams(params);
|
||||
|
||||
container.addView(statusBarShader, 0);
|
||||
container.addView(emojiTabs);
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(container, (v, insets) -> insets.consumeSystemWindowInsets());
|
||||
TabLayout emojiTabs = view.findViewById(R.id.emoji_tabs);
|
||||
|
||||
new TabLayoutMediator(emojiTabs, recipientPagerView, (tab, position) -> {
|
||||
tab.setCustomView(R.layout.reactions_bottom_sheet_dialog_fragment_emoji_item);
|
||||
|
|
|
@ -161,8 +161,12 @@ public final class FullscreenHelper {
|
|||
}
|
||||
|
||||
public void showSystemUI() {
|
||||
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
|
||||
showSystemUI(activity.getWindow());
|
||||
}
|
||||
|
||||
public static void showSystemUI(@NonNull Window window) {
|
||||
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true">
|
||||
<shape>
|
||||
<solid android:color="@color/signal_colorPrimaryContainer" />
|
||||
<corners android:radius="8dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape />
|
||||
</item>
|
||||
</selector>
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:background="@color/reactions_screen_light_shade_color"
|
||||
android:foreground="@color/reactions_screen_dark_shade_color"
|
||||
android:fitsSystemWindows="true" />
|
|
@ -1,11 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/reactions_bottom_view_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:minHeight="340dp"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/react_with_any_emoji_bottom_sheet_dialog_fragment_tabs_height">
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/handle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="16dp"
|
||||
android:importantForAccessibility="no"
|
||||
app:srcCompat="@drawable/bottom_sheet_handle" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/emoji_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginTop="14dp"
|
||||
android:background="@color/signal_colorSurface1"
|
||||
android:paddingHorizontal="8dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:tabIndicator="@null"
|
||||
app:tabMinWidth="48dp"
|
||||
app:tabMode="scrollable"
|
||||
app:tabPadding="0dp"
|
||||
app:tabPaddingBottom="8dp"
|
||||
app:tabPaddingEnd="8dp"
|
||||
app:tabPaddingStart="8dp"
|
||||
app:tabPaddingTop="8dp" />
|
||||
|
||||
<androidx.viewpager2.widget.ViewPager2
|
||||
android:id="@+id/reactions_bottom_view_recipient_pager"
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="36dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/reactions_bottom_sheet_tab_indicator"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
android:minHeight="32dp"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingTop="6dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingBottom="6dp">
|
||||
|
||||
<org.thoughtcrime.securesms.components.emoji.EmojiImageView
|
||||
android:id="@+id/reactions_bottom_view_emoji_item_emoji"
|
||||
|
@ -24,10 +30,8 @@
|
|||
android:layout_marginEnd="2dp"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="true"
|
||||
android:textAppearance="@style/Signal.Text.LabelLarge"
|
||||
android:textColor="@color/signal_text_primary"
|
||||
android:textSize="14dp"
|
||||
android:textStyle="bold"
|
||||
android:textAllCaps="true"
|
||||
tools:ignore="SpUsage"
|
||||
tools:text="24" />
|
||||
</LinearLayout>
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.tabs.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/emoji_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/react_with_any_emoji_bottom_sheet_dialog_fragment_tabs_height"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/signal_background_tertiary"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:tabIndicatorColor="?colorAccent"
|
||||
app:tabIndicatorGravity="top"
|
||||
app:tabMinWidth="48dp"
|
||||
app:tabMode="scrollable"
|
||||
app:tabPadding="0dp"
|
||||
app:tabPaddingBottom="10dp"
|
||||
app:tabPaddingEnd="12dp"
|
||||
app:tabPaddingStart="12dp"
|
||||
app:tabPaddingTop="10dp" />
|
|
@ -168,7 +168,6 @@
|
|||
<dimen name="picture_in_picture_gesture_helper_pip_height">160dp</dimen>
|
||||
|
||||
<dimen name="react_with_any_emoji_bottom_sheet_dialog_fragment_min_height">340dp</dimen>
|
||||
<dimen name="react_with_any_emoji_bottom_sheet_dialog_fragment_tabs_height">40dp</dimen>
|
||||
|
||||
<dimen name="group_manage_fragment_card_vertical_padding">12dp</dimen>
|
||||
<dimen name="group_manage_fragment_row_height">52dp</dimen>
|
||||
|
|
|
@ -426,16 +426,6 @@
|
|||
<item name="android:backgroundDimEnabled">false</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Signal.Light.BottomSheetDialog.Fixed.ReactWithAny">
|
||||
<item name="bottomSheetStyle">@style/Widget.Signal.BottomSheet.ReactWithAny.Light</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.Signal.BottomSheet.Rounded</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Signal.Light.BottomSheetDialog.Fixed.ReactWithAny.Shadowless">
|
||||
<item name="android:backgroundDimEnabled">false</item>
|
||||
</style>
|
||||
|
||||
<style name="Signal.DayNight.Dialog.Animated" parent="Signal.DayNight">
|
||||
<item name="android:windowAnimationStyle">@style/FadeScale</item>
|
||||
</style>
|
||||
|
@ -444,16 +434,12 @@
|
|||
<item name="android:windowAnimationStyle">@style/FakeBottomSheet</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Signal.BottomSheet.ReactWithAny" parent="Widget.MaterialComponents.BottomSheet">
|
||||
<item name="backgroundTint">@color/core_grey_75</item>
|
||||
<style name="Widget.Signal.BottomSheet.ReactWithAny" parent="Widget.Material3.BottomSheet">
|
||||
<item name="backgroundTint">@color/signal_colorSurface1</item>
|
||||
<item name="behavior_peekHeight">@dimen/react_with_any_emoji_bottom_sheet_dialog_fragment_min_height</item>
|
||||
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.Signal.BottomSheet.Rounded</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Signal.BottomSheet.ReactWithAny.Light">
|
||||
<item name="backgroundTint">@color/white</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Signal.ReactWithAny" parent="ThemeOverlay.MaterialComponents.BottomSheetDialog">
|
||||
<item name="android:windowIsFloating">false</item>
|
||||
<item name="android:windowSoftInputMode">adjustResize</item>
|
||||
|
|
Ładowanie…
Reference in New Issue