mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-08-04 20:34:14 +01:00
First pass at edge-to-edge support.
This commit is contained in:
committed by
Michelle Tang
parent
338283eff5
commit
6dc0229e72
@@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.FullscreenHelper;
|
||||
import org.thoughtcrime.securesms.util.WindowUtil;
|
||||
|
||||
/**
|
||||
* Activity for displaying avatars full screen.
|
||||
@@ -77,6 +78,9 @@ public final class AvatarPreviewActivity extends PassphraseRequiredActivity {
|
||||
setTheme(R.style.TextSecure_MediaPreview);
|
||||
setContentView(R.layout.contact_photo_preview_activity);
|
||||
|
||||
WindowUtil.clearLightStatusBar(getWindow());
|
||||
WindowUtil.clearLightNavigationBar(getWindow());
|
||||
|
||||
postponeEnterTransition();
|
||||
TransitionInflater inflater = TransitionInflater.from(this);
|
||||
getWindow().setSharedElementEnterTransition(inflater.inflateTransition(R.transition.full_screen_avatar_image_enter_transition_set));
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
@@ -34,6 +35,7 @@ public abstract class BaseActivity extends AppCompatActivity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
AppStartup.getInstance().onCriticalRenderEventStart();
|
||||
logEvent("onCreate()");
|
||||
EdgeToEdge.enable(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
AppStartup.getInstance().onCriticalRenderEventEnd();
|
||||
}
|
||||
|
||||
@@ -19,9 +19,11 @@ package org.thoughtcrime.securesms;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import org.signal.core.util.DimensionUnit;
|
||||
@@ -34,6 +36,7 @@ import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
@@ -110,11 +113,16 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActivit
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||
getSupportActionBar().setIcon(null);
|
||||
getSupportActionBar().setLogo(null);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
contactsFragment = (ContactSelectionListFragment) getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
|
||||
contactsFragment.setOnRefreshListener(this);
|
||||
|
||||
SystemWindowInsetsSetter.attach(contactsFragment.requireView(), this, WindowInsetsCompat.Type.navigationBars());
|
||||
}
|
||||
|
||||
private void initializeSearch() {
|
||||
|
||||
-8
@@ -7,8 +7,6 @@ package org.thoughtcrime.securesms.backup.v2.ui.subscription
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.core.content.IntentCompat
|
||||
import androidx.core.os.bundleOf
|
||||
@@ -42,12 +40,6 @@ class MessageBackupsCheckoutActivity : FragmentWrapperActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
enableEdgeToEdge()
|
||||
}
|
||||
|
||||
override fun getFragment(): Fragment = MessageBackupsFlowFragment.create(
|
||||
IntentCompat.getSerializableExtra(intent, TIER, MessageBackupTier::class.java)
|
||||
)
|
||||
|
||||
-3
@@ -5,7 +5,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
@@ -49,8 +48,6 @@ class VerifyBackupKeyActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
|
||||
setContent {
|
||||
SignalTheme {
|
||||
val context = LocalContext.current
|
||||
|
||||
+2
-1
@@ -50,7 +50,8 @@ class SelectFeaturedBadgeFragment : DSLSettingsFragment(
|
||||
return Material3OnScrollHelper(
|
||||
activity = requireActivity(),
|
||||
views = listOf(scrollShadow),
|
||||
lifecycleOwner = viewLifecycleOwner
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
setStatusBarColor = {}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@ import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
@@ -28,6 +30,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.signal.core.util.concurrent.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import java.util.Optional;
|
||||
@@ -63,6 +66,11 @@ public class BlockedUsersActivity extends PassphraseRequiredActivity implements
|
||||
container = findViewById(R.id.fragment_container);
|
||||
|
||||
toolbar.setNavigationOnClickListener(unused -> onBackPressed());
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(container, this, WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
contactFilterView.setOnFilterChangedListener(query -> {
|
||||
Fragment fragment = getSupportFragmentManager().findFragmentByTag(CONTACT_SELECTION_FRAGMENT);
|
||||
if (fragment != null) {
|
||||
|
||||
@@ -10,7 +10,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.LocalActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
@@ -60,7 +59,6 @@ class NewCallActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
val navigateBack = onBackPressedDispatcher::onBackPressed
|
||||
|
||||
@@ -152,8 +152,6 @@ private fun ConversationSettingsEntry(route: MainNavigationDetailLocation.Chats.
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(MaterialTheme.colorScheme.background)
|
||||
.statusBarsPadding()
|
||||
.navigationBarsPadding()
|
||||
) { fragment ->
|
||||
backPressedState.attach(fragment)
|
||||
}
|
||||
|
||||
+25
@@ -1,7 +1,12 @@
|
||||
package org.thoughtcrime.securesms.components.settings
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.SystemBarStyle
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.Navigation
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
@@ -9,6 +14,7 @@ import org.thoughtcrime.securesms.PassphraseRequiredActivity
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
/**
|
||||
* The DSL API can be completely replaced by compose.
|
||||
@@ -22,6 +28,8 @@ open class DSLSettingsActivity : PassphraseRequiredActivity() {
|
||||
private set
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableSettingsEdgeToEdge()
|
||||
|
||||
setContentView(R.layout.dsl_settings_activity)
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
@@ -62,6 +70,23 @@ open class DSLSettingsActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun enableSettingsEdgeToEdge() {
|
||||
val navBarColor = ContextCompat.getColor(this, CoreUiR.color.signal_colorSurface2)
|
||||
val isDark = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 26) {
|
||||
enableEdgeToEdge(
|
||||
navigationBarStyle = if (isDark) {
|
||||
SystemBarStyle.dark(navBarColor)
|
||||
} else {
|
||||
SystemBarStyle.light(navBarColor, navBarColor)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
enableEdgeToEdge()
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun onWillFinish() {}
|
||||
|
||||
protected open fun resolveNavGraphId(): Int = intent.getIntExtra(ARG_NAV_GRAPH, -1)
|
||||
|
||||
+54
-1
@@ -4,6 +4,7 @@ import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.EdgeEffect
|
||||
import androidx.annotation.CallSuper
|
||||
import androidx.annotation.LayoutRes
|
||||
@@ -11,12 +12,19 @@ import androidx.annotation.MenuRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.ConcatAdapter
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.signal.core.ui.logging.LoggingFragment
|
||||
import org.thoughtcrime.securesms.MainActivity
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.conversation.ConversationSettingsNavHostFragment
|
||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
|
||||
/**
|
||||
@@ -70,6 +78,8 @@ abstract class DSLSettingsFragment(
|
||||
}
|
||||
}
|
||||
|
||||
applyEdgeToEdgeInsets()
|
||||
|
||||
when (settingsAdapter) {
|
||||
is ConcatAdapter -> bindAdapters(settingsAdapter)
|
||||
is MappingAdapter -> bindAdapter(settingsAdapter)
|
||||
@@ -77,6 +87,48 @@ abstract class DSLSettingsFragment(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activity windows are all edge-to-edge (enabled centrally in [org.thoughtcrime.securesms.BaseActivity]),
|
||||
* so the toolbar tint must extend behind the (transparent) status bar and the list must scroll clear of
|
||||
* the navigation bar. Skipped for dialog windows (not edge-to-edge) and for fragments embedded directly in
|
||||
* [MainActivity]'s Compose scaffolding, which insets those containers itself — except the
|
||||
* conversation-settings detail entry ([ConversationSettingsNavHostFragment]), which leaves insets to these
|
||||
* fragments so the toolbar scroll tint can reach behind the status bar.
|
||||
*/
|
||||
private fun applyEdgeToEdgeInsets() {
|
||||
if (isDialogHosted() || isInsetByMainActivityHost()) {
|
||||
return
|
||||
}
|
||||
|
||||
toolbar?.let { toolbar ->
|
||||
toolbar.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT }
|
||||
SystemWindowInsetsSetter.attach(toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
|
||||
}
|
||||
|
||||
recyclerView?.let { recycler ->
|
||||
recycler.clipToPadding = false
|
||||
SystemWindowInsetsSetter.attach(recycler, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||
}
|
||||
}
|
||||
|
||||
private fun isDialogHosted(): Boolean {
|
||||
var fragment: Fragment? = this
|
||||
while (fragment != null) {
|
||||
if (fragment is DialogFragment && fragment.showsDialog) {
|
||||
return true
|
||||
}
|
||||
fragment = fragment.parentFragment
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun isInsetByMainActivityHost(): Boolean {
|
||||
if (activity !is MainActivity) {
|
||||
return false
|
||||
}
|
||||
return generateSequence(parentFragment) { it.parentFragment }.none { it is ConversationSettingsNavHostFragment }
|
||||
}
|
||||
|
||||
open fun getMaterial3OnScrollHelper(toolbar: Toolbar?): Material3OnScrollHelper? {
|
||||
if (toolbar == null) {
|
||||
return null
|
||||
@@ -85,7 +137,8 @@ abstract class DSLSettingsFragment(
|
||||
return Material3OnScrollHelper(
|
||||
activity = requireActivity(),
|
||||
views = listOf(toolbar),
|
||||
lifecycleOwner = viewLifecycleOwner
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
setStatusBarColor = {}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -74,7 +74,6 @@ import org.thoughtcrime.securesms.components.settings.app.routes.AppSettingsRout
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.BadgeImageMedium
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.completed.InAppPaymentsBottomSheetDelegate
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.profiles.ProfileName
|
||||
@@ -219,9 +218,7 @@ private fun AppSettingsContent(
|
||||
) {
|
||||
bannerManager.Banner()
|
||||
|
||||
LazyColumn(
|
||||
modifier = rememberStatusBarColorNestedScrollModifier()
|
||||
) {
|
||||
LazyColumn {
|
||||
item {
|
||||
BioRow(
|
||||
self = self,
|
||||
|
||||
+1
-4
@@ -47,7 +47,6 @@ import org.signal.core.ui.compose.Scaffolds
|
||||
import org.signal.core.ui.compose.Texts
|
||||
import org.signal.core.util.ServiceUtil
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
@@ -265,9 +264,7 @@ fun AccountSettingsScreen(
|
||||
) { contentPadding ->
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(contentPadding)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
.testTag(AccountSettingsTestTags.SCROLLER)
|
||||
.padding(contentPadding).testTag(AccountSettingsTestTags.SCROLLER)
|
||||
) {
|
||||
item {
|
||||
Texts.SectionHeader(
|
||||
|
||||
-2
@@ -41,7 +41,6 @@ import org.signal.core.ui.compose.theme.SignalTheme
|
||||
import org.signal.core.util.ServiceUtil
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.app.account.LinkedDeviceAccountSettingsState.OneTimeEvent
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
|
||||
/**
|
||||
@@ -92,7 +91,6 @@ private fun LinkedDeviceAccountSettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
LinkedDeviceCallout(onLearnMoreClick = { onEvent(LinkedDeviceAccountSettingsEvent.LearnMoreClicked) })
|
||||
|
||||
-2
@@ -24,7 +24,6 @@ import org.signal.core.ui.compose.Scaffolds
|
||||
import org.signal.core.ui.compose.SignalIcons
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.app.appearance.navbar.ChooseNavigationBarStyleFragment
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.keyvalue.SettingsValues
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
@@ -114,7 +113,6 @@ private fun AppearanceSettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
Rows.RadioListRow(
|
||||
|
||||
+2
-16
@@ -106,7 +106,6 @@ import org.thoughtcrime.securesms.components.compose.rememberBiometricsAuthentic
|
||||
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
|
||||
import org.thoughtcrime.securesms.components.settings.app.backups.BackupState
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.MessageBackupsCheckoutLauncher.createBackupsCheckoutLauncher
|
||||
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
|
||||
import org.thoughtcrime.securesms.help.HelpFragment
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.keyvalue.protos.ArchiveUploadProgressState
|
||||
@@ -151,8 +150,7 @@ class RemoteBackupsSettingsFragment : ComposeFragment() {
|
||||
backupRestoreState = restoreState,
|
||||
backupDeleteState = deleteState,
|
||||
contentCallbacks = callbacks,
|
||||
backupProgress = backupProgress,
|
||||
statusBarColorNestedScrollConnection = remember { StatusBarColorNestedScrollConnection(requireActivity()) }
|
||||
backupProgress = backupProgress
|
||||
)
|
||||
}
|
||||
|
||||
@@ -360,8 +358,7 @@ private fun RemoteBackupsSettingsContent(
|
||||
backupRestoreState: BackupRestoreState,
|
||||
backupDeleteState: DeletionState,
|
||||
contentCallbacks: ContentCallbacks,
|
||||
backupProgress: ArchiveUploadProgressState?,
|
||||
statusBarColorNestedScrollConnection: StatusBarColorNestedScrollConnection?
|
||||
backupProgress: ArchiveUploadProgressState?
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val biometrics = rememberBiometricsAuthentication(
|
||||
@@ -402,13 +399,6 @@ private fun RemoteBackupsSettingsContent(
|
||||
)
|
||||
},
|
||||
modifier = Modifier
|
||||
.then(
|
||||
if (statusBarColorNestedScrollConnection != null) {
|
||||
Modifier.nestedScroll(statusBarColorNestedScrollConnection)
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
)
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
snackbarHost = {
|
||||
Snackbars.Host(snackbarHostState = snackbarHostState)
|
||||
@@ -1885,7 +1875,6 @@ private fun RemoteBackupsSettingsContentPreview() {
|
||||
hasRedemptionError = true,
|
||||
isOutOfStorageSpace = true
|
||||
),
|
||||
statusBarColorNestedScrollConnection = null,
|
||||
backupDeleteState = DeletionState.NONE,
|
||||
backupRestoreState = BackupRestoreState.None,
|
||||
contentCallbacks = ContentCallbacks.Empty,
|
||||
@@ -1915,7 +1904,6 @@ private fun RemoteBackupsSettingsInternalUserContentPreview() {
|
||||
internalUser = true,
|
||||
includeDebuglog = true
|
||||
),
|
||||
statusBarColorNestedScrollConnection = null,
|
||||
backupDeleteState = DeletionState.NONE,
|
||||
backupRestoreState = BackupRestoreState.None,
|
||||
contentCallbacks = ContentCallbacks.Empty,
|
||||
@@ -1948,7 +1936,6 @@ private fun RemoteBackupsSettingsLinkedDevicePaidContentPreview() {
|
||||
renewalTime = 1_752_710_400.seconds
|
||||
)
|
||||
),
|
||||
statusBarColorNestedScrollConnection = null,
|
||||
backupDeleteState = DeletionState.NONE,
|
||||
backupRestoreState = BackupRestoreState.None,
|
||||
contentCallbacks = ContentCallbacks.Empty,
|
||||
@@ -1973,7 +1960,6 @@ private fun RemoteBackupsSettingsLinkedDeviceNotFoundContentPreview() {
|
||||
backupMediaSize = 2300000,
|
||||
backupState = BackupState.NotFound
|
||||
),
|
||||
statusBarColorNestedScrollConnection = null,
|
||||
backupDeleteState = DeletionState.NONE,
|
||||
backupRestoreState = BackupRestoreState.None,
|
||||
contentCallbacks = ContentCallbacks.Empty,
|
||||
|
||||
+4
@@ -10,6 +10,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.MainActivity
|
||||
@@ -23,6 +24,7 @@ import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme
|
||||
import org.thoughtcrime.securesms.util.SignalE164Util
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
|
||||
/**
|
||||
* A captive activity that can determine if an interrupted/erred change number request
|
||||
@@ -58,6 +60,8 @@ class ChangeNumberLockActivity : PassphraseRequiredActivity() {
|
||||
|
||||
setContentView(R.layout.activity_change_number_lock)
|
||||
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.change_number_lock_scroll), this, WindowInsetsCompat.Type.systemBars())
|
||||
|
||||
reattemptChange()
|
||||
}
|
||||
|
||||
|
||||
-2
@@ -28,7 +28,6 @@ import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.backup.isIdle
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.status.BackupCreationProgressRow
|
||||
import org.thoughtcrime.securesms.components.compose.rememberBiometricsAuthentication
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.keyvalue.protos.LocalBackupCreationProgress
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
@@ -162,7 +161,6 @@ private fun ChatsSettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
Rows.ToggleRow(
|
||||
|
||||
-2
@@ -27,7 +27,6 @@ import org.signal.core.ui.compose.Texts
|
||||
import org.signal.core.util.bytes
|
||||
import org.signal.mediasend.SentMediaQuality
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.util.AttachmentUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.webrtc.CallDataMode
|
||||
@@ -135,7 +134,6 @@ private fun DataAndStorageSettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
Rows.TextRow(
|
||||
|
||||
-2
@@ -39,7 +39,6 @@ import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiStrings
|
||||
import org.thoughtcrime.securesms.components.settings.app.notifications.profiles.AddAllowedMembersViewModel.NotificationProfileAndRecipients
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile
|
||||
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfileId
|
||||
@@ -168,7 +167,6 @@ private fun AddAllowedMembersContent(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
Text(
|
||||
|
||||
-2
@@ -43,7 +43,6 @@ import org.signal.core.ui.compose.Scaffolds
|
||||
import org.signal.core.ui.compose.SignalIcons
|
||||
import org.signal.core.ui.compose.Texts
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
import org.thoughtcrime.securesms.util.viewModel
|
||||
|
||||
@@ -193,7 +192,6 @@ private fun AdvancedPrivacySettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
item {
|
||||
Rows.ToggleRow(
|
||||
|
||||
+1
-18
@@ -1,7 +1,6 @@
|
||||
package org.thoughtcrime.securesms.components.settings.app.privacy.pnp
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.os.Bundle
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -14,7 +13,6 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
@@ -34,23 +32,11 @@ import org.signal.core.ui.compose.Snackbars
|
||||
import org.signal.core.ui.compose.Texts
|
||||
import org.signal.core.ui.compose.showSnackbar
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
|
||||
|
||||
private val viewModel: PhoneNumberPrivacySettingsViewModel by viewModels()
|
||||
private lateinit var statusBarNestedScrollConnection: StatusBarColorNestedScrollConnection
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
statusBarNestedScrollConnection = StatusBarColorNestedScrollConnection(requireActivity())
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
statusBarNestedScrollConnection.setColorImmediate()
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun FragmentContent() {
|
||||
@@ -62,7 +48,6 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
|
||||
state = state,
|
||||
snackbarHostState = snackbarHostState,
|
||||
onNavigationClick = { findNavController().popBackStack() },
|
||||
statusBarNestedScrollConnection = statusBarNestedScrollConnection,
|
||||
onEveryoneCanSeeMyNumberClicked = viewModel::setEveryoneCanSeeMyNumber,
|
||||
onNobodyCanSeeMyNumberClicked = viewModel::setNobodyCanSeeMyNumber,
|
||||
onEveryoneCanFindMeByNumberClicked = viewModel::setEveryoneCanFindMeByMyNumber,
|
||||
@@ -96,7 +81,6 @@ private fun Screen(
|
||||
state: PhoneNumberPrivacySettingsState,
|
||||
snackbarHostState: SnackbarHostState = SnackbarHostState(),
|
||||
onNavigationClick: () -> Unit = {},
|
||||
statusBarNestedScrollConnection: StatusBarColorNestedScrollConnection? = null,
|
||||
onEveryoneCanSeeMyNumberClicked: () -> Unit = {},
|
||||
onNobodyCanSeeMyNumberClicked: () -> Unit = {},
|
||||
onEveryoneCanFindMeByNumberClicked: () -> Unit = {},
|
||||
@@ -109,8 +93,7 @@ private fun Screen(
|
||||
navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close),
|
||||
snackbarHost = {
|
||||
SnackbarHost(snackbarHostState)
|
||||
},
|
||||
modifier = statusBarNestedScrollConnection?.let { Modifier.nestedScroll(it) } ?: Modifier
|
||||
}
|
||||
) { contentPadding ->
|
||||
Box(modifier = Modifier.padding(contentPadding)) {
|
||||
LazyColumn {
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ class DonateToSignalFragment :
|
||||
}
|
||||
|
||||
override fun getMaterial3OnScrollHelper(toolbar: Toolbar?): Material3OnScrollHelper {
|
||||
return object : Material3OnScrollHelper(activity = requireActivity(), views = listOf(toolbar!!), lifecycleOwner = viewLifecycleOwner) {
|
||||
return object : Material3OnScrollHelper(activity = requireActivity(), views = listOf(toolbar!!), lifecycleOwner = viewLifecycleOwner, setStatusBarColor = {}) {
|
||||
override val activeColorSet: ColorSet = ColorSet(R.color.transparent, CoreUiR.color.signal_colorBackground)
|
||||
override val inactiveColorSet: ColorSet = ColorSet(R.color.transparent, CoreUiR.color.signal_colorBackground)
|
||||
}
|
||||
|
||||
+8
@@ -3,9 +3,12 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.donate.c
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.setFragmentResult
|
||||
@@ -33,6 +36,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.donate.st
|
||||
import org.thoughtcrime.securesms.database.InAppPaymentTable
|
||||
import org.thoughtcrime.securesms.databinding.CreditCardFragmentBinding
|
||||
import org.thoughtcrime.securesms.payments.FiatMoneyUtil
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.viewModel
|
||||
@@ -55,6 +59,10 @@ class CreditCardFragment : Fragment(R.layout.credit_card_fragment), InAppPayment
|
||||
TemporaryScreenshotSecurity.bindToViewLifecycleOwner(this)
|
||||
InAppPaymentCheckoutDelegate.ErrorHandler().attach(this, this, args.inAppPaymentId)
|
||||
|
||||
binding.toolbar.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT }
|
||||
SystemWindowInsetsSetter.attach(binding.toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
|
||||
SystemWindowInsetsSetter.attach(binding.continueButton, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN)
|
||||
|
||||
setFragmentResultListener(StripePaymentInProgressFragment.REQUEST_KEY) { _, bundle ->
|
||||
val result: InAppPaymentProcessorActionResult = bundle.getParcelableCompat(StripePaymentInProgressFragment.REQUEST_KEY, InAppPaymentProcessorActionResult::class.java)!!
|
||||
if (result.status == InAppPaymentProcessorActionResult.Status.SUCCESS) {
|
||||
|
||||
+10
-27
@@ -5,9 +5,6 @@
|
||||
|
||||
package org.thoughtcrime.securesms.components.settings.app.subscription.donate.transfer.mandate
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
@@ -60,7 +57,6 @@ import org.signal.core.ui.compose.Texts
|
||||
import org.signal.core.ui.compose.theme.SignalTheme
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.donate.transfer.DonationTransferTestTags
|
||||
import org.thoughtcrime.securesms.compose.StatusBarColorAnimator
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData
|
||||
import org.thoughtcrime.securesms.util.SpanUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
@@ -76,17 +72,6 @@ class BankTransferMandateFragment : ComposeFragment() {
|
||||
BankTransferMandateViewModel(args.inAppPaymentId)
|
||||
}
|
||||
|
||||
private lateinit var statusBarColorAnimator: StatusBarColorAnimator
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
statusBarColorAnimator = StatusBarColorAnimator(requireActivity())
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
statusBarColorAnimator.setColorImmediate()
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun FragmentContent() {
|
||||
val mandate by viewModel.mandate
|
||||
@@ -97,8 +82,7 @@ class BankTransferMandateFragment : ComposeFragment() {
|
||||
failedToLoadMandate = failedToLoadMandate,
|
||||
onNavigationClick = this::onNavigationClick,
|
||||
onContinueClick = this::onContinueClick,
|
||||
onLearnMoreClick = this::onLearnMoreClick,
|
||||
onCanScrollUp = statusBarColorAnimator::setCanScrollUp
|
||||
onLearnMoreClick = this::onLearnMoreClick
|
||||
)
|
||||
}
|
||||
|
||||
@@ -136,22 +120,19 @@ fun BankTransferScreenPreview() {
|
||||
failedToLoadMandate = false,
|
||||
onNavigationClick = {},
|
||||
onContinueClick = {},
|
||||
onLearnMoreClick = {},
|
||||
onCanScrollUp = {}
|
||||
onLearnMoreClick = {}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
|
||||
@Composable
|
||||
fun BankTransferScreen(
|
||||
bankMandate: String,
|
||||
failedToLoadMandate: Boolean,
|
||||
onNavigationClick: () -> Unit,
|
||||
onContinueClick: () -> Unit,
|
||||
onLearnMoreClick: () -> Unit,
|
||||
onCanScrollUp: (Boolean) -> Unit
|
||||
onLearnMoreClick: () -> Unit
|
||||
) {
|
||||
val listState = rememberLazyListState()
|
||||
val scope = rememberCoroutineScope()
|
||||
@@ -182,17 +163,19 @@ fun BankTransferScreen(
|
||||
colors = if (listState.canScrollBackward) TopAppBarDefaults.topAppBarColors(containerColor = SignalTheme.colors.colorSurface2) else TopAppBarDefaults.topAppBarColors()
|
||||
)
|
||||
}
|
||||
) {
|
||||
onCanScrollUp(listState.canScrollBackward)
|
||||
|
||||
Column(horizontalAlignment = CenterHorizontally, modifier = Modifier.fillMaxSize()) {
|
||||
) { paddingValues ->
|
||||
Column(
|
||||
horizontalAlignment = CenterHorizontally,
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.fillMaxSize()
|
||||
) {
|
||||
LazyColumn(
|
||||
state = listState,
|
||||
horizontalAlignment = CenterHorizontally,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f, true)
|
||||
.padding(top = 64.dp)
|
||||
) {
|
||||
item {
|
||||
Image(
|
||||
|
||||
+1
-1
@@ -137,7 +137,7 @@ class ManageDonationsFragment :
|
||||
}
|
||||
|
||||
override fun getMaterial3OnScrollHelper(toolbar: Toolbar?): Material3OnScrollHelper {
|
||||
return object : Material3OnScrollHelper(activity = requireActivity(), views = listOf(toolbar!!), lifecycleOwner = viewLifecycleOwner) {
|
||||
return object : Material3OnScrollHelper(activity = requireActivity(), views = listOf(toolbar!!), lifecycleOwner = viewLifecycleOwner, setStatusBarColor = {}) {
|
||||
override val activeColorSet: ColorSet = ColorSet(R.color.transparent, CoreUiR.color.signal_colorBackground)
|
||||
override val inactiveColorSet: ColorSet = ColorSet(R.color.transparent, CoreUiR.color.signal_colorBackground)
|
||||
}
|
||||
|
||||
-2
@@ -22,7 +22,6 @@ import org.signal.core.ui.compose.Rows
|
||||
import org.signal.core.ui.compose.Scaffolds
|
||||
import org.signal.core.ui.compose.SignalIcons
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.rememberStatusBarColorNestedScrollModifier
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.jobs.ApkUpdateJob
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
@@ -92,7 +91,6 @@ private fun AppUpdatesSettingsScreen(
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.then(rememberStatusBarColorNestedScrollModifier())
|
||||
) {
|
||||
if (Build.VERSION.SDK_INT >= 31) {
|
||||
item {
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
@@ -29,7 +29,7 @@ class QrImageSelectionActivity : AppCompatActivity(), MediaGalleryFragment.Callb
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)
|
||||
enableEdgeToEdge()
|
||||
setContentView(R.layout.username_qr_image_selection_activity)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -14,6 +14,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
@@ -67,6 +68,7 @@ class UsernameQrScannerActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val galleryLauncher = registerForActivityResult(QrImageSelectionActivity.Contract()) { uri ->
|
||||
|
||||
+1
-7
@@ -29,7 +29,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||
import kotlinx.coroutines.launch
|
||||
import org.signal.core.ui.isSplitPane
|
||||
import org.signal.core.ui.permissions.Permissions
|
||||
import org.signal.core.util.DimensionUnit
|
||||
import org.signal.core.util.Result
|
||||
@@ -117,7 +116,6 @@ import org.thoughtcrime.securesms.util.ExpirationUtil
|
||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog
|
||||
@@ -275,11 +273,7 @@ class ConversationSettingsFragment :
|
||||
activity = requireActivity(),
|
||||
views = listOf(toolbar!!),
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
setStatusBarColor = { color ->
|
||||
if (!resources.isSplitPane() || activity is ConversationSettingsActivity) {
|
||||
WindowUtil.setStatusBarColor(requireActivity().window, color)
|
||||
}
|
||||
}
|
||||
setStatusBarColor = {}
|
||||
) {
|
||||
override val inactiveColorSet = ColorSet(
|
||||
toolbarColorRes = CoreUiR.color.signal_colorBackground_0,
|
||||
|
||||
-4
@@ -50,7 +50,6 @@ import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiBottomSheetDial
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.service.webrtc.links.UpdateCallLinkResult
|
||||
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcEphemeralState
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import org.thoughtcrime.securesms.webrtc.CallParticipantsViewState
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
@@ -76,9 +75,6 @@ class ComposeCallScreenMediator(private val activity: WebRtcCallActivity, viewMo
|
||||
private val lifecycleDisposable = LifecycleDisposable()
|
||||
|
||||
init {
|
||||
WindowUtil.clearTranslucentNavigationBar(activity.window)
|
||||
WindowUtil.clearTranslucentStatusBar(activity.window)
|
||||
|
||||
activity.enableEdgeToEdge(
|
||||
statusBarStyle = SystemBarStyle.dark(Color.TRANSPARENT),
|
||||
navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT)
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
package org.thoughtcrime.securesms.compose
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.app.Activity
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.google.android.material.animation.ArgbEvaluatorCompat
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
/**
|
||||
* Controls status-bar color based off ability to scroll up
|
||||
*/
|
||||
class StatusBarColorAnimator(
|
||||
private val activity: Activity
|
||||
) {
|
||||
private var animator: ValueAnimator? = null
|
||||
private var previousCanScrollUp: Boolean = false
|
||||
|
||||
private val normalColor = ContextCompat.getColor(activity, CoreUiR.color.signal_colorBackground)
|
||||
private val scrollColor = ContextCompat.getColor(activity, CoreUiR.color.signal_colorSurface2)
|
||||
|
||||
fun setCanScrollUp(canScrollUp: Boolean) {
|
||||
if (previousCanScrollUp == canScrollUp) {
|
||||
return
|
||||
}
|
||||
|
||||
previousCanScrollUp = canScrollUp
|
||||
applyState(canScrollUp)
|
||||
}
|
||||
|
||||
fun setColorImmediate() {
|
||||
val end = when {
|
||||
previousCanScrollUp -> scrollColor
|
||||
else -> normalColor
|
||||
}
|
||||
|
||||
animator?.cancel()
|
||||
WindowUtil.setStatusBarColor(
|
||||
activity.window,
|
||||
end
|
||||
)
|
||||
}
|
||||
|
||||
private fun applyState(canScrollUp: Boolean) {
|
||||
val (start, end) = when {
|
||||
canScrollUp -> normalColor to scrollColor
|
||||
else -> scrollColor to normalColor
|
||||
}
|
||||
|
||||
animator?.cancel()
|
||||
animator = ValueAnimator.ofFloat(0f, 1f).apply {
|
||||
duration = 200
|
||||
addUpdateListener {
|
||||
WindowUtil.setStatusBarColor(
|
||||
activity.window,
|
||||
ArgbEvaluatorCompat.getInstance().evaluate(it.animatedFraction, start, end)
|
||||
)
|
||||
}
|
||||
start()
|
||||
}
|
||||
}
|
||||
}
|
||||
-108
@@ -1,108 +0,0 @@
|
||||
package org.thoughtcrime.securesms.compose
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.app.Activity
|
||||
import androidx.activity.compose.LocalActivity
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.geometry.Offset
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.unit.Velocity
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.google.android.material.animation.ArgbEvaluatorCompat
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import kotlin.math.abs
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
/**
|
||||
* Controls status-bar color based off a nested scroll
|
||||
*
|
||||
* Recommended to use this with [rememberStatusBarColorNestedScrollModifier] since it'll prevent you from having to wire through
|
||||
* an activity or the connection to subcomponents.
|
||||
*/
|
||||
class StatusBarColorNestedScrollConnection(
|
||||
private val activity: Activity
|
||||
) : NestedScrollConnection {
|
||||
|
||||
private var animator: ValueAnimator? = null
|
||||
|
||||
private val normalColor = ContextCompat.getColor(activity, CoreUiR.color.signal_colorBackground)
|
||||
private val scrollColor = ContextCompat.getColor(activity, CoreUiR.color.signal_colorSurface2)
|
||||
|
||||
private var contentOffset = 0f
|
||||
|
||||
override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
|
||||
return Velocity.Zero
|
||||
}
|
||||
|
||||
override fun onPostScroll(consumed: Offset, available: Offset, source: NestedScrollSource): Offset {
|
||||
val oldContentOffset = contentOffset
|
||||
if (consumed.y == 0f && available.y > 0f) {
|
||||
contentOffset = 0f
|
||||
} else {
|
||||
contentOffset += consumed.y
|
||||
}
|
||||
|
||||
if (oldContentOffset.isNearZero() xor contentOffset.isNearZero()) {
|
||||
applyState()
|
||||
}
|
||||
|
||||
return Offset.Zero
|
||||
}
|
||||
|
||||
fun setColorImmediate() {
|
||||
val end = when {
|
||||
contentOffset.isNearZero() -> normalColor
|
||||
else -> scrollColor
|
||||
}
|
||||
|
||||
animator?.cancel()
|
||||
WindowUtil.setStatusBarColor(
|
||||
activity.window,
|
||||
end
|
||||
)
|
||||
}
|
||||
|
||||
private fun applyState() {
|
||||
val (start, end) = when {
|
||||
contentOffset.isNearZero() -> scrollColor to normalColor
|
||||
else -> normalColor to scrollColor
|
||||
}
|
||||
|
||||
animator?.cancel()
|
||||
animator = ValueAnimator.ofFloat(0f, 1f).apply {
|
||||
duration = 200
|
||||
addUpdateListener {
|
||||
WindowUtil.setStatusBarColor(
|
||||
activity.window,
|
||||
ArgbEvaluatorCompat.getInstance().evaluate(it.animatedFraction, start, end)
|
||||
)
|
||||
}
|
||||
start()
|
||||
}
|
||||
}
|
||||
|
||||
private fun Float.isNearZero(): Boolean = abs(this) < 0.001
|
||||
}
|
||||
|
||||
/**
|
||||
* Remembers the nested scroll modifier to ensure the proper status bar coloring behavior.
|
||||
*
|
||||
* This is only required if the screen you are modifying does not utilize edgeToEdge.
|
||||
*/
|
||||
@Composable
|
||||
fun rememberStatusBarColorNestedScrollModifier(): Modifier {
|
||||
val activity = LocalActivity.current as? AppCompatActivity
|
||||
|
||||
return remember {
|
||||
if (activity != null) {
|
||||
Modifier.nestedScroll(StatusBarColorNestedScrollConnection(activity))
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -3,16 +3,20 @@ package org.thoughtcrime.securesms.contactshare;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import static org.thoughtcrime.securesms.contactshare.Contact.Name;
|
||||
|
||||
@@ -69,6 +73,9 @@ public class ContactNameEditActivity extends PassphraseRequiredActivity {
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
toolbar.setTitle("");
|
||||
toolbar.setNavigationOnClickListener(v -> {
|
||||
Intent resultIntent = new Intent();
|
||||
@@ -80,6 +87,9 @@ public class ContactNameEditActivity extends PassphraseRequiredActivity {
|
||||
}
|
||||
|
||||
private void initializeViews(@NonNull Name name) {
|
||||
ScrollView scrollView = findViewById(R.id.scroll_view);
|
||||
SystemWindowInsetsSetter.attach(scrollView, this, WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
TextView givenName = findViewById(R.id.name_edit_given_name);
|
||||
TextView familyName = findViewById(R.id.name_edit_family_name);
|
||||
TextView middleName = findViewById(R.id.name_edit_middle_name);
|
||||
|
||||
+13
@@ -9,6 +9,7 @@ import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
@@ -16,10 +17,13 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
||||
@@ -90,6 +94,8 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
|
||||
Material3OnScrollHelper onScrollHelper = Material3OnScrollHelper.create(this, toolbar);
|
||||
onScrollHelper.attach(contactList);
|
||||
|
||||
applyEdgeToEdgeInsets(toolbar, contactList, sendButton);
|
||||
|
||||
ContactShareEditAdapter contactAdapter = new ContactShareEditAdapter(Glide.with(this), dynamicLanguage.getCurrentLocale(), this);
|
||||
contactList.setAdapter(contactAdapter);
|
||||
|
||||
@@ -103,6 +109,13 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
|
||||
viewModel.getEvents().observe(this, this::presentEvent);
|
||||
}
|
||||
|
||||
private void applyEdgeToEdgeInsets(@NonNull Toolbar toolbar, @NonNull RecyclerView list, @NonNull View sendButton) {
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(list, this, WindowInsetsCompat.Type.navigationBars());
|
||||
SystemWindowInsetsSetter.attach(sendButton, this, WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
+3
-4
@@ -14,7 +14,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.WindowUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -118,8 +118,6 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity {
|
||||
getSupportActionBar().setLogo(null);
|
||||
getSupportActionBar().setTitle("");
|
||||
toolbar.setNavigationOnClickListener(v -> onBackPressed());
|
||||
|
||||
WindowUtil.setStatusBarColor(getWindow(), ContextCompat.getColor(this, R.color.shared_contact_details_titlebar));
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
@@ -137,6 +135,7 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity {
|
||||
RecyclerView list = findViewById(R.id.contact_details_fields);
|
||||
list.setLayoutManager(new LinearLayoutManager(this));
|
||||
list.setAdapter(contactFieldAdapter);
|
||||
SystemWindowInsetsSetter.attach(list, this, WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
requestManager = Glide.with(this);
|
||||
}
|
||||
|
||||
-7
@@ -1,7 +1,5 @@
|
||||
package org.thoughtcrime.securesms.conversation
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.WindowCompat
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.conversation.v2.ConversationActivity
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
@@ -15,11 +13,6 @@ import org.thoughtcrime.securesms.util.ViewUtil
|
||||
*/
|
||||
class BubbleConversationActivity : ConversationActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
ViewUtil.hideKeyboard(this, findViewById(R.id.fragment_container))
|
||||
|
||||
@@ -12,7 +12,6 @@ import android.os.Bundle
|
||||
import androidx.activity.compose.LocalActivity
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@@ -77,7 +76,6 @@ class NewConversationActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
val navigateBack = onBackPressedDispatcher::onBackPressed
|
||||
|
||||
+9
@@ -2,13 +2,17 @@ package org.thoughtcrime.securesms.conversation.colors.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.Navigation
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.conversation.colors.ChatColors
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
class ChatColorSelectionFragment : Fragment(R.layout.chat_color_selection_fragment) {
|
||||
@@ -28,6 +32,11 @@ class ChatColorSelectionFragment : Fragment(R.layout.chat_color_selection_fragme
|
||||
Callbacks(args, view)
|
||||
)
|
||||
|
||||
toolbar.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT }
|
||||
SystemWindowInsetsSetter.attach(toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
|
||||
|
||||
SystemWindowInsetsSetter.attach(recycler, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||
|
||||
recycler.itemAnimator = null
|
||||
recycler.adapter = adapter
|
||||
|
||||
|
||||
+7
@@ -2,13 +2,17 @@ package org.thoughtcrime.securesms.conversation.colors.ui.custom
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.Navigation
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
|
||||
class CustomChatColorCreatorFragment : Fragment(R.layout.custom_chat_color_creator_fragment) {
|
||||
|
||||
@@ -27,6 +31,9 @@ class CustomChatColorCreatorFragment : Fragment(R.layout.custom_chat_color_creat
|
||||
)
|
||||
}
|
||||
|
||||
toolbar.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT }
|
||||
SystemWindowInsetsSetter.attach(toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
|
||||
|
||||
toolbar.setNavigationOnClickListener {
|
||||
Navigation.findNavController(it).popBackStack()
|
||||
}
|
||||
|
||||
+5
@@ -23,6 +23,7 @@ import androidx.annotation.Dimension
|
||||
import androidx.appcompat.widget.AppCompatSeekBar
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.Navigation
|
||||
@@ -33,6 +34,7 @@ import org.thoughtcrime.securesms.conversation.colors.ChatColors
|
||||
import org.thoughtcrime.securesms.conversation.colors.ui.ChatColorPreviewView
|
||||
import org.thoughtcrime.securesms.conversation.colors.ui.ChatColorSelectionViewModel
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.customizeOnDraw
|
||||
|
||||
@@ -69,6 +71,9 @@ class CustomChatColorCreatorPageFragment :
|
||||
val save: View = view.findViewById(R.id.save)
|
||||
val scrollView: ScrollView = view.findViewById(R.id.scroll_view)
|
||||
|
||||
scrollView.clipToPadding = false
|
||||
SystemWindowInsetsSetter.attach(scrollView, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||
|
||||
if (page == SINGLE_PAGE) {
|
||||
gradientTool.visibility = View.GONE
|
||||
} else {
|
||||
|
||||
+3
@@ -38,6 +38,7 @@ import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity;
|
||||
import org.signal.core.ui.permissions.Permissions;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.SpanUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import java.util.Locale;
|
||||
@@ -71,6 +72,8 @@ public abstract class DeviceTransferSetupFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
Group progressGroup = view.findViewById(R.id.device_transfer_setup_fragment_progress_group);
|
||||
|
||||
+3
@@ -10,6 +10,7 @@ import androidx.annotation.Nullable;
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.restore.RestoreActivity;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
/**
|
||||
* Shown after the new device successfully completes receiving a backup from the old device.
|
||||
@@ -21,6 +22,8 @@ public final class NewDeviceTransferCompleteFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
view.findViewById(R.id.new_device_transfer_complete_fragment_continue_registration)
|
||||
.setOnClickListener(v -> ((RestoreActivity) requireActivity()).onBackupCompletedSuccessfully());
|
||||
}
|
||||
|
||||
+3
@@ -7,6 +7,7 @@ import org.greenrobot.eventbus.EventBus
|
||||
import org.signal.core.ui.logging.LoggingFragment
|
||||
import org.signal.devicetransfer.TransferStatus
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
/**
|
||||
@@ -14,6 +15,8 @@ import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
*/
|
||||
class NewDeviceTransferInstructionsFragment : LoggingFragment(R.layout.new_device_transfer_instructions_fragment) {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
|
||||
view
|
||||
.findViewById<View>(R.id.new_device_transfer_instructions_fragment_continue)
|
||||
.setOnClickListener { findNavController().safeNavigate(R.id.action_device_transfer_setup) }
|
||||
|
||||
+3
@@ -9,6 +9,7 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
/**
|
||||
* Shown after the old device successfully completes sending a backup to the new device.
|
||||
@@ -20,6 +21,8 @@ public final class OldDeviceTransferCompleteFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
view.findViewById(R.id.old_device_transfer_complete_fragment_close)
|
||||
.setOnClickListener(v -> close());
|
||||
}
|
||||
|
||||
+3
@@ -17,6 +17,7 @@ import org.signal.devicetransfer.DeviceToDeviceTransferService;
|
||||
import org.signal.devicetransfer.TransferStatus;
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
|
||||
/**
|
||||
@@ -30,6 +31,8 @@ public final class OldDeviceTransferInstructionsFragment extends LoggingFragment
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
Toolbar toolbar = view.findViewById(R.id.old_device_transfer_instructions_fragment_toolbar);
|
||||
toolbar.setNavigationOnClickListener(v -> showConfirmExitDialog());
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
@@ -28,6 +29,7 @@ import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
||||
|
||||
@@ -98,6 +100,9 @@ public class GiphyActivity extends PassphraseRequiredActivity implements Keyboar
|
||||
searchView.setCallbacks(this);
|
||||
searchView.enableBackNavigation(true);
|
||||
ViewUtil.focusAndShowKeyboard(searchView);
|
||||
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.giphy_toolbar), this, WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.giphy_logo), this, WindowInsetsCompat.Type.navigationBars());
|
||||
}
|
||||
|
||||
private void handleGiphyMp4SaveResult(@NonNull GiphyMp4SaveResult result) {
|
||||
|
||||
-2
@@ -13,7 +13,6 @@ import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@@ -80,7 +79,6 @@ class AddMembersActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
setContent {
|
||||
|
||||
-2
@@ -10,7 +10,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
@@ -71,7 +70,6 @@ class AddToGroupsActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
val navigateBack = onBackPressedDispatcher::onBackPressed
|
||||
|
||||
+10
@@ -5,10 +5,12 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
@@ -25,6 +27,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -61,6 +64,9 @@ public final class ChooseNewAdminActivity extends PassphraseRequiredActivity {
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
try {
|
||||
groupId = GroupId.parse(Objects.requireNonNull(getIntent().getStringExtra(EXTRA_GROUP_ID))).requireV2();
|
||||
} catch (BadGroupIdException e) {
|
||||
@@ -70,6 +76,10 @@ public final class ChooseNewAdminActivity extends PassphraseRequiredActivity {
|
||||
groupList = findViewById(R.id.choose_new_admin_group_list);
|
||||
done = findViewById(R.id.choose_new_admin_done);
|
||||
|
||||
groupList.setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(groupList, this, WindowInsetsCompat.Type.navigationBars());
|
||||
SystemWindowInsetsSetter.attach(done, this, WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN);
|
||||
|
||||
initializeViewModel();
|
||||
|
||||
groupList.initializeAdapter(this);
|
||||
|
||||
-2
@@ -11,7 +11,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@@ -74,7 +73,6 @@ class CreateGroupActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState, ready)
|
||||
|
||||
val navigateBack = onBackPressedDispatcher::onBackPressed
|
||||
|
||||
+9
@@ -21,6 +21,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
|
||||
@@ -52,6 +53,7 @@ import org.thoughtcrime.securesms.recipients.ui.disappearingmessages.RecipientDi
|
||||
import org.signal.core.util.bitmaps.BitmapUtil;
|
||||
import org.thoughtcrime.securesms.util.ExpirationUtil;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
@@ -109,6 +111,13 @@ public class AddGroupDetailsFragment extends LoggingFragment {
|
||||
View addLater = view.findViewById(R.id.add_later);
|
||||
TextView disappearingMessageValue = view.findViewById(R.id.group_disappearing_messages_value);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
members.setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(members, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
SystemWindowInsetsSetter.attach(create, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN);
|
||||
|
||||
members.initializeAdapter(getViewLifecycleOwner());
|
||||
avatarPlaceholder = Objects.requireNonNull(VectorDrawableCompat.create(getResources(), R.drawable.ic_camera_outline_24, requireActivity().getTheme()));
|
||||
avatarPlaceholder.setColorFilter(new SimpleColorFilter(ContextCompat.getColor(requireContext(), R.color.signal_icon_tint_primary)));
|
||||
|
||||
+1
-8
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.thoughtcrime.securesms.groups.ui.incommon
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
@@ -29,7 +28,6 @@ import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
@@ -48,7 +46,6 @@ import org.signal.core.util.getParcelableExtraCompat
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.avatar.AvatarImage
|
||||
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
@@ -85,7 +82,6 @@ class GroupsInCommonActivity : PassphraseRequiredActivity() {
|
||||
setContent {
|
||||
SignalTheme {
|
||||
GroupsInCommonScreen(
|
||||
activity = this,
|
||||
viewModel = viewModel,
|
||||
onNavigateBack = ::supportFinishAfterTransition,
|
||||
onNavigateToConversation = ::navigateToConversation
|
||||
@@ -107,19 +103,16 @@ class GroupsInCommonActivity : PassphraseRequiredActivity() {
|
||||
|
||||
@Composable
|
||||
private fun GroupsInCommonScreen(
|
||||
activity: Activity,
|
||||
viewModel: GroupsInCommonViewModel,
|
||||
onNavigateBack: () -> Unit = {},
|
||||
onNavigateToConversation: (recipient: Recipient) -> Unit = {}
|
||||
) {
|
||||
val groups by viewModel.groups.collectAsStateWithLifecycle()
|
||||
val nestedScrollConnection = remember { StatusBarColorNestedScrollConnection(activity) }
|
||||
|
||||
GroupsInCommonContent(
|
||||
groups = groups,
|
||||
onBackPress = onNavigateBack,
|
||||
onRowClick = onNavigateToConversation,
|
||||
modifier = Modifier.nestedScroll(nestedScrollConnection)
|
||||
onRowClick = onNavigateToConversation
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -3,9 +3,11 @@ package org.thoughtcrime.securesms.groups.ui.invitesandrequests;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
@@ -21,6 +23,7 @@ import org.thoughtcrime.securesms.groups.ui.invitesandrequests.invited.PendingMe
|
||||
import org.thoughtcrime.securesms.groups.ui.invitesandrequests.requesting.RequestingMembersFragment;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
public class ManagePendingAndRequestingMembersActivity extends PassphraseRequiredActivity {
|
||||
|
||||
@@ -66,6 +69,9 @@ public class ManagePendingAndRequestingMembersActivity extends PassphraseRequire
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
requireSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
}
|
||||
|
||||
private static class ViewPagerAdapter extends FragmentStateAdapter {
|
||||
|
||||
+5
@@ -7,6 +7,7 @@ import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
@@ -16,6 +17,7 @@ import org.thoughtcrime.securesms.groups.ui.AdminActionsListener;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
|
||||
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.signal.core.ui.BottomSheetUtil;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -49,6 +51,9 @@ public class PendingMemberInvitesFragment extends Fragment {
|
||||
youInvitedEmptyState = view.findViewById(R.id.no_pending_from_you);
|
||||
othersInvitedEmptyState = view.findViewById(R.id.no_pending_from_others);
|
||||
|
||||
((ViewGroup) view).setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(view, this, WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
youInvited.initializeAdapter(getViewLifecycleOwner());
|
||||
othersInvited.initializeAdapter(getViewLifecycleOwner());
|
||||
|
||||
|
||||
+5
@@ -8,6 +8,7 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
@@ -18,6 +19,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupLinkUrlAndStatus;
|
||||
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.signal.core.ui.BottomSheetUtil;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -52,6 +54,9 @@ public class RequestingMembersFragment extends Fragment {
|
||||
noRequestingMessage = view.findViewById(R.id.no_requesting);
|
||||
requestingExplanation = view.findViewById(R.id.requesting_members_explain);
|
||||
|
||||
((ViewGroup) view).setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(view, this, WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
requestingMembers.initializeAdapter(getViewLifecycleOwner());
|
||||
|
||||
requestingMembers.setRecipientClickListener(recipient -> {
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.pin.PinOptOutDialog;
|
||||
import org.thoughtcrime.securesms.registration.util.RegistrationUtil;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
@@ -58,6 +59,8 @@ public abstract class BaseSvrPinFragment<ViewModel extends BaseSvrPinViewModel>
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
initializeViews(view);
|
||||
|
||||
viewModel = initializeViewModel();
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.pin.PinOptOutDialog;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
|
||||
public final class SvrSplashFragment extends Fragment {
|
||||
@@ -47,6 +48,8 @@ public final class SvrSplashFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
title = view.findViewById(R.id.kbs_splash_title);
|
||||
description = view.findViewById(R.id.kbs_splash_description);
|
||||
primaryAction = view.findViewById(R.id.kbs_splash_primary_action);
|
||||
|
||||
@@ -21,6 +21,9 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.app.ShareCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
@@ -99,6 +102,13 @@ public class SubmitDebugLogActivity extends BaseActivity {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setTitle(R.string.HelpSettingsFragment__debug_log);
|
||||
|
||||
// Insets are re-dispatched by appcompat's ActionBarOverlayLayout with the action bar height folded into the top inset.
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content), (v, insets) -> {
|
||||
Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(bars.left, bars.top, bars.right, bars.bottom);
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
|
||||
this.viewModel = new ViewModelProvider(this, new SubmitDebugLogViewModel.Factory()).get(SubmitDebugLogViewModel.class);
|
||||
|
||||
initView();
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
@@ -47,6 +48,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.loaders.MediaLoader;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.signal.core.util.concurrent.SimpleTask;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -196,6 +198,9 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity {
|
||||
}
|
||||
|
||||
private void initializeToolbar() {
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, this, WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
|
||||
+6
@@ -19,6 +19,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.lifecycle.Observer;
|
||||
@@ -57,6 +58,7 @@ import org.thoughtcrime.securesms.util.BottomOffsetDecoration;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.OffloadedMediaDialogUtil;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import org.json.JSONArray;
|
||||
@@ -172,6 +174,10 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
||||
this,
|
||||
sorting.isRelatedToFileSize(),
|
||||
threadId == MediaTable.ALL_THREADS);
|
||||
this.recyclerView.setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(recyclerView, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
SystemWindowInsetsSetter.attach(bottomActionBar, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN);
|
||||
|
||||
this.recyclerView.setAdapter(adapter);
|
||||
this.recyclerView.setLayoutManager(gridManager);
|
||||
this.recyclerView.setHasFixedSize(true);
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.view.ViewGroup.LayoutParams
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.transition.addListener
|
||||
import androidx.core.view.animation.PathInterpolatorCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
@@ -21,7 +20,6 @@ import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController
|
||||
import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import org.signal.core.ui.R as CoreUiR
|
||||
|
||||
class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner {
|
||||
|
||||
@@ -127,9 +125,6 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
|
||||
|
||||
voiceNoteMediaController = VoiceNoteMediaController(this, false)
|
||||
|
||||
val systemBarColor = ContextCompat.getColor(this, CoreUiR.color.signal_dark_colorSurface)
|
||||
window.statusBarColor = systemBarColor
|
||||
window.navigationBarColor = systemBarColor
|
||||
WindowUtil.clearLightStatusBar(window)
|
||||
WindowUtil.clearLightNavigationBar(window)
|
||||
|
||||
|
||||
@@ -485,7 +485,7 @@ class MediaPreviewV2Fragment :
|
||||
}
|
||||
|
||||
private fun crossfadeViewIn(view: View, duration: Long = 200): Boolean {
|
||||
return if (!view.isVisible && !fullscreenHelper.isSystemUiVisible) {
|
||||
return if (!view.isVisible && fullscreenHelper.isSystemUiVisible) {
|
||||
val viewPropertyAnimator = view.animate()
|
||||
.alpha(1f)
|
||||
.setDuration(duration)
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.view.KeyEvent
|
||||
import android.view.WindowManager
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.compose.foundation.layout.navigationBarsPadding
|
||||
@@ -99,8 +98,6 @@ class MediaSelectionActivity :
|
||||
}
|
||||
|
||||
override fun onPreCreate() {
|
||||
enableEdgeToEdge()
|
||||
|
||||
val sendType: MessageSendType = requireNotNull(intent.getParcelableExtraCompat(MESSAGE_SEND_TYPE, MessageSendType::class.java))
|
||||
val initialMedia: List<Media> = intent.getParcelableArrayListExtraCompat(MEDIA, Media::class.java) ?: listOf()
|
||||
val message: CharSequence? = if (shareToTextStory) null else draftText
|
||||
|
||||
+2
-1
@@ -115,7 +115,8 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
Material3OnScrollHelper(
|
||||
activity = requireActivity(),
|
||||
views = listOf(binding.mediaGalleryToolbar, binding.mediaGalleryStatusBarBackground),
|
||||
lifecycleOwner = viewLifecycleOwner
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
setStatusBarColor = {}
|
||||
).attach(binding.mediaGalleryGrid)
|
||||
|
||||
if (callbacks.isCameraEnabled()) {
|
||||
|
||||
@@ -7,7 +7,6 @@ package org.thoughtcrime.securesms.mediasend.v3
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -36,8 +35,6 @@ import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
class MediaSendV3Activity : PassphraseRequiredActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
||||
enableEdgeToEdge()
|
||||
|
||||
val contractArgs = MediaSendActivityContract.Args.fromIntent(intent)
|
||||
|
||||
setContent {
|
||||
|
||||
@@ -3,6 +3,8 @@ package org.thoughtcrime.securesms.megaphone;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
@@ -12,6 +14,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.PlayStoreUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
/**
|
||||
* Shown when a users build fully expires. Controlled by {@link Megaphones.Event#CLIENT_DEPRECATED}.
|
||||
@@ -24,6 +27,8 @@ public class ClientDeprecatedActivity extends PassphraseRequiredActivity {
|
||||
protected void onCreate(Bundle savedInstanceState, boolean ready) {
|
||||
setContentView(R.layout.client_deprecated_activity);
|
||||
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.client_deprecated_root), this, WindowInsetsCompat.Type.systemBars());
|
||||
|
||||
findViewById(R.id.client_deprecated_update_button).setOnClickListener(v -> onUpdateClicked());
|
||||
findViewById(R.id.client_deprecated_dont_update_button).setOnClickListener(v -> onDontUpdateClicked());
|
||||
}
|
||||
|
||||
+4
@@ -12,6 +12,7 @@ import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
@@ -20,6 +21,7 @@ import org.thoughtcrime.securesms.BaseActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.AvatarImageView;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -50,6 +52,8 @@ public class CalleeMustAcceptMessageRequestActivity extends BaseActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.callee_must_accept_message_request_dialog_fragment);
|
||||
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.callee_must_accept_root), this, WindowInsetsCompat.Type.systemBars());
|
||||
|
||||
boolean callingFixedToPortrait = getResources().getConfiguration().densityDpi < 480;
|
||||
if (callingFixedToPortrait) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
|
||||
+4
@@ -19,9 +19,12 @@ package org.thoughtcrime.securesms.migrations;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.BaseActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
/**
|
||||
* An activity that can be shown to block access to the rest of the app when a long-running or
|
||||
@@ -43,6 +46,7 @@ public class ApplicationMigrationActivity extends BaseActivity {
|
||||
if (running) {
|
||||
Log.i(TAG, "UI-blocking migration is in progress. Showing spinner.");
|
||||
setContentView(R.layout.application_migration_activity);
|
||||
SystemWindowInsetsSetter.attach(findViewById(R.id.application_migration_root), this, WindowInsetsCompat.Type.systemBars());
|
||||
} else {
|
||||
Log.i(TAG, "UI-blocking migration is no-longer in progress. Finishing.");
|
||||
startActivity(getIntent().getParcelableExtra("next_intent"));
|
||||
|
||||
@@ -13,7 +13,9 @@ import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -219,6 +221,8 @@ private fun NicknameContent(
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.consumeWindowInsets(paddingValues)
|
||||
.imePadding()
|
||||
.padding(horizontal = dimensionResource(id = CoreUiR.dimen.gutter))
|
||||
) {
|
||||
LazyColumn(modifier = Modifier.weight(1f)) {
|
||||
|
||||
+6
@@ -11,6 +11,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
@@ -20,6 +21,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.payments.MoneyView;
|
||||
import org.thoughtcrime.securesms.util.SpanUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
|
||||
@@ -38,6 +40,10 @@ public class DeactivateWalletFragment extends Fragment {
|
||||
View deactivateWithoutTransfer = view.findViewById(R.id.deactivate_wallet_fragment_deactivate);
|
||||
LearnMoreTextView notice = view.findViewById(R.id.deactivate_wallet_fragment_notice);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(view.findViewById(R.id.deactivate_wallet_fragment_scroll_view), getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
notice.setLearnMoreVisible(true);
|
||||
notice.setLink(getString(R.string.DeactivateWalletFragment__learn_more__we_recommend_transferring_your_funds));
|
||||
|
||||
|
||||
+6
@@ -2,10 +2,12 @@ package org.thoughtcrime.securesms.payments.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
import androidx.navigation.Navigation;
|
||||
@@ -24,6 +26,7 @@ import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog;
|
||||
import org.thoughtcrime.securesms.payments.preferences.model.PayeeParcelable;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
import org.signal.core.util.ExpiringProfileCredentialUtil;
|
||||
@@ -47,6 +50,9 @@ public class PaymentRecipientSelectionFragment extends LoggingFragment implement
|
||||
toolbar = view.findViewById(R.id.payment_recipient_selection_fragment_toolbar);
|
||||
toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
contactFilterView = view.findViewById(R.id.contact_filter_edit_text);
|
||||
|
||||
Bundle arguments = new Bundle();
|
||||
|
||||
+5
@@ -6,6 +6,7 @@ import android.view.View;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
@@ -16,6 +17,7 @@ import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
public class PaymentsAllActivityFragment extends LoggingFragment {
|
||||
|
||||
@@ -28,6 +30,9 @@ public class PaymentsAllActivityFragment extends LoggingFragment {
|
||||
ViewPager viewPager = view.findViewById(R.id.payments_all_activity_fragment_view_pager);
|
||||
TabLayout tabLayout = view.findViewById(R.id.payments_all_activity_fragment_tabs);
|
||||
Toolbar toolbar = view.findViewById(R.id.payments_all_activity_fragment_toolbar);
|
||||
View appBar = view.findViewById(R.id.payments_activity_fragment_appbar);
|
||||
|
||||
SystemWindowInsetsSetter.attach(appBar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
|
||||
+7
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.payments.preferences;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -12,6 +13,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.compose.ui.platform.ComposeView;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
@@ -41,6 +43,7 @@ import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.PlayStoreUtil;
|
||||
import org.thoughtcrime.securesms.util.SpanUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
|
||||
@@ -100,6 +103,10 @@ public class PaymentsHomeFragment extends LoggingFragment {
|
||||
LottieAnimationView refreshAnimation = view.findViewById(R.id.payments_home_fragment_header_refresh_animation);
|
||||
Stub<ComposeView> bannerView = ViewUtil.findStubById(view, R.id.banner_compose_view);
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(recycler, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
toolbar.setNavigationOnClickListener(v -> {
|
||||
viewModel.markAllPaymentsSeen();
|
||||
requireActivity().finish();
|
||||
|
||||
+4
@@ -5,6 +5,7 @@ import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
@@ -14,6 +15,7 @@ import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.PaymentPreferencesDirections;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
|
||||
public class PaymentsPagerItemFragment extends LoggingFragment {
|
||||
@@ -56,6 +58,8 @@ public class PaymentsPagerItemFragment extends LoggingFragment {
|
||||
PaymentsHomeAdapter adapter = new PaymentsHomeAdapter(new Callbacks());
|
||||
|
||||
recycler.setAdapter(adapter);
|
||||
recycler.setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(recycler, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
viewModel.getList().observe(getViewLifecycleOwner(), adapter::submitList);
|
||||
}
|
||||
|
||||
+9
@@ -2,10 +2,12 @@ package org.thoughtcrime.securesms.payments.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
@@ -13,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.settings.BaseSettingsAdapter;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
|
||||
import java.util.Currency;
|
||||
|
||||
@@ -31,6 +34,12 @@ public final class SetCurrencyFragment extends LoggingFragment {
|
||||
|
||||
toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
list.setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(list, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
SetCurrencyViewModel viewModel = new ViewModelProvider(this, new SetCurrencyViewModel.Factory()).get(SetCurrencyViewModel.class);
|
||||
|
||||
BaseSettingsAdapter adapter = new BaseSettingsAdapter();
|
||||
|
||||
+5
@@ -5,6 +5,7 @@ import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -17,6 +18,7 @@ import androidx.navigation.Navigation;
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.qr.QrView;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
|
||||
public final class PaymentsAddMoneyFragment extends LoggingFragment {
|
||||
@@ -28,6 +30,9 @@ public final class PaymentsAddMoneyFragment extends LoggingFragment {
|
||||
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
((ViewGroup) view).setClipToPadding(false);
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
PaymentsAddMoneyViewModel viewModel = new ViewModelProvider(this, new PaymentsAddMoneyViewModel.Factory()).get(PaymentsAddMoneyViewModel.class);
|
||||
|
||||
Toolbar toolbar = view.findViewById(R.id.payments_add_money_toolbar);
|
||||
|
||||
+7
@@ -8,6 +8,7 @@ import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.TextAppearanceSpan;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -16,6 +17,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.Group;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
@@ -35,6 +37,7 @@ import org.thoughtcrime.securesms.payments.State;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.SpanUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
import org.whispersystems.signalservice.api.payments.Money;
|
||||
|
||||
@@ -55,6 +58,10 @@ public final class PaymentDetailsFragment extends LoggingFragment {
|
||||
|
||||
toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
SystemWindowInsetsSetter.attach(view.findViewById(R.id.payments_details_scroll_view), getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars());
|
||||
|
||||
PaymentDetailsParcelable details = PaymentDetailsFragmentArgs.fromBundle(requireArguments()).getPaymentDetails();
|
||||
|
||||
AvatarImageView avatar = view.findViewById(R.id.payments_details_avatar);
|
||||
|
||||
+8
@@ -2,13 +2,17 @@ package org.thoughtcrime.securesms.payments.securitysetup
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.databinding.PaymentsSecuritySetupFragmentBinding
|
||||
import org.thoughtcrime.securesms.payments.preferences.PaymentsHomeFragmentDirections
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
/**
|
||||
@@ -19,6 +23,10 @@ class PaymentsSecuritySetupFragment : Fragment(R.layout.payments_security_setup_
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
val binding = PaymentsSecuritySetupFragmentBinding.bind(view)
|
||||
|
||||
binding.toolbar.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT }
|
||||
SystemWindowInsetsSetter.attach(binding.toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars())
|
||||
SystemWindowInsetsSetter.attach(binding.paymentsSecuritySetupScrollView, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
object : OnBackPressedCallback(true) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ShareCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
@@ -25,6 +26,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.signal.core.util.concurrent.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.SignalProxyUtil;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.signal.core.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
@@ -63,6 +65,9 @@ public class EditProxyFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
toolbar.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
SystemWindowInsetsSetter.attach(toolbar, getViewLifecycleOwner(), WindowInsetsCompat.Type.statusBars());
|
||||
|
||||
this.proxySwitch = view.findViewById(R.id.edit_proxy_switch);
|
||||
this.proxyTitle = view.findViewById(R.id.edit_proxy_address_title);
|
||||
this.proxyText = view.findViewById(R.id.edit_proxy_host);
|
||||
@@ -70,6 +75,8 @@ public class EditProxyFragment extends Fragment {
|
||||
this.saveButton = view.findViewById(R.id.edit_proxy_save);
|
||||
this.shareButton = view.findViewById(R.id.edit_proxy_share);
|
||||
|
||||
SystemWindowInsetsSetter.attach(saveButton, getViewLifecycleOwner(), WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN);
|
||||
|
||||
lifecycleDisposable = new LifecycleDisposable();
|
||||
lifecycleDisposable.bindTo(getViewLifecycleOwner());
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanFindMeByPhoneNumberFra
|
||||
import org.thoughtcrime.securesms.profiles.manage.EditProfileNameFragment;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
@@ -89,6 +90,8 @@ public class CreateProfileFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(binding.container, getViewLifecycleOwner());
|
||||
|
||||
GroupId groupId = GroupId.parseNullableOrThrow(requireArguments().getString(GROUP_ID, null));
|
||||
|
||||
initializeViewModel(requireArguments().getBoolean(EXCLUDE_SYSTEM, false), groupId, savedInstanceState != null);
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiUtil;
|
||||
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.adapter.AlwaysChangedDiffUtil;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
@@ -76,6 +77,8 @@ public class EditAboutFragment extends Fragment implements EditProfileActivity.E
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
this.emojiView = view.findViewById(R.id.edit_about_emoji);
|
||||
this.bodyView = view.findViewById(R.id.edit_about_body);
|
||||
this.countView = view.findViewById(R.id.edit_about_count);
|
||||
|
||||
@@ -44,6 +44,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationActivity
|
||||
import org.thoughtcrime.securesms.util.NameUtil.getAbbreviation
|
||||
import org.thoughtcrime.securesms.util.PlayStoreUtil
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog
|
||||
@@ -72,6 +73,8 @@ class EditProfileFragment : LoggingFragment() {
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
|
||||
disposables = LifecycleDisposable()
|
||||
disposables.bindTo(viewLifecycleOwner)
|
||||
|
||||
|
||||
+3
@@ -22,6 +22,7 @@ import org.signal.core.util.StringUtil;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.profiles.ProfileName;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
@@ -45,6 +46,8 @@ public class EditProfileNameFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
this.givenName = view.findViewById(R.id.edit_profile_name_given_name);
|
||||
this.familyName = view.findViewById(R.id.edit_profile_name_family_name);
|
||||
this.saveButton = view.findViewById(R.id.edit_profile_name_save);
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
|
||||
import org.thoughtcrime.securesms.databinding.UsernameEditFragmentBinding;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.util.FragmentResultContract;
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter;
|
||||
import org.thoughtcrime.securesms.util.UsernameUtil;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
@@ -69,6 +70,8 @@ public class UsernameEditFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
SystemWindowInsetsSetter.attach(view, getViewLifecycleOwner());
|
||||
|
||||
Bundle bundle = getArguments();
|
||||
if (bundle != null) {
|
||||
args = UsernameEditFragmentArgs.fromBundle(bundle);
|
||||
|
||||
@@ -13,6 +13,9 @@ import android.widget.Toast;
|
||||
import androidx.activity.result.contract.ActivityResultContract;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import org.signal.core.util.concurrent.SimpleTask;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -54,6 +57,13 @@ public class RecaptchaProofActivity extends PassphraseRequiredActivity {
|
||||
requireSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
requireSupportActionBar().setTitle(R.string.RecaptchaProofActivity_complete_verification);
|
||||
|
||||
// Insets are re-dispatched by appcompat's ActionBarOverlayLayout with the action bar height folded into the top inset.
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content), (v, insets) -> {
|
||||
Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(bars.left, bars.top, bars.right, bars.bottom);
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
|
||||
WebView webView = findViewById(R.id.recaptcha_webview);
|
||||
webView.getSettings().setJavaScriptEnabled(true);
|
||||
webView.clearCache(true);
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
package org.thoughtcrime.securesms.reactions.edit
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.content.ContextCompat
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
|
||||
class EditReactionsActivity : PassphraseRequiredActivity() {
|
||||
|
||||
@@ -21,10 +17,6 @@ class EditReactionsActivity : PassphraseRequiredActivity() {
|
||||
}
|
||||
theme.onCreate(this)
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
findViewById<View>(android.R.id.content).systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
WindowUtil.setStatusBarColor(window, ContextCompat.getColor(this, R.color.transparent))
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
supportFragmentManager.beginTransaction()
|
||||
.replace(android.R.id.content, EditReactionsFragment())
|
||||
|
||||
+6
-14
@@ -8,7 +8,7 @@ import android.view.animation.AnimationUtils
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.transition.ChangeBounds
|
||||
import androidx.transition.Transition
|
||||
@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.animation.transitions.AlphaTransition
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiImageView
|
||||
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiBottomSheetDialogFragment
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
|
||||
private val SELECTED_SIZE = ViewUtil.dpToPx(36)
|
||||
@@ -45,7 +46,7 @@ class EditReactionsFragment : LoggingFragment(R.layout.edit_reactions_fragment),
|
||||
toolbar.setNavigationOnClickListener {
|
||||
requireActivity().onBackPressed()
|
||||
}
|
||||
configureToolbar()
|
||||
configureInsets(view)
|
||||
|
||||
reactionViews = listOf(
|
||||
view.findViewById(R.id.reaction_1),
|
||||
@@ -88,18 +89,9 @@ class EditReactionsFragment : LoggingFragment(R.layout.edit_reactions_fragment),
|
||||
view.setOnClickListener { viewModel.setSelection(EditReactionsViewModel.NO_SELECTION) }
|
||||
}
|
||||
|
||||
private fun configureToolbar() {
|
||||
@Suppress("DEPRECATION")
|
||||
ViewCompat.setOnApplyWindowInsetsListener(toolbar) { _, insets ->
|
||||
updateToolbarTopMargin(insets.systemWindowInsetTop)
|
||||
insets
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateToolbarTopMargin(topMargin: Int) {
|
||||
val layoutParams = toolbar.layoutParams as ConstraintLayout.LayoutParams
|
||||
layoutParams.topMargin = topMargin
|
||||
toolbar.layoutParams = layoutParams
|
||||
private fun configureInsets(view: View) {
|
||||
SystemWindowInsetsSetter.attach(toolbar, viewLifecycleOwner, WindowInsetsCompat.Type.statusBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN)
|
||||
SystemWindowInsetsSetter.attach(view.findViewById(R.id.edit_reactions_fragment_save), viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars(), SystemWindowInsetsSetter.ApplyMode.MARGIN)
|
||||
}
|
||||
|
||||
private fun select(emojiImageView: EmojiImageView) {
|
||||
|
||||
@@ -18,10 +18,12 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
@@ -311,6 +313,8 @@ private fun Content(
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues)
|
||||
.consumeWindowInsets(paddingValues)
|
||||
.imePadding()
|
||||
.fillMaxSize()
|
||||
) {
|
||||
val onNextAction = remember(state.isLookupInProgress) {
|
||||
|
||||
+3
@@ -16,6 +16,7 @@ import org.signal.core.ui.logging.LoggingFragment
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
/**
|
||||
@@ -26,6 +27,8 @@ class AccountLockedFragment : LoggingFragment(R.layout.account_locked_fragment)
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
|
||||
setDebugLogSubmitMultiTapView(view.findViewById(R.id.account_locked_title))
|
||||
|
||||
val description = view.findViewById<TextView>(R.id.account_locked_description)
|
||||
|
||||
+2
@@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.ViewBinderDelegate
|
||||
import org.thoughtcrime.securesms.databinding.FragmentRegistrationCaptchaBinding
|
||||
import org.thoughtcrime.securesms.registration.fragments.RegistrationConstants
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
|
||||
abstract class CaptchaFragment : LoggingFragment(R.layout.fragment_registration_captcha) {
|
||||
|
||||
@@ -25,6 +26,7 @@ abstract class CaptchaFragment : LoggingFragment(R.layout.fragment_registration_
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
binding.registrationCaptchaWebView.settings.javaScriptEnabled = true
|
||||
binding.registrationCaptchaWebView.clearCache(true)
|
||||
|
||||
|
||||
+2
@@ -40,6 +40,7 @@ import org.thoughtcrime.securesms.registration.fragments.SignalStrengthPhoneStat
|
||||
import org.thoughtcrime.securesms.registration.sms.ReceivedSmsEvent
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationCheckpoint
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
@@ -67,6 +68,7 @@ class EnterCodeFragment : LoggingFragment(R.layout.fragment_registration_enter_c
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
setDebugLogSubmitMultiTapView(binding.verifyHeader)
|
||||
|
||||
phoneStateListener = SignalStrengthPhoneStateListener(this, PhoneStateCallback())
|
||||
|
||||
+2
@@ -68,6 +68,7 @@ import org.thoughtcrime.securesms.util.Dialogs
|
||||
import org.thoughtcrime.securesms.util.SignalE164Util
|
||||
import org.thoughtcrime.securesms.util.SpanUtil
|
||||
import org.thoughtcrime.securesms.util.SupportEmailUtil
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataObserverCallback
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
@@ -99,6 +100,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
setDebugLogSubmitMultiTapView(binding.verifyHeader)
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
|
||||
+2
@@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegat
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
import org.thoughtcrime.securesms.util.SupportEmailUtil
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -43,6 +44,7 @@ class RegistrationLockFragment : LoggingFragment(R.layout.fragment_registration_
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
setDebugLogSubmitMultiTapView(view.findViewById(R.id.kbs_lock_pin_title))
|
||||
|
||||
val args: RegistrationLockFragmentArgs = RegistrationLockFragmentArgs.fromBundle(requireArguments())
|
||||
|
||||
+3
@@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.registration.ui.phonenumber.EnterPhoneNumberMode
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
import org.thoughtcrime.securesms.util.SupportEmailUtil
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
@@ -44,6 +45,8 @@ class ReRegisterWithPinFragment : LoggingFragment(R.layout.fragment_registration
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
|
||||
RegistrationViewDelegate.setDebugLogSubmitMultiTapView(binding.pinRestorePinTitle)
|
||||
binding.pinRestorePinDescription.setText(R.string.RegistrationLockFragment__enter_the_pin_you_created_for_your_account)
|
||||
|
||||
|
||||
+4
@@ -15,11 +15,14 @@ import androidx.activity.viewModels
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.safeDrawing
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
@@ -221,6 +224,7 @@ private fun RestoreLocalBackupScreen(
|
||||
BoxWithConstraints(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.windowInsetsPadding(WindowInsets.safeDrawing)
|
||||
.horizontalGutters()
|
||||
) {
|
||||
val totalHeightPx = with(density) { maxHeight.roundToPx() }
|
||||
|
||||
+10
-1
@@ -14,10 +14,16 @@ import androidx.compose.foundation.layout.BoxScope
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.ColumnScope
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.only
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.safeDrawing
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -112,6 +118,7 @@ fun RegistrationScreen(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
.imePadding()
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
val context = LocalContext.current
|
||||
@@ -120,8 +127,9 @@ fun RegistrationScreen(
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.verticalScroll(scrollState)
|
||||
.weight(weight = 1f, fill = false)
|
||||
.windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal))
|
||||
.verticalScroll(scrollState)
|
||||
.padding(bottom = 16.dp)
|
||||
.horizontalGutters()
|
||||
) {
|
||||
@@ -160,6 +168,7 @@ fun RegistrationScreen(
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom))
|
||||
.padding(top = 8.dp, bottom = 24.dp)
|
||||
.horizontalGutters()
|
||||
) {
|
||||
|
||||
+3
@@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.registration.ui.permissions.GrantPermissionsFr
|
||||
import org.thoughtcrime.securesms.registration.ui.phonenumber.EnterPhoneNumberMode
|
||||
import org.thoughtcrime.securesms.util.BackupUtil
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
|
||||
@@ -45,6 +46,8 @@ class WelcomeFragment : LoggingFragment(R.layout.fragment_registration_welcome_v
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
|
||||
setDebugLogSubmitMultiTapView(binding.image)
|
||||
setDebugLogSubmitMultiTapView(binding.title)
|
||||
|
||||
|
||||
+2
@@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.databinding.FragmentChooseBackupBinding
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate
|
||||
import org.thoughtcrime.securesms.restore.RestoreViewModel
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
||||
/**
|
||||
@@ -44,6 +45,7 @@ class ChooseBackupFragment : LoggingFragment(R.layout.fragment_choose_backup) {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
RegistrationViewDelegate.setDebugLogSubmitMultiTapView(binding.chooseBackupFragmentTitle)
|
||||
binding.chooseBackupFragmentButton.setOnClickListener { onChooseBackupSelected() }
|
||||
|
||||
|
||||
+2
@@ -21,6 +21,7 @@ import org.signal.devicetransfer.TransferStatus
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.ViewBinderDelegate
|
||||
import org.thoughtcrime.securesms.databinding.FragmentDeviceTransferBinding
|
||||
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
|
||||
/**
|
||||
@@ -63,6 +64,7 @@ abstract class DeviceTransferFragment : LoggingFragment(R.layout.fragment_device
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
binding.deviceTransferFragmentCancel.setOnClickListener {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user