diff options
4 files changed, 89 insertions, 54 deletions
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java index 2b169997168b..1d28c63f8398 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java @@ -16,9 +16,11 @@ package com.android.systemui.plugins.qs; import android.annotation.NonNull; import android.content.Context; +import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.metrics.LogMaker; import android.service.quicksettings.Tile; +import android.text.TextUtils; import android.view.View; import androidx.annotation.Nullable; @@ -175,6 +177,24 @@ public interface QSTile { public Drawable sideViewCustomDrawable; public String spec; + /** Get the state text. */ + public String getStateText(int arrayResId, Resources resources) { + if (state == Tile.STATE_UNAVAILABLE || this instanceof QSTile.BooleanState) { + String[] array = resources.getStringArray(arrayResId); + return array[state]; + } else { + return ""; + } + } + + /** Get the text for secondaryLabel. */ + public String getSecondaryLabel(String stateText) { + if (TextUtils.isEmpty(secondaryLabel)) { + return stateText; + } + return secondaryLabel.toString(); + } + public boolean copyTo(State other) { if (other == null) throw new IllegalArgumentException(); if (!other.getClass().equals(getClass())) throw new IllegalArgumentException(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index 2cffe8951b56..49ba5086f64d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -712,6 +712,10 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy return context.getDrawable(mResId); } + public int getResId() { + return mResId; + } + @Override public boolean equals(Object o) { return o instanceof ResourceIcon && ((ResourceIcon) o).mResId == mResId; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt index d0b04c93bba0..de1137e48074 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt @@ -440,12 +440,11 @@ open class QSTileViewImpl @JvmOverloads constructor( // State handling and description val stateDescription = StringBuilder() - val stateText = getStateText(state) + val arrayResId = SubtitleArrayMapping.getSubtitleId(state.spec) + val stateText = state.getStateText(arrayResId, resources) + state.secondaryLabel = state.getSecondaryLabel(stateText) if (!TextUtils.isEmpty(stateText)) { stateDescription.append(stateText) - if (TextUtils.isEmpty(state.secondaryLabel)) { - state.secondaryLabel = stateText - } } if (state.disabledByPolicy && state.state != Tile.STATE_UNAVAILABLE) { stateDescription.append(", ") @@ -591,16 +590,6 @@ open class QSTileViewImpl @JvmOverloads constructor( return resources.getStringArray(arrayResId)[Tile.STATE_UNAVAILABLE] } - private fun getStateText(state: QSTile.State): String { - return if (state.state == Tile.STATE_UNAVAILABLE || state is BooleanState) { - val arrayResId = SubtitleArrayMapping.getSubtitleId(state.spec) - val array = resources.getStringArray(arrayResId) - array[state.state] - } else { - "" - } - } - /* * The view should not be animated if it's not on screen and no part of it is visible. */ @@ -663,46 +652,6 @@ open class QSTileViewImpl @JvmOverloads constructor( ) } -@VisibleForTesting -internal object SubtitleArrayMapping { - private val subtitleIdsMap = mapOf<String?, Int>( - "internet" to R.array.tile_states_internet, - "wifi" to R.array.tile_states_wifi, - "cell" to R.array.tile_states_cell, - "battery" to R.array.tile_states_battery, - "dnd" to R.array.tile_states_dnd, - "flashlight" to R.array.tile_states_flashlight, - "rotation" to R.array.tile_states_rotation, - "bt" to R.array.tile_states_bt, - "airplane" to R.array.tile_states_airplane, - "location" to R.array.tile_states_location, - "hotspot" to R.array.tile_states_hotspot, - "inversion" to R.array.tile_states_inversion, - "saver" to R.array.tile_states_saver, - "dark" to R.array.tile_states_dark, - "work" to R.array.tile_states_work, - "cast" to R.array.tile_states_cast, - "night" to R.array.tile_states_night, - "screenrecord" to R.array.tile_states_screenrecord, - "reverse" to R.array.tile_states_reverse, - "reduce_brightness" to R.array.tile_states_reduce_brightness, - "cameratoggle" to R.array.tile_states_cameratoggle, - "mictoggle" to R.array.tile_states_mictoggle, - "controls" to R.array.tile_states_controls, - "wallet" to R.array.tile_states_wallet, - "qr_code_scanner" to R.array.tile_states_qr_code_scanner, - "alarm" to R.array.tile_states_alarm, - "onehanded" to R.array.tile_states_onehanded, - "color_correction" to R.array.tile_states_color_correction, - "dream" to R.array.tile_states_dream, - "font_scaling" to R.array.tile_states_font_scaling - ) - - fun getSubtitleId(spec: String?): Int { - return subtitleIdsMap.getOrDefault(spec, R.array.tile_states_default) - } -} - fun constrainSquishiness(squish: Float): Float { return 0.1f + squish * 0.9f } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt new file mode 100644 index 000000000000..f672e518f0b3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SubtitleArrayMapping.kt @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2023 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.tileimpl + +import com.android.systemui.R + +/** Return the subtitle resource Id of the given tile. */ +object SubtitleArrayMapping { + private val subtitleIdsMap: HashMap<String, Int> = HashMap() + init { + subtitleIdsMap["internet"] = R.array.tile_states_internet + subtitleIdsMap["wifi"] = R.array.tile_states_wifi + subtitleIdsMap["cell"] = R.array.tile_states_cell + subtitleIdsMap["battery"] = R.array.tile_states_battery + subtitleIdsMap["dnd"] = R.array.tile_states_dnd + subtitleIdsMap["flashlight"] = R.array.tile_states_flashlight + subtitleIdsMap["rotation"] = R.array.tile_states_rotation + subtitleIdsMap["bt"] = R.array.tile_states_bt + subtitleIdsMap["airplane"] = R.array.tile_states_airplane + subtitleIdsMap["location"] = R.array.tile_states_location + subtitleIdsMap["hotspot"] = R.array.tile_states_hotspot + subtitleIdsMap["inversion"] = R.array.tile_states_inversion + subtitleIdsMap["saver"] = R.array.tile_states_saver + subtitleIdsMap["dark"] = R.array.tile_states_dark + subtitleIdsMap["work"] = R.array.tile_states_work + subtitleIdsMap["cast"] = R.array.tile_states_cast + subtitleIdsMap["night"] = R.array.tile_states_night + subtitleIdsMap["screenrecord"] = R.array.tile_states_screenrecord + subtitleIdsMap["reverse"] = R.array.tile_states_reverse + subtitleIdsMap["reduce_brightness"] = R.array.tile_states_reduce_brightness + subtitleIdsMap["cameratoggle"] = R.array.tile_states_cameratoggle + subtitleIdsMap["mictoggle"] = R.array.tile_states_mictoggle + subtitleIdsMap["controls"] = R.array.tile_states_controls + subtitleIdsMap["wallet"] = R.array.tile_states_wallet + subtitleIdsMap["qr_code_scanner"] = R.array.tile_states_qr_code_scanner + subtitleIdsMap["alarm"] = R.array.tile_states_alarm + subtitleIdsMap["onehanded"] = R.array.tile_states_onehanded + subtitleIdsMap["color_correction"] = R.array.tile_states_color_correction + subtitleIdsMap["dream"] = R.array.tile_states_dream + subtitleIdsMap["font_scaling"] = R.array.tile_states_font_scaling + } + + /** Get the subtitle resource id of the given tile */ + fun getSubtitleId(spec: String?): Int { + return if (spec == null) { + R.array.tile_states_default + } else subtitleIdsMap[spec] ?: R.array.tile_states_default + } +} |