blob: f9f35255031e167677ca0437531396f6a555d73d [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.car.settings.applications;
import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.DISABLE_CONFIRM_DIALOG_TAG;
import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.FORCE_STOP_CONFIRM_DIALOG_TAG;
import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.UNINSTALL_REQUEST_CODE;
import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
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.anyList;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
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 static org.testng.Assert.assertThrows;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.admin.DevicePolicyManager;
import android.app.role.RoleManager;
import android.car.drivingstate.CarUxRestrictions;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.Signature;
import android.content.res.Resources;
import android.os.UserHandle;
import android.os.UserManager;
import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.car.settings.common.ActionButtonInfo;
import com.android.car.settings.common.ActionButtonsPreference;
import com.android.car.settings.common.ActivityResultCallback;
import com.android.car.settings.common.ConfirmationDialogFragment;
import com.android.car.settings.common.FragmentController;
import com.android.car.settings.common.PreferenceControllerTestUtil;
import com.android.car.settings.testutils.ResourceTestUtils;
import com.android.car.settings.testutils.TestLifecycleOwner;
import com.android.settingslib.applications.ApplicationsState;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@RunWith(AndroidJUnit4.class)
public class ApplicationActionButtonsPreferenceControllerTest {
private static final String PACKAGE_NAME = "Test Package Name";
private Context mContext = spy(ApplicationProvider.getApplicationContext());
private LifecycleOwner mLifecycleOwner;
private ActionButtonsPreference mActionButtonsPreference;
private ApplicationActionButtonsPreferenceController mPreferenceController;
private CarUxRestrictions mCarUxRestrictions;
private ApplicationInfo mApplicationInfo;
private PackageInfo mPackageInfo;
@Mock
private FragmentController mFragmentController;
@Mock
private ApplicationsState mMockAppState;
@Mock
private ApplicationsState.AppEntry mMockAppEntry;
@Mock
private DevicePolicyManager mMockDpm;
@Mock
private PackageManager mMockPm;
@Mock
private ActivityManager mMockActivityManager;
@Mock
private UserManager mMockUserManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mLifecycleOwner = new TestLifecycleOwner();
setMocks();
mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
mActionButtonsPreference = new ActionButtonsPreference(mContext);
mPreferenceController = new ApplicationActionButtonsPreferenceController(mContext,
/* preferenceKey= */ "key", mFragmentController, mCarUxRestrictions);
}
@Test
public void testCheckInitialized_noAppState_throwException() {
mPreferenceController.setAppEntry(mMockAppEntry).setPackageName(PACKAGE_NAME);
assertThrows(IllegalStateException.class,
() -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
mActionButtonsPreference));
}
@Test
public void testCheckInitialized_noAppEntry_throwException() {
mPreferenceController.setAppState(mMockAppState).setPackageName(PACKAGE_NAME);
assertThrows(IllegalStateException.class,
() -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
mActionButtonsPreference));
}
@Test
public void testCheckInitialized_noPackageNameEntry_throwException() {
mPreferenceController.setAppEntry(mMockAppEntry).setAppState(mMockAppState);
assertThrows(IllegalStateException.class,
() -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
mActionButtonsPreference));
}
@Test
public void onCreate_bundledApp_enabled_showDisableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().getText()).isEqualTo(
ResourceTestUtils.getString(mContext, "disable_text"));
}
@Test
public void onCreate_bundledApp_disabled_showEnableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ false, /* system= */ true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().getText()).isEqualTo(
ResourceTestUtils.getString(mContext, "enable_text"));
}
@Test
public void onCreate_bundledApp_enabled_disableUntilUsed_showsEnableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
mApplicationInfo.enabledSetting =
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
mMockAppEntry.info = mApplicationInfo;
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().getText()).isEqualTo(
ResourceTestUtils.getString(mContext, "enable_text"));
}
@Test
public void onCreate_bundledApp_homePackage_disablesDisableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
ResolveInfo homeActivity = new ResolveInfo();
ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = PACKAGE_NAME;
homeActivity.activityInfo = activityInfo;
when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
Object[] args = invocation.getArguments();
((List<ResolveInfo>) args[0]).add(homeActivity);
return null;
});
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().isEnabled()).isFalse();
}
@Test
public void onCreate_bundledApp_systemPackage_disablesDisableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
mPackageInfo.signatures = new Signature[]{new Signature(PACKAGE_NAME.getBytes())};
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().isEnabled()).isFalse();
}
@Test
@Ignore("b/173179832")
public void onCreate_bundledApp_enabledApp_keepEnabledPackage_disablesDisableButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
ResolveInfo phoneActivity = new ResolveInfo();
ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = PACKAGE_NAME;
activityInfo.permission = Manifest.permission.BROADCAST_SMS;
phoneActivity.activityInfo = activityInfo;
RoleManager mockRoleManager = mock(RoleManager.class);
when(mContext.getSystemService(RoleManager.class)).thenReturn(mockRoleManager);
when(mockRoleManager.getRoleHoldersAsUser(eq(RoleManager.ROLE_DIALER),
any(UserHandle.class))).thenReturn(Collections.singletonList(PACKAGE_NAME));
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getDisableButton().isEnabled()).isFalse();
}
@Test
public void onCreate_notSystemApp_showUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().getText()).isEqualTo(
ResourceTestUtils.getString(mContext, "uninstall_text"));
}
@Test
public void onCreate_packageHasActiveAdmins_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockDpm.packageHasActiveAdmins(PACKAGE_NAME)).thenReturn(true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onCreate_deviceProvisioningPackage_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
Resources resources = mock(Resources.class);
when(mContext.getResources()).thenReturn(resources);
when(resources.getString(com.android.internal.R.string.config_deviceProvisioningPackage))
.thenReturn(PACKAGE_NAME);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onStart_uninstallQueued_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockDpm.isUninstallInQueue(PACKAGE_NAME)).thenReturn(true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onStart_noDefaultHome_onlyHomeApp_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
ResolveInfo homeActivity = new ResolveInfo();
ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = PACKAGE_NAME;
homeActivity.activityInfo = activityInfo;
when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
Object[] args = invocation.getArguments();
((List<ResolveInfo>) args[0]).add(homeActivity);
return null;
});
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onStart_noDefaultHome_multipleHomeApps_enablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
ResolveInfo homeActivity = new ResolveInfo();
ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = PACKAGE_NAME;
homeActivity.activityInfo = activityInfo;
ResolveInfo altHomeActivity = new ResolveInfo();
ActivityInfo altActivityInfo = new ActivityInfo();
altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
altHomeActivity.activityInfo = altActivityInfo;
when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
Object[] args = invocation.getArguments();
((List<ResolveInfo>) args[0]).addAll(Arrays.asList(homeActivity, altHomeActivity));
return null;
});
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isTrue();
}
@Test
public void onStart_defaultHomeApp_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
ResolveInfo homeActivity = new ResolveInfo();
ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = PACKAGE_NAME;
homeActivity.activityInfo = activityInfo;
ResolveInfo altHomeActivity = new ResolveInfo();
ActivityInfo altActivityInfo = new ActivityInfo();
altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
altHomeActivity.activityInfo = altActivityInfo;
when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
Object[] args = invocation.getArguments();
((List<ResolveInfo>) args[0]).addAll(Arrays.asList(homeActivity, altHomeActivity));
return new ComponentName(PACKAGE_NAME, "SomeClass");
});
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onStart_appsControlUserRestriction_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)).thenReturn(
true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onStart_uninstallAppsRestriction_disablesUninstallButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_UNINSTALL_APPS)).thenReturn(
true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getUninstallButton().isEnabled()).isFalse();
}
@Test
public void onCreate_forceStopButtonInitialized() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getForceStopButton().getText()).isEqualTo(
ResourceTestUtils.getString(mContext, "force_stop"));
}
@Test
public void onCreate_notStopped_enablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getForceStopButton().isEnabled()).isTrue();
}
@Test
public void onCreate_stopped_disablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getForceStopButton().isEnabled()).isFalse();
}
@Test
public void onCreate_packageHasActiveAdmins_disablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockDpm.packageHasActiveAdmins(PACKAGE_NAME)).thenReturn(true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getForceStopButton().isEnabled()).isFalse();
}
@Test
public void onCreate_appsControlUserRestriction_disablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)).thenReturn(
true);
mPreferenceController.onCreate(mLifecycleOwner);
assertThat(getForceStopButton().isEnabled()).isFalse();
}
@Test
public void onCreate_packageExplicitlyStopped_queriesPackageRestart() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
verify(mContext).sendOrderedBroadcastAsUser(any(Intent.class),
eq(UserHandle.CURRENT),
/* receiverPermission= */ isNull(),
any(BroadcastReceiver.class),
/* scheduler= */ isNull(),
eq(Activity.RESULT_CANCELED),
/* initialData= */ isNull(),
/* initialExtras= */ isNull());
}
@Test
public void onCreate_packageExplicitlyStopped_success_enablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
mPreferenceController.mCheckKillProcessesReceiver.setPendingResult(
new BroadcastReceiver.PendingResult(Activity.RESULT_OK,
"resultData",
/* resultExtras= */ null,
BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
/* ordered= */ true,
/* sticky= */ false,
/* token= */ null,
UserHandle.myUserId(),
/* flags= */ 0));
mPreferenceController.mCheckKillProcessesReceiver.onReceive(mContext, /* intent= */ null);
assertThat(getForceStopButton().isEnabled()).isTrue();
}
@Test
public void onCreate_packageExplicitlyStopped_failure_disablesForceStopButton() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
mPreferenceController.mCheckKillProcessesReceiver.setPendingResult(
new BroadcastReceiver.PendingResult(Activity.RESULT_CANCELED,
"resultData",
/* resultExtras= */ null,
BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
/* ordered= */ true,
/* sticky= */ false,
/* token= */ null,
UserHandle.myUserId(),
/* flags= */ 0));
mPreferenceController.mCheckKillProcessesReceiver.onReceive(mContext, /* intent= */ null);
assertThat(getForceStopButton().isEnabled()).isFalse();
}
@Test
public void forceStopClicked_showsDialog() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
getForceStopButton().getOnClickListener().onClick(/* view= */ null);
verify(mFragmentController).showDialog(any(ConfirmationDialogFragment.class),
eq(FORCE_STOP_CONFIRM_DIALOG_TAG));
}
@Test
public void forceStopDialogConfirmed_forceStopsPackage() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
mPreferenceController.mForceStopConfirmListener.onConfirm(/* arguments= */ null);
verify(mMockActivityManager).forceStopPackage(PACKAGE_NAME);
verify(mMockAppState).invalidatePackage(eq(PACKAGE_NAME), anyInt());
}
@Test
public void disableClicked_showsDialog() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
mPreferenceController.onCreate(mLifecycleOwner);
getDisableButton().getOnClickListener().onClick(/* view= */ null);
verify(mFragmentController).showDialog(any(ConfirmationDialogFragment.class),
eq(DISABLE_CONFIRM_DIALOG_TAG));
}
@Test
public void disableDialogConfirmed_disablesPackage() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
mPreferenceController.onCreate(mLifecycleOwner);
mPreferenceController.mDisableConfirmListener.onConfirm(/* arguments= */ null);
verify(mMockPm).setApplicationEnabledSetting(PACKAGE_NAME,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, /* flags= */ 0);
}
@Test
public void enableClicked_enablesPackage() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ false, /* system= */ true);
mPreferenceController.onCreate(mLifecycleOwner);
getDisableButton().getOnClickListener().onClick(/* view= */ null);
verify(mMockPm).setApplicationEnabledSetting(PACKAGE_NAME,
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, /* flags= */ 0);
}
@Test
public void uninstallClicked_startsUninstallActivity() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
getUninstallButton().getOnClickListener().onClick(/* view= */ null);
ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(
Intent.class);
verify(mFragmentController).startActivityForResult(intentArgumentCaptor.capture(),
eq(UNINSTALL_REQUEST_CODE), any(ActivityResultCallback.class));
Intent intent = intentArgumentCaptor.getValue();
assertThat(intent.getAction()).isEqualTo(Intent.ACTION_UNINSTALL_PACKAGE);
assertThat(intent.getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)).isTrue();
assertThat(intent.getData().toString()).isEqualTo("package:" + PACKAGE_NAME);
}
@Test
public void processActivityResult_uninstall_resultOk_goesBack() {
setupAndAssignPreference();
setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
mPreferenceController.onCreate(mLifecycleOwner);
mPreferenceController.processActivityResult(UNINSTALL_REQUEST_CODE,
Activity.RESULT_OK, /* data= */ null);
verify(mFragmentController).goBack();
}
private void setMocks() {
mPackageInfo = new PackageInfo();
mPackageInfo.packageName = PACKAGE_NAME;
when(mMockAppState.getEntry(eq(PACKAGE_NAME), anyInt())).thenReturn(mMockAppEntry);
when(mContext.getPackageManager()).thenReturn(mMockPm);
when(mContext.getSystemService(Context.ACTIVITY_SERVICE)).thenReturn(mMockActivityManager);
when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(mMockDpm);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mMockUserManager);
PackageInfo systemPackage = new PackageInfo();
systemPackage.packageName = "android";
systemPackage.signatures = new Signature[]{new Signature(PACKAGE_NAME.getBytes())};
ApplicationInfo systemApplicationInfo = new ApplicationInfo();
systemApplicationInfo.packageName = "android";
systemPackage.applicationInfo = systemApplicationInfo;
try {
when(mMockPm.getPackageInfo(eq(PACKAGE_NAME), anyInt())).thenReturn(mPackageInfo);
when(mMockPm.getPackageInfo("android", PackageManager.GET_SIGNATURES))
.thenReturn(systemPackage);
} catch (PackageManager.NameNotFoundException e) {
// no-op - don't catch exception inside test
}
}
private void setupAndAssignPreference() {
mPreferenceController.setAppEntry(mMockAppEntry).setAppState(mMockAppState).setPackageName(
PACKAGE_NAME);
PreferenceControllerTestUtil.assignPreference(mPreferenceController,
mActionButtonsPreference);
}
private void setApplicationInfo(boolean stopped, boolean enabled, boolean system) {
mApplicationInfo = new ApplicationInfo();
if (stopped) {
mApplicationInfo.flags |= ApplicationInfo.FLAG_STOPPED;
}
if (!enabled) {
mApplicationInfo.enabled = false;
}
if (system) {
mApplicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
}
mMockAppEntry.info = mApplicationInfo;
}
private ActionButtonInfo getForceStopButton() {
return mActionButtonsPreference.getButton(ActionButtons.BUTTON2);
}
private ActionButtonInfo getDisableButton() {
// Same button is used with a different handler. This method is purely for readability.
return getUninstallButton();
}
private ActionButtonInfo getUninstallButton() {
return mActionButtonsPreference.getButton(ActionButtons.BUTTON1);
}
}