Remove prototype for color QS tiles.

This removes the prototype added in ag/9363655

Test: build
Test: toggle settings and observe
Change-Id: I48785ea90b039793591d048fcbd330ab1caf6cd7
This commit is contained in:
Fabian Kozynski
2020-02-04 10:27:22 -05:00
parent 144034cf79
commit e87ef4d98d
6 changed files with 8 additions and 266 deletions

View File

@@ -14,9 +14,6 @@
package com.android.systemui.plugins.qs;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.metrics.LogMaker;
@@ -28,7 +25,6 @@ import com.android.systemui.plugins.qs.QSTile.Callback;
import com.android.systemui.plugins.qs.QSTile.Icon;
import com.android.systemui.plugins.qs.QSTile.State;
import java.lang.annotation.Retention;
import java.util.Objects;
import java.util.function.Supplier;
@@ -84,17 +80,6 @@ public interface QSTile {
return logMaker;
}
@Retention(SOURCE)
@IntDef({COLOR_TILE_ACCENT, COLOR_TILE_RED, COLOR_TILE_BLUE, COLOR_TILE_YELLOW,
COLOR_TILE_GREEN})
@interface ColorTile {}
int COLOR_TILE_ACCENT = 0;
int COLOR_TILE_RED = 1;
int COLOR_TILE_BLUE = 2;
int COLOR_TILE_YELLOW = 3;
int COLOR_TILE_GREEN = 4;
default void setColor(@ColorTile int color) {}
@ProvidesInterface(version = Callback.VERSION)
public interface Callback {
public static final int VERSION = 1;
@@ -141,7 +126,6 @@ public interface QSTile {
public SlashState slash;
public boolean handlesLongClick = true;
public boolean showRippleEffect = true;
public int colorActive = -1;
public boolean copyTo(State other) {
if (other == null) throw new IllegalArgumentException();
@@ -161,8 +145,7 @@ public interface QSTile {
|| !Objects.equals(other.dualTarget, dualTarget)
|| !Objects.equals(other.slash, slash)
|| !Objects.equals(other.handlesLongClick, handlesLongClick)
|| !Objects.equals(other.showRippleEffect, showRippleEffect)
|| !Objects.equals(other.colorActive, colorActive);
|| !Objects.equals(other.showRippleEffect, showRippleEffect);
other.icon = icon;
other.iconSupplier = iconSupplier;
other.label = label;
@@ -177,7 +160,6 @@ public interface QSTile {
other.slash = slash != null ? slash.copy() : null;
other.handlesLongClick = handlesLongClick;
other.showRippleEffect = showRippleEffect;
other.colorActive = colorActive;
return changed;
}

View File

@@ -1,140 +0,0 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.qs
import android.content.ContentResolver
import android.database.ContentObserver
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.provider.Settings
import android.util.Log
import com.android.systemui.plugins.qs.QSTile
private const val TAG = "QSColorController"
private const val QS_COLOR_ICON = "qs_color_icon"
private const val QS_COLOR_ENABLED = "qs_color_enabled"
private const val QS_COLOR_OVERRIDDEN_TILES = "qs_color_overridden_tiles"
private val qsColorIconUri = Settings.System.getUriFor(QS_COLOR_ICON)
private val qsColorEnabledUri = Settings.System.getUriFor(QS_COLOR_ENABLED)
class QSColorController private constructor() {
private var overrideColor = false
private var colorIcon = false
private lateinit var colorCache: SettingBackedMap
companion object {
val instance = QSColorController()
internal fun overrideColor() = instance.overrideColor
internal fun colorIcon() = instance.colorIcon
@QSTile.ColorTile
private fun getColorFromSetting(setting: String): Int {
return when (setting.toLowerCase()) {
"red" -> QSTile.COLOR_TILE_RED
"blue" -> QSTile.COLOR_TILE_BLUE
"green" -> QSTile.COLOR_TILE_GREEN
"yellow" -> QSTile.COLOR_TILE_YELLOW
else -> QSTile.COLOR_TILE_ACCENT
}
}
}
private fun getBooleanSetting(key: String, default: Boolean = false): Boolean =
try {
Settings.System.getInt(contentResolver, key) != 0
} catch (_: Settings.SettingNotFoundException) {
default
}
private lateinit var tileHost: QSHost
private lateinit var contentResolver: ContentResolver
fun initQSTileHost(host: QSHost) {
tileHost = host
contentResolver = tileHost.context.contentResolver
colorCache = SettingBackedMap(contentResolver, mutableMapOf())
colorIcon = getBooleanSetting(QS_COLOR_ICON)
overrideColor = getBooleanSetting(QS_COLOR_ENABLED)
readExistingSettings()
contentResolver.registerContentObserver(qsColorEnabledUri, true, settingsListener)
contentResolver.registerContentObserver(qsColorIconUri, false, settingsListener)
}
private fun readExistingSettings() {
Settings.System.getString(contentResolver, QS_COLOR_OVERRIDDEN_TILES)?.split(",")
?.mapNotNull { spec ->
Settings.System.getString(contentResolver, "$QS_COLOR_ENABLED/$spec")?.let {
spec to it
}
}?.forEach {
modifyTileColor(it.first, getColorFromSetting(it.second))
}
}
private val settingsListener = object : ContentObserver(Handler(Looper.getMainLooper())) {
override fun onChange(selfChange: Boolean, uri: Uri) {
super.onChange(selfChange, uri)
when (uri) {
qsColorIconUri -> colorIcon = getBooleanSetting(QS_COLOR_ICON)
qsColorEnabledUri -> overrideColor = getBooleanSetting(QS_COLOR_ENABLED)
else -> {
uri.path?.drop("/system/".length)?.let {
val color = getColorFromSetting(
Settings.System.getString(contentResolver, it) ?: "accent")
val tileSpec = uri.lastPathSegment ?: ""
modifyTileColor(tileSpec, color)
}
}
}
}
}
private fun modifyTileColor(spec: String, @QSTile.ColorTile color: Int) {
Log.w(TAG, "Setting color of tile $spec to $color")
colorCache.put(spec, color)
tileHost.tiles.firstOrNull { it.tileSpec == spec }?.setColor(color)
}
fun applyColorToTile(tile: QSTile) {
colorCache.get(tile.tileSpec)?.let {
modifyTileColor(tile.tileSpec, it)
}
}
fun applyColorToAllTiles() = tileHost.tiles.forEach(::applyColorToTile)
fun destroy() {
contentResolver.unregisterContentObserver(settingsListener)
}
class SettingBackedMap(
private val contentResolver: ContentResolver,
private val map: MutableMap<String, Int>
) : MutableMap<String, @QSTile.ColorTile Int> by map {
override fun put(key: String, @QSTile.ColorTile value: Int): Int? {
return map.put(key, value).also {
Settings.System.putString(contentResolver, QS_COLOR_OVERRIDDEN_TILES,
map.filterValues { it != QSTile.COLOR_TILE_ACCENT }
.keys
.joinToString(","))
}
}
}
}
fun overrideColor() = QSColorController.overrideColor()
fun colorIcon() = QSColorController.colorIcon()

View File

@@ -90,8 +90,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
private int mCurrentUser;
private final Optional<StatusBar> mStatusBarOptional;
private QSColorController mQSColorController = QSColorController.Companion.getInstance();
@Inject
public QSTileHost(Context context,
StatusBarIconController iconController,
@@ -127,8 +125,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
// AutoTileManager can modify mTiles so make sure mTiles has already been initialized.
mAutoTiles = autoTiles.get();
});
mQSColorController.initQSTileHost(this);
}
public StatusBarIconController getIconController() {
@@ -142,8 +138,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
mServices.destroy();
mPluginManager.removePluginListener(this);
mDumpController.unregisterDumpable(this);
mQSColorController.destroy();
}
@Override
@@ -280,8 +274,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
mCallbacks.get(i).onTilesChanged();
}
}
mQSColorController.applyColorToAllTiles();
}
@Override

