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..9b7e89ba9b6c3211252b4ff1a0e8c0142f7c6f6d 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,6 +19,7 @@ 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; |
@@ -25,8 +27,11 @@ import org.chromium.chrome.R; |
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; |
@@ -53,8 +58,10 @@ public class BottomSheetContentController extends BottomNavigationView |
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; |
private final Map<Integer, BottomSheetContent> mBottomSheetContents = new HashMap<>(); |
+ private BottomSheetContent mIncognitoHome; |
private final BottomSheetObserver mBottomSheetObserver = new EmptyBottomSheetObserver() { |
@Override |
@@ -117,6 +124,16 @@ 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()) mIncognitoHome = null; |
+ } |
+ }); |
Resources res = getContext().getResources(); |
mDistanceBelowToolbarPx = controlContainerHeight |
@@ -178,6 +195,10 @@ public class BottomSheetContentController extends BottomNavigationView |
} |
private BottomSheetContent getSheetContentForId(int navItemId) { |
+ if (mTabModelSelector.isIncognitoSelected() && navItemId == R.id.action_home) { |
mdjones
2017/04/12 16:51:35
Why is this special cased? Is the assumption that,
Theresa
2017/04/12 21:32:03
The map storing all of the other BottomSheetConten
dgn
2017/04/12 22:28:00
why is introducing a special code a bad thing? Acc
Theresa
2017/04/12 23:12:11
Changing the id isn't a bad thing. The IncognitoBo
mdjones
2017/04/13 20:34:03
I think we only need to special-case the suggestio
Theresa
2017/04/13 21:28:14
Done.
When the bottom sheet is closed, this class
|
+ return getIncognitoHomeSheetContent(); |
+ } |
+ |
BottomSheetContent content = mBottomSheetContents.get(navItemId); |
if (content != null) return content; |
@@ -199,6 +220,14 @@ public class BottomSheetContentController extends BottomNavigationView |
return content; |
} |
+ private BottomSheetContent getIncognitoHomeSheetContent() { |
+ if (mIncognitoHome == null) { |
+ mIncognitoHome = new IncognitoBottomSheetContent( |
+ mTabModelSelector.getCurrentTab().getActivity()); |
+ } |
+ return mIncognitoHome; |
+ } |
+ |
private void showBottomSheetContent(int navItemId) { |
// There are some bugs related to programatically selecting menu items that are fixed in |
// newer support library versions. |
@@ -210,6 +239,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. |
*/ |