From e0014e223435e658f9a5a47ef7f2ad0071c18bef Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 8 Feb 2018 13:17:54 -0800 Subject: [PATCH] Fix developer option not being enabled. - when screen lock is set, we will start the activity to check user's credential. Override onActivityResult() and call BuildNumberPreferenceController's method accordingly, so that we will checks the password confirm result and enable the developer options if it is success. Change-Id: Ie2df644c53430ad4eb394480348d956177804ec3 Fixes: 73102865 Test: make RunSettingsRoboTests --- .../aboutphone/MyDeviceInfoFragment.java | 11 ++++++++ .../deviceinfo/MyDeviceInfoFragmentTest.java | 28 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java index bb952285ad5..03b69a5b4ee 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -21,6 +21,7 @@ import static com.android.settings.bluetooth.Utils.getLocalBtManager; import android.app.Activity; import android.app.Fragment; import android.content.Context; +import android.content.Intent; import android.content.pm.UserInfo; import android.os.Bundle; import android.os.UserManager; @@ -126,6 +127,16 @@ public class MyDeviceInfoFragment extends DashboardFragment { return controllers; } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + final BuildNumberPreferenceController buildNumberPreferenceController = + getPreferenceController(BuildNumberPreferenceController.class); + if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) { + return; + } + super.onActivityResult(requestCode, resultCode, data); + } + private void initHeader() { // TODO: Migrate into its own controller. final LayoutPreference headerPreference = diff --git a/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java index 36f0662c2a8..8b21b74d78c 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java @@ -21,15 +21,18 @@ import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; +import android.util.ArrayMap; import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment; import com.android.settings.TestConfig; @@ -39,6 +42,7 @@ import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; import com.android.settings.testutils.shadow.ShadowConnectivityManager; import com.android.settings.testutils.shadow.ShadowUserManager; +import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; import org.junit.Test; @@ -48,6 +52,11 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import org.robolectric.util.ReflectionHelpers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @RunWith(SettingsRobolectricTestRunner.class) @Config( @@ -97,4 +106,23 @@ public class MyDeviceInfoFragmentTest { verify(mScreen).setInitialExpandedChildrenCount(Integer.MAX_VALUE); } + + @Test + public void onActivityResult_shouldCallBuildNumberPreferenceController() { + final BuildNumberPreferenceController controller = + mock(BuildNumberPreferenceController.class); + final Map> preferenceControllers = + new ArrayMap<>(); + final List controllerList = new ArrayList<>(); + controllerList.add(controller); + preferenceControllers.put(BuildNumberPreferenceController.class, controllerList); + ReflectionHelpers.setField(mSettings, "mPreferenceControllers", preferenceControllers); + + final int requestCode = 1; + final int resultCode = 2; + final Intent data = new Intent(); + mSettings.onActivityResult(requestCode, resultCode, data); + + verify(controller).onActivityResult(requestCode, resultCode, data); + } }