Skip to content

Commit a388bc0

Browse files
Eiichi Yoshikawaguruz
authored andcommitted
fix: edge-to-edge
1 parent e02c856 commit a388bc0

35 files changed

Lines changed: 774 additions & 327 deletions

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
22
androidGradlePlugin = "8.7.2"
3-
androidxActivity = "1.6.1"
3+
androidxActivity = "1.8.0"
44
androidxAnnotation = "1.6.0"
55
androidxAppCompat = "1.6.1"
66
androidxArch = "2.2.0"
@@ -47,6 +47,7 @@ stetho = "1.6.0"
4747
timber = "5.0.1"
4848

4949
[libraries]
50+
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidxActivity" }
5051
androidx-annotation = { group = "androidx.annotation", name = "annotation", version.ref = "androidxAnnotation" }
5152
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidxAppCompat" }
5253
androidx-arch-core-testing = { group = "androidx.arch.core", name = "core-testing", version.ref = "androidxArch" }

opencloudApp/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ dependencies {
1616
implementation libs.kotlinx.coroutines.core
1717

1818
// Android X
19+
implementation libs.androidx.activity
1920
implementation libs.androidx.annotation
2021
implementation libs.androidx.appcompat
2122
implementation libs.androidx.biometric

opencloudApp/src/main/AndroidManifest.xml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@
7777
android:name=".presentation.settings.privacypolicy.PrivacyPolicyActivity"
7878
android:label="@string/actionbar_privacy_policy" />
7979
<activity android:name=".presentation.settings.SettingsActivity" />
80-
<activity android:name=".presentation.migration.StorageMigrationActivity" />
80+
<activity android:name=".presentation.migration.StorageMigrationActivity"
81+
android:theme="@style/Theme.openCloud.Toolbar.Fill" />
8182
<activity
8283
android:name=".ui.activity.SplashActivity"
8384
android:exported="true"
@@ -194,11 +195,9 @@
194195
<activity
195196
android:name=".presentation.security.passcode.PassCodeActivity"
196197
android:label="@string/passcode_label"
197-
android:screenOrientation="portrait"
198-
android:theme="@style/Theme.openCloud" />
198+
android:screenOrientation="portrait" />
199199
<activity
200-
android:name=".presentation.conflicts.ConflictsResolveActivity"
201-
android:theme="@style/Theme.openCloud" />
200+
android:name=".presentation.conflicts.ConflictsResolveActivity" />
202201
<activity
203202
android:name=".presentation.logging.LogsListActivity"
204203
android:label="@string/prefs_log_open_logs_list_view"
@@ -236,8 +235,7 @@
236235
<activity
237236
android:name=".presentation.security.pattern.PatternActivity"
238237
android:screenOrientation="portrait"
239-
android:label="@string/pattern_label"
240-
android:theme="@style/Theme.openCloud" />
238+
android:label="@string/pattern_label" />
241239
<activity android:name=".presentation.security.biometric.BiometricActivity" />
242240
<!-- Own taskAffinity + singleTask so LoginActivity always runs in its own task.
243241
During re-auth, startActivityForResult overrides singleTask, so the first

opencloudApp/src/main/java/eu/opencloud/android/presentation/authentication/LoginActivity.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import androidx.appcompat.app.AppCompatActivity
4444
import androidx.browser.customtabs.CustomTabsIntent
4545
import androidx.core.net.toUri
4646
import androidx.core.view.isVisible
47+
import androidx.core.view.updatePadding
4748
import androidx.core.widget.doAfterTextChanged
4849
import eu.opencloud.android.BuildConfig
4950
import eu.opencloud.android.MainApp.Companion.accountType
@@ -82,6 +83,8 @@ import eu.opencloud.android.presentation.settings.SettingsActivity
8283
import eu.opencloud.android.providers.ContextProvider
8384
import eu.opencloud.android.providers.MdmProvider
8485
import eu.opencloud.android.ui.activity.FileDisplayActivity
86+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
87+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
8588
import eu.opencloud.android.ui.dialog.SslUntrustedCertDialog
8689
import eu.opencloud.android.utils.CONFIGURATION_OAUTH2_OPEN_ID_PROMPT
8790
import eu.opencloud.android.utils.CONFIGURATION_OAUTH2_OPEN_ID_SCOPE
@@ -159,10 +162,18 @@ class LoginActivity : AppCompatActivity(), SslUntrustedCertDialog.OnSslUntrusted
159162
savedInstanceState.getString(KEY_OIDC_STATE)?.let { authenticationViewModel.oidcState = it }
160163
}
161164

