Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85486bd3 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am cd09cb8f: am 6fb7fd3a: Merge "Fix issue #7267494, issue #7212347" into jb-mr1-dev

* commit 'cd09cb8f':
  Fix issue #7267494, issue #7212347
parents 11adf0ad cd09cb8f
Loading
Loading
Loading
Loading
+37 −25
Original line number Diff line number Diff line
@@ -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.
@@ -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 "
@@ -4700,7 +4713,6 @@ public final class ActivityThread {
            }
        }
    }
    }

    private ProviderClientRecord installProviderAuthoritiesLocked(IContentProvider provider,
            ContentProvider localProvider, IActivityManager.ContentProviderHolder holder) {
+2 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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) {
        }
    }
+46 −33
Original line number Diff line number Diff line
@@ -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;
@@ -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);
        }
    }

@@ -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;
@@ -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);
@@ -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 {
@@ -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");
            }
        }
    }
+23 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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