Merge "Slices feature supports firmware version."

This commit is contained in:
TreeHugger Robot
2018-04-27 01:10:09 +00:00
committed by Android (Google) Code Review
7 changed files with 115 additions and 82 deletions

View File

@@ -9468,7 +9468,7 @@
<string name="fingerprint_swipe_for_notifications_suggestion_title">See notifications quickly</string> <string name="fingerprint_swipe_for_notifications_suggestion_title">See notifications quickly</string>
<!-- Title text for the assist gesture [CHAR LIMIT=60] DO NOT TRANSLATE --> <!-- Title text for the assist gesture [CHAR LIMIT=60] DO NOT TRANSLATE -->
<string name="assist_gesture_title" translatable="false"></string> <string name="assist_gesture_title" translatable="false">Assist gesture</string>
<!-- Switch text for each gesture setting state --> <!-- Switch text for each gesture setting state -->
<string name="gesture_setting_on">On</string> <string name="gesture_setting_on">On</string>

View File

@@ -26,7 +26,7 @@
android:key="phone_number" android:key="phone_number"
android:order="0" android:order="0"
android:title="@string/status_number" android:title="@string/status_number"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- SIM status --> <!-- SIM status -->
<Preference <Preference
@@ -34,7 +34,7 @@
android:order="10" android:order="10"
android:title="@string/sim_status_title" android:title="@string/sim_status_title"
settings:keywords="@string/keywords_sim_status" settings:keywords="@string/keywords_sim_status"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- Model & hardware --> <!-- Model & hardware -->
<Preference <Preference
@@ -42,7 +42,7 @@
android:order="21" android:order="21"
android:title="@string/hardware_info" android:title="@string/hardware_info"
settings:keywords="@string/keywords_model_and_hardware" settings:keywords="@string/keywords_model_and_hardware"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- IMEI --> <!-- IMEI -->
<Preference <Preference
@@ -50,7 +50,7 @@
android:order="22" android:order="22"
android:title="@string/status_imei" android:title="@string/status_imei"
settings:keywords="@string/keywords_imei_info" settings:keywords="@string/keywords_imei_info"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- Android version --> <!-- Android version -->
<Preference <Preference
@@ -58,7 +58,9 @@
android:order="32" android:order="32"
android:title="@string/firmware_version" android:title="@string/firmware_version"
settings:keywords="@string/keywords_android_version" settings:keywords="@string/keywords_android_version"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder"
settings:controller=
"com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController" />
<!--IP address --> <!--IP address -->
<Preference <Preference
@@ -66,21 +68,21 @@
android:order="34" android:order="34"
android:title="@string/wifi_ip_address" android:title="@string/wifi_ip_address"
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"
settings:allowDividerAbove="true"/> settings:allowDividerAbove="true" />
<!-- Wi-Fi MAC address --> <!-- Wi-Fi MAC address -->
<Preference <Preference
android:key="wifi_mac_address" android:key="wifi_mac_address"
android:order="35" android:order="35"
android:title="@string/status_wifi_mac_address" android:title="@string/status_wifi_mac_address"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- Bluetooth address --> <!-- Bluetooth address -->
<Preference <Preference
android:key="bt_address" android:key="bt_address"
android:order="36" android:order="36"
android:title="@string/status_bt_address" android:title="@string/status_bt_address"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- Legal information --> <!-- Legal information -->
@@ -89,14 +91,14 @@
android:order="37" android:order="37"
android:title="@string/legal_information" android:title="@string/legal_information"
android:fragment="com.android.settings.LegalSettings" android:fragment="com.android.settings.LegalSettings"
settings:allowDividerAbove="true"/> settings:allowDividerAbove="true" />
<!-- Regulatory labels --> <!-- Regulatory labels -->
<Preference <Preference
android:key="regulatory_info" android:key="regulatory_info"
android:order="38" android:order="38"
android:title="@string/regulatory_labels"> android:title="@string/regulatory_labels">
<intent android:action="android.settings.SHOW_REGULATORY_INFO"/> <intent android:action="android.settings.SHOW_REGULATORY_INFO" />
</Preference> </Preference>
<!-- Safety & regulatory manual --> <!-- Safety & regulatory manual -->
@@ -104,7 +106,7 @@
android:key="safety_info" android:key="safety_info"
android:order="39" android:order="39"
android:title="@string/safety_and_regulatory_info"> android:title="@string/safety_and_regulatory_info">
<intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"/> <intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO" />
</Preference> </Preference>
<!-- Manual --> <!-- Manual -->
@@ -112,21 +114,21 @@
android:key="manual" android:key="manual"
android:order="40" android:order="40"
android:title="@string/manual"> android:title="@string/manual">
<intent android:action="android.settings.SHOW_MANUAL"/> <intent android:action="android.settings.SHOW_MANUAL" />
</Preference> </Preference>
<!-- Feedback on the device --> <!-- Feedback on the device -->
<Preference <Preference
android:key="device_feedback" android:key="device_feedback"
android:order="41" android:order="41"
android:title="@string/device_feedback"/> android:title="@string/device_feedback" />
<!-- Device FCC equipment id --> <!-- Device FCC equipment id -->
<Preference <Preference
android:key="fcc_equipment_id" android:key="fcc_equipment_id"
android:order="42" android:order="42"
android:title="@string/fcc_equipment_id" android:title="@string/fcc_equipment_id"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder" />
<!-- Build number --> <!-- Build number -->
<Preference <Preference
@@ -134,6 +136,6 @@
android:order="43" android:order="43"
android:title="@string/build_number" android:title="@string/build_number"
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"
settings:allowDividerAbove="true"/> settings:allowDividerAbove="true" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -99,11 +99,13 @@
<!-- Android version --> <!-- Android version -->
<Preference <Preference
android:key="firmware_version" android:key="my_device_firmware_version"
android:order="32" android:order="32"
android:title="@string/firmware_version" android:title="@string/firmware_version"
settings:keywords="@string/keywords_android_version" settings:keywords="@string/keywords_android_version"
android:summary="@string/summary_placeholder"/> android:summary="@string/summary_placeholder"
settings:controller=
"com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController" />
<!--IP address --> <!--IP address -->
<Preference <Preference

