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

Commit 15228392 authored by Lei Yu's avatar Lei Yu Committed by android-build-merger
Browse files

Merge "Display anomaly in battery usage page" into oc-dr1-dev

am: b2754717

Change-Id: Ib9a7a971bdd3c9685287d25985f06f39507dbdad
parents 3fb16552 b2754717
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,11 @@
        android:selectable="false"
        android:selectable="false"
        android:order="-9999"/>
        android:order="-9999"/>


    <Preference
        android:key="high_usage"
        android:icon="@drawable/ic_battery_alert_24dp"
        android:title="@string/power_high_usage_title"/>

    <PreferenceCategory
    <PreferenceCategory
        android:title="@string/battery_detail_info_title">
        android:title="@string/battery_detail_info_title">


+1 −1
Original line number Original line Diff line number Diff line
@@ -1052,7 +1052,7 @@ public class InstalledAppDetails extends AppInfoBase
                BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
                BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                        this, mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry,
                        this, mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry,
                        mBatteryPercent);
                        mBatteryPercent, null /* mAnomalies */);
            } else {
            } else {
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                        this, mPackageName);
                        this, mPackageName);
+64 −6
Original line number Original line Diff line number Diff line
@@ -17,9 +17,11 @@
package com.android.settings.fuelgauge;
package com.android.settings.fuelgauge;


import android.app.Activity;
import android.app.Activity;
import android.app.LoaderManager;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.BatteryStats;
import android.os.Bundle;
import android.os.Bundle;
@@ -43,6 +45,10 @@ import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
import com.android.settings.fuelgauge.anomaly.AnomalySummaryPreferenceController;
import com.android.settings.widget.EntityHeaderController;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState;
@@ -55,10 +61,11 @@ import java.util.List;
 *
 *
 * 1. Detail battery usage information for app(i.e. usage time, usage amount)
 * 1. Detail battery usage information for app(i.e. usage time, usage amount)
 * 2. Battery related controls for app(i.e uninstall, force stop)
 * 2. Battery related controls for app(i.e uninstall, force stop)
 *
 */
 */
public class AdvancedPowerUsageDetail extends DashboardFragment implements
public class AdvancedPowerUsageDetail extends DashboardFragment implements
        ButtonActionDialogFragment.AppButtonsDialogListener {
        ButtonActionDialogFragment.AppButtonsDialogListener,
        AnomalyDialogFragment.AnomalyDialogListener,
        LoaderManager.LoaderCallbacks<List<Anomaly>> {


    public static final String TAG = "AdvancedPowerUsageDetail";
    public static final String TAG = "AdvancedPowerUsageDetail";
    public static final String EXTRA_UID = "extra_uid";
    public static final String EXTRA_UID = "extra_uid";
@@ -69,6 +76,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
    public static final String EXTRA_ICON_ID = "extra_icon_id";
    public static final String EXTRA_ICON_ID = "extra_icon_id";
    public static final String EXTRA_POWER_USAGE_PERCENT = "extra_power_usage_percent";
    public static final String EXTRA_POWER_USAGE_PERCENT = "extra_power_usage_percent";
    public static final String EXTRA_POWER_USAGE_AMOUNT = "extra_power_usage_amount";
    public static final String EXTRA_POWER_USAGE_AMOUNT = "extra_power_usage_amount";
    public static final String EXTRA_ANOMALY_LIST = "extra_anomaly_list";


    private static final String KEY_PREF_FOREGROUND = "app_usage_foreground";
    private static final String KEY_PREF_FOREGROUND = "app_usage_foreground";
    private static final String KEY_PREF_BACKGROUND = "app_usage_background";
    private static final String KEY_PREF_BACKGROUND = "app_usage_background";
@@ -78,6 +86,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
    private static final int REQUEST_UNINSTALL = 0;
    private static final int REQUEST_UNINSTALL = 0;
    private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
    private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;


    private static final int ANOMALY_LOADER = 0;

    @VisibleForTesting
    @VisibleForTesting
    LayoutPreference mHeaderPreference;
    LayoutPreference mHeaderPreference;
    @VisibleForTesting
    @VisibleForTesting
@@ -93,14 +103,19 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
    Preference mBackgroundPreference;
    Preference mBackgroundPreference;
    @VisibleForTesting
    @VisibleForTesting
    Preference mPowerUsagePreference;
    Preference mPowerUsagePreference;
    @VisibleForTesting
    AnomalySummaryPreferenceController mAnomalySummaryPreferenceController;
    private AppButtonsPreferenceController mAppButtonsPreferenceController;
    private AppButtonsPreferenceController mAppButtonsPreferenceController;


    private DevicePolicyManagerWrapper mDpm;
    private DevicePolicyManagerWrapper mDpm;
    private UserManager mUserManager;
    private UserManager mUserManager;
    private PackageManager mPackageManager;
    private PackageManager mPackageManager;
    private List<Anomaly> mAnomalies;
    private String mPackageName;


    public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment,
    public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment,
            BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent) {
            BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent,
            List<Anomaly> anomalies) {
        // Initialize mStats if necessary.
        // Initialize mStats if necessary.
        helper.getStats();
        helper.getStats();


@@ -130,6 +145,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
        args.putLong(EXTRA_FOREGROUND_TIME, foregroundTimeMs);
        args.putLong(EXTRA_FOREGROUND_TIME, foregroundTimeMs);
        args.putString(EXTRA_POWER_USAGE_PERCENT, usagePercent);
        args.putString(EXTRA_POWER_USAGE_PERCENT, usagePercent);
        args.putInt(EXTRA_POWER_USAGE_AMOUNT, (int) sipper.totalPowerMah);
        args.putInt(EXTRA_POWER_USAGE_AMOUNT, (int) sipper.totalPowerMah);
        args.putParcelableList(EXTRA_ANOMALY_LIST, anomalies);


        caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args,
        caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args,
                R.string.battery_details_title, null,
                R.string.battery_details_title, null,
@@ -162,14 +178,17 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
    public void onCreate(Bundle icicle) {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        super.onCreate(icicle);


        mPackageName = getArguments().getString(EXTRA_PACKAGE_NAME);
        mAnomalySummaryPreferenceController = new AnomalySummaryPreferenceController(
                (SettingsActivity) getActivity(), this, MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL);
        mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
        mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
        mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND);
        mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND);
        mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE);
        mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE);
        mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER);
        mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER);


        final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
        if (mPackageName != null) {
        if (packageName != null) {
            mAppEntry = mState.getEntry(mPackageName, UserHandle.myUserId());
            mAppEntry = mState.getEntry(packageName, UserHandle.myUserId());
            initAnomalyInfo();
        }
        }
    }
    }


