Fix issue with bottom sheets.

This commit is contained in:
Alex Hart 2023-01-31 10:00:25 -04:00
parent 691520bc75
commit e90074ffef
18 changed files with 120 additions and 9 deletions

View file

@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.util.AppStartup; import org.thoughtcrime.securesms.util.AppStartup;
import org.thoughtcrime.securesms.util.ConfigurationUtil; import org.thoughtcrime.securesms.util.ConfigurationUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper;
import java.util.Objects; import java.util.Objects;
@ -42,7 +43,7 @@ public abstract class BaseActivity extends AppCompatActivity {
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
initializeScreenshotSecurity(); WindowUtil.initializeScreenshotSecurity(this, getWindow());
} }
@Override @Override
@ -64,14 +65,6 @@ public abstract class BaseActivity extends AppCompatActivity {
super.onDestroy(); super.onDestroy();
} }
private void initializeScreenshotSecurity() {
if (TextSecurePreferences.isScreenSecurityEnabled(this)) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
}
protected void startActivitySceneTransition(Intent intent, View sharedView, String transitionName) { protected void startActivitySceneTransition(Intent intent, View sharedView, String transitionName) {
Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(this, sharedView, transitionName) Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(this, sharedView, transitionName)
.toBundle(); .toBundle();

View file

@ -18,6 +18,7 @@ import com.google.android.material.shape.ShapeAppearanceModel
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.util.ThemeUtil import org.thoughtcrime.securesms.util.ThemeUtil
import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.WindowUtil
/** /**
* Forces rounded corners on BottomSheet * Forces rounded corners on BottomSheet
@ -39,6 +40,11 @@ abstract class FixedRoundedCornerBottomSheetDialogFragment : BottomSheetDialogFr
setStyle(STYLE_NORMAL, themeResId) setStyle(STYLE_NORMAL, themeResId)
} }
override fun onResume() {
super.onResume()
WindowUtil.initializeScreenshotSecurity(requireContext(), dialog!!.window!!)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog

View file

@ -13,6 +13,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment
import org.thoughtcrime.securesms.util.WindowUtil
abstract class DSLSettingsBottomSheetFragment( abstract class DSLSettingsBottomSheetFragment(
@LayoutRes private val layoutId: Int = R.layout.dsl_settings_bottom_sheet, @LayoutRes private val layoutId: Int = R.layout.dsl_settings_bottom_sheet,
@ -39,6 +40,11 @@ abstract class DSLSettingsBottomSheetFragment(
bindAdapter(adapter) bindAdapter(adapter)
} }
override fun onResume() {
super.onResume()
WindowUtil.initializeScreenshotSecurity(requireContext(), dialog!!.window!!)
}
abstract fun bindAdapter(adapter: DSLSettingsAdapter) abstract fun bindAdapter(adapter: DSLSettingsAdapter)
private class EdgeEffectFactory : RecyclerView.EdgeEffectFactory() { private class EdgeEffectFactory : RecyclerView.EdgeEffectFactory() {

View file

@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.LifecycleDisposable; import org.thoughtcrime.securesms.util.LifecycleDisposable;
import org.thoughtcrime.securesms.util.WindowUtil;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -81,6 +82,12 @@ public final class ShowAdminsBottomSheetDialog extends BottomSheetDialogFragment
.subscribe(list::setDisplayOnlyMembers)); .subscribe(list::setDisplayOnlyMembers));
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.recipients.ui.sharablegrouplink.GroupLinkBottomSheetDialogFragment; import org.thoughtcrime.securesms.recipients.ui.sharablegrouplink.GroupLinkBottomSheetDialogFragment;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import java.util.Objects; import java.util.Objects;
@ -129,6 +130,12 @@ public final class GroupLinkInviteFriendsBottomSheetDialogFragment extends Botto
); );
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
protected void shareGroupLinkAndDismiss(@NonNull GroupId.V2 groupId) { protected void shareGroupLinkAndDismiss(@NonNull GroupId.V2 groupId) {
dismiss(); dismiss();

View file

@ -34,6 +34,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.LongClickMovementMethod; import org.thoughtcrime.securesms.util.LongClickMovementMethod;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogFragment { public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogFragment {
@ -140,6 +141,12 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
); );
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
private void updateGroupDescription(@NonNull String name, @NonNull String description) { private void updateGroupDescription(@NonNull String name, @NonNull String description) {
groupDescription.setVisibility(View.VISIBLE); groupDescription.setVisibility(View.VISIBLE);
groupDescription.setMovementMethod(LongClickMovementMethod.getInstance(requireContext())); groupDescription.setMovementMethod(LongClickMovementMethod.getInstance(requireContext()));

View file

@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.PlayStoreUtil; import org.thoughtcrime.securesms.util.PlayStoreUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
public final class GroupJoinUpdateRequiredBottomSheetDialogFragment extends BottomSheetDialogFragment { public final class GroupJoinUpdateRequiredBottomSheetDialogFragment extends BottomSheetDialogFragment {
@ -62,6 +63,12 @@ public final class GroupJoinUpdateRequiredBottomSheetDialogFragment extends Bott
}); });
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -15,6 +15,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
public final class GroupsLearnMoreBottomSheetDialogFragment extends BottomSheetDialogFragment { public final class GroupsLearnMoreBottomSheetDialogFragment extends BottomSheetDialogFragment {
@ -40,6 +41,12 @@ public final class GroupsLearnMoreBottomSheetDialogFragment extends BottomSheetD
return view; return view;
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import java.util.List; import java.util.List;
@ -85,6 +86,12 @@ public final class GroupsV1MigrationInfoBottomSheetDialogFragment extends Bottom
view.findViewById(R.id.gv1_learn_more_ok_button).setOnClickListener(v -> dismiss()); view.findViewById(R.id.gv1_learn_more_ok_button).setOnClickListener(v -> dismiss());
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
/** /**
@ -94,6 +95,12 @@ public final class GroupsV1MigrationInitiationBottomSheetDialogFragment extends
view.findViewById(R.id.gv1_migrate_cancel_button).setOnClickListener(v -> dismiss()); view.findViewById(R.id.gv1_migrate_cancel_button).setOnClickListener(v -> dismiss());
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState;
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel; import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel;
import org.thoughtcrime.securesms.mms.SentMediaQuality; import org.thoughtcrime.securesms.mms.SentMediaQuality;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.views.CheckedLinearLayout; import org.thoughtcrime.securesms.util.views.CheckedLinearLayout;
/** /**
@ -67,6 +68,12 @@ public final class QualitySelectorBottomSheetDialog extends BottomSheetDialogFra
viewModel.getState().observe(getViewLifecycleOwner(), this::updateQuality); viewModel.getState().observe(getViewLifecycleOwner(), this::updateQuality);
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
private void updateQuality(@NonNull MediaSelectionState selectionState) { private void updateQuality(@NonNull MediaSelectionState selectionState) {
select(selectionState.getQuality() == SentMediaQuality.STANDARD ? standard : high); select(selectionState.getQuality() == SentMediaQuality.STANDARD ? standard : high);
} }

View file

@ -45,6 +45,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.signal.core.util.StringUtil; import org.signal.core.util.StringUtil;
import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation; import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.whispersystems.signalservice.api.payments.FormatterOptions; import org.whispersystems.signalservice.api.payments.FormatterOptions;
@ -157,6 +158,12 @@ public class ConfirmPaymentFragment extends BottomSheetDialogFragment {
ThreadUtil.cancelRunnableOnMain(dismiss); ThreadUtil.cancelRunnableOnMain(dismiss);
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();

View file

@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.preferences.EditProxyViewModel;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.LifecycleDisposable; import org.thoughtcrime.securesms.util.LifecycleDisposable;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton; import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
/** /**
@ -81,6 +82,12 @@ public final class ProxyBottomSheetFragment extends BottomSheetDialogFragment {
cancelButton.setOnClickListener(v -> dismiss()); cancelButton.setOnClickListener(v -> dismiss());
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
private void initViewModel() { private void initViewModel() {
this.viewModel = new ViewModelProvider(this).get(EditProxyViewModel.class); this.viewModel = new ViewModelProvider(this).get(EditProxyViewModel.class);

View file

@ -15,6 +15,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.WindowUtil;
/** /**
* A bottom sheet to be shown when we need to prompt the user to fill out a reCAPTCHA. * A bottom sheet to be shown when we need to prompt the user to fill out a reCAPTCHA.
@ -45,6 +46,12 @@ public final class RecaptchaProofBottomSheetFragment extends BottomSheetDialogFr
return view; return view;
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
Log.i(TAG, "Showing reCAPTCHA proof bottom sheet."); Log.i(TAG, "Showing reCAPTCHA proof bottom sheet.");

View file

@ -105,6 +105,12 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
setUpViewModel(messageId); setUpViewModel(messageId);
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog); super.onDismiss(dialog);

View file

@ -47,6 +47,7 @@ import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.SpanUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.WindowUtil;
import java.util.Objects; import java.util.Objects;
@ -349,6 +350,12 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF
callback = getParentFragment() != null && getParentFragment() instanceof Callback ? (Callback) getParentFragment() : null; callback = getParentFragment() != null && getParentFragment() instanceof Callback ? (Callback) getParentFragment() : null;
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
private void openSystemContactSheet(@NonNull Intent intent) { private void openSystemContactSheet(@NonNull Intent intent) {
try { try {
startActivityForResult(intent, REQUEST_CODE_SYSTEM_CONTACT_SHEET); startActivityForResult(intent, REQUEST_CODE_SYSTEM_CONTACT_SHEET);

View file

@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.sharing.MultiShareArgs;
import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.WindowUtil;
import java.util.Collections; import java.util.Collections;
import java.util.Objects; import java.util.Objects;
@ -118,6 +119,12 @@ public final class GroupLinkBottomSheetDialogFragment extends BottomSheetDialogF
return view; return view;
} }
@Override
public void onResume() {
super.onResume();
WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
}
@Override @Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) { public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this); BottomSheetUtil.show(manager, tag, this);

View file

@ -6,6 +6,7 @@ import android.graphics.Rect;
import android.os.Build; import android.os.Build;
import android.view.View; import android.view.View;
import android.view.Window; import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.ColorInt; import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -15,6 +16,14 @@ public final class WindowUtil {
private WindowUtil() { private WindowUtil() {
} }
public static void initializeScreenshotSecurity(@NonNull Context context, @NonNull Window window) {
if (TextSecurePreferences.isScreenSecurityEnabled(context)) {
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
}
public static void setLightNavigationBarFromTheme(@NonNull Activity activity) { public static void setLightNavigationBarFromTheme(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT < 27) return; if (Build.VERSION.SDK_INT < 27) return;