Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(433)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/KeyguardBroadcastReceiver.java

Issue 2568843003: Allow deferred intent when the screen is locked (Closed)
Patch Set: Allow deferred intent when the screen is locked Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/KeyguardBroadcastReceiver.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyguardBroadcastReceiver.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyguardBroadcastReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a4c0b6e962f992a55fd72ea2ab78f7d08b612b1
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyguardBroadcastReceiver.java
@@ -0,0 +1,56 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import org.chromium.base.VisibleForTesting;
+
+/**
+ * Broadcast receiver when the screen is unlocked from pin, pattern, or password.
Maria 2016/12/13 21:36:09 I would add a note that this class handles exactly
Sherry 2016/12/13 22:13:54 Will do.
+ */
+public class KeyguardBroadcastReceiver extends BroadcastReceiver {
Ted C 2016/12/13 22:47:13 based on my comment in the other file about unregi
Sherry 2016/12/14 00:54:07 It sounds ideal, however, that will have this clas
Ted C 2016/12/14 19:55:06 Can you not use the application context (ContextUt
Sherry 2016/12/14 22:25:46 See my replies to each of your 4 points: 1.) Agree
Sherry 2016/12/16 21:10:59 I have a plan to make the delayed task for unregis
Sherry 2016/12/16 23:00:40 My bad, just realized Handler is running the task
+ private static final int VALID_DEFERRED_PERIOD_MS = 10000;
+
+ private Intent mDeferredIntent;
+ private long mDeferredIntentCreatedTime;
+ private boolean mShouldFireIntent;
+
+ public KeyguardBroadcastReceiver(Intent deferredIntent) {
+ updateDeferredIntent(deferredIntent);
+ mShouldFireIntent = true;
Ted C 2016/12/13 22:47:13 can use just use the null-ness of mDeferredIntent
Sherry 2016/12/14 00:54:07 That was my first intuition as well. I used to thi
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ assert Intent.ACTION_USER_PRESENT.equals(intent.getAction());
+
+ if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())
+ && hasValidDeferredIntent(mDeferredIntent) && mShouldFireIntent) {
+ context.startActivity(mDeferredIntent);
Ted C 2016/12/13 22:47:13 what context is this referring to? In particular,
Sherry 2016/12/14 00:54:07 According to https://developer.android.com/referen
+ // Prevent the broadcast receiver from firing intent unexpectedly.
+ mShouldFireIntent = false;
+ }
+ }
+
+ public boolean hasValidDeferredIntent(final Intent intent) {
Maria 2016/12/13 21:36:09 style: add javadoc to public methods
Sherry 2016/12/13 22:13:54 Will do.
+ return mDeferredIntent != null
+ && System.currentTimeMillis() - mDeferredIntentCreatedTime
Maria 2016/12/13 21:36:09 style: parenthesis around subtraction
Sherry 2016/12/13 22:13:54 Will update.
+ <= VALID_DEFERRED_PERIOD_MS
+ && intent == mDeferredIntent;
+ }
+
+ public void updateDeferredIntent(final Intent intent) {
+ mDeferredIntent = intent;
+ mDeferredIntentCreatedTime = System.currentTimeMillis();
Maria 2016/12/13 21:36:09 For timing events use SystemClock.elapsedRealtime(
Sherry 2016/12/13 22:13:54 Will update.
+ }
+
+ @VisibleForTesting
+ void setCreateTimeForTesting(final long time) {
+ mDeferredIntentCreatedTime = time;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698