Merge "Introduce half-brightness icon in Power Control widget."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4bbb54a..15bb878 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -731,7 +731,8 @@
             android:windowSoftInputMode="stateVisible|adjustResize"/>
 
         <activity android:name="ChooseLockGeneric"
-            android:label="@string/lockpassword_choose_lock_generic_header">
+            android:label="@string/lockpassword_choose_lock_generic_header"
+            android:excludeFromRecents="true" >
             <intent-filter>
                 <action android:name="android.app.action.SET_NEW_PASSWORD" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/layout/device_admin_add.xml b/res/layout/device_admin_add.xml
index b1ad72c..d6a0dcb 100644
--- a/res/layout/device_admin_add.xml
+++ b/res/layout/device_admin_add.xml
@@ -25,8 +25,9 @@
         android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1.0"
-        android:layout_marginLeft="16dip"
-        android:layout_marginRight="16dip"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:scrollbarStyle="outsideOverlay"
         android:gravity="top">
         <LinearLayout
             android:layout_width="match_parent"
@@ -36,12 +37,12 @@
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="horizontal">
+                android:orientation="horizontal"
+                android:layout_marginTop="16dip">
                 <ImageView android:id="@+id/admin_icon"
                     android:layout_width="@android:dimen/app_icon_size"
                     android:layout_height="@android:dimen/app_icon_size"
-                    android:layout_marginLeft="5dip"
-                    android:layout_marginRight="11dip"
+                    android:layout_marginRight="16dip"
                     android:layout_gravity="center_vertical"
                     android:scaleType="fitCenter"/>
                 <TextView android:id="@+id/admin_name"
@@ -101,18 +102,14 @@
     <LinearLayout android:id="@+id/buttonPanel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:minHeight="54dip"
         android:orientation="vertical"
         android:divider="?android:attr/dividerHorizontal"
-        android:showDividers="beginning"
-        android:dividerPadding="16dip">
+        android:showDividers="beginning">
         <LinearLayout
             style="?android:attr/buttonBarStyle"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:paddingLeft="2dip"
-            android:paddingRight="2dip"
             android:measureWithLargestChild="true">
             <LinearLayout android:id="@+id/leftSpacer"
                 android:layout_weight="0.25"
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 9301a86..ea15f9e 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -22,7 +22,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.SystemProperties;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
@@ -231,8 +230,8 @@
             final PreferenceScreen entries = getPreferenceScreen();
             final boolean onlyShowFallback = getActivity().getIntent()
                     .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false);
-            final boolean weakBiometricAvailable = isBiometricSensorAvailable(
-                    DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK);
+            final boolean weakBiometricAvailable =
+                    mChooseLockSettingsHelper.utils().isBiometricWeakInstalled();
             for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) {
                 Preference pref = entries.getPreference(i);
                 if (pref instanceof PreferenceScreen) {
@@ -275,10 +274,6 @@
                     KEY_UNLOCK_SET_PATTERN.equals(key) || KEY_UNLOCK_SET_PIN.equals(key);
         }
 
-        private boolean isBiometricSensorAvailable(int quality) {
-            return SystemProperties.getBoolean("ro.lockscreen.facelock_enabled", false);
-        }
-
         private Intent getBiometricSensorIntent(int quality) {
             Intent fallBackIntent = new Intent().setClass(getActivity(), ChooseLockGeneric.class);
             fallBackIntent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, true);
@@ -330,8 +325,7 @@
                 if(isFallback) {
                     startActivityForResult(intent, FALLBACK_REQUEST);
                     return;
-                }
-                else {
+                } else {
                     intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                     startActivity(intent);
                 }
@@ -348,8 +342,7 @@
                 if(isFallback) {
                     startActivityForResult(intent, FALLBACK_REQUEST);
                     return;
-                }
-                else {
+                } else {
                     intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                     startActivity(intent);
                 }
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 5b8035d..6023389 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -106,7 +106,8 @@
             } else {
                 resid = R.xml.security_settings_chooser;
             }
-        } else if (mLockPatternUtils.usingBiometricWeak()) {
+        } else if (mLockPatternUtils.usingBiometricWeak() &&
+                mLockPatternUtils.isBiometricWeakInstalled()) {
             resid = R.xml.security_settings_biometric_weak;
         } else {
             switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 6ff3e0e..41286ef 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -414,6 +414,8 @@
         }
         final double averageCostPerByte = getAverageDataCost();
         long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which);
+        long appWakelockTime = 0;
+        BatterySipper osApp = null;
         mStatsPeriod = uSecTime;
         SparseArray<? extends Uid> uidStats = mStats.getUidStats();
         final int NU = uidStats.size();
@@ -488,6 +490,7 @@
                 }
             }
             wakelockTime /= 1000; // convert to millis
+            appWakelockTime += wakelockTime;
 
             // Add cost of holding a wake lock
             power += (wakelockTime
@@ -535,7 +538,7 @@
             if (DEBUG) Log.i(TAG, "UID " + u.getUid() + ": power=" + power);
 
             // Add the app to the list if it is consuming power
-            if (power != 0) {
+            if (power != 0 || u.getUid() == 0) {
                 BatterySipper app = new BatterySipper(getActivity(), mRequestQueue, mHandler,
                         packageWithHighestDrain, DrainType.APP, 0, u,
                         new double[] {power});
@@ -553,6 +556,9 @@
                 } else {
                     mUsageList.add(app);
                 }
+                if (u.getUid() == 0) {
+                    osApp = app;
+                }
             }
             if (u.getUid() == Process.WIFI_UID) {
                 mWifiPower += power;
@@ -564,6 +570,25 @@
             }
             if (DEBUG) Log.i(TAG, "Added power = " + power);
         }
+
+        // The device has probably been awake for longer than the screen on
+        // time and application wake lock time would account for.  Assign
+        // this remainder to the OS, if possible.
+        if (osApp != null) {
+            long wakeTimeMillis = mStats.computeBatteryUptime(
+                    SystemClock.uptimeMillis() * 1000, which) / 1000;
+            wakeTimeMillis -= appWakelockTime - (mStats.getScreenOnTime(
+                    SystemClock.elapsedRealtime(), which) / 1000);
+            if (wakeTimeMillis > 0) {
+                double power = (wakeTimeMillis
+                        * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000;
+                osApp.wakeLockTime += wakeTimeMillis;
+                osApp.value += power;
+                osApp.values[0] += power;
+                if (osApp.value > mMaxPower) mMaxPower = osApp.value;
+                mTotalPower += power;
+            }
+        }
     }
 
     private void addPhoneUsage(long uSecNow) {