diff options
| author | 2018-05-04 14:58:55 -0700 | |
|---|---|---|
| committer | 2018-05-04 14:58:55 -0700 | |
| commit | b2ffa1ab945ea610f0588a38e6c6eb0dc11d5fbd (patch) | |
| tree | 2271cd72e2fa146e2dfaa44cff36e39a27bc06d7 | |
| parent | 47e3c8713e25f720c3dce927a30337a22eef0d17 (diff) | |
| parent | c6163bf63661354d8d56acfdc6a3bdabac466f70 (diff) | |
Merge "Add DND indicator to AOD" into pi-dev
am: c6163bf636
Change-Id: Ia6af65c0cc344fba759a7adc8a9463a11452b161
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++; |