summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/audiomode
diff options
context:
space:
mode:
authorEric Erfanian <erfanian@google.com>2018-05-07 14:58:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-05-07 14:58:35 +0000
commit84b862acd2c53f665386f1dfd23b57c2bdcf5baf (patch)
tree78bf30ec2633948a69facf84ebfa84a979d814f3 /java/com/android/incallui/audiomode
parent95c2775dd2b77f9fce454d655d2b23ed700d7f22 (diff)
parent763ce4404ae8e4199da719359a1b01389884cec4 (diff)
Merge changes Ibab0bc7e,I1cb26187,I64225b78,I4806ab65,I7d431e74, ...
* changes: Remove TODOs for showing SIM info in the bottom sheet & call details. Use Telecom Bluetooth API instead of system Bluetooth API. Update audio route after user select different audio route. Clear NewCallLogViewHolder.onClickListener if row is not callable. Filter out unnecessary bottom sheet options for a call to a voicemail box. Aosp fix for v28-support-prelease bottom sheet. Mark photo info as voicemails in bottom sheet Simplify how we build bottom sheet options (a.k.a. modules). Add test to verify no crash on multiple DialerCall#onRemovedFromCallList. Add spam status tests for CallList#onCallAdded More refactoring
Diffstat (limited to 'java/com/android/incallui/audiomode')
-rw-r--r--java/com/android/incallui/audiomode/BluetoothDeviceProvider.java203
-rw-r--r--java/com/android/incallui/audiomode/BluetoothDeviceProviderComponent.java39
2 files changed, 0 insertions, 242 deletions
diff --git a/java/com/android/incallui/audiomode/BluetoothDeviceProvider.java b/java/com/android/incallui/audiomode/BluetoothDeviceProvider.java
deleted file mode 100644
index 1aa1c20a8..000000000
--- a/java/com/android/incallui/audiomode/BluetoothDeviceProvider.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2018 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.incallui.audiomode;
-
-import android.annotation.SuppressLint;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothHeadset;
-import android.bluetooth.BluetoothProfile;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.util.ArraySet;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.inject.ApplicationContext;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Set;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/** Proxy class for getting and setting connected/active Bluetooth devices. */
-@Singleton
-public final class BluetoothDeviceProvider extends BroadcastReceiver {
-
- // TODO(yueg): use BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED when possible
- private static final String ACTION_ACTIVE_DEVICE_CHANGED =
- "android.bluetooth.headset.profile.action.ACTIVE_DEVICE_CHANGED";
-
- private final Context appContext;
- private final BluetoothProfileServiceListener bluetoothProfileServiceListener =
- new BluetoothProfileServiceListener();
-
- private final Set<BluetoothDevice> connectedBluetoothDeviceSet = new ArraySet<>();
-
- private BluetoothDevice activeBluetoothDevice;
- private BluetoothHeadset bluetoothHeadset;
- private boolean isSetUp;
-
- @Inject
- public BluetoothDeviceProvider(@ApplicationContext Context appContext) {
- this.appContext = appContext;
- }
-
- public void setUp() {
- if (BluetoothAdapter.getDefaultAdapter() == null) {
- // Bluetooth is not supported on this hardware platform
- return;
- }
- // Get Bluetooth service including the initial connected device list (should only contain one
- // device)
- BluetoothAdapter.getDefaultAdapter()
- .getProfileProxy(appContext, bluetoothProfileServiceListener, BluetoothProfile.HEADSET);
- // Get notified of Bluetooth device update
- IntentFilter filter = new IntentFilter();
- filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
- filter.addAction(ACTION_ACTIVE_DEVICE_CHANGED);
- appContext.registerReceiver(this, filter);
-
- isSetUp = true;
- }
-
- public void tearDown() {
- if (!isSetUp) {
- return;
- }
- appContext.unregisterReceiver(this);
- if (bluetoothHeadset != null) {
- BluetoothAdapter.getDefaultAdapter()
- .closeProfileProxy(BluetoothProfile.HEADSET, bluetoothHeadset);
- }
- }
-
- public Set<BluetoothDevice> getConnectedBluetoothDeviceSet() {
- return connectedBluetoothDeviceSet;
- }
-
- public BluetoothDevice getActiveBluetoothDevice() {
- return activeBluetoothDevice;
- }
-
- @SuppressLint("PrivateApi")
- public void setActiveBluetoothDevice(BluetoothDevice bluetoothDevice) {
- if (!connectedBluetoothDeviceSet.contains(bluetoothDevice)) {
- LogUtil.e("BluetoothProfileServiceListener.setActiveBluetoothDevice", "device is not in set");
- return;
- }
- // TODO(yueg): use BluetoothHeadset.setActiveDevice() when possible
- try {
- Method getActiveDeviceMethod =
- bluetoothHeadset.getClass().getDeclaredMethod("setActiveDevice", BluetoothDevice.class);
- getActiveDeviceMethod.setAccessible(true);
- getActiveDeviceMethod.invoke(bluetoothHeadset, bluetoothDevice);
- } catch (Exception e) {
- LogUtil.e(
- "BluetoothProfileServiceListener.setActiveBluetoothDevice",
- "failed to call setActiveDevice",
- e);
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(intent.getAction())) {
- handleActionConnectionStateChanged(intent);
- } else if (ACTION_ACTIVE_DEVICE_CHANGED.equals(intent.getAction())) {
- handleActionActiveDeviceChanged(intent);
- }
- }
-
- private void handleActionConnectionStateChanged(Intent intent) {
- if (!intent.hasExtra(BluetoothDevice.EXTRA_DEVICE)) {
- LogUtil.i(
- "BluetoothDeviceProvider.handleActionConnectionStateChanged",
- "extra BluetoothDevice.EXTRA_DEVICE not found");
- return;
- }
- BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- if (bluetoothDevice == null) {
- return;
- }
-
- int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1);
- if (state == BluetoothProfile.STATE_DISCONNECTED) {
- connectedBluetoothDeviceSet.remove(bluetoothDevice);
- LogUtil.i("BluetoothDeviceProvider.handleActionConnectionStateChanged", "device removed");
- } else if (state == BluetoothProfile.STATE_CONNECTED) {
- connectedBluetoothDeviceSet.add(bluetoothDevice);
- LogUtil.i("BluetoothDeviceProvider.handleActionConnectionStateChanged", "device added");
- }
- }
-
- private void handleActionActiveDeviceChanged(Intent intent) {
- if (!intent.hasExtra(BluetoothDevice.EXTRA_DEVICE)) {
- LogUtil.i(
- "BluetoothDeviceProvider.handleActionActiveDeviceChanged",
- "extra BluetoothDevice.EXTRA_DEVICE not found");
- return;
- }
- activeBluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- LogUtil.i(
- "BluetoothDeviceProvider.handleActionActiveDeviceChanged",
- (activeBluetoothDevice == null ? "null" : ""));
- }
-
- private final class BluetoothProfileServiceListener implements BluetoothProfile.ServiceListener {
- @Override
- @SuppressLint("PrivateApi")
- public void onServiceConnected(int profile, BluetoothProfile bluetoothProfile) {
- if (profile != BluetoothProfile.HEADSET) {
- return;
- }
- // Get initial connected device list
- bluetoothHeadset = (BluetoothHeadset) bluetoothProfile;
- List<BluetoothDevice> devices = bluetoothProfile.getConnectedDevices();
- for (BluetoothDevice device : devices) {
- connectedBluetoothDeviceSet.add(device);
- LogUtil.i(
- "BluetoothProfileServiceListener.onServiceConnected", "get initial connected device");
- }
-
- // Get initial active device
- // TODO(yueg): use BluetoothHeadset.getActiveDevice() when possible
- try {
- Method getActiveDeviceMethod =
- bluetoothHeadset.getClass().getDeclaredMethod("getActiveDevice");
- getActiveDeviceMethod.setAccessible(true);
- activeBluetoothDevice = (BluetoothDevice) getActiveDeviceMethod.invoke(bluetoothHeadset);
- LogUtil.i(
- "BluetoothProfileServiceListener.onServiceConnected",
- "get initial active device" + ((activeBluetoothDevice == null) ? " null" : ""));
- } catch (Exception e) {
- LogUtil.e(
- "BluetoothProfileServiceListener.onServiceConnected",
- "failed to call getAcitveDevice",
- e);
- }
- }
-
- @Override
- public void onServiceDisconnected(int profile) {
- LogUtil.enterBlock("BluetoothProfileServiceListener.onServiceDisconnected");
- if (profile == BluetoothProfile.HEADSET) {
- bluetoothHeadset = null;
- }
- }
- }
-}
diff --git a/java/com/android/incallui/audiomode/BluetoothDeviceProviderComponent.java b/java/com/android/incallui/audiomode/BluetoothDeviceProviderComponent.java
deleted file mode 100644
index 9cd926835..000000000
--- a/java/com/android/incallui/audiomode/BluetoothDeviceProviderComponent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2017 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.incallui.audiomode;
-
-import android.content.Context;
-import com.android.dialer.inject.HasRootComponent;
-import dagger.Subcomponent;
-
-/** Dagger component for the Bluetooth device provider. */
-@Subcomponent
-public abstract class BluetoothDeviceProviderComponent {
-
- public abstract BluetoothDeviceProvider bluetoothDeviceProvider();
-
- public static BluetoothDeviceProviderComponent get(Context context) {
- return ((BluetoothDeviceProviderComponent.HasComponent)
- ((HasRootComponent) context.getApplicationContext()).component())
- .bluetoothDeviceProviderComponent();
- }
-
- /** Used to refer to the root application component. */
- public interface HasComponent {
- BluetoothDeviceProviderComponent bluetoothDeviceProviderComponent();
- }
-}