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

Commit 2873d59e authored by Mike Ma's avatar Mike Ma Committed by android-build-merger
Browse files

Merge "Register broadcast receiver at runtime instead" into pi-dev

am: 806be6b6

Change-Id: I3375ae095ef08830ea1892c3652832d17308340d
parents 0266ab51 806be6b6
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -93,7 +93,6 @@ interface IBatteryStats {
    void noteVibratorOff(int uid);
    void noteVibratorOff(int uid);
    void noteGpsChanged(in WorkSource oldSource, in WorkSource newSource);
    void noteGpsChanged(in WorkSource oldSource, in WorkSource newSource);
    void noteGpsSignalQuality(int signalLevel);
    void noteGpsSignalQuality(int signalLevel);
    void noteUsbConnectionState(boolean connected);
    void noteScreenState(int state);
    void noteScreenState(int state);
    void noteScreenBrightness(int brightness);
    void noteScreenBrightness(int brightness);
    void noteUserActivity(int uid, int event);
    void noteUserActivity(int uid, int event);
+32 −3
Original line number Original line Diff line number Diff line
@@ -21,10 +21,13 @@ import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.UidTraffic;
import android.bluetooth.UidTraffic;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.NetworkStats;
import android.net.NetworkStats;
import android.net.Uri;
import android.net.Uri;
@@ -766,7 +769,10 @@ public class BatteryStatsImpl extends BatteryStats {
    int mCameraOnNesting;
    int mCameraOnNesting;
    StopwatchTimer mCameraOnTimer;
    StopwatchTimer mCameraOnTimer;
    int mUsbDataState; // 0: unknown, 1: disconnected, 2: connected
    private static final int USB_DATA_UNKNOWN = 0;
    private static final int USB_DATA_DISCONNECTED = 1;
    private static final int USB_DATA_CONNECTED = 2;
    int mUsbDataState = USB_DATA_UNKNOWN;
    int mGpsSignalQualityBin = -1;
    int mGpsSignalQualityBin = -1;
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
@@ -5241,8 +5247,30 @@ public class BatteryStatsImpl extends BatteryStats {
        }
        }
    }
    }
    public void noteUsbConnectionStateLocked(boolean connected) {
    private void registerUsbStateReceiver(Context context) {
        int newState = connected ? 2 : 1;
        final IntentFilter usbStateFilter = new IntentFilter();
        usbStateFilter.addAction(UsbManager.ACTION_USB_STATE);
        context.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                final boolean state = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
                synchronized (BatteryStatsImpl.this) {
                    noteUsbConnectionStateLocked(state);
                }
            }
        }, usbStateFilter);
        synchronized (this) {
            if (mUsbDataState == USB_DATA_UNKNOWN) {
                final Intent usbState = context.registerReceiver(null, usbStateFilter);
                final boolean initState = usbState != null && usbState.getBooleanExtra(
                        UsbManager.USB_CONNECTED, false);
                noteUsbConnectionStateLocked(initState);
            }
        }
    }
    private void noteUsbConnectionStateLocked(boolean connected) {
        int newState = connected ? USB_DATA_CONNECTED : USB_DATA_DISCONNECTED;
        if (mUsbDataState != newState) {
        if (mUsbDataState != newState) {
            mUsbDataState = newState;
            mUsbDataState = newState;
            if (connected) {
            if (connected) {
@@ -13218,6 +13246,7 @@ public class BatteryStatsImpl extends BatteryStats {
    public void systemServicesReady(Context context) {
    public void systemServicesReady(Context context) {
        mConstants.startObserving(context.getContentResolver());
        mConstants.startObserving(context.getContentResolver());
        registerUsbStateReceiver(context);
    }
    }
    @VisibleForTesting
    @VisibleForTesting
+0 −10
Original line number Original line Diff line number Diff line
@@ -4253,16 +4253,6 @@
                  android:exported="false">
                  android:exported="false">
        </receiver>
        </receiver>


        <receiver android:name="com.android.server.am.BatteryStatsService$UsbConnectionReceiver"
                  android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_STATE" />
            </intent-filter>
        </receiver>

        <service android:name="android.hardware.location.GeofenceHardwareService"
        <service android:name="android.hardware.location.GeofenceHardwareService"
            android:permission="android.permission.LOCATION_HARDWARE"
            android:permission="android.permission.LOCATION_HARDWARE"
            android:exported="false" />
            android:exported="false" />
+4 −46
Original line number Original line Diff line number Diff line
@@ -19,16 +19,10 @@ package com.android.server.am;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.job.JobProtoEnums;
import android.app.job.JobProtoEnums;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.net.wifi.WifiActivityEnergyInfo;
import android.net.wifi.WifiActivityEnergyInfo;
import android.os.PowerManager.ServiceType;
import android.os.PowerSaveState;
import android.os.BatteryStats;
import android.os.BatteryStats;
import android.os.BatteryStatsInternal;
import android.os.BatteryStatsInternal;
import android.os.Binder;
import android.os.Binder;
@@ -37,18 +31,18 @@ import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFormatException;
import android.os.ParcelFormatException;
import android.os.PowerManager.ServiceType;
import android.os.PowerManagerInternal;
import android.os.PowerManagerInternal;
import android.os.PowerSaveState;
import android.os.Process;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManagerInternal;
import android.os.UserManagerInternal;
import android.os.WorkSource;
import android.os.WorkSource;
import android.os.WorkSource.WorkChain;
import android.os.connectivity.CellularBatteryStats;
import android.os.connectivity.CellularBatteryStats;
import android.os.connectivity.WifiBatteryStats;
import android.os.connectivity.GpsBatteryStats;
import android.os.connectivity.GpsBatteryStats;
import android.os.connectivity.WifiBatteryStats;
import android.os.health.HealthStatsParceler;
import android.os.health.HealthStatsParceler;
import android.os.health.HealthStatsWriter;
import android.os.health.HealthStatsWriter;
import android.os.health.UidHealthStats;
import android.os.health.UidHealthStats;
@@ -57,6 +51,7 @@ import android.telephony.ModemActivityInfo;
import android.telephony.SignalStrength;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.util.Slog;
import android.util.Slog;
import android.util.StatsLog;


import com.android.internal.app.IBatteryStats;
import com.android.internal.app.IBatteryStats;
import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsHelper;
@@ -65,7 +60,6 @@ import com.android.internal.os.PowerProfile;
import com.android.internal.os.RpmStats;
import com.android.internal.os.RpmStats;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.DumpUtils;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import android.util.StatsLog;


import java.io.File;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileDescriptor;
@@ -701,13 +695,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        }
        }
    }
    }


    public void noteUsbConnectionState(boolean connected) {
        enforceCallingPermission();
        synchronized (mStats) {
            mStats.noteUsbConnectionStateLocked(connected);
        }
    }

    public void notePhoneSignalStrength(SignalStrength signalStrength) {
    public void notePhoneSignalStrength(SignalStrength signalStrength) {
        enforceCallingPermission();
        enforceCallingPermission();
        synchronized (mStats) {
        synchronized (mStats) {
@@ -1164,35 +1151,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                Binder.getCallingPid(), Binder.getCallingUid(), null);
                Binder.getCallingPid(), Binder.getCallingUid(), null);
    }
    }


    public final static class UsbConnectionReceiver extends BroadcastReceiver {
        private static final String TAG = UsbConnectionReceiver.class.getSimpleName();
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
                final Intent usbState = context.registerReceiver(null, new IntentFilter(UsbManager.ACTION_USB_STATE));
                if (usbState != null) {
                    handleUsbState(usbState);
                }
            } else if (UsbManager.ACTION_USB_STATE.equals(action)) {
                handleUsbState(intent);
            }
        }
        private void handleUsbState(Intent intent) {
            IBatteryStats bs = getService();
            if (bs == null) {
                Slog.w(TAG, "Could not access batterystats");
                return;
            }
            boolean connected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED);
            try {
                bs.noteUsbConnectionState(connected);
            } catch (RemoteException e) {
                Slog.w(TAG, "Could not access batterystats: ", e);
            }
        }
    }

    final class WakeupReasonThread extends Thread {
    final class WakeupReasonThread extends Thread {
        private static final int MAX_REASON_SIZE = 512;
        private static final int MAX_REASON_SIZE = 512;
        private CharsetDecoder mDecoder;
        private CharsetDecoder mDecoder;