Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88b57826 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Create Controller for app buttons" into oc-dev

parents 231ed14e 31b8de1e
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -129,4 +129,25 @@ public interface DevicePolicyManagerWrapper {
     * @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts
     */
    List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user);

    /**
     * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}.
     *
     * @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser
     */
    boolean isDeviceOwnerAppOnAnyUser(String packageName);

    /**
     * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}.
     *
     * @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins
     */
    boolean packageHasActiveAdmins(String packageName);

    /**
     * Calls {@code DevicePolicyManager.isUninstallInQueue()}.
     *
     * @see android.app.admin.DevicePolicyManager#isUninstallInQueue
     */
    boolean isUninstallInQueue(String packageName);
}
+15 −0
Original line number Diff line number Diff line
@@ -101,4 +101,19 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe
    public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) {
        return mDpm.getOwnerInstalledCaCerts(user);
    }

    @Override
    public boolean isDeviceOwnerAppOnAnyUser(String packageName) {
        return mDpm.isDeviceOwnerAppOnAnyUser(packageName);
    }

    @Override
    public boolean packageHasActiveAdmins(String packageName) {
        return mDpm.packageHasActiveAdmins(packageName);
    }

    @Override
    public boolean isUninstallInQueue(String packageName) {
        return mDpm.isUninstallInQueue(packageName);
    }
}
+57 −5
Original line number Diff line number Diff line
@@ -16,11 +16,19 @@

package com.android.settings.fuelgauge;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.PreferenceFragment;
import android.support.v7.preference.Preference;
@@ -36,6 +44,8 @@ import com.android.settings.Utils;
import com.android.settings.applications.AppHeaderController;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceController;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState;

@@ -50,7 +60,8 @@ import java.util.List;
 *
 * This fragment will replace {@link PowerUsageDetail}
 */
public class AdvancedPowerUsageDetail extends PowerUsageBase {
public class AdvancedPowerUsageDetail extends PowerUsageBase implements
        ButtonActionDialogFragment.AppButtonsDialogListener {

    public static final String TAG = "AdvancedPowerUsageDetail";
    public static final String EXTRA_UID = "extra_uid";
@@ -67,6 +78,9 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {
    private static final String KEY_PREF_POWER_USAGE = "app_power_usage";
    private static final String KEY_PREF_HEADER = "header_view";

    private static final int REQUEST_UNINSTALL = 0;
    private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;

    @VisibleForTesting
    LayoutPreference mHeaderPreference;
    @VisibleForTesting
@@ -77,6 +91,11 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {
    private Preference mForegroundPreference;
    private Preference mBackgroundPreference;
    private Preference mPowerUsagePreference;
    private AppButtonsPreferenceController mAppButtonsPreferenceController;

    private DevicePolicyManagerWrapper mDpm;
    private UserManager mUserManager;
    private PackageManager mPackageManager;

    public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment,
            BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent) {
@@ -112,6 +131,17 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {
                R.string.battery_details_title, null, new UserHandle(UserHandle.myUserId()));
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mState = ApplicationsState.getInstance(getActivity().getApplication());
        mDpm = new DevicePolicyManagerWrapperImpl(
                (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
        mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
        mPackageManager = activity.getPackageManager();
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
@@ -120,7 +150,6 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {
        mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND);
        mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE);
        mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER);
        mState = ApplicationsState.getInstance(getActivity().getApplication());

        final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
        if (packageName != null) {
@@ -160,7 +189,13 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {

        if (mAppEntry == null) {
            controller.setLabel(bundle.getString(EXTRA_LABEL));
            controller.setIcon(getContext().getDrawable(bundle.getInt(EXTRA_ICON_ID)));

            final int iconId = bundle.getInt(EXTRA_ICON_ID, 0);
            if (iconId == 0) {
                controller.setIcon(context.getPackageManager().getDefaultActivityIcon());
            } else {
                controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID)));
            }
        } else {
            mState.ensureIcon(mAppEntry);
            controller.setLabel(mAppEntry);
@@ -196,9 +231,26 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase {
        controllers.add(new BackgroundActivityPreferenceController(context, uid));
        controllers.add(new BatteryOptimizationPreferenceController(
                (SettingsActivity) getActivity(), this));
        controllers.add(
                new AppButtonsPreferenceController(getActivity(), getLifecycle(), packageName));
        mAppButtonsPreferenceController = new AppButtonsPreferenceController(
                (SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
                mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
        controllers.add(mAppButtonsPreferenceController);

        return controllers;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (mAppButtonsPreferenceController != null) {
            mAppButtonsPreferenceController.handleActivityResult(requestCode, resultCode, data);
        }
    }

    @Override
    public void handleDialogClick(int id) {
        if (mAppButtonsPreferenceController != null) {
            mAppButtonsPreferenceController.handleDialogClick(id);
        }
    }
}
+628 −12

File changed.

Preview size limit exceeded, changes collapsed.

+104 −0
Original line number Diff line number Diff line
package com.android.settings.fuelgauge;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.IntDef;
import android.support.annotation.VisibleForTesting;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Fragment to show the dialog for uninstall or forcestop. This fragment uses function in
 * target fragment to handle the dialog button click.
 */
public class ButtonActionDialogFragment extends InstrumentedDialogFragment implements
        DialogInterface.OnClickListener {

    /**
     * Interface to handle the dialog click
     */
    interface AppButtonsDialogListener {
        void handleDialogClick(int type);
    }

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            DialogType.DISABLE,
            DialogType.SPECIAL_DISABLE,
            DialogType.FORCE_STOP
    })
    public @interface DialogType {
        int DISABLE = 0;
        int SPECIAL_DISABLE = 1;
        int FORCE_STOP = 2;
    }

    private static final String ARG_ID = "id";
    @VisibleForTesting
    int mId;

    public static ButtonActionDialogFragment newInstance(@DialogType int id) {
        ButtonActionDialogFragment dialogFragment = new ButtonActionDialogFragment();
        Bundle args = new Bundle(1);
        args.putInt(ARG_ID, id);
        dialogFragment.setArguments(args);

        return dialogFragment;
    }

    @Override
    public int getMetricsCategory() {
        //TODO(35810915): update the metrics label because for now this fragment will be shown
        // in two screens
        return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Bundle bundle = getArguments();
        mId = bundle.getInt(ARG_ID);
        Dialog dialog = createDialog(mId);
        if (dialog == null) {
            throw new IllegalArgumentException("unknown id " + mId);
        }
        return dialog;
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        final AppButtonsDialogListener lsn =
                (AppButtonsDialogListener) getTargetFragment();
        lsn.handleDialogClick(mId);
    }

    private AlertDialog createDialog(int id) {
        final Context context = getContext();
        switch (id) {
            case DialogType.DISABLE:
            case DialogType.SPECIAL_DISABLE:
                return new AlertDialog.Builder(context)
                        .setMessage(R.string.app_disable_dlg_text)
                        .setPositiveButton(R.string.app_disable_dlg_positive, this)
                        .setNegativeButton(R.string.dlg_cancel, null)
                        .create();
            case DialogType.FORCE_STOP:
                return new AlertDialog.Builder(context)
                        .setTitle(R.string.force_stop_dlg_title)
                        .setMessage(R.string.force_stop_dlg_text)
                        .setPositiveButton(R.string.dlg_ok, this)
                        .setNegativeButton(R.string.dlg_cancel, null)
                        .create();
        }
        return null;
    }
}
Loading