Remove dnd, expand, alarm stream from volume dlg

Step one in simplifying the volume controls. All controls are still
shown as sliders at the top of the screen, and the ringer stream is
still the default stream.

Test: make, manual
Bug: 63096355
Change-Id: Ia66fbb58cbea6305a6e8a2b4567e23eb93200227
This commit is contained in:
Julia Reynolds
2017-11-07 09:43:54 -05:00
parent b1f7576180
commit 66d2894272
7 changed files with 9 additions and 607 deletions

View File

@@ -34,44 +34,9 @@
android:id="@+id/volume_dialog_rows"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="@dimen/volume_button_size"
android:orientation="vertical" >
<!-- volume rows added and removed here! :-) -->
</LinearLayout>
<include layout="@layout/volume_zen_footer" />
<!-- Only shown from Tuner setting -->
<include layout="@layout/tuner_zen_mode_panel" />
</LinearLayout>
<LinearLayout
android:id="@+id/volume_dialog_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="@dimen/volume_expander_margin_end" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.Volume.Header" />
<com.android.keyguard.AlphaOptimizedImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/volume_expand_button"
style="@style/VolumeButtons"
android:layout_width="@dimen/volume_button_size"
android:layout_height="@dimen/volume_button_size"
android:clickable="true"
android:soundEffectsEnabled="false"
android:src="@drawable/ic_volume_collapse_animation"
android:background="@drawable/ripple_drawable"
tools:ignore="RtlHardcoded"
/>
</LinearLayout>
</RelativeLayout>

View File

@@ -1,127 +0,0 @@
<!--
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.
-->
<com.android.systemui.volume.ZenFooter xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/volume_zen_footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="8dp" > <!-- extends LinearLayout -->
<View
android:id="@+id/zen_embedded_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:background="@color/qs_tile_divider" />
<RelativeLayout
android:id="@+id/zen_introduction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:paddingBottom="8dp"
android:background="@drawable/zen_introduction_message_background"
android:theme="@*android:style/ThemeOverlay.DeviceDefault.Accent.Light">
<ImageView
android:id="@+id/zen_introduction_confirm"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="8dp"
android:layout_alignParentEnd="true"
android:background="@drawable/btn_borderless_rect"
android:clickable="true"
android:contentDescription="@string/accessibility_desc_close"
android:scaleType="center"
android:src="@drawable/ic_close_white_rounded" />
<TextView
android:id="@+id/zen_introduction_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginStart="24dp"
android:textDirection="locale"
android:lineSpacingMultiplier="1.20029"
android:layout_toStartOf="@id/zen_introduction_confirm"
android:text="@string/zen_alarms_introduction"
android:textAppearance="@style/TextAppearance.QS.Introduction" />
<View
android:layout_width="0dp"
android:layout_height="16dp"
android:layout_below="@id/zen_introduction_message"
android:layout_alignParentEnd="true" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/volume_zen_icon"
android:layout_width="@dimen/volume_button_size"
android:layout_height="@dimen/volume_button_size"
android:layout_marginEnd="7dp"
android:scaleType="center" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/volume_zen_summary_line_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textDirection="locale"
android:textAppearance="@style/TextAppearance.Volume.ZenSummary" />
<TextView
android:id="@+id/volume_zen_summary_line_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:textDirection="locale"
android:textAppearance="@style/TextAppearance.Volume.ZenDetail" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/volume_zen_end_now"
style="@style/QSBorderlessButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="8dp"
android:clickable="true"
android:focusable="true"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:text="@string/volume_zen_end_now"
android:textColor="?android:attr/colorAccent"
android:textAppearance="@style/TextAppearance.QS.DetailButton" />
</com.android.systemui.volume.ZenFooter>

View File

@@ -104,13 +104,6 @@
android:key="volume_and_do_not_disturb"
android:title="@string/volume_and_do_not_disturb">
<!-- Action for this is
MetricsConstants.ACTION_TUNER_DO_NOT_DISTURB_VOLUME_PANEL -->
<com.android.systemui.tuner.TunerSwitch
android:key="sysui_show_full_zen"
android:title="@string/tuner_full_zen_title"
sysui:metricsAction="314" />
<!-- Action for this is
MetricsConstants.ACTION_TUNER_DO_NOT_DISTURB_VOLUME_SHORTCUT -->
<com.android.systemui.tuner.TunerSwitch

View File

