/* * 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.tips; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.res.ColorStateList; import android.os.Parcel; import com.android.settings.R; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Tip to show early warning if battery couldn't make to usual charging time */ public class EarlyWarningTip extends BatteryTip { private boolean mPowerSaveModeOn; public EarlyWarningTip(@StateType int state, boolean powerSaveModeOn) { super(TipType.BATTERY_SAVER, state, false /* showDialog */); mPowerSaveModeOn = powerSaveModeOn; } public EarlyWarningTip(Parcel in) { super(in); mPowerSaveModeOn = in.readBoolean(); } @Override public CharSequence getTitle(Context context) { return context.getString( mState == StateType.HANDLED ? R.string.battery_tip_early_heads_up_done_title : R.string.battery_tip_early_heads_up_title); } @Override public CharSequence getSummary(Context context) { return context.getString( mState == StateType.HANDLED ? R.string.battery_tip_early_heads_up_done_summary : R.string.battery_tip_early_heads_up_summary); } @Override public int getIconId() { return mState == StateType.HANDLED ? R.drawable.ic_battery_status_maybe_24dp : R.drawable.ic_battery_status_bad_24dp; } @Override public int getIconTintColorId() { return mState == StateType.HANDLED ? R.color.battery_maybe_color_light : R.color.battery_bad_color_light; } @Override public void updateState(BatteryTip tip) { final EarlyWarningTip earlyWarningTip = (EarlyWarningTip) tip; if (earlyWarningTip.mState == StateType.NEW) { // Display it if there is early warning mState = StateType.NEW; } else if (mState == StateType.NEW && earlyWarningTip.mState == StateType.INVISIBLE) { // If powerSaveMode is really on, show it as handled, otherwise just dismiss it. mState = earlyWarningTip.mPowerSaveModeOn ? StateType.HANDLED : StateType.INVISIBLE; } else { mState = earlyWarningTip.getState(); } mPowerSaveModeOn = earlyWarningTip.mPowerSaveModeOn; } @Override public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { metricsFeatureProvider.action(context, SettingsEnums.ACTION_EARLY_WARNING_TIP, mState); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeBoolean(mPowerSaveModeOn); } public boolean isPowerSaveModeOn() { return mPowerSaveModeOn; } public static final Creator CREATOR = new Creator() { public BatteryTip createFromParcel(Parcel in) { return new EarlyWarningTip(in); } public BatteryTip[] newArray(int size) { return new EarlyWarningTip[size]; } }; }