summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-12-21 02:46:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-12-21 02:46:56 +0000
commit74b93f600fa2230c66ecb94390c26b8e8b1dceb1 (patch)
tree080b6f0d7af7ed758f420783e7abc688ea5c033a
parent84cdbdfc1301d02409c525de9f5092ff3ed84d6d (diff)
parent7e171e28fa0606c1984bd598282e7661390c2e8c (diff)
Merge "Reduce number of TIME_TICK broadcasts"
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java38
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java28
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java12
3 files changed, 45 insertions, 33 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
index 201c7e69beaf..9a8a6d0c3c3a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
@@ -41,6 +41,8 @@ import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
@@ -49,6 +51,7 @@ import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
import java.util.Date;
import java.util.Locale;
+import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
/**
@@ -100,21 +103,28 @@ public class KeyguardSliceProvider extends SliceProvider implements
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
- if (Intent.ACTION_TIME_TICK.equals(action)
- || Intent.ACTION_DATE_CHANGED.equals(action)
- || Intent.ACTION_TIME_CHANGED.equals(action)
- || Intent.ACTION_TIMEZONE_CHANGED.equals(action)
- || Intent.ACTION_LOCALE_CHANGED.equals(action)) {
- if (Intent.ACTION_LOCALE_CHANGED.equals(action)
- || Intent.ACTION_TIMEZONE_CHANGED.equals(action)) {
- // need to get a fresh date format
- mHandler.post(KeyguardSliceProvider.this::cleanDateFormat);
- }
+ if (Intent.ACTION_DATE_CHANGED.equals(action)) {
mHandler.post(KeyguardSliceProvider.this::updateClock);
+ } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
+ mHandler.post(KeyguardSliceProvider.this::cleanDateFormat);
}
}
};
+ @VisibleForTesting
+ final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
+ new KeyguardUpdateMonitorCallback() {
+ @Override
+ public void onTimeChanged() {
+ mHandler.post(KeyguardSliceProvider.this::updateClock);
+ }
+
+ @Override
+ public void onTimeZoneChanged(TimeZone timeZone) {
+ mHandler.post(KeyguardSliceProvider.this::cleanDateFormat);
+ }
+ };
+
public KeyguardSliceProvider() {
this(new Handler());
}
@@ -250,11 +260,10 @@ public class KeyguardSliceProvider extends SliceProvider implements
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_DATE_CHANGED);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
getContext().registerReceiver(mIntentReceiver, filter, null /* permission*/,
null /* scheduler */);
+ getKeyguardUpdateMonitor().registerCallback(mKeyguardUpdateMonitorCallback);
mRegistered = true;
}
@@ -300,4 +309,9 @@ public class KeyguardSliceProvider extends SliceProvider implements
}
updateNextAlarm();
}
+
+ @VisibleForTesting
+ protected KeyguardUpdateMonitor getKeyguardUpdateMonitor() {
+ return KeyguardUpdateMonitor.getInstance(getContext());
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 7d1b640f7e40..158430f9ff92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -19,10 +19,7 @@ package com.android.systemui.statusbar;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Color;
@@ -35,7 +32,6 @@ import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
import android.text.format.Formatter;
@@ -152,10 +148,7 @@ public class KeyguardIndicationController implements StateListener {
private void registerCallbacks(KeyguardUpdateMonitor monitor) {
monitor.registerCallback(getKeyguardCallback());
- mContext.registerReceiverAsUser(mTickReceiver, UserHandle.SYSTEM,
- new IntentFilter(Intent.ACTION_TIME_TICK), null,
- Dependency.get(Dependency.TIME_TICK_HANDLER));
-
+ KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mTickReceiver);
Dependency.get(StatusBarStateController.class).addCallback(this);
}
@@ -166,7 +159,7 @@ public class KeyguardIndicationController implements StateListener {
* //TODO: This can probably be converted to a fragment and not have to be manually recreated
*/
public void destroy() {
- mContext.unregisterReceiver(mTickReceiver);
+ KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mTickReceiver);
Dependency.get(StatusBarStateController.class).removeCallback(this);
}
@@ -477,16 +470,15 @@ public class KeyguardIndicationController implements StateListener {
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
}
- private final BroadcastReceiver mTickReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- mHandler.post(() -> {
- if (mVisible) {
- updateIndication(false);
+ private final KeyguardUpdateMonitorCallback mTickReceiver =
+ new KeyguardUpdateMonitorCallback() {
+ @Override
+ public void onTimeChanged() {
+ if (mVisible) {
+ updateIndication(false /* animate */);
+ }
}
- });
- }
- };
+ };
private final Handler mHandler = new Handler() {
@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 c1c80ce4a70a..7d94635ab548 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
@@ -19,13 +19,13 @@ 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 android.app.AlarmManager;
import android.content.ContentResolver;
-import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;
import android.support.test.filters.SmallTest;
@@ -40,6 +40,7 @@ import androidx.slice.SliceSpecs;
import androidx.slice.builders.ListBuilder;
import androidx.slice.core.SliceQuery;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import org.junit.Assert;
@@ -91,7 +92,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
@Test
public void cleansDateFormat() {
- mProvider.mIntentReceiver.onReceive(getContext(), new Intent(Intent.ACTION_TIMEZONE_CHANGED));
+ mProvider.mKeyguardUpdateMonitorCallback.onTimeZoneChanged(null);
TestableLooper.get(this).processAllMessages();
Assert.assertEquals("Date format should have been cleaned.", 1 /* expected */,
mProvider.mCleanDateFormatInvokations);
@@ -99,7 +100,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
@Test
public void updatesClock() {
- mProvider.mIntentReceiver.onReceive(getContext(), new Intent(Intent.ACTION_TIME_TICK));
+ mProvider.mKeyguardUpdateMonitorCallback.onTimeChanged();
TestableLooper.get(this).processAllMessages();
verify(mContentResolver).notifyChange(eq(mProvider.getUri()), eq(null));
}
@@ -171,6 +172,11 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
}
@Override
+ public KeyguardUpdateMonitor getKeyguardUpdateMonitor() {
+ return mock(KeyguardUpdateMonitor.class);
+ }
+
+ @Override
protected String getFormattedDate() {
return super.getFormattedDate() + mCounter++;
}