Loading packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java +59 −51 Original line number Diff line number Diff line Loading @@ -62,7 +62,6 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** Loading Loading @@ -91,12 +90,21 @@ public class CarVolumeDialogImpl implements VolumeDialog { // Volume items in the RecyclerView. private final List<CarVolumeItem> mCarVolumeLineItems = new ArrayList<>(); private final KeyguardManager mKeyguard; private Window mWindow; private CustomDialog mDialog; private RecyclerView mListView; private CarVolumeItemAdapter mVolumeItemsAdapter; private Car mCar; private CarAudioManager mCarAudioManager; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private int mPreviouslyDisplayingGroupId; private boolean mShowing; private boolean mDismissing; private boolean mExpanded; private View mExpandIcon; private final CarAudioManager.CarVolumeCallback mVolumeChangeCallback = new CarAudioManager.CarVolumeCallback() { @Override Loading Loading @@ -126,6 +134,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { volumeItem.progress = value; } if ((flags & AudioManager.FLAG_SHOW_UI) != 0) { mPreviouslyDisplayingGroupId = mCurrentlyDisplayingGroupId; mCurrentlyDisplayingGroupId = groupId; mHandler.obtainMessage(H.SHOW, Events.SHOW_REASON_VOLUME_CHANGED).sendToTarget(); Loading @@ -137,12 +146,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { // ignored } }; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private boolean mShowing; private boolean mDismissing; private boolean mExpanded; private View mExpandIcon; private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { Loading @@ -158,7 +161,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { mAvailableVolumeItems.add(volumeItem); // The first one is the default item. if (groupId == 0) { setuptListItem(0); clearAllAndSetupDefaultCarVolumeLineItem(0); } } Loading @@ -169,15 +172,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { mCarAudioManager.registerCarVolumeCallback(mVolumeChangeCallback); }; 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() ); } public CarVolumeDialogImpl(Context context) { mContext = context; mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); Loading @@ -204,7 +198,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { @Override public void destroy() { mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(/* token= */ null); cleanupAudioManager(); // unregisterVolumeCallback is not being called when disconnect car, so we manually cleanup Loading Loading @@ -280,19 +274,36 @@ public class CarVolumeDialogImpl implements VolumeDialog { mHandler.removeMessages(H.SHOW); mHandler.removeMessages(H.DISMISS); rescheduleTimeoutH(); // Refresh the data set before showing. mVolumeItemsAdapter.notifyDataSetChanged(); if (mShowing) { if (mPreviouslyDisplayingGroupId == mCurrentlyDisplayingGroupId || mExpanded) { return; } clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); return; } mShowing = true; setuptListItem(mCurrentlyDisplayingGroupId); clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); mDialog.show(); Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); } private void rescheduleTimeoutH() { private void clearAllAndSetupDefaultCarVolumeLineItem(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()); } protected void rescheduleTimeoutH() { mHandler.removeMessages(H.DISMISS); final int timeout = computeTimeoutH(); mHandler.sendMessageDelayed(mHandler Loading Loading @@ -366,12 +377,13 @@ public class CarVolumeDialogImpl implements VolumeDialog { if (XML_TAG_VOLUME_ITEM.equals(parser.getName())) { TypedArray item = mContext.getResources().obtainAttributes( attrs, R.styleable.carVolumeItems_item); int usage = item.getInt(R.styleable.carVolumeItems_item_usage, -1); int usage = item.getInt(R.styleable.carVolumeItems_item_usage, /* defValue= */ -1); if (usage >= 0) { VolumeItem volumeItem = new VolumeItem(); volumeItem.rank = rank; volumeItem.icon = item.getResourceId(R.styleable.carVolumeItems_item_icon, 0); volumeItem.icon = item.getResourceId( R.styleable.carVolumeItems_item_icon, /* defValue= */ 0); mVolumeItems.put(usage, volumeItem); rank++; } Loading @@ -396,22 +408,22 @@ public class CarVolumeDialogImpl implements VolumeDialog { return result; } private CarVolumeItem addCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, int supplementalIconId, private CarVolumeItem createCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, Drawable supplementalIcon, int seekbarProgressValue, @Nullable View.OnClickListener supplementalIconOnClickListener) { CarVolumeItem carVolumeItem = new CarVolumeItem(); carVolumeItem.setMax(getMaxSeekbarValue(mCarAudioManager, volumeGroupId)); int color = mContext.getResources().getColor(R.color.car_volume_dialog_tint); int progress = getSeekbarValue(mCarAudioManager, volumeGroupId); carVolumeItem.setProgress(progress); carVolumeItem.setProgress(seekbarProgressValue); carVolumeItem.setOnSeekBarChangeListener( new CarVolumeDialogImpl.VolumeSeekBarChangeListener(volumeGroupId, mCarAudioManager)); Drawable primaryIcon = mContext.getResources().getDrawable(volumeItem.icon); carVolumeItem.setGroupId(volumeGroupId); int color = mContext.getColor(R.color.car_volume_dialog_tint); Drawable primaryIcon = mContext.getDrawable(volumeItem.icon); primaryIcon.mutate().setTint(color); carVolumeItem.setPrimaryIcon(primaryIcon); if (supplementalIconId != 0) { Drawable supplementalIcon = mContext.getResources().getDrawable(supplementalIconId); if (supplementalIcon != null) { supplementalIcon.mutate().setTint(color); carVolumeItem.setSupplementalIcon(supplementalIcon, /* showSupplementalIconDivider= */ true); Loading @@ -420,21 +432,23 @@ public class CarVolumeDialogImpl implements VolumeDialog { carVolumeItem.setSupplementalIcon(/* drawable= */ null, /* showSupplementalIconDivider= */ false); } carVolumeItem.setGroupId(volumeGroupId); mCarVolumeLineItems.add(carVolumeItem); volumeItem.carVolumeItem = carVolumeItem; volumeItem.progress = progress; volumeItem.progress = seekbarProgressValue; return carVolumeItem; } private VolumeItem findVolumeItem(CarVolumeItem targetItem) { for (int i = 0; i < mVolumeItems.size(); ++i) { VolumeItem volumeItem = mVolumeItems.valueAt(i); if (volumeItem.carVolumeItem == targetItem) { return volumeItem; } } return null; private CarVolumeItem addCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, int supplementalIconId, @Nullable View.OnClickListener supplementalIconOnClickListener) { int seekbarProgressValue = getSeekbarValue(mCarAudioManager, volumeGroupId); Drawable supplementalIcon = supplementalIconId == 0 ? null : mContext.getDrawable( supplementalIconId); CarVolumeItem carVolumeItem = createCarVolumeListItem(volumeItem, volumeGroupId, supplementalIcon, seekbarProgressValue, supplementalIconOnClickListener); mCarVolumeLineItems.add(carVolumeItem); return carVolumeItem; } private void cleanupAudioManager() { Loading Loading @@ -530,21 +544,15 @@ public class CarVolumeDialogImpl implements VolumeDialog { for (int groupId = 0; groupId < mAvailableVolumeItems.size(); ++groupId) { if (groupId != mCurrentlyDisplayingGroupId) { VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); addCarVolumeListItem(volumeItem, groupId, 0, null); addCarVolumeListItem(volumeItem, groupId, /* supplementalIconId= */ 0, /* supplementalIconOnClickListener= */ null); } } inAnimator = AnimatorInflater.loadAnimator( mContext, R.anim.car_arrow_fade_in_rotate_up); } else { // Only keeping the default stream if it is not expended. Iterator itr = mCarVolumeLineItems.iterator(); while (itr.hasNext()) { CarVolumeItem carVolumeItem = (CarVolumeItem) itr.next(); if (carVolumeItem.getGroupId() != mCurrentlyDisplayingGroupId) { itr.remove(); } } clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); inAnimator = AnimatorInflater.loadAnimator( mContext, R.anim.car_arrow_fade_in_rotate_down); } Loading Loading
packages/CarSystemUI/src/com/android/systemui/volume/CarVolumeDialogImpl.java +59 −51 Original line number Diff line number Diff line Loading @@ -62,7 +62,6 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** Loading Loading @@ -91,12 +90,21 @@ public class CarVolumeDialogImpl implements VolumeDialog { // Volume items in the RecyclerView. private final List<CarVolumeItem> mCarVolumeLineItems = new ArrayList<>(); private final KeyguardManager mKeyguard; private Window mWindow; private CustomDialog mDialog; private RecyclerView mListView; private CarVolumeItemAdapter mVolumeItemsAdapter; private Car mCar; private CarAudioManager mCarAudioManager; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private int mPreviouslyDisplayingGroupId; private boolean mShowing; private boolean mDismissing; private boolean mExpanded; private View mExpandIcon; private final CarAudioManager.CarVolumeCallback mVolumeChangeCallback = new CarAudioManager.CarVolumeCallback() { @Override Loading Loading @@ -126,6 +134,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { volumeItem.progress = value; } if ((flags & AudioManager.FLAG_SHOW_UI) != 0) { mPreviouslyDisplayingGroupId = mCurrentlyDisplayingGroupId; mCurrentlyDisplayingGroupId = groupId; mHandler.obtainMessage(H.SHOW, Events.SHOW_REASON_VOLUME_CHANGED).sendToTarget(); Loading @@ -137,12 +146,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { // ignored } }; private boolean mHovering; private int mCurrentlyDisplayingGroupId; private boolean mShowing; private boolean mDismissing; private boolean mExpanded; private View mExpandIcon; private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { Loading @@ -158,7 +161,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { mAvailableVolumeItems.add(volumeItem); // The first one is the default item. if (groupId == 0) { setuptListItem(0); clearAllAndSetupDefaultCarVolumeLineItem(0); } } Loading @@ -169,15 +172,6 @@ public class CarVolumeDialogImpl implements VolumeDialog { mCarAudioManager.registerCarVolumeCallback(mVolumeChangeCallback); }; 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() ); } public CarVolumeDialogImpl(Context context) { mContext = context; mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); Loading @@ -204,7 +198,7 @@ public class CarVolumeDialogImpl implements VolumeDialog { @Override public void destroy() { mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(/* token= */ null); cleanupAudioManager(); // unregisterVolumeCallback is not being called when disconnect car, so we manually cleanup Loading Loading @@ -280,19 +274,36 @@ public class CarVolumeDialogImpl implements VolumeDialog { mHandler.removeMessages(H.SHOW); mHandler.removeMessages(H.DISMISS); rescheduleTimeoutH(); // Refresh the data set before showing. mVolumeItemsAdapter.notifyDataSetChanged(); if (mShowing) { if (mPreviouslyDisplayingGroupId == mCurrentlyDisplayingGroupId || mExpanded) { return; } clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); return; } mShowing = true; setuptListItem(mCurrentlyDisplayingGroupId); clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); mDialog.show(); Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); } private void rescheduleTimeoutH() { private void clearAllAndSetupDefaultCarVolumeLineItem(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()); } protected void rescheduleTimeoutH() { mHandler.removeMessages(H.DISMISS); final int timeout = computeTimeoutH(); mHandler.sendMessageDelayed(mHandler Loading Loading @@ -366,12 +377,13 @@ public class CarVolumeDialogImpl implements VolumeDialog { if (XML_TAG_VOLUME_ITEM.equals(parser.getName())) { TypedArray item = mContext.getResources().obtainAttributes( attrs, R.styleable.carVolumeItems_item); int usage = item.getInt(R.styleable.carVolumeItems_item_usage, -1); int usage = item.getInt(R.styleable.carVolumeItems_item_usage, /* defValue= */ -1); if (usage >= 0) { VolumeItem volumeItem = new VolumeItem(); volumeItem.rank = rank; volumeItem.icon = item.getResourceId(R.styleable.carVolumeItems_item_icon, 0); volumeItem.icon = item.getResourceId( R.styleable.carVolumeItems_item_icon, /* defValue= */ 0); mVolumeItems.put(usage, volumeItem); rank++; } Loading @@ -396,22 +408,22 @@ public class CarVolumeDialogImpl implements VolumeDialog { return result; } private CarVolumeItem addCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, int supplementalIconId, private CarVolumeItem createCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, Drawable supplementalIcon, int seekbarProgressValue, @Nullable View.OnClickListener supplementalIconOnClickListener) { CarVolumeItem carVolumeItem = new CarVolumeItem(); carVolumeItem.setMax(getMaxSeekbarValue(mCarAudioManager, volumeGroupId)); int color = mContext.getResources().getColor(R.color.car_volume_dialog_tint); int progress = getSeekbarValue(mCarAudioManager, volumeGroupId); carVolumeItem.setProgress(progress); carVolumeItem.setProgress(seekbarProgressValue); carVolumeItem.setOnSeekBarChangeListener( new CarVolumeDialogImpl.VolumeSeekBarChangeListener(volumeGroupId, mCarAudioManager)); Drawable primaryIcon = mContext.getResources().getDrawable(volumeItem.icon); carVolumeItem.setGroupId(volumeGroupId); int color = mContext.getColor(R.color.car_volume_dialog_tint); Drawable primaryIcon = mContext.getDrawable(volumeItem.icon); primaryIcon.mutate().setTint(color); carVolumeItem.setPrimaryIcon(primaryIcon); if (supplementalIconId != 0) { Drawable supplementalIcon = mContext.getResources().getDrawable(supplementalIconId); if (supplementalIcon != null) { supplementalIcon.mutate().setTint(color); carVolumeItem.setSupplementalIcon(supplementalIcon, /* showSupplementalIconDivider= */ true); Loading @@ -420,21 +432,23 @@ public class CarVolumeDialogImpl implements VolumeDialog { carVolumeItem.setSupplementalIcon(/* drawable= */ null, /* showSupplementalIconDivider= */ false); } carVolumeItem.setGroupId(volumeGroupId); mCarVolumeLineItems.add(carVolumeItem); volumeItem.carVolumeItem = carVolumeItem; volumeItem.progress = progress; volumeItem.progress = seekbarProgressValue; return carVolumeItem; } private VolumeItem findVolumeItem(CarVolumeItem targetItem) { for (int i = 0; i < mVolumeItems.size(); ++i) { VolumeItem volumeItem = mVolumeItems.valueAt(i); if (volumeItem.carVolumeItem == targetItem) { return volumeItem; } } return null; private CarVolumeItem addCarVolumeListItem(VolumeItem volumeItem, int volumeGroupId, int supplementalIconId, @Nullable View.OnClickListener supplementalIconOnClickListener) { int seekbarProgressValue = getSeekbarValue(mCarAudioManager, volumeGroupId); Drawable supplementalIcon = supplementalIconId == 0 ? null : mContext.getDrawable( supplementalIconId); CarVolumeItem carVolumeItem = createCarVolumeListItem(volumeItem, volumeGroupId, supplementalIcon, seekbarProgressValue, supplementalIconOnClickListener); mCarVolumeLineItems.add(carVolumeItem); return carVolumeItem; } private void cleanupAudioManager() { Loading Loading @@ -530,21 +544,15 @@ public class CarVolumeDialogImpl implements VolumeDialog { for (int groupId = 0; groupId < mAvailableVolumeItems.size(); ++groupId) { if (groupId != mCurrentlyDisplayingGroupId) { VolumeItem volumeItem = mAvailableVolumeItems.get(groupId); addCarVolumeListItem(volumeItem, groupId, 0, null); addCarVolumeListItem(volumeItem, groupId, /* supplementalIconId= */ 0, /* supplementalIconOnClickListener= */ null); } } inAnimator = AnimatorInflater.loadAnimator( mContext, R.anim.car_arrow_fade_in_rotate_up); } else { // Only keeping the default stream if it is not expended. Iterator itr = mCarVolumeLineItems.iterator(); while (itr.hasNext()) { CarVolumeItem carVolumeItem = (CarVolumeItem) itr.next(); if (carVolumeItem.getGroupId() != mCurrentlyDisplayingGroupId) { itr.remove(); } } clearAllAndSetupDefaultCarVolumeLineItem(mCurrentlyDisplayingGroupId); inAnimator = AnimatorInflater.loadAnimator( mContext, R.anim.car_arrow_fade_in_rotate_down); } Loading