1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.dashboard; 18 19 import android.app.Activity; 20 import android.app.Fragment; 21 import android.app.FragmentManager; 22 import android.content.Context; 23 import android.os.Bundle; 24 import android.support.v13.app.FragmentPagerAdapter; 25 import android.view.LayoutInflater; 26 import android.view.View; 27 import android.view.ViewGroup; 28 29 import com.android.internal.logging.MetricsLogger; 30 import com.android.internal.logging.MetricsProto; 31 import com.android.settings.InstrumentedFragment; 32 import com.android.settings.R; 33 import com.android.settings.SettingsActivity; 34 import com.android.settings.overlay.FeatureFactory; 35 import com.android.settings.overlay.SupportFeatureProvider; 36 import com.android.settings.widget.RtlCompatibleViewPager; 37 import com.android.settings.widget.SlidingTabLayout; 38 import com.android.settingslib.drawer.SettingsDrawerActivity; 39 40 /** 41 * Container for Dashboard fragments. 42 */ 43 public final class DashboardContainerFragment extends InstrumentedFragment { 44 45 private static final int INDEX_SUMMARY_FRAGMENT = 0; 46 private static final int INDEX_SUPPORT_FRAGMENT = 1; 47 48 private RtlCompatibleViewPager mViewPager; 49 private View mHeaderView; 50 private DashboardViewPagerAdapter mPagerAdapter; 51 52 @Override getMetricsCategory()53 protected int getMetricsCategory() { 54 return MetricsProto.MetricsEvent.DASHBOARD_CONTAINER; 55 } 56 57 @Override onCreate(Bundle savedInstanceState)58 public void onCreate(Bundle savedInstanceState) { 59 super.onCreate(savedInstanceState); 60 setHasOptionsMenu(true); 61 } 62 63 @Override onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)64 public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 65 final View content = inflater.inflate(R.layout.dashboard_container, parent, false); 66 mViewPager = (RtlCompatibleViewPager) content.findViewById(R.id.pager); 67 mPagerAdapter = new DashboardViewPagerAdapter(getContext(), 68 getChildFragmentManager(), mViewPager); 69 mViewPager.setAdapter(mPagerAdapter); 70 mViewPager.addOnPageChangeListener( 71 new TabChangeListener((SettingsActivity) getActivity())); 72 mViewPager.setCurrentItem(INDEX_SUMMARY_FRAGMENT); 73 mHeaderView = inflater.inflate(R.layout.dashboard_container_header, parent, false); 74 ((SlidingTabLayout) mHeaderView).setViewPager(mViewPager); 75 return content; 76 } 77 78 @Override onResume()79 public void onResume() { 80 super.onResume(); 81 if (mPagerAdapter.getCount() > 1) { 82 final Activity activity = getActivity(); 83 if (activity instanceof SettingsDrawerActivity) { 84 ((SettingsDrawerActivity) getActivity()).setContentHeaderView(mHeaderView); 85 } 86 } 87 } 88 89 private static final class DashboardViewPagerAdapter extends FragmentPagerAdapter { 90 91 private final Context mContext; 92 private final SupportFeatureProvider mSupportFeatureProvider; 93 private final RtlCompatibleViewPager mViewPager; 94 DashboardViewPagerAdapter(Context context, FragmentManager fragmentManager, RtlCompatibleViewPager viewPager)95 public DashboardViewPagerAdapter(Context context, FragmentManager fragmentManager, 96 RtlCompatibleViewPager viewPager) { 97 super(fragmentManager); 98 mContext = context; 99 mSupportFeatureProvider = 100 FeatureFactory.getFactory(context).getSupportFeatureProvider(context); 101 mViewPager = viewPager; 102 } 103 104 @Override getPageTitle(int position)105 public CharSequence getPageTitle(int position) { 106 switch (position) { 107 case INDEX_SUMMARY_FRAGMENT: 108 return mContext.getString(R.string.page_tab_title_summary); 109 case INDEX_SUPPORT_FRAGMENT: 110 return mContext.getString(R.string.page_tab_title_support); 111 } 112 return super.getPageTitle(position); 113 } 114 115 @Override getItem(int position)116 public Fragment getItem(int position) { 117 switch (position) { 118 case INDEX_SUMMARY_FRAGMENT: 119 return new DashboardSummary(); 120 case INDEX_SUPPORT_FRAGMENT: 121 return new SupportFragment(); 122 default: 123 throw new IllegalArgumentException( 124 String.format( 125 "Position %d does not map to a valid dashboard fragment", 126 position)); 127 } 128 } 129 130 @Override instantiateItem(ViewGroup container, int position)131 public Object instantiateItem(ViewGroup container, int position) { 132 return super.instantiateItem(container, 133 mViewPager.getRtlAwareIndex(position)); 134 } 135 136 @Override getCount()137 public int getCount() { 138 return mSupportFeatureProvider == null ? 1 : 2; 139 } 140 } 141 142 private static final class TabChangeListener 143 implements RtlCompatibleViewPager.OnPageChangeListener { 144 145 private final SettingsActivity mActivity; 146 TabChangeListener(SettingsActivity activity)147 public TabChangeListener(SettingsActivity activity) { 148 mActivity = activity; 149 } 150 151 @Override onPageScrolled(int position, float positionOffset, int positionOffsetPixels)152 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 153 // Do nothing. 154 } 155 156 @Override onPageScrollStateChanged(int state)157 public void onPageScrollStateChanged(int state) { 158 // Do nothing 159 } 160 161 @Override onPageSelected(int position)162 public void onPageSelected(int position) { 163 switch (position) { 164 case INDEX_SUMMARY_FRAGMENT: 165 MetricsLogger.action( 166 mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUMMARY); 167 mActivity.setDisplaySearchMenu(true); 168 break; 169 case INDEX_SUPPORT_FRAGMENT: 170 MetricsLogger.action( 171 mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUPPORT_FRAGMENT); 172 mActivity.setDisplaySearchMenu(false); 173 break; 174 } 175 } 176 } 177 } 178