handle edge to edge support for android 15

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-06-10 18:02:33 +02:00
parent b78befbcce
commit 5395157a48
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
6 changed files with 59 additions and 26 deletions

View File

@ -303,7 +303,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.13.1' implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.activity:activity-ktx:1.9.3' 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' implementation 'com.github.nextcloud-deps:android-talk-webrtc:132.6834.0'
gplayImplementation 'com.google.android.gms:play-services-base:18.6.0' gplayImplementation 'com.google.android.gms:play-services-base:18.6.0'

View File

@ -11,6 +11,7 @@ package com.nextcloud.talk.activities
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
@ -20,12 +21,12 @@ import android.view.WindowManager
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.webkit.SslErrorHandler import android.webkit.SslErrorHandler
import android.widget.EditText import android.widget.EditText
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import autodagger.AutoInjector import autodagger.AutoInjector
import com.google.android.material.dialog.MaterialAlertDialogBuilder 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.R
import com.nextcloud.talk.account.AccountVerificationActivity import com.nextcloud.talk.account.AccountVerificationActivity
import com.nextcloud.talk.account.ServerSelectionActivity 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.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.preferences.AppPreferences
import com.nextcloud.talk.utils.setStatusBarColor
import com.nextcloud.talk.utils.ssl.TrustManager import com.nextcloud.talk.utils.ssl.TrustManager
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
@ -82,7 +84,7 @@ open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
enableEdgeToEdge() adjustUIForAPILevel35()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
cleanTempCertPreference() cleanTempCertPreference()
@ -114,8 +116,12 @@ open class BaseActivity : AppCompatActivity() {
} }
fun setupSystemColors() { fun setupSystemColors() {
colorizeStatusBar() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
colorizeNavigationBar() setStatusBarColor(ResourcesCompat.getColor(resources, R.color.bg_default, context.theme))
} else {
colorizeStatusBar()
colorizeNavigationBar()
}
} }
open fun colorizeStatusBar() { open fun colorizeStatusBar() {

View File

@ -461,21 +461,26 @@ class ChatActivity :
setupActionBar() setupActionBar()
setContentView(binding.root) setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.chat_container)) { view, insets -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars()) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.chat_container)) { view, insets ->
val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars())
val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime())
val isKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime()) val isKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
val bottomPadding = if (isKeyboardVisible) imeInsets.bottom else navBarInsets.bottom val bottomPadding = if (isKeyboardVisible) imeInsets.bottom else navBarInsets.bottom
view.setPadding( view.setPadding(
view.paddingLeft, view.paddingLeft,
statusBarInsets.top, statusBarInsets.top,
view.paddingRight, view.paddingRight,
bottomPadding bottomPadding
) )
WindowInsetsCompat.CONSUMED WindowInsetsCompat.CONSUMED
}
} else {
colorizeStatusBar()
colorizeNavigationBar()
} }
conversationUser = currentUserProvider.currentUser.blockingGet() conversationUser = currentUserProvider.currentUser.blockingGet()
@ -1389,7 +1394,7 @@ class ChatActivity :
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable()) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
setActionBarTitle() setActionBarTitle()
// viewThemeUtils.material.themeToolbar(binding.chatToolbar) viewThemeUtils.material.themeToolbar(binding.chatToolbar)
} }
private fun initAdapter() { private fun initAdapter() {

View File

@ -934,8 +934,7 @@ class ConversationsListActivity :
} else { } else {
showToolbar() showToolbar()
} }
colorizeStatusBar() setupSystemColors()
colorizeNavigationBar()
} }
} }

View File

@ -0,0 +1,28 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
* 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
}
}

View File

@ -92,11 +92,6 @@
</com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.MaterialToolbar>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/chat_separator" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<RelativeLayout <RelativeLayout