@@ -96,7 +96,6 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna
private VolumeDialog createDefault() {
VolumeDialogImpl impl = new VolumeDialogImpl(mContext);
impl.setStreamImportant(AudioManager.STREAM_ALARM, true);
impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
impl.setAutomute(true);
impl.setSilentMode(false);

View File

@@ -26,16 +26,13 @@ import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.os.Debug;
@@ -44,9 +41,6 @@ import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings.Global;
import android.transition.AutoTransition;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Slog;
@@ -74,16 +68,12 @@ import android.widget.TextView;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.plugins.VolumeDialog;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.VolumeDialogController.State;
import com.android.systemui.plugins.VolumeDialogController.StreamState;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerZenModePanel;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -96,7 +86,7 @@ import java.util.List;
*
* Methods ending in "H" must be called on the (ui) handler.
*/
public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
public class VolumeDialogImpl implements VolumeDialog {
private static final String TAG = Util.logTag(VolumeDialogImpl.class);
public static final String SHOW_FULL_ZEN = "sysui_show_full_zen";
@@ -113,7 +103,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private ViewGroup mDialogView;
private ViewGroup mDialogRowsView;
private ViewGroup mDialogContentView;
private ImageButton mExpandButton;
private final List<VolumeRow> mRows = new ArrayList<>();
private ConfigurableTexts mConfigurableTexts;
private final SparseBooleanArray mDynamic = new SparseBooleanArray();
@@ -121,7 +110,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private final AudioManager mAudioManager;
private final AccessibilityManager mAccessibilityMgr;
private int mExpandButtonAnimationDuration;
private ZenFooter mZenFooter;
private final Object mSafetyWarningLock = new Object();
private final Accessibility mAccessibility = new Accessibility();
private final ColorStateList mActiveSliderTint;
@@ -131,7 +119,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private final ZenModeController mZenModeController;
private boolean mShowing;
private boolean mExpanded;
private boolean mShowA11yStream;
private int mActiveStream;
@@ -139,7 +126,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE;
private State mState;
private boolean mExpandButtonAnimationRunning;
private SafetyWarningDialog mSafetyWarning;
private Callback mCallback;
private boolean mPendingStateChanged;
@@ -148,9 +134,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private boolean mHovering = false;
private int mDensity;
private boolean mShowFullZen;
private TunerZenModePanel mZenPanel;
public VolumeDialogImpl(Context context) {
mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
mZenModeController = Dependency.get(ZenModeController.class);
@@ -173,7 +156,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
mController.addCallback(mControllerCallbackH, mHandler);
mController.getState();
Dependency.get(TunerService.class).addTunable(this, SHOW_FULL_ZEN);
final Configuration currentConfig = mContext.getResources().getConfiguration();
mDensity = currentConfig.densityDpi;
@@ -183,10 +165,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
public void destroy() {
mAccessibility.destroy();
mController.removeCallback(mControllerCallbackH);
if (mZenFooter != null) {
mZenFooter.cleanup();
}
Dependency.get(TunerService.class).removeTunable(this);
mHandler.removeCallbacksAndMessages(null);
}
@@ -234,16 +212,9 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
mDialogContentView = mDialog.findViewById(R.id.volume_dialog_content);
mDialogRowsView = mDialogContentView.findViewById(R.id.volume_dialog_rows);
mExpanded = false;
mExpandButton = (ImageButton) mDialogView.findViewById(R.id.volume_expand_button);
mExpandButton.setOnClickListener(mClickExpand);
mExpandButton.setVisibility(
AudioSystem.isSingleVolume(mContext) ? View.GONE : View.VISIBLE);
updateWindowWidthH();
updateExpandButtonH();
mMotion = new VolumeDialogMotion(mDialog, mDialogView, mDialogContentView, mExpandButton,
mMotion = new VolumeDialogMotion(mDialog, mDialogView, mDialogContentView,
new VolumeDialogMotion.Callback() {
@Override
public void onAnimatingChanged(boolean animating) {
@@ -280,18 +251,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
addExistingRows();
}
mExpandButtonAnimationDuration = res.getInteger(R.integer.volume_expand_animation_duration);
mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer);
mZenFooter.init(mZenModeController);
mZenPanel = (TunerZenModePanel) mDialog.findViewById(R.id.tuner_zen_mode_panel);
mZenPanel.init(mZenModeController);
mZenPanel.setCallback(mZenPanelCallback);
}
@Override
public void onTuningChanged(String key, String newValue) {
if (SHOW_FULL_ZEN.equals(key)) {
mShowFullZen = newValue != null && Integer.parseInt(newValue) != 0;
}
}
private ColorStateList loadColorStateList(int colorResId) {
@@ -359,11 +318,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
}
}
private boolean isAttached() {
return mDialogContentView != null && mDialogContentView.isAttachedToWindow();
}
private VolumeRow getActiveRow() {
for (VolumeRow row : mRows) {
if (row.stream == mActiveStream) {
@@ -383,9 +337,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
public void dump(PrintWriter writer) {
writer.println(VolumeDialogImpl.class.getSimpleName() + " state:");
writer.print(" mShowing: "); writer.println(mShowing);
writer.print(" mExpanded: "); writer.println(mExpanded);
writer.print(" mExpandButtonAnimationRunning: ");
writer.println(mExpandButtonAnimationRunning);
writer.print(" mActiveStream: "); writer.println(mActiveStream);
writer.print(" mDynamic: "); writer.println(mDynamic);
writer.print(" mAutomute: "); writer.println(mAutomute);
@@ -514,11 +465,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
if (mAccessibility.mFeedbackEnabled) return 20000;
if (mHovering) return 16000;
if (mSafetyWarning != null) return 5000;
if (mExpanded || mExpandButtonAnimationRunning) return 5000;
if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
if (mZenFooter.shouldShowIntroduction()) {
return 6000;
}
return 3000;
}
@@ -530,12 +477,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
mHandler.removeMessages(H.SHOW);
if (!mShowing) return;
mShowing = false;
mMotion.startDismiss(new Runnable() {
@Override
public void run() {
updateExpandedH(false /* expanding */, true /* dismissing */);
}
});
mMotion.startDismiss();
if (mAccessibilityMgr.isEnabled()) {
AccessibilityEvent event =
AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
@@ -579,59 +521,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
mHandler.sendEmptyMessageDelayed(H.UPDATE_BOTTOM_MARGIN, getConservativeCollapseDuration());
}
private void updateExpandedH(final boolean expanded, final boolean dismissing) {
if (mExpanded == expanded) return;
mExpanded = expanded;
mExpandButtonAnimationRunning = isAttached();
if (D.BUG) Log.d(TAG, "updateExpandedH " + expanded);
updateExpandButtonH();
updateFooterH();
TransitionManager.endTransitions(mDialogView);
final VolumeRow activeRow = getActiveRow();
if (!dismissing) {
mWindow.setLayout(mWindow.getAttributes().width, ViewGroup.LayoutParams.MATCH_PARENT);
TransitionManager.beginDelayedTransition(mDialogView, getTransition());
}
updateRowsH(activeRow);
rescheduleTimeoutH();
}
private void updateExpandButtonH() {
if (D.BUG) Log.d(TAG, "updateExpandButtonH");
mExpandButton.setClickable(!mExpandButtonAnimationRunning);
if (!(mExpandButtonAnimationRunning && isAttached())) {
final int res = mExpanded ? R.drawable.ic_volume_collapse_animation
: R.drawable.ic_volume_expand_animation;
if (hasTouchFeature()) {
mExpandButton.setImageResource(res);
} else {
// if there is no touch feature, show the volume ringer instead
mExpandButton.setImageResource(R.drawable.ic_volume_ringer);
mExpandButton.setBackgroundResource(0); // remove gray background emphasis
}
mExpandButton.setContentDescription(mContext.getString(mExpanded ?
R.string.accessibility_volume_collapse : R.string.accessibility_volume_expand));
}
if (mExpandButtonAnimationRunning) {
final Drawable d = mExpandButton.getDrawable();
if (d instanceof AnimatedVectorDrawable) {
// workaround to reset drawable
final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) d.getConstantState()
.newDrawable();
mExpandButton.setImageDrawable(avd);
avd.start();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mExpandButtonAnimationRunning = false;
updateExpandButtonH();
rescheduleTimeoutH();
}
}, mExpandButtonAnimationDuration);
}
}
}
private boolean shouldBeVisibleH(VolumeRow row, VolumeRow activeRow) {
boolean isActive = row == activeRow;
if (row.stream == AudioSystem.STREAM_ACCESSIBILITY) {
@@ -639,15 +528,13 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
}
// if the active row is accessibility, then continue to display previous
// active row since accessibility is dispalyed under it
// active row since accessibility is displayed under it
if (activeRow.stream == AudioSystem.STREAM_ACCESSIBILITY &&
row.stream == mPrevActiveStream) {
return true;
}
return mExpanded && row.view.getVisibility() == View.VISIBLE
|| (mExpanded && (row.important || isActive))
|| !mExpanded && isActive;
return row.important || isActive;
}
private void updateRowsH(final VolumeRow activeRow) {
@@ -709,38 +596,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
for (VolumeRow row : mRows) {
updateVolumeRowH(row);
}
updateFooterH();
}
private void updateFooterH() {
if (D.BUG) Log.d(TAG, "updateFooterH");
final boolean wasVisible = mZenFooter.getVisibility() == View.VISIBLE;
final boolean visible = mState.zenMode != Global.ZEN_MODE_OFF
&& (mAudioManager.isStreamAffectedByRingerMode(mActiveStream) || mExpanded)
&& !mZenPanel.isEditing();
TransitionManager.endTransitions(mDialogView);
TransitionManager.beginDelayedTransition(mDialogView, getTransition());
if (wasVisible != visible && !visible) {
prepareForCollapse();
}
Util.setVisOrGone(mZenFooter, visible);
mZenFooter.update();
final boolean fullWasVisible = mZenPanel.getVisibility() == View.VISIBLE;
final boolean fullVisible = mShowFullZen && !visible;
if (fullWasVisible != fullVisible) {
Util.setVisOrGone(mZenPanel, fullVisible);
if (fullVisible) {
mZenPanel.setZenState(mState.zenMode);
mZenPanel.setDoneListener(new OnClickListener() {
@Override
public void onClick(View v) {
mHandler.sendEmptyMessage(H.UPDATE_FOOTER);
}
});
}
}
}
private void updateVolumeRowH(VolumeRow row) {
@@ -860,7 +715,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
}
private void updateVolumeRowSliderTintH(VolumeRow row, boolean isActive) {
if (isActive && mExpanded) {
if (isActive) {
row.slider.requestFocus();
}
final ColorStateList tint = isActive && row.slider.isEnabled() ? mActiveSliderTint
@@ -980,43 +835,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
}
}
private AutoTransition getTransition() {
AutoTransition transition = new AutoTransition();
transition.setDuration(mExpandButtonAnimationDuration);
transition.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
mWindow.setLayout(
mWindow.getAttributes().width, ViewGroup.LayoutParams.WRAP_CONTENT);
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
mWindow.setLayout(
mWindow.getAttributes().width, ViewGroup.LayoutParams.WRAP_CONTENT);
}
@Override
public void onTransitionResume(Transition transition) {
}
});
return transition;
}
private boolean hasTouchFeature() {
final PackageManager pm = mContext.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN);
}
private final VolumeDialogController.Callbacks mControllerCallbackH
= new VolumeDialogController.Callbacks() {
@Override
@@ -1050,13 +868,11 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
final int density = newConfig.densityDpi;
if (density != mDensity) {
mDialog.dismiss();
mZenFooter.cleanup();
initDialog();
mDensity = density;
}
updateWindowWidthH();
mConfigurableTexts.update();
mZenFooter.onConfigurationChanged();
}
@Override
@@ -1109,16 +925,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
}
};
private final OnClickListener mClickExpand = new OnClickListener() {
@Override
public void onClick(View v) {
if (mExpandButtonAnimationRunning) return;
final boolean newExpand = !mExpanded;
Events.writeEvent(mContext, Events.EVENT_EXPAND, newExpand);
updateExpandedH(newExpand, false /* dismissing */);
}
};
private final class H extends Handler {
private static final int SHOW = 1;
private static final int DISMISS = 2;
@@ -1128,7 +934,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
private static final int RESCHEDULE_TIMEOUT = 6;
private static final int STATE_CHANGED = 7;
private static final int UPDATE_BOTTOM_MARGIN = 8;
private static final int UPDATE_FOOTER = 9;
public H() {
super(Looper.getMainLooper());
@@ -1145,7 +950,6 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
case RESCHEDULE_TIMEOUT: rescheduleTimeoutH(); break;
case STATE_CHANGED: onStateChangedH(mState); break;
case UPDATE_BOTTOM_MARGIN: updateDialogBottomMarginH(); break;
case UPDATE_FOOTER: updateFooterH(); break;
}
}
}

