Chromium Code Reviews| 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. |
| */ |