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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelWrapper.java

Issue 276483004: Upstream accessibility tab switcher and related resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update Created 6 years, 7 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/accessibility/AccessibilityTabModelWrapper.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelWrapper.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..042c92b039add94d5dbf0508d9705b82961bcba5
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/accessibility/AccessibilityTabModelWrapper.java
@@ -0,0 +1,166 @@
+// Copyright 2014 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.
+
+package org.chromium.chrome.browser.widget.accessibility;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelAdapter.AccessibilityTabModelAdapterListener;
+
+/**
+ * A wrapper around the Android views in the Accessibility tab switcher. This
+ * will show two {@link ListView}s, one for each
+ * {@link org.chromium.chrome.browser.tabmodel.TabModel} to
+ * represent.
+ */
+public class AccessibilityTabModelWrapper extends LinearLayout {
+ private AccessibilityTabModelListView mAccessibilityView;
+ private LinearLayout mStackButtonWrapper;
+ private ImageButton mStandardButton;
+ private ImageButton mIncognitoButton;
+
+ private TabModelSelector mTabModelSelector;
+ private TabModelSelector.ChangeListener mTabModelChangeListener =
+ new TabModelSelector.ChangeListener() {
+
+ @Override
+ public void onChange() {
+ getAdapter().notifyDataSetChanged();
+ }
+
+ @Override
+ public void onNewTabCreated(Tab tab) {
+ }
+ };
+
+ // TODO(bauerb): Use View#isAttachedToWindow() as soon as we are guaranteed
+ // to run against API version 19.
+ private boolean mIsAttachedToWindow;
+
+ private class ButtonOnClickListener implements View.OnClickListener {
+ private final boolean mIncognito;
+
+ public ButtonOnClickListener(boolean incognito) {
+ mIncognito = incognito;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mTabModelSelector != null) {
+ if (mIncognito != mTabModelSelector.isIncognitoSelected()) {
+ mTabModelSelector.commitAllTabClosures();
+ mTabModelSelector.selectModel(mIncognito);
+ setStateBasedOnModel();
+ }
+ }
+ }
+ }
+
+ public AccessibilityTabModelWrapper(Context context) {
+ super(context);
+ }
+
+ public AccessibilityTabModelWrapper(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public AccessibilityTabModelWrapper(Context context, AttributeSet attrs,
+ int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ /**
+ * Initialize android views after creation.
+ *
+ * @param listener A {@link AccessibilityTabModelAdapterListener} to pass tab events back to the
+ * parent.
+ */
+ public void setup(AccessibilityTabModelAdapterListener listener) {
+ mStackButtonWrapper = (LinearLayout) findViewById(R.id.button_wrapper);
+
+ mStandardButton = (ImageButton) findViewById(R.id.standard_tabs_button);
+ mStandardButton.setOnClickListener(new ButtonOnClickListener(false));
+
+ mIncognitoButton = (ImageButton) findViewById(R.id.incognito_tabs_button);
+ mIncognitoButton.setOnClickListener(new ButtonOnClickListener(true));
+
+ mAccessibilityView = (AccessibilityTabModelListView) findViewById(R.id.list_view);
+
+ AccessibilityTabModelAdapter adapter = getAdapter();
+
+ adapter.setListener(listener);
+ }
+
+ /**
+ * @param modelSelector A {@link TabModelSelector} to provide information
+ * about open tabs.
+ */
+ public void setTabModelSelector(TabModelSelector modelSelector) {
+ if (mIsAttachedToWindow) {
+ mTabModelSelector.unregisterChangeListener(mTabModelChangeListener);
+ }
+ mTabModelSelector = modelSelector;
+ if (mIsAttachedToWindow) {
+ modelSelector.registerChangeListener(mTabModelChangeListener);
+ }
+ setStateBasedOnModel();
+ }
+
+ /**
+ * Set the bottom model selector buttons and list view contents based on the
+ * TabModelSelector.
+ */
+ public void setStateBasedOnModel() {
+ if (mTabModelSelector == null) return;
+
+ boolean incognitoEnabled =
+ mTabModelSelector.getModel(true).getComprehensiveModel().getCount() > 0;
+
+ boolean incognitoSelected = mTabModelSelector.isIncognitoSelected();
+
+ if (incognitoEnabled) {
+ mStackButtonWrapper.setVisibility(View.VISIBLE);
+ } else {
+ mStackButtonWrapper.setVisibility(View.GONE);
+ }
+
+ if (incognitoSelected) {
+ mIncognitoButton.setBackgroundResource(
+ R.drawable.ntp_toolbar_button_background_selected);
+ mStandardButton.setBackgroundResource(R.drawable.ntp_toolbar_button_background);
+ } else {
+ mIncognitoButton.setBackgroundResource(R.drawable.ntp_toolbar_button_background);
+ mStandardButton.setBackgroundResource(
+ R.drawable.ntp_toolbar_button_background_selected);
+ }
+
+ getAdapter().setTabModel(mTabModelSelector.getModel(incognitoSelected));
+ }
+
+ private AccessibilityTabModelAdapter getAdapter() {
+ return (AccessibilityTabModelAdapter) mAccessibilityView.getAdapter();
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ mTabModelSelector.registerChangeListener(mTabModelChangeListener);
+ mIsAttachedToWindow = true;
+ super.onAttachedToWindow();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ mTabModelSelector.unregisterChangeListener(mTabModelChangeListener);
+ mIsAttachedToWindow = false;
+ super.onDetachedFromWindow();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698