Merge "Add method to disable "disable" button in installed app UI"

This commit is contained in:
TreeHugger Robot
2017-05-31 21:46:35 +00:00
committed by Android (Google) Code Review
6 changed files with 129 additions and 33 deletions

View File

@@ -42,6 +42,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -62,6 +63,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
protected EnforcedAdmin mAppsControlDisallowedAdmin;
protected boolean mAppsControlDisallowedBySystem;
protected ApplicationFeatureProvider mApplicationFeatureProvider;
protected ApplicationsState mState;
protected ApplicationsState.Session mSession;
protected ApplicationsState.AppEntry mAppEntry;
@@ -84,13 +86,14 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFinishing = false;
mState = ApplicationsState.getInstance(getActivity().getApplication());
final Activity activity = getActivity();
mApplicationFeatureProvider = FeatureFactory.getFactory(activity)
.getApplicationFeatureProvider(activity);
mState = ApplicationsState.getInstance(activity.getApplication());
mSession = mState.newSession(this);
Context context = getActivity();
mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mPm = context.getPackageManager();
mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
mPm = activity.getPackageManager();
IBinder b = ServiceManager.getService(Context.USB_SERVICE);
mUsbManager = IUsbManager.Stub.asInterface(b);

View File

@@ -24,6 +24,7 @@ import android.view.View;
import com.android.settings.applications.instantapps.InstantAppButtonsController;
import java.util.List;
import java.util.Set;
public interface ApplicationFeatureProvider {
@@ -86,6 +87,11 @@ public interface ApplicationFeatureProvider {
*/
List<UserAppInfo> findPersistentPreferredActivities(@UserIdInt int userId, Intent[] intents);
/**
* Returns a list of package names that should be kept enabled.
*/
Set<String> getKeepEnabledPackages();
/**
* Callback that receives the number of packages installed on the device.
*/

View File

@@ -129,6 +129,11 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
return preferredActivities;
}
@Override
public Set<String> getKeepEnabledPackages() {
return new ArraySet<>();
}
private static class CurrentUserAndManagedProfilePolicyInstalledAppCounter
extends InstalledAppCounter {
private NumberOfAppsCallback mCallback;

View File

@@ -91,7 +91,6 @@ import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.notification.AppNotificationSettings;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.notification.NotificationBackend.AppRow;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem;
import com.android.settingslib.RestrictedLockUtils;
@@ -228,7 +227,8 @@ public class InstalledAppDetails extends AppInfoBase
}
};
private boolean handleDisableable(Button button) {
@VisibleForTesting
boolean handleDisableable(Button button) {
boolean disableable = false;
// Try to prevent the user from bricking their phone
// by not allowing disabling of apps signed with the
@@ -239,7 +239,8 @@ public class InstalledAppDetails extends AppInfoBase
button.setText(R.string.disable_text);
} else if (mAppEntry.info.enabled && !isDisabledUntilUsed()) {
button.setText(R.string.disable_text);
disableable = true;
disableable = !mApplicationFeatureProvider.getKeepEnabledPackages()
.contains(mAppEntry.info.packageName);
} else {
button.setText(R.string.enable_text);
disableable = true;
@@ -1214,9 +1215,7 @@ public class InstalledAppDetails extends AppInfoBase
void maybeAddInstantAppButtons() {
if (AppUtils.isInstant(mPackageInfo.applicationInfo)) {
LayoutPreference buttons = (LayoutPreference) findPreference(KEY_INSTANT_APP_BUTTONS);
final Activity activity = getActivity();
mInstantAppButtonsController = FeatureFactory.getFactory(activity)
.getApplicationFeatureProvider(activity)
mInstantAppButtonsController = mApplicationFeatureProvider
.newInstantAppButtonsController(this,
buttons.findViewById(R.id.instant_app_button_container),
id -> showDialogInner(id, 0))