1db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan/* 2db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * Copyright (C) 2011 The Android Open Source Project 3db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * 4db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * Licensed under the Apache License, Version 2.0 (the "License"); 5db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * you may not use this file except in compliance with the License. 6db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * You may obtain a copy of the License at 7db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * 8db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * http://www.apache.org/licenses/LICENSE-2.0 9db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * 10db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * Unless required by applicable law or agreed to in writing, software 11db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * distributed under the License is distributed on an "AS IS" BASIS, 12db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * See the License for the specific language governing permissions and 14db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan * limitations under the License. 15db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan */ 16db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanpackage com.android.contacts.detail; 17db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 18db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanimport android.os.Parcelable; 19db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanimport android.support.v4.view.PagerAdapter; 20db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanimport android.support.v4.view.ViewPager; 21db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanimport android.view.View; 22db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 23db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan/** 246feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * Adapter for the {@link ViewPager} for the contact detail page for a contact in 2 cases: 256feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * 1) without social updates, and 2) with social updates. The default initial case is for 266feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * the contact with social updates which uses all possible pages. 27db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan */ 28db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuanpublic class ContactDetailViewPagerAdapter extends PagerAdapter { 29db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 30db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public static final String ABOUT_FRAGMENT_TAG = "view-pager-about-fragment"; 31db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public static final String UPDTES_FRAGMENT_TAG = "view-pager-updates-fragment"; 32db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 33db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan private static final int INDEX_ABOUT_FRAGMENT = 0; 34db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan private static final int INDEX_UPDATES_FRAGMENT = 1; 35db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 363bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan private static final int MAX_FRAGMENT_VIEW_COUNT = 2; 373bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan 386feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan /** 396feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * The initial value for the view count needs to be MAX_FRAGMENT_VIEW_COUNT, 406feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * otherwise anything smaller would break screen rotation functionality for a user viewing 416feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * a contact with social updates (i.e. the user was viewing the second page, rotates the 426feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan * device, the view pager requires the second page to exist immediately on launch). 436feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan */ 443bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan private int mFragmentViewCount = MAX_FRAGMENT_VIEW_COUNT; 453bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan 466c0470e21d8506fb53915df7463634fd47288343Katherine Kuan private View mAboutFragmentView; 476c0470e21d8506fb53915df7463634fd47288343Katherine Kuan private View mUpdatesFragmentView; 48db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 49db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public ContactDetailViewPagerAdapter() { 50db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 51db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 526c0470e21d8506fb53915df7463634fd47288343Katherine Kuan public void setAboutFragmentView(View view) { 53db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan mAboutFragmentView = view; 54db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 55db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 566c0470e21d8506fb53915df7463634fd47288343Katherine Kuan public void setUpdatesFragmentView(View view) { 57db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan mUpdatesFragmentView = view; 58db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 59db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 6051f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan /** 6151f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan * Enable swiping if the detail and update fragments should be showing. Otherwise diable 6251f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan * swiping if only the detail fragment should be showing. 6351f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan */ 6451f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan public void enableSwipe(boolean enable) { 6551f1071a1dc91dace0de73be1c5fbba4f091f054Katherine Kuan mFragmentViewCount = enable ? MAX_FRAGMENT_VIEW_COUNT : 1; 663bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan notifyDataSetChanged(); 673bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan } 683bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan 69db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 70db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public int getCount() { 713bbd9a0c3e85262365376ae212f9a8bc521e37d4Katherine Kuan return mFragmentViewCount; 72db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 73db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 74db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan /** Gets called when the number of items changes. */ 75db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 76db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public int getItemPosition(Object object) { 776feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan // Always return a valid index for the about fragment view because it's always shown 786feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan // whether the contact has social updates or not. 79db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan if (object == mAboutFragmentView) { 80db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return INDEX_ABOUT_FRAGMENT; 81db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 826feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan // Only return a valid index for the updates fragment view if our view count > 1. 836feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan if (object == mUpdatesFragmentView && mFragmentViewCount > 1) { 84db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return INDEX_UPDATES_FRAGMENT; 85db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 866feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan // Otherwise the view should have no position. 87db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return POSITION_NONE; 88db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 89db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 90db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 91db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public void startUpdate(View container) { 92db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 93db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 94db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 95db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public Object instantiateItem(View container, int position) { 96db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan switch (position) { 97db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan case INDEX_ABOUT_FRAGMENT: 986feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan mAboutFragmentView.setVisibility(View.VISIBLE); 99db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return mAboutFragmentView; 100db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan case INDEX_UPDATES_FRAGMENT: 1016feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan mUpdatesFragmentView.setVisibility(View.VISIBLE); 102db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return mUpdatesFragmentView; 103db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 104db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan throw new IllegalArgumentException("Invalid position: " + position); 105db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 106db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 107db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 108db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public void destroyItem(View container, int position, Object object) { 1096feb0d3fcae55524e66edc1bad4e97ac936ec197Katherine Kuan ((View) object).setVisibility(View.GONE); 110db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 111db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 112db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 113db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public void finishUpdate(View container) { 114db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 115db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 116db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 117db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public boolean isViewFromObject(View view, Object object) { 118db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return ((View) object) == view; 119db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 120db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 121db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 122db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public Parcelable saveState() { 123db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan return null; 124db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 125db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan 126db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan @Override 127db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan public void restoreState(Parcelable state, ClassLoader loader) { 128db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan } 129db0d8669cd1ffaa45827edb65b2b0eecb27561f5Katherine Kuan} 130