| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.messaging.ui.appsettings; |
| |
| import android.app.FragmentTransaction; |
| import android.content.ActivityNotFoundException; |
| import android.content.Intent; |
| import android.content.SharedPreferences; |
| import android.content.SharedPreferences.OnSharedPreferenceChangeListener; |
| import android.content.pm.PackageManager; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.Preference.OnPreferenceClickListener; |
| import android.preference.PreferenceCategory; |
| import android.preference.PreferenceFragment; |
| import android.preference.PreferenceScreen; |
| import androidx.core.app.NavUtils; |
| import android.text.TextUtils; |
| import android.view.MenuItem; |
| |
| import com.android.messaging.Factory; |
| import com.android.messaging.R; |
| import com.android.messaging.datamodel.ParticipantRefresh; |
| import com.android.messaging.datamodel.data.ParticipantData; |
| import com.android.messaging.sms.ApnDatabase; |
| import com.android.messaging.sms.MmsConfig; |
| import com.android.messaging.sms.MmsUtils; |
| import com.android.messaging.ui.BugleActionBarActivity; |
| import com.android.messaging.ui.UIIntents; |
| import com.android.messaging.util.Assert; |
| import com.android.messaging.util.BuglePrefs; |
| import com.android.messaging.util.LogUtil; |
| import com.android.messaging.util.PhoneUtils; |
| |
| public class PerSubscriptionSettingsActivity extends BugleActionBarActivity { |
| @Override |
| protected void onCreate(final Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| getSupportActionBar().setDisplayHomeAsUpEnabled(true); |
| final String title = getIntent().getStringExtra( |
| UIIntents.UI_INTENT_EXTRA_PER_SUBSCRIPTION_SETTING_TITLE); |
| if (!TextUtils.isEmpty(title)) { |
| getSupportActionBar().setTitle(title); |
| } else { |
| // This will fall back to the default title, i.e. "Messaging settings," so No-op. |
| } |
| |
| final FragmentTransaction ft = getFragmentManager().beginTransaction(); |
| final PerSubscriptionSettingsFragment fragment = new PerSubscriptionSettingsFragment(); |
| ft.replace(android.R.id.content, fragment); |
| ft.commit(); |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(final MenuItem item) { |
| switch (item.getItemId()) { |
| case android.R.id.home: |
| NavUtils.navigateUpFromSameTask(this); |
| return true; |
| } |
| return super.onOptionsItemSelected(item); |
| } |
| |
| public static class PerSubscriptionSettingsFragment extends PreferenceFragment |
| implements OnSharedPreferenceChangeListener { |
| private PhoneNumberPreference mPhoneNumberPreference; |
| private Preference mGroupMmsPreference; |
| private String mGroupMmsPrefKey; |
| private String mPhoneNumberKey; |
| private int mSubId; |
| |
| public PerSubscriptionSettingsFragment() { |
| // Required empty constructor |
| } |
| |
| @Override |
| public void onCreate(final Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| // Get sub id from launch intent |
| final Intent intent = getActivity().getIntent(); |
| Assert.notNull(intent); |
| mSubId = (intent != null) ? intent.getIntExtra(UIIntents.UI_INTENT_EXTRA_SUB_ID, |
| ParticipantData.DEFAULT_SELF_SUB_ID) : ParticipantData.DEFAULT_SELF_SUB_ID; |
| |
| final BuglePrefs subPrefs = Factory.get().getSubscriptionPrefs(mSubId); |
| getPreferenceManager().setSharedPreferencesName(subPrefs.getSharedPreferencesName()); |
| addPreferencesFromResource(R.xml.preferences_per_subscription); |
| |
| mPhoneNumberKey = getString(R.string.mms_phone_number_pref_key); |
| mPhoneNumberPreference = (PhoneNumberPreference) findPreference(mPhoneNumberKey); |
| final PreferenceCategory advancedCategory = (PreferenceCategory) |
| findPreference(getString(R.string.advanced_category_pref_key)); |
| final PreferenceCategory mmsCategory = (PreferenceCategory) |
| findPreference(getString(R.string.mms_messaging_category_pref_key)); |
| |
| mPhoneNumberPreference.setDefaultPhoneNumber( |
| PhoneUtils.get(mSubId).getCanonicalForSelf(false/*allowOverride*/), mSubId); |
| |
| mGroupMmsPrefKey = getString(R.string.group_mms_pref_key); |
| mGroupMmsPreference = findPreference(mGroupMmsPrefKey); |
| if (!MmsConfig.get(mSubId).getGroupMmsEnabled()) { |
| // Always show group messaging setting even if the SIM has no number |
| // If broadcast sms is selected, the SIM number is not needed |
| // If group mms is selected, the phone number dialog will popup when message |
| // is being sent, making sure we will have a self number for group mms. |
| mmsCategory.removePreference(mGroupMmsPreference); |
| } else { |
| mGroupMmsPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { |
| @Override |
| public boolean onPreferenceClick(Preference pref) { |
| GroupMmsSettingDialog.showDialog(getActivity(), mSubId); |
| return true; |
| } |
| }); |
| updateGroupMmsPrefSummary(); |
| } |
| |
| if (!MmsConfig.get(mSubId).getSMSDeliveryReportsEnabled()) { |
| final Preference deliveryReportsPref = findPreference( |
| getString(R.string.delivery_reports_pref_key)); |
| advancedCategory.removePreference(deliveryReportsPref); |
| } |
| final Preference wirelessAlertPref = findPreference(getString( |
| R.string.wireless_alerts_key)); |
| if (!isCellBroadcastAppLinkEnabled()) { |
| advancedCategory.removePreference(wirelessAlertPref); |
| } else { |
| wirelessAlertPref.setOnPreferenceClickListener( |
| new Preference.OnPreferenceClickListener() { |
| @Override |
| public boolean onPreferenceClick(final Preference preference) { |
| try { |
| startActivity(UIIntents.get().getWirelessAlertsIntent()); |
| } catch (final ActivityNotFoundException e) { |
| // Handle so we shouldn't crash if the wireless alerts |
| // implementation is broken. |
| LogUtil.e(LogUtil.BUGLE_TAG, |
| "Failed to launch wireless alerts activity", e); |
| } |
| return true; |
| } |
| }); |
| } |
| |
| // Access Point Names (APNs) |
| final Preference apnsPref = findPreference(getString(R.string.sms_apns_key)); |
| |
| if (MmsUtils.useSystemApnTable() && !ApnDatabase.doesDatabaseExist()) { |
| // Don't remove the ability to edit the local APN prefs if this device lets us |
| // access the system APN, but we can't find the MCC/MNC in the APN table and we |
| // created the local APN table in case the MCC/MNC was in there. In other words, |
| // if the local APN table exists, let the user edit it. |
| advancedCategory.removePreference(apnsPref); |
| } else { |
| final PreferenceScreen apnsScreen = (PreferenceScreen) findPreference( |
| getString(R.string.sms_apns_key)); |
| apnsScreen.setIntent(UIIntents.get() |
| .getApnSettingsIntent(getPreferenceScreen().getContext(), mSubId)); |
| } |
| |
| // We want to disable preferences if we are not the default app, but we do all of the |
| // above first so that the user sees the correct information on the screen |
| if (!PhoneUtils.getDefault().isDefaultSmsApp()) { |
| mGroupMmsPreference.setEnabled(false); |
| final Preference autoRetrieveMmsPreference = |
| findPreference(getString(R.string.auto_retrieve_mms_pref_key)); |
| autoRetrieveMmsPreference.setEnabled(false); |
| final Preference deliveryReportsPreference = |
| findPreference(getString(R.string.delivery_reports_pref_key)); |
| deliveryReportsPreference.setEnabled(false); |
| } |
| } |
| |
| private boolean isCellBroadcastAppLinkEnabled() { |
| if (!MmsConfig.get(mSubId).getShowCellBroadcast()) { |
| return false; |
| } |
| try { |
| final PackageManager pm = getActivity().getPackageManager(); |
| return pm.getApplicationEnabledSetting(UIIntents.CMAS_COMPONENT) |
| != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; |
| } catch (final IllegalArgumentException ignored) { |
| // CMAS app not installed. |
| } |
| return false; |
| } |
| |
| private void updateGroupMmsPrefSummary() { |
| final boolean groupMmsEnabled = getPreferenceScreen().getSharedPreferences().getBoolean( |
| mGroupMmsPrefKey, getResources().getBoolean(R.bool.group_mms_pref_default)); |
| mGroupMmsPreference.setSummary(groupMmsEnabled ? |
| R.string.enable_group_mms : R.string.disable_group_mms); |
| } |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| getPreferenceScreen().getSharedPreferences() |
| .registerOnSharedPreferenceChangeListener(this); |
| } |
| |
| @Override |
| public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, |
| final String key) { |
| if (key.equals(mGroupMmsPrefKey)) { |
| updateGroupMmsPrefSummary(); |
| } else if (key.equals(mPhoneNumberKey)) { |
| // Save the changed phone number in preferences specific to the sub id |
| final String newPhoneNumber = mPhoneNumberPreference.getText(); |
| final BuglePrefs subPrefs = BuglePrefs.getSubscriptionPrefs(mSubId); |
| if (TextUtils.isEmpty(newPhoneNumber)) { |
| subPrefs.remove(mPhoneNumberKey); |
| } else { |
| subPrefs.putString(getString(R.string.mms_phone_number_pref_key), |
| newPhoneNumber); |
| } |
| // Update the self participants so the new phone number will be reflected |
| // everywhere in the UI. |
| ParticipantRefresh.refreshSelfParticipants(); |
| } |
| } |
| |
| @Override |
| public void onPause() { |
| super.onPause(); |
| getPreferenceScreen().getSharedPreferences() |
| .unregisterOnSharedPreferenceChangeListener(this); |
| } |
| } |
| } |