ViewThemeUtils: remove dependencies on Talk classes where possible

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
Álvaro Brey 2022-08-30 16:29:11 +02:00
parent 05c60ff4b7
commit 8c08efbf4f
No known key found for this signature in database
GPG Key ID: 2585783189A62105
6 changed files with 48 additions and 26 deletions

View File

@ -334,7 +334,7 @@ class ContactsController(args: Bundle) :
val searchManager: SearchManager? = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager? val searchManager: SearchManager? = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager?
if (searchItem != null) { if (searchItem != null) {
searchView = MenuItemCompat.getActionView(searchItem) as SearchView searchView = MenuItemCompat.getActionView(searchItem) as SearchView
viewThemeUtils.androidx.themeSearchView(searchView!!) viewThemeUtils.talk.themeSearchView(searchView!!)
searchView!!.maxWidth = Int.MAX_VALUE searchView!!.maxWidth = Int.MAX_VALUE
searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER
var imeOptions: Int = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN var imeOptions: Int = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN

View File

@ -296,7 +296,7 @@ class ConversationsListController(bundle: Bundle) :
val searchManager = activity!!.getSystemService(Context.SEARCH_SERVICE) as SearchManager? val searchManager = activity!!.getSystemService(Context.SEARCH_SERVICE) as SearchManager?
if (searchItem != null) { if (searchItem != null) {
searchView = MenuItemCompat.getActionView(searchItem) as SearchView searchView = MenuItemCompat.getActionView(searchItem) as SearchView
viewThemeUtils.androidx.themeSearchView(searchView!!) viewThemeUtils.talk.themeSearchView(searchView!!)
searchView!!.maxWidth = Int.MAX_VALUE searchView!!.maxWidth = Int.MAX_VALUE
searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER
var imeOptions = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN var imeOptions = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN
@ -361,7 +361,7 @@ class ConversationsListController(bundle: Bundle) :
if (TextUtils.isEmpty(searchView!!.query.toString())) { if (TextUtils.isEmpty(searchView!!.query.toString())) {
searchView!!.onActionViewCollapsed() searchView!!.onActionViewCollapsed()
if (activity != null) { if (activity != null) {
viewThemeUtils.platform.resetStatusBar(activity, searchView!!) viewThemeUtils.platform.resetStatusBar(activity)
} }
} else { } else {
searchView!!.post { searchView!!.setQuery(TAG, true) } searchView!!.post { searchView!!.setQuery(TAG, true) }
@ -402,7 +402,7 @@ class ConversationsListController(bundle: Bundle) :
mainActivity.binding.searchToolbar.visibility = View.VISIBLE mainActivity.binding.searchToolbar.visibility = View.VISIBLE
if (resources != null) { if (resources != null) {
viewThemeUtils.platform viewThemeUtils.platform
.resetStatusBar(mainActivity, mainActivity.binding.searchToolbar) .resetStatusBar(mainActivity)
} }
} }
val layoutManager = binding.recyclerView.layoutManager as SmoothScrollLinearLayoutManager? val layoutManager = binding.recyclerView.layoutManager as SmoothScrollLinearLayoutManager?

View File

@ -217,7 +217,7 @@ abstract class BaseController(@LayoutRes var layoutRes: Int, args: Bundle? = nul
private fun colorizeStatusBar(showSearchBar: Boolean, activity: Activity?, resources: Resources?) { private fun colorizeStatusBar(showSearchBar: Boolean, activity: Activity?, resources: Resources?) {
if (activity != null && resources != null) { if (activity != null && resources != null) {
if (showSearchBar) { if (showSearchBar) {
view?.let { viewThemeUtils.platform.resetStatusBar(activity, it) } view?.let { viewThemeUtils.platform.resetStatusBar(activity) }
} else { } else {
view?.let { viewThemeUtils.platform.themeStatusBar(activity, it) } view?.let { viewThemeUtils.platform.themeStatusBar(activity, it) }
} }

View File

@ -26,6 +26,7 @@ import android.content.Context
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
import android.graphics.PorterDuff import android.graphics.PorterDuff
import android.os.Build
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
@ -42,8 +43,8 @@ import androidx.core.content.res.ResourcesCompat
import com.nextcloud.android.common.ui.color.ColorUtil import com.nextcloud.android.common.ui.color.ColorUtil
import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.MaterialSchemes
import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase
import com.nextcloud.android.common.ui.util.PlatformThemeUtil
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.utils.DisplayUtils
import eu.davidea.flexibleadapter.utils.FlexibleUtils import eu.davidea.flexibleadapter.utils.FlexibleUtils
import javax.inject.Inject import javax.inject.Inject
@ -68,14 +69,36 @@ class AndroidViewThemeUtils @Inject constructor(schemes: MaterialSchemes, privat
fun themeStatusBar(activity: Activity, view: View) { fun themeStatusBar(activity: Activity, view: View) {
withScheme(view) { scheme -> withScheme(view) { scheme ->
// TODO extract from displayutils to common applyColorToStatusBar(activity, scheme.surface)
DisplayUtils.applyColorToStatusBar(activity, scheme.surface)
} }
} }
fun resetStatusBar(activity: Activity, view: View) { private fun applyColorToStatusBar(activity: Activity, @ColorInt color: Int) {
// TODO extract from displayutils to common val window = activity.window
DisplayUtils.applyColorToStatusBar( val isLightTheme = !PlatformThemeUtil.isDarkMode(activity)
if (window != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val decor = window.decorView
if (isLightTheme) {
val systemUiFlagLightStatusBar = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
} else {
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
decor.systemUiVisibility = systemUiFlagLightStatusBar
} else {
decor.systemUiVisibility = 0
}
window.statusBarColor = color
} else if (isLightTheme) {
window.statusBarColor = Color.BLACK
}
}
}
fun resetStatusBar(activity: Activity) {
applyColorToStatusBar(
activity, activity,
ResourcesCompat.getColor( ResourcesCompat.getColor(
activity.resources, activity.resources,

View File

@ -23,8 +23,6 @@ package com.nextcloud.talk.ui.theme.viewthemeutils
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
import android.widget.LinearLayout
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.SwitchCompat
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
@ -38,18 +36,6 @@ import javax.inject.Inject
*/ */
class AndroidXViewThemeUtils @Inject constructor(schemes: MaterialSchemes) : class AndroidXViewThemeUtils @Inject constructor(schemes: MaterialSchemes) :
ViewThemeUtilsBase(schemes) { ViewThemeUtilsBase(schemes) {
fun themeSearchView(searchView: SearchView) {
withScheme(searchView) { scheme ->
// hacky as no default way is provided
val editText = searchView.findViewById<SearchView.SearchAutoComplete>(R.id.search_src_text)
val searchPlate = searchView.findViewById<LinearLayout>(R.id.search_plate)
editText.textSize = SEARCH_TEXT_SIZE
editText.setHintTextColor(scheme.onSurfaceVariant)
editText.setTextColor(scheme.onSurface)
editText.setBackgroundColor(scheme.surface)
searchPlate.setBackgroundColor(scheme.surface)
}
}
fun colorSwitchCompat(switchCompat: SwitchCompat) { fun colorSwitchCompat(switchCompat: SwitchCompat) {
withScheme(switchCompat) { scheme -> withScheme(switchCompat) { scheme ->
@ -97,6 +83,5 @@ class AndroidXViewThemeUtils @Inject constructor(schemes: MaterialSchemes) :
companion object { companion object {
private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77 private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77
private const val SEARCH_TEXT_SIZE: Float = 16f
} }
} }

View File

@ -34,6 +34,7 @@ import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.SwitchCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
@ -221,6 +222,18 @@ class TalkSpecificViewThemeUtils @Inject constructor(
} }
} }
fun themeSearchView(searchView: SearchView) {
withScheme(searchView) { scheme ->
// hacky as no default way is provided
val editText = searchView.findViewById<SearchView.SearchAutoComplete>(R.id.search_src_text)
val searchPlate = searchView.findViewById<LinearLayout>(R.id.search_plate)
editText.setHintTextColor(scheme.onSurfaceVariant)
editText.setTextColor(scheme.onSurface)
editText.setBackgroundColor(scheme.surface)
searchPlate.setBackgroundColor(scheme.surface)
}
}
companion object { companion object {
private val THEMEABLE_PLACEHOLDER_IDS = listOf( private val THEMEABLE_PLACEHOLDER_IDS = listOf(
R.drawable.ic_mimetype_package_x_generic, R.drawable.ic_mimetype_package_x_generic,
@ -230,5 +243,6 @@ class TalkSpecificViewThemeUtils @Inject constructor(
private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt()
private const val HALF_ALPHA_INT: Int = 255 / 2 private const val HALF_ALPHA_INT: Int = 255 / 2
private const val SEARCH_TEXT_SIZE: Float = 16f
} }
} }