summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2015-04-03 00:00:12 -0400
committerJohn Spurlock <jspurlock@google.com>2015-04-03 10:23:46 -0400
commit76b52b3f9b0dde7d7800508271cf5851d92b25d5 (patch)
tree94724ba2f528b006402c2919afb6d03d31893061 /packages/SystemUI
parentad80b437f9d41815a5e865d47a26e8c4c56d5251 (diff)
downloadframeworks_base-76b52b3f9b0dde7d7800508271cf5851d92b25d5.zip
frameworks_base-76b52b3f9b0dde7d7800508271cf5851d92b25d5.tar.gz
frameworks_base-76b52b3f9b0dde7d7800508271cf5851d92b25d5.tar.bz2
Volume: Port safety warning over to new dialog.
And remove obsolete "muted by <x>" disablement. Bug: 19260237 Change-Id: I17dc6d5761aad9ce70cc5aad054489549113e15e
Diffstat (limited to 'packages/SystemUI')
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java109
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/Util.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java68
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java32
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java87
5 files changed, 199 insertions, 99 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java
new file mode 100644
index 0000000..04640a2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.volume;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.WindowManager;
+
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+abstract public class SafetyWarningDialog extends SystemUIDialog
+ implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
+
+ private static final String TAG = Util.logTag(SafetyWarningDialog.class);
+
+ private static final int KEY_CONFIRM_ALLOWED_AFTER = 1000; // milliseconds
+
+ private final Context mContext;
+ private final AudioManager mAudioManager;
+
+ private long mShowTime;
+ private boolean mNewVolumeUp;
+
+ public SafetyWarningDialog(Context context, AudioManager audioManager) {
+ super(context);
+ mContext = context;
+ mAudioManager = audioManager;
+
+ getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
+ setMessage(mContext.getString(com.android.internal.R.string.safe_media_volume_warning));
+ setButton(DialogInterface.BUTTON_POSITIVE,
+ mContext.getString(com.android.internal.R.string.yes), this);
+ setButton(DialogInterface.BUTTON_NEGATIVE,
+ mContext.getString(com.android.internal.R.string.no), (OnClickListener) null);
+ setOnDismissListener(this);
+
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+ context.registerReceiver(mReceiver, filter);
+ }
+
+ abstract protected void cleanUp();
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) {
+ mNewVolumeUp = true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mNewVolumeUp
+ && (System.currentTimeMillis() - mShowTime) > KEY_CONFIRM_ALLOWED_AFTER) {
+ if (D.BUG) Log.d(TAG, "Confirmed warning via VOLUME_UP");
+ mAudioManager.disableSafeMediaVolume();
+ dismiss();
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mAudioManager.disableSafeMediaVolume();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mShowTime = System.currentTimeMillis();
+ }
+
+ @Override
+ public void onDismiss(DialogInterface unused) {
+ mContext.unregisterReceiver(mReceiver);
+ cleanUp();
+ }
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
+ if (D.BUG) Log.d(TAG, "Received ACTION_CLOSE_SYSTEM_DIALOGS");
+ cancel();
+ cleanUp();
+ }
+ }
+ };
+} \ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Util.java b/packages/SystemUI/src/com/android/systemui/volume/Util.java
index fbdc1ca..78baf67 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Util.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Util.java
@@ -47,6 +47,7 @@ class Util {
AudioManager.FLAG_SHOW_VIBRATE_HINT,
AudioManager.FLAG_SHOW_SILENT_HINT,
AudioManager.FLAG_FROM_KEY,
+ AudioManager.FLAG_SHOW_UI_WARNINGS,
};
private static String[] AUDIO_MANAGER_FLAG_NAMES = new String[] {
@@ -58,6 +59,7 @@ class Util {
"SHOW_VIBRATE_HINT",
"SHOW_SILENT_HINT",
"FROM_KEY",
+ "SHOW_UI_WARNINGS",
};
public static String logTag(Class<?> c) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index 5fbb18d..d8b3965 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
@@ -103,6 +103,7 @@ public class VolumeDialog {
private final View mTextFooter;
private final ZenFooter mZenFooter;
private final LayoutTransition mLayoutTransition;
+ private final Object mSafetyWarningLock = new Object();
private boolean mShowing;
private boolean mExpanded;
@@ -113,8 +114,9 @@ public class VolumeDialog {
private boolean mAutomute = Prefs.DEFAULT_ENABLE_AUTOMUTE;
private boolean mSilentMode = Prefs.DEFAULT_ENABLE_SILENT_MODE;
private State mState;
- private int mExpandAnimRes;
+ private int mExpandButtonRes;
private boolean mExpanding;
+ private SafetyWarningDialog mSafetyWarning;
public VolumeDialog(Context context, VolumeDialogController controller,
ZenModeController zenModeController) {
@@ -138,7 +140,7 @@ public class VolumeDialog {
mDialog.setCanceledOnTouchOutside(true);
final Resources res = mContext.getResources();
final WindowManager.LayoutParams lp = window.getAttributes();
- lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
+ lp.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.setTitle(VolumeDialog.class.getSimpleName());
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
@@ -450,6 +452,7 @@ public class VolumeDialog {
private int computeTimeoutH() {
if (mZenFooter != null && mZenFooter.isFooterExpanded()) return 10000;
+ if (mSafetyWarning != null) return 5000;
if (mExpanded || mExpanding) return 5000;
if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
return 3000;
@@ -464,6 +467,12 @@ public class VolumeDialog {
Events.writeEvent(Events.EVENT_DISMISS_DIALOG, reason);
setExpandedH(false);
mController.notifyVisible(false);
+ synchronized (mSafetyWarningLock) {
+ if (mSafetyWarning != null) {
+ if (D.BUG) Log.d(TAG, "SafetyWarning dismissed");
+ mSafetyWarning.dismiss();
+ }
+ }
}
private void setExpandedH(boolean expanded) {
@@ -498,8 +507,8 @@ public class VolumeDialog {
if (mExpanding && isAttached()) return;
final int res = mExpanded ? R.drawable.ic_volume_collapse_animation
: R.drawable.ic_volume_expand_animation;
- if (res == mExpandAnimRes) return;
- mExpandAnimRes = res;
+ if (res == mExpandButtonRes) return;
+ mExpandButtonRes = res;
mExpandButton.setImageResource(res);
}
@@ -654,7 +663,6 @@ public class VolumeDialog {
&& mState.zenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
final boolean isLimited = isRingStream
&& mState.zenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- final boolean isRingAndSuppressed = isRingStream && mState.effectsSuppressor != null;
// update slider max
final int max = ss.levelMax * 100;
@@ -670,10 +678,7 @@ public class VolumeDialog {
// update header text
final String text;
- if (isRingAndSuppressed) {
- text = mContext.getString(R.string.volume_stream_suppressed, ss.name,
- mState.effectsSuppressorName);
- } else if (isNoned) {
+ if (isNoned) {
text = mContext.getString(R.string.volume_stream_muted_dnd, ss.name);
} else if (isRingVibrate && isLimited) {
text = mContext.getString(R.string.volume_stream_vibrate_dnd, ss.name);
@@ -689,14 +694,14 @@ public class VolumeDialog {
Util.setText(row.header, text);
// update icon
- final boolean iconEnabled = !isRingAndSuppressed && (mAutomute || ss.muteSupported);
+ final boolean iconEnabled = mAutomute || ss.muteSupported;
row.icon.setEnabled(iconEnabled);
row.icon.setAlpha(iconEnabled ? 1 : 0.5f);
final int iconRes =
- !isRingAndSuppressed && isRingVibrate ? R.drawable.ic_volume_ringer_vibrate
+ isRingVibrate ? R.drawable.ic_volume_ringer_vibrate
: ss.routedToBluetooth ?
(ss.muted ? R.drawable.ic_volume_bt_mute : R.drawable.ic_volume_bt)
- : isRingAndSuppressed || (mAutomute && ss.level == 0) ? row.iconMuteRes
+ : mAutomute && ss.level == 0 ? row.iconMuteRes
: (ss.muted ? row.iconMuteRes : row.iconRes);
if (iconRes != row.cachedIconRes) {
if (row.cachedIconRes != 0 && isRingVibrate) {
@@ -714,18 +719,13 @@ public class VolumeDialog {
: Events.ICON_STATE_UNKNOWN;
// update slider
- updateVolumeRowSliderH(row, isRingAndSuppressed);
+ updateVolumeRowSliderH(row);
}
- private void updateVolumeRowSliderH(VolumeRow row, boolean isRingAndSuppressed) {
- row.slider.setEnabled(!isRingAndSuppressed);
+ private void updateVolumeRowSliderH(VolumeRow row) {
if (row.tracking) {
return; // don't update if user is sliding
}
- if (isRingAndSuppressed) {
- row.slider.setProgress(0);
- return;
- }
final int progress = row.slider.getProgress();
final int level = getImpliedLevel(row.slider, progress);
final boolean rowVisible = row.view.getVisibility() == View.VISIBLE;
@@ -800,6 +800,29 @@ public class VolumeDialog {
}
}
+ private void showSafetyWarningH(int flags) {
+ if ((flags & (AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_SHOW_UI_WARNINGS)) != 0
+ || mShowing) {
+ synchronized (mSafetyWarningLock) {
+ if (mSafetyWarning != null) {
+ return;
+ }
+ mSafetyWarning = new SafetyWarningDialog(mContext, mController.getAudioManager()) {
+ @Override
+ protected void cleanUp() {
+ synchronized (mSafetyWarningLock) {
+ mSafetyWarning = null;
+ }
+ recheckH(null);
+ }
+ };
+ mSafetyWarning.show();
+ }
+ recheckH(null);
+ }
+ rescheduleTimeoutH();
+ }
+
private final VolumeDialogController.Callbacks mControllerCallbackH
= new VolumeDialogController.Callbacks() {
@Override
@@ -812,6 +835,7 @@ public class VolumeDialog {
dismissH(reason);
}
+ @Override
public void onScreenOff() {
dismissH(Events.DISMISS_REASON_SCREEN_OFF);
}
@@ -839,11 +863,17 @@ public class VolumeDialog {
}
}
+ @Override
public void onShowSilentHint() {
if (mSilentMode) {
mController.setRingerMode(AudioManager.RINGER_MODE_NORMAL, false);
}
}
+
+ @Override
+ public void onShowSafetyWarning(int flags) {
+ showSafetyWarningH(flags);
+ }
};
private final OnClickListener mClickExpand = new OnClickListener() {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
index ae5312e..a3d9377 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
@@ -119,6 +119,10 @@ public class VolumeDialogController {
mHasVibrator = mVibrator != null && mVibrator.hasVibrator();
}
+ public AudioManager getAudioManager() {
+ return mAudio;
+ }
+
public void dismiss() {
mCallbacks.onDismissRequested(Events.DISMISS_REASON_VOLUME_CONTROLLER);
}
@@ -256,6 +260,10 @@ public class VolumeDialogController {
// hook for subclasses
}
+ private void onShowSafetyWarningW(int flags) {
+ mCallbacks.onShowSafetyWarning(flags);
+ }
+
private boolean checkRoutedToBluetoothW(int stream) {
boolean changed = false;
if (stream == AudioManager.STREAM_MUSIC) {
@@ -490,7 +498,10 @@ public class VolumeDialogController {
@Override
public void displaySafeVolumeWarning(int flags) throws RemoteException {
- // noop
+ if (D.BUG) Log.d(TAG, "displaySafeVolumeWarning "
+ + Util.audioManagerFlagsToString(flags));
+ if (mDestroyed) return;
+ mWorker.obtainMessage(W.SHOW_SAFETY_WARNING, flags, 0).sendToTarget();
}
@Override
@@ -537,6 +548,7 @@ public class VolumeDialogController {
private static final int SET_ACTIVE_STREAM = 11;
private static final int NOTIFY_VISIBLE = 12;
private static final int USER_ACTIVITY = 13;
+ private static final int SHOW_SAFETY_WARNING = 14;
W(Looper looper) {
super(looper);
@@ -556,8 +568,9 @@ public class VolumeDialogController {
case CONFIGURATION_CHANGED: mCallbacks.onConfigurationChanged(); break;
case SET_STREAM_VOLUME: onSetStreamVolumeW(msg.arg1, msg.arg2); break;
case SET_ACTIVE_STREAM: onSetActiveStreamW(msg.arg1); break;
- case NOTIFY_VISIBLE: onNotifyVisibleW(msg.arg1 != 0);
- case USER_ACTIVITY: onUserActivityW();
+ case NOTIFY_VISIBLE: onNotifyVisibleW(msg.arg1 != 0); break;
+ case USER_ACTIVITY: onUserActivityW(); break;
+ case SHOW_SAFETY_WARNING: onShowSafetyWarningW(msg.arg1); break;
}
}
}
@@ -672,6 +685,18 @@ public class VolumeDialogController {
});
}
}
+
+ @Override
+ public void onShowSafetyWarning(final int flags) {
+ for (final Map.Entry<Callbacks, Handler> entry : mCallbackMap.entrySet()) {
+ entry.getValue().post(new Runnable() {
+ @Override
+ public void run() {
+ entry.getKey().onShowSafetyWarning(flags);
+ }
+ });
+ }
+ }
}
@@ -958,5 +983,6 @@ public class VolumeDialogController {
void onShowVibrateHint();
void onShowSilentHint();
void onScreenOff();
+ void onShowSafetyWarning(int flags);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
index 50d5f7a..f16e9d2 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
@@ -52,7 +52,6 @@ import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.util.SparseArray;
-import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@@ -72,7 +71,6 @@ import android.widget.TextView;
import com.android.internal.R;
import com.android.systemui.DemoMode;
-import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.ZenModeController;
import java.io.FileDescriptor;
@@ -264,80 +262,6 @@ public class VolumePanel extends Handler implements DemoMode {
private static AlertDialog sSafetyWarning;
private static Object sSafetyWarningLock = new Object();
- private static class SafetyWarning extends SystemUIDialog
- implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
- private final Context mContext;
- private final VolumePanel mVolumePanel;
- private final AudioManager mAudioManager;
-
- private boolean mNewVolumeUp;
-
- SafetyWarning(Context context, VolumePanel volumePanel, AudioManager audioManager) {
- super(context);
- mContext = context;
- mVolumePanel = volumePanel;
- mAudioManager = audioManager;
-
- setMessage(mContext.getString(com.android.internal.R.string.safe_media_volume_warning));
- setButton(DialogInterface.BUTTON_POSITIVE,
- mContext.getString(com.android.internal.R.string.yes), this);
- setButton(DialogInterface.BUTTON_NEGATIVE,
- mContext.getString(com.android.internal.R.string.no), (OnClickListener) null);
- setOnDismissListener(this);
-
- IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
- context.registerReceiver(mReceiver, filter);
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) {
- mNewVolumeUp = true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mNewVolumeUp) {
- if (LOGD) Log.d(TAG, "Confirmed warning via VOLUME_UP");
- mAudioManager.disableSafeMediaVolume();
- dismiss();
- }
- return super.onKeyUp(keyCode, event);
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- mAudioManager.disableSafeMediaVolume();
- }
-
- @Override
- public void onDismiss(DialogInterface unused) {
- mContext.unregisterReceiver(mReceiver);
- cleanUp();
- }
-
- private void cleanUp() {
- synchronized (sSafetyWarningLock) {
- sSafetyWarning = null;
- }
- mVolumePanel.forceTimeout(0);
- mVolumePanel.updateStates();
- }
-
- private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
- if (LOGD) Log.d(TAG, "Received ACTION_CLOSE_SYSTEM_DIALOGS");
- cancel();
- cleanUp();
- }
- }
- };
- }
-
protected LayoutParams getDialogLayoutParams(Window window, Resources res) {
final LayoutParams lp = window.getAttributes();
lp.token = null;
@@ -1283,7 +1207,16 @@ public class VolumePanel extends Handler implements DemoMode {
if (sSafetyWarning != null) {
return;
}
- sSafetyWarning = new SafetyWarning(mContext, this, mAudioManager);
+ sSafetyWarning = new SafetyWarningDialog(mContext, mAudioManager) {
+ @Override
+ protected void cleanUp() {
+ synchronized (sSafetyWarningLock) {
+ sSafetyWarning = null;
+ }
+ forceTimeout(0);
+ updateStates();
+ }
+ };
sSafetyWarning.show();
}
updateStates();