Move some battery stuff to SettingsLib

So that it can be used in the battery detail panel

Change-Id: I31eac974d29838726450940109b52d458f29c192
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e7a7711..1c0460f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -164,23 +164,6 @@
     <!-- Title for a notification shown. -->
     <string name="sdcard_setting" product="default">SD card</string>
 
-    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="battery_info_status_unknown">Unknown</string>
-    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging from an unknown source.  -->
-    <string name="battery_info_status_charging">Charging</string>
-    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging on AC.  -->
-    <string name="battery_info_status_charging_ac">Charging on AC</string>
-    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging over USB.  -->
-    <string name="battery_info_status_charging_usb">Charging over USB</string>
-    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging over a wireless connection.  -->
-    <string name="battery_info_status_charging_wireless">Charging wirelessly</string>
-    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="battery_info_status_discharging">Not charging</string>
-    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="battery_info_status_not_charging">Not charging</string>
-    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="battery_info_status_full">Full</string>
-
     <!-- Used as setting title (for checkbox) on second screen after selecting Bluetooth settings -->
     <string name="bluetooth">Bluetooth</string>
     <!-- Bluetooth settings screen, summary after selecting Discoverable check box [CHAR LIMIT=50] -->
@@ -3934,24 +3917,7 @@
     <string name="power_discharge_remaining"><xliff:g id="remain">%1$s</xliff:g> remaining</string>
     <!-- Display time remaining until battery is charged [CHAR_LIMIT=60] -->
     <string name="power_charge_remaining"><xliff:g id="until_charged">%1$s</xliff:g> to charge</string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when discharging with duration -->
-    <string name="power_discharging_duration"><xliff:g id="level">%1$s</xliff:g>
-            - approx. <xliff:g id="time">%2$s</xliff:g> left</string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when charging -->
-    <string name="power_charging"><xliff:g id="level">%1$s</xliff:g> -
-            <xliff:g id="state">%2$s</xliff:g></string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when charging with duration -->
-    <string name="power_charging_duration"><xliff:g id="level">%1$s</xliff:g> -
-            <xliff:g id="time">%2$s</xliff:g> until full</string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when charging with duration -->
-    <string name="power_charging_duration_ac"><xliff:g id="level">%1$s</xliff:g> -
-            <xliff:g id="time">%2$s</xliff:g> until full on AC</string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when charging with duration -->
-    <string name="power_charging_duration_usb"><xliff:g id="level">%1$s</xliff:g> -
-            <xliff:g id="time">%2$s</xliff:g> until full over USB</string>
-    <!-- [CHAR_LIMIT=40] Label for battery level chart when charging with duration -->
-    <string name="power_charging_duration_wireless"><xliff:g id="level">%1$s</xliff:g> -
-            <xliff:g id="time">%2$s</xliff:g> until full from wireless</string>
+
     <!-- [CHAR_LIMIT=40] Label for list of apps using battery in power use UI -->
     <string name="power_usage_list_summary">Use since last full charge</string>
     <!-- Battery usage since unplugged -->
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index ddea92b..468baa9 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -88,7 +88,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.InetAddress;
-import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -96,7 +95,8 @@
 
 import static android.content.Intent.EXTRA_USER;
 
-public final class Utils {
+public final class Utils extends com.android.settingslib.Utils {
+
     private static final String TAG = "Settings";
 
     /**
@@ -262,21 +262,6 @@
         }
     }
 
-    /** Formats the ratio of amount/total as a percentage. */
-    public static String formatPercentage(long amount, long total) {
-        return formatPercentage(((double) amount) / total);
-    }
-
-    /** Formats an integer from 0..100 as a percentage. */
-    public static String formatPercentage(int percentage) {
-        return formatPercentage(((double) percentage) / 100.0);
-    }
-
-    /** Formats a double from 0.0..1.0 as a percentage. */
-    private static String formatPercentage(double percentage) {
-      return NumberFormat.getPercentInstance().format(percentage);
-    }
-
     public static boolean isBatteryPresent(Intent batteryChangedIntent) {
         return batteryChangedIntent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
     }
@@ -285,44 +270,6 @@
         return formatPercentage(getBatteryLevel(batteryChangedIntent));
     }
 
-    public static int getBatteryLevel(Intent batteryChangedIntent) {
-        int level = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
-        int scale = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
-        return (level * 100) / scale;
-    }
-
-    public static String getBatteryStatus(Resources res, Intent batteryChangedIntent) {
-        final Intent intent = batteryChangedIntent;
-
-        int plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
-        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
-                BatteryManager.BATTERY_STATUS_UNKNOWN);
-        String statusString;
-        if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
-            int resId;
-            if (plugType == BatteryManager.BATTERY_PLUGGED_AC) {
-                resId = R.string.battery_info_status_charging_ac;
-            } else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) {
-                resId = R.string.battery_info_status_charging_usb;
-            } else if (plugType == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
-                resId = R.string.battery_info_status_charging_wireless;
-            } else {
-                resId = R.string.battery_info_status_charging;
-            }
-            statusString = res.getString(resId);
-        } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
-            statusString = res.getString(R.string.battery_info_status_discharging);
-        } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
-            statusString = res.getString(R.string.battery_info_status_not_charging);
-        } else if (status == BatteryManager.BATTERY_STATUS_FULL) {
-            statusString = res.getString(R.string.battery_info_status_full);
-        } else {
-            statusString = res.getString(R.string.battery_info_status_unknown);
-        }
-
-        return statusString;
-    }
-
     public static void forcePrepareCustomPreferencesList(
             ViewGroup parent, View child, ListView list, boolean ignoreSidePadding) {
         list.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index 6c4d457..7b89fb1 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -26,7 +26,6 @@
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Typeface;
-import android.os.BatteryManager;
 import android.os.BatteryStats;
 import android.os.BatteryStats.HistoryItem;
 import android.os.SystemClock;
@@ -39,10 +38,9 @@
 import android.util.TimeUtils;
 import android.util.TypedValue;
 import android.view.View;
-
 import com.android.settings.R;
 import com.android.settings.Utils;
-
+import com.android.settingslib.BatteryInfo;
 import libcore.icu.LocaleData;
 
 import java.util.ArrayList;
@@ -509,7 +507,8 @@
 
         mMaxPercentLabelString = Utils.formatPercentage(100);
         mMinPercentLabelString = Utils.formatPercentage(0);
-        mInfo = getBatteryInfo(getContext(), mBatteryBroadcast, mStats, elapsedRealtimeUs);
+        mInfo = BatteryInfo.getBatteryInfo(getContext(), mBatteryBroadcast, mStats,
+                elapsedRealtimeUs);
         mDrainString = "";
         mChargeDurationString = "";
         setContentDescription(mInfo.mChargeLabelString);
@@ -1359,59 +1358,4 @@
             }
         }
     }
