am 6ccb72e9: Merge "Zen: Add the ability to enter "None" mode during downtime." into lmp-mr1-dev automerge: 2f9e7f6

* commit '6ccb72e9940df9b50a213fa84483ed5da9780cd0':
  Zen: Add the ability to enter "None" mode during downtime.
This commit is contained in:
John Spurlock
2014-11-05 20:43:18 +00:00
committed by Android Git Automerger
4 changed files with 45 additions and 28 deletions

View File

@@ -78,6 +78,7 @@ public class ZenModeConfig implements Parcelable {
private static final String ALLOW_ATT_EVENTS = "events";
private static final String SLEEP_TAG = "sleep";
private static final String SLEEP_ATT_MODE = "mode";
private static final String SLEEP_ATT_NONE = "none";
private static final String SLEEP_ATT_START_HR = "startHour";
private static final String SLEEP_ATT_START_MIN = "startMin";
@@ -107,6 +108,7 @@ public class ZenModeConfig implements Parcelable {
public int sleepStartMinute; // 0-59
public int sleepEndHour;
public int sleepEndMinute;
public boolean sleepNone; // false = priority, true = none
public ComponentName[] conditionComponents;
public Uri[] conditionIds;
public Condition exitCondition;
@@ -125,6 +127,7 @@ public class ZenModeConfig implements Parcelable {
sleepStartMinute = source.readInt();
sleepEndHour = source.readInt();
sleepEndMinute = source.readInt();
sleepNone = source.readInt() == 1;
int len = source.readInt();
if (len > 0) {
conditionComponents = new ComponentName[len];
@@ -155,6 +158,7 @@ public class ZenModeConfig implements Parcelable {
dest.writeInt(sleepStartMinute);
dest.writeInt(sleepEndHour);
dest.writeInt(sleepEndMinute);
dest.writeInt(sleepNone ? 1 : 0);
if (conditionComponents != null && conditionComponents.length > 0) {
dest.writeInt(conditionComponents.length);
dest.writeTypedArray(conditionComponents, 0);
@@ -182,6 +186,7 @@ public class ZenModeConfig implements Parcelable {
.append(",sleepMode=").append(sleepMode)
.append(",sleepStart=").append(sleepStartHour).append('.').append(sleepStartMinute)
.append(",sleepEnd=").append(sleepEndHour).append('.').append(sleepEndMinute)
.append(",sleepNone=").append(sleepNone)
.append(",conditionComponents=")
.append(conditionComponents == null ? null : TextUtils.join(",", conditionComponents))
.append(",conditionIds=")
@@ -214,6 +219,7 @@ public class ZenModeConfig implements Parcelable {
&& other.allowFrom == allowFrom
&& other.allowEvents == allowEvents
&& Objects.equals(other.sleepMode, sleepMode)
&& other.sleepNone == sleepNone
&& other.sleepStartHour == sleepStartHour
&& other.sleepStartMinute == sleepStartMinute
&& other.sleepEndHour == sleepEndHour
@@ -226,7 +232,7 @@ public class ZenModeConfig implements Parcelable {
@Override
public int hashCode() {
return Objects.hash(allowCalls, allowMessages, allowFrom, allowEvents, sleepMode,
return Objects.hash(allowCalls, allowMessages, allowFrom, allowEvents, sleepMode, sleepNone,
sleepStartHour, sleepStartMinute, sleepEndHour, sleepEndMinute,
Arrays.hashCode(conditionComponents), Arrays.hashCode(conditionIds),
exitCondition, exitConditionComponent);
@@ -302,6 +308,7 @@ public class ZenModeConfig implements Parcelable {
} else if (SLEEP_TAG.equals(tag)) {
final String mode = parser.getAttributeValue(null, SLEEP_ATT_MODE);
rt.sleepMode = isValidSleepMode(mode)? mode : null;
rt.sleepNone = safeBoolean(parser, SLEEP_ATT_NONE, false);
final int startHour = safeInt(parser, SLEEP_ATT_START_HR, 0);
final int startMinute = safeInt(parser, SLEEP_ATT_START_MIN, 0);
final int endHour = safeInt(parser, SLEEP_ATT_END_HR, 0);
@@ -345,6 +352,7 @@ public class ZenModeConfig implements Parcelable {
if (sleepMode != null) {
out.attribute(null, SLEEP_ATT_MODE, sleepMode);
}
out.attribute(null, SLEEP_ATT_NONE, Boolean.toString(sleepNone));
out.attribute(null, SLEEP_ATT_START_HR, Integer.toString(sleepStartHour));
out.attribute(null, SLEEP_ATT_START_MIN, Integer.toString(sleepStartMinute));
out.attribute(null, SLEEP_ATT_END_HR, Integer.toString(sleepEndHour));

View File

@@ -553,20 +553,22 @@ public class ConditionProviders extends ManagedServices {
private class DowntimeCallback implements DowntimeConditionProvider.Callback {
@Override
public void onDowntimeChanged(boolean inDowntime) {
public void onDowntimeChanged(int downtimeMode) {
final int mode = mZenModeHelper.getZenMode();
final ZenModeConfig config = mZenModeHelper.getConfig();
// enter downtime
if (inDowntime && mode == Global.ZEN_MODE_OFF && config != null) {
final boolean inDowntime = downtimeMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
|| downtimeMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
final boolean downtimeCurrent = mDowntime.isDowntimeCondition(mExitCondition);
// enter downtime, or update mode if reconfigured during an active downtime
if (inDowntime && (mode == Global.ZEN_MODE_OFF || downtimeCurrent) && config != null) {
final Condition condition = mDowntime.createCondition(config.toDowntimeInfo(),
Condition.STATE_TRUE);
mZenModeHelper.setZenMode(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, "downtimeEnter");
mZenModeHelper.setZenMode(downtimeMode, "downtimeEnter");
setZenModeCondition(condition, "downtime");
}
// exit downtime
if (!inDowntime && mDowntime.isDowntimeCondition(mExitCondition)
&& (mode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
|| mode == Global.ZEN_MODE_NO_INTERRUPTIONS)) {
if (!inDowntime && downtimeCurrent && (mode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
|| mode == Global.ZEN_MODE_NO_INTERRUPTIONS)) {
mZenModeHelper.setZenMode(Global.ZEN_MODE_OFF, "downtimeExit");
}
}

View File

@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.provider.Settings.Global;
import android.service.notification.Condition;
import android.service.notification.ConditionProviderService;
import android.service.notification.IConditionProvider;
@@ -64,7 +65,7 @@ public class DowntimeConditionProvider extends ConditionProviderService {
private final ArraySet<Integer> mDays = new ArraySet<Integer>();
private boolean mConnected;
private boolean mInDowntime;
private int mDowntimeMode;
private ZenModeConfig mConfig;
private Callback mCallback;
@@ -75,7 +76,7 @@ public class DowntimeConditionProvider extends ConditionProviderService {
public void dump(PrintWriter pw, DumpFilter filter) {
pw.println(" DowntimeConditionProvider:");
pw.print(" mConnected="); pw.println(mConnected);
pw.print(" mInDowntime="); pw.println(mInDowntime);
pw.print(" mDowntimeMode="); pw.println(Global.zenModeToString(mDowntimeMode));
}
public void attachBase(Context base) {
@@ -113,7 +114,7 @@ public class DowntimeConditionProvider extends ConditionProviderService {
public void onRequestConditions(int relevance) {
if (DEBUG) Slog.d(TAG, "onRequestConditions relevance=" + relevance);
if ((relevance & Condition.FLAG_RELEVANT_NOW) != 0) {
if (mInDowntime && mConfig != null) {
if (isInDowntime() && mConfig != null) {
notifyCondition(createCondition(mConfig.toDowntimeInfo(), Condition.STATE_TRUE));
}
}
@@ -124,7 +125,7 @@ public class DowntimeConditionProvider extends ConditionProviderService {
if (DEBUG) Slog.d(TAG, "onSubscribe conditionId=" + conditionId);
final DowntimeInfo downtime = ZenModeConfig.tryParseDowntimeConditionId(conditionId);
if (downtime != null && mConfig != null) {
final int state = mConfig.toDowntimeInfo().equals(downtime) && mInDowntime
final int state = mConfig.toDowntimeInfo().equals(downtime) && isInDowntime()
? Condition.STATE_TRUE : Condition.STATE_FALSE;
if (DEBUG) Slog.d(TAG, "notify condition state: " + Condition.stateToString(state));
notifyCondition(createCondition(downtime, state));
@@ -146,7 +147,7 @@ public class DowntimeConditionProvider extends ConditionProviderService {
}
public boolean isInDowntime() {
return mInDowntime;
return mDowntimeMode != Global.ZEN_MODE_OFF;
}
public Condition createCondition(DowntimeInfo downtime, int state) {
@@ -182,15 +183,18 @@ public class DowntimeConditionProvider extends ConditionProviderService {
}
}
private boolean isInDowntime(long time) {
if (mConfig == null || mDays.size() == 0) return false;
private int computeDowntimeMode(long time) {
if (mConfig == null || mDays.size() == 0) return Global.ZEN_MODE_OFF;
final long start = getTime(time, mConfig.sleepStartHour, mConfig.sleepStartMinute);
long end = getTime(time, mConfig.sleepEndHour, mConfig.sleepEndMinute);
if (start == end) return false;
if (start == end) return Global.ZEN_MODE_OFF;
if (end < start) {
end = addDays(end, 1);
}
return isInDowntime(-1, time, start, end) || isInDowntime(0, time, start, end);
final boolean inDowntime = isInDowntime(-1, time, start, end)
|| isInDowntime(0, time, start, end);
return inDowntime ? (mConfig.sleepNone ? Global.ZEN_MODE_NO_INTERRUPTIONS
: Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) : Global.ZEN_MODE_OFF;
}
private boolean isInDowntime(int daysOffset, long time, long start, long end) {
@@ -202,18 +206,18 @@ public class DowntimeConditionProvider extends ConditionProviderService {
}
private void reevaluateDowntime() {
final boolean inDowntime = isInDowntime(System.currentTimeMillis());
if (DEBUG) Slog.d(TAG, "inDowntime=" + inDowntime);
if (inDowntime == mInDowntime) return;
Slog.i(TAG, (inDowntime ? "Entering" : "Exiting" ) + " downtime");
mInDowntime = inDowntime;
ZenLog.traceDowntime(mInDowntime, getDayOfWeek(System.currentTimeMillis()), mDays);
final int downtimeMode = computeDowntimeMode(System.currentTimeMillis());
if (DEBUG) Slog.d(TAG, "downtimeMode=" + downtimeMode);
if (downtimeMode == mDowntimeMode) return;
mDowntimeMode = downtimeMode;
Slog.i(TAG, (isInDowntime() ? "Entering" : "Exiting" ) + " downtime");
ZenLog.traceDowntime(mDowntimeMode, getDayOfWeek(System.currentTimeMillis()), mDays);
fireDowntimeChanged();
}
private void fireDowntimeChanged() {
if (mCallback != null) {
mCallback.onDowntimeChanged(mInDowntime);
mCallback.onDowntimeChanged(mDowntimeMode);
}
}
@@ -256,7 +260,10 @@ public class DowntimeConditionProvider extends ConditionProviderService {
time = addDays(time, 1);
}
final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode,
new Intent(action).putExtra(EXTRA_TIME, time), PendingIntent.FLAG_UPDATE_CURRENT);
new Intent(action)
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
.putExtra(EXTRA_TIME, time),
PendingIntent.FLAG_UPDATE_CURRENT);
alarms.cancel(pendingIntent);
if (mConfig.sleepMode != null) {
if (DEBUG) Slog.d(TAG, String.format("Scheduling %s for %s, %s in the future, now=%s",
@@ -290,6 +297,6 @@ public class DowntimeConditionProvider extends ConditionProviderService {
};
public interface Callback {
void onDowntimeChanged(boolean inDowntime);
void onDowntimeChanged(int downtimeMode);
}
}

View File

@@ -75,8 +75,8 @@ public class ZenLog {
append(TYPE_SET_RINGER_MODE, ringerModeToString(ringerMode));
}
public static void traceDowntime(boolean inDowntime, int day, ArraySet<Integer> days) {
append(TYPE_DOWNTIME, inDowntime + ",day=" + day + ",days=" + days);
public static void traceDowntime(int downtimeMode, int day, ArraySet<Integer> days) {
append(TYPE_DOWNTIME, zenModeToString(downtimeMode) + ",day=" + day + ",days=" + days);
}
public static void traceSetZenMode(int mode, String reason) {