Improve theming for toolbars

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2023-04-09 12:16:25 +02:00
parent 8171391154
commit 584947c8e3
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
11 changed files with 62 additions and 196 deletions

View File

@ -24,16 +24,19 @@ import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.WindowManager
import android.webkit.SslErrorHandler
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.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.events.CertificateEvent
import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.SecurityUtils
import com.nextcloud.talk.utils.preferences.AppPreferences
import com.nextcloud.talk.utils.ssl.TrustManager
@ -67,6 +70,9 @@ open class BaseActivity : AppCompatActivity() {
open val appBarLayoutType: AppBarLayoutType
get() = AppBarLayoutType.TOOLBAR
open val view: View?
get() = null
override fun onCreate(savedInstanceState: Bundle?) {
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
super.onCreate(savedInstanceState)
@ -86,6 +92,30 @@ open class BaseActivity : AppCompatActivity() {
}
}
fun setupSystemColors() {
colorizeStatusBar()
colorizeNavigationBar()
}
open fun colorizeStatusBar() {
if (resources != null) {
if (appBarLayoutType == AppBarLayoutType.SEARCH_BAR) {
viewThemeUtils.platform.resetStatusBar(this)
} else {
viewThemeUtils.platform.themeStatusBar(this)
}
}
}
fun colorizeNavigationBar() {
if (resources != null) {
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
}
}
fun showCertificateDialog(
cert: X509Certificate,
trustManager: TrustManager,

View File

@ -74,7 +74,6 @@ import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.core.content.PermissionChecker
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.core.widget.doAfterTextChanged
import androidx.emoji2.text.EmojiCompat
@ -160,7 +159,6 @@ import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.ContactUtils
import com.nextcloud.talk.utils.DateConstants
import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.FileUtils
import com.nextcloud.talk.utils.ImageEmojiEditText
import com.nextcloud.talk.utils.MagicCharPolicy
@ -244,6 +242,9 @@ class ChatActivity :
@Inject
lateinit var dateUtils: DateUtils
override val view: View
get() = binding.root
val disposables = DisposableSet()
var sessionIdAfterRoomJoined: String? = null
@ -313,8 +314,8 @@ class ChatActivity :
binding = ControllerChatBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
handleIntent(intent)
@ -562,6 +563,8 @@ class ChatActivity :
loadAvatarForStatusBar()
setActionBarTitle()
}
viewThemeUtils.material.colorToolbarOverflowIcon(binding.chatToolbar)
}
private fun setupActionBar() {
@ -573,21 +576,7 @@ class ChatActivity :
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent)))
setActionBarTitle()
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.chatToolbar)
}
private fun initAdapter() {

View File

@ -66,7 +66,6 @@ import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.ui.dialog.ContactsBottomDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import eu.davidea.flexibleadapter.FlexibleAdapter
@ -128,8 +127,8 @@ class ContactsActivity :
binding = ControllerContactsRvBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
if (savedInstanceState != null) {
if (adapter != null) {
@ -205,21 +204,7 @@ class ContactsActivity :
resources!!.getString(R.string.nc_app_product_name)
}
}
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.contactsToolbar)
}
override fun onSaveInstanceState(bundle: Bundle) {

View File

@ -39,7 +39,6 @@ import android.view.View.VISIBLE
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SwitchCompat
import androidx.core.content.res.ResourcesCompat
import androidx.work.Data
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
@ -81,7 +80,6 @@ import com.nextcloud.talk.shareditems.activities.SharedItemsActivity
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateConstants
import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule
@ -145,8 +143,8 @@ class ConversationInfoActivity :
binding = ControllerConversationInfoBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
conversationUser = intent.getParcelableExtra(BundleKeys.KEY_USER_ENTITY)!!
conversationToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!!
@ -199,21 +197,7 @@ class ConversationInfoActivity :
} else {
resources!!.getString(R.string.nc_conversation_menu_conversation_info)
}
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.conversationInfoToolbar)
}
private fun themeSwitchPreferences() {

View File

@ -27,12 +27,10 @@ package com.nextcloud.talk.conversationlist
import android.animation.AnimatorInflater
import android.annotation.SuppressLint
import android.app.Activity
import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Resources
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.net.Uri
@ -51,7 +49,6 @@ import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SearchView
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.MenuItemCompat
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.RecyclerView
@ -99,7 +96,6 @@ import com.nextcloud.talk.ui.dialog.ConversationsListBottomDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.ClosedInterfaceImpl
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.FileUtils
import com.nextcloud.talk.utils.Mimetype
import com.nextcloud.talk.utils.ParticipantPermissions
@ -196,8 +192,10 @@ class ConversationsListActivity :
binding = ControllerConversationsRvBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
viewThemeUtils.material.themeCardView(binding.searchToolbar)
viewThemeUtils.material.themeSearchBarText(binding.searchText)
forwardMessage = intent.getBooleanExtra(KEY_FORWARD_MSG_FLAG, false)
}
@ -252,21 +250,7 @@ class ConversationsListActivity :
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent)))
supportActionBar?.title = resources!!.getString(R.string.nc_app_product_name)
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.conversationListToolbar)
}
private fun loadUserAvatar(
@ -455,19 +439,13 @@ class ConversationsListActivity :
private fun showSearchOrToolbar() {
if (TextUtils.isEmpty(searchQuery)) {
val showSearchBar = appBarLayoutType == AppBarLayoutType.SEARCH_BAR
if (appBarLayoutType == AppBarLayoutType.EMPTY) {
hideBars()
if (appBarLayoutType == AppBarLayoutType.SEARCH_BAR) {
showSearchBar()
} else {
if (showSearchBar) {
showSearchBar()
} else {
showToolbar()
}
colorizeStatusBar(showSearchBar, this, resources)
showToolbar()
}
colorizeNavigationBar(this, resources)
colorizeStatusBar()
colorizeNavigationBar()
}
}
@ -489,7 +467,7 @@ class ConversationsListActivity :
private fun showToolbar() {
val layoutParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams
binding.searchToolbar.visibility = View.GONE
binding.searchToolbar.visibility = View.VISIBLE
binding.conversationListToolbar.visibility = View.VISIBLE
viewThemeUtils.material.colorToolbarOverflowIcon(binding.conversationListToolbar)
layoutParams.scrollFlags = 0
binding.conversationListAppbar.stateListAnimator = AnimatorInflater.loadStateListAnimator(
@ -499,11 +477,6 @@ class ConversationsListActivity :
binding.conversationListToolbar.layoutParams = layoutParams
}
private fun hideBars() {
binding.conversationListToolbar.visibility = View.GONE
binding.searchToolbar.visibility = View.GONE
}
private fun hideSearchBar() {
val layoutParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams
binding.searchToolbar.visibility = View.GONE
@ -515,25 +488,6 @@ class ConversationsListActivity :
)
}
private fun colorizeStatusBar(showSearchBar: Boolean, activity: Activity?, resources: Resources?) {
if (activity != null && resources != null) {
if (showSearchBar) {
viewThemeUtils.platform.resetStatusBar(activity)
} else {
viewThemeUtils.platform.themeStatusBar(activity, binding.root)
}
}
}
private fun colorizeNavigationBar(activity: Activity?, resources: Resources?) {
if (activity != null && resources != null) {
DisplayUtils.applyColorToNavigationBar(
activity.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
}
}
private fun hasActivityActionSendIntent(): Boolean {
return Intent.ACTION_SEND == intent.action || Intent.ACTION_SEND_MULTIPLE == intent.action
}

View File

@ -34,7 +34,6 @@ import android.view.inputmethod.EditorInfo
import android.widget.AdapterView
import android.widget.Toast
import androidx.appcompat.widget.SearchView
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.MenuItemCompat
import androidx.preference.PreferenceManager
import autodagger.AutoInjector
@ -44,7 +43,6 @@ import com.nextcloud.talk.adapters.GeocodingAdapter
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.databinding.ActivityGeocodingBinding
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys
import fr.dudie.nominatim.client.TalkJsonNominatimClient
import fr.dudie.nominatim.model.Address
@ -86,8 +84,8 @@ class GeocodingActivity :
binding = ActivityGeocodingBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
@ -131,21 +129,7 @@ class GeocodingActivity :
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent)))
supportActionBar?.title = ""
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.geocodingToolbar)
}
private fun initAdapter(addresses: List<Address>) {

View File

@ -131,8 +131,8 @@ class LocationPickerActivity :
binding = ActivityLocationBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
}
@ -181,21 +181,7 @@ class LocationPickerActivity :
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent)))
supportActionBar?.title = context.getString(R.string.nc_share_location)
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.locationPickerToolbar)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {

View File

@ -30,7 +30,6 @@ import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.appcompat.widget.SearchView
import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector
import com.nextcloud.talk.R
@ -41,7 +40,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.conversationlist.ConversationsListActivity
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ActivityMessageSearchBinding
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
import com.nextcloud.talk.utils.rx.SearchViewObservable.Companion.observeSearchView
@ -80,8 +78,8 @@ class MessageSearchActivity : BaseActivity() {
binding = ActivityMessageSearchBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
viewModel = ViewModelProvider(this, viewModelFactory)[MessageSearchViewModel::class.java]
user = userProvider.currentUser.blockingGet()
@ -99,21 +97,7 @@ class MessageSearchActivity : BaseActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
val conversationName = intent.getStringExtra(BundleKeys.KEY_CONVERSATION_NAME)
supportActionBar?.title = conversationName
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.messageSearchToolbar)
}
private fun setupStateObserver() {

View File

@ -40,7 +40,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.annotation.DrawableRes
import androidx.core.content.res.ResourcesCompat
import androidx.core.net.toFile
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
@ -117,8 +116,8 @@ class ProfileActivity : BaseActivity() {
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
binding = ActivityProfileBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
}
override fun onResume() {
@ -201,21 +200,7 @@ class ProfileActivity : BaseActivity() {
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent)))
supportActionBar?.title = context.getString(R.string.nc_profile_personal_info_title)
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.profileToolbar)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {

View File

@ -54,7 +54,6 @@ import android.widget.LinearLayout
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
@ -133,8 +132,8 @@ class SettingsActivity : BaseActivity() {
binding = ActivitySettingsBinding.inflate(layoutInflater)
setupActionBar()
setupSystemColors()
setContentView(binding.root)
setupSystemColors()
binding.avatarImage.let { ViewCompat.setTransitionName(it, "userAvatar.transitionTag") }
@ -234,21 +233,7 @@ class SettingsActivity : BaseActivity() {
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent)))
supportActionBar?.title = context.getString(R.string.nc_settings)
}
private fun setupSystemColors() {
DisplayUtils.applyColorToStatusBar(
this,
ResourcesCompat.getColor(
resources,
R.color.appbar,
null
)
)
DisplayUtils.applyColorToNavigationBar(
this.window,
ResourcesCompat.getColor(resources, R.color.bg_default, null)
)
viewThemeUtils.material.themeToolbar(binding.settingsToolbar)
}
private fun getCurrentUser() {

View File

@ -27,7 +27,7 @@
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/nc_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|always" />
app:showAsAction="collapseActionView|ifRoom" />
<item
android:id="@+id/contacts_selection_done"