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

Commit 91b6a874 authored by Stephanie Bak's avatar Stephanie Bak
Browse files

Replace APM enhancement device config flag with overlay

Bug: 280675681
Test: manual
Change-Id: I4b2ec50d79667e9c1c921edd0adb7118725498b1
parent e343113f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -191,4 +191,7 @@

    <!-- Boolean indicating if current platform supports HFP inband ringing -->
    <bool name="config_bluetooth_hfp_inband_ringing_support">true</bool>

    <!-- Boolean indicating if APM enhancement feature is enabled -->
    <bool name="config_bluetooth_apm_enhancement_enabled">true</bool>
</resources>
+0 −2
Original line number Diff line number Diff line
@@ -57,8 +57,6 @@ public class BluetoothAirplaneModeListener {
    public static final String APM_USER_TOGGLED_BLUETOOTH = "apm_user_toggled_bluetooth";
    // keeps track of whether bt should remain on in airplane mode
    public static final String BLUETOOTH_APM_STATE = "bluetooth_apm_state";
    // keeps track of what the default value for bt should be in airplane mode
    public static final String BT_DEFAULT_APM_STATE = "bt_default_apm_state";
    // keeps track of whether user enabling bt notification was shown
    public static final String APM_BT_ENABLED_NOTIFICATION = "apm_bt_enabled_notification";

+1 −44
Original line number Diff line number Diff line
@@ -16,12 +16,7 @@

package com.android.server.bluetooth;

import static com.android.server.bluetooth.BluetoothAirplaneModeListener.APM_ENHANCEMENT;
import static com.android.server.bluetooth.BluetoothAirplaneModeListener.BT_DEFAULT_APM_STATE;

import android.content.Context;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.util.Log;

/**
@@ -36,64 +31,26 @@ import android.util.Log;
public class BluetoothDeviceConfigListener {
    private static final String TAG = "BluetoothDeviceConfigListener";

    private static final int DEFAULT_APM_ENHANCEMENT = 0;
    private static final int DEFAULT_BT_APM_STATE = 0;

    private final BluetoothManagerService mService;
    private final boolean mLogDebug;
    private final Context mContext;
    private final BluetoothDeviceConfigChangeTracker mConfigChangeTracker;

    private boolean mPrevApmEnhancement;
    private boolean mPrevBtApmState;

    BluetoothDeviceConfigListener(BluetoothManagerService service, boolean logDebug,
            Context context) {
    BluetoothDeviceConfigListener(BluetoothManagerService service, boolean logDebug) {
        mService = service;
        mLogDebug = logDebug;
        mContext = context;
        mConfigChangeTracker =
                new BluetoothDeviceConfigChangeTracker(
                        DeviceConfig.getProperties(DeviceConfig.NAMESPACE_BLUETOOTH));
        updateApmConfigs();
        DeviceConfig.addOnPropertiesChangedListener(
                DeviceConfig.NAMESPACE_BLUETOOTH,
                (Runnable r) -> r.run(),
                mDeviceConfigChangedListener);
    }

    private void updateApmConfigs() {
        mPrevApmEnhancement = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
                APM_ENHANCEMENT, false);
        mPrevBtApmState = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
                BT_DEFAULT_APM_STATE, false);

        Settings.Global.putInt(mContext.getContentResolver(),
                APM_ENHANCEMENT, mPrevApmEnhancement ? 1 : 0);
        Settings.Global.putInt(mContext.getContentResolver(),
                BT_DEFAULT_APM_STATE, mPrevBtApmState ? 1 : 0);
    }

    private final DeviceConfig.OnPropertiesChangedListener mDeviceConfigChangedListener =
            new DeviceConfig.OnPropertiesChangedListener() {
                @Override
                public void onPropertiesChanged(DeviceConfig.Properties newProperties) {
                    boolean apmEnhancement = newProperties.getBoolean(
                            APM_ENHANCEMENT, mPrevApmEnhancement);
                    if (apmEnhancement != mPrevApmEnhancement) {
                        mPrevApmEnhancement = apmEnhancement;
                        Settings.Global.putInt(mContext.getContentResolver(),
                                APM_ENHANCEMENT, apmEnhancement ? 1 : 0);
                    }

                    boolean btApmState = newProperties.getBoolean(
                            BT_DEFAULT_APM_STATE, mPrevBtApmState);
                    if (btApmState != mPrevBtApmState) {
                        mPrevBtApmState = btApmState;
                        Settings.Global.putInt(mContext.getContentResolver(),
                                BT_DEFAULT_APM_STATE, btApmState ? 1 : 0);
                    }

                    if (mConfigChangeTracker.shouldRestartWhenPropertiesUpdated(newProperties)) {
                        Log.d(TAG, "Properties changed, enqueuing restart");
                        mService.onInitFlagsChanged();
+33 −1
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.os.Binder;
import android.os.Bundle;
@@ -1816,7 +1817,38 @@ public class BluetoothManagerService extends IBluetoothManager.Stub {
            mBluetoothAirplaneModeListener.start(mBluetoothModeChangeHelper);
        }
        registerForProvisioningStateChange();
        mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this, DBG, mContext);
        mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this, DBG);
        loadApmEnhancementStateFromResource();
    }

    /**
     * Set BluetoothModeChangeHelper for testing
     */
    @VisibleForTesting
    void setBluetoothModeChangeHelper(BluetoothModeChangeHelper bluetoothModeChangeHelper) {
        mBluetoothModeChangeHelper = bluetoothModeChangeHelper;
    }

    /**
     * Load whether APM Enhancement feature should be enabled from overlay
     */
    @VisibleForTesting
    void loadApmEnhancementStateFromResource() {
        String btPackageName = mBluetoothModeChangeHelper.getBluetoothPackageName();
        if (btPackageName == null) {
            Log.e(TAG, "Unable to find Bluetooth package name with APM resources");
            return;
        }
        try {
            Resources resources = mContext.getPackageManager()
                    .getResourcesForApplication(btPackageName);
            int apmEnhancement = resources.getIdentifier("config_bluetooth_apm_enhancement_enabled",
                    "bool", btPackageName);
            Settings.Global.putInt(mContext.getContentResolver(),
                    APM_ENHANCEMENT, resources.getBoolean(apmEnhancement) ? 1 : 0);
        } catch (Exception e) {
            Log.e(TAG, "Unable to set whether APM enhancement should be enabled");
        }
    }

    /**
+1 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.server.bluetooth;

import static com.android.server.bluetooth.BluetoothAirplaneModeListener.BLUETOOTH_APM_STATE;
import static com.android.server.bluetooth.BluetoothAirplaneModeListener.BT_DEFAULT_APM_STATE;

import android.annotation.RequiresPermission;
import android.app.ActivityManager;
@@ -195,9 +194,8 @@ public class BluetoothModeChangeHelper {
    public boolean isBluetoothOnAPM() {
        Context userContext = mContext.createContextAsUser(
                UserHandle.of(ActivityManager.getCurrentUser()), 0);
        int defaultBtApmState = getSettingsInt(BT_DEFAULT_APM_STATE);
        return Settings.Secure.getInt(userContext.getContentResolver(),
                BLUETOOTH_APM_STATE, defaultBtApmState) == 1;
                BLUETOOTH_APM_STATE, 0) == 1;
    }

    /**
Loading