Merge "Remove sub-text from slice builder" into rvc-dev

This commit is contained in:
Yanting Yang
2020-04-28 07:48:45 +00:00
committed by Android (Google) Code Review
7 changed files with 101 additions and 77 deletions

View File

@@ -57,6 +57,7 @@ import android.net.LinkProperties;
import android.net.Network; import android.net.Network;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.Binder;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
@@ -1089,4 +1090,15 @@ public final class Utils extends com.android.settingslib.Utils {
} }
return f; return f;
} }
/**
* Returns true if current binder uid is Settings Intelligence.
*/
public static boolean isSettingsIntelligence(Context context) {
final int callingUid = Binder.getCallingUid();
final String callingPackage = context.getPackageManager().getPackagesForUid(callingUid)[0];
final boolean isSettingsIntelligence = TextUtils.equals(callingPackage,
context.getString(R.string.config_settingsintelligence_package_name));
return isSettingsIntelligence;
}
} }

View File

@@ -96,15 +96,18 @@ public class MobileDataSlice implements CustomSliceable {
ListBuilder.ICON_IMAGE, title); ListBuilder.ICON_IMAGE, title);
final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
null /* actionTitle */, isMobileDataEnabled()); null /* actionTitle */, isMobileDataEnabled());
final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
.setTitle(title)
.addEndItem(toggleSliceAction)
.setPrimaryAction(primarySliceAction);
if (!Utils.isSettingsIntelligence(mContext)) {
rowBuilder.setSubtitle(summary);
}
final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
ListBuilder.INFINITY) ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new ListBuilder.RowBuilder() .addRow(rowBuilder);
.setTitle(title)
.setSubtitle(summary)
.addEndItem(toggleSliceAction)
.setPrimaryAction(primarySliceAction));
return listBuilder.build(); return listBuilder.build();
} }

View File

@@ -82,15 +82,18 @@ public class ZenModeSliceBuilder {
final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
null /* actionTitle */, null /* actionTitle */,
isZenModeEnabled); isZenModeEnabled);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(title)
.addEndItem(toggleSliceAction)
.setPrimaryAction(primarySliceAction);
if (!Utils.isSettingsIntelligence(context)) {
rowBuilder.setSubtitle(subtitle);
}
return new ListBuilder(context, CustomSliceRegistry.ZEN_MODE_SLICE_URI, return new ListBuilder(context, CustomSliceRegistry.ZEN_MODE_SLICE_URI,
ListBuilder.INFINITY) ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(title)
.setSubtitle(subtitle)
.addEndItem(toggleSliceAction)
.setPrimaryAction(primarySliceAction))
.build(); .build();
} }

View File

