Merge "Add support for secondary text in QS"
This commit is contained in:
committed by
Android (Google) Code Review
commit
dd7edac551
@@ -108,6 +108,7 @@ public interface QSTile {
|
||||
public Supplier<Icon> iconSupplier;
|
||||
public int state = Tile.STATE_ACTIVE;
|
||||
public CharSequence label;
|
||||
public CharSequence secondaryLabel;
|
||||
public CharSequence contentDescription;
|
||||
public CharSequence dualLabelContentDescription;
|
||||
public boolean disabledByPolicy;
|
||||
@@ -122,6 +123,7 @@ public interface QSTile {
|
||||
final boolean changed = !Objects.equals(other.icon, icon)
|
||||
|| !Objects.equals(other.iconSupplier, iconSupplier)
|
||||
|| !Objects.equals(other.label, label)
|
||||
|| !Objects.equals(other.secondaryLabel, secondaryLabel)
|
||||
|| !Objects.equals(other.contentDescription, contentDescription)
|
||||
|| !Objects.equals(other.dualLabelContentDescription,
|
||||
dualLabelContentDescription)
|
||||
@@ -135,6 +137,7 @@ public interface QSTile {
|
||||
other.icon = icon;
|
||||
other.iconSupplier = iconSupplier;
|
||||
other.label = label;
|
||||
other.secondaryLabel = secondaryLabel;
|
||||
other.contentDescription = contentDescription;
|
||||
other.dualLabelContentDescription = dualLabelContentDescription;
|
||||
other.expandedAccessibilityClassName = expandedAccessibilityClassName;
|
||||
@@ -156,6 +159,7 @@ public interface QSTile {
|
||||
sb.append(",icon=").append(icon);
|
||||
sb.append(",iconSupplier=").append(iconSupplier);
|
||||
sb.append(",label=").append(label);
|
||||
sb.append(",secondaryLabel=").append(secondaryLabel);
|
||||
sb.append(",contentDescription=").append(contentDescription);
|
||||
sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
|
||||
sb.append(",expandedAccessibilityClassName=").append(expandedAccessibilityClassName);
|
||||
|
||||
@@ -18,6 +18,7 @@ import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.service.quicksettings.Tile;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -28,6 +29,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.R.id;
|
||||
import com.android.systemui.plugins.qs.QSIconView;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
|
||||
@@ -36,8 +38,10 @@ import libcore.util.Objects;
|
||||
/** View that represents a standard quick settings tile. **/
|
||||
public class QSTileView extends QSTileBaseView {
|
||||
|
||||
private static final boolean DUAL_TARGET_ALLOWED = false;
|
||||
private View mDivider;
|
||||
protected TextView mLabel;
|
||||
private TextView mSecondLine;
|
||||
private ImageView mPadLock;
|
||||
private int mState;
|
||||
private ViewGroup mLabelContainer;
|
||||
@@ -86,6 +90,8 @@ public class QSTileView extends QSTileBaseView {
|
||||
mDivider = mLabelContainer.findViewById(R.id.underline);
|
||||
mExpandIndicator = mLabelContainer.findViewById(R.id.expand_indicator);
|
||||
mExpandSpace = mLabelContainer.findViewById(R.id.expand_space);
|
||||
mSecondLine = mLabelContainer.findViewById(R.id.app_label);
|
||||
mSecondLine.setAlpha(.6f);
|
||||
|
||||
addView(mLabelContainer);
|
||||
}
|
||||
@@ -103,14 +109,20 @@ public class QSTileView extends QSTileBaseView {
|
||||
mState = state.state;
|
||||
mLabel.setText(state.label);
|
||||
}
|
||||
mExpandIndicator.setVisibility(state.dualTarget ? View.VISIBLE : View.GONE);
|
||||
mExpandSpace.setVisibility(state.dualTarget ? View.VISIBLE : View.GONE);
|
||||
mLabelContainer.setContentDescription(state.dualTarget ? state.dualLabelContentDescription
|
||||
if (!Objects.equal(mSecondLine.getText(), state.secondaryLabel)) {
|
||||
mSecondLine.setText(state.secondaryLabel);
|
||||
mSecondLine.setVisibility(TextUtils.isEmpty(state.secondaryLabel) ? View.GONE
|
||||
: View.VISIBLE);
|
||||
}
|
||||
boolean dualTarget = DUAL_TARGET_ALLOWED && state.dualTarget;
|
||||
mExpandIndicator.setVisibility(dualTarget ? View.VISIBLE : View.GONE);
|
||||
mExpandSpace.setVisibility(dualTarget ? View.VISIBLE : View.GONE);
|
||||
mLabelContainer.setContentDescription(dualTarget ? state.dualLabelContentDescription
|
||||
: null);
|
||||
if (state.dualTarget != mLabelContainer.isClickable()) {
|
||||
mLabelContainer.setClickable(state.dualTarget);
|
||||
mLabelContainer.setLongClickable(state.dualTarget);
|
||||
mLabelContainer.setBackground(state.dualTarget ? newTileBackground() : null);
|
||||
if (dualTarget != mLabelContainer.isClickable()) {
|
||||
mLabelContainer.setClickable(dualTarget);
|
||||
mLabelContainer.setLongClickable(dualTarget);
|
||||
mLabelContainer.setBackground(dualTarget ? newTileBackground() : null);
|
||||
}
|
||||
mLabel.setEnabled(!state.disabledByPolicy);
|
||||
mPadLock.setVisibility(state.disabledByPolicy ? View.VISIBLE : View.GONE);
|
||||
|
||||
@@ -125,11 +125,11 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
|
||||
state.slash = new SlashState();
|
||||
}
|
||||
state.slash.isSlashed = !enabled;
|
||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||
if (enabled) {
|
||||
state.label = null;
|
||||
if (connected) {
|
||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connected);
|
||||
state.label = mController.getLastDeviceName();
|
||||
state.secondaryLabel = mController.getLastDeviceName();
|
||||
CachedBluetoothDevice lastDevice = mController.getLastDevice();
|
||||
if (lastDevice != null) {
|
||||
int batteryLevel = lastDevice.getBatteryLevel();
|
||||
@@ -140,25 +140,20 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
|
||||
}
|
||||
}
|
||||
state.contentDescription = mContext.getString(
|
||||
R.string.accessibility_bluetooth_name, state.label);
|
||||
R.string.accessibility_bluetooth_name, state.secondaryLabel);
|
||||
} else if (state.isTransient) {
|
||||
state.icon = ResourceIcon.get(R.drawable.ic_bluetooth_transient_animation);
|
||||
state.contentDescription = mContext.getString(
|
||||
R.string.accessibility_quick_settings_bluetooth_connecting);
|
||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||
} else {
|
||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_on);
|
||||
state.contentDescription = mContext.getString(
|
||||
R.string.accessibility_quick_settings_bluetooth_on) + ","
|
||||
+ mContext.getString(R.string.accessibility_not_connected);
|
||||
}
|
||||
if (TextUtils.isEmpty(state.label)) {
|
||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||
}
|
||||
state.state = Tile.STATE_ACTIVE;
|
||||
} else {
|
||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_on);
|
||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||
state.contentDescription = mContext.getString(
|
||||
R.string.accessibility_quick_settings_bluetooth_off);
|
||||
state.state = Tile.STATE_INACTIVE;
|
||||
|
||||
Reference in New Issue
Block a user