Loading core/java/android/app/ActivityThread.java +37 −25 Original line number Diff line number Diff line Loading @@ -4530,6 +4530,14 @@ public final class ActivityThread { IContentProvider provider = pr.mProvider; IBinder jBinder = provider.asBinder(); if (!jBinder.isBinderAlive()) { // The hosting process of the provider has died; we can't // use this one. Log.i(TAG, "Acquiring provider " + auth + " for user " + userId + ": existing object's process dead"); handleUnstableProviderDiedLocked(jBinder, true); return null; } // Only increment the ref count if we have one. If we don't then the // provider is not reference counted and never needs to be released. Loading Loading @@ -4671,6 +4679,11 @@ public final class ActivityThread { final void handleUnstableProviderDied(IBinder provider, boolean fromClient) { synchronized (mProviderMap) { handleUnstableProviderDiedLocked(provider, fromClient); } } final void handleUnstableProviderDiedLocked(IBinder provider, boolean fromClient) { ProviderRefCount prc = mProviderRefCountMap.get(provider); if (prc != null) { if (DEBUG_PROVIDER) Slog.v(TAG, "Cleaning up dead provider " Loading Loading @@ -4700,7 +4713,6 @@ public final class ActivityThread { } } } } private ProviderClientRecord installProviderAuthoritiesLocked(IContentProvider provider, ContentProvider localProvider, IActivityManager.ContentProviderHolder holder) { Loading core/java/android/os/IPowerManager.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ interface IPowerManager void nap(long time); boolean isScreenOn(); void reboot(String reason); void reboot(boolean confirm, String reason, boolean wait); void shutdown(boolean confirm, boolean wait); void crash(String message); void setStayOnSetting(int val); Loading core/java/android/os/PowerManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -596,7 +596,7 @@ public final class PowerManager { */ public void reboot(String reason) { try { mService.reboot(reason); mService.reboot(false, reason, true); } catch (RemoteException e) { } } Loading services/java/com/android/server/BatteryService.java +46 −33 Original line number Diff line number Diff line Loading @@ -127,6 +127,8 @@ public final class BatteryService extends Binder { private long mDischargeStartTime; private int mDischargeStartLevel; private boolean mUpdatesStopped; private Led mLed; private boolean mSentLowBatteryBroadcast = false; Loading Loading @@ -231,7 +233,7 @@ public final class BatteryService extends Binder { 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); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } } Loading @@ -244,17 +246,19 @@ public final class BatteryService extends Binder { 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); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } } private void updateLocked() { if (!mUpdatesStopped) { // Update the values of mAcOnline, et. all. native_update(); // Process the new values. processValuesLocked(); } } private void processValuesLocked() { boolean logOutlier = false; Loading Loading @@ -543,6 +547,9 @@ public final class BatteryService extends Binder { synchronized (mLock) { if (args == null || args.length == 0 || "-a".equals(args[0])) { pw.println("Current Battery Service state:"); if (mUpdatesStopped) { pw.println(" (UPDATES STOPPED -- use 'reset' to restart)"); } pw.println(" AC powered: " + mAcOnline); pw.println(" USB powered: " + mUsbOnline); pw.println(" Wireless powered: " + mWirelessOnline); Loading @@ -554,9 +561,7 @@ public final class BatteryService extends Binder { pw.println(" voltage:" + mBatteryVoltage); pw.println(" temperature: " + mBatteryTemperature); pw.println(" technology: " + mBatteryTechnology); } else if (false) { // DO NOT SUBMIT WITH THIS TURNED ON if (args.length == 3 && "set".equals(args[0])) { } else if (args.length == 3 && "set".equals(args[0])) { String key = args[1]; String value = args[2]; try { Loading @@ -574,15 +579,23 @@ public final class BatteryService extends Binder { } else if ("invalid".equals(key)) { mInvalidCharger = Integer.parseInt(value); } else { pw.println("Unknown set option: " + key); update = false; } if (update) { mUpdatesStopped = true; processValuesLocked(); } } catch (NumberFormatException ex) { pw.println("Bad value: " + value); } } } else if (args.length == 1 && "reset".equals(args[0])) { mUpdatesStopped = false; updateLocked(); } else { pw.println("Dump current battery state, or:"); pw.println(" set ac|usb|wireless|status|level|invalid <value>"); pw.println(" reset"); } } } Loading services/java/com/android/server/ShutdownActivity.java +23 −7 Original line number Diff line number Diff line Loading @@ -17,9 +17,13 @@ package com.android.server; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import com.android.server.power.ShutdownThread; Loading @@ -39,15 +43,27 @@ public class ShutdownActivity extends Activity { mConfirm = intent.getBooleanExtra(Intent.EXTRA_KEY_CONFIRM, false); Slog.i(TAG, "onCreate(): confirm=" + mConfirm); Handler h = new Handler(); h.post(new Runnable() { Thread thr = new Thread("ShutdownActivity") { @Override public void run() { IPowerManager pm = IPowerManager.Stub.asInterface( ServiceManager.getService(Context.POWER_SERVICE)); try { if (mReboot) { ShutdownThread.reboot(ShutdownActivity.this, null, mConfirm); pm.reboot(mConfirm, null, false); } else { ShutdownThread.shutdown(ShutdownActivity.this, mConfirm); pm.shutdown(mConfirm, false); } } catch (RemoteException e) { } } }; thr.start(); finish(); // Wait for us to tell the power manager to shutdown. try { thr.join(); } catch (InterruptedException e) { } }); } } Loading
core/java/android/app/ActivityThread.java +37 −25 Original line number Diff line number Diff line Loading @@ -4530,6 +4530,14 @@ public final class ActivityThread { IContentProvider provider = pr.mProvider; IBinder jBinder = provider.asBinder(); if (!jBinder.isBinderAlive()) { // The hosting process of the provider has died; we can't // use this one. Log.i(TAG, "Acquiring provider " + auth + " for user " + userId + ": existing object's process dead"); handleUnstableProviderDiedLocked(jBinder, true); return null; } // Only increment the ref count if we have one. If we don't then the // provider is not reference counted and never needs to be released. Loading Loading @@ -4671,6 +4679,11 @@ public final class ActivityThread { final void handleUnstableProviderDied(IBinder provider, boolean fromClient) { synchronized (mProviderMap) { handleUnstableProviderDiedLocked(provider, fromClient); } } final void handleUnstableProviderDiedLocked(IBinder provider, boolean fromClient) { ProviderRefCount prc = mProviderRefCountMap.get(provider); if (prc != null) { if (DEBUG_PROVIDER) Slog.v(TAG, "Cleaning up dead provider " Loading Loading @@ -4700,7 +4713,6 @@ public final class ActivityThread { } } } } private ProviderClientRecord installProviderAuthoritiesLocked(IContentProvider provider, ContentProvider localProvider, IActivityManager.ContentProviderHolder holder) { Loading
core/java/android/os/IPowerManager.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ interface IPowerManager void nap(long time); boolean isScreenOn(); void reboot(String reason); void reboot(boolean confirm, String reason, boolean wait); void shutdown(boolean confirm, boolean wait); void crash(String message); void setStayOnSetting(int val); Loading
core/java/android/os/PowerManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -596,7 +596,7 @@ public final class PowerManager { */ public void reboot(String reason) { try { mService.reboot(reason); mService.reboot(false, reason, true); } catch (RemoteException e) { } } Loading
services/java/com/android/server/BatteryService.java +46 −33 Original line number Diff line number Diff line Loading @@ -127,6 +127,8 @@ public final class BatteryService extends Binder { private long mDischargeStartTime; private int mDischargeStartLevel; private boolean mUpdatesStopped; private Led mLed; private boolean mSentLowBatteryBroadcast = false; Loading Loading @@ -231,7 +233,7 @@ public final class BatteryService extends Binder { 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); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } } Loading @@ -244,17 +246,19 @@ public final class BatteryService extends Binder { 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); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } } private void updateLocked() { if (!mUpdatesStopped) { // Update the values of mAcOnline, et. all. native_update(); // Process the new values. processValuesLocked(); } } private void processValuesLocked() { boolean logOutlier = false; Loading Loading @@ -543,6 +547,9 @@ public final class BatteryService extends Binder { synchronized (mLock) { if (args == null || args.length == 0 || "-a".equals(args[0])) { pw.println("Current Battery Service state:"); if (mUpdatesStopped) { pw.println(" (UPDATES STOPPED -- use 'reset' to restart)"); } pw.println(" AC powered: " + mAcOnline); pw.println(" USB powered: " + mUsbOnline); pw.println(" Wireless powered: " + mWirelessOnline); Loading @@ -554,9 +561,7 @@ public final class BatteryService extends Binder { pw.println(" voltage:" + mBatteryVoltage); pw.println(" temperature: " + mBatteryTemperature); pw.println(" technology: " + mBatteryTechnology); } else if (false) { // DO NOT SUBMIT WITH THIS TURNED ON if (args.length == 3 && "set".equals(args[0])) { } else if (args.length == 3 && "set".equals(args[0])) { String key = args[1]; String value = args[2]; try { Loading @@ -574,15 +579,23 @@ public final class BatteryService extends Binder { } else if ("invalid".equals(key)) { mInvalidCharger = Integer.parseInt(value); } else { pw.println("Unknown set option: " + key); update = false; } if (update) { mUpdatesStopped = true; processValuesLocked(); } } catch (NumberFormatException ex) { pw.println("Bad value: " + value); } } } else if (args.length == 1 && "reset".equals(args[0])) { mUpdatesStopped = false; updateLocked(); } else { pw.println("Dump current battery state, or:"); pw.println(" set ac|usb|wireless|status|level|invalid <value>"); pw.println(" reset"); } } } Loading
services/java/com/android/server/ShutdownActivity.java +23 −7 Original line number Diff line number Diff line Loading @@ -17,9 +17,13 @@ package com.android.server; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import com.android.server.power.ShutdownThread; Loading @@ -39,15 +43,27 @@ public class ShutdownActivity extends Activity { mConfirm = intent.getBooleanExtra(Intent.EXTRA_KEY_CONFIRM, false); Slog.i(TAG, "onCreate(): confirm=" + mConfirm); Handler h = new Handler(); h.post(new Runnable() { Thread thr = new Thread("ShutdownActivity") { @Override public void run() { IPowerManager pm = IPowerManager.Stub.asInterface( ServiceManager.getService(Context.POWER_SERVICE)); try { if (mReboot) { ShutdownThread.reboot(ShutdownActivity.this, null, mConfirm); pm.reboot(mConfirm, null, false); } else { ShutdownThread.shutdown(ShutdownActivity.this, mConfirm); pm.shutdown(mConfirm, false); } } catch (RemoteException e) { } } }; thr.start(); finish(); // Wait for us to tell the power manager to shutdown. try { thr.join(); } catch (InterruptedException e) { } }); } }