diff options
4 files changed, 151 insertions, 130 deletions
| diff --git a/services/core/java/com/android/server/BluetoothAirplaneModeListener.java b/services/core/java/com/android/server/BluetoothAirplaneModeListener.java index 31cd5d519d87..4d9680c785bc 100644 --- a/services/core/java/com/android/server/BluetoothAirplaneModeListener.java +++ b/services/core/java/com/android/server/BluetoothAirplaneModeListener.java @@ -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; -        } -    };  } diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index b5d28089db56..cecf690171a8 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -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);          }      } diff --git a/services/core/java/com/android/server/BluetoothModeChangeHelper.java b/services/core/java/com/android/server/BluetoothModeChangeHelper.java new file mode 100644 index 000000000000..242fa848c25e --- /dev/null +++ b/services/core/java/com/android/server/BluetoothModeChangeHelper.java @@ -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; +    } +} diff --git a/services/tests/servicestests/src/com/android/server/BluetoothAirplaneModeListenerTest.java b/services/tests/servicestests/src/com/android/server/BluetoothAirplaneModeListenerTest.java index 968a402ff3b7..3ace3f4c79dc 100644 --- a/services/tests/servicestests/src/com/android/server/BluetoothAirplaneModeListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/BluetoothAirplaneModeListenerTest.java @@ -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()); |