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

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

Issue 2507523003: Revert of android: Don't keep GSA alive if it supports account change broadcasts. (Closed)
Patch Set: Created 4 years, 1 month 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/gsa/GSAAccountChangeListener.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAAccountChangeListener.java b/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAAccountChangeListener.java
deleted file mode 100644
index a9b8556df5c699d70d5e76ce68b53d85a0cb7af8..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/gsa/GSAAccountChangeListener.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// 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.gsa;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.Uri;
-import android.os.Bundle;
-
-import org.chromium.base.Callback;
-import org.chromium.base.ContextUtils;
-
-/**
- * Listens to te account change notifications from GSA.
- *
- * Depending on GSA's version, the account change notifications are dispatched:
- * - Through SSB_SERVICE, or
- * - Through a Broadcast.
- *
- * We proceed the following way:
- * 1. Connect to the GSA service.
- * 2. If GSA supports the broadcast, disconnect from it, otherwise keep the old method.
- */
-public class GSAAccountChangeListener {
- // These are GSA constants.
- private static final String GSA_PACKAGE_NAME = "com.google.android.googlequicksearchbox";
- private static final String ACCOUNT_UPDATE_BROADCAST_INTENT =
- "com.google.android.apps.now.account_update_broadcast";
- private static final String KEY_SSB_BROADCASTS_ACCOUNT_CHANGE_TO_CHROME =
- "ssb_service:ssb_broadcasts_account_change_to_chrome";
- private static final String BROADCAST_INTENT_ACCOUNT_NAME_EXTRA = "account_name";
- public static final String ACCOUNT_UPDATE_BROADCAST_PERMISSION =
- "com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS";
-
- private static GSAAccountChangeListener sInstance;
-
- // Reference count for the connection.
- private int mUsersCount;
- private GSAServiceClient mClient;
-
- /**
- * @return the instance of GSAAccountChangeListener.
- */
- public static GSAAccountChangeListener getInstance() {
- if (sInstance == null) {
- Context context = ContextUtils.getApplicationContext();
- sInstance = new GSAAccountChangeListener(context);
- }
- return sInstance;
- }
-
- private GSAAccountChangeListener(Context context) {
- Context applicationContext = context.getApplicationContext();
- BroadcastReceiver accountChangeReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (!ACCOUNT_UPDATE_BROADCAST_INTENT.equals(intent.getAction())) return;
- String accountName = intent.getStringExtra(BROADCAST_INTENT_ACCOUNT_NAME_EXTRA);
- GSAState.getInstance(context.getApplicationContext()).setGsaAccount(accountName);
- }
- };
- applicationContext.registerReceiver(accountChangeReceiver,
- new IntentFilter(ACCOUNT_UPDATE_BROADCAST_INTENT),
- ACCOUNT_UPDATE_BROADCAST_PERMISSION, null);
-
- createGsaClientAndConnect(applicationContext);
-
- // If some future version of GSA no longer broadcasts the account change
- // notification, need to fall back to the service.
- //
- // The states are: USE_SERVICE and USE_BROADCAST. The initial state (when Chrome starts) is
- // USE_SERVICE.
- // The state transitions are:
- // - USE_SERVICE -> USE_BROADCAST: When GSA sends a message (through the service) declaring
- // it supports the broadcasts.
- // - USE_BROADCAST -> USE_SERVICE: When GSA is updated.
- BroadcastReceiver gsaUpdatedReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Uri data = intent.getData();
- if (data == null) return;
-
- String packageName = data.getEncodedSchemeSpecificPart();
- if (GSA_PACKAGE_NAME.equals(packageName)) {
- Context applicationContext = context.getApplicationContext();
- // We no longer know the account, but GSA will tell us momentarily (through
- // the service).
- GSAState.getInstance(applicationContext).setGsaAccount(null);
- // GSA has been updated, it might no longer support the broadcast. Reconnect to
- // check.
- mClient = null;
- createGsaClientAndConnect(applicationContext);
- }
- }
- };
- IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REPLACED);
- filter.addDataScheme("package");
- context.registerReceiver(gsaUpdatedReceiver, filter);
- }
-
- private void createGsaClientAndConnect(Context context) {
- Callback<Bundle> onMessageReceived = new Callback<Bundle>() {
- @Override
- public void onResult(Bundle result) {
- if (result.getBoolean(KEY_SSB_BROADCASTS_ACCOUNT_CHANGE_TO_CHROME)) {
- notifyGsaBroadcastsAccountChanges();
- }
- }
- };
- mClient = new GSAServiceClient(context, onMessageReceived);
- mClient.connect();
- }
-
- /**
- * Connects to the GSA service if GSA doesn't support notifications.
- */
- public void connect() {
- if (mClient != null) mClient.connect();
- mUsersCount++;
- }
-
- /**
- * Disconnects from the GSA service if GSA doesn't support notifications.
- */
- public void disconnect() {
- mUsersCount--;
- if (mClient != null && mUsersCount == 0) mClient.disconnect();
- }
-
- private void notifyGsaBroadcastsAccountChanges() {
- mClient.disconnect();
- mClient = null;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698