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 Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.ui.appsettings; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.app.Fragment; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.os.Bundle; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.support.v4.app.NavUtils; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.text.TextUtils; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.LayoutInflater; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.MenuItem; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.View; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.View.OnClickListener; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.ViewGroup; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.ArrayAdapter; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.ListView; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.widget.TextView; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.R; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DataModel; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.binding.Binding; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.binding.BindingBase; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SettingsData; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SettingsData.SettingsDataListener; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SettingsData.SettingsItem; 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.ui.BugleActionBarActivity; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.ui.UIIntents; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.PhoneUtils; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Shows the "master" settings activity that contains two parts, one for application-wide settings 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * (dubbed "General settings"), and one or more for per-subscription settings (dubbed "Messaging 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * settings" for single-SIM, and the actual SIM name for multi-SIM). Clicking on either item 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * (e.g. "General settings") will open the detail settings activity (ApplicationSettingsActivity 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * in this case). 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class SettingsActivity extends BugleActionBarActivity { 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd protected void onCreate(final Bundle savedInstanceState) { 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.onCreate(savedInstanceState); 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSupportActionBar().setDisplayHomeAsUpEnabled(true); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Directly open the detailed settings page as the top-level settings activity if this is 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // not a multi-SIM device. 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (PhoneUtils.getDefault().getActiveSubscriptionCount() <= 1) { 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd UIIntents.get().launchApplicationSettingsActivity(this, true /* topLevel */); 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd finish(); 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getFragmentManager().beginTransaction() 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd .replace(android.R.id.content, new SettingsFragment()) 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd .commit(); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean onOptionsItemSelected(final MenuItem item) { 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd switch (item.getItemId()) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd case android.R.id.home: 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd NavUtils.navigateUpFromSameTask(this); 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return true; 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return super.onOptionsItemSelected(item); 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static class SettingsFragment extends Fragment implements SettingsDataListener { 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private ListView mListView; 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private SettingsListAdapter mAdapter; 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Binding<SettingsData> mBinding = BindingBase.createBinding(this); 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onCreate(final Bundle savedInstanceState) { 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.onCreate(savedInstanceState); 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mBinding.bind(DataModel.get().createSettingsData(getActivity(), this)); 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mBinding.getData().init(getLoaderManager(), mBinding); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Bundle savedInstanceState) { 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final View view = inflater.inflate(R.layout.settings_fragment, container, false); 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mListView = (ListView) view.findViewById(android.R.id.list); 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mAdapter = new SettingsListAdapter(getActivity()); 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mListView.setAdapter(mAdapter); 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return view; 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onDestroy() { 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.onDestroy(); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mBinding.unbind(); 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onSelfParticipantDataLoaded(SettingsData data) { 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mBinding.ensureBound(data); 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mAdapter.setSettingsItems(data.getSettingsItems()); 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * An adapter that displays a list of SettingsItem. 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private class SettingsListAdapter extends ArrayAdapter<SettingsItem> { 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SettingsListAdapter(final Context context) { 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(context, R.layout.settings_item_view, new ArrayList<SettingsItem>()); 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setSettingsItems(final List<SettingsItem> newList) { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd clear(); 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd addAll(newList); 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd notifyDataSetChanged(); 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public View getView(final int position, final View convertView, 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ViewGroup parent) { 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd View itemView; 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (convertView != null) { 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd itemView = convertView; 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final LayoutInflater inflater = (LayoutInflater) getContext() 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd itemView = inflater.inflate( 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd R.layout.settings_item_view, parent, false); 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SettingsItem item = getItem(position); 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final TextView titleTextView = (TextView) itemView.findViewById(R.id.title); 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final TextView subtitleTextView = (TextView) itemView.findViewById(R.id.subtitle); 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String summaryText = item.getDisplayDetail(); 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd titleTextView.setText(item.getDisplayName()); 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(summaryText)) { 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd subtitleTextView.setText(summaryText); 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd subtitleTextView.setVisibility(View.VISIBLE); 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd subtitleTextView.setVisibility(View.GONE); 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd itemView.setOnClickListener(new OnClickListener() { 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onClick(View view) { 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd switch (item.getType()) { 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd case SettingsItem.TYPE_GENERAL_SETTINGS: 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd UIIntents.get().launchApplicationSettingsActivity(getActivity(), 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd false /* topLevel */); 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd case SettingsItem.TYPE_PER_SUBSCRIPTION_SETTINGS: 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd UIIntents.get().launchPerSubscriptionSettingsActivity(getActivity(), 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd item.getSubId(), item.getActivityTitle()); 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd default: 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.fail("unrecognized setting type!"); 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd break; 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }); 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return itemView; 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 179