@@ -181,6 +200,16 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
        initPreference();
        initPreference();
    }
    }


    @VisibleForTesting
    void initAnomalyInfo() {
        mAnomalies = getArguments().getParcelableArrayList(EXTRA_ANOMALY_LIST);
        if (mAnomalies == null) {
            getLoaderManager().initLoader(ANOMALY_LOADER, Bundle.EMPTY, this);
        } else if (mAnomalies != null){
            mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(mAnomalies);
        }
    }

    @VisibleForTesting
    @VisibleForTesting
    void initHeader() {
    void initHeader() {
        final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
        final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
@@ -234,6 +263,15 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
                getString(R.string.battery_detail_power_percentage, usagePercent, powerMah));
                getString(R.string.battery_detail_power_percentage, usagePercent, powerMah));
    }
    }


    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        if (TextUtils.equals(preference.getKey(), AnomalySummaryPreferenceController.ANOMALY_KEY)) {
            mAnomalySummaryPreferenceController.onPreferenceTreeClick(preference);
            return true;
        }
        return super.onPreferenceTreeClick(preference);
    }

    @Override
    @Override
    public int getMetricsCategory() {
    public int getMetricsCategory() {
        return MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL;
        return MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL;
@@ -281,4 +319,24 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
            mAppButtonsPreferenceController.handleDialogClick(id);
            mAppButtonsPreferenceController.handleDialogClick(id);
        }
        }
    }
    }

    @Override
    public void onAnomalyHandled(Anomaly anomaly) {
        mAnomalySummaryPreferenceController.hideHighUsagePreference();
    }

    @Override
    public Loader<List<Anomaly>> onCreateLoader(int id, Bundle args) {
        return new AnomalyLoader(getContext(), mPackageName);
    }

    @Override
    public void onLoadFinished(Loader<List<Anomaly>> loader, List<Anomaly> data) {
        mAnomalySummaryPreferenceController.updateAnomalySummaryPreference(data);
    }

    @Override
    public void onLoaderReset(Loader<List<Anomaly>> loader) {

    }
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -286,7 +286,8 @@ public class PowerUsageSummary extends PowerUsageBase implements
        PowerGaugePreference pgp = (PowerGaugePreference) preference;
        PowerGaugePreference pgp = (PowerGaugePreference) preference;
        BatteryEntry entry = pgp.getInfo();
        BatteryEntry entry = pgp.getInfo();
        AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
        AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
                this, mStatsHelper, mStatsType, entry, pgp.getPercent());
                this, mStatsHelper, mStatsType, entry, pgp.getPercent(),
                mAnomalySparseArray.get(entry.sipper.getUid()));
        return super.onPreferenceTreeClick(preference);
        return super.onPreferenceTreeClick(preference);
    }
    }


+3 −2
Original line number Original line Diff line number Diff line
@@ -32,8 +32,9 @@ import java.util.List;
 */
 */
public class AnomalySummaryPreferenceController {
public class AnomalySummaryPreferenceController {
    private static final String TAG = "HighUsagePreferenceController";
    private static final String TAG = "HighUsagePreferenceController";
    @VisibleForTesting

    static final String ANOMALY_KEY = "high_usage";
    public static final String ANOMALY_KEY = "high_usage";

    private static final int REQUEST_ANOMALY_ACTION = 0;
    private static final int REQUEST_ANOMALY_ACTION = 0;
    private PreferenceFragment mFragment;
    private PreferenceFragment mFragment;
    @VisibleForTesting
    @VisibleForTesting
Loading