OSDN Git Service

BatteryService: update battery status periodically
[android-x86/frameworks-base.git] / services / java / com / android / server / BatteryService.java
index 57944fb..2257578 100644 (file)
@@ -35,6 +35,7 @@ import android.os.UEventObserver;
 import android.provider.Settings;
 import android.util.EventLog;
 import android.util.Slog;
+import android.os.Handler;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -42,6 +43,8 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Timer;
+import java.util.TimerTask;
 
 
 /**
@@ -119,6 +122,8 @@ class BatteryService extends Binder {
 
     private boolean mSentLowBatteryBroadcast = false;
 
+    private final Handler mHandler = new Handler();
+
     public BatteryService(Context context) {
         mContext = context;
         mBatteryStats = BatteryStatsService.getService();
@@ -132,6 +137,25 @@ class BatteryService extends Binder {
 
         // set initial status
         update();
+
+        // start auto refresh
+        autoRefresh();
+    }
+
+    private Runnable mUpdateResults = new Runnable() {
+        public void run() {
+            update();
+        }
+    };
+
+    private final void autoRefresh() {
+        // Schedule every minute
+        new Timer().scheduleAtFixedRate(new TimerTask() {
+            @Override // Override!!
+            public void run() {
+                mHandler.post(mUpdateResults);
+            }
+        }, 60000, 60000);
     }
 
     final boolean isPowered() {
@@ -177,6 +201,7 @@ class BatteryService extends Binder {
     void systemReady() {
         // check our power situation now that it is safe to display the shutdown dialog.
         shutdownIfNoPower();
+        shutdownIfOverTemp();
     }
 
     private final void shutdownIfNoPower() {
@@ -190,6 +215,17 @@ class BatteryService extends Binder {
         }
     }
 
+    private final void shutdownIfOverTemp() {
+        // shut down gracefully if temperature is too high (> 68.0C)
+        // wait until the system has booted before attempting to display the shutdown dialog.
+        if (mBatteryTemperature > 680 && ActivityManagerNative.isSystemReady()) {
+            Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
+            intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            mContext.startActivity(intent);
+        }
+    }
+
     private native void native_update();
 
     private synchronized final void update() {
@@ -199,6 +235,7 @@ class BatteryService extends Binder {
         long dischargeDuration = 0;
 
         shutdownIfNoPower();
+        shutdownIfOverTemp();
 
         mBatteryLevelCritical = mBatteryLevel <= CRITICAL_BATTERY_LEVEL;
         if (mAcOnline) {
@@ -436,7 +473,9 @@ class BatteryService extends Binder {
                 mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL) {
             return com.android.internal.R.drawable.stat_sys_battery;
         } else {
-            return com.android.internal.R.drawable.stat_sys_battery_unknown;
+            return mBatteryPresent ?
+                com.android.internal.R.drawable.stat_sys_battery_unknown :
+                com.android.internal.R.drawable.gpm_ac_adapter;
         }
     }