View File

@@ -14,12 +14,10 @@
package com.android.systemui.qs.tileimpl;
import static com.android.systemui.qs.QSColorControllerKt.colorIcon;
import static com.android.systemui.qs.tileimpl.QSTileImpl.getColorForState;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -150,15 +148,10 @@ public class QSIconViewImpl extends QSIconView {
iv.clearColorFilter();
}
if (state.state != mState) {
int color = getColor(state.state, state.colorActive);
int color = getColor(state.state);
mState = state.state;
if (mTint != 0 && allowAnimations && shouldAnimate(iv)) {
if (colorIcon()) {
animateColor(mTint, color, iv, () -> updateIcon(iv, state, allowAnimations));
} else {
animateGrayScale(mTint, color, iv,
() -> updateIcon(iv, state, allowAnimations));
}
animateGrayScale(mTint, color, iv, () -> updateIcon(iv, state, allowAnimations));
mTint = color;
} else {
if (iv instanceof AlphaControlledSlashImageView) {
@@ -175,12 +168,8 @@ public class QSIconViewImpl extends QSIconView {
}
}
protected int getColor(int state, int colorActive) {
return getColorForState(getContext(), state, colorActive);
}
protected int getColor(int state) {
return getColor(state, -1);
return getColorForState(getContext(), state);
}
private void animateGrayScale(int fromColor, int toColor, ImageView iv,
@@ -217,37 +206,6 @@ public class QSIconViewImpl extends QSIconView {
}
}
private void animateColor(int fromColor, int toColor, ImageView iv,
final Runnable endRunnable) {
if (iv instanceof AlphaControlledSlashImageView) {
((AlphaControlledSlashImageView) iv)
.setFinalImageTintList(ColorStateList.valueOf(toColor));
}
if (mAnimationEnabled && ValueAnimator.areAnimatorsEnabled()) {
ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
anim.setDuration(QS_ANIM_LENGTH);
anim.addUpdateListener(animation -> {
float fraction = animation.getAnimatedFraction();
int color = (int) ArgbEvaluator.getInstance().evaluate(fraction, fromColor,
toColor);
setTint(iv, color);
});
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
endRunnable.run();
}
});
anim.start();
} else {
setTint(iv, toColor);
endRunnable.run();
}
}
public static void setTint(ImageView iv, int color) {
iv.setImageTintList(ColorStateList.valueOf(color));
}

