Merge "Make smooth transition between Search fragment and the others" into lmp-preview-dev
diff --git a/res/layout/preference_batteryhistory.xml b/res/layout/preference_batteryhistory.xml
index 86856d7..a09c6a8 100644
--- a/res/layout/preference_batteryhistory.xml
+++ b/res/layout/preference_batteryhistory.xml
@@ -19,7 +19,7 @@
         xmlns:app="http://schemas.android.com/apk/res/com.android.settings"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="128dp"
+    android:minHeight="@dimen/battery_history_chart_height"
     android:gravity="center_vertical"
     android:id="@+android:id/battery_history_chart"
     android:paddingEnd="?android:attr/scrollbarSize"
diff --git a/res/values-h480dp/dimens.xml b/res/values-h480dp/dimens.xml
new file mode 100644
index 0000000..6610b4f
--- /dev/null
+++ b/res/values-h480dp/dimens.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+    <dimen name="battery_history_chart_height">160dp</dimen>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 93d9833..460fb44 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -29,6 +29,8 @@
     <dimen name="bind_app_widget_dialog_checkbox_bottom_padding">16dip</dimen>
     <dimen name="installed_app_details_bullet_offset">8dip</dimen>
 
+    <dimen name="battery_history_chart_height">120dp</dimen>
+
     <dimen name="data_usage_chart_height">252dip</dimen>
     <dimen name="data_usage_chart_optimalWidth">440dip</dimen>
 
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index f718b42..47e887a 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -661,6 +661,13 @@
             return;
         }
 
+        if (mLastWidth == 0 || mLastHeight == 0) {
+            return;
+        }
+
+        mLastWidth = w;
+        mLastHeight = h;
+
         int textHeight = mTextDescent - mTextAscent;
         int headerTextHeight = mHeaderTextDescent - mHeaderTextAscent;
         if (h > (textHeight*12)) {
@@ -736,11 +743,18 @@
         mCpuRunningPath.reset();
         mChargingPath.reset();
 
+        mTimeLabels.clear();
+        mDateLabels.clear();
+
         final long walltimeStart = mStartWallTime;
         final long walltimeChange = mEndWallTime-walltimeStart;
         long curWalltime = 0;
         long lastRealtime = 0;
 
+        if (walltimeChange == 0) {
+            return;
+        }
+
         final int batLow = mBatLow;
         final int batChange = mBatHigh-mBatLow;
 
@@ -924,7 +938,6 @@
         }
 
         // Create the time labels at the bottom.
-        mTimeLabels.clear();
         boolean is24hr = is24Hour();
         Calendar calStart = Calendar.getInstance();
         calStart.setTimeInMillis(mStartWallTime);
@@ -957,7 +970,6 @@
         }
 
         // Create the date labels if the chart includes multiple days
-        mDateLabels.clear();
         if (calStart.get(Calendar.DAY_OF_YEAR) != calEnd.get(Calendar.DAY_OF_YEAR) ||
                 calStart.get(Calendar.YEAR) != calEnd.get(Calendar.YEAR)) {
             boolean isDayFirst = isDayFirst();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index e6c2c96..e00e20b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -82,8 +82,9 @@
             String action = intent.getAction();
             if (Intent.ACTION_BATTERY_CHANGED.equals(action)
                     && updateBatteryStatus(intent)) {
-                mStatsHelper.clearStats();
-                refreshStats();
+                if (!mHandler.hasMessages(MSG_REFRESH_STATS)) {
+                    mHandler.sendEmptyMessageDelayed(MSG_REFRESH_STATS, 500);
+                }
             }
         }
     };
@@ -110,6 +111,10 @@
         super.onResume();
         updateBatteryStatus(getActivity().registerReceiver(mBatteryInfoReceiver,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
+        if (mHandler.hasMessages(MSG_REFRESH_STATS)) {
+            mHandler.removeMessages(MSG_REFRESH_STATS);
+            mStatsHelper.clearStats();
+        }
         refreshStats();
     }
 
@@ -122,6 +127,12 @@
     }
 
     @Override
+    public void onStop() {
+        super.onStop();
+        mHandler.removeMessages(MSG_REFRESH_STATS);
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         if (getActivity().isChangingConfigurations()) {
@@ -189,6 +200,7 @@
             case MENU_STATS_REFRESH:
                 mStatsHelper.clearStats();
                 refreshStats();
+                mHandler.removeMessages(MSG_REFRESH_STATS);
                 return true;
             default:
                 return false;
@@ -258,6 +270,8 @@
         BatteryEntry.startRequestQueue();
     }
 
+    static final int MSG_REFRESH_STATS = 100;
+
     Handler mHandler = new Handler() {
 
         @Override
@@ -279,6 +293,9 @@
                         activity.reportFullyDrawn();
                     }
                     break;
+                case MSG_REFRESH_STATS:
+                    mStatsHelper.clearStats();
+                    refreshStats();
             }
             super.handleMessage(msg);
         }