Merge "Fix Settings crash when click uninstall button"
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 1676829..1b14402 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -161,7 +161,7 @@
@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 @@
@Override
public void onResume() {
- if (isAvailable() && !mFinishing) {
+ if (isAvailable()) {
mAppsControlDisallowedBySystem = RestrictedLockUtilsInternal.hasBaseUserRestriction(
mActivity, UserManager.DISALLOW_APPS_CONTROL, mUserId);
mAppsControlDisallowedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index eee2da7..ca2a800 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -21,8 +21,8 @@
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.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.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.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.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 @@
@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 @@
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,
@@ -164,6 +168,21 @@
}
@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 {
doReturn(mPackageInfo).when(mPackageManger).getPackageInfo(anyString(), anyInt());
@@ -308,10 +327,10 @@
@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 @@
@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 @@
@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 @@
@Test
public void onPackageListChanged_notAvailable_shouldNotRefreshUiAndNoCrash() {
doReturn(AppButtonsPreferenceController.DISABLED_FOR_USER)
- .when(mController).getAvailabilityStatus();
+ .when(mController).getAvailabilityStatus();
mController.onPackageListChanged();