View File

@@ -13,8 +13,6 @@
*/
package com.android.systemui.qs.tileimpl;
import static com.android.systemui.qs.QSColorControllerKt.colorIcon;
import static com.android.systemui.qs.QSColorControllerKt.overrideColor;
import static com.android.systemui.qs.tileimpl.QSIconViewImpl.QS_ANIM_LENGTH;
import android.animation.ValueAnimator;
@@ -76,8 +74,6 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView {
private int mCircleColor;
private int mBgSize;
private final boolean mQsColors = overrideColor();
private final boolean mQSIcons = colorIcon();
public QSTileBaseView(Context context, QSIconView icon) {
this(context, icon, false);
@@ -212,7 +208,7 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView {
}
protected void handleStateChanged(QSTile.State state) {
int circleColor = getCircleColor(state.state, mQsColors ? state.colorActive : -1);
int circleColor = getCircleColor(state.state);
boolean allowAnimations = animationsEnabled();
if (circleColor != mCircleColor) {
if (allowAnimations) {
@@ -259,11 +255,10 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView {
return mLocInScreen[1] >= -getHeight();
}
private int getCircleColor(int state, int colorActive) {
private int getCircleColor(int state) {
switch (state) {
case Tile.STATE_ACTIVE:
int color = (colorActive == -1) ? mColorActive : colorActive;
return mQsColors && mQSIcons ? Utils.applyAlpha(0.5f, color) : color;
return mColorActive;
case Tile.STATE_INACTIVE:
case Tile.STATE_UNAVAILABLE:
return mColorDisabled;
@@ -273,10 +268,6 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView {
}
}
private int getCircleColor(int state) {
return getCircleColor(state, -1);
}
@Override
public void setClickable(boolean clickable) {
super.setClickable(clickable);

View File

@@ -26,7 +26,6 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_STATUS_BAR_STATE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import static com.android.systemui.qs.QSColorControllerKt.colorIcon;
import android.app.ActivityManager;
import android.content.Context;
@@ -55,7 +54,6 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSIconView;
@@ -432,10 +430,6 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
public abstract CharSequence getTileLabel();
public static int getColorForState(Context context, int state) {
return getColorForState(context, state, -1);
}
public static int getColorForState(Context context, int state, int colorActive) {
switch (state) {
case Tile.STATE_UNAVAILABLE:
return Utils.getDisabled(context,
@@ -443,25 +437,13 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
case Tile.STATE_INACTIVE:
return Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary);
case Tile.STATE_ACTIVE:
return getActiveColor(context, colorActive);
return Utils.getColorAttrDefaultColor(context, android.R.attr.colorPrimary);
default:
Log.e("QSTile", "Invalid state " + state);
return 0;
}
}
private static int getActiveColor(Context context, int colorActive) {
if (colorIcon()) {
if (colorActive == -1) {
return Utils.getColorAccentDefaultColor(context);
} else {
return colorActive;
}
} else {
return Utils.getColorAttrDefaultColor(context, android.R.attr.colorPrimary);
}
}
protected final class H extends Handler {
private static final int ADD_CALLBACK = 1;
private static final int CLICK = 2;
@@ -645,27 +627,4 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
pw.println(this.getClass().getSimpleName() + ":");
pw.print(" "); pw.println(getState().toString());
}
@Override
public void setColor(@ColorTile int color) {
int resId;
switch(color) {
case COLOR_TILE_RED:
resId = R.color.GM2_red_500;
break;
case COLOR_TILE_BLUE:
resId = R.color.GM2_blue_500;
break;
case COLOR_TILE_GREEN:
resId = R.color.GM2_green_500;
break;
case COLOR_TILE_YELLOW:
resId = R.color.GM2_yellow_500;
break;
default:
resId = -1;
}
mTmpState.colorActive = resId == -1 ? -1 : mContext.getColor(resId);
refreshState();
}
}