Loading packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java +18 −35 Original line number Diff line number Diff line Loading @@ -112,17 +112,22 @@ public class CarVolumeDialogImpl implements VolumeDialog { // zoneId VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); int value = getSeekbarValue(mCarAudioManager, groupId); // find if the group id for which the volume changed is currently being // displayed. boolean isShowing = mCarVolumeLineItems.stream().anyMatch( item -> item.getGroupId() == groupId); // Do not update the progress if it is the same as before. When car audio // manager sets // its group volume caused by the seekbar progress changed, it also triggers // this // callback. Updating the seekbar at the same time could block the continuous // seeking. if (value != volumeItem.progress) { if (value != volumeItem.progress && isShowing) { volumeItem.carVolumeItem.setProgress(value); volumeItem.progress = value; } if ((flags & AudioManager.FLAG_SHOW_UI) != 0) { mCurrentlyDisplayingGroupId = groupId; mHandler.obtainMessage(H.SHOW, Events.SHOW_REASON_VOLUME_CHANGED).sendToTarget(); } Loading @@ -134,10 +139,10 @@ public class CarVolumeDialogImpl implements VolumeDialog { } }; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private boolean mShowing; private boolean mExpanded; private View mExpandIcon; private VolumeItem mDefaultVolumeItem; private final ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Loading @@ -152,8 +157,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { mAvailableVolumeItems.add(volumeItem); // The first one is the default item. if (groupId == 0) { mDefaultVolumeItem = volumeItem; setupDefaultCarVolumeItem(); setuptListItem(0); } } Loading @@ -177,9 +181,11 @@ public class CarVolumeDialogImpl implements VolumeDialog { } }; private void setupDefaultCarVolumeItem() { mDefaultVolumeItem.defaultItem = true; addCarVolumeListItem(mDefaultVolumeItem, /* volumeGroupId = */0, private void setuptListItem(int groupId) { mCarVolumeLineItems.clear(); VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); volumeItem.defaultItem = true; addCarVolumeListItem(volumeItem, /* volumeGroupId = */ groupId, R.drawable.car_ic_keyboard_arrow_down, new ExpandIconListener() ); } Loading Loading @@ -299,9 +305,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { return; } mShowing = true; if (mCarVolumeLineItems.isEmpty()) { setupDefaultCarVolumeItem(); } setuptListItem(mCurrentlyDisplayingGroupId); mDialog.show(); Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); } Loading Loading @@ -437,7 +441,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { carVolumeItem.setSupplementalIcon(/* drawable= */ null, /* showSupplementalIconDivider= */ false); } carVolumeItem.setGroupId(volumeGroupId); mCarVolumeLineItems.add(carVolumeItem); volumeItem.carVolumeItem = carVolumeItem; volumeItem.progress = progress; Loading Loading @@ -545,11 +549,8 @@ public class CarVolumeDialogImpl implements VolumeDialog { Animator inAnimator; if (mExpanded) { for (int groupId = 0; groupId < mAvailableVolumeItems.size(); ++groupId) { // Adding the items which are not coming from the default item. if (groupId != mCurrentlyDisplayingGroupId) { VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); if (volumeItem.defaultItem) { updateDefaultVolumeItem(volumeItem.carVolumeItem); } else { addCarVolumeListItem(volumeItem, groupId, 0, null); } } Loading @@ -561,11 +562,8 @@ public class CarVolumeDialogImpl implements VolumeDialog { Iterator itr = mCarVolumeLineItems.iterator(); while (itr.hasNext()) { CarVolumeItem carVolumeItem = (CarVolumeItem) itr.next(); VolumeItem volumeItem = findVolumeItem(carVolumeItem); if (!volumeItem.defaultItem) { if (carVolumeItem.getGroupId() != mCurrentlyDisplayingGroupId) { itr.remove(); } else { updateDefaultVolumeItem(carVolumeItem); } } inAnimator = AnimatorInflater.loadAnimator( Loading @@ -587,21 +585,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { mVolumeItemsAdapter.notifyDataSetChanged(); } private void updateDefaultVolumeItem(CarVolumeItem carVolumeItem) { VolumeItem volumeItem = findVolumeItem(carVolumeItem); // When volume dialog is expanded or collapsed the default list item is never // reset. Whereas all other list items are removed when the dialog is collapsed and then // added when the dialog is expanded using {@link CarVolumeDialogImpl#addCarVolumeListItem}. // This sets the progressbar and the tint color of icons for all items other than default // if they were changed. For default list item it should be done manually here. int color = mContext.getResources().getColor(R.color.car_volume_dialog_tint); Drawable primaryIcon = mContext.getResources().getDrawable(volumeItem.icon); primaryIcon.mutate().setTint(color); volumeItem.carVolumeItem.setPrimaryIcon(primaryIcon); volumeItem.carVolumeItem.setProgress(volumeItem.progress); } private final class VolumeSeekBarChangeListener implements OnSeekBarChangeListener { private final int mVolumeGroupId; Loading packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeItem.java +15 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class CarVolumeItem { private Drawable mSupplementalIcon; private View.OnClickListener mSupplementalIconOnClickListener; private boolean mShowSupplementalIconDivider; private int mGroupId; private int mMax; private int mProgress; Loading Loading @@ -85,6 +86,20 @@ public class CarVolumeItem { mIsDirty = true; } /** * Gets the group id associated. */ public int getGroupId() { return mGroupId; } /** * Sets the group id associated. */ public void setGroupId(int groupId) { this.mGroupId = groupId; } /** Sets {@code OnClickListener} for the supplemental icon. */ public void setSupplementalIconListener(View.OnClickListener listener) { mSupplementalIconOnClickListener = listener; Loading Loading
packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java +18 −35 Original line number Diff line number Diff line Loading @@ -112,17 +112,22 @@ public class CarVolumeDialogImpl implements VolumeDialog { // zoneId VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); int value = getSeekbarValue(mCarAudioManager, groupId); // find if the group id for which the volume changed is currently being // displayed. boolean isShowing = mCarVolumeLineItems.stream().anyMatch( item -> item.getGroupId() == groupId); // Do not update the progress if it is the same as before. When car audio // manager sets // its group volume caused by the seekbar progress changed, it also triggers // this // callback. Updating the seekbar at the same time could block the continuous // seeking. if (value != volumeItem.progress) { if (value != volumeItem.progress && isShowing) { volumeItem.carVolumeItem.setProgress(value); volumeItem.progress = value; } if ((flags & AudioManager.FLAG_SHOW_UI) != 0) { mCurrentlyDisplayingGroupId = groupId; mHandler.obtainMessage(H.SHOW, Events.SHOW_REASON_VOLUME_CHANGED).sendToTarget(); } Loading @@ -134,10 +139,10 @@ public class CarVolumeDialogImpl implements VolumeDialog { } }; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private boolean mShowing; private boolean mExpanded; private View mExpandIcon; private VolumeItem mDefaultVolumeItem; private final ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Loading @@ -152,8 +157,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { mAvailableVolumeItems.add(volumeItem); // The first one is the default item. if (groupId == 0) { mDefaultVolumeItem = volumeItem; setupDefaultCarVolumeItem(); setuptListItem(0); } } Loading @@ -177,9 +181,11 @@ public class CarVolumeDialogImpl implements VolumeDialog { } }; private void setupDefaultCarVolumeItem() { mDefaultVolumeItem.defaultItem = true; addCarVolumeListItem(mDefaultVolumeItem, /* volumeGroupId = */0, private void setuptListItem(int groupId) { mCarVolumeLineItems.clear(); VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); volumeItem.defaultItem = true; addCarVolumeListItem(volumeItem, /* volumeGroupId = */ groupId, R.drawable.car_ic_keyboard_arrow_down, new ExpandIconListener() ); } Loading Loading @@ -299,9 +305,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { return; } mShowing = true; if (mCarVolumeLineItems.isEmpty()) { setupDefaultCarVolumeItem(); } setuptListItem(mCurrentlyDisplayingGroupId); mDialog.show(); Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); } Loading Loading @@ -437,7 +441,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { carVolumeItem.setSupplementalIcon(/* drawable= */ null, /* showSupplementalIconDivider= */ false); } carVolumeItem.setGroupId(volumeGroupId); mCarVolumeLineItems.add(carVolumeItem); volumeItem.carVolumeItem = carVolumeItem; volumeItem.progress = progress; Loading Loading @@ -545,11 +549,8 @@ public class CarVolumeDialogImpl implements VolumeDialog { Animator inAnimator; if (mExpanded) { for (int groupId = 0; groupId < mAvailableVolumeItems.size(); ++groupId) { // Adding the items which are not coming from the default item. if (groupId != mCurrentlyDisplayingGroupId) { VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); if (volumeItem.defaultItem) { updateDefaultVolumeItem(volumeItem.carVolumeItem); } else { addCarVolumeListItem(volumeItem, groupId, 0, null); } } Loading @@ -561,11 +562,8 @@ public class CarVolumeDialogImpl implements VolumeDialog { Iterator itr = mCarVolumeLineItems.iterator(); while (itr.hasNext()) { CarVolumeItem carVolumeItem = (CarVolumeItem) itr.next(); VolumeItem volumeItem = findVolumeItem(carVolumeItem); if (!volumeItem.defaultItem) { if (carVolumeItem.getGroupId() != mCurrentlyDisplayingGroupId) { itr.remove(); } else { updateDefaultVolumeItem(carVolumeItem); } } inAnimator = AnimatorInflater.loadAnimator( Loading @@ -587,21 +585,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { mVolumeItemsAdapter.notifyDataSetChanged(); } private void updateDefaultVolumeItem(CarVolumeItem carVolumeItem) { VolumeItem volumeItem = findVolumeItem(carVolumeItem); // When volume dialog is expanded or collapsed the default list item is never // reset. Whereas all other list items are removed when the dialog is collapsed and then // added when the dialog is expanded using {@link CarVolumeDialogImpl#addCarVolumeListItem}. // This sets the progressbar and the tint color of icons for all items other than default // if they were changed. For default list item it should be done manually here. int color = mContext.getResources().getColor(R.color.car_volume_dialog_tint); Drawable primaryIcon = mContext.getResources().getDrawable(volumeItem.icon); primaryIcon.mutate().setTint(color); volumeItem.carVolumeItem.setPrimaryIcon(primaryIcon); volumeItem.carVolumeItem.setProgress(volumeItem.progress); } private final class VolumeSeekBarChangeListener implements OnSeekBarChangeListener { private final int mVolumeGroupId; Loading
packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeItem.java +15 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class CarVolumeItem { private Drawable mSupplementalIcon; private View.OnClickListener mSupplementalIconOnClickListener; private boolean mShowSupplementalIconDivider; private int mGroupId; private int mMax; private int mProgress; Loading Loading @@ -85,6 +86,20 @@ public class CarVolumeItem { mIsDirty = true; } /** * Gets the group id associated. */ public int getGroupId() { return mGroupId; } /** * Sets the group id associated. */ public void setGroupId(int groupId) { this.mGroupId = groupId; } /** Sets {@code OnClickListener} for the supplemental icon. */ public void setSupplementalIconListener(View.OnClickListener listener) { mSupplementalIconOnClickListener = listener; Loading