Merge "Don't show ringer status if dnd overrides it" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-04-13 15:43:22 +00:00
committed by Android (Google) Code Review
3 changed files with 84 additions and 25 deletions

View File

@@ -1469,6 +1469,17 @@ public class ZenModeConfig implements Parcelable {
&& !allowRepeatCallers;
}
/**
* Determines if DND is currently overriding the ringer
*/
public static boolean isZenOverridingRinger(int zen, ZenModeConfig zenConfig) {
// TODO (beverlyt): check if apps can bypass dnd b/77729075
return zen == Global.ZEN_MODE_NO_INTERRUPTIONS
|| zen == Global.ZEN_MODE_ALARMS
|| (zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
&& ZenModeConfig.areAllPriorityOnlyNotificationZenSoundsMuted(zenConfig));
}
/**
* Determines whether dnd behavior should mute all sounds controlled by ringer
*/

View File

@@ -32,6 +32,7 @@ import android.graphics.Rect;
import android.media.AudioManager;
import android.os.Handler;
import android.provider.AlarmClock;
import android.service.notification.ZenModeConfig;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.AttributeSet;
@@ -48,10 +49,8 @@ import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.QSDetail.Callback;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
@@ -61,8 +60,10 @@ import com.android.systemui.statusbar.policy.DarkIconDispatcher;
import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import java.util.Locale;
import java.util.Objects;
/**
* View that contains the top-most bits of the screen (primarily the status bar with date, time, and
@@ -70,7 +71,8 @@ import java.util.Locale;
* contents.
*/
public class QuickStatusBarHeader extends RelativeLayout implements
View.OnClickListener, NextAlarmController.NextAlarmChangeCallback {
View.OnClickListener, NextAlarmController.NextAlarmChangeCallback,
ZenModeController.Callback {
private static final String TAG = "QuickStatusBarHeader";
private static final boolean DEBUG = false;
@@ -117,6 +119,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
private DateView mDateView;
private NextAlarmController mAlarmController;
private ZenModeController mZenController;
/** Counts how many times the long press tooltip has been shown to the user. */
private int mShownCount;
@@ -136,6 +139,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
public QuickStatusBarHeader(Context context, AttributeSet attrs) {
super(context, attrs);
mAlarmController = Dependency.get(NextAlarmController.class);
mZenController = Dependency.get(ZenModeController.class);
mShownCount = getStoredShownCount();
}
@@ -182,19 +186,45 @@ public class QuickStatusBarHeader extends RelativeLayout implements
}
private void updateStatusText() {
boolean changed = updateRingerStatus() || updateAlarmStatus();
if (changed) {
boolean alarmVisible = mNextAlarmTextView.getVisibility() == View.VISIBLE;
boolean ringerVisible = mRingerModeTextView.getVisibility() == View.VISIBLE;
mStatusSeparator.setVisibility(alarmVisible && ringerVisible ? View.VISIBLE
: View.GONE);
updateTooltipShow();
}
}
private boolean updateRingerStatus() {
boolean isOriginalVisible = mRingerModeTextView.getVisibility() == View.VISIBLE;
CharSequence originalRingerText = mRingerModeTextView.getText();
boolean ringerVisible = false;
if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_vibrate);
mRingerModeTextView.setText(R.string.qs_status_phone_vibrate);
ringerVisible = true;
} else if (mRingerMode == AudioManager.RINGER_MODE_SILENT) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_silent);
mRingerModeTextView.setText(R.string.qs_status_phone_muted);
ringerVisible = true;
if (!ZenModeConfig.isZenOverridingRinger(mZenController.getZen(),
mZenController.getConfig())) {
if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_vibrate);
mRingerModeTextView.setText(R.string.qs_status_phone_vibrate);
ringerVisible = true;
} else if (mRingerMode == AudioManager.RINGER_MODE_SILENT) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_silent);
mRingerModeTextView.setText(R.string.qs_status_phone_muted);
ringerVisible = true;
}
}
mRingerModeIcon.setVisibility(ringerVisible ? View.VISIBLE : View.GONE);
mRingerModeTextView.setVisibility(ringerVisible ? View.VISIBLE : View.GONE);
return isOriginalVisible != ringerVisible ||
!Objects.equals(originalRingerText, mRingerModeTextView.getText());
}
private boolean updateAlarmStatus() {
boolean isOriginalVisible = mNextAlarmTextView.getVisibility() == View.VISIBLE;
CharSequence originalAlarmText = mNextAlarmTextView.getText();
boolean alarmVisible = false;
if (mNextAlarm != null) {
alarmVisible = true;
@@ -202,10 +232,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements
}
mNextAlarmIcon.setVisibility(alarmVisible ? View.VISIBLE : View.GONE);
mNextAlarmTextView.setVisibility(alarmVisible ? View.VISIBLE : View.GONE);
mStatusSeparator.setVisibility(alarmVisible && ringerVisible ? View.VISIBLE : View.GONE);
updateTooltipShow();
}
return isOriginalVisible != alarmVisible ||
!Objects.equals(originalAlarmText, mNextAlarmTextView.getText());
}
private void applyDarkness(int id, Rect tintArea, float intensity, int color) {
View v = findViewById(id);
@@ -368,10 +398,12 @@ public class QuickStatusBarHeader extends RelativeLayout implements
mListening = listening;
if (listening) {
mZenController.addCallback(this);
mAlarmController.addCallback(this);
mContext.registerReceiver(mRingerReceiver,
new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
} else {
mZenController.removeCallback(this);
mAlarmController.removeCallback(this);
mContext.unregisterReceiver(mRingerReceiver);
}
@@ -391,6 +423,17 @@ public class QuickStatusBarHeader extends RelativeLayout implements
updateStatusText();
}
@Override
public void onZenChanged(int zen) {
updateStatusText();
}
@Override
public void onConfigChanged(ZenModeConfig config) {
updateStatusText();
}
private void updateTooltipShow() {
if (hasStatusText()) {
hideLongPressTooltip(true /* shouldShowStatusText */);
@@ -547,5 +590,4 @@ public class QuickStatusBarHeader extends RelativeLayout implements
public static float getColorIntensity(@ColorInt int color) {
return color == Color.WHITE ? 0 : 1;
}
}

View File

@@ -50,6 +50,7 @@ import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.notification.StatusBarNotification;
import android.service.notification.ZenModeConfig;
import android.telecom.TelecomManager;
import android.util.ArraySet;
import android.util.Log;
@@ -286,6 +287,11 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
updateVolumeZen();
}
@Override
public void onConfigChanged(ZenModeConfig config) {
updateVolumeZen();
}
@Override
public void onLocationActiveChanged(boolean active) {
updateLocation();
@@ -363,16 +369,16 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
zenDescription = mContext.getString(R.string.interruption_level_priority);
}
if (zen != Global.ZEN_MODE_NO_INTERRUPTIONS && zen != Global.ZEN_MODE_ALARMS &&
audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_vibrate;
volumeDescription = mContext.getString(R.string.accessibility_ringer_vibrate);
} else if (zen != Global.ZEN_MODE_NO_INTERRUPTIONS && zen != Global.ZEN_MODE_ALARMS &&
audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_silent;
volumeDescription = mContext.getString(R.string.accessibility_ringer_silent);
if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConfig())) {
if (audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_vibrate;
volumeDescription = mContext.getString(R.string.accessibility_ringer_vibrate);
} else if (audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) {
volumeVisible = true;
volumeIconId = R.drawable.stat_sys_ringer_silent;
volumeDescription = mContext.getString(R.string.accessibility_ringer_silent);
}
}
if (zenVisible) {