1d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck/* 2d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * Copyright (C) 2011 The Android Open Source Project 3d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * 4d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * you may not use this file except in compliance with the License. 6d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * You may obtain a copy of the License at 7d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * 8d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * http://www.apache.org/licenses/LICENSE-2.0 9d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * 10d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * Unless required by applicable law or agreed to in writing, software 11d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * distributed under the License is distributed on an "AS IS" BASIS, 12d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * See the License for the specific language governing permissions and 14d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck * limitations under the License. 15d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck */ 16d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckpackage com.android.browser; 17d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 182d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.app.ActionBar; 19d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.app.Activity; 202d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.app.Fragment; 212d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.app.FragmentTransaction; 222d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.content.Context; 23d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.content.Intent; 24d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.net.Uri; 25d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.os.Bundle; 262d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.support.v13.app.FragmentPagerAdapter; 272d963a2899afbe000d1ab498f94de87f25e33184John Reckimport android.support.v4.view.ViewPager; 28d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.view.Menu; 29d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport android.view.MenuItem; 30d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 31d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckimport com.android.browser.UI.ComboViews; 32d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 332d963a2899afbe000d1ab498f94de87f25e33184John Reckimport java.util.ArrayList; 342d963a2899afbe000d1ab498f94de87f25e33184John Reck 35d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reckpublic class ComboViewActivity extends Activity implements CombinedBookmarksCallbacks { 36d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 372d963a2899afbe000d1ab498f94de87f25e33184John Reck private static final String STATE_SELECTED_TAB = "tab"; 38d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public static final String EXTRA_COMBO_ARGS = "combo_args"; 39d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public static final String EXTRA_INITIAL_VIEW = "initial_view"; 40d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 41d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public static final String EXTRA_OPEN_SNAPSHOT = "snapshot_id"; 42d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public static final String EXTRA_OPEN_ALL = "open_all"; 43d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public static final String EXTRA_CURRENT_URL = "url"; 442d963a2899afbe000d1ab498f94de87f25e33184John Reck private ViewPager mViewPager; 452d963a2899afbe000d1ab498f94de87f25e33184John Reck private TabsAdapter mTabsAdapter; 46d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 47d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 48d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck protected void onCreate(Bundle savedInstanceState) { 49d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck super.onCreate(savedInstanceState); 50d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck setResult(RESULT_CANCELED); 51d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Bundle extras = getIntent().getExtras(); 52d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Bundle args = extras.getBundle(EXTRA_COMBO_ARGS); 53d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck String svStr = extras.getString(EXTRA_INITIAL_VIEW, null); 54d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck ComboViews startingView = svStr != null 55d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck ? ComboViews.valueOf(svStr) 56d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck : ComboViews.Bookmarks; 572d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager = new ViewPager(this); 582d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setId(R.id.tab_view); 592d963a2899afbe000d1ab498f94de87f25e33184John Reck setContentView(mViewPager); 602d963a2899afbe000d1ab498f94de87f25e33184John Reck 612d963a2899afbe000d1ab498f94de87f25e33184John Reck final ActionBar bar = getActionBar(); 622d963a2899afbe000d1ab498f94de87f25e33184John Reck bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 632d963a2899afbe000d1ab498f94de87f25e33184John Reck if (BrowserActivity.isTablet(this)) { 642d963a2899afbe000d1ab498f94de87f25e33184John Reck bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME 652d963a2899afbe000d1ab498f94de87f25e33184John Reck | ActionBar.DISPLAY_USE_LOGO); 66c0b64c808a9161703f754679d5c4dec3a5ed27feJohn Reck bar.setHomeButtonEnabled(true); 672d963a2899afbe000d1ab498f94de87f25e33184John Reck } else { 682d963a2899afbe000d1ab498f94de87f25e33184John Reck bar.setDisplayOptions(0); 692d963a2899afbe000d1ab498f94de87f25e33184John Reck } 702d963a2899afbe000d1ab498f94de87f25e33184John Reck 712d963a2899afbe000d1ab498f94de87f25e33184John Reck mTabsAdapter = new TabsAdapter(this, mViewPager); 722d963a2899afbe000d1ab498f94de87f25e33184John Reck mTabsAdapter.addTab(bar.newTab().setText(R.string.tab_bookmarks), 732d963a2899afbe000d1ab498f94de87f25e33184John Reck BrowserBookmarksPage.class, args); 742d963a2899afbe000d1ab498f94de87f25e33184John Reck 752d963a2899afbe000d1ab498f94de87f25e33184John Reck if (savedInstanceState != null) { 762d963a2899afbe000d1ab498f94de87f25e33184John Reck bar.setSelectedNavigationItem( 772d963a2899afbe000d1ab498f94de87f25e33184John Reck savedInstanceState.getInt(STATE_SELECTED_TAB, 0)); 782d963a2899afbe000d1ab498f94de87f25e33184John Reck } else { 792d963a2899afbe000d1ab498f94de87f25e33184John Reck switch (startingView) { 802d963a2899afbe000d1ab498f94de87f25e33184John Reck case Bookmarks: 812d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setCurrentItem(0); 822d963a2899afbe000d1ab498f94de87f25e33184John Reck break; 832d963a2899afbe000d1ab498f94de87f25e33184John Reck case History: 842d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setCurrentItem(1); 852d963a2899afbe000d1ab498f94de87f25e33184John Reck break; 862d963a2899afbe000d1ab498f94de87f25e33184John Reck case Snapshots: 872d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setCurrentItem(2); 882d963a2899afbe000d1ab498f94de87f25e33184John Reck break; 892d963a2899afbe000d1ab498f94de87f25e33184John Reck } 902d963a2899afbe000d1ab498f94de87f25e33184John Reck } 912d963a2899afbe000d1ab498f94de87f25e33184John Reck } 922d963a2899afbe000d1ab498f94de87f25e33184John Reck 932d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 942d963a2899afbe000d1ab498f94de87f25e33184John Reck protected void onSaveInstanceState(Bundle outState) { 952d963a2899afbe000d1ab498f94de87f25e33184John Reck super.onSaveInstanceState(outState); 962d963a2899afbe000d1ab498f94de87f25e33184John Reck outState.putInt(STATE_SELECTED_TAB, 972d963a2899afbe000d1ab498f94de87f25e33184John Reck getActionBar().getSelectedNavigationIndex()); 98d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 99d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 100d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 101d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public void openUrl(String url) { 102d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 103d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck setResult(RESULT_OK, i); 104d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck finish(); 105d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 106d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 107d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 108d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public void openInNewTab(String... urls) { 109d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Intent i = new Intent(); 110d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck i.putExtra(EXTRA_OPEN_ALL, urls); 111d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck setResult(RESULT_OK, i); 112d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck finish(); 113d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 114d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 115d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 116d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public void close() { 117d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck finish(); 118d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 119d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 120d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 121d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public void openSnapshot(long id) { 122d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Intent i = new Intent(); 123d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck i.putExtra(EXTRA_OPEN_SNAPSHOT, id); 124d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck setResult(RESULT_OK, i); 125d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck finish(); 126d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 127d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 128d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 129d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public boolean onCreateOptionsMenu(Menu menu) { 130d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck getMenuInflater().inflate(R.menu.combined, menu); 131d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck return super.onCreateOptionsMenu(menu); 132d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 133d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck 134d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck @Override 135d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck public boolean onOptionsItemSelected(MenuItem item) { 136d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck if (item.getItemId() == android.R.id.home) { 137d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck finish(); 138d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck return true; 139d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } else if (item.getItemId() == R.id.preferences_menu_id) { 140d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck String url = getIntent().getStringExtra(EXTRA_CURRENT_URL); 141d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck Intent intent = new Intent(this, BrowserPreferencesPage.class); 142d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck intent.putExtra(BrowserPreferencesPage.CURRENT_PAGE, url); 143d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck startActivityForResult(intent, Controller.PREFERENCES_PAGE); 144d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck return true; 145d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 146d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck return super.onOptionsItemSelected(item); 147d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck } 1482d963a2899afbe000d1ab498f94de87f25e33184John Reck 1492d963a2899afbe000d1ab498f94de87f25e33184John Reck /** 1502d963a2899afbe000d1ab498f94de87f25e33184John Reck * This is a helper class that implements the management of tabs and all 1512d963a2899afbe000d1ab498f94de87f25e33184John Reck * details of connecting a ViewPager with associated TabHost. It relies on a 1522d963a2899afbe000d1ab498f94de87f25e33184John Reck * trick. Normally a tab host has a simple API for supplying a View or 1532d963a2899afbe000d1ab498f94de87f25e33184John Reck * Intent that each tab will show. This is not sufficient for switching 1542d963a2899afbe000d1ab498f94de87f25e33184John Reck * between pages. So instead we make the content part of the tab host 1552d963a2899afbe000d1ab498f94de87f25e33184John Reck * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy 1562d963a2899afbe000d1ab498f94de87f25e33184John Reck * view to show as the tab content. It listens to changes in tabs, and takes 1572d963a2899afbe000d1ab498f94de87f25e33184John Reck * care of switch to the correct page in the ViewPager whenever the selected 1582d963a2899afbe000d1ab498f94de87f25e33184John Reck * tab changes. 1592d963a2899afbe000d1ab498f94de87f25e33184John Reck */ 1602d963a2899afbe000d1ab498f94de87f25e33184John Reck public static class TabsAdapter extends FragmentPagerAdapter 1612d963a2899afbe000d1ab498f94de87f25e33184John Reck implements ActionBar.TabListener, ViewPager.OnPageChangeListener { 1622d963a2899afbe000d1ab498f94de87f25e33184John Reck private final Context mContext; 1632d963a2899afbe000d1ab498f94de87f25e33184John Reck private final ActionBar mActionBar; 1642d963a2899afbe000d1ab498f94de87f25e33184John Reck private final ViewPager mViewPager; 1652d963a2899afbe000d1ab498f94de87f25e33184John Reck private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 1662d963a2899afbe000d1ab498f94de87f25e33184John Reck 1672d963a2899afbe000d1ab498f94de87f25e33184John Reck static final class TabInfo { 1682d963a2899afbe000d1ab498f94de87f25e33184John Reck private final Class<?> clss; 1692d963a2899afbe000d1ab498f94de87f25e33184John Reck private final Bundle args; 1702d963a2899afbe000d1ab498f94de87f25e33184John Reck 1712d963a2899afbe000d1ab498f94de87f25e33184John Reck TabInfo(Class<?> _class, Bundle _args) { 1722d963a2899afbe000d1ab498f94de87f25e33184John Reck clss = _class; 1732d963a2899afbe000d1ab498f94de87f25e33184John Reck args = _args; 1742d963a2899afbe000d1ab498f94de87f25e33184John Reck } 1752d963a2899afbe000d1ab498f94de87f25e33184John Reck } 1762d963a2899afbe000d1ab498f94de87f25e33184John Reck 1772d963a2899afbe000d1ab498f94de87f25e33184John Reck public TabsAdapter(Activity activity, ViewPager pager) { 1782d963a2899afbe000d1ab498f94de87f25e33184John Reck super(activity.getFragmentManager()); 1792d963a2899afbe000d1ab498f94de87f25e33184John Reck mContext = activity; 1802d963a2899afbe000d1ab498f94de87f25e33184John Reck mActionBar = activity.getActionBar(); 1812d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager = pager; 1822d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setAdapter(this); 1832d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setOnPageChangeListener(this); 1842d963a2899afbe000d1ab498f94de87f25e33184John Reck } 1852d963a2899afbe000d1ab498f94de87f25e33184John Reck 1862d963a2899afbe000d1ab498f94de87f25e33184John Reck public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 1872d963a2899afbe000d1ab498f94de87f25e33184John Reck TabInfo info = new TabInfo(clss, args); 1882d963a2899afbe000d1ab498f94de87f25e33184John Reck tab.setTag(info); 1892d963a2899afbe000d1ab498f94de87f25e33184John Reck tab.setTabListener(this); 1902d963a2899afbe000d1ab498f94de87f25e33184John Reck mTabs.add(info); 1912d963a2899afbe000d1ab498f94de87f25e33184John Reck mActionBar.addTab(tab); 1922d963a2899afbe000d1ab498f94de87f25e33184John Reck notifyDataSetChanged(); 1932d963a2899afbe000d1ab498f94de87f25e33184John Reck } 1942d963a2899afbe000d1ab498f94de87f25e33184John Reck 1952d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 1962d963a2899afbe000d1ab498f94de87f25e33184John Reck public int getCount() { 1972d963a2899afbe000d1ab498f94de87f25e33184John Reck return mTabs.size(); 1982d963a2899afbe000d1ab498f94de87f25e33184John Reck } 1992d963a2899afbe000d1ab498f94de87f25e33184John Reck 2002d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2012d963a2899afbe000d1ab498f94de87f25e33184John Reck public Fragment getItem(int position) { 2022d963a2899afbe000d1ab498f94de87f25e33184John Reck TabInfo info = mTabs.get(position); 2032d963a2899afbe000d1ab498f94de87f25e33184John Reck return Fragment.instantiate(mContext, info.clss.getName(), info.args); 2042d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2052d963a2899afbe000d1ab498f94de87f25e33184John Reck 2062d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2072d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 2082d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2092d963a2899afbe000d1ab498f94de87f25e33184John Reck 2102d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2112d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onPageSelected(int position) { 2122d963a2899afbe000d1ab498f94de87f25e33184John Reck mActionBar.setSelectedNavigationItem(position); 2132d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2142d963a2899afbe000d1ab498f94de87f25e33184John Reck 2152d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2162d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onPageScrollStateChanged(int state) { 2172d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2182d963a2899afbe000d1ab498f94de87f25e33184John Reck 2192d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2202d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onTabSelected(android.app.ActionBar.Tab tab, 2212d963a2899afbe000d1ab498f94de87f25e33184John Reck FragmentTransaction ft) { 2222d963a2899afbe000d1ab498f94de87f25e33184John Reck Object tag = tab.getTag(); 2232d963a2899afbe000d1ab498f94de87f25e33184John Reck for (int i=0; i<mTabs.size(); i++) { 2242d963a2899afbe000d1ab498f94de87f25e33184John Reck if (mTabs.get(i) == tag) { 2252d963a2899afbe000d1ab498f94de87f25e33184John Reck mViewPager.setCurrentItem(i); 2262d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2272d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2282d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2292d963a2899afbe000d1ab498f94de87f25e33184John Reck 2302d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2312d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onTabUnselected(android.app.ActionBar.Tab tab, 2322d963a2899afbe000d1ab498f94de87f25e33184John Reck FragmentTransaction ft) { 2332d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2342d963a2899afbe000d1ab498f94de87f25e33184John Reck 2352d963a2899afbe000d1ab498f94de87f25e33184John Reck @Override 2362d963a2899afbe000d1ab498f94de87f25e33184John Reck public void onTabReselected(android.app.ActionBar.Tab tab, 2372d963a2899afbe000d1ab498f94de87f25e33184John Reck FragmentTransaction ft) { 2382d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2392d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2402d963a2899afbe000d1ab498f94de87f25e33184John Reck 2412d963a2899afbe000d1ab498f94de87f25e33184John Reck private static String makeFragmentName(int viewId, int index) { 2422d963a2899afbe000d1ab498f94de87f25e33184John Reck return "android:switcher:" + viewId + ":" + index; 2432d963a2899afbe000d1ab498f94de87f25e33184John Reck } 2442d963a2899afbe000d1ab498f94de87f25e33184John Reck 245d3e4d5b4ffdf374b836ec9d4d3e315040c8c3779John Reck} 246