15f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck/* 25f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Copyright (C) 2013 The Android Open Source Project 35f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * 45f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 55f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * you may not use this file except in compliance with the License. 65f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * You may obtain a copy of the License at 75f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * 85f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * http://www.apache.org/licenses/LICENSE-2.0 95f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * 105f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Unless required by applicable law or agreed to in writing, software 115f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * distributed under the License is distributed on an "AS IS" BASIS, 125f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * See the License for the specific language governing permissions and 145f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * limitations under the License. 155f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck */ 165f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 175f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckpackage com.android.photos; 185f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 195f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.app.ActionBar; 205f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.app.ActionBar.Tab; 215f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.app.Activity; 225f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.app.Fragment; 235f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.app.FragmentTransaction; 245f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.content.Intent; 255f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.os.Bundle; 26af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reckimport android.support.v13.app.FragmentPagerAdapter; 27af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reckimport android.support.v4.view.ViewPager; 285f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.view.Menu; 295f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport android.view.MenuItem; 30ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescuimport android.view.ViewGroup; 315f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 325f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport com.android.camera.CameraActivity; 335f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckimport com.android.gallery3d.R; 345f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 35af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reckimport java.util.ArrayList; 36af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 37c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescupublic class GalleryActivity extends Activity implements MultiChoiceManager.Provider { 385f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 39ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu private MultiChoiceManager mMultiChoiceManager; 40af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private ViewPager mViewPager; 41af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private TabsAdapter mTabsAdapter; 425f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 435f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 445f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck protected void onCreate(Bundle savedInstanceState) { 455f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck super.onCreate(savedInstanceState); 46ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mMultiChoiceManager = new MultiChoiceManager(this); 47af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mViewPager = new ViewPager(this); 488a3ab5665c57590b9f41f75c4a2fdf1ea1cffa00John Reck mViewPager.setId(R.id.viewpager); 49af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck setContentView(mViewPager); 50af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 51af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ActionBar ab = getActionBar(); 52af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 53af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ab.setDisplayShowHomeEnabled(false); 54af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ab.setDisplayShowTitleEnabled(false); 55af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 56af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mTabsAdapter = new TabsAdapter(this, mViewPager); 57af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mTabsAdapter.addTab(ab.newTab().setText(R.string.tab_photos), 58af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck PhotoSetFragment.class, null); 59af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mTabsAdapter.addTab(ab.newTab().setText(R.string.tab_albums), 60af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck AlbumSetFragment.class, null); 61af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 62af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck if (savedInstanceState != null) { 63af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ab.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); 64af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 65af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 66af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 67af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 68af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck protected void onSaveInstanceState(Bundle outState) { 69af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck super.onSaveInstanceState(outState); 70af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); 715f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 725f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 735f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 745f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck public boolean onCreateOptionsMenu(Menu menu) { 755f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck getMenuInflater().inflate(R.menu.gallery, menu); 765f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck return true; 775f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 785f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 795f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 805f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck public boolean onOptionsItemSelected(MenuItem item) { 815f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck switch (item.getItemId()) { 825f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck case R.id.menu_camera: 835f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck Intent intent = new Intent(this, CameraActivity.class); 845f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 855f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck startActivity(intent); 865f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck return true; 875f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck default: 885f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck return super.onOptionsItemSelected(item); 895f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 905f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 915f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 92af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public static class TabsAdapter extends FragmentPagerAdapter implements 93af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck ActionBar.TabListener, ViewPager.OnPageChangeListener { 94af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 95869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private final GalleryActivity mActivity; 96af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private final ActionBar mActionBar; 97af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private final ViewPager mViewPager; 98af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 99af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 100af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck static final class TabInfo { 101af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 102af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private final Class<?> clss; 103af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck private final Bundle args; 104af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 105af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck TabInfo(Class<?> _class, Bundle _args) { 106af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck clss = _class; 107af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck args = _args; 108af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 109af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 110af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 111869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public TabsAdapter(GalleryActivity activity, ViewPager pager) { 112af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck super(activity.getFragmentManager()); 113869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mActivity = activity; 114af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mActionBar = activity.getActionBar(); 115af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mViewPager = pager; 116af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mViewPager.setAdapter(this); 117af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mViewPager.setOnPageChangeListener(this); 118af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 119af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 120af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 121af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck TabInfo info = new TabInfo(clss, args); 122af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck tab.setTag(info); 123af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck tab.setTabListener(this); 124af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mTabs.add(info); 125af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mActionBar.addTab(tab); 126af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck notifyDataSetChanged(); 1275f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 1285f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 129af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 130af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public int getCount() { 131af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck return mTabs.size(); 132af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 133af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 134af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 135af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public Fragment getItem(int position) { 136af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck TabInfo info = mTabs.get(position); 137ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu return Fragment.instantiate(mActivity, info.clss.getName(), 138af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck info.args); 139af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 140af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 141af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 142af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public void onPageScrolled(int position, float positionOffset, 143af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck int positionOffsetPixels) { 144af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 145af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 146af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 147af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public void onPageSelected(int position) { 148af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mActionBar.setSelectedNavigationItem(position); 149af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 150af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck 151af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck @Override 152ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu public void setPrimaryItem(ViewGroup container, int position, Object object) { 153ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu super.setPrimaryItem(container, position, object); 154ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mActivity.mMultiChoiceManager.setDelegate((MultiChoiceManager.Delegate) object); 155ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu } 156ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu 157ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu @Override 158af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck public void onPageScrollStateChanged(int state) { 159af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 1605f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 1615f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 1625f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck public void onTabSelected(Tab tab, FragmentTransaction ft) { 163af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck Object tag = tab.getTag(); 164af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck for (int i = 0; i < mTabs.size(); i++) { 165af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck if (mTabs.get(i) == tag) { 166af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck mViewPager.setCurrentItem(i); 167af0343eb04ecd0e1895042e0f0656db0cc52dd4cJohn Reck } 1685f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 1695f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 1705f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 1715f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 1725f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck public void onTabUnselected(Tab tab, FragmentTransaction ft) { 1735f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 1745f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck 1755f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck @Override 1765f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck public void onTabReselected(Tab tab, FragmentTransaction ft) { 1775f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 1785f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck } 179ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu 180ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu @Override 181ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu public MultiChoiceManager getMultiChoiceManager() { 182ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu return mMultiChoiceManager; 183ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu } 1845f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck} 185