diff --git a/res/values/strings.xml b/res/values/strings.xml index c25e41a60de..91e22d14a2b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9468,7 +9468,7 @@ See notifications quickly - + Assist gesture On diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml index 8aa4d060d58..d364d9e99ab 100644 --- a/res/xml/device_info_settings.xml +++ b/res/xml/device_info_settings.xml @@ -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" /> + android:summary="@string/summary_placeholder" /> + android:summary="@string/summary_placeholder" /> + android:summary="@string/summary_placeholder" /> + android:summary="@string/summary_placeholder" + settings:controller= + "com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController" /> + settings:allowDividerAbove="true" /> + android:summary="@string/summary_placeholder" /> + android:summary="@string/summary_placeholder" /> @@ -89,14 +91,14 @@ android:order="37" android:title="@string/legal_information" android:fragment="com.android.settings.LegalSettings" - settings:allowDividerAbove="true"/> + settings:allowDividerAbove="true" /> - + @@ -104,7 +106,7 @@ android:key="safety_info" android:order="39" android:title="@string/safety_and_regulatory_info"> - + @@ -112,21 +114,21 @@ android:key="manual" android:order="40" android:title="@string/manual"> - + + android:title="@string/device_feedback" /> + android:summary="@string/summary_placeholder" /> + settings:allowDividerAbove="true" /> \ No newline at end of file diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index 213ff1c1b7b..b3a6b89404e 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -99,11 +99,13 @@ + android:summary="@string/summary_placeholder" + settings:controller= + "com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController" /> buildPreferenceControllers( - Context context, - Activity activity, - MyDeviceInfoFragment fragment, + Context context, Activity activity, MyDeviceInfoFragment fragment, Lifecycle lifecycle) { final List 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)); diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java index 785ec595b09..9019c6e9e95 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java @@ -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; } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java index 05bbdb14452..bf049bcddde 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java @@ -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; + } } }