Add log for battery tip action.
For each action, we add log when it is triggered. RestrictAppAction could be triggered in multiple locations (main page vs battery app detail page), so we add metricsKey to distinguish them Bug: 73888115 Test: RunSettingsRoboTests Change-Id: I08f28431c4e891bf90816ce91f551edc671579cd
This commit is contained in:
@@ -15,7 +15,6 @@
|
|||||||
package com.android.settings.fuelgauge;
|
package com.android.settings.fuelgauge;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.Fragment;
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
@@ -24,6 +23,7 @@ import android.support.v7.preference.Preference;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryTipDialogFragment;
|
import com.android.settings.fuelgauge.batterytip.BatteryTipDialogFragment;
|
||||||
@@ -51,17 +51,17 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
|
|||||||
DevicePolicyManagerWrapper mDpm;
|
DevicePolicyManagerWrapper mDpm;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
BatteryUtils mBatteryUtils;
|
BatteryUtils mBatteryUtils;
|
||||||
private Fragment mFragment;
|
private InstrumentedPreferenceFragment mFragment;
|
||||||
private String mTargetPackage;
|
private String mTargetPackage;
|
||||||
private PowerWhitelistBackend mPowerWhitelistBackend;
|
private PowerWhitelistBackend mPowerWhitelistBackend;
|
||||||
|
|
||||||
public BackgroundActivityPreferenceController(Context context, Fragment fragment,
|
public BackgroundActivityPreferenceController(Context context,
|
||||||
int uid, String packageName) {
|
InstrumentedPreferenceFragment fragment, int uid, String packageName) {
|
||||||
this(context, fragment, uid, packageName, PowerWhitelistBackend.getInstance());
|
this(context, fragment, uid, packageName, PowerWhitelistBackend.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
BackgroundActivityPreferenceController(Context context, Fragment fragment,
|
BackgroundActivityPreferenceController(Context context, InstrumentedPreferenceFragment fragment,
|
||||||
int uid, String packageName, PowerWhitelistBackend backend) {
|
int uid, String packageName, PowerWhitelistBackend backend) {
|
||||||
super(context);
|
super(context);
|
||||||
mPowerWhitelistBackend = backend;
|
mPowerWhitelistBackend = backend;
|
||||||
@@ -137,7 +137,8 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
|
|||||||
? new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo)
|
? new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo)
|
||||||
: new RestrictAppTip(BatteryTip.StateType.NEW, appInfo);
|
: new RestrictAppTip(BatteryTip.StateType.NEW, appInfo);
|
||||||
|
|
||||||
final BatteryTipDialogFragment dialogFragment = BatteryTipDialogFragment.newInstance(tip);
|
final BatteryTipDialogFragment dialogFragment = BatteryTipDialogFragment.newInstance(tip,
|
||||||
|
mFragment.getMetricsCategory());
|
||||||
dialogFragment.setTargetFragment(mFragment, 0 /* requestCode */);
|
dialogFragment.setTargetFragment(mFragment, 0 /* requestCode */);
|
||||||
dialogFragment.show(mFragment.getFragmentManager(), TAG);
|
dialogFragment.show(mFragment.getFragmentManager(), TAG);
|
||||||
}
|
}
|
||||||
|
@@ -51,15 +51,19 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
|
|||||||
DialogInterface.OnClickListener {
|
DialogInterface.OnClickListener {
|
||||||
|
|
||||||
private static final String ARG_BATTERY_TIP = "battery_tip";
|
private static final String ARG_BATTERY_TIP = "battery_tip";
|
||||||
|
private static final String ARG_METRICS_KEY = "metrics_key";
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
BatteryTip mBatteryTip;
|
BatteryTip mBatteryTip;
|
||||||
|
@VisibleForTesting
|
||||||
|
int mMetricsKey;
|
||||||
|
|
||||||
public static BatteryTipDialogFragment newInstance(BatteryTip batteryTip) {
|
public static BatteryTipDialogFragment newInstance(BatteryTip batteryTip, int metricsKey) {
|
||||||
BatteryTipDialogFragment dialogFragment = new BatteryTipDialogFragment();
|
BatteryTipDialogFragment dialogFragment = new BatteryTipDialogFragment();
|
||||||
|
|
||||||
Bundle args = new Bundle(1);
|
Bundle args = new Bundle(1);
|
||||||
args.putParcelable(ARG_BATTERY_TIP, batteryTip);
|
args.putParcelable(ARG_BATTERY_TIP, batteryTip);
|
||||||
|
args.putInt(ARG_METRICS_KEY, metricsKey);
|
||||||
dialogFragment.setArguments(args);
|
dialogFragment.setArguments(args);
|
||||||
|
|
||||||
return dialogFragment;
|
return dialogFragment;
|
||||||
@@ -71,6 +75,7 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
|
|||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
|
|
||||||
mBatteryTip = bundle.getParcelable(ARG_BATTERY_TIP);
|
mBatteryTip = bundle.getParcelable(ARG_BATTERY_TIP);
|
||||||
|
mMetricsKey = bundle.getInt(ARG_METRICS_KEY);
|
||||||
|
|
||||||
switch (mBatteryTip.getType()) {
|
switch (mBatteryTip.getType()) {
|
||||||
case BatteryTip.TipType.SUMMARY:
|
case BatteryTip.TipType.SUMMARY:
|
||||||
@@ -165,7 +170,7 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
|
|||||||
(SettingsActivity) getActivity(),
|
(SettingsActivity) getActivity(),
|
||||||
(InstrumentedPreferenceFragment) getTargetFragment());
|
(InstrumentedPreferenceFragment) getTargetFragment());
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
action.handlePositiveAction();
|
action.handlePositiveAction(mMetricsKey);
|
||||||
}
|
}
|
||||||
lsn.onBatteryTipHandled(mBatteryTip);
|
lsn.onBatteryTipHandled(mBatteryTip);
|
||||||
}
|
}
|
||||||
|
@@ -118,14 +118,14 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
|
|||||||
if (batteryTip != null) {
|
if (batteryTip != null) {
|
||||||
if (batteryTip.shouldShowDialog()) {
|
if (batteryTip.shouldShowDialog()) {
|
||||||
BatteryTipDialogFragment dialogFragment = BatteryTipDialogFragment.newInstance(
|
BatteryTipDialogFragment dialogFragment = BatteryTipDialogFragment.newInstance(
|
||||||
batteryTip);
|
batteryTip, mFragment.getMetricsCategory());
|
||||||
dialogFragment.setTargetFragment(mFragment, REQUEST_ANOMALY_ACTION);
|
dialogFragment.setTargetFragment(mFragment, REQUEST_ANOMALY_ACTION);
|
||||||
dialogFragment.show(mFragment.getFragmentManager(), TAG);
|
dialogFragment.show(mFragment.getFragmentManager(), TAG);
|
||||||
} else {
|
} else {
|
||||||
final BatteryTipAction action = BatteryTipUtils.getActionForBatteryTip(batteryTip,
|
final BatteryTipAction action = BatteryTipUtils.getActionForBatteryTip(batteryTip,
|
||||||
mSettingsActivity, mFragment);
|
mSettingsActivity, mFragment);
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
action.handlePositiveAction();
|
action.handlePositiveAction(mFragment.getMetricsCategory());
|
||||||
}
|
}
|
||||||
if (mBatteryTipListener != null) {
|
if (mBatteryTipListener != null) {
|
||||||
mBatteryTipListener.onBatteryTipHandled(batteryTip);
|
mBatteryTipListener.onBatteryTipHandled(batteryTip);
|
||||||
|
@@ -19,6 +19,8 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
|
||||||
public class BatterySaverAction extends BatteryTipAction {
|
public class BatterySaverAction extends BatteryTipAction {
|
||||||
private PowerManager mPowerManager;
|
private PowerManager mPowerManager;
|
||||||
|
|
||||||
@@ -31,7 +33,9 @@ public class BatterySaverAction extends BatteryTipAction {
|
|||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handlePositiveAction() {
|
public void handlePositiveAction(int metricsKey) {
|
||||||
mPowerManager.setPowerSaveMode(true);
|
mPowerManager.setPowerSaveMode(true);
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_TURN_ON_BATTERY_SAVER, metricsKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,13 +26,15 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
|||||||
*/
|
*/
|
||||||
public abstract class BatteryTipAction {
|
public abstract class BatteryTipAction {
|
||||||
protected Context mContext;
|
protected Context mContext;
|
||||||
|
protected MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
public BatteryTipAction(Context context) {
|
public BatteryTipAction(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
public abstract void handlePositiveAction();
|
public abstract void handlePositiveAction(int metricsKey);
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
@@ -49,7 +50,9 @@ public class OpenRestrictAppFragmentAction extends BatteryTipAction {
|
|||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handlePositiveAction() {
|
public void handlePositiveAction(int metricsKey) {
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE, metricsKey);
|
||||||
final List<AppInfo> mAppInfos = mRestrictAppTip.getRestrictAppList();
|
final List<AppInfo> mAppInfos = mRestrictAppTip.getRestrictAppList();
|
||||||
RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mFragment,
|
RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mFragment,
|
||||||
mAppInfos);
|
mAppInfos);
|
||||||
|
@@ -19,7 +19,10 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.internal.util.CollectionUtils;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
|
import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
|
||||||
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
@@ -49,14 +52,28 @@ public class RestrictAppAction extends BatteryTipAction {
|
|||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handlePositiveAction() {
|
public void handlePositiveAction(int metricsKey) {
|
||||||
final List<AppInfo> appInfos = mRestrictAppTip.getRestrictAppList();
|
final List<AppInfo> appInfos = mRestrictAppTip.getRestrictAppList();
|
||||||
|
|
||||||
for (int i = 0, size = appInfos.size(); i < size; i++) {
|
for (int i = 0, size = appInfos.size(); i < size; i++) {
|
||||||
final String packageName = appInfos.get(i).packageName;
|
final AppInfo appInfo = appInfos.get(i);
|
||||||
|
final String packageName = appInfo.packageName;
|
||||||
// Force app standby, then app can't run in the background
|
// Force app standby, then app can't run in the background
|
||||||
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,
|
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,
|
||||||
AppOpsManager.MODE_IGNORED);
|
AppOpsManager.MODE_IGNORED);
|
||||||
|
if (CollectionUtils.isEmpty(appInfo.anomalyTypes)) {
|
||||||
|
// Only log context if there is no anomaly type
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, packageName,
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey));
|
||||||
|
} else {
|
||||||
|
for (int type : appInfo.anomalyTypes) {
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, packageName,
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey),
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, type));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mBatteryDatabaseManager.updateAnomalies(appInfos, AnomalyDatabaseHelper.State.HANDLED);
|
mBatteryDatabaseManager.updateAnomalies(appInfos, AnomalyDatabaseHelper.State.HANDLED);
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
@@ -38,7 +39,9 @@ public class SmartBatteryAction extends BatteryTipAction {
|
|||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handlePositiveAction() {
|
public void handlePositiveAction(int metricsKey) {
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_SMART_BATTERY, metricsKey);
|
||||||
new SubSettingLauncher(mSettingsActivity)
|
new SubSettingLauncher(mSettingsActivity)
|
||||||
.setSourceMetricsCategory(mFragment instanceof Instrumentable
|
.setSourceMetricsCategory(mFragment instanceof Instrumentable
|
||||||
? ((Instrumentable) mFragment).getMetricsCategory()
|
? ((Instrumentable) mFragment).getMetricsCategory()
|
||||||
|
@@ -18,7 +18,10 @@ package com.android.settings.fuelgauge.batterytip.actions;
|
|||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.support.annotation.VisibleForTesting;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
||||||
|
|
||||||
@@ -27,7 +30,8 @@ import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
|||||||
*/
|
*/
|
||||||
public class UnrestrictAppAction extends BatteryTipAction {
|
public class UnrestrictAppAction extends BatteryTipAction {
|
||||||
private UnrestrictAppTip mUnRestrictAppTip;
|
private UnrestrictAppTip mUnRestrictAppTip;
|
||||||
private BatteryUtils mBatteryUtils;
|
@VisibleForTesting
|
||||||
|
BatteryUtils mBatteryUtils;
|
||||||
|
|
||||||
public UnrestrictAppAction(Context context, UnrestrictAppTip tip) {
|
public UnrestrictAppAction(Context context, UnrestrictAppTip tip) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -39,10 +43,13 @@ public class UnrestrictAppAction extends BatteryTipAction {
|
|||||||
* Handle the action when user clicks positive button
|
* Handle the action when user clicks positive button
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void handlePositiveAction() {
|
public void handlePositiveAction(int metricsKey) {
|
||||||
final String packageName = mUnRestrictAppTip.getPackageName();
|
final String packageName = mUnRestrictAppTip.getPackageName();
|
||||||
// Clear force app standby, then app can run in the background
|
// Clear force app standby, then app can run in the background
|
||||||
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,
|
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,
|
||||||
AppOpsManager.MODE_ALLOWED);
|
AppOpsManager.MODE_ALLOWED);
|
||||||
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, packageName, Pair.create(
|
||||||
|
MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -59,6 +59,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
private static final String DISPLAY_NAME = "app";
|
private static final String DISPLAY_NAME = "app";
|
||||||
private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||||
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
private BatteryTipDialogFragment mDialogFragment;
|
private BatteryTipDialogFragment mDialogFragment;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -102,7 +103,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
public void testOnCreateDialog_highUsageTip_fireHighUsageDialog() {
|
public void testOnCreateDialog_highUsageTip_fireHighUsageDialog() {
|
||||||
Robolectric.getForegroundThreadScheduler().pause();
|
Robolectric.getForegroundThreadScheduler().pause();
|
||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
|
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -134,7 +135,8 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
public void testOnCreateDialog_restrictTwoAppsTip_fireRestrictTwoAppsDialog() {
|
public void testOnCreateDialog_restrictTwoAppsTip_fireRestrictTwoAppsDialog() {
|
||||||
Robolectric.getForegroundThreadScheduler().pause();
|
Robolectric.getForegroundThreadScheduler().pause();
|
||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY);
|
||||||
|
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -161,7 +163,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
||||||
appInfos);
|
appInfos);
|
||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -178,7 +180,8 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnCreateDialog_unRestrictAppTip_fireUnRestrictDialog() {
|
public void testOnCreateDialog_unRestrictAppTip_fireUnRestrictDialog() {
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY);
|
||||||
|
ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -193,7 +196,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testOnCreateDialog_summaryTipWithEstimation_fireDialogWithEstimation() {
|
public void testOnCreateDialog_summaryTipWithEstimation_fireDialogWithEstimation() {
|
||||||
doReturn(AVERAGE_TIME_MS).when(mSummaryTip).getAverageTimeMs();
|
doReturn(AVERAGE_TIME_MS).when(mSummaryTip).getAverageTimeMs();
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
@@ -207,7 +210,7 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnCreateDialog_summaryTipWithoutEstimation_fireDialogWithoutEstimation() {
|
public void testOnCreateDialog_summaryTipWithoutEstimation_fireDialogWithoutEstimation() {
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentTestUtil.startFragment(mDialogFragment);
|
FragmentTestUtil.startFragment(mDialogFragment);
|
||||||
|
|
||||||
|
@@ -37,6 +37,7 @@ import android.text.format.DateUtils;
|
|||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
@@ -70,6 +71,8 @@ public class BatteryTipPreferenceControllerTest {
|
|||||||
private SettingsActivity mSettingsActivity;
|
private SettingsActivity mSettingsActivity;
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private PreferenceManager mPreferenceManager;
|
private PreferenceManager mPreferenceManager;
|
||||||
|
@Mock
|
||||||
|
private InstrumentedPreferenceFragment mFragment;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PreferenceGroup mPreferenceGroup;
|
private PreferenceGroup mPreferenceGroup;
|
||||||
@@ -98,7 +101,7 @@ public class BatteryTipPreferenceControllerTest {
|
|||||||
mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE, AVERAGE_TIME_MS));
|
mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE, AVERAGE_TIME_MS));
|
||||||
|
|
||||||
mBatteryTipPreferenceController = new BatteryTipPreferenceController(mContext, KEY_PREF,
|
mBatteryTipPreferenceController = new BatteryTipPreferenceController(mContext, KEY_PREF,
|
||||||
mSettingsActivity, null, mBatteryTipListener);
|
mSettingsActivity, mFragment, mBatteryTipListener);
|
||||||
mBatteryTipPreferenceController.mPreferenceGroup = mPreferenceGroup;
|
mBatteryTipPreferenceController.mPreferenceGroup = mPreferenceGroup;
|
||||||
mBatteryTipPreferenceController.mPrefContext = mContext;
|
mBatteryTipPreferenceController.mPrefContext = mContext;
|
||||||
}
|
}
|
||||||
|
@@ -20,12 +20,16 @@ import static org.mockito.Matchers.eq;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
||||||
import com.android.settings.testutils.DatabaseTestUtils;
|
import com.android.settings.testutils.DatabaseTestUtils;
|
||||||
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
@@ -44,21 +48,32 @@ public class RestrictAppActionTest {
|
|||||||
|
|
||||||
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
||||||
private static final String PACKAGE_NAME_2 = "com.android.app2";
|
private static final String PACKAGE_NAME_2 = "com.android.app2";
|
||||||
|
private static final int ANOMALY_WAKEUP = 0;
|
||||||
|
private static final int ANOMALY_BT = 1;
|
||||||
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private BatteryUtils mBatteryUtils;
|
private BatteryUtils mBatteryUtils;
|
||||||
private RestrictAppAction mRestrictAppAction;
|
private RestrictAppAction mRestrictAppAction;
|
||||||
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
final List<AppInfo> mAppInfos = new ArrayList<>();
|
final List<AppInfo> mAppInfos = new ArrayList<>();
|
||||||
mAppInfos.add(new AppInfo.Builder().setPackageName(PACKAGE_NAME_1).build());
|
mAppInfos.add(new AppInfo.Builder()
|
||||||
mAppInfos.add(new AppInfo.Builder().setPackageName(PACKAGE_NAME_2).build());
|
.setPackageName(PACKAGE_NAME_1)
|
||||||
|
.build());
|
||||||
|
mAppInfos.add(new AppInfo.Builder()
|
||||||
|
.setPackageName(PACKAGE_NAME_2)
|
||||||
|
.addAnomalyType(ANOMALY_BT)
|
||||||
|
.addAnomalyType(ANOMALY_WAKEUP)
|
||||||
|
.build());
|
||||||
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
|
|
||||||
mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application,
|
mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application,
|
||||||
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
|
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
|
||||||
mRestrictAppAction.mBatteryUtils = mBatteryUtils;
|
mRestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,11 +84,22 @@ public class RestrictAppActionTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHandlePositiveAction() {
|
public void testHandlePositiveAction() {
|
||||||
mRestrictAppAction.handlePositiveAction();
|
mRestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||||
|
|
||||||
verify(mBatteryUtils)
|
verify(mBatteryUtils)
|
||||||
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_1), eq(AppOpsManager.MODE_IGNORED));
|
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_1), eq(AppOpsManager.MODE_IGNORED));
|
||||||
verify(mBatteryUtils)
|
verify(mBatteryUtils)
|
||||||
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_2), eq(AppOpsManager.MODE_IGNORED));
|
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_2), eq(AppOpsManager.MODE_IGNORED));
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_1, Pair.create(
|
||||||
|
MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY));
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_2,
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY),
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, ANOMALY_WAKEUP));
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_2,
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY),
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, ANOMALY_BT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 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.settings.fuelgauge.batterytip.actions;
|
||||||
|
|
||||||
|
import static org.mockito.Matchers.anyInt;
|
||||||
|
import static org.mockito.Matchers.eq;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import android.app.AppOpsManager;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
||||||
|
import com.android.settings.testutils.DatabaseTestUtils;
|
||||||
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
|
public class UnrestrictAppActionTest {
|
||||||
|
|
||||||
|
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
||||||
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private BatteryUtils mBatteryUtils;
|
||||||
|
private UnrestrictAppAction mUnrestrictAppAction;
|
||||||
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
|
final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_1).build();
|
||||||
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
|
|
||||||
|
mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application,
|
||||||
|
new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo));
|
||||||
|
mUnrestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanUp() {
|
||||||
|
DatabaseTestUtils.clearDb(RuntimeEnvironment.application);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandlePositiveAction() {
|
||||||
|
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||||
|
|
||||||
|
verify(mBatteryUtils)
|
||||||
|
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_1), eq(AppOpsManager.MODE_ALLOWED));
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, PACKAGE_NAME_1, Pair.create(
|
||||||
|
MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY));
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user