Skip to content

Commit f328227

Browse files
John SpurlockAndroid (Google) Code Review
authored andcommitted
Merge "Volume: Hide zen options during setup." into lmp-dev
2 parents 0832b48 + 45601d6 commit f328227

3 files changed

Lines changed: 73 additions & 19 deletions

File tree

packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ public interface ZenModeController {
2929
Uri getExitConditionId();
3030
long getNextAlarm();
3131
void setUserId(int userId);
32+
boolean isZenAvailable();
3233

3334
public static class Callback {
3435
public void onZenChanged(int zen) {}
3536
public void onExitConditionChanged(Uri exitConditionId) {}
3637
public void onConditionsChanged(Condition[] conditions) {}
3738
public void onNextAlarmChanged() {}
39+
public void onZenAvailableChanged(boolean available) {}
3840
}
3941
}

packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,18 @@
2020
import android.app.AlarmManager;
2121
import android.app.INotificationManager;
2222
import android.content.BroadcastReceiver;
23+
import android.content.ContentResolver;
2324
import android.content.Context;
2425
import android.content.Intent;
2526
import android.content.IntentFilter;
27+
import android.database.ContentObserver;
2628
import android.net.Uri;
2729
import android.os.Handler;
2830
import android.os.RemoteException;
2931
import android.os.ServiceManager;
3032
import android.os.UserHandle;
3133
import android.provider.Settings.Global;
34+
import android.provider.Settings.Secure;
3235
import android.service.notification.Condition;
3336
import android.service.notification.IConditionListener;
3437
import android.service.notification.ZenModeConfig;
@@ -52,6 +55,7 @@ public class ZenModeControllerImpl implements ZenModeController {
5255
private final INotificationManager mNoMan;
5356
private final LinkedHashMap<Uri, Condition> mConditions = new LinkedHashMap<Uri, Condition>();
5457
private final AlarmManager mAlarmManager;
58+
private final SetupObserver mSetupObserver;
5559

5660
private int mUserId;
5761
private boolean mRequesting;
@@ -76,6 +80,8 @@ protected void handleValueChanged(int value) {
7680
mNoMan = INotificationManager.Stub.asInterface(
7781
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
7882
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
83+
mSetupObserver = new SetupObserver(handler);
84+
mSetupObserver.register();
7985
}
8086

8187
@Override
@@ -98,6 +104,11 @@ public void setZen(int zen) {
98104
mModeSetting.setValue(zen);
99105
}
100106

107+
@Override
108+
public boolean isZenAvailable() {
109+
return mSetupObserver.isDeviceProvisioned() && mSetupObserver.isUserSetup();
110+
}
111+
101112
@Override
102113
public void requestConditions(boolean request) {
103114
mRequesting = request;
@@ -148,6 +159,7 @@ public void setUserId(int userId) {
148159
mContext.registerReceiverAsUser(mReceiver, new UserHandle(mUserId),
149160
new IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED), null, null);
150161
mRegistered = true;
162+
mSetupObserver.register();
151163
}
152164

153165
private void fireNextAlarmChanged() {
@@ -162,6 +174,12 @@ private void fireZenChanged(int zen) {
162174
}
163175
}
164176

177+
private void fireZenAvailableChanged(boolean available) {
178+
for (Callback cb : mCallbacks) {
179+
cb.onZenAvailableChanged(available);
180+
}
181+
}
182+
165183
private void fireConditionsChanged(Condition[] conditions) {
166184
for (Callback cb : mCallbacks) {
167185
cb.onConditionsChanged(conditions);
@@ -204,4 +222,42 @@ public void onReceive(Context context, Intent intent) {
204222
}
205223
}
206224
};
225+
226+
private final class SetupObserver extends ContentObserver {
227+
private final ContentResolver mResolver;
228+
229+
private boolean mRegistered;
230+
231+
public SetupObserver(Handler handler) {
232+
super(handler);
233+
mResolver = mContext.getContentResolver();
234+
}
235+
236+
public boolean isUserSetup() {
237+
return Secure.getIntForUser(mResolver, Secure.USER_SETUP_COMPLETE, 0, mUserId) != 0;
238+
}
239+
240+
public boolean isDeviceProvisioned() {
241+
return Global.getInt(mResolver, Global.DEVICE_PROVISIONED, 0) != 0;
242+
}
243+
244+
public void register() {
245+
if (mRegistered) {
246+
mResolver.unregisterContentObserver(this);
247+
}
248+
mResolver.registerContentObserver(
249+
Global.getUriFor(Global.DEVICE_PROVISIONED), false, this);
250+
mResolver.registerContentObserver(
251+
Secure.getUriFor(Secure.USER_SETUP_COMPLETE), false, this, mUserId);
252+
fireZenAvailableChanged(isZenAvailable());
253+
}
254+
255+
@Override
256+
public void onChange(boolean selfChange, Uri uri) {
257+
if (Global.getUriFor(Global.DEVICE_PROVISIONED).equals(uri)
258+
|| Secure.getUriFor(Secure.USER_SETUP_COMPLETE).equals(uri)) {
259+
fireZenAvailableChanged(isZenAvailable());
260+
}
261+
}
262+
}
207263
}

packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public class VolumePanel extends Handler {
107107
private static final int MSG_SLIDER_VISIBILITY_CHANGED = 10;
108108
private static final int MSG_DISPLAY_SAFE_VOLUME_WARNING = 11;
109109
private static final int MSG_LAYOUT_DIRECTION = 12;
110-
private static final int MSG_ZEN_MODE_CHANGED = 13;
110+
private static final int MSG_ZEN_MODE_AVAILABLE_CHANGED = 13;
111111
private static final int MSG_USER_ACTIVITY = 14;
112112

113113
// Pseudo stream type for master volume
@@ -125,7 +125,7 @@ public class VolumePanel extends Handler {
125125
private final ZenModeController mZenController;
126126
private boolean mRingIsSilent;
127127
private boolean mVoiceCapable;
128-
private boolean mZenModeCapable;
128+
private boolean mZenModeAvailable;
129129
private boolean mZenPanelExpanded;
130130
private int mTimeoutDelay = TIMEOUT_DELAY;
131131
private float mDisabledAlpha;
@@ -405,9 +405,10 @@ public boolean onTouch(View v, MotionEvent event) {
405405
mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
406406
mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable);
407407

408-
mZenModeCapable = !useMasterVolume && mZenController != null;
409-
updateZenMode(mZenController != null ? mZenController.getZen() : Global.ZEN_MODE_OFF);
410-
mZenController.addCallback(mZenCallback);
408+
if (mZenController != null && !useMasterVolume) {
409+
mZenModeAvailable = mZenController.isZenAvailable();
410+
mZenController.addCallback(mZenCallback);
411+
}
411412

412413
final boolean masterVolumeOnly = res.getBoolean(R.bool.config_useMasterVolume);
413414
final boolean masterVolumeKeySounds = res.getBoolean(R.bool.config_useVolumeKeySounds);
@@ -434,7 +435,7 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
434435
pw.print(" mTag="); pw.println(mTag);
435436
pw.print(" mRingIsSilent="); pw.println(mRingIsSilent);
436437
pw.print(" mVoiceCapable="); pw.println(mVoiceCapable);
437-
pw.print(" mZenModeCapable="); pw.println(mZenModeCapable);
438+
pw.print(" mZenModeAvailable="); pw.println(mZenModeAvailable);
438439
pw.print(" mZenPanelExpanded="); pw.println(mZenPanelExpanded);
439440
pw.print(" mTimeoutDelay="); pw.println(mTimeoutDelay);
440441
pw.print(" mDisabledAlpha="); pw.println(mDisabledAlpha);
@@ -645,7 +646,7 @@ private void reorderSliders(int activeStreamType) {
645646
active.group.setVisibility(View.VISIBLE);
646647
updateSlider(active);
647648
updateTimeoutDelay();
648-
setZenPanelVisible(isNotificationOrRing(mActiveStreamType));
649+
updateZenPanelVisible();
649650
}
650651
}
651652

@@ -776,14 +777,8 @@ public void updateStates() {
776777
}
777778
}
778779

779-
private void updateZenMode(int zen) {
780-
final boolean show = mZenModeCapable && isNotificationOrRing(mActiveStreamType);
781-
setZenPanelVisible(show);
782-
}
783-
784-
public void postZenModeChanged(int zen) {
785-
removeMessages(MSG_ZEN_MODE_CHANGED);
786-
obtainMessage(MSG_ZEN_MODE_CHANGED, zen).sendToTarget();
780+
private void updateZenPanelVisible() {
781+
setZenPanelVisible(mZenModeAvailable && isNotificationOrRing(mActiveStreamType));
787782
}
788783

789784
public void postVolumeChanged(int streamType, int flags) {
@@ -1307,8 +1302,9 @@ public void handleMessage(Message msg) {
13071302
setLayoutDirection(msg.arg1);
13081303
break;
13091304

1310-
case MSG_ZEN_MODE_CHANGED:
1311-
updateZenMode(msg.arg1);
1305+
case MSG_ZEN_MODE_AVAILABLE_CHANGED:
1306+
mZenModeAvailable = msg.arg1 != 0;
1307+
updateZenPanelVisible();
13121308
break;
13131309

13141310
case MSG_USER_ACTIVITY:
@@ -1359,8 +1355,8 @@ public void onStopTrackingTouch(SeekBar seekBar) {
13591355
};
13601356

13611357
private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() {
1362-
public void onZenChanged(int zen) {
1363-
postZenModeChanged(zen);
1358+
public void onZenAvailableChanged(boolean available) {
1359+
obtainMessage(MSG_ZEN_MODE_AVAILABLE_CHANGED, available ? 1 : 0, 0).sendToTarget();
13641360
}
13651361
};
13661362

0 commit comments

Comments
 (0)