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>
<!-- 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 -->
<string name="gesture_setting_on">On</string>

View File

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

View File

@@ -99,11 +99,13 @@
<!-- Android version -->
<Preference
android:key="firmware_version"
android:key="my_device_firmware_version"
android:order="32"
android:title="@string/firmware_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 -->
<Preference

View File

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

View File

@@ -63,8 +63,8 @@ import java.util.List;
@SearchIndexable
public class MyDeviceInfoFragment extends DashboardFragment
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_LEGAL_CONTAINER = "legal_container";
@@ -79,8 +79,14 @@ public class MyDeviceInfoFragment extends DashboardFragment
}
@Override
public void onResume() {
super.onResume();
public void onAttach(Context context) {
super.onAttach(context);
use(FirmwareVersionPreferenceController.class).setHost(this /*parent*/);
}
@Override
public void onStart() {
super.onStart();
initHeader();
}
@@ -101,9 +107,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
}
private static List<AbstractPreferenceController> buildPreferenceControllers(
Context context,
Activity activity,
MyDeviceInfoFragment fragment,
Context context, Activity activity, MyDeviceInfoFragment fragment,
Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new EmergencyInfoPreferenceController(context));
@@ -120,7 +124,6 @@ public class MyDeviceInfoFragment extends DashboardFragment
controllers.add(new SimStatusPreferenceController(context, fragment));
controllers.add(new DeviceModelPreferenceController(context, fragment));
controllers.add(new ImeiInfoPreferenceController(context, fragment));
controllers.add(new FirmwareVersionPreferenceController(context, fragment));
controllers.add(new IpAddressPreferenceController(context, lifecycle));
controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
@@ -137,7 +140,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
final BuildNumberPreferenceController buildNumberPreferenceController =
use(BuildNumberPreferenceController.class);
use(BuildNumberPreferenceController.class);
if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
return;
}
@@ -151,7 +154,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
final View appSnippet = headerPreference.findViewById(R.id.entity_header);
final Activity context = getActivity();
final Bundle bundle = getArguments();
EntityHeaderController controller = EntityHeaderController
final EntityHeaderController controller = EntityHeaderController
.newInstance(context, this, appSnippet)
.setRecyclerView(getListView(), getLifecycle())
.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.
final int iconId = bundle.getInt("icon_id", 0);
if (iconId == 0) {
UserManager userManager = (UserManager) getActivity().getSystemService(
final UserManager userManager = (UserManager) getActivity().getSystemService(
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.setIcon(
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.content.Context;
import android.os.Build;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import android.text.TextUtils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settings.core.BasePreferenceController;
public class FirmwareVersionPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin {
import androidx.preference.Preference;
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) {
super(context);
public FirmwareVersionPreferenceController(Context context, String key) {
super(context, key);
}
public void setHost(Fragment fragment) {
mFragment = fragment;
}
@Override
public boolean isAvailable() {
return true;
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
final Preference pref = screen.findPreference(getPreferenceKey());
if (pref != null) {
pref.setSummary(Build.VERSION.RELEASE);
}
}
@Override
public String getPreferenceKey() {
return FIRMWARE_VERSION_KEY;
public CharSequence getSummary() {
return Build.VERSION.RELEASE;
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
if (!TextUtils.equals(preference.getKey(), mPreferenceKey)) {
return false;
}

View File

@@ -17,74 +17,105 @@
package com.android.settings.deviceinfo.firmwareversion;
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.FragmentManager;
import android.content.Context;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
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)
public class FirmwareVersionPreferenceControllerTest {
@Mock
private Preference mPreference;
@Mock
private PreferenceScreen mScreen;
private final String KEY = "firmware_key";
@Mock
private Fragment mFragment;
private Context mContext;
private Preference mPreference;
private PreferenceScreen mScreen;
private FirmwareVersionPreferenceController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mController = new FirmwareVersionPreferenceController(mContext, mFragment);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
final Context context = RuntimeEnvironment.application;
final PreferenceManager preferenceManager = new PreferenceManager(context);
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
public void displayPreference_shouldSetSummaryToBuildNumber() {
mController.displayPreference(mScreen);
verify(mPreference).setSummary(Build.VERSION.RELEASE);
public void firmwareVersion_shouldAlwaysBeShown() {
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}
@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() {
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
when(mFragment.getChildFragmentManager()).thenReturn(
mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
final boolean result = mController.handlePreferenceTreeClick(mPreference);
mController.handlePreferenceTreeClick(mPreference);
verify(mFragment).getChildFragmentManager();
assertThat(ShadowFirmwareVersionDialogFragment.isShowing).isTrue();
assertThat(result).isTrue();
}
@Test
public void handlePreferenceTreeClick_unknownPreferenceKey_shouldDoNothingAndReturnFalse() {
when(mPreference.getKey()).thenReturn("foobar");
mPreference.setKey("foobar");
final boolean result = mController.handlePreferenceTreeClick(mPreference);
assertThat(ShadowFirmwareVersionDialogFragment.isShowing).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;
}
}
}