165+
// edge-to-edge
166+
enableEdgeToEdgePreSetContentView(true)
167+
162168
// UI initialization
163169
binding = AccountSetupBinding.inflate(layoutInflater)
164170
setContentView(binding.root)
165171

172+
// edge-to-edge
173+
enableEdgeToEdgePostSetContentView { inset ->
174+
binding.root.updatePadding(top = inset.top, bottom = inset.bottom)
175+
}
176+
166177
if (loginAction != ACTION_CREATE) {
167178
binding.accountUsername.isEnabled = false
168179
binding.accountUsername.isFocusable = false

opencloudApp/src/main/java/eu/opencloud/android/presentation/conflicts/ConflictsResolveActivity.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ package eu.opencloud.android.presentation.conflicts
2525

2626
import android.os.Bundle
2727
import androidx.appcompat.app.AppCompatActivity
28+
import androidx.core.view.updatePadding
2829
import androidx.lifecycle.Lifecycle
2930
import androidx.lifecycle.lifecycleScope
3031
import androidx.lifecycle.repeatOnLifecycle
32+
import eu.opencloud.android.databinding.ActivityConflictsResolveBinding
33+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
34+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
3135
import kotlinx.coroutines.flow.collectLatest
3236
import kotlinx.coroutines.launch
3337
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -36,6 +40,9 @@ import timber.log.Timber
3640

3741
class ConflictsResolveActivity : AppCompatActivity(), ConflictsResolveDialogFragment.OnConflictDecisionMadeListener {
3842

43+
private var _binding: ActivityConflictsResolveBinding? = null
44+
val binding get() = _binding!!
45+
3946
private val conflictsResolveViewModel by viewModel<ConflictsResolveViewModel> {
4047
parametersOf(
4148
intent.getParcelableExtra(
@@ -47,6 +54,19 @@ class ConflictsResolveActivity : AppCompatActivity(), ConflictsResolveDialogFrag
4754
override fun onCreate(savedInstanceState: Bundle?) {
4855
super.onCreate(savedInstanceState)
4956

57+
// edge-to-edge
58+
enableEdgeToEdgePreSetContentView(true)
59+
60+
_binding = ActivityConflictsResolveBinding.inflate(layoutInflater)
61+
setContentView(binding.root)
62+
setSupportActionBar(binding.toolbar)
63+
64+
// edge-to-edge
65+
enableEdgeToEdgePostSetContentView { insets ->
66+
binding.toolbar.updatePadding(top = insets.top)
67+
binding.root.updatePadding(bottom = insets.bottom)
68+
}
69+
5070
lifecycleScope.launch {
5171
repeatOnLifecycle(Lifecycle.State.STARTED) {
5272
conflictsResolveViewModel.currentFile.collectLatest { updatedOCFile ->

opencloudApp/src/main/java/eu/opencloud/android/presentation/logging/LogsListActivity.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import androidx.appcompat.app.AppCompatActivity
3434
import androidx.appcompat.widget.Toolbar
3535
import androidx.constraintlayout.widget.ConstraintLayout
3636
import androidx.core.view.isVisible
37+
import androidx.core.view.updatePadding
3738
import androidx.recyclerview.widget.DefaultItemAnimator
3839
import androidx.recyclerview.widget.DividerItemDecoration
3940
import androidx.recyclerview.widget.LinearLayoutManager
@@ -45,6 +46,8 @@ import eu.opencloud.android.extensions.showMessageInSnackbar
4546
import eu.opencloud.android.presentation.settings.logging.SettingsLogsViewModel
4647
import eu.opencloud.android.providers.LogsProvider
4748
import eu.opencloud.android.providers.MdmProvider
49+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
50+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
4851
import org.koin.androidx.viewmodel.ext.android.viewModel
4952
import timber.log.Timber
5053
import java.io.File
@@ -86,10 +89,20 @@ class LogsListActivity : AppCompatActivity() {
8689

8790
override fun onCreate(savedInstanceState: Bundle?) {
8891
super.onCreate(savedInstanceState)
92+
93+
// edge-to-edge
94+
enableEdgeToEdgePreSetContentView(false)
95+
8996
_binding = LogsListActivityBinding.inflate(layoutInflater)
9097
setContentView(binding.root)
9198
initToolbar()
9299
initList()
100+
101+
// edge-to-edge
102+
enableEdgeToEdgePostSetContentView { insets ->
103+
binding.toolbarActivityLogsList.root.updatePadding(top = insets.top)
104+
binding.recyclerViewActivityLogsList.updatePadding(bottom = insets.bottom)
105+
}
93106
}
94107

95108
private fun initToolbar() {

opencloudApp/src/main/java/eu/opencloud/android/presentation/migration/StorageMigrationActivity.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@ package eu.opencloud.android.presentation.migration
2222
import android.content.Context
2323
import android.content.Intent
2424
import android.os.Bundle
25+
import android.view.View
2526
import androidx.appcompat.app.AppCompatActivity
27+
import androidx.core.view.updatePadding
2628
import androidx.fragment.app.Fragment
2729
import eu.opencloud.android.MainApp
2830
import eu.opencloud.android.R
29-
import eu.opencloud.android.data.providers.implementation.OCSharedPreferencesProvider
3031
import eu.opencloud.android.data.providers.LegacyStorageProvider
32+
import eu.opencloud.android.data.providers.implementation.OCSharedPreferencesProvider
33+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
34+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
3135
import org.koin.androidx.viewmodel.ext.android.viewModel
3236
import timber.log.Timber
3337
import java.io.File
@@ -43,8 +47,21 @@ class StorageMigrationActivity : AppCompatActivity() {
4347

4448
override fun onCreate(savedInstanceState: Bundle?) {
4549
super.onCreate(savedInstanceState)
50+
51+
// edge-to-edge
52+
enableEdgeToEdgePreSetContentView(true)
53+
4654
setContentView(R.layout.activity_storage_migration)
4755

56+
// edge-to-edge
57+
enableEdgeToEdgePostSetContentView { insets ->
58+
findViewById<View>(android.R.id.content).updatePadding(
59+
top = insets.top,
60+
bottom = insets.bottom
61+
)
62+
}
63+
supportActionBar?.elevation = 0f
64+
4865
migrationViewModel.migrationState.observe(this) {
4966
navigateToNextMigrationScreen(it.peekContent())
5067
}

opencloudApp/src/main/java/eu/opencloud/android/presentation/releasenotes/ReleaseNotesActivity.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import android.content.Context
2323
import android.content.Intent
2424
import android.os.Bundle
2525
import androidx.appcompat.app.AppCompatActivity
26+
import androidx.core.view.updateLayoutParams
27+
import androidx.core.view.updatePadding
2628
import androidx.recyclerview.widget.LinearLayoutManager
2729
import eu.opencloud.android.BuildConfig
2830
import eu.opencloud.android.MainApp
@@ -31,6 +33,8 @@ import eu.opencloud.android.R
3133
import eu.opencloud.android.databinding.ReleaseNotesActivityBinding
3234
import eu.opencloud.android.presentation.authentication.LoginActivity
3335
import eu.opencloud.android.ui.activity.FileDisplayActivity
36+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
37+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
3438
import org.koin.androidx.viewmodel.ext.android.viewModel
3539

3640
class ReleaseNotesActivity : AppCompatActivity() {
@@ -45,10 +49,23 @@ class ReleaseNotesActivity : AppCompatActivity() {
4549

4650
override fun onCreate(savedInstanceState: Bundle?) {
4751
super.onCreate(savedInstanceState)
52+
53+
// edge-to-edge
54+
enableEdgeToEdgePreSetContentView(false)
55+
4856
_binding = ReleaseNotesActivityBinding.inflate(layoutInflater)
4957
setContentView(binding.root)
5058
setData()
5159
initView()
60+
61+
// edge-to-edge
62+
enableEdgeToEdgePostSetContentView { insets ->
63+
binding.topSpacer.updateLayoutParams {
64+
height = insets.top
65+
}
66+
binding.root.updatePadding(bottom = insets.bottom)
67+
}
68+
supportActionBar?.elevation = 0f;
5269
}
5370

5471
private fun initView() {

opencloudApp/src/main/java/eu/opencloud/android/presentation/security/passcode/PassCodeActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import android.view.WindowManager
4040
import android.widget.EditText
4141
import android.widget.LinearLayout
4242
import androidx.appcompat.app.AppCompatActivity
43+
import androidx.core.view.updatePadding
4344
import eu.opencloud.android.BuildConfig
4445
import eu.opencloud.android.R
4546
import eu.opencloud.android.databinding.PasscodelockBinding
@@ -51,6 +52,8 @@ import eu.opencloud.android.presentation.security.biometric.BiometricStatus
5152
import eu.opencloud.android.presentation.security.biometric.BiometricViewModel
5253
import eu.opencloud.android.presentation.security.biometric.EnableBiometrics
5354
import eu.opencloud.android.presentation.settings.security.SettingsSecurityFragment.Companion.EXTRAS_LOCK_ENFORCED
55+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
56+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
5457
import eu.opencloud.android.utils.PreferenceUtils
5558
import org.koin.androidx.viewmodel.ext.android.viewModel
5659
import org.koin.core.parameter.parametersOf
@@ -94,8 +97,19 @@ class PassCodeActivity : AppCompatActivity(), NumberKeyboardListener, EnableBiom
9497
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
9598
} // else, let it go, or taking screenshots & testing will not be possible
9699

100+
setSupportActionBar(binding.toolbar)
101+
102+
// edge-to-edge
103+
enableEdgeToEdgePreSetContentView(false)
104+
97105
setContentView(binding.root)
98106

107+
// edge-to-edge
108+
enableEdgeToEdgePostSetContentView { insets ->
109+
binding.toolbar?.updatePadding(top = insets.top)
110+
binding.root.updatePadding(bottom = insets.bottom)
111+
}
112+
99113
if (intent.getBooleanExtra(BIOMETRIC_HAS_FAILED, false)) {
100114
showMessageInSnackbar(message = getString(R.string.biometric_not_available))
101115
}

opencloudApp/src/main/java/eu/opencloud/android/presentation/security/pattern/PatternActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import android.view.View
3434
import android.view.WindowManager
3535
import androidx.appcompat.app.AppCompatActivity
3636
import androidx.core.view.isVisible
37+
import androidx.core.view.updatePadding
3738
import com.andrognito.patternlockview.PatternLockView.Dot
3839
import com.andrognito.patternlockview.listener.PatternLockViewListener
3940
import com.andrognito.patternlockview.utils.PatternLockUtils
@@ -49,6 +50,8 @@ import eu.opencloud.android.presentation.security.biometric.BiometricStatus
4950
import eu.opencloud.android.presentation.security.biometric.BiometricViewModel
5051
import eu.opencloud.android.presentation.security.biometric.EnableBiometrics
5152
import eu.opencloud.android.presentation.settings.security.SettingsSecurityFragment.Companion.EXTRAS_LOCK_ENFORCED
53+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePostSetContentView
54+
import eu.opencloud.android.ui.activity.enableEdgeToEdgePreSetContentView
5255
import eu.opencloud.android.utils.PreferenceUtils
5356
import org.koin.androidx.viewmodel.ext.android.viewModel
5457
import timber.log.Timber
@@ -77,8 +80,19 @@ class PatternActivity : AppCompatActivity(), EnableBiometrics {
7780

7881
_binding = ActivityPatternLockBinding.inflate(layoutInflater)
7982

83+
setSupportActionBar(binding.toolbar)
84+
85+
// edge-to-edge
86+
enableEdgeToEdgePreSetContentView(false)
87+
8088
setContentView(binding.root)
8189

90+
// edge-to-edge
91+
enableEdgeToEdgePostSetContentView { insets ->
92+
binding.toolbar?.updatePadding(top = insets.top)
93+
binding.root.updatePadding(bottom = insets.bottom)
94+
}
95+
8296
if (intent.getBooleanExtra(BIOMETRIC_HAS_FAILED, false)) {
8397
showMessageInSnackbar(message = getString(R.string.biometric_not_available))
8498
}

0 commit comments

Comments
 (0)