1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.ui.debug; 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.app.Fragment; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.os.Bundle; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.telephony.SubscriptionInfo; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.LayoutInflater; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.View; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.ViewGroup; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.AdapterView; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.AdapterView.OnItemSelectedListener; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.ArrayAdapter; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.BaseAdapter; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.ListView; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.Spinner; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.TextView; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.R; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ParticipantData; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.sms.MmsConfig; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.ui.debug.DebugMmsConfigItemView.MmsConfigItemListener; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.OsUtil; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.PhoneUtils; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Collections; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Show list of all MmsConfig key/value pairs and allow editing. 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class DebugMmsConfigFragment extends Fragment { 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Bundle savedInstanceState) { 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final View fragmentView = inflater.inflate(R.layout.mms_config_debug_fragment, container, 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd false); 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ListView listView = (ListView) fragmentView.findViewById(android.R.id.list); 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Spinner spinner = (Spinner) fragmentView.findViewById(R.id.sim_selector); 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Integer[] subIdArray = getActiveSubIds(); 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ArrayAdapter<Integer> spinnerAdapter = new ArrayAdapter<Integer>(getActivity(), 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd android.R.layout.simple_spinner_item, subIdArray); 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd spinner.setAdapter(spinnerAdapter); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd listView.setAdapter(new MmsConfigAdapter(getActivity(), subIdArray[position])); 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int[] mccmnc = PhoneUtils.get(subIdArray[position]).getMccMnc(); 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Set the title with the mcc/mnc 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final TextView title = (TextView) fragmentView.findViewById(R.id.sim_title); 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd title.setText("(" + mccmnc[0] + "/" + mccmnc[1] + ") " + 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getActivity().getString(R.string.debug_sub_id_spinner_text)); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onNothingSelected(AdapterView<?> parent) { 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }); 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return fragmentView; 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static Integer[] getActiveSubIds() { 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!OsUtil.isAtLeastL_MR1()) { 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new Integer[] { ParticipantData.DEFAULT_SELF_SUB_ID }; 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final List<SubscriptionInfo> subRecords = 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList(); 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (subRecords == null) { 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new Integer[0]; 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Integer[] retArray = new Integer[subRecords.size()]; 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 0; i < subRecords.size(); i++) { 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retArray[i] = subRecords.get(i).getSubscriptionId(); 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return retArray; 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private class MmsConfigAdapter extends BaseAdapter implements 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd DebugMmsConfigItemView.MmsConfigItemListener { 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final LayoutInflater mInflater; 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final List<String> mKeys; 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final MmsConfig mMmsConfig; 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public MmsConfigAdapter(Context context, int subId) { 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMmsConfig = MmsConfig.get(subId); 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mKeys = new ArrayList<>(mMmsConfig.keySet()); 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Collections.sort(mKeys); 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public View getView(final int position, final View convertView, final ViewGroup parent) { 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final DebugMmsConfigItemView view; 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (convertView != null && convertView instanceof DebugMmsConfigItemView) { 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd view = (DebugMmsConfigItemView) convertView; 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd view = (DebugMmsConfigItemView) mInflater.inflate( 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd R.layout.debug_mmsconfig_item_view, parent, false); 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String key = mKeys.get(position); 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd view.bind(key, 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MmsConfig.getKeyType(key), 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String.valueOf(mMmsConfig.getValue(key)), 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this); 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return view; 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onValueChanged(String key, String keyType, String value) { 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMmsConfig.update(key, value, keyType); 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd notifyDataSetChanged(); 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getCount() { 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mKeys.size(); 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Object getItem(int position) { 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mKeys.get(position); 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getItemId(int position) { 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return position; 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 148