Dynamically update incall Audio Route
Fix: 149047181
Test: Manual
Change-Id: I3ce9a8c5240084665974de7bedaa3d34c2c18fe2
diff --git a/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java b/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
index 50435c0..cda13a4 100644
--- a/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
+++ b/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
@@ -78,6 +78,9 @@
.build();
private AlertDialog mAudioRouteSelectionDialog;
+ private List<CarUiListItem> mAudioRouteListItems;
+ private List<Integer> mAvailableRoutes;
+ private CarUiListItemAdapter mAudioRouteAdapter;
private View mMuteButton;
private View mAudioRouteView;
private ImageView mAudioRouteButton;
@@ -94,19 +97,19 @@
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- List<Integer> availableRoutes = UiCallManager.get().getSupportedAudioRoute();
+ mAvailableRoutes = UiCallManager.get().getSupportedAudioRoute();
mActiveRoute = UiCallManager.get().getAudioRoute();
- if (availableRoutes.contains(CallAudioState.ROUTE_EARPIECE)
- && availableRoutes.contains(CallAudioState.ROUTE_WIRED_HEADSET)) {
+ if (mAvailableRoutes.contains(CallAudioState.ROUTE_EARPIECE)
+ && mAvailableRoutes.contains(CallAudioState.ROUTE_WIRED_HEADSET)) {
// Keep either ROUTE_EARPIECE or ROUTE_WIRED_HEADSET, but not both of them.
- availableRoutes.remove(CallAudioState.ROUTE_WIRED_HEADSET);
+ mAvailableRoutes.remove(CallAudioState.ROUTE_WIRED_HEADSET);
}
- List<CarUiListItem> listItems = new ArrayList<>();
- CarUiListItemAdapter adapter = new CarUiListItemAdapter(listItems);
+ mAudioRouteListItems = new ArrayList<>();
+ mAudioRouteAdapter = new CarUiListItemAdapter(mAudioRouteListItems);
- for (Integer audioRoute : availableRoutes) {
+ for (Integer audioRoute : mAvailableRoutes) {
CarUiContentListItem item = new CarUiContentListItem(CarUiContentListItem.Action.NONE);
AudioRouteInfo routeInfo = getAudioRouteInfo(audioRoute);
Drawable drawable = getResources().getDrawable(routeInfo.mIcon, null);
@@ -115,30 +118,15 @@
item.setIcon(drawable);
item.setOnItemClickedListener((i) -> {
onSetAudioRoute(audioRoute);
- // Reset the spannable titles for each item
- for (CarUiListItem listItem : listItems) {
- CarUiContentListItem contentItem = (CarUiContentListItem) listItem;
- CharSequence title = contentItem.getTitle();
- contentItem.setTitle(title.toString());
- contentItem.setActivated(false);
- }
- i.setActivated(true);
- // Set the spannable title for clicked item
- String routeTitle = getString(routeInfo.mLabel);
- item.setTitle(mActiveRoute == audioRoute
- ? withAccentColor(routeTitle)
- : routeTitle);
- adapter.notifyDataSetChanged();
});
String routeTitle = getString(routeInfo.mLabel);
-
item.setTitle(mActiveRoute == audioRoute ? withAccentColor(routeTitle) : routeTitle);
item.setActivated(mActiveRoute == audioRoute);
- listItems.add(item);
+ mAudioRouteListItems.add(item);
}
AlertDialogBuilder audioRouteSelectionDialogBuilder = new AlertDialogBuilder(getContext())
- .setAdapter(adapter)
+ .setAdapter(mAudioRouteAdapter)
.setTitle(getString(R.string.audio_route_dialog_title));
String subtitle = getString(R.string.audio_route_dialog_subtitle);
@@ -227,6 +215,18 @@
}
}
+ private void updateAudioRouteListItems() {
+ for (int i = 0; i < mAvailableRoutes.size(); i++) {
+ int audioRoute = mAvailableRoutes.get(i);
+ CarUiContentListItem item = (CarUiContentListItem) mAudioRouteListItems.get(i);
+ boolean isActiveRoute = audioRoute == mActiveRoute;
+ String routeTitle = item.getTitle().toString();
+ item.setActivated(isActiveRoute);
+ item.setTitle(isActiveRoute ? withAccentColor(routeTitle) : routeTitle);
+ }
+ mAudioRouteAdapter.notifyDataSetChanged();
+ }
+
private CharSequence withAccentColor(String routeTitle) {
ForegroundColorSpan activeRouteSpan = new ForegroundColorSpan(
getResources().getColor(R.color.audio_output_accent, null));
@@ -281,6 +281,7 @@
private void onSetAudioRoute(@CallAudioRoute int audioRoute) {
UiCallManager.get().setAudioRoute(audioRoute);
mActiveRoute = audioRoute;
+ updateAudioRouteListItems();
mAudioRouteSelectionDialog.dismiss();
}
@@ -290,7 +291,8 @@
}
L.i(TAG, "Audio Route State: " + audioRoute);
-
+ mActiveRoute = audioRoute;
+ updateAudioRouteListItems();
AudioRouteInfo audioRouteInfo = getAudioRouteInfo(audioRoute);
if (mAudioRouteButton != null) {
mAudioRouteButton.setImageResource(audioRouteInfo.mIconActivatable);