1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.fuelgauge.batterytip.tips;
18 
19 import android.app.settings.SettingsEnums;
20 import android.content.Context;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 
24 import androidx.annotation.VisibleForTesting;
25 
26 import com.android.settings.R;
27 import com.android.settings.fuelgauge.batterytip.AppInfo;
28 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
29 
30 import java.util.List;
31 
32 /**
33  * Tip to show general summary about battery life
34  */
35 public class HighUsageTip extends BatteryTip {
36 
37     private final long mLastFullChargeTimeMs;
38     @VisibleForTesting
39     final List<AppInfo> mHighUsageAppList;
40 
HighUsageTip(long lastFullChargeTimeMs, List<AppInfo> appList)41     public HighUsageTip(long lastFullChargeTimeMs, List<AppInfo> appList) {
42         super(TipType.HIGH_DEVICE_USAGE, appList.isEmpty() ? StateType.INVISIBLE : StateType.NEW,
43                 true /* showDialog */);
44         mLastFullChargeTimeMs = lastFullChargeTimeMs;
45         mHighUsageAppList = appList;
46     }
47 
48     @VisibleForTesting
HighUsageTip(Parcel in)49     HighUsageTip(Parcel in) {
50         super(in);
51         mLastFullChargeTimeMs = in.readLong();
52         mHighUsageAppList = in.createTypedArrayList(AppInfo.CREATOR);
53     }
54 
55     @Override
writeToParcel(Parcel dest, int flags)56     public void writeToParcel(Parcel dest, int flags) {
57         super.writeToParcel(dest, flags);
58         dest.writeLong(mLastFullChargeTimeMs);
59         dest.writeTypedList(mHighUsageAppList);
60     }
61 
62     @Override
getTitle(Context context)63     public CharSequence getTitle(Context context) {
64         return context.getString(R.string.battery_tip_high_usage_title);
65     }
66 
67     @Override
getSummary(Context context)68     public CharSequence getSummary(Context context) {
69         return context.getString(R.string.battery_tip_high_usage_summary);
70     }
71 
72     @Override
getIconId()73     public int getIconId() {
74         return R.drawable.ic_perm_device_information_red_24dp;
75     }
76 
77     @Override
updateState(BatteryTip tip)78     public void updateState(BatteryTip tip) {
79         mState = tip.mState;
80     }
81 
82     @Override
log(Context context, MetricsFeatureProvider metricsFeatureProvider)83     public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) {
84         metricsFeatureProvider.action(context, SettingsEnums.ACTION_HIGH_USAGE_TIP,
85                 mState);
86         for (int i = 0, size = mHighUsageAppList.size(); i < size; i++) {
87             final AppInfo appInfo = mHighUsageAppList.get(i);
88             metricsFeatureProvider.action(context,
89                     SettingsEnums.ACTION_HIGH_USAGE_TIP_LIST,
90                     appInfo.packageName);
91         }
92     }
93 
getLastFullChargeTimeMs()94     public long getLastFullChargeTimeMs() {
95         return mLastFullChargeTimeMs;
96     }
97 
getHighUsageAppList()98     public List<AppInfo> getHighUsageAppList() {
99         return mHighUsageAppList;
100     }
101 
102     @Override
toString()103     public String toString() {
104         final StringBuilder stringBuilder = new StringBuilder(super.toString());
105         stringBuilder.append(" {");
106         for (int i = 0, size = mHighUsageAppList.size(); i < size; i++) {
107             final AppInfo appInfo = mHighUsageAppList.get(i);
108             stringBuilder.append(" " + appInfo.toString() + " ");
109         }
110         stringBuilder.append('}');
111 
112         return stringBuilder.toString();
113     }
114 
115     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
116         public BatteryTip createFromParcel(Parcel in) {
117             return new HighUsageTip(in);
118         }
119 
120         public BatteryTip[] newArray(int size) {
121             return new HighUsageTip[size];
122         }
123     };
124 
125 }
126