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

Commit 258d3d5b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix early registration problem" into sc-dev am: 74286249

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13605930

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ifb2d8b272f03353d6c3fbfa2f599b86f129007da
parents b4c19050 74286249
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1424,6 +1424,8 @@ public class LocationManagerService extends ILocationManager.Stub {
            mAppForegroundHelper.onSystemReady();
            mLocationPowerSaveModeHelper.onSystemReady();
            mScreenInteractiveHelper.onSystemReady();
            mDeviceStationaryHelper.onSystemReady();
            mDeviceIdleHelper.onSystemReady();

            if (mEmergencyCallHelper != null) {
                mEmergencyCallHelper.onSystemReady();
+48 −18
Original line number Diff line number Diff line
@@ -21,50 +21,80 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Binder;
import android.os.PowerManager;

import com.android.internal.util.Preconditions;
import com.android.server.FgThread;

import java.util.Objects;

/**
 * Provides accessors and listeners for device stationary state.
 */
public class SystemDeviceIdleHelper extends DeviceIdleHelper {

    private final Context mContext;
    private final PowerManager mPowerManager;

    private PowerManager mPowerManager;

    private boolean mSystemReady;
    private boolean mRegistrationRequired;
    private @Nullable BroadcastReceiver mReceiver;

    public SystemDeviceIdleHelper(Context context) {
        mContext = context;
        mPowerManager = context.getSystemService(PowerManager.class);
    }

    public synchronized void onSystemReady() {
        mSystemReady = true;
        mPowerManager = Objects.requireNonNull(mContext.getSystemService(PowerManager.class));
        onRegistrationStateChanged();
    }

    @Override
    protected void registerInternal() {
        if (mReceiver == null) {
            mReceiver = new BroadcastReceiver() {
    protected synchronized void registerInternal() {
        mRegistrationRequired = true;
        onRegistrationStateChanged();
    }

    @Override
    protected synchronized void unregisterInternal() {
        mRegistrationRequired = false;
        onRegistrationStateChanged();
    }

    private void onRegistrationStateChanged() {
        if (!mSystemReady) {
            return;
        }

        final long identity = Binder.clearCallingIdentity();
        try {
            if (mRegistrationRequired && mReceiver == null) {
                BroadcastReceiver receiver = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        notifyDeviceIdleChanged();
                    }
                };

            mContext.registerReceiver(mReceiver,
                mContext.registerReceiver(receiver,
                        new IntentFilter(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED), null,
                        FgThread.getHandler());
                mReceiver = receiver;
            } else if (!mRegistrationRequired && mReceiver != null) {
                BroadcastReceiver receiver = mReceiver;
                mReceiver = null;
                mContext.unregisterReceiver(receiver);
            }
    }

    @Override
    protected void unregisterInternal() {
        if (mReceiver != null) {
            mContext.unregisterReceiver(mReceiver);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    @Override
    public boolean isDeviceIdle() {
        Preconditions.checkState(mPowerManager != null);
        return mPowerManager.isDeviceIdleMode();
    }
}
+23 −4
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.server.location.injector;

import android.os.Binder;

import com.android.internal.util.Preconditions;
import com.android.server.DeviceIdleInternal;
import com.android.server.LocalServices;

@@ -26,19 +29,35 @@ import java.util.Objects;
 */
public class SystemDeviceStationaryHelper extends DeviceStationaryHelper {

    private final DeviceIdleInternal mDeviceIdle;
    private DeviceIdleInternal mDeviceIdle;

    public SystemDeviceStationaryHelper() {}

    public SystemDeviceStationaryHelper() {
    public void onSystemReady() {
        mDeviceIdle = Objects.requireNonNull(LocalServices.getService(DeviceIdleInternal.class));
    }

    @Override
    public void addListener(DeviceIdleInternal.StationaryListener listener) {
        Preconditions.checkState(mDeviceIdle != null);

        long identity = Binder.clearCallingIdentity();
        try {
            mDeviceIdle.registerStationaryListener(listener);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    @Override
    public void removeListener(DeviceIdleInternal.StationaryListener listener) {
        Preconditions.checkState(mDeviceIdle != null);

        long identity = Binder.clearCallingIdentity();
        try {
            mDeviceIdle.unregisterStationaryListener(listener);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ public class SystemScreenInteractiveHelper extends ScreenInteractiveHelper {
        mReady = true;
    }

    private void onScreenInteractiveChanged(boolean interactive) {
    void onScreenInteractiveChanged(boolean interactive) {
        if (interactive == mIsInteractive) {
            return;
        }