From 5395157a48d8e2643f15b5cf5b434c27a1ba912f Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Tue, 10 Jun 2025 18:02:33 +0200 Subject: [PATCH] handle edge to edge support for android 15 Signed-off-by: Marcel Hibbe --- app/build.gradle | 2 +- .../nextcloud/talk/activities/BaseActivity.kt | 14 +++++--- .../com/nextcloud/talk/chat/ChatActivity.kt | 33 +++++++++++-------- .../ConversationsListActivity.kt | 3 +- .../talk/utils/AppCompatActivityExtensions.kt | 28 ++++++++++++++++ app/src/main/res/layout/activity_chat.xml | 5 --- 6 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/utils/AppCompatActivityExtensions.kt diff --git a/app/build.gradle b/app/build.gradle index a173dd547..170c185be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -303,7 +303,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.13.1' implementation 'androidx.activity:activity-ktx:1.9.3' - implementation 'com.github.nextcloud.android-common:ui:0.23.2' + implementation 'com.github.nextcloud.android-common:ui:0.25.0' implementation 'com.github.nextcloud-deps:android-talk-webrtc:132.6834.0' gplayImplementation 'com.google.android.gms:play-services-base:18.6.0' diff --git a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt index 354c23d4a..fd339cf02 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt @@ -11,6 +11,7 @@ package com.nextcloud.talk.activities import android.annotation.SuppressLint import android.content.Context import android.content.Intent +import android.os.Build import android.os.Bundle import android.text.TextUtils import android.util.Log @@ -20,12 +21,12 @@ import android.view.WindowManager import android.view.inputmethod.EditorInfo import android.webkit.SslErrorHandler import android.widget.EditText -import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.content.res.ResourcesCompat import autodagger.AutoInjector import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.nextcloud.android.common.ui.util.extensions.adjustUIForAPILevel35 import com.nextcloud.talk.R import com.nextcloud.talk.account.AccountVerificationActivity import com.nextcloud.talk.account.ServerSelectionActivity @@ -41,6 +42,7 @@ import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import com.nextcloud.talk.utils.preferences.AppPreferences +import com.nextcloud.talk.utils.setStatusBarColor import com.nextcloud.talk.utils.ssl.TrustManager import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -82,7 +84,7 @@ open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) - enableEdgeToEdge() + adjustUIForAPILevel35() super.onCreate(savedInstanceState) cleanTempCertPreference() @@ -114,8 +116,12 @@ open class BaseActivity : AppCompatActivity() { } fun setupSystemColors() { - colorizeStatusBar() - colorizeNavigationBar() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + setStatusBarColor(ResourcesCompat.getColor(resources, R.color.bg_default, context.theme)) + } else { + colorizeStatusBar() + colorizeNavigationBar() + } } open fun colorizeStatusBar() { diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index b057b4164..050c198db 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -461,21 +461,26 @@ class ChatActivity : setupActionBar() setContentView(binding.root) - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.chat_container)) { view, insets -> - val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars()) - val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) - val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.chat_container)) { view, insets -> + val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars()) + val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) + val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) - val isKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) - val bottomPadding = if (isKeyboardVisible) imeInsets.bottom else navBarInsets.bottom + val isKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) + val bottomPadding = if (isKeyboardVisible) imeInsets.bottom else navBarInsets.bottom - view.setPadding( - view.paddingLeft, - statusBarInsets.top, - view.paddingRight, - bottomPadding - ) - WindowInsetsCompat.CONSUMED + view.setPadding( + view.paddingLeft, + statusBarInsets.top, + view.paddingRight, + bottomPadding + ) + WindowInsetsCompat.CONSUMED + } + } else { + colorizeStatusBar() + colorizeNavigationBar() } conversationUser = currentUserProvider.currentUser.blockingGet() @@ -1389,7 +1394,7 @@ class ChatActivity : supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable()) setActionBarTitle() - // viewThemeUtils.material.themeToolbar(binding.chatToolbar) + viewThemeUtils.material.themeToolbar(binding.chatToolbar) } private fun initAdapter() { diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt index 1086d9d8e..07acbd29a 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt @@ -934,8 +934,7 @@ class ConversationsListActivity : } else { showToolbar() } - colorizeStatusBar() - colorizeNavigationBar() + setupSystemColors() } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/AppCompatActivityExtensions.kt b/app/src/main/java/com/nextcloud/talk/utils/AppCompatActivityExtensions.kt new file mode 100644 index 000000000..02149832c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/AppCompatActivityExtensions.kt @@ -0,0 +1,28 @@ +/* + * Nextcloud Talk - Android Client + * + * SPDX-FileCopyrightText: 2025 Marcel Hibbe + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.nextcloud.talk.utils + +import android.os.Build +import android.view.WindowInsets +import androidx.annotation.ColorInt +import androidx.appcompat.app.AppCompatActivity + +// replace this with the common lib whenever https://github.com/nextcloud/android-common/pull/668 is merged +// and then delete this file +fun AppCompatActivity.setStatusBarColor(@ColorInt color: Int) { + window.decorView.setOnApplyWindowInsetsListener { view, insets -> + view.setBackgroundColor(color) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + val statusBarHeight = insets.getInsets(WindowInsets.Type.statusBars()).top + view.setPadding(0, statusBarHeight, 0, 0) + } + + insets + } +} diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml index 582b2a2df..c55d38edd 100644 --- a/app/src/main/res/layout/activity_chat.xml +++ b/app/src/main/res/layout/activity_chat.xml @@ -92,11 +92,6 @@ - -