Loading android/app/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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> service/src/com/android/server/bluetooth/BluetoothAirplaneModeListener.java +0 −2 Original line number Diff line number Diff line Loading @@ -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"; Loading service/src/com/android/server/bluetooth/BluetoothDeviceConfigListener.java +1 −44 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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(); Loading service/src/com/android/server/bluetooth/BluetoothManagerService.java +33 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); } } /** Loading service/src/com/android/server/bluetooth/BluetoothModeChangeHelper.java +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
android/app/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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>
service/src/com/android/server/bluetooth/BluetoothAirplaneModeListener.java +0 −2 Original line number Diff line number Diff line Loading @@ -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"; Loading
service/src/com/android/server/bluetooth/BluetoothDeviceConfigListener.java +1 −44 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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(); Loading
service/src/com/android/server/bluetooth/BluetoothManagerService.java +33 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); } } /** Loading
service/src/com/android/server/bluetooth/BluetoothModeChangeHelper.java +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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