418 lines
19 KiB
Diff
418 lines
19 KiB
Diff
From: csagan5 <32685696+csagan5@users.noreply.github.com>
|
|
Date: Sat, 10 Nov 2018 17:20:21 +0100
|
|
Subject: Disable promos displayed in bookmarks manager
|
|
|
|
Remove personalized signin promo view from
|
|
bookmarks, never reach signin thresholds.
|
|
---
|
|
...rsonalized_signin_promo_view_bookmarks.xml | 30 -----
|
|
.../bookmarks/BookmarkItemsAdapter.java | 23 +---
|
|
.../bookmarks/BookmarkPromoHeader.java | 111 +-----------------
|
|
.../ReorderBookmarkItemsAdapter.java | 19 +--
|
|
.../browser/signin/SigninPromoController.java | 19 +--
|
|
5 files changed, 7 insertions(+), 195 deletions(-)
|
|
delete mode 100644 chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
|
|
|
|
diff --git a/chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml b/chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
|
|
deleted file mode 100644
|
|
--- a/chrome/android/java/res/layout/personalized_signin_promo_view_bookmarks.xml
|
|
+++ /dev/null
|
|
@@ -1,30 +0,0 @@
|
|
-<?xml version="1.0" encoding="utf-8"?>
|
|
-<!-- Copyright 2017 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. -->
|
|
-
|
|
-<org.chromium.chrome.browser.signin.PersonalizedSigninPromoView
|
|
- xmlns:android="http://schemas.android.com/apk/res/android"
|
|
- android:id="@+id/signin_promo_view_container"
|
|
- android:layout_width="match_parent"
|
|
- android:layout_height="wrap_content"
|
|
- android:layout_margin="16dp"
|
|
- android:background="@drawable/hairline_border_card_background"
|
|
- android:gravity="center_horizontal"
|
|
- android:orientation="vertical"
|
|
- android:paddingBottom="12dp"
|
|
- android:paddingTop="14dp">
|
|
-
|
|
- <FrameLayout
|
|
- android:layout_width="match_parent"
|
|
- android:layout_height="wrap_content"
|
|
- android:layout_marginBottom="12dp"
|
|
- android:layout_marginEnd="12dp"
|
|
- android:layout_marginStart="12dp">
|
|
-
|
|
- <include layout="@layout/personalized_signin_promo_view_header"/>
|
|
- </FrameLayout>
|
|
-
|
|
- <include layout="@layout/personalized_signin_promo_view_body"/>
|
|
-
|
|
-</org.chromium.chrome.browser.signin.PersonalizedSigninPromoView>
|
|
\ No newline at end of file
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
|
@@ -60,7 +60,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
|
|
private BookmarkDelegate mDelegate;
|
|
private Context mContext;
|
|
- private BookmarkPromoHeader mPromoHeaderManager;
|
|
private String mSearchText;
|
|
private BookmarkId mCurrentFolder;
|
|
|
|
@@ -219,9 +218,9 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
|
|
switch (viewType) {
|
|
case ViewType.PERSONALIZED_SIGNIN_PROMO:
|
|
- return mPromoHeaderManager.createPersonalizedSigninPromoHolder(parent);
|
|
+ return null;
|
|
case ViewType.SYNC_PROMO:
|
|
- return mPromoHeaderManager.createSyncPromoHolder(parent);
|
|
+ return null;
|
|
case ViewType.FOLDER:
|
|
BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.from(
|
|
parent.getContext()).inflate(R.layout.bookmark_folder_row, parent, false);
|
|
@@ -242,8 +241,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
|
switch (holder.getItemViewType()) {
|
|
case ViewType.PERSONALIZED_SIGNIN_PROMO:
|
|
- PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) holder.itemView;
|
|
- mPromoHeaderManager.setupPersonalizedSigninPromo(view);
|
|
break;
|
|
case ViewType.SYNC_PROMO:
|
|
break;
|
|
@@ -262,7 +259,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
public void onViewRecycled(ViewHolder holder) {
|
|
switch (holder.getItemViewType()) {
|
|
case ViewType.PERSONALIZED_SIGNIN_PROMO:
|
|
- mPromoHeaderManager.detachPersonalizePromoView();
|
|
break;
|
|
default:
|
|
// Other view holders don't have special recycling code.
|
|
@@ -298,7 +294,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
}
|
|
};
|
|
|
|
- mPromoHeaderManager = new BookmarkPromoHeader(mContext, promoHeaderChangeAction);
|
|
populateTopLevelFoldersList();
|
|
notifyDataSetChanged();
|
|
}
|
|
@@ -309,7 +304,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
mDelegate.removeUIObserver(this);
|
|
mDelegate.getModel().removeObserver(mBookmarkModelObserver);
|
|
mDelegate = null;
|
|
- mPromoHeaderManager.destroy();
|
|
}
|
|
|
|
@Override
|
|
@@ -389,19 +383,6 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|
if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
|
|
|
|
assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
|
|
-
|
|
- switch (mPromoHeaderManager.getPromoState()) {
|
|
- case BookmarkPromoHeader.PromoState.PROMO_NONE:
|
|
- return;
|
|
- case BookmarkPromoHeader.PromoState.PROMO_SIGNIN_PERSONALIZED:
|
|
- mPromoHeaderSection.add(ViewType.PERSONALIZED_SIGNIN_PROMO);
|
|
- return;
|
|
- case BookmarkPromoHeader.PromoState.PROMO_SYNC:
|
|
- mPromoHeaderSection.add(ViewType.SYNC_PROMO);
|
|
- return;
|
|
- default:
|
|
- assert false : "Unexpected value for promo state!";
|
|
- }
|
|
}
|
|
|
|
private void populateTopLevelFoldersList() {
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
|
|
@@ -20,19 +20,13 @@ import org.chromium.chrome.R;
|
|
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
import org.chromium.chrome.browser.signin.IdentityServicesProvider;
|
|
-import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView;
|
|
import org.chromium.chrome.browser.signin.ProfileDataCache;
|
|
-import org.chromium.chrome.browser.signin.SigninManager;
|
|
-import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver;
|
|
import org.chromium.chrome.browser.signin.SigninPromoController;
|
|
-import org.chromium.chrome.browser.signin.SigninPromoUtil;
|
|
import org.chromium.chrome.browser.signin.SyncPromoView;
|
|
import org.chromium.components.signin.AccountManagerFacade;
|
|
import org.chromium.components.signin.AccountsChangeObserver;
|
|
import org.chromium.components.signin.ChromeSigninController;
|
|
import org.chromium.components.signin.metrics.SigninAccessPoint;
|
|
-import org.chromium.components.sync.AndroidSyncSettings;
|
|
-import org.chromium.components.sync.AndroidSyncSettings.AndroidSyncSettingsObserver;
|
|
import org.chromium.content_public.browser.UiThreadTaskTraits;
|
|
|
|
import java.lang.annotation.Retention;
|
|
@@ -42,7 +36,7 @@ import java.lang.annotation.RetentionPolicy;
|
|
* Class that manages all the logic and UI behind the signin promo header in the bookmark
|
|
* content UI. The header is shown only on certain situations, (e.g., not signed in).
|
|
*/
|
|
-class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObserver,
|
|
+class BookmarkPromoHeader implements
|
|
ProfileDataCache.Observer, AccountsChangeObserver {
|
|
/**
|
|
* Specifies the various states in which the Bookmarks promo can be.
|
|
@@ -61,7 +55,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
private static @Nullable @PromoState Integer sPromoStateForTests;
|
|
|
|
private final Context mContext;
|
|
- private final SigninManager mSignInManager;
|
|
private final Runnable mPromoHeaderChangeAction;
|
|
|
|
private final @Nullable ProfileDataCache mProfileDataCache;
|
|
@@ -76,8 +69,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
mContext = context;
|
|
mPromoHeaderChangeAction = promoHeaderChangeAction;
|
|
|
|
- AndroidSyncSettings.get().registerObserver(this);
|
|
-
|
|
if (SigninPromoController.hasNotReachedImpressionLimit(
|
|
SigninAccessPoint.BOOKMARK_MANAGER)) {
|
|
int imageSize =
|
|
@@ -91,9 +82,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
mSigninPromoController = null;
|
|
}
|
|
|
|
- mSignInManager = IdentityServicesProvider.get().getSigninManager();
|
|
- mSignInManager.addSignInStateObserver(this);
|
|
-
|
|
mPromoState = calculatePromoState();
|
|
if (mPromoState == PromoState.PROMO_SYNC) {
|
|
SharedPreferencesManager.getInstance().incrementInt(
|
|
@@ -105,15 +93,11 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
* Clean ups the class. Must be called once done using this class.
|
|
*/
|
|
void destroy() {
|
|
- AndroidSyncSettings.get().unregisterObserver(this);
|
|
-
|
|
if (mSigninPromoController != null) {
|
|
AccountManagerFacade.get().removeObserver(this);
|
|
mProfileDataCache.removeObserver(this);
|
|
mSigninPromoController.onPromoDestroyed();
|
|
}
|
|
-
|
|
- mSignInManager.removeSignInStateObserver(this);
|
|
}
|
|
|
|
/**
|
|
@@ -124,19 +108,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
return mPromoState;
|
|
}
|
|
|
|
- /**
|
|
- * @return Personalized signin promo header {@link ViewHolder} instance that can be used with
|
|
- * {@link RecyclerView}.
|
|
- */
|
|
- // TODO(crbug.com/160194): Clean up after bookmark reordering launches.
|
|
- ViewHolder createPersonalizedSigninPromoHolder(ViewGroup parent) {
|
|
- View view = LayoutInflater.from(mContext).inflate(
|
|
- R.layout.personalized_signin_promo_view_bookmarks, parent, false);
|
|
-
|
|
- // ViewHolder is abstract and it cannot be instantiated directly.
|
|
- return new ViewHolder(view) {};
|
|
- }
|
|
-
|
|
/**
|
|
* @return Sync promo header {@link ViewHolder} instance that can be used with
|
|
* {@link RecyclerView}.
|
|
@@ -149,49 +120,11 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
return new ViewHolder(view) {};
|
|
}
|
|
|
|
- /**
|
|
- * Configures the personalized signin promo and records promo impressions.
|
|
- * @param view The view to be configured.
|
|
- */
|
|
- void setupPersonalizedSigninPromo(PersonalizedSigninPromoView view) {
|
|
- SigninPromoUtil.setupPromoViewFromCache(mSigninPromoController, mProfileDataCache, view,
|
|
- this::setPersonalizedSigninPromoDeclined);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Detaches the previously configured {@link PersonalizedSigninPromoView}.
|
|
- */
|
|
- void detachPersonalizePromoView() {
|
|
- if (mSigninPromoController != null) mSigninPromoController.detach();
|
|
- }
|
|
-
|
|
- /**
|
|
- * Saves that the personalized signin promo was declined and updates the UI.
|
|
- */
|
|
- private void setPersonalizedSigninPromoDeclined() {
|
|
- SharedPreferencesManager.getInstance().writeBoolean(
|
|
- ChromePreferenceKeys.SIGNIN_PROMO_PERSONALIZED_DECLINED, true);
|
|
- mPromoState = calculatePromoState();
|
|
- triggerPromoUpdate();
|
|
- }
|
|
-
|
|
- /**
|
|
- * @return Whether the user declined the personalized signin promo.
|
|
- */
|
|
- @VisibleForTesting
|
|
- static boolean wasPersonalizedSigninPromoDeclined() {
|
|
- return SharedPreferencesManager.getInstance().readBoolean(
|
|
- ChromePreferenceKeys.SIGNIN_PROMO_PERSONALIZED_DECLINED, false);
|
|
- }
|
|
-
|
|
/**
|
|
* @return Whether the personalized signin promo should be shown to user.
|
|
*/
|
|
private boolean shouldShowBookmarkSigninPromo() {
|
|
- return mSignInManager.isSignInAllowed()
|
|
- && SigninPromoController.hasNotReachedImpressionLimit(
|
|
- SigninAccessPoint.BOOKMARK_MANAGER)
|
|
- && !wasPersonalizedSigninPromoDeclined();
|
|
+ return false;
|
|
}
|
|
|
|
private @PromoState int calculatePromoState() {
|
|
@@ -199,48 +132,9 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
return sPromoStateForTests;
|
|
}
|
|
|
|
- if (!AndroidSyncSettings.get().isMasterSyncEnabled()) {
|
|
- return PromoState.PROMO_NONE;
|
|
- }
|
|
-
|
|
- if (!ChromeSigninController.get().isSignedIn()) {
|
|
- return shouldShowBookmarkSigninPromo() ? PromoState.PROMO_SIGNIN_PERSONALIZED
|
|
- : PromoState.PROMO_NONE;
|
|
- }
|
|
-
|
|
- boolean impressionLimitNotReached =
|
|
- SharedPreferencesManager.getInstance().readInt(
|
|
- ChromePreferenceKeys.SIGNIN_AND_SYNC_PROMO_SHOW_COUNT)
|
|
- < MAX_SIGNIN_AND_SYNC_PROMO_SHOW_COUNT;
|
|
- if (!AndroidSyncSettings.get().isChromeSyncEnabled() && impressionLimitNotReached) {
|
|
- return PromoState.PROMO_SYNC;
|
|
- }
|
|
return PromoState.PROMO_NONE;
|
|
}
|
|
|
|
- // AndroidSyncSettingsObserver implementation.
|
|
- @Override
|
|
- public void androidSyncSettingsChanged() {
|
|
- // AndroidSyncSettings calls this method from non-UI threads.
|
|
- PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
|
|
- mPromoState = calculatePromoState();
|
|
- triggerPromoUpdate();
|
|
- });
|
|
- }
|
|
-
|
|
- // SignInStateObserver implementation.
|
|
- @Override
|
|
- public void onSignedIn() {
|
|
- mPromoState = calculatePromoState();
|
|
- triggerPromoUpdate();
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onSignedOut() {
|
|
- mPromoState = calculatePromoState();
|
|
- triggerPromoUpdate();
|
|
- }
|
|
-
|
|
// ProfileDataCache.Observer implementation.
|
|
@Override
|
|
public void onProfileDataUpdated(String accountId) {
|
|
@@ -254,7 +148,6 @@ class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObs
|
|
}
|
|
|
|
private void triggerPromoUpdate() {
|
|
- detachPersonalizePromoView();
|
|
mPromoHeaderChangeAction.run();
|
|
}
|
|
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
|
|
@@ -188,8 +188,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
|
|
assert mDelegate != null;
|
|
|
|
switch (viewType) {
|
|
- case ViewType.PERSONALIZED_SIGNIN_PROMO:
|
|
- return mPromoHeaderManager.createPersonalizedSigninPromoHolder(parent);
|
|
case ViewType.SYNC_PROMO:
|
|
return mPromoHeaderManager.createSyncPromoHolder(parent);
|
|
case ViewType.FOLDER:
|
|
@@ -204,10 +202,7 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
|
|
|
|
@Override
|
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
|
- if (holder.getItemViewType() == ViewType.PERSONALIZED_SIGNIN_PROMO) {
|
|
- PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) holder.itemView;
|
|
- mPromoHeaderManager.setupPersonalizedSigninPromo(view);
|
|
- } else if (!(holder.getItemViewType() == ViewType.SYNC_PROMO)) {
|
|
+ if (!(holder.getItemViewType() == ViewType.SYNC_PROMO)) {
|
|
BookmarkRow row = ((BookmarkRow) holder.itemView);
|
|
BookmarkId id = getIdByPosition(position);
|
|
row.setBookmarkId(id, getLocationFromPosition(position));
|
|
@@ -231,13 +226,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
|
|
|
|
@Override
|
|
public void onViewRecycled(ViewHolder holder) {
|
|
- switch (holder.getItemViewType()) {
|
|
- case ViewType.PERSONALIZED_SIGNIN_PROMO:
|
|
- mPromoHeaderManager.detachPersonalizePromoView();
|
|
- break;
|
|
- default:
|
|
- // Other view holders don't have special recycling code.
|
|
- }
|
|
}
|
|
|
|
/**
|
|
@@ -406,9 +394,6 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
|
|
case BookmarkPromoHeader.PromoState.PROMO_NONE:
|
|
mPromoHeaderType = ViewType.INVALID_PROMO;
|
|
break;
|
|
- case BookmarkPromoHeader.PromoState.PROMO_SIGNIN_PERSONALIZED:
|
|
- mPromoHeaderType = ViewType.PERSONALIZED_SIGNIN_PROMO;
|
|
- break;
|
|
case BookmarkPromoHeader.PromoState.PROMO_SYNC:
|
|
mPromoHeaderType = ViewType.SYNC_PROMO;
|
|
break;
|
|
@@ -573,4 +558,4 @@ class ReorderBookmarkItemsAdapter extends DragReorderableListAdapter<BookmarkIte
|
|
private void clearHighlight() {
|
|
mHighlightedBookmark = null;
|
|
}
|
|
-}
|
|
\ No newline at end of file
|
|
+}
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
|
|
@@ -69,24 +69,7 @@ public class SigninPromoController {
|
|
* @param accessPoint The access point for which the impression limit is being checked.
|
|
*/
|
|
public static boolean hasNotReachedImpressionLimit(@AccessPoint int accessPoint) {
|
|
- SharedPreferencesManager preferencesManager = SharedPreferencesManager.getInstance();
|
|
- switch (accessPoint) {
|
|
- case SigninAccessPoint.BOOKMARK_MANAGER:
|
|
- return getSigninPromoImpressionsCountBookmarks() < MAX_IMPRESSIONS_BOOKMARKS;
|
|
- case SigninAccessPoint.NTP_CONTENT_SUGGESTIONS:
|
|
- // There is no impression limit for NTP content suggestions.
|
|
- return true;
|
|
- case SigninAccessPoint.RECENT_TABS:
|
|
- // There is no impression limit for Recent Tabs.
|
|
- return true;
|
|
- case SigninAccessPoint.SETTINGS:
|
|
- return preferencesManager.readInt(
|
|
- ChromePreferenceKeys.SIGNIN_PROMO_IMPRESSIONS_COUNT_SETTINGS)
|
|
- < MAX_IMPRESSIONS_SETTINGS;
|
|
- default:
|
|
- assert false : "Unexpected value for access point: " + accessPoint;
|
|
- return false;
|
|
- }
|
|
+ return false;
|
|
}
|
|
|
|
/**
|
|
--
|
|
2.17.1
|
|
|