@@ -241,16 +241,19 @@ public class SliceBuilderUtils {
final SliceAction sliceAction = getToggleAction(context, sliceData, final SliceAction sliceAction = getToggleAction(context, sliceData,
toggleController.isChecked()); toggleController.isChecked());
final Set<String> keywords = buildSliceKeywords(sliceData); final Set<String> keywords = buildSliceKeywords(sliceData);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(sliceData.getTitle())
.setPrimaryAction(
SliceAction.createDeeplink(contentIntent, icon,
ListBuilder.ICON_IMAGE, sliceData.getTitle()))
.addEndItem(sliceAction);
if (!Utils.isSettingsIntelligence(context)) {
rowBuilder.setSubtitle(subtitleText);
}
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY) return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
.setPrimaryAction(
SliceAction.createDeeplink(contentIntent, icon,
ListBuilder.ICON_IMAGE, sliceData.getTitle()))
.addEndItem(sliceAction))
.setKeywords(keywords) .setKeywords(keywords)
.build(); .build();
} }
@@ -262,16 +265,19 @@ public class SliceBuilderUtils {
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
@ColorInt final int color = Utils.getColorAccentDefaultColor(context); @ColorInt final int color = Utils.getColorAccentDefaultColor(context);
final Set<String> keywords = buildSliceKeywords(sliceData); final Set<String> keywords = buildSliceKeywords(sliceData);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(sliceData.getTitle())
.setPrimaryAction(
SliceAction.createDeeplink(contentIntent, icon,
ListBuilder.ICON_IMAGE,
sliceData.getTitle()));
if (!Utils.isSettingsIntelligence(context)) {
rowBuilder.setSubtitle(subtitleText);
}
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY) return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
.setPrimaryAction(
SliceAction.createDeeplink(contentIntent, icon,
ListBuilder.ICON_IMAGE,
sliceData.getTitle())))
.setKeywords(keywords) .setKeywords(keywords)
.build(); .build();
} }
@@ -301,7 +307,6 @@ public class SliceBuilderUtils {
} }
final InputRangeBuilder inputRangeBuilder = new InputRangeBuilder() final InputRangeBuilder inputRangeBuilder = new InputRangeBuilder()
.setTitle(sliceData.getTitle()) .setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
.setPrimaryAction(primaryAction) .setPrimaryAction(primaryAction)
.setMax(sliderController.getMax()) .setMax(sliderController.getMax())
.setMin(sliderController.getMin()) .setMin(sliderController.getMin())
@@ -311,6 +316,9 @@ public class SliceBuilderUtils {
inputRangeBuilder.setTitleItem(icon, ListBuilder.ICON_IMAGE); inputRangeBuilder.setTitleItem(icon, ListBuilder.ICON_IMAGE);
color = CustomSliceable.COLOR_NOT_TINTED; color = CustomSliceable.COLOR_NOT_TINTED;
} }
if (!Utils.isSettingsIntelligence(context)) {
inputRangeBuilder.setSubtitle(subtitleText);
}
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY) return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
@@ -330,14 +338,17 @@ public class SliceBuilderUtils {
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
@ColorInt final int color = Utils.getColorAccentDefaultColor(context); @ColorInt final int color = Utils.getColorAccentDefaultColor(context);
final Set<String> keywords = buildSliceKeywords(sliceData); final Set<String> keywords = buildSliceKeywords(sliceData);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(sliceData.getTitle())
.setPrimaryAction(primaryAction)
.addEndItem(copyableAction);
if (!Utils.isSettingsIntelligence(context)) {
rowBuilder.setSubtitle(subtitleText);
}
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY) return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(sliceData.getTitle())
.setSubtitle(subtitleText)
.setPrimaryAction(primaryAction)
.addEndItem(copyableAction))
.setKeywords(keywords) .setKeywords(keywords)
.build(); .build();
} }
@@ -418,14 +429,17 @@ public class SliceBuilderUtils {
final SliceAction primaryAction = SliceAction.createDeeplink( final SliceAction primaryAction = SliceAction.createDeeplink(
getContentPendingIntent(context, data), getContentPendingIntent(context, data),
icon, ListBuilder.ICON_IMAGE, title); icon, ListBuilder.ICON_IMAGE, title);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(title)
.setTitleItem(icon, ListBuilder.ICON_IMAGE)
.setPrimaryAction(primaryAction);
if (!Utils.isSettingsIntelligence(context)) {
rowBuilder.setSubtitle(subtitle);
}
return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY) return new ListBuilder(context, data.getUri(), ListBuilder.INFINITY)
.setAccentColor(color) .setAccentColor(color)
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(title)
.setTitleItem(icon, ListBuilder.ICON_IMAGE)
.setSubtitle(subtitle)
.setPrimaryAction(primaryAction))
.setKeywords(keywords) .setKeywords(keywords)
.build(); .build();
} }

View File

