From 44bb18a4e7f9924865e45f73e8afd51a1a2e869e Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Mon, 9 May 2022 16:34:14 +0700 Subject: [PATCH] Fix search bar background --- lawnchair/res/values/config.xml | 2 + .../lawnchair/allapps/AllAppsSearchInput.kt | 8 +++ .../allapps/FallbackSearchInputView.kt | 49 ++++++++++++------- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/lawnchair/res/values/config.xml b/lawnchair/res/values/config.xml index 992164ce52..92871b975c 100644 --- a/lawnchair/res/values/config.xml +++ b/lawnchair/res/values/config.xml @@ -23,6 +23,8 @@ app.lawnchair.LawnchairProcessInitializer app.lawnchair.overview.TaskOverlayFactoryImpl + true + com.google.android.googlequicksearchbox/.VoiceSearchActivity diff --git a/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt b/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt index b04a8d9cc5..8ec9936818 100644 --- a/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt +++ b/lawnchair/src/app/lawnchair/allapps/AllAppsSearchInput.kt @@ -228,4 +228,12 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) : LinearLayout( } override fun getEditText() = input + + override fun setBackgroundVisibility(visible: Boolean, maxAlpha: Float) { + input.setBackgroundVisibility(visible, maxAlpha) + } + + override fun getBackgroundVisibility(): Boolean { + return input.getBackgroundVisibility() + } } diff --git a/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt b/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt index 03a815cb4f..dcf4d208d9 100644 --- a/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt +++ b/lawnchair/src/app/lawnchair/allapps/FallbackSearchInputView.kt @@ -1,5 +1,6 @@ package app.lawnchair.allapps +import android.animation.ValueAnimator import android.annotation.SuppressLint import android.content.Context import android.graphics.Rect @@ -11,19 +12,16 @@ import app.lawnchair.theme.drawable.DrawableTokens import app.lawnchair.util.EditTextExtensions.setCursorColor import app.lawnchair.util.EditTextExtensions.setTextSelectHandleColor import com.android.launcher3.ExtendedEditText +import com.android.launcher3.Utilities import com.android.launcher3.allapps.AllAppsContainerView class FallbackSearchInputView(context: Context, attrs: AttributeSet?) : ExtendedEditText(context, attrs) { private var appsView: AllAppsContainerView? = null - private var shown = true - set(value) { - if (field != value) { - field = value - updateBackground() - } - } private val bg = DrawableTokens.SearchInputFg.resolve(context) + private val bgAlphaAnimator = ValueAnimator.ofFloat(0f, 1f).apply { duration = 300 } + private var bgVisible = true + private var bgAlpha = 1f init { background = bg @@ -32,27 +30,24 @@ class FallbackSearchInputView(context: Context, attrs: AttributeSet?) : Extended setCursorColor(accentColor) setTextSelectHandleColor(accentColor) highlightColor = ColorUtils.setAlphaComponent(accentColor, 82) + + bgAlphaAnimator.addUpdateListener { updateBgAlpha() } + } + + private fun updateBgAlpha() { + val fraction = bgAlphaAnimator.animatedFraction + bg.alpha = (Utilities.mapRange(fraction, 0f, bgAlpha) * 255).toInt() } fun initialize(appsView: AllAppsContainerView) { this.appsView = appsView } - private fun updateBackground() { - val showBackground = shown && !isFocused - background = if (showBackground) bg else null - } - override fun hideKeyboard() { super.hideKeyboard() this.appsView?.requestFocus() } - override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) { - super.onFocusChanged(focused, direction, previouslyFocusedRect) - updateBackground() - } - override fun onAttachedToWindow() { super.onAttachedToWindow() if (layoutDirection == LAYOUT_DIRECTION_RTL) { @@ -60,4 +55,24 @@ class FallbackSearchInputView(context: Context, attrs: AttributeSet?) : Extended gravity = Gravity.RIGHT or Gravity.CENTER } } + + fun setBackgroundVisibility(visible: Boolean, maxAlpha: Float) { + if (bgVisible != visible) { + bgVisible = visible + bgAlpha = maxAlpha + if (visible) { + bgAlphaAnimator.start() + } else { + bgAlphaAnimator.reverse() + } + } else if (bgAlpha != maxAlpha && !bgAlphaAnimator.isRunning && visible) { + bgAlpha = maxAlpha + bgAlphaAnimator.setCurrentFraction(maxAlpha) + updateBgAlpha() + } + } + + fun getBackgroundVisibility(): Boolean { + return bgVisible + } }