1 /* 2 * Copyright (C) 2015 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.wifi.calling; 18 19 import android.app.Fragment; 20 import android.app.FragmentManager; 21 import android.os.Bundle; 22 import android.support.v13.app.FragmentPagerAdapter; 23 import android.telephony.SubscriptionInfo; 24 import android.telephony.SubscriptionManager; 25 import android.util.Log; 26 import android.view.LayoutInflater; 27 import android.view.View; 28 import android.view.ViewGroup; 29 30 import com.android.ims.ImsManager; 31 import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 32 import com.android.settings.R; 33 import com.android.settings.core.InstrumentedFragment; 34 import com.android.settings.search.actionbar.SearchMenuController; 35 import com.android.settings.support.actionbar.HelpMenuController; 36 import com.android.settings.support.actionbar.HelpResourceProvider; 37 import com.android.settings.widget.RtlCompatibleViewPager; 38 import com.android.settings.widget.SlidingTabLayout; 39 40 import java.util.List; 41 42 /** 43 * "Wi-Fi Calling settings" screen. This is the container fragment which holds 44 * {@link WifiCallingSettingsForSub} fragments. 45 */ 46 public class WifiCallingSettings extends InstrumentedFragment implements HelpResourceProvider { 47 private static final String TAG = "WifiCallingSettings"; 48 private List<SubscriptionInfo> mSil; 49 50 //UI objects 51 private RtlCompatibleViewPager mViewPager; 52 private WifiCallingViewPagerAdapter mPagerAdapter; 53 private SlidingTabLayout mTabLayout; 54 55 @Override 56 public int getMetricsCategory() { 57 return MetricsEvent.WIFI_CALLING; 58 } 59 60 @Override 61 public View onCreateView(LayoutInflater inflater, ViewGroup container, 62 Bundle savedInstanceState) { 63 final View view = inflater.inflate(R.layout.wifi_calling_settings_tabs, container, false); 64 65 mTabLayout = view.findViewById(R.id.sliding_tabs); 66 mViewPager = (RtlCompatibleViewPager) view.findViewById(R.id.view_pager); 67 68 mPagerAdapter = new WifiCallingViewPagerAdapter(getChildFragmentManager(), mViewPager); 69 mViewPager.setAdapter(mPagerAdapter); 70 71 return view; 72 } 73 74 @Override 75 public void onCreate(Bundle icicle) { 76 super.onCreate(icicle); 77 setHasOptionsMenu(true); 78 SearchMenuController.init(this /* host */); 79 HelpMenuController.init(this /* host */); 80 81 // TODO: besides in onCreate, we should also update subList when SIM / Sub status 82 // changes. 83 updateSubList(); 84 } 85 86 @Override 87 public void onStart() { 88 super.onStart(); 89 90 if (mSil != null && mSil.size() > 1) { 91 mTabLayout.setViewPager(mViewPager); 92 } else { 93 mTabLayout.setVisibility(View.GONE); 94 } 95 } 96 97 @Override 98 public int getHelpResource() { 99 return R.string.help_uri_wifi_calling; 100 } 101 102 private final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter { 103 private final RtlCompatibleViewPager mViewPager; 104 105 public WifiCallingViewPagerAdapter(FragmentManager fragmentManager, 106 RtlCompatibleViewPager viewPager) { 107 super(fragmentManager); 108 mViewPager = viewPager; 109 } 110 111 @Override 112 public CharSequence getPageTitle(int position) { 113 return String.valueOf(mSil.get(position).getDisplayName()); 114 } 115 116 @Override 117 public Fragment getItem(int position) { 118 Log.d(TAG, "Adapter getItem " + position); 119 final Bundle args = new Bundle(); 120 args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); 121 args.putInt(WifiCallingSettingsForSub.FRAGMENT_BUNDLE_SUBID, 122 mSil.get(position).getSubscriptionId()); 123 WifiCallingSettingsForSub fragment = new WifiCallingSettingsForSub(); 124 fragment.setArguments(args); 125 126 return fragment; 127 } 128 129 @Override 130 public Object instantiateItem(ViewGroup container, int position) { 131 Log.d(TAG, "Adapter instantiateItem " + position); 132 return super.instantiateItem(container, 133 mViewPager.getRtlAwareIndex(position)); 134 } 135 136 @Override 137 public int getCount() { 138 if (mSil == null) { 139 Log.d(TAG, "Adapter getCount null mSil "); 140 return 0; 141 } else { 142 Log.d(TAG, "Adapter getCount " + mSil.size()); 143 return mSil.size(); 144 } 145 } 146 } 147 148 private void updateSubList() { 149 mSil = SubscriptionManager.from(getActivity()).getActiveSubscriptionInfoList(); 150 151 // Only config Wfc if it's enabled by platform. 152 if (mSil == null) { 153 return; 154 } 155 for (int i = 0; i < mSil.size(); ) { 156 ImsManager imsManager = ImsManager.getInstance(getActivity(), 157 mSil.get(i).getSimSlotIndex()); 158 if (!imsManager.isWfcEnabledByPlatform()) { 159 mSil.remove(i); 160 } else { 161 i++; 162 } 163 } 164 } 165 } 166