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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java

Issue 2809923003: [Home] Add a Chrome Home specific incognito NTP (Closed)
Patch Set: [Home] Add a Chrome Home specific incognito NTP Created 3 years, 8 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/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
index ea7871d00a51d3cdf8d40aed4e1f7cac25e0de95..d62f1ed0aafda0d09c60a5747827d5cb1a6233e3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.widget.bottomsheet;
import android.app.Activity;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.support.annotation.IntDef;
import android.support.design.internal.BottomNavigationItemView;
@@ -18,15 +19,20 @@ import android.view.View;
import android.view.ViewGroup;
import org.chromium.base.ActivityState;
+import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.ApplicationStatus.ActivityStateListener;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.bookmarks.BookmarkSheetContent;
import org.chromium.chrome.browser.download.DownloadSheetContent;
import org.chromium.chrome.browser.history.HistorySheetContent;
+import org.chromium.chrome.browser.ntp.IncognitoBottomSheetContent;
import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.suggestions.SuggestionsBottomSheetContent;
+import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
+import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.util.MathUtils;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.BottomSheetContent;
@@ -46,13 +52,18 @@ import java.util.Map.Entry;
public class BottomSheetContentController extends BottomNavigationView
implements OnNavigationItemSelectedListener {
/** The different types of content that may be displayed in the bottom sheet. */
- @IntDef({TYPE_SUGGESTIONS, TYPE_DOWNLOADS, TYPE_BOOKMARKS, TYPE_HISTORY})
+ @IntDef({TYPE_SUGGESTIONS, TYPE_DOWNLOADS, TYPE_BOOKMARKS, TYPE_HISTORY, TYPE_INCOGNITO_HOME})
@Retention(RetentionPolicy.SOURCE)
public @interface ContentType {}
public static final int TYPE_SUGGESTIONS = 0;
public static final int TYPE_DOWNLOADS = 1;
public static final int TYPE_BOOKMARKS = 2;
public static final int TYPE_HISTORY = 3;
+ public static final int TYPE_INCOGNITO_HOME = 4;
+
+ // R.id.action_home is overloaded, so an invalid ID is used to reference the incognito version
+ // of the home content.
+ private static final int INCOGNITO_HOME_ID = -1;
private final Map<Integer, BottomSheetContent> mBottomSheetContents = new HashMap<>();
@@ -76,21 +87,24 @@ public class BottomSheetContentController extends BottomNavigationView
@Override
public void onSheetClosed() {
+ if (mSelectedItemId != 0 && mSelectedItemId != R.id.action_home) {
+ showBottomSheetContent(R.id.action_home);
+ }
+
Iterator<Entry<Integer, BottomSheetContent>> contentIterator =
mBottomSheetContents.entrySet().iterator();
while (contentIterator.hasNext()) {
Entry<Integer, BottomSheetContent> entry = contentIterator.next();
- if (entry.getKey() == R.id.action_home) continue;
+ if (entry.getKey() == R.id.action_home || entry.getKey() == INCOGNITO_HOME_ID) {
+ continue;
+ }
entry.getValue().destroy();
contentIterator.remove();
}
+
// TODO(twellington): determine a policy for destroying the
// SuggestionsBottomSheetContent.
-
- if (mSelectedItemId == 0 || mSelectedItemId == R.id.action_home) return;
-
- showBottomSheetContent(R.id.action_home);
}
};
@@ -117,6 +131,20 @@ public class BottomSheetContentController extends BottomNavigationView
mBottomSheet = bottomSheet;
mBottomSheet.addObserver(mBottomSheetObserver);
mTabModelSelector = tabModelSelector;
+ mTabModelSelector.addObserver(new EmptyTabModelSelectorObserver() {
+ @Override
+ public void onTabModelSelected(TabModel newModel, TabModel oldModel) {
+ updateVisuals(newModel.isIncognito());
+ showBottomSheetContent(R.id.action_home);
+
+ // Release incognito bottom sheet content so that it can be garbage collected.
+ if (!newModel.isIncognito()
+ && mBottomSheetContents.containsKey(INCOGNITO_HOME_ID)) {
+ mBottomSheetContents.get(INCOGNITO_HOME_ID).destroy();
+ mBottomSheetContents.remove(INCOGNITO_HOME_ID);
+ }
+ }
+ });
Resources res = getContext().getResources();
mDistanceBelowToolbarPx = controlContainerHeight
@@ -178,22 +206,27 @@ public class BottomSheetContentController extends BottomNavigationView
}
private BottomSheetContent getSheetContentForId(int navItemId) {
+ if (mTabModelSelector.isIncognitoSelected() && navItemId == R.id.action_home) {
+ navItemId = INCOGNITO_HOME_ID;
+ }
+
BottomSheetContent content = mBottomSheetContents.get(navItemId);
if (content != null) return content;
+ ChromeActivity activity = mTabModelSelector.getCurrentTab().getActivity();
+
if (navItemId == R.id.action_home) {
content = new SuggestionsBottomSheetContent(
- mTabModelSelector.getCurrentTab().getActivity(), mBottomSheet,
- mTabModelSelector, mSnackbarManager);
+ activity, mBottomSheet, mTabModelSelector, mSnackbarManager);
} else if (navItemId == R.id.action_downloads) {
- content = new DownloadSheetContent(mTabModelSelector.getCurrentTab().getActivity(),
- mTabModelSelector.getCurrentModel().isIncognito(), mSnackbarManager);
+ content = new DownloadSheetContent(
+ activity, mTabModelSelector.getCurrentModel().isIncognito(), mSnackbarManager);
} else if (navItemId == R.id.action_bookmarks) {
- content = new BookmarkSheetContent(
- mTabModelSelector.getCurrentTab().getActivity(), mSnackbarManager);
+ content = new BookmarkSheetContent(activity, mSnackbarManager);
} else if (navItemId == R.id.action_history) {
- content = new HistorySheetContent(
- mTabModelSelector.getCurrentTab().getActivity(), mSnackbarManager);
+ content = new HistorySheetContent(activity, mSnackbarManager);
+ } else if (navItemId == INCOGNITO_HOME_ID) {
+ content = new IncognitoBottomSheetContent(activity);
}
mBottomSheetContents.put(navItemId, content);
return content;
@@ -210,6 +243,17 @@ public class BottomSheetContentController extends BottomNavigationView
mBottomSheet.showContent(getSheetContentForId(mSelectedItemId));
}
+ private void updateVisuals(boolean isIncognitoTabModelSelected) {
+ setBackgroundResource(isIncognitoTabModelSelected ? R.color.incognito_primary_color
+ : R.color.appbar_background);
+
+ ColorStateList tint = ApiCompatibilityUtils.getColorStateList(getResources(),
+ isIncognitoTabModelSelected ? R.color.bottom_nav_tint_incognito
+ : R.color.bottom_nav_tint);
+ setItemIconTintList(tint);
+ setItemTextColor(tint);
+ }
+
/**
* @param itemId The id of the MenuItem to select.
*/

Powered by Google App Engine
This is Rietveld 408576698