summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java42
4 files changed, 101 insertions, 20 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index 33cac3bfdc73..30a17a129e41 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -451,10 +451,11 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
- for (int i = 0; i < getChildCount(); i++) {
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);
if (child instanceof KeyguardSliceButton) {
- ((KeyguardSliceButton) child).setMaxWidth(width / 2);
+ ((KeyguardSliceButton) child).setMaxWidth(width / childCount);
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -482,12 +483,10 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
@VisibleForTesting
static class KeyguardSliceButton extends Button implements
ConfigurationController.ConfigurationListener {
- private final Context mContext;
public KeyguardSliceButton(Context context) {
super(context, null /* attrs */, 0 /* styleAttr */,
com.android.keyguard.R.style.TextAppearance_Keyguard_Secondary);
- mContext = context;
onDensityOrFontScaleChanged();
setEllipsize(TruncateAt.END);
}
@@ -506,9 +505,20 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
@Override
public void onDensityOrFontScaleChanged() {
- int horizontalPadding = (int) mContext.getResources()
- .getDimension(R.dimen.widget_horizontal_padding);
- setPadding(horizontalPadding / 2, 0, horizontalPadding / 2, 0);
+ updatePadding();
+ }
+
+ @Override
+ public void setText(CharSequence text, BufferType type) {
+ super.setText(text, type);
+ updatePadding();
+ }
+
+ private void updatePadding() {
+ boolean hasText = !TextUtils.isEmpty(getText());
+ int horizontalPadding = (int) getContext().getResources()
+ .getDimension(R.dimen.widget_horizontal_padding) / 2;
+ setPadding(horizontalPadding, 0, horizontalPadding * (hasText ? 1 : -1), 0);
setCompoundDrawablePadding((int) mContext.getResources()
.getDimension(R.dimen.widget_icon_padding));
}
@@ -524,6 +534,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
Drawable bottom) {
super.setCompoundDrawables(left, top, right, bottom);
updateDrawableColors();
+ updatePadding();
}
private void updateDrawableColors() {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
index d81b32b162b7..f867b342c8de 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
@@ -18,6 +18,7 @@ package com.android.systemui.keyguard;
import android.app.ActivityManager;
import android.app.AlarmManager;
+import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -28,13 +29,16 @@ import android.icu.text.DateFormat;
import android.icu.text.DisplayContext;
import android.net.Uri;
import android.os.Handler;
-import android.os.SystemClock;
+import android.provider.Settings;
+import android.service.notification.ZenModeConfig;
import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
+import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
import java.util.Date;
import java.util.Locale;
@@ -49,12 +53,13 @@ import androidx.slice.builders.ListBuilder.RowBuilder;
* Simple Slice provider that shows the current date.
*/
public class KeyguardSliceProvider extends SliceProvider implements
- NextAlarmController.NextAlarmChangeCallback {
+ NextAlarmController.NextAlarmChangeCallback, ZenModeController.Callback {
public static final String KEYGUARD_SLICE_URI = "content://com.android.systemui.keyguard/main";
public static final String KEYGUARD_DATE_URI = "content://com.android.systemui.keyguard/date";
public static final String KEYGUARD_NEXT_ALARM_URI =
"content://com.android.systemui.keyguard/alarm";
+ public static final String KEYGUARD_DND_URI = "content://com.android.systemui.keyguard/dnd";
/**
* Only show alarms that will ring within N hours.
@@ -62,11 +67,14 @@ public class KeyguardSliceProvider extends SliceProvider implements
@VisibleForTesting
static final int ALARM_VISIBILITY_HOURS = 12;
- private final Date mCurrentTime = new Date();
protected final Uri mSliceUri;
protected final Uri mDateUri;
protected final Uri mAlarmUri;
+ protected final Uri mDndUri;
+ private final Date mCurrentTime = new Date();
private final Handler mHandler;
+ private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm;
+ private ZenModeController mZenModeController;
private String mDatePattern;
private DateFormat mDateFormat;
private String mLastText;
@@ -77,7 +85,6 @@ public class KeyguardSliceProvider extends SliceProvider implements
protected AlarmManager mAlarmManager;
protected ContentResolver mContentResolver;
private AlarmManager.AlarmClockInfo mNextAlarmInfo;
- private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm;
/**
* Receiver responsible for time ticking and updating the date format.
@@ -112,6 +119,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
mSliceUri = Uri.parse(KEYGUARD_SLICE_URI);
mDateUri = Uri.parse(KEYGUARD_DATE_URI);
mAlarmUri = Uri.parse(KEYGUARD_NEXT_ALARM_URI);
+ mDndUri = Uri.parse(KEYGUARD_DND_URI);
}
@Override
@@ -119,6 +127,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
ListBuilder builder = new ListBuilder(getContext(), mSliceUri);
builder.addRow(new RowBuilder(builder, mDateUri).setTitle(mLastText));
addNextAlarm(builder);
+ addZenMode(builder);
return builder.build();
}
@@ -134,18 +143,53 @@ public class KeyguardSliceProvider extends SliceProvider implements
builder.addRow(alarmRowBuilder);
}
+ /**
+ * Add zen mode (DND) icon to slice if it's enabled.
+ * @param builder The slice builder.
+ */
+ protected void addZenMode(ListBuilder builder) {
+ if (!isDndSuppressingNotifications()) {
+ return;
+ }
+ RowBuilder dndBuilder = new RowBuilder(builder, mDndUri)
+ .addEndItem(Icon.createWithResource(getContext(), R.drawable.stat_sys_dnd));
+ builder.addRow(dndBuilder);
+ }
+
+ /**
+ * Return true if DND is enabled suppressing notifications.
+ */
+ protected boolean isDndSuppressingNotifications() {
+ boolean suppressingNotifications = (mZenModeController.getConfig().suppressedVisualEffects
+ & NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST) != 0;
+ return mZenModeController.getZen() != Settings.Global.ZEN_MODE_OFF
+ && suppressingNotifications;
+ }
+
@Override
public boolean onCreateSliceProvider() {
mAlarmManager = getContext().getSystemService(AlarmManager.class);
mContentResolver = getContext().getContentResolver();
mNextAlarmController = new NextAlarmControllerImpl(getContext());
mNextAlarmController.addCallback(this);
+ mZenModeController = new ZenModeControllerImpl(getContext(), mHandler);
+ mZenModeController.addCallback(this);
mDatePattern = getContext().getString(R.string.system_ui_aod_date_pattern);
registerClockUpdate(false /* everyMinute */);
updateClock();
return true;
}
+ @Override
+ public void onZenChanged(int zen) {
+ mContentResolver.notifyChange(mSliceUri, null /* observer */);
+ }
+
+ @Override
+ public void onConfigChanged(ZenModeConfig config) {
+ mContentResolver.notifyChange(mSliceUri, null /* observer */);
+ }
+
private void updateNextAlarm() {
if (withinNHours(mNextAlarmInfo, ALARM_VISIBILITY_HOURS)) {
String pattern = android.text.format.DateFormat.is24HourFormat(getContext(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
index a9da239ada9d..339c115c77a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java
@@ -122,7 +122,7 @@ public class ZenModeControllerImpl extends CurrentUserTracker implements ZenMode
@Override
public int getZen() {
- return mModeSetting.getValue();
+ return mZenMode;
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
index 7d49c4d046a4..a45e6900ece4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
@@ -19,21 +19,25 @@ package com.android.systemui.keyguard;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-
-import androidx.slice.Slice;
+import static org.mockito.Mockito.when;
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
-import android.os.Handler;
+import android.provider.Settings;
import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import android.util.Log;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.ZenModeController;
import org.junit.Assert;
import org.junit.Before;
@@ -43,12 +47,14 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
import java.util.HashSet;
+import java.util.concurrent.TimeUnit;
+import androidx.slice.Slice;
import androidx.slice.SliceItem;
import androidx.slice.SliceProvider;
import androidx.slice.SliceSpecs;
+import androidx.slice.builders.ListBuilder;
import androidx.slice.core.SliceQuery;
@SmallTest
@@ -61,10 +67,12 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
@Mock
private AlarmManager mAlarmManager;
private TestableKeyguardSliceProvider mProvider;
+ private boolean mIsZenMode;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
+ mIsZenMode = false;
mProvider = new TestableKeyguardSliceProvider();
mProvider.attachInfo(getContext(), null);
SliceProvider.setSpecs(new HashSet<>(Arrays.asList(SliceSpecs.LIST)));
@@ -128,14 +136,27 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
verify(mContentResolver).notifyChange(eq(mProvider.getUri()), eq(null));
}
+ @Test
+ public void onZenChanged_updatesSlice() {
+ mProvider.onZenChanged(Settings.Global.ZEN_MODE_ALARMS);
+ verify(mContentResolver).notifyChange(eq(mProvider.getUri()), eq(null));
+ }
+
+ @Test
+ public void addZenMode_addedToSlice() {
+ ListBuilder listBuilder = spy(new ListBuilder(getContext(), mProvider.getUri()));
+ mProvider.addZenMode(listBuilder);
+ verify(listBuilder, never()).addRow(any(ListBuilder.RowBuilder.class));
+
+ mIsZenMode = true;
+ mProvider.addZenMode(listBuilder);
+ verify(listBuilder).addRow(any(ListBuilder.RowBuilder.class));
+ }
+
private class TestableKeyguardSliceProvider extends KeyguardSliceProvider {
int mCleanDateFormatInvokations;
private int mCounter;
- TestableKeyguardSliceProvider() {
- super(new Handler(TestableLooper.get(KeyguardSliceProviderTest.this).getLooper()));
- }
-
Uri getUri() {
return mSliceUri;
}
@@ -149,6 +170,11 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
}
@Override
+ protected boolean isDndSuppressingNotifications() {
+ return mIsZenMode;
+ }
+
+ @Override
void cleanDateFormat() {
super.cleanDateFormat();
mCleanDateFormatInvokations++;