Browse Source

Improve theming for toolbars

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 1 year ago
parent
commit
584947c8e3

+ 30 - 0
app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt

@@ -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,

+ 7 - 18
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -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() {

+ 2 - 17
app/src/main/java/com/nextcloud/talk/contacts/ContactsActivity.kt

@@ -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) {

+ 2 - 18
app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt

@@ -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() {

+ 10 - 56
app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

@@ -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
     }

+ 2 - 18
app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt

@@ -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>) {

+ 2 - 16
app/src/main/java/com/nextcloud/talk/location/LocationPickerActivity.kt

@@ -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 {

+ 2 - 18
app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt

@@ -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() {

+ 2 - 17
app/src/main/java/com/nextcloud/talk/profile/ProfileActivity.kt

@@ -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 {

+ 2 - 17
app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt

@@ -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() {

+ 1 - 1
app/src/main/res/menu/menu_contacts.xml

@@ -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"