// Copyright 2015 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.firstrun; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import org.chromium.base.ContextUtils; import org.chromium.components.signin.AccountManagerHelper; import java.util.HashSet; import java.util.List; import java.util.Set; /** * This receiver is notified when a user goes through the Setup Wizard and acknowledges * the Chrome ToS so that we don't show the ToS string during our first run. */ public class ToSAckedReceiver extends BroadcastReceiver { private static final String TOS_ACKED_ACCOUNTS = "ToS acknowledged accounts"; private static final String EXTRA_ACCOUNT_NAME = "TosAckedReceiver.account"; @Override public void onReceive(Context context, Intent intent) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return; Bundle args = intent.getExtras(); if (args == null) return; String accountName = args.getString(EXTRA_ACCOUNT_NAME, null); if (accountName == null) return; SharedPreferences prefs = ContextUtils.getAppSharedPreferences(); // Make sure to construct a new set so it can be modified safely. See crbug.com/568369. Set<String> accounts = new HashSet<String>(prefs.getStringSet(TOS_ACKED_ACCOUNTS, new HashSet<String>())); accounts.add(accountName); prefs.edit().remove(TOS_ACKED_ACCOUNTS).apply(); prefs.edit().putStringSet(TOS_ACKED_ACCOUNTS, accounts).apply(); } /** * Checks whether any of the current google accounts has seen the ToS in setup wizard. * @param context Context for the app. * @return Whether or not the the ToS has been seen. */ public static boolean checkAnyUserHasSeenToS(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return false; Set<String> toSAckedAccounts = ContextUtils.getAppSharedPreferences().getStringSet( TOS_ACKED_ACCOUNTS, null); if (toSAckedAccounts == null || toSAckedAccounts.isEmpty()) return false; AccountManagerHelper accountHelper = AccountManagerHelper.get(context); List<String> accountNames = accountHelper.getGoogleAccountNames(); if (accountNames.isEmpty()) return false; for (int k = 0; k < accountNames.size(); k++) { if (toSAckedAccounts.contains(accountNames.get(k))) return true; } return false; } }