-
-    public static class BatteryInfo {
-        public String mChargeLabelString;
-        public int mBatteryLevel;
-        public boolean mDischarging = true;
-        public long remainingTimeUs = 0;
-    }
-
-    public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast,
-                                             BatteryStats stats, long elapsedRealtimeUs) {
-        BatteryInfo info = new BatteryInfo();
-        info.mBatteryLevel = com.android.settings.Utils.getBatteryLevel(batteryBroadcast);
-        String batteryPercentString = Utils.formatPercentage(info.mBatteryLevel);
-        if (batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) == 0) {
-            final long drainTime = stats.computeBatteryTimeRemaining(elapsedRealtimeUs);
-            if (drainTime > 0) {
-                info.remainingTimeUs = drainTime;
-                String timeString = Formatter.formatShortElapsedTime(context,
-                        drainTime / 1000);
-                info.mChargeLabelString = context.getResources().getString(
-                        R.string.power_discharging_duration, batteryPercentString, timeString);
-            } else {
-                info.mChargeLabelString = batteryPercentString;
-            }
-        } else {
-            final long chargeTime = stats.computeChargeTimeRemaining(elapsedRealtimeUs);
-            final String statusLabel = com.android.settings.Utils.getBatteryStatus(
-                    context.getResources(), batteryBroadcast);
-            final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
-                    BatteryManager.BATTERY_STATUS_UNKNOWN);
-            if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
-                info.mDischarging = false;
-                info.remainingTimeUs = chargeTime;
-                String timeString = Formatter.formatShortElapsedTime(context,
-                        chargeTime / 1000);
-                int plugType = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
-                int resId;
-                if (plugType == BatteryManager.BATTERY_PLUGGED_AC) {
-                    resId = R.string.power_charging_duration_ac;
-                } else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) {
-                    resId = R.string.power_charging_duration_usb;
-                } else if (plugType == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
-                    resId = R.string.power_charging_duration_wireless;
-                } else {
-                    resId = R.string.power_charging_duration;
-                }
-                info.mChargeLabelString = context.getResources().getString(
-                        resId, batteryPercentString, timeString);
-            } else {
-                info.mChargeLabelString = context.getResources().getString(
-                        R.string.power_charging, batteryPercentString, statusLabel);
-            }
-        }
-        return info;
-    }
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 25c0fc2..153ccd7 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -18,17 +18,13 @@
 
 import android.app.Activity;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
 import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
 import android.os.BatteryStats;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.os.Process;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
@@ -40,13 +36,13 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
-import com.android.internal.os.BatteryStatsHelper;
 import com.android.internal.os.PowerProfile;
 import com.android.settings.R;
 import com.android.settings.Settings.HighPowerApplicationsActivity;
 import com.android.settings.SettingsActivity;
 import com.android.settings.applications.ManageApplications;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settingslib.BatteryInfo;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -451,25 +447,12 @@
         public void setListening(boolean listening) {
             if (listening) {
                 // TODO: Listen.
-                new AsyncTask<Void, Void, BatteryStats>() {
+                BatteryInfo.getBatteryInfo(mContext, new BatteryInfo.Callback() {
                     @Override
-                    protected BatteryStats doInBackground(Void... params) {
-                        BatteryStatsHelper statsHelper = new BatteryStatsHelper(mContext, true);
-                        statsHelper.create((Bundle) null);
-                        return statsHelper.getStats();
+                    public void onBatteryInfoLoaded(BatteryInfo info) {
+                        mLoader.setSummary(SummaryProvider.this, info.mChargeLabelString);
                     }
-
-                    @Override
-                    protected void onPostExecute(BatteryStats batteryStats) {
-                        final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
-                        Intent batteryBroadcast = mContext.registerReceiver(null,
-                                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-                        BatteryHistoryChart.BatteryInfo batteryInfo = BatteryHistoryChart
-                                .getBatteryInfo(mContext, batteryBroadcast, batteryStats,
-                                        elapsedRealtimeUs);
-                        mLoader.setSummary(SummaryProvider.this, batteryInfo.mChargeLabelString);
-                    }
-                }.execute();
+                });
             }
         }
     }