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

Commit c31bb8bb authored by Stephanie Bak's avatar Stephanie Bak Committed by Gerrit Code Review
Browse files

Merge "Replace APM enhancement device config flag with overlay"

parents 0e79b458 91b6a874
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