Loading packages/SystemUI/res/values/strings.xml +12 −13 Original line number Diff line number Diff line Loading @@ -1121,19 +1121,18 @@ <!-- Toast shown when user unlocks screen and managed profile activity is in the foreground --> <string name="managed_profile_foreground_toast">You\'re using your work profile</string> <string-array name="volume_stream_titles"> <item>Call</item> <!-- STREAM_VOICE_CALL --> <item>System</item> <!-- STREAM_SYSTEM --> <item>Ring</item> <!-- STREAM_RING --> <item>Media</item> <!-- STREAM_MUSIC --> <item>Alarm</item> <!-- STREAM_ALARM --> <item></item> <!-- STREAM_NOTIFICATION --> <item>Bluetooth</item> <!-- STREAM_BLUETOOTH_SCO --> <item></item> <!-- STREAM_SYSTEM_ENFORCED --> <item></item> <!-- STREAM_DTMF --> <item></item> <!-- STREAM_TTS --> <item>Accessibility</item> <!-- STREAM_ACCESSIBILITY --> </string-array> <!-- volume stream names. All nouns. --> <string name="stream_voice_call">Call</string> <!-- STREAM_VOICE_CALL --> <string name="stream_system">System</string> <!-- STREAM_SYSTEM --> <string name="stream_ring">Ring</string> <!-- STREAM_RING --> <string name="stream_music">Media</string> <!-- STREAM_MUSIC --> <string name="stream_alarm">Alarm</string> <!-- STREAM_ALARM --> <string name="stream_notification">Notification</string> <!-- STREAM_NOTIFICATION --> <string name="stream_bluetooth_sco">Bluetooth</string> <!-- STREAM_BLUETOOTH_SCO --> <string name="stream_system_enforced">System enforced</string> <!-- STREAM_SYSTEM_ENFORCED --> <string name="stream_dtmf">Dual multi tone frequency</string> <!-- STREAM_DTMF --> <string name="stream_tts">Text to speech</string> <!-- STREAM_TTS --> <string name="stream_accessibility">Accessibility</string> <!-- STREAM_ACCESSIBILITY --> <string name="volume_stream_muted" translatable="false">%s silent</string> <string name="volume_stream_vibrate" translatable="false">%s vibrate</string> Loading packages/SystemUI/src/com/android/systemui/volume/SpTexts.java→packages/SystemUI/src/com/android/systemui/volume/ConfigurableTexts.java +22 −4 Original line number Diff line number Diff line Loading @@ -25,19 +25,23 @@ import android.view.View.OnAttachStateChangeListener; import android.widget.TextView; /** * Capture initial sp values for registered textviews, and update properly when configuration * changes. * Class for updating textviews on configuration change. */ public class SpTexts { public class ConfigurableTexts { private final Context mContext; private final ArrayMap<TextView, Integer> mTexts = new ArrayMap<>(); private final ArrayMap<TextView, Integer> mTextLabels = new ArrayMap<>(); public SpTexts(Context context) { public ConfigurableTexts(Context context) { mContext = context; } public int add(final TextView text) { return add(text, -1); } public int add(final TextView text, final int labelResId) { if (text == null) return 0; final Resources res = mContext.getResources(); final float fontScale = res.getConfiguration().fontScale; Loading @@ -55,6 +59,7 @@ public class SpTexts { setTextSizeH(text, sp); } }); mTextLabels.put(text, labelResId); return sp; } Loading @@ -67,12 +72,25 @@ public class SpTexts { text.setTextSize(TypedValue.COMPLEX_UNIT_SP, sp); } private void setTextLabelH(TextView text, int labelResId) { try { if (labelResId >= 0) { Util.setText(text, mContext.getString(labelResId)); } } catch (Resources.NotFoundException e) { // oh well. } } private final Runnable mUpdateAll = new Runnable() { @Override public void run() { for (int i = 0; i < mTexts.size(); i++) { setTextSizeH(mTexts.keyAt(i), mTexts.valueAt(i)); } for (int i = 0; i < mTextLabels.size(); i++) { setTextLabelH(mTextLabels.keyAt(i), mTextLabels.valueAt(i)); } } }; } packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java +5 −9 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ public class SegmentedButtons extends LinearLayout { private final Context mContext; protected final LayoutInflater mInflater; private final SpTexts mSpTexts; private final ConfigurableTexts mConfigurableTexts; private Callback mCallback; protected Object mSelectedValue; Loading @@ -46,7 +46,7 @@ public class SegmentedButtons extends LinearLayout { mContext = context; mInflater = LayoutInflater.from(mContext); setOrientation(HORIZONTAL); mSpTexts = new SpTexts(mContext); mConfigurableTexts = new ConfigurableTexts(mContext); } public void setCallback(Callback callback) { Loading Loading @@ -97,15 +97,11 @@ public class SegmentedButtons extends LinearLayout { fireInteraction(); } }); mSpTexts.add(b); mConfigurableTexts.add(b, labelResId); } public void updateLocale() { for (int i = 0; i < getChildCount(); i++) { final Button b = (Button) getChildAt(i); final int labelResId = (Integer) b.getTag(LABEL_RES_KEY); b.setText(labelResId); } public void update() { mConfigurableTexts.update(); } private void fireOnSelected(boolean fromClick) { Loading packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java +26 −35 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.transition.Transition; import android.transition.TransitionManager; import android.util.DisplayMetrics; import android.util.Log; import android.util.Slog; import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.MotionEvent; Loading Loading @@ -109,7 +110,7 @@ public class VolumeDialog implements TunerService.Tunable { private ViewGroup mDialogContentView; private ImageButton mExpandButton; private final List<VolumeRow> mRows = new ArrayList<>(); private SpTexts mSpTexts; private ConfigurableTexts mConfigurableTexts; private final SparseBooleanArray mDynamic = new SparseBooleanArray(); private final KeyguardManager mKeyguard; private final AudioManager mAudioManager; Loading @@ -128,7 +129,6 @@ public class VolumeDialog implements TunerService.Tunable { private boolean mExpanded; private int mActiveStream; private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE; private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE; private State mState; Loading Loading @@ -173,7 +173,7 @@ public class VolumeDialog implements TunerService.Tunable { private void initDialog() { mDialog = new CustomDialog(mContext); mSpTexts = new SpTexts(mContext); mConfigurableTexts = new ConfigurableTexts(mContext); mHovering = false; mShowing = false; mWindow = mDialog.getWindow(); Loading Loading @@ -294,12 +294,6 @@ public class VolumeDialog implements TunerService.Tunable { mHandler.obtainMessage(H.SET_STREAM_IMPORTANT, stream, important ? 1 : 0).sendToTarget(); } public void setShowHeaders(boolean showHeaders) { if (showHeaders == mShowHeaders) return; mShowHeaders = showHeaders; mHandler.sendEmptyMessage(H.RECHECK_ALL); } public void setAutomute(boolean automute) { if (mAutomute == automute) return; mAutomute = automute; Loading Loading @@ -357,7 +351,6 @@ public class VolumeDialog implements TunerService.Tunable { writer.println(mExpandButtonAnimationRunning); writer.print(" mActiveStream: "); writer.println(mActiveStream); writer.print(" mDynamic: "); writer.println(mDynamic); writer.print(" mShowHeaders: "); writer.println(mShowHeaders); writer.print(" mAutomute: "); writer.println(mAutomute); writer.print(" mSilentMode: "); writer.println(mSilentMode); writer.print(" mCollapseTime: "); writer.println(mCollapseTime); Loading Loading @@ -385,11 +378,9 @@ public class VolumeDialog implements TunerService.Tunable { row.view.setTag(row); row.header = (TextView) row.view.findViewById(R.id.volume_row_header); row.header.setId(20 * row.stream); mSpTexts.add(row.header); row.slider = (SeekBar) row.view.findViewById(R.id.volume_row_slider); row.slider.setOnSeekBarChangeListener(new VolumeSeekBarChangeListener(row)); row.anim = null; row.cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; // forward events above the slider into the slider row.view.setOnTouchListener(new OnTouchListener() { Loading Loading @@ -617,8 +608,8 @@ public class VolumeDialog implements TunerService.Tunable { final boolean isActive = row == activeRow; final boolean shouldBeVisible = shouldBeVisibleH(row, isActive); Util.setVisOrGone(row.view, shouldBeVisible); Util.setVisOrGone(row.header, shouldBeVisible); if (row.view.isShown()) { updateVolumeRowHeaderVisibleH(row); updateVolumeRowSliderTintH(row, isActive); } } Loading Loading @@ -731,11 +722,9 @@ public class VolumeDialog implements TunerService.Tunable { row.slider.setMax(max); } // update header visible updateVolumeRowHeaderVisibleH(row); // update header text Util.setText(row.header, ss.name); Util.setText(row.header, getStreamLabelH(ss)); mConfigurableTexts.add(row.header, ss.name); // update icon final boolean iconEnabled = (mAutomute || ss.muteSupported) && !zenMuted; Loading Loading @@ -768,31 +757,31 @@ public class VolumeDialog implements TunerService.Tunable { if (isRingVibrate) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_unmute, ss.name)); getStreamLabelH(ss))); } else { if (mController.hasVibrator()) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_vibrate, ss.name)); getStreamLabelH(ss))); } else { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_mute, ss.name)); getStreamLabelH(ss))); } } } else { if (ss.muted || mAutomute && ss.level == 0) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_unmute, ss.name)); getStreamLabelH(ss))); } else { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_mute, ss.name)); getStreamLabelH(ss))); } } } else { row.icon.setContentDescription(ss.name); row.icon.setContentDescription(getStreamLabelH(ss)); } // update slider Loading @@ -802,15 +791,6 @@ public class VolumeDialog implements TunerService.Tunable { updateVolumeRowSliderH(row, enableSlider, vlevel); } private void updateVolumeRowHeaderVisibleH(VolumeRow row) { final boolean dynamic = row.ss != null && row.ss.dynamic; final boolean showHeaders = mExpanded && (mShowHeaders || dynamic); if (row.cachedShowHeaders != showHeaders) { row.cachedShowHeaders = showHeaders; Util.setVisOrGone(row.header, showHeaders); } } private void updateVolumeRowSliderTintH(VolumeRow row, boolean isActive) { if (isActive && mExpanded) { row.slider.requestFocus(); Loading Loading @@ -920,6 +900,18 @@ public class VolumeDialog implements TunerService.Tunable { rescheduleTimeoutH(); } private String getStreamLabelH(StreamState ss) { if (ss.remoteLabel != null) { return ss.remoteLabel; } try { return mContext.getString(ss.name); } catch (Resources.NotFoundException e) { Slog.e(TAG, "Can't find translation for stream " + ss); return ""; } } private AutoTransition getTransistion() { AutoTransition transition = new AutoTransition(); transition.setDuration(mExpandButtonAnimationDuration); Loading Loading @@ -995,7 +987,7 @@ public class VolumeDialog implements TunerService.Tunable { mDensity = density; } updateWindowWidthH(); mSpTexts.update(); mConfigurableTexts.update(); mZenFooter.onConfigurationChanged(); } Loading Loading @@ -1125,7 +1117,7 @@ public class VolumeDialog implements TunerService.Tunable { if (mShowing) { event.getText().add(mContext.getString( R.string.volume_dialog_accessibility_shown_message, getActiveRow().ss.name)); getStreamLabelH(getActiveRow().ss))); return true; } } Loading Loading @@ -1253,7 +1245,6 @@ public class VolumeDialog implements TunerService.Tunable { private int cachedIconRes; private ColorStateList cachedSliderTint; private int iconState; // from Events private boolean cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; private ObjectAnimator anim; // slider progress animation for non-touch-related updates private int animTargetProgress; private int lastAudibleLevel = 1; Loading packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java +24 −39 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.volume; import android.annotation.IntegerRes; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ComponentName; Loading @@ -41,6 +42,7 @@ import android.os.RemoteException; import android.os.Vibrator; import android.provider.Settings; import android.service.notification.Condition; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; Loading @@ -67,19 +69,20 @@ public class VolumeDialogController { private static final int DYNAMIC_STREAM_START_INDEX = 100; private static final int VIBRATE_HINT_DURATION = 50; private static final int[] STREAMS = { AudioSystem.STREAM_ALARM, AudioSystem.STREAM_BLUETOOTH_SCO, AudioSystem.STREAM_DTMF, AudioSystem.STREAM_MUSIC, AudioSystem.STREAM_NOTIFICATION, AudioSystem.STREAM_RING, AudioSystem.STREAM_SYSTEM, AudioSystem.STREAM_SYSTEM_ENFORCED, AudioSystem.STREAM_TTS, AudioSystem.STREAM_VOICE_CALL, AudioSystem.STREAM_ACCESSIBILITY, }; private static final ArrayMap<Integer, Integer> STREAMS = new ArrayMap<>(); static { STREAMS.put(AudioSystem.STREAM_ALARM, R.string.stream_alarm); STREAMS.put(AudioSystem.STREAM_BLUETOOTH_SCO, R.string.stream_bluetooth_sco); STREAMS.put(AudioSystem.STREAM_DTMF, R.string.stream_dtmf); STREAMS.put(AudioSystem.STREAM_MUSIC, R.string.stream_music); STREAMS.put(AudioSystem.STREAM_NOTIFICATION, R.string.stream_notification); STREAMS.put(AudioSystem.STREAM_RING, R.string.stream_ring); STREAMS.put(AudioSystem.STREAM_SYSTEM, R.string.stream_system); STREAMS.put(AudioSystem.STREAM_SYSTEM_ENFORCED, R.string.stream_system_enforced); STREAMS.put(AudioSystem.STREAM_TTS, R.string.stream_tts); STREAMS.put(AudioSystem.STREAM_VOICE_CALL, R.string.stream_voice_call); STREAMS.put(AudioSystem.STREAM_ACCESSIBILITY, R.string.stream_accessibility); } private final HandlerThread mWorkerThread; private final W mWorker; Loading @@ -92,7 +95,6 @@ public class VolumeDialogController { private final MediaSessions mMediaSessions; private final C mCallbacks = new C(); private final State mState = new State(); private final String[] mStreamTitles; private final MediaSessionsCallbacks mMediaSessionsCallbacksW = new MediaSessionsCallbacks(); private final Vibrator mVibrator; private final boolean mHasVibrator; Loading Loading @@ -120,26 +122,6 @@ public class VolumeDialogController { mObserver = new SettingObserver(mWorker); mObserver.init(); mReceiver.init(); final String[] titles = mContext.getResources().getStringArray(R.array.volume_stream_titles); if (STREAMS.length == titles.length) { mStreamTitles = titles; } else if (STREAMS.length > titles.length) { Log.e(TAG, String.format("Missing stream titles (found %d, expected %d): " + " invalid resources for volume_stream_titles", titles.length, STREAMS.length)); mStreamTitles = new String[STREAMS.length]; System.arraycopy(titles, 0, mStreamTitles, 0, titles.length); for (int i = titles.length ; i < STREAMS.length ; i++) { mStreamTitles[i] = ""; } } else { // STREAMS.length < titles.length Log.e(TAG, String.format("Too many stream titles (found %d, expected %d): " + " invalid resources for volume_stream_titles", titles.length, STREAMS.length)); mStreamTitles = new String[STREAMS.length]; System.arraycopy(titles, 0, mStreamTitles, 0, STREAMS.length); } mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); mHasVibrator = mVibrator != null && mVibrator.hasVibrator(); } Loading Loading @@ -385,14 +367,14 @@ public class VolumeDialogController { } private void onGetStateW() { for (int stream : STREAMS) { for (int stream : STREAMS.keySet()) { updateStreamLevelW(stream, getAudioManagerStreamVolume(stream)); streamStateW(stream).levelMin = getAudioManagerStreamMinVolume(stream); streamStateW(stream).levelMax = getAudioManagerStreamMaxVolume(stream); updateStreamMuteW(stream, mAudio.isStreamMute(stream)); final StreamState ss = streamStateW(stream); ss.muteSupported = mAudio.isStreamAffectedByMute(stream); ss.name = mStreamTitles[stream]; ss.name = STREAMS.get(stream); checkRoutedToBluetoothW(stream); } updateRingerModeExternalW(mAudio.getRingerMode()); Loading Loading @@ -912,8 +894,9 @@ public class VolumeDialogController { ss.level = pi.getCurrentVolume(); changed = true; } if (!Objects.equals(ss.name, name)) { ss.name = name; if (!Objects.equals(ss.remoteLabel, name)) { ss.name = -1; ss.remoteLabel = name; changed = true; } if (changed) { Loading Loading @@ -975,7 +958,8 @@ public class VolumeDialogController { public int levelMax; public boolean muted; public boolean muteSupported; public String name; public @IntegerRes int name; public String remoteLabel; public boolean routedToBluetooth; public StreamState copy() { Loading @@ -987,6 +971,7 @@ public class VolumeDialogController { rt.muted = muted; rt.muteSupported = muteSupported; rt.name = name; rt.remoteLabel = remoteLabel; rt.routedToBluetooth = routedToBluetooth; return rt; } Loading Loading
packages/SystemUI/res/values/strings.xml +12 −13 Original line number Diff line number Diff line Loading @@ -1121,19 +1121,18 @@ <!-- Toast shown when user unlocks screen and managed profile activity is in the foreground --> <string name="managed_profile_foreground_toast">You\'re using your work profile</string> <string-array name="volume_stream_titles"> <item>Call</item> <!-- STREAM_VOICE_CALL --> <item>System</item> <!-- STREAM_SYSTEM --> <item>Ring</item> <!-- STREAM_RING --> <item>Media</item> <!-- STREAM_MUSIC --> <item>Alarm</item> <!-- STREAM_ALARM --> <item></item> <!-- STREAM_NOTIFICATION --> <item>Bluetooth</item> <!-- STREAM_BLUETOOTH_SCO --> <item></item> <!-- STREAM_SYSTEM_ENFORCED --> <item></item> <!-- STREAM_DTMF --> <item></item> <!-- STREAM_TTS --> <item>Accessibility</item> <!-- STREAM_ACCESSIBILITY --> </string-array> <!-- volume stream names. All nouns. --> <string name="stream_voice_call">Call</string> <!-- STREAM_VOICE_CALL --> <string name="stream_system">System</string> <!-- STREAM_SYSTEM --> <string name="stream_ring">Ring</string> <!-- STREAM_RING --> <string name="stream_music">Media</string> <!-- STREAM_MUSIC --> <string name="stream_alarm">Alarm</string> <!-- STREAM_ALARM --> <string name="stream_notification">Notification</string> <!-- STREAM_NOTIFICATION --> <string name="stream_bluetooth_sco">Bluetooth</string> <!-- STREAM_BLUETOOTH_SCO --> <string name="stream_system_enforced">System enforced</string> <!-- STREAM_SYSTEM_ENFORCED --> <string name="stream_dtmf">Dual multi tone frequency</string> <!-- STREAM_DTMF --> <string name="stream_tts">Text to speech</string> <!-- STREAM_TTS --> <string name="stream_accessibility">Accessibility</string> <!-- STREAM_ACCESSIBILITY --> <string name="volume_stream_muted" translatable="false">%s silent</string> <string name="volume_stream_vibrate" translatable="false">%s vibrate</string> Loading
packages/SystemUI/src/com/android/systemui/volume/SpTexts.java→packages/SystemUI/src/com/android/systemui/volume/ConfigurableTexts.java +22 −4 Original line number Diff line number Diff line Loading @@ -25,19 +25,23 @@ import android.view.View.OnAttachStateChangeListener; import android.widget.TextView; /** * Capture initial sp values for registered textviews, and update properly when configuration * changes. * Class for updating textviews on configuration change. */ public class SpTexts { public class ConfigurableTexts { private final Context mContext; private final ArrayMap<TextView, Integer> mTexts = new ArrayMap<>(); private final ArrayMap<TextView, Integer> mTextLabels = new ArrayMap<>(); public SpTexts(Context context) { public ConfigurableTexts(Context context) { mContext = context; } public int add(final TextView text) { return add(text, -1); } public int add(final TextView text, final int labelResId) { if (text == null) return 0; final Resources res = mContext.getResources(); final float fontScale = res.getConfiguration().fontScale; Loading @@ -55,6 +59,7 @@ public class SpTexts { setTextSizeH(text, sp); } }); mTextLabels.put(text, labelResId); return sp; } Loading @@ -67,12 +72,25 @@ public class SpTexts { text.setTextSize(TypedValue.COMPLEX_UNIT_SP, sp); } private void setTextLabelH(TextView text, int labelResId) { try { if (labelResId >= 0) { Util.setText(text, mContext.getString(labelResId)); } } catch (Resources.NotFoundException e) { // oh well. } } private final Runnable mUpdateAll = new Runnable() { @Override public void run() { for (int i = 0; i < mTexts.size(); i++) { setTextSizeH(mTexts.keyAt(i), mTexts.valueAt(i)); } for (int i = 0; i < mTextLabels.size(); i++) { setTextLabelH(mTextLabels.keyAt(i), mTextLabels.valueAt(i)); } } }; }
packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java +5 −9 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ public class SegmentedButtons extends LinearLayout { private final Context mContext; protected final LayoutInflater mInflater; private final SpTexts mSpTexts; private final ConfigurableTexts mConfigurableTexts; private Callback mCallback; protected Object mSelectedValue; Loading @@ -46,7 +46,7 @@ public class SegmentedButtons extends LinearLayout { mContext = context; mInflater = LayoutInflater.from(mContext); setOrientation(HORIZONTAL); mSpTexts = new SpTexts(mContext); mConfigurableTexts = new ConfigurableTexts(mContext); } public void setCallback(Callback callback) { Loading Loading @@ -97,15 +97,11 @@ public class SegmentedButtons extends LinearLayout { fireInteraction(); } }); mSpTexts.add(b); mConfigurableTexts.add(b, labelResId); } public void updateLocale() { for (int i = 0; i < getChildCount(); i++) { final Button b = (Button) getChildAt(i); final int labelResId = (Integer) b.getTag(LABEL_RES_KEY); b.setText(labelResId); } public void update() { mConfigurableTexts.update(); } private void fireOnSelected(boolean fromClick) { Loading
packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java +26 −35 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.transition.Transition; import android.transition.TransitionManager; import android.util.DisplayMetrics; import android.util.Log; import android.util.Slog; import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.MotionEvent; Loading Loading @@ -109,7 +110,7 @@ public class VolumeDialog implements TunerService.Tunable { private ViewGroup mDialogContentView; private ImageButton mExpandButton; private final List<VolumeRow> mRows = new ArrayList<>(); private SpTexts mSpTexts; private ConfigurableTexts mConfigurableTexts; private final SparseBooleanArray mDynamic = new SparseBooleanArray(); private final KeyguardManager mKeyguard; private final AudioManager mAudioManager; Loading @@ -128,7 +129,6 @@ public class VolumeDialog implements TunerService.Tunable { private boolean mExpanded; private int mActiveStream; private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE; private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE; private State mState; Loading Loading @@ -173,7 +173,7 @@ public class VolumeDialog implements TunerService.Tunable { private void initDialog() { mDialog = new CustomDialog(mContext); mSpTexts = new SpTexts(mContext); mConfigurableTexts = new ConfigurableTexts(mContext); mHovering = false; mShowing = false; mWindow = mDialog.getWindow(); Loading Loading @@ -294,12 +294,6 @@ public class VolumeDialog implements TunerService.Tunable { mHandler.obtainMessage(H.SET_STREAM_IMPORTANT, stream, important ? 1 : 0).sendToTarget(); } public void setShowHeaders(boolean showHeaders) { if (showHeaders == mShowHeaders) return; mShowHeaders = showHeaders; mHandler.sendEmptyMessage(H.RECHECK_ALL); } public void setAutomute(boolean automute) { if (mAutomute == automute) return; mAutomute = automute; Loading Loading @@ -357,7 +351,6 @@ public class VolumeDialog implements TunerService.Tunable { writer.println(mExpandButtonAnimationRunning); writer.print(" mActiveStream: "); writer.println(mActiveStream); writer.print(" mDynamic: "); writer.println(mDynamic); writer.print(" mShowHeaders: "); writer.println(mShowHeaders); writer.print(" mAutomute: "); writer.println(mAutomute); writer.print(" mSilentMode: "); writer.println(mSilentMode); writer.print(" mCollapseTime: "); writer.println(mCollapseTime); Loading Loading @@ -385,11 +378,9 @@ public class VolumeDialog implements TunerService.Tunable { row.view.setTag(row); row.header = (TextView) row.view.findViewById(R.id.volume_row_header); row.header.setId(20 * row.stream); mSpTexts.add(row.header); row.slider = (SeekBar) row.view.findViewById(R.id.volume_row_slider); row.slider.setOnSeekBarChangeListener(new VolumeSeekBarChangeListener(row)); row.anim = null; row.cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; // forward events above the slider into the slider row.view.setOnTouchListener(new OnTouchListener() { Loading Loading @@ -617,8 +608,8 @@ public class VolumeDialog implements TunerService.Tunable { final boolean isActive = row == activeRow; final boolean shouldBeVisible = shouldBeVisibleH(row, isActive); Util.setVisOrGone(row.view, shouldBeVisible); Util.setVisOrGone(row.header, shouldBeVisible); if (row.view.isShown()) { updateVolumeRowHeaderVisibleH(row); updateVolumeRowSliderTintH(row, isActive); } } Loading Loading @@ -731,11 +722,9 @@ public class VolumeDialog implements TunerService.Tunable { row.slider.setMax(max); } // update header visible updateVolumeRowHeaderVisibleH(row); // update header text Util.setText(row.header, ss.name); Util.setText(row.header, getStreamLabelH(ss)); mConfigurableTexts.add(row.header, ss.name); // update icon final boolean iconEnabled = (mAutomute || ss.muteSupported) && !zenMuted; Loading Loading @@ -768,31 +757,31 @@ public class VolumeDialog implements TunerService.Tunable { if (isRingVibrate) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_unmute, ss.name)); getStreamLabelH(ss))); } else { if (mController.hasVibrator()) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_vibrate, ss.name)); getStreamLabelH(ss))); } else { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_mute, ss.name)); getStreamLabelH(ss))); } } } else { if (ss.muted || mAutomute && ss.level == 0) { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_unmute, ss.name)); getStreamLabelH(ss))); } else { row.icon.setContentDescription(mContext.getString( R.string.volume_stream_content_description_mute, ss.name)); getStreamLabelH(ss))); } } } else { row.icon.setContentDescription(ss.name); row.icon.setContentDescription(getStreamLabelH(ss)); } // update slider Loading @@ -802,15 +791,6 @@ public class VolumeDialog implements TunerService.Tunable { updateVolumeRowSliderH(row, enableSlider, vlevel); } private void updateVolumeRowHeaderVisibleH(VolumeRow row) { final boolean dynamic = row.ss != null && row.ss.dynamic; final boolean showHeaders = mExpanded && (mShowHeaders || dynamic); if (row.cachedShowHeaders != showHeaders) { row.cachedShowHeaders = showHeaders; Util.setVisOrGone(row.header, showHeaders); } } private void updateVolumeRowSliderTintH(VolumeRow row, boolean isActive) { if (isActive && mExpanded) { row.slider.requestFocus(); Loading Loading @@ -920,6 +900,18 @@ public class VolumeDialog implements TunerService.Tunable { rescheduleTimeoutH(); } private String getStreamLabelH(StreamState ss) { if (ss.remoteLabel != null) { return ss.remoteLabel; } try { return mContext.getString(ss.name); } catch (Resources.NotFoundException e) { Slog.e(TAG, "Can't find translation for stream " + ss); return ""; } } private AutoTransition getTransistion() { AutoTransition transition = new AutoTransition(); transition.setDuration(mExpandButtonAnimationDuration); Loading Loading @@ -995,7 +987,7 @@ public class VolumeDialog implements TunerService.Tunable { mDensity = density; } updateWindowWidthH(); mSpTexts.update(); mConfigurableTexts.update(); mZenFooter.onConfigurationChanged(); } Loading Loading @@ -1125,7 +1117,7 @@ public class VolumeDialog implements TunerService.Tunable { if (mShowing) { event.getText().add(mContext.getString( R.string.volume_dialog_accessibility_shown_message, getActiveRow().ss.name)); getStreamLabelH(getActiveRow().ss))); return true; } } Loading Loading @@ -1253,7 +1245,6 @@ public class VolumeDialog implements TunerService.Tunable { private int cachedIconRes; private ColorStateList cachedSliderTint; private int iconState; // from Events private boolean cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; private ObjectAnimator anim; // slider progress animation for non-touch-related updates private int animTargetProgress; private int lastAudibleLevel = 1; Loading
packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java +24 −39 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.volume; import android.annotation.IntegerRes; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ComponentName; Loading @@ -41,6 +42,7 @@ import android.os.RemoteException; import android.os.Vibrator; import android.provider.Settings; import android.service.notification.Condition; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; Loading @@ -67,19 +69,20 @@ public class VolumeDialogController { private static final int DYNAMIC_STREAM_START_INDEX = 100; private static final int VIBRATE_HINT_DURATION = 50; private static final int[] STREAMS = { AudioSystem.STREAM_ALARM, AudioSystem.STREAM_BLUETOOTH_SCO, AudioSystem.STREAM_DTMF, AudioSystem.STREAM_MUSIC, AudioSystem.STREAM_NOTIFICATION, AudioSystem.STREAM_RING, AudioSystem.STREAM_SYSTEM, AudioSystem.STREAM_SYSTEM_ENFORCED, AudioSystem.STREAM_TTS, AudioSystem.STREAM_VOICE_CALL, AudioSystem.STREAM_ACCESSIBILITY, }; private static final ArrayMap<Integer, Integer> STREAMS = new ArrayMap<>(); static { STREAMS.put(AudioSystem.STREAM_ALARM, R.string.stream_alarm); STREAMS.put(AudioSystem.STREAM_BLUETOOTH_SCO, R.string.stream_bluetooth_sco); STREAMS.put(AudioSystem.STREAM_DTMF, R.string.stream_dtmf); STREAMS.put(AudioSystem.STREAM_MUSIC, R.string.stream_music); STREAMS.put(AudioSystem.STREAM_NOTIFICATION, R.string.stream_notification); STREAMS.put(AudioSystem.STREAM_RING, R.string.stream_ring); STREAMS.put(AudioSystem.STREAM_SYSTEM, R.string.stream_system); STREAMS.put(AudioSystem.STREAM_SYSTEM_ENFORCED, R.string.stream_system_enforced); STREAMS.put(AudioSystem.STREAM_TTS, R.string.stream_tts); STREAMS.put(AudioSystem.STREAM_VOICE_CALL, R.string.stream_voice_call); STREAMS.put(AudioSystem.STREAM_ACCESSIBILITY, R.string.stream_accessibility); } private final HandlerThread mWorkerThread; private final W mWorker; Loading @@ -92,7 +95,6 @@ public class VolumeDialogController { private final MediaSessions mMediaSessions; private final C mCallbacks = new C(); private final State mState = new State(); private final String[] mStreamTitles; private final MediaSessionsCallbacks mMediaSessionsCallbacksW = new MediaSessionsCallbacks(); private final Vibrator mVibrator; private final boolean mHasVibrator; Loading Loading @@ -120,26 +122,6 @@ public class VolumeDialogController { mObserver = new SettingObserver(mWorker); mObserver.init(); mReceiver.init(); final String[] titles = mContext.getResources().getStringArray(R.array.volume_stream_titles); if (STREAMS.length == titles.length) { mStreamTitles = titles; } else if (STREAMS.length > titles.length) { Log.e(TAG, String.format("Missing stream titles (found %d, expected %d): " + " invalid resources for volume_stream_titles", titles.length, STREAMS.length)); mStreamTitles = new String[STREAMS.length]; System.arraycopy(titles, 0, mStreamTitles, 0, titles.length); for (int i = titles.length ; i < STREAMS.length ; i++) { mStreamTitles[i] = ""; } } else { // STREAMS.length < titles.length Log.e(TAG, String.format("Too many stream titles (found %d, expected %d): " + " invalid resources for volume_stream_titles", titles.length, STREAMS.length)); mStreamTitles = new String[STREAMS.length]; System.arraycopy(titles, 0, mStreamTitles, 0, STREAMS.length); } mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); mHasVibrator = mVibrator != null && mVibrator.hasVibrator(); } Loading Loading @@ -385,14 +367,14 @@ public class VolumeDialogController { } private void onGetStateW() { for (int stream : STREAMS) { for (int stream : STREAMS.keySet()) { updateStreamLevelW(stream, getAudioManagerStreamVolume(stream)); streamStateW(stream).levelMin = getAudioManagerStreamMinVolume(stream); streamStateW(stream).levelMax = getAudioManagerStreamMaxVolume(stream); updateStreamMuteW(stream, mAudio.isStreamMute(stream)); final StreamState ss = streamStateW(stream); ss.muteSupported = mAudio.isStreamAffectedByMute(stream); ss.name = mStreamTitles[stream]; ss.name = STREAMS.get(stream); checkRoutedToBluetoothW(stream); } updateRingerModeExternalW(mAudio.getRingerMode()); Loading Loading @@ -912,8 +894,9 @@ public class VolumeDialogController { ss.level = pi.getCurrentVolume(); changed = true; } if (!Objects.equals(ss.name, name)) { ss.name = name; if (!Objects.equals(ss.remoteLabel, name)) { ss.name = -1; ss.remoteLabel = name; changed = true; } if (changed) { Loading Loading @@ -975,7 +958,8 @@ public class VolumeDialogController { public int levelMax; public boolean muted; public boolean muteSupported; public String name; public @IntegerRes int name; public String remoteLabel; public boolean routedToBluetooth; public StreamState copy() { Loading @@ -987,6 +971,7 @@ public class VolumeDialogController { rt.muted = muted; rt.muteSupported = muteSupported; rt.name = name; rt.remoteLabel = remoteLabel; rt.routedToBluetooth = routedToBluetooth; return rt; } Loading