developer-options: avoid oem-unlock preference controller crash
If there is no FEATURE_TELEPHONY_CARRIERLOCK. BUG: 123583878 Test: lunch sdk_phone_x86-eng make -j emulator the Settings->System->Developer options should not crash Test: make RunSettingsRoboTests ROBOTEST_FILTER=OemUnlockPreferenceControllerTest should all pass (12 tests: 11 existing and 1 new) Change-Id: I18c08c1ff1a7860616b0081ede4eb19dcfa8814b
This commit is contained in:
@@ -21,11 +21,13 @@ import static com.android.settings.development.DevelopmentOptionsActivityRequest
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.service.oemlock.OemLockManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
@@ -41,6 +43,7 @@ public class OemUnlockPreferenceController extends DeveloperOptionsPreferenceCon
|
||||
Preference.OnPreferenceChangeListener, PreferenceControllerMixin, OnActivityResultListener {
|
||||
|
||||
private static final String PREFERENCE_KEY = "oem_unlock_enable";
|
||||
private static final String TAG = "OemUnlockPreferenceController";
|
||||
|
||||
private final OemLockManager mOemLockManager;
|
||||
private final UserManager mUserManager;
|
||||
@@ -52,7 +55,16 @@ public class OemUnlockPreferenceController extends DeveloperOptionsPreferenceCon
|
||||
public OemUnlockPreferenceController(Context context, Activity activity,
|
||||
DevelopmentSettingsDashboardFragment fragment) {
|
||||
super(context);
|
||||
mOemLockManager = (OemLockManager) context.getSystemService(Context.OEM_LOCK_SERVICE);
|
||||
|
||||
if (context.getPackageManager().hasSystemFeature(PackageManager
|
||||
.FEATURE_TELEPHONY_CARRIERLOCK)) {
|
||||
mOemLockManager = (OemLockManager) context.getSystemService(Context.OEM_LOCK_SERVICE);
|
||||
} else {
|
||||
mOemLockManager = null;
|
||||
Log.i(TAG, "Missing FEATURE_TELEPHONY_CARRIERLOCK, OemUnlock Preference" +
|
||||
" Controller disabled.");
|
||||
}
|
||||
|
||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
mFragment = fragment;
|
||||
|
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.UserManager;
|
||||
import android.service.oemlock.OemLockManager;
|
||||
@@ -60,6 +61,8 @@ public class OemUnlockPreferenceControllerTest {
|
||||
@Mock
|
||||
private RestrictedSwitchPreference mPreference;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private OemLockManager mOemLockManager;
|
||||
@@ -74,6 +77,9 @@ public class OemUnlockPreferenceControllerTest {
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||
when(mContext.getPackageManager().hasSystemFeature(PackageManager
|
||||
.FEATURE_TELEPHONY_CARRIERLOCK)).thenReturn(true);
|
||||
when(mContext.getSystemService(Context.OEM_LOCK_SERVICE)).thenReturn(mOemLockManager);
|
||||
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
||||
when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
|
||||
@@ -86,6 +92,16 @@ public class OemUnlockPreferenceControllerTest {
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void OemUnlockPreferenceController_shouldNotCrashWhenMissingFEATURE_TELEPHONY_CARRIERLOCK() {
|
||||
when(mContext.getPackageManager().hasSystemFeature(PackageManager
|
||||
.FEATURE_TELEPHONY_CARRIERLOCK)).thenReturn(false);
|
||||
when(mContext.getSystemService(Context.OEM_LOCK_SERVICE)).thenThrow
|
||||
(new RuntimeException());
|
||||
|
||||
new OemUnlockPreferenceController(mContext, mActivity, mFragment);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isAvailable_shouldReturnTrueWhenOemLockManagerIsNotNull() {
|
||||
boolean returnValue = mController.isAvailable();
|
||||
|
Reference in New Issue
Block a user