BluetoothAirplaneModeListener -> BluetoothModeChangeHelper
Common code can be used for BluetoothDeviceConfigListener. Test: atest FrameworksServicesTests Change-Id: Ic5ab3c04876c341bde79c03f0551719c5f774437
This commit is contained in:
@@ -16,22 +16,14 @@
|
||||
|
||||
package com.android.server;
|
||||
|
||||
import android.bluetooth.BluetoothA2dp;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothHearingAid;
|
||||
import android.bluetooth.BluetoothProfile;
|
||||
import android.bluetooth.BluetoothProfile.ServiceListener;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
/**
|
||||
@@ -53,7 +45,7 @@ class BluetoothAirplaneModeListener {
|
||||
|
||||
private final BluetoothManagerService mBluetoothManager;
|
||||
private final BluetoothAirplaneModeHandler mHandler;
|
||||
private AirplaneModeHelper mAirplaneHelper;
|
||||
private BluetoothModeChangeHelper mAirplaneHelper;
|
||||
|
||||
@VisibleForTesting int mToastCount = 0;
|
||||
|
||||
@@ -97,7 +89,7 @@ class BluetoothAirplaneModeListener {
|
||||
* Call after boot complete
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void start(AirplaneModeHelper helper) {
|
||||
void start(BluetoothModeChangeHelper helper) {
|
||||
Log.i(TAG, "start");
|
||||
mAirplaneHelper = helper;
|
||||
mToastCount = mAirplaneHelper.getSettingsInt(TOAST_COUNT);
|
||||
@@ -141,118 +133,4 @@ class BluetoothAirplaneModeListener {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class that handles callout and callback methods without
|
||||
* complex logic.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public static class AirplaneModeHelper {
|
||||
private volatile BluetoothA2dp mA2dp;
|
||||
private volatile BluetoothHearingAid mHearingAid;
|
||||
private final BluetoothAdapter mAdapter;
|
||||
private final Context mContext;
|
||||
|
||||
AirplaneModeHelper(Context context) {
|
||||
mAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
mContext = context;
|
||||
|
||||
mAdapter.getProfileProxy(mContext, mProfileServiceListener, BluetoothProfile.A2DP);
|
||||
mAdapter.getProfileProxy(mContext, mProfileServiceListener,
|
||||
BluetoothProfile.HEARING_AID);
|
||||
}
|
||||
|
||||
private final ServiceListener mProfileServiceListener = new ServiceListener() {
|
||||
@Override
|
||||
public void onServiceConnected(int profile, BluetoothProfile proxy) {
|
||||
// Setup Bluetooth profile proxies
|
||||
switch (profile) {
|
||||
case BluetoothProfile.A2DP:
|
||||
mA2dp = (BluetoothA2dp) proxy;
|
||||
break;
|
||||
case BluetoothProfile.HEARING_AID:
|
||||
mHearingAid = (BluetoothHearingAid) proxy;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(int profile) {
|
||||
// Clear Bluetooth profile proxies
|
||||
switch (profile) {
|
||||
case BluetoothProfile.A2DP:
|
||||
mA2dp = null;
|
||||
break;
|
||||
case BluetoothProfile.HEARING_AID:
|
||||
mHearingAid = null;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isA2dpOrHearingAidConnected() {
|
||||
return isA2dpConnected() || isHearingAidConnected();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isBluetoothOn() {
|
||||
final BluetoothAdapter adapter = mAdapter;
|
||||
if (adapter == null) {
|
||||
return false;
|
||||
}
|
||||
return adapter.getLeState() == BluetoothAdapter.STATE_ON;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isAirplaneModeOn() {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void onAirplaneModeChanged(BluetoothManagerService managerService) {
|
||||
managerService.onAirplaneModeChanged();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public int getSettingsInt(String name) {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
name, 0);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void setSettingsInt(String name, int value) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
name, value);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void showToastMessage() {
|
||||
Resources r = mContext.getResources();
|
||||
final CharSequence text = r.getString(
|
||||
R.string.bluetooth_airplane_mode_toast, 0);
|
||||
Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
private boolean isA2dpConnected() {
|
||||
final BluetoothA2dp a2dp = mA2dp;
|
||||
if (a2dp == null) {
|
||||
return false;
|
||||
}
|
||||
return a2dp.getConnectedDevices().size() > 0;
|
||||
}
|
||||
|
||||
private boolean isHearingAidConnected() {
|
||||
final BluetoothHearingAid hearingAid = mHearingAid;
|
||||
if (hearingAid == null) {
|
||||
return false;
|
||||
}
|
||||
return hearingAid.getConnectedDevices().size() > 0;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1350,9 +1350,11 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
Message getMsg = mHandler.obtainMessage(MESSAGE_GET_NAME_AND_ADDRESS);
|
||||
mHandler.sendMessage(getMsg);
|
||||
}
|
||||
BluetoothModeChangeHelper bluetoothModeChangeHelper =
|
||||
new BluetoothModeChangeHelper(mContext);
|
||||
|
||||
if (mBluetoothAirplaneModeListener != null) {
|
||||
mBluetoothAirplaneModeListener.start(
|
||||
new BluetoothAirplaneModeListener.AirplaneModeHelper(mContext));
|
||||
mBluetoothAirplaneModeListener.start(bluetoothModeChangeHelper);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server;
|
||||
|
||||
import android.bluetooth.BluetoothA2dp;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothHearingAid;
|
||||
import android.bluetooth.BluetoothProfile;
|
||||
import android.bluetooth.BluetoothProfile.ServiceListener;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.provider.Settings;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
/**
|
||||
* Helper class that handles callout and callback methods without
|
||||
* complex logic.
|
||||
*/
|
||||
public class BluetoothModeChangeHelper {
|
||||
private volatile BluetoothA2dp mA2dp;
|
||||
private volatile BluetoothHearingAid mHearingAid;
|
||||
private final BluetoothAdapter mAdapter;
|
||||
private final Context mContext;
|
||||
|
||||
BluetoothModeChangeHelper(Context context) {
|
||||
mAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
mContext = context;
|
||||
|
||||
mAdapter.getProfileProxy(mContext, mProfileServiceListener, BluetoothProfile.A2DP);
|
||||
mAdapter.getProfileProxy(mContext, mProfileServiceListener,
|
||||
BluetoothProfile.HEARING_AID);
|
||||
}
|
||||
|
||||
private final ServiceListener mProfileServiceListener = new ServiceListener() {
|
||||
@Override
|
||||
public void onServiceConnected(int profile, BluetoothProfile proxy) {
|
||||
// Setup Bluetooth profile proxies
|
||||
switch (profile) {
|
||||
case BluetoothProfile.A2DP:
|
||||
mA2dp = (BluetoothA2dp) proxy;
|
||||
break;
|
||||
case BluetoothProfile.HEARING_AID:
|
||||
mHearingAid = (BluetoothHearingAid) proxy;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(int profile) {
|
||||
// Clear Bluetooth profile proxies
|
||||
switch (profile) {
|
||||
case BluetoothProfile.A2DP:
|
||||
mA2dp = null;
|
||||
break;
|
||||
case BluetoothProfile.HEARING_AID:
|
||||
mHearingAid = null;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isA2dpOrHearingAidConnected() {
|
||||
return isA2dpConnected() || isHearingAidConnected();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isBluetoothOn() {
|
||||
final BluetoothAdapter adapter = mAdapter;
|
||||
if (adapter == null) {
|
||||
return false;
|
||||
}
|
||||
return adapter.getLeState() == BluetoothAdapter.STATE_ON;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isAirplaneModeOn() {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void onAirplaneModeChanged(BluetoothManagerService managerService) {
|
||||
managerService.onAirplaneModeChanged();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public int getSettingsInt(String name) {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
name, 0);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void setSettingsInt(String name, int value) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
name, value);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void showToastMessage() {
|
||||
Resources r = mContext.getResources();
|
||||
final CharSequence text = r.getString(
|
||||
R.string.bluetooth_airplane_mode_toast, 0);
|
||||
Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
private boolean isA2dpConnected() {
|
||||
final BluetoothA2dp a2dp = mA2dp;
|
||||
if (a2dp == null) {
|
||||
return false;
|
||||
}
|
||||
return a2dp.getConnectedDevices().size() > 0;
|
||||
}
|
||||
|
||||
private boolean isHearingAidConnected() {
|
||||
final BluetoothHearingAid hearingAid = mHearingAid;
|
||||
if (hearingAid == null) {
|
||||
return false;
|
||||
}
|
||||
return hearingAid.getConnectedDevices().size() > 0;
|
||||
}
|
||||
}
|
||||
@@ -27,8 +27,6 @@ import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.filters.MediumTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.BluetoothAirplaneModeListener.AirplaneModeHelper;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -41,7 +39,7 @@ public class BluetoothAirplaneModeListenerTest {
|
||||
private Context mContext;
|
||||
private BluetoothAirplaneModeListener mBluetoothAirplaneModeListener;
|
||||
private BluetoothAdapter mBluetoothAdapter;
|
||||
private AirplaneModeHelper mHelper;
|
||||
private BluetoothModeChangeHelper mHelper;
|
||||
|
||||
@Mock BluetoothManagerService mBluetoothManagerService;
|
||||
|
||||
@@ -49,7 +47,7 @@ public class BluetoothAirplaneModeListenerTest {
|
||||
public void setUp() throws Exception {
|
||||
mContext = InstrumentationRegistry.getTargetContext();
|
||||
|
||||
mHelper = mock(AirplaneModeHelper.class);
|
||||
mHelper = mock(BluetoothModeChangeHelper.class);
|
||||
when(mHelper.getSettingsInt(BluetoothAirplaneModeListener.TOAST_COUNT))
|
||||
.thenReturn(BluetoothAirplaneModeListener.MAX_TOAST_COUNT);
|
||||
doNothing().when(mHelper).setSettingsInt(anyString(), anyInt());
|
||||
|
||||
Reference in New Issue
Block a user