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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkPromoHeader.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months 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_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkPromoHeader.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkPromoHeader.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkPromoHeader.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8f5a41b233d357728a853e25530b9ff5e2140bd
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkPromoHeader.java
@@ -0,0 +1,163 @@
+// 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.enhancedbookmarks;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.RecyclerView.ViewHolder;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.chrome.browser.signin.SigninManager;
+import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver;
+import org.chromium.sync.AndroidSyncSettings;
+import org.chromium.sync.AndroidSyncSettings.AndroidSyncSettingsObserver;
+import org.chromium.sync.signin.ChromeSigninController;
+
+/**
+ * Class that manages all the logic and UI behind the signin promo header in the enhanced bookmark
+ * content UI. The header is shown only on certain situations, (e.g., not signed in).
+ */
+class EnhancedBookmarkPromoHeader implements AndroidSyncSettingsObserver,
+ SignInStateObserver {
+ /**
+ * Interface to listen signin promo header visibility changes.
+ */
+ interface PromoHeaderShowingChangeListener {
+ /**
+ * Called when signin promo header visibility is changed.
+ * @param isShowing Whether it should be showing.
+ */
+ void onPromoHeaderShowingChanged(boolean isShowing);
+ }
+
+ private static final String PREF_SIGNIN_PROMO_DECLINED =
+ "enhanced_bookmark_signin_promo_declined";
+
+ private Context mContext;
+ private SigninManager mSignInManager;
+ private boolean mIsShowing;
+ private PromoHeaderShowingChangeListener mShowingChangeListener;
+
+ /**
+ * Initializes the class. Note that this will start listening to signin related events and
+ * update itself if needed.
+ */
+ EnhancedBookmarkPromoHeader(Context context,
+ PromoHeaderShowingChangeListener showingChangeListener) {
+ mContext = context;
+ mShowingChangeListener = showingChangeListener;
+
+ AndroidSyncSettings.registerObserver(mContext, this);
+
+ mSignInManager = SigninManager.get(mContext);
+ mSignInManager.addSignInStateObserver(this);
+
+ updateShowing(false);
+ if (isShowing()) RecordUserAction.record("Stars_SignInPromoHeader_Displayed");
+ }
+
+ /**
+ * Clean ups the class. Must be called once done using this class.
+ */
+ void destroy() {
+ AndroidSyncSettings.unregisterObserver(mContext, this);
+
+ mSignInManager.removeSignInStateObserver(this);
+ mSignInManager = null;
+ }
+
+ /**
+ * @return Whether it should be showing.
+ */
+ boolean isShowing() {
+ return mIsShowing;
+ }
+
+ /**
+ * @param isListMode Whether listview is showing.
+ * @return Signin promo header {@link ViewHolder} instance that can be used with
+ * {@link RecyclerView}.
+ */
+ ViewHolder createHolder(ViewGroup parent, boolean isListMode) {
+ ViewGroup promoHeader = (ViewGroup) LayoutInflater.from(mContext)
+ .inflate(R.layout.eb_promo_header, parent, false);
+ if (isListMode) promoHeader.setBackground(null);
+
+ promoHeader.findViewById(R.id.no_thanks).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ RecordUserAction.record("Stars_SignInPromoHeader_Dismissed");
+ setSigninPromoDeclined();
+ updateShowing(true);
+ }
+ });
+
+ promoHeader.findViewById(R.id.sign_in).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mContext.startActivity(new Intent(mContext, EnhancedBookmarkSigninActivity.class));
+ }
+ });
+
+ return new ViewHolder(promoHeader) {};
+ }
+
+ /**
+ * @return Whether user tapped "No" button on the signin promo header.
+ */
+ private boolean wasSigninPromoDeclined() {
+ return PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(
+ PREF_SIGNIN_PROMO_DECLINED, false);
+ }
+
+ /**
+ * Save that user tapped "No" button on the signin promo header.
+ */
+ private void setSigninPromoDeclined() {
+ SharedPreferences.Editor sharedPreferencesEditor =
+ PreferenceManager.getDefaultSharedPreferences(mContext).edit();
+ sharedPreferencesEditor.putBoolean(PREF_SIGNIN_PROMO_DECLINED, true);
+ sharedPreferencesEditor.apply();
+ }
+
+ private void updateShowing(boolean notifyUI) {
+ boolean oldIsShowing = mIsShowing;
+ mIsShowing = AndroidSyncSettings.isMasterSyncEnabled(mContext)
+ && !ChromeSigninController.get(mContext).isSignedIn()
+ && !wasSigninPromoDeclined();
+
+ if (oldIsShowing != mIsShowing && notifyUI) {
+ mShowingChangeListener.onPromoHeaderShowingChanged(mIsShowing);
+ }
+ }
+
+ // AndroidSyncSettingsObserver implementation
+
+ @Override
+ public void androidSyncSettingsChanged() {
+ updateShowing(true);
+ }
+
+ // SignInStateObserver implementations
+
+ @Override
+ public void onSignedIn() {
+ updateShowing(true);
+ }
+
+ @Override
+ public void onSignedOut() {
+ updateShowing(true);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698