Merge "Fix Settings crash when click uninstall button"

This commit is contained in:
Raff Tsai
2019-07-31 01:16:47 +00:00
committed by Android (Google) Code Review
2 changed files with 34 additions and 15 deletions

View File

@@ -161,7 +161,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
@Override
public int getAvailabilityStatus() {
// TODO(b/37313605): Re-enable once this controller supports instant apps
return isInstantApp() || isSystemModule() ? DISABLED_FOR_USER : AVAILABLE;
return mFinishing || isInstantApp() || isSystemModule() ? DISABLED_FOR_USER : AVAILABLE;
}
@Override
@@ -190,7 +190,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
@Override
public void onResume() {
if (isAvailable() && !mFinishing) {
if (isAvailable()) {
mAppsControlDisallowedBySystem = RestrictedLockUtilsInternal.hasBaseUserRestriction(
mActivity, UserManager.DISALLOW_APPS_CONTROL, mUserId);
mAppsControlDisallowedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(

View File

@@ -21,8 +21,8 @@ import static com.android.settings.applications.appinfo.AppButtonsPreferenceCont
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
@@ -41,8 +41,8 @@ import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.om.OverlayManager;
import android.content.om.OverlayInfo;
import android.content.om.OverlayManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -51,6 +51,8 @@ import android.os.UserManager;
import android.util.ArraySet;
import android.view.View;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
@@ -61,7 +63,6 @@ import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.ActionButtonsPreference;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -72,12 +73,15 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner;
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 org.robolectric.util.ReflectionHelpers;
import java.util.Set;
@RunWith(RobolectricTestRunner.class)
public class AppButtonsPreferenceControllerTest {
@@ -114,10 +118,9 @@ public class AppButtonsPreferenceControllerTest {
@Mock
private UserManager mUserManager;
@Mock
private Application mApplication;
@Mock
private PackageInfo mPackageInfo;
private Context mContext;
private Intent mUninstallIntent;
private ActionButtonsPreference mButtonPrefs;
private AppButtonsPreferenceController mController;
@@ -127,14 +130,15 @@ public class AppButtonsPreferenceControllerTest {
MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest();
mContext = RuntimeEnvironment.application;
doReturn(mDpm).when(mSettingsActivity).getSystemService(Context.DEVICE_POLICY_SERVICE);
doReturn(mUserManager).when(mSettingsActivity).getSystemService(Context.USER_SERVICE);
doReturn(mPackageManger).when(mSettingsActivity).getPackageManager();
doReturn(mAm).when(mSettingsActivity).getSystemService(Context.ACTIVITY_SERVICE);
doReturn(mOverlayManager).when(mSettingsActivity).
getSystemService(OverlayManager.class);
getSystemService(OverlayManager.class);
doReturn(mAppEntry).when(mState).getEntry(anyString(), anyInt());
when(mSettingsActivity.getApplication()).thenReturn(mApplication);
doReturn(mContext).when(mSettingsActivity).getApplicationContext();
when(mSettingsActivity.getResources().getString(anyInt())).thenReturn(RESOURCE_STRING);
mController = spy(new AppButtonsPreferenceController(mSettingsActivity, mFragment,
@@ -163,6 +167,21 @@ public class AppButtonsPreferenceControllerTest {
ShadowAppUtils.reset();
}
@Test
@Config(shadows = ShadowAppUtils.class)
public void isAvailable_validPackageName_isTrue() {
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isAvailable_nullPackageName_isFalse() {
final AppButtonsPreferenceController controller = spy(
new AppButtonsPreferenceController(mSettingsActivity, mFragment,
mLifecycle, null, mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN));
assertThat(controller.isAvailable()).isFalse();
}
@Test
public void retrieveAppEntry_hasAppEntry_notNull()
throws PackageManager.NameNotFoundException {
@@ -308,10 +327,10 @@ public class AppButtonsPreferenceControllerTest {
@Test
public void updateUninstallButton_isNonSystemRro_setButtonDisable()
throws RemoteException {
throws RemoteException {
when(mAppInfo.isResourceOverlay()).thenReturn(true);
when(mOverlayManager.getOverlayInfo(anyString(), any()))
.thenReturn(OVERLAY_ENABLED);
.thenReturn(OVERLAY_ENABLED);
mController.updateUninstallButton();
@@ -320,10 +339,10 @@ public class AppButtonsPreferenceControllerTest {
@Test
public void updateUninstallButton_isNonSystemRro_setButtonEnable()
throws RemoteException {
throws RemoteException {
when(mAppInfo.isResourceOverlay()).thenReturn(true);
when(mOverlayManager.getOverlayInfo(anyString(), any()))
.thenReturn(OVERLAY_DISABLED);
.thenReturn(OVERLAY_DISABLED);
mController.updateUninstallButton();
@@ -425,7 +444,7 @@ public class AppButtonsPreferenceControllerTest {
@Test
public void onPackageListChanged_available_shouldRefreshUi() {
doReturn(AppButtonsPreferenceController.AVAILABLE)
.when(mController).getAvailabilityStatus();
.when(mController).getAvailabilityStatus();
doReturn(true).when(mController).refreshUi();
mController.onPackageListChanged();
@@ -436,7 +455,7 @@ public class AppButtonsPreferenceControllerTest {
@Test
public void onPackageListChanged_notAvailable_shouldNotRefreshUiAndNoCrash() {
doReturn(AppButtonsPreferenceController.DISABLED_FOR_USER)
.when(mController).getAvailabilityStatus();
.when(mController).getAvailabilityStatus();
mController.onPackageListChanged();