@@ -269,14 +269,17 @@ public class WifiCallingSliceHelper {
// Top row shows information on current preference state // Top row shows information on current preference state
final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY) final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext)); .setAccentColor(Utils.getColorAccentDefaultColor(mContext));
listBuilder.setHeader(new ListBuilder.HeaderBuilder() final ListBuilder.HeaderBuilder headerBuilder = new ListBuilder.HeaderBuilder()
.setTitle(res.getText(R.string.wifi_calling_mode_title)) .setTitle(res.getText(R.string.wifi_calling_mode_title))
.setSubtitle(getWifiCallingPreferenceSummary(currentWfcPref, subId))
.setPrimaryAction(SliceAction.createDeeplink( .setPrimaryAction(SliceAction.createDeeplink(
getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY), getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY),
icon, icon,
ListBuilder.ICON_IMAGE, ListBuilder.ICON_IMAGE,
res.getText(R.string.wifi_calling_mode_title)))); res.getText(R.string.wifi_calling_mode_title)));
if (!Utils.isSettingsIntelligence(mContext)) {
headerBuilder.setSubtitle(getWifiCallingPreferenceSummary(currentWfcPref, subId));
}
listBuilder.setHeader(headerBuilder);
if (isWifiOnlySupported) { if (isWifiOnlySupported) {
listBuilder.addRow(wifiPreferenceRowBuilder(listBuilder, listBuilder.addRow(wifiPreferenceRowBuilder(listBuilder,
@@ -458,14 +461,17 @@ public class WifiCallingSliceHelper {
private Slice getNonActionableWifiCallingSlice(CharSequence title, CharSequence subtitle, private Slice getNonActionableWifiCallingSlice(CharSequence title, CharSequence subtitle,
Uri sliceUri, PendingIntent primaryActionIntent) { Uri sliceUri, PendingIntent primaryActionIntent) {
final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal); final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
final RowBuilder rowBuilder = new RowBuilder()
.setTitle(title)
.setPrimaryAction(SliceAction.createDeeplink(
primaryActionIntent, icon, ListBuilder.SMALL_IMAGE,
title));
if (!Utils.isSettingsIntelligence(mContext)) {
rowBuilder.setSubtitle(subtitle);
}
return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY) return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
.setAccentColor(Utils.getColorAccentDefaultColor(mContext)) .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
.addRow(new RowBuilder() .addRow(rowBuilder)
.setTitle(title)
.setSubtitle(subtitle)
.setPrimaryAction(SliceAction.createDeeplink(
primaryActionIntent, icon, ListBuilder.SMALL_IMAGE,
title)))
.build(); .build();
} }

View File

@@ -29,7 +29,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.Activity;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -67,6 +66,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowBinder;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.ArrayList; import java.util.ArrayList;
@@ -281,4 +281,22 @@ public class UtilsTest {
assertThat(actionBar.getElevation()).isEqualTo(0.f); assertThat(actionBar.getElevation()).isEqualTo(0.f);
} }
@Test
public void isSettingsIntelligence_IsSI_returnTrue() {
final String siPackageName = mContext.getString(
R.string.config_settingsintelligence_package_name);
ShadowBinder.setCallingUid(USER_ID);
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{siPackageName});
assertThat(Utils.isSettingsIntelligence(mContext)).isTrue();
}
@Test
public void isSettingsIntelligence_IsNotSI_returnFalse() {
ShadowBinder.setCallingUid(USER_ID);
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{PACKAGE_NAME});
assertThat(Utils.isSettingsIntelligence(mContext)).isFalse();
}
} }

View File

@@ -23,7 +23,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
@@ -455,37 +454,6 @@ public class SliceBuilderUtilsTest {
assertThat(actualIconResource).isEqualTo(settingsIcon); assertThat(actualIconResource).isEqualTo(settingsIcon);
} }
@Test
public void buildUnavailableSlice_customizeSubtitle_returnsSliceWithCustomizedSubtitle() {
final String subtitleOfUnavailableSlice = "subtitleOfUnavailableSlice";
final SliceData data = getDummyData(FakeUnavailablePreferenceController.class,
SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE, 0 /* icon */,
subtitleOfUnavailableSlice);
Settings.Global.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.DISABLED_DEPENDENT_SETTING);
final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
final SliceMetadata metadata = SliceMetadata.from(mContext, slice);
assertThat(metadata.getSubtitle()).isEqualTo(subtitleOfUnavailableSlice);
}
@Test
public void buildUnavailableSlice_notCustomizeSubtitle_returnsSliceWithDefaultSubtitle() {
final SliceData data = getDummyData(FakeUnavailablePreferenceController.class,
SliceData.SliceType.SWITCH);
Settings.Global.putInt(mContext.getContentResolver(),
FakeUnavailablePreferenceController.AVAILABILITY_KEY,
BasePreferenceController.DISABLED_DEPENDENT_SETTING);
final Slice slice = SliceBuilderUtils.buildSlice(mContext, data);
final SliceMetadata metadata = SliceMetadata.from(mContext, slice);
assertThat(metadata.getSubtitle()).isEqualTo(
mContext.getString(R.string.disabled_dependent_setting_summary));
}
private SliceData getDummyData() { private SliceData getDummyData() {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE, return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
ICON, null /* unavailableSliceSubtitle */); ICON, null /* unavailableSliceSubtitle */);