View File

@@ -53,6 +53,12 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable {
@VisibleForTesting @VisibleForTesting
static final int NON_SIM_PREFERENCES_COUNT = 2; static final int NON_SIM_PREFERENCES_COUNT = 2;
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(FirmwareVersionPreferenceController.class).setHost(this /*parent*/);
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.DEVICEINFO; return MetricsEvent.DEVICEINFO;
@@ -130,7 +136,6 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable {
controllers.add(new SimStatusPreferenceController(context, fragment)); controllers.add(new SimStatusPreferenceController(context, fragment));
controllers.add(new DeviceModelPreferenceController(context, fragment)); controllers.add(new DeviceModelPreferenceController(context, fragment));
controllers.add(new ImeiInfoPreferenceController(context, fragment)); controllers.add(new ImeiInfoPreferenceController(context, fragment));
controllers.add(new FirmwareVersionPreferenceController(context, fragment));
controllers.add(new IpAddressPreferenceController(context, lifecycle)); controllers.add(new IpAddressPreferenceController(context, lifecycle));
controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));

View File

@@ -63,8 +63,8 @@ import java.util.List;
@SearchIndexable @SearchIndexable
public class MyDeviceInfoFragment extends DashboardFragment public class MyDeviceInfoFragment extends DashboardFragment
implements DeviceNamePreferenceController.DeviceNamePreferenceHost { implements DeviceNamePreferenceController.DeviceNamePreferenceHost {
private static final String LOG_TAG = "MyDeviceInfoFragment";
private static final String LOG_TAG = "MyDeviceInfoFragment";
private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header"; private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header";
private static final String KEY_LEGAL_CONTAINER = "legal_container"; private static final String KEY_LEGAL_CONTAINER = "legal_container";
@@ -79,8 +79,14 @@ public class MyDeviceInfoFragment extends DashboardFragment
} }
@Override @Override
public void onResume() { public void onAttach(Context context) {
super.onResume(); super.onAttach(context);
use(FirmwareVersionPreferenceController.class).setHost(this /*parent*/);
}
@Override
public void onStart() {
super.onStart();
initHeader(); initHeader();
} }
@@ -101,9 +107,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
} }
private static List<AbstractPreferenceController> buildPreferenceControllers( private static List<AbstractPreferenceController> buildPreferenceControllers(
Context context, Context context, Activity activity, MyDeviceInfoFragment fragment,
Activity activity,
MyDeviceInfoFragment fragment,
Lifecycle lifecycle) { Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>(); final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new EmergencyInfoPreferenceController(context)); controllers.add(new EmergencyInfoPreferenceController(context));
@@ -120,7 +124,6 @@ public class MyDeviceInfoFragment extends DashboardFragment
controllers.add(new SimStatusPreferenceController(context, fragment)); controllers.add(new SimStatusPreferenceController(context, fragment));
controllers.add(new DeviceModelPreferenceController(context, fragment)); controllers.add(new DeviceModelPreferenceController(context, fragment));
controllers.add(new ImeiInfoPreferenceController(context, fragment)); controllers.add(new ImeiInfoPreferenceController(context, fragment));
controllers.add(new FirmwareVersionPreferenceController(context, fragment));
controllers.add(new IpAddressPreferenceController(context, lifecycle)); controllers.add(new IpAddressPreferenceController(context, lifecycle));
controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
@@ -137,7 +140,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
final BuildNumberPreferenceController buildNumberPreferenceController = final BuildNumberPreferenceController buildNumberPreferenceController =
use(BuildNumberPreferenceController.class); use(BuildNumberPreferenceController.class);
if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) { if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
return; return;
} }
@@ -151,7 +154,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
final View appSnippet = headerPreference.findViewById(R.id.entity_header); final View appSnippet = headerPreference.findViewById(R.id.entity_header);
final Activity context = getActivity(); final Activity context = getActivity();
final Bundle bundle = getArguments(); final Bundle bundle = getArguments();
EntityHeaderController controller = EntityHeaderController final EntityHeaderController controller = EntityHeaderController
.newInstance(context, this, appSnippet) .newInstance(context, this, appSnippet)
.setRecyclerView(getListView(), getLifecycle()) .setRecyclerView(getListView(), getLifecycle())
.setButtonActions(EntityHeaderController.ActionType.ACTION_NONE, .setButtonActions(EntityHeaderController.ActionType.ACTION_NONE,
@@ -160,9 +163,10 @@ public class MyDeviceInfoFragment extends DashboardFragment
// TODO: There may be an avatar setting action we can use here. // TODO: There may be an avatar setting action we can use here.
final int iconId = bundle.getInt("icon_id", 0); final int iconId = bundle.getInt("icon_id", 0);
if (iconId == 0) { if (iconId == 0) {
UserManager userManager = (UserManager) getActivity().getSystemService( final UserManager userManager = (UserManager) getActivity().getSystemService(
Context.USER_SERVICE); Context.USER_SERVICE);
UserInfo info = Utils.getExistingUser(userManager, android.os.Process.myUserHandle()); final UserInfo info = Utils.getExistingUser(userManager,
android.os.Process.myUserHandle());
controller.setLabel(info.name); controller.setLabel(info.name);
controller.setIcon( controller.setIcon(
com.android.settingslib.Utils.getUserIcon(getActivity(), userManager, info)); com.android.settingslib.Utils.getUserIcon(getActivity(), userManager, info));

View File

@@ -19,48 +19,37 @@ package com.android.settings.deviceinfo.firmwareversion;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import android.text.TextUtils; import android.text.TextUtils;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
public class FirmwareVersionPreferenceController extends AbstractPreferenceController implements import androidx.preference.Preference;
PreferenceControllerMixin {
private final static String FIRMWARE_VERSION_KEY = "firmware_version"; public class FirmwareVersionPreferenceController extends BasePreferenceController {
private final Fragment mFragment; private Fragment mFragment;
public FirmwareVersionPreferenceController(Context context, Fragment fragment) { public FirmwareVersionPreferenceController(Context context, String key) {
super(context); super(context, key);
}
public void setHost(Fragment fragment) {
mFragment = fragment; mFragment = fragment;
} }
@Override @Override
public boolean isAvailable() { public int getAvailabilityStatus() {
return true; return AVAILABLE;
} }
@Override @Override
public void displayPreference(PreferenceScreen screen) { public CharSequence getSummary() {
super.displayPreference(screen); return Build.VERSION.RELEASE;
final Preference pref = screen.findPreference(getPreferenceKey());
if (pref != null) {
pref.setSummary(Build.VERSION.RELEASE);
}
}
@Override
public String getPreferenceKey() {
return FIRMWARE_VERSION_KEY;
} }
@Override @Override
public boolean handlePreferenceTreeClick(Preference preference) { public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { if (!TextUtils.equals(preference.getKey(), mPreferenceKey)) {
return false; return false;
} }

View File

@@ -17,74 +17,105 @@
package com.android.settings.deviceinfo.firmwareversion; package com.android.settings.deviceinfo.firmwareversion;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class FirmwareVersionPreferenceControllerTest { public class FirmwareVersionPreferenceControllerTest {
@Mock private final String KEY = "firmware_key";
private Preference mPreference;
@Mock
private PreferenceScreen mScreen;
@Mock @Mock
private Fragment mFragment; private Fragment mFragment;
private Context mContext; private Preference mPreference;
private PreferenceScreen mScreen;
private FirmwareVersionPreferenceController mController; private FirmwareVersionPreferenceController mController;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; final Context context = RuntimeEnvironment.application;
mController = new FirmwareVersionPreferenceController(mContext, mFragment); final PreferenceManager preferenceManager = new PreferenceManager(context);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); mController = new FirmwareVersionPreferenceController(context, KEY);
mController.setHost(mFragment);
mPreference = new Preference(context);
mPreference.setKey(KEY);
mScreen = preferenceManager.createPreferenceScreen(context);
mScreen.addPreference(mPreference);
}
@After
public void tearDown() {
ShadowFirmwareVersionDialogFragment.reset();
} }
@Test @Test
public void displayPreference_shouldSetSummaryToBuildNumber() { public void firmwareVersion_shouldAlwaysBeShown() {
mController.displayPreference(mScreen); assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
verify(mPreference).setSummary(Build.VERSION.RELEASE);
} }
@Test @Test
public void updatePreference_shouldSetSummaryToBuildNumber() {
mController.updateState(mPreference);
assertThat(mPreference.getSummary()).isEqualTo(Build.VERSION.RELEASE);
}
@Test
@Config(shadows = ShadowFirmwareVersionDialogFragment.class)
public void handlePreferenceTreeClick_samePreferenceKey_shouldStartDialogFragment() { public void handlePreferenceTreeClick_samePreferenceKey_shouldStartDialogFragment() {
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey()); final boolean result = mController.handlePreferenceTreeClick(mPreference);
when(mFragment.getChildFragmentManager()).thenReturn(
mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
mController.handlePreferenceTreeClick(mPreference); assertThat(ShadowFirmwareVersionDialogFragment.isShowing).isTrue();
assertThat(result).isTrue();
verify(mFragment).getChildFragmentManager();
} }
@Test @Test
public void handlePreferenceTreeClick_unknownPreferenceKey_shouldDoNothingAndReturnFalse() { public void handlePreferenceTreeClick_unknownPreferenceKey_shouldDoNothingAndReturnFalse() {
when(mPreference.getKey()).thenReturn("foobar"); mPreference.setKey("foobar");
final boolean result = mController.handlePreferenceTreeClick(mPreference); final boolean result = mController.handlePreferenceTreeClick(mPreference);
assertThat(ShadowFirmwareVersionDialogFragment.isShowing).isFalse();
assertThat(result).isFalse(); assertThat(result).isFalse();
verify(mFragment, never()).getChildFragmentManager(); }
@Implements(FirmwareVersionDialogFragment.class)
public static class ShadowFirmwareVersionDialogFragment {
private static boolean isShowing = false;
@Implementation
public static void show(Fragment fragemnt) {
isShowing = true;
}
@Resetter
public static void reset() {
isShowing = false;
}
} }
} }