OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 package org.chromium.chrome.browser.widget.incognitotoggle; |
| 6 |
| 7 import android.content.Context; |
| 8 import android.util.AttributeSet; |
| 9 import android.view.View; |
| 10 import android.widget.ImageButton; |
| 11 |
| 12 import com.google.android.apps.chrome.R; |
| 13 |
| 14 import org.chromium.chrome.browser.Tab; |
| 15 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver; |
| 16 import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; |
| 17 import org.chromium.chrome.browser.tabmodel.TabModel; |
| 18 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 19 import org.chromium.chrome.browser.tabmodel.TabModelObserver; |
| 20 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 21 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver; |
| 22 |
| 23 /** |
| 24 * A {@link View} that allows a user to toggle between incognito and normal {@li
nk TabModel}s. |
| 25 */ |
| 26 public class IncognitoToggleButtonTablet extends ImageButton { |
| 27 private TabModelSelector mTabModelSelector; |
| 28 private TabModelSelectorObserver mTabModelSelectorObserver; |
| 29 private TabModelObserver mTabModelObserver; |
| 30 |
| 31 /** |
| 32 * Creates an instance of {@link IncognitoToggleButtonTablet}. |
| 33 * @param context The {@link Context} to create this {@link View} under. |
| 34 * @param attrs An {@link AttributeSet} that contains information on how to
build this |
| 35 * {@link View}. |
| 36 */ |
| 37 public IncognitoToggleButtonTablet(Context context, AttributeSet attrs) { |
| 38 super(context, attrs); |
| 39 } |
| 40 |
| 41 @Override |
| 42 public void onFinishInflate() { |
| 43 super.onFinishInflate(); |
| 44 |
| 45 setScaleType(ScaleType.CENTER); |
| 46 setVisibility(View.GONE); |
| 47 |
| 48 setOnClickListener(new OnClickListener() { |
| 49 @Override |
| 50 public void onClick(View v) { |
| 51 if (mTabModelSelector != null) { |
| 52 mTabModelSelector.selectModel(!mTabModelSelector.isIncognito
Selected()); |
| 53 } |
| 54 } |
| 55 }); |
| 56 } |
| 57 |
| 58 /** |
| 59 * Sets the {@link TabModelSelector} that will be queried for information ab
out the state of |
| 60 * the system. |
| 61 * @param selector A {@link TabModelSelector} that represents the state of t
he system. |
| 62 */ |
| 63 public void setTabModelSelector(TabModelSelector selector) { |
| 64 mTabModelSelector = selector; |
| 65 if (selector != null) { |
| 66 updateButtonResource(); |
| 67 updateButtonVisibility(); |
| 68 |
| 69 mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { |
| 70 @Override |
| 71 public void onTabModelSelected(TabModel newModel, TabModel oldMo
del) { |
| 72 updateButtonResource(); |
| 73 } |
| 74 }; |
| 75 mTabModelSelector.addObserver(mTabModelSelectorObserver); |
| 76 |
| 77 mTabModelObserver = new EmptyTabModelObserver() { |
| 78 @Override |
| 79 public void didAddTab(Tab tab, TabLaunchType type) { |
| 80 updateButtonVisibility(); |
| 81 } |
| 82 |
| 83 @Override |
| 84 public void willCloseTab(Tab tab, boolean animate) { |
| 85 updateButtonVisibility(); |
| 86 } |
| 87 }; |
| 88 for (TabModel model : mTabModelSelector.getModels()) { |
| 89 model.addObserver(mTabModelObserver); |
| 90 } |
| 91 } |
| 92 } |
| 93 |
| 94 private void updateButtonResource() { |
| 95 if (mTabModelSelector == null || mTabModelSelector.getCurrentModel() ==
null) return; |
| 96 |
| 97 setContentDescription(getContext().getString(mTabModelSelector.isIncogni
toSelected() |
| 98 ? R.string.accessibility_tabstrip_btn_incognito_toggle_incognito |
| 99 : R.string.accessibility_tabstrip_btn_incognito_toggle_standard)
); |
| 100 setImageResource(mTabModelSelector.isIncognitoSelected() |
| 101 ? R.drawable.btn_tabstrip_switch_incognito : R.drawable.btn_tabs
trip_switch_normal); |
| 102 } |
| 103 |
| 104 private void updateButtonVisibility() { |
| 105 if (mTabModelSelector == null || mTabModelSelector.getCurrentModel() ==
null) { |
| 106 setVisibility(View.GONE); |
| 107 return; |
| 108 } |
| 109 |
| 110 post(new Runnable() { |
| 111 @Override |
| 112 public void run() { |
| 113 setVisibility(mTabModelSelector.getModel(true).getCount() > 0 |
| 114 ? View.VISIBLE : View.GONE); |
| 115 } |
| 116 }); |
| 117 } |
| 118 |
| 119 @Override |
| 120 protected void onAttachedToWindow() { |
| 121 if (mTabModelSelector != null) { |
| 122 mTabModelSelector.addObserver(mTabModelSelectorObserver); |
| 123 for (TabModel model : mTabModelSelector.getModels()) { |
| 124 model.addObserver(mTabModelObserver); |
| 125 } |
| 126 } |
| 127 super.onAttachedToWindow(); |
| 128 } |
| 129 |
| 130 @Override |
| 131 protected void onDetachedFromWindow() { |
| 132 if (mTabModelSelector != null) { |
| 133 mTabModelSelector.removeObserver(mTabModelSelectorObserver); |
| 134 for (TabModel model : mTabModelSelector.getModels()) { |
| 135 model.removeObserver(mTabModelObserver); |
| 136 } |
| 137 } |
| 138 super.onDetachedFromWindow(); |
| 139 } |
| 140 } |
OLD | NEW |