Fix NPE when car volume group info is not available

Car volume group info is not supported if the car audio
framework is configured in legacy mode. In such cases, the
volume definitions need to be queried directly through car
audio manager apis.

Bug: 332389708
Test: Manual
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:62f986a2e5ae96760a1bd145700f36cd40123e6b)
Merged-In: I474db48e8ff8f3d3e2794d13ec20f87fe94c57ad
Change-Id: I474db48e8ff8f3d3e2794d13ec20f87fe94c57ad
diff --git a/src/com/android/systemui/car/volume/CarVolumeDialogImpl.java b/src/com/android/systemui/car/volume/CarVolumeDialogImpl.java
index ffa80c8..0c19535 100644
--- a/src/com/android/systemui/car/volume/CarVolumeDialogImpl.java
+++ b/src/com/android/systemui/car/volume/CarVolumeDialogImpl.java
@@ -106,6 +106,7 @@
     private static final int LISTVIEW_ANIMATION_DURATION_IN_MILLIS = 250;
     private static final int DISMISS_DELAY_IN_MILLIS = 50;
     private static final int ARROW_FADE_IN_START_DELAY_IN_MILLIS = 100;
+    private static final int INVALID_INDEX = -1;
 
     private final Context mContext;
     private final H mHandler = new H();
@@ -167,8 +168,21 @@
                     List<Integer> extraInfos = CarVolumeGroupEvent.convertFlagsToExtraInfo(flags,
                             eventTypes);
                     if (mCarAudioManager != null) {
-                        updateVolumePreference(mCarAudioManager.getVolumeGroupInfo(zoneId, groupId),
-                                eventTypes, extraInfos);
+                        CarVolumeGroupInfo carVolumeGroupInfo =
+                                mCarAudioManager.getVolumeGroupInfo(zoneId, groupId);
+                        boolean isMuted;
+                        int currentIndex;
+                        int maxIndex = INVALID_INDEX;
+                        if (carVolumeGroupInfo != null) {
+                            isMuted = carVolumeGroupInfo.isMuted();
+                            maxIndex = carVolumeGroupInfo.getMaxVolumeGainIndex();
+                            currentIndex = carVolumeGroupInfo.getVolumeGainIndex();
+                        } else {
+                            isMuted = isGroupMuted(mCarAudioManager, zoneId, groupId);
+                            currentIndex = getSeekbarValue(mCarAudioManager, zoneId, groupId);
+                        }
+                        updateVolumePreference(groupId, maxIndex, currentIndex, isMuted, eventTypes,
+                                extraInfos);
                     }
                 }
             };
@@ -844,7 +858,11 @@
             List<Integer> extraInfos = event.getExtraInfos();
             List<CarVolumeGroupInfo> infos = event.getCarVolumeGroupInfos();
             for (int infoIndex = 0; infoIndex < infos.size(); infoIndex++) {
-                updateVolumePreference(infos.get(infoIndex), eventTypes, extraInfos);
+                CarVolumeGroupInfo carVolumeGroupInfo = infos.get(infoIndex);
+                updateVolumePreference(carVolumeGroupInfo.getId(),
+                        carVolumeGroupInfo.getMaxVolumeGainIndex(),
+                        carVolumeGroupInfo.getVolumeGainIndex(), carVolumeGroupInfo.isMuted(),
+                        eventTypes, extraInfos);
             }
         }
     }
@@ -865,27 +883,23 @@
         return filteredEvents;
     }
 
-    private void updateVolumePreference(CarVolumeGroupInfo groupInfo, int eventTypes,
-            List<Integer> extraInfos) {
-        boolean isMuted = groupInfo.isMuted();
-        int groupId = groupInfo.getId();
-        int maxIndex = groupInfo.getMaxVolumeGainIndex();
-        int value = groupInfo.getVolumeGainIndex();
-
+    private void updateVolumePreference(int groupId, int maxIndex, int currentIndex,
+            boolean isMuted, int eventTypes, List<Integer> extraInfos) {
         VolumeItem volumeItem = mAvailableVolumeItems.get(groupId);
         boolean isShowing = mCarVolumeLineItems.stream().anyMatch(
                 item -> item.getGroupId() == groupId);
 
         if (isShowing) {
             if ((eventTypes & EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED) != 0) {
-                volumeItem.mCarVolumeItem.setProgress(value);
-                volumeItem.mProgress = value;
+                volumeItem.mCarVolumeItem.setProgress(currentIndex);
+                volumeItem.mProgress = currentIndex;
             }
             if ((eventTypes & EVENT_TYPE_MUTE_CHANGED) != 0) {
                 volumeItem.mCarVolumeItem.setIsMuted(isMuted);
                 volumeItem.mIsMuted = isMuted;
             }
-            if ((eventTypes & EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED) != 0) {
+            if ((eventTypes & EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED) != 0
+                    && maxIndex != INVALID_INDEX) {
                 volumeItem.mCarVolumeItem.setMax(maxIndex);
             }
         }