View File

@@ -25,7 +25,6 @@ import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.DialogInterface.OnShowListener;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.Log;
import android.view.View;
@@ -41,22 +40,19 @@ public class VolumeDialogMotion {
private final Dialog mDialog;
private final View mDialogView;
private final ViewGroup mContents; // volume rows + zen footer
private final View mChevron;
private final Handler mHandler = new Handler();
private final Callback mCallback;
private boolean mAnimating; // show or dismiss animation is running
private boolean mShowing; // show animation is running
private boolean mDismissing; // dismiss animation is running
private ValueAnimator mChevronPositionAnimator;
private ValueAnimator mContentsPositionAnimator;
public VolumeDialogMotion(Dialog dialog, View dialogView, ViewGroup contents, View chevron,
public VolumeDialogMotion(Dialog dialog, View dialogView, ViewGroup contents,
Callback callback) {
mDialog = dialog;
mDialogView = dialogView;
mContents = contents;
mChevron = chevron;
mCallback = callback;
mDialog.setOnDismissListener(new OnDismissListener() {
@Override
@@ -117,15 +113,6 @@ public class VolumeDialogMotion {
mDialog.show();
}
private int chevronDistance() {
return mChevron.getHeight() / 6;
}
private int chevronPosY() {
final Object tag = mChevron == null ? null : mChevron.getTag();
return tag == null ? 0 : (Integer) tag;
}
private void startShowAnimation() {
if (D.BUG) Log.d(TAG, "startShowAnimation");
mDialogView.animate()
@@ -133,28 +120,9 @@ public class VolumeDialogMotion {
.setDuration(scaledDuration(300))
.setInterpolator(new LogDecelerateInterpolator())
.setListener(null)
.setUpdateListener(animation -> {
if (mChevronPositionAnimator != null) {
final float v = (Float) mChevronPositionAnimator.getAnimatedValue();
if (mChevronPositionAnimator == null) return;
// reposition chevron
final int posY = chevronPosY();
mChevron.setTranslationY(posY + v + -mDialogView.getTranslationY());
}
})
.withEndAction(new Runnable() {
@Override
public void run() {
if (mChevronPositionAnimator == null) return;
// reposition chevron
final int posY = chevronPosY();
mChevron.setTranslationY(posY + -mDialogView.getTranslationY());
}
})
.start();
mContentsPositionAnimator = ValueAnimator.ofFloat(-chevronDistance(), 0)
.setDuration(scaledDuration(400));
mContentsPositionAnimator = ValueAnimator.ofFloat(0).setDuration(scaledDuration(400));
mContentsPositionAnimator.addListener(new AnimatorListenerAdapter() {
private boolean mCancelled;
@@ -186,22 +154,9 @@ public class VolumeDialogMotion {
.setDuration(scaledDuration(150))
.setInterpolator(new PathInterpolator(0f, 0f, .2f, 1f))
.start();
mChevronPositionAnimator = ValueAnimator.ofFloat(-chevronDistance(), 0)
.setDuration(scaledDuration(250));
mChevronPositionAnimator.setInterpolator(new PathInterpolator(.4f, 0f, .2f, 1f));
mChevronPositionAnimator.start();
mChevron.setAlpha(0);
mChevron.animate()
.alpha(1)
.setStartDelay(scaledDuration(50))
.setDuration(scaledDuration(150))
.setInterpolator(new PathInterpolator(.4f, 0f, 1f, 1f))
.start();
}
public void startDismiss(final Runnable onComplete) {
public void startDismiss() {
if (D.BUG) Log.d(TAG, "startDismiss");
if (mDismissing) return;
setDismissing(true);
@@ -211,10 +166,6 @@ public class VolumeDialogMotion {
mContentsPositionAnimator.cancel();
}
mContents.animate().cancel();
if (mChevronPositionAnimator != null) {
mChevronPositionAnimator.cancel();
}
mChevron.animate().cancel();
setShowing(false);
}
mDialogView.animate()
@@ -225,8 +176,6 @@ public class VolumeDialogMotion {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mContents.setTranslationY(-mDialogView.getTranslationY());
final int posY = chevronPosY();
mChevron.setTranslationY(posY + -mDialogView.getTranslationY());
}
})
.setListener(new AnimatorListenerAdapter() {
@@ -240,7 +189,6 @@ public class VolumeDialogMotion {
public void run() {
if (D.BUG) Log.d(TAG, "mDialog.dismiss()");
mDialog.dismiss();
onComplete.run();
setDismissing(false);
}
}, PRE_DISMISS_DELAY);

View File

@@ -1,180 +0,0 @@
/*
* 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.animation.LayoutTransition;
import android.animation.ValueAnimator;
import android.content.Context;
import android.provider.Settings.Global;
import android.service.notification.ZenModeConfig;
import android.transition.AutoTransition;
import android.transition.TransitionManager;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.ZenModeController;
import java.util.Objects;
/**
* Zen mode information (and end button) attached to the bottom of the volume dialog.
*/
public class ZenFooter extends LinearLayout {
private static final String TAG = Util.logTag(ZenFooter.class);
private final Context mContext;
private final ConfigurableTexts mConfigurableTexts;
private ImageView mIcon;
private TextView mSummaryLine1;
private TextView mSummaryLine2;
private TextView mEndNowButton;
private View mZenIntroduction;
private View mZenIntroductionConfirm;
private TextView mZenIntroductionMessage;
private int mZen = -1;
private ZenModeConfig mConfig;
private ZenModeController mController;
public ZenFooter(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mConfigurableTexts = new ConfigurableTexts(mContext);
final LayoutTransition layoutTransition = new LayoutTransition();
layoutTransition.setDuration(new ValueAnimator().getDuration() / 2);
setLayoutTransition(layoutTransition);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mIcon = findViewById(R.id.volume_zen_icon);
mSummaryLine1 = findViewById(R.id.volume_zen_summary_line_1);
mSummaryLine2 = findViewById(R.id.volume_zen_summary_line_2);
mEndNowButton = findViewById(R.id.volume_zen_end_now);
mZenIntroduction = findViewById(R.id.zen_introduction);
mZenIntroductionMessage = findViewById(R.id.zen_introduction_message);
mConfigurableTexts.add(mZenIntroductionMessage, R.string.zen_alarms_introduction);
mZenIntroductionConfirm = findViewById(R.id.zen_introduction_confirm);
mZenIntroductionConfirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
confirmZenIntroduction();
}
});
Util.setVisOrGone(mZenIntroduction, shouldShowIntroduction());
mConfigurableTexts.add(mSummaryLine1);
mConfigurableTexts.add(mSummaryLine2);
mConfigurableTexts.add(mEndNowButton, R.string.volume_zen_end_now);
}
public void init(final ZenModeController controller) {
mEndNowButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setZen(Global.ZEN_MODE_OFF);
controller.setZen(Global.ZEN_MODE_OFF, null, TAG);
}
});
mZen = controller.getZen();
mConfig = controller.getConfig();
mController = controller;
mController.addCallback(mZenCallback);
update();
updateIntroduction();
}
public void cleanup() {
mController.removeCallback(mZenCallback);
}
private void setZen(int zen) {
if (mZen == zen) return;
mZen = zen;
update();
post(() -> {
updateIntroduction();
});
}
private void setConfig(ZenModeConfig config) {
if (Objects.equals(mConfig, config)) return;
mConfig = config;
update();
}
private void confirmZenIntroduction() {
Prefs.putBoolean(mContext, Prefs.Key.DND_CONFIRMED_ALARM_INTRODUCTION, true);
updateIntroduction();
}
private boolean isZenPriority() {
return mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
}
private boolean isZenAlarms() {
return mZen == Global.ZEN_MODE_ALARMS;
}
private boolean isZenNone() {
return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
}
public void update() {
mIcon.setImageResource(isZenNone() ? R.drawable.ic_dnd_total_silence : R.drawable.ic_dnd);
final String line1 =
isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
: isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
: isZenNone() ? mContext.getString(R.string.interruption_level_none)
: null;
Util.setText(mSummaryLine1, line1);
final CharSequence line2 = ZenModeConfig.getConditionSummary(mContext, mConfig,
mController.getCurrentUser(), true /*shortVersion*/);
Util.setText(mSummaryLine2, line2);
}
public boolean shouldShowIntroduction() {
final boolean confirmed = Prefs.getBoolean(mContext,
Prefs.Key.DND_CONFIRMED_ALARM_INTRODUCTION, false);
return !confirmed && isZenAlarms();
}
public void updateIntroduction() {
Util.setVisOrGone(mZenIntroduction, shouldShowIntroduction());
}
public void onConfigurationChanged() {
mConfigurableTexts.update();
}
private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() {
@Override
public void onZenChanged(int zen) {
setZen(zen);
}
@Override
public void onConfigChanged(ZenModeConfig config) {
setConfig(config);
}
};
}