| /* |
| * 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.Intent; |
| import android.content.SharedPreferences; |
| import android.content.SharedPreferences.OnSharedPreferenceChangeListener; |
| import android.media.Ringtone; |
| import android.media.RingtoneManager; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.PreferenceFragment; |
| import android.preference.PreferenceScreen; |
| import android.preference.RingtonePreference; |
| import android.preference.TwoStatePreference; |
| import android.provider.Settings; |
| import androidx.core.app.NavUtils; |
| import android.text.TextUtils; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| |
| import com.android.messaging.R; |
| import com.android.messaging.ui.BugleActionBarActivity; |
| import com.android.messaging.ui.LicenseActivity; |
| import com.android.messaging.ui.UIIntents; |
| import com.android.messaging.util.BuglePrefs; |
| import com.android.messaging.util.DebugUtils; |
| import com.android.messaging.util.OsUtil; |
| import com.android.messaging.util.PhoneUtils; |
| |
| public class ApplicationSettingsActivity extends BugleActionBarActivity { |
| @Override |
| protected void onCreate(final Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| getSupportActionBar().setDisplayHomeAsUpEnabled(true); |
| final boolean topLevel = getIntent().getBooleanExtra( |
| UIIntents.UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS, false); |
| if (topLevel) { |
| getSupportActionBar().setTitle(getString(R.string.settings_activity_title)); |
| } |
| |
| FragmentTransaction ft = getFragmentManager().beginTransaction(); |
| ft.replace(android.R.id.content, new ApplicationSettingsFragment()); |
| ft.commit(); |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| if (super.onCreateOptionsMenu(menu)) { |
| return true; |
| } |
| getMenuInflater().inflate(R.menu.settings_menu, menu); |
| return true; |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(final MenuItem item) { |
| switch (item.getItemId()) { |
| case android.R.id.home: |
| NavUtils.navigateUpFromSameTask(this); |
| return true; |
| case R.id.action_license: |
| final Intent intent = new Intent(this, LicenseActivity.class); |
| startActivity(intent); |
| return true; |
| } |
| return super.onOptionsItemSelected(item); |
| } |
| |
| public static class ApplicationSettingsFragment extends PreferenceFragment implements |
| OnSharedPreferenceChangeListener { |
| |
| private String mNotificationsEnabledPreferenceKey; |
| private TwoStatePreference mNotificationsEnabledPreference; |
| private String mRingtonePreferenceKey; |
| private RingtonePreference mRingtonePreference; |
| private Preference mVibratePreference; |
| private String mSmsDisabledPrefKey; |
| private Preference mSmsDisabledPreference; |
| private String mSmsEnabledPrefKey; |
| private Preference mSmsEnabledPreference; |
| private boolean mIsSmsPreferenceClicked; |
| |
| public ApplicationSettingsFragment() { |
| // Required empty constructor |
| } |
| |
| @Override |
| public void onCreate(final Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| getPreferenceManager().setSharedPreferencesName(BuglePrefs.SHARED_PREFERENCES_NAME); |
| addPreferencesFromResource(R.xml.preferences_application); |
| |
| mNotificationsEnabledPreferenceKey = |
| getString(R.string.notifications_enabled_pref_key); |
| mNotificationsEnabledPreference = (TwoStatePreference) findPreference( |
| mNotificationsEnabledPreferenceKey); |
| mRingtonePreferenceKey = getString(R.string.notification_sound_pref_key); |
| mRingtonePreference = (RingtonePreference) findPreference(mRingtonePreferenceKey); |
| mVibratePreference = findPreference( |
| getString(R.string.notification_vibration_pref_key)); |
| mSmsDisabledPrefKey = getString(R.string.sms_disabled_pref_key); |
| mSmsDisabledPreference = findPreference(mSmsDisabledPrefKey); |
| mSmsEnabledPrefKey = getString(R.string.sms_enabled_pref_key); |
| mSmsEnabledPreference = findPreference(mSmsEnabledPrefKey); |
| mIsSmsPreferenceClicked = false; |
| |
| final SharedPreferences prefs = getPreferenceScreen().getSharedPreferences(); |
| updateSoundSummary(prefs); |
| |
| if (!DebugUtils.isDebugEnabled()) { |
| final Preference debugCategory = findPreference(getString( |
| R.string.debug_pref_key)); |
| getPreferenceScreen().removePreference(debugCategory); |
| } |
| |
| final PreferenceScreen advancedScreen = (PreferenceScreen) findPreference( |
| getString(R.string.advanced_pref_key)); |
| final boolean topLevel = getActivity().getIntent().getBooleanExtra( |
| UIIntents.UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS, false); |
| if (topLevel) { |
| advancedScreen.setIntent(UIIntents.get() |
| .getAdvancedSettingsIntent(getPreferenceScreen().getContext())); |
| } else { |
| // Hide the Advanced settings screen if this is not top-level; these are shown at |
| // the parent SettingsActivity. |
| getPreferenceScreen().removePreference(advancedScreen); |
| } |
| } |
| |
| @Override |
| public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen, |
| Preference preference) { |
| if (preference.getKey() == mSmsDisabledPrefKey || |
| preference.getKey() == mSmsEnabledPrefKey) { |
| mIsSmsPreferenceClicked = true; |
| } |
| return super.onPreferenceTreeClick(preferenceScreen, preference); |
| } |
| |
| private void updateSoundSummary(final SharedPreferences sharedPreferences) { |
| // The silent ringtone just returns an empty string |
| String ringtoneName = mRingtonePreference.getContext().getString( |
| R.string.silent_ringtone); |
| |
| String ringtoneString = sharedPreferences.getString(mRingtonePreferenceKey, null); |
| |
| // Bootstrap the default setting in the preferences so that we have a valid selection |
| // in the dialog the first time that the user opens it. |
| if (ringtoneString == null) { |
| ringtoneString = Settings.System.DEFAULT_NOTIFICATION_URI.toString(); |
| final SharedPreferences.Editor editor = sharedPreferences.edit(); |
| editor.putString(mRingtonePreferenceKey, ringtoneString); |
| editor.apply(); |
| } |
| |
| if (!TextUtils.isEmpty(ringtoneString)) { |
| final Uri ringtoneUri = Uri.parse(ringtoneString); |
| final Ringtone tone = RingtoneManager.getRingtone(mRingtonePreference.getContext(), |
| ringtoneUri); |
| |
| if (tone != null) { |
| ringtoneName = tone.getTitle(mRingtonePreference.getContext()); |
| } |
| } |
| |
| mRingtonePreference.setSummary(ringtoneName); |
| } |
| |
| private void updateSmsEnabledPreferences() { |
| if (!OsUtil.isAtLeastKLP()) { |
| getPreferenceScreen().removePreference(mSmsDisabledPreference); |
| getPreferenceScreen().removePreference(mSmsEnabledPreference); |
| } else { |
| final String defaultSmsAppLabel = getString(R.string.default_sms_app, |
| PhoneUtils.getDefault().getDefaultSmsAppLabel()); |
| boolean isSmsEnabledBeforeState; |
| boolean isSmsEnabledCurrentState; |
| if (PhoneUtils.getDefault().isDefaultSmsApp()) { |
| if (getPreferenceScreen().findPreference(mSmsEnabledPrefKey) == null) { |
| getPreferenceScreen().addPreference(mSmsEnabledPreference); |
| isSmsEnabledBeforeState = false; |
| } else { |
| isSmsEnabledBeforeState = true; |
| } |
| isSmsEnabledCurrentState = true; |
| getPreferenceScreen().removePreference(mSmsDisabledPreference); |
| mSmsEnabledPreference.setSummary(defaultSmsAppLabel); |
| } else { |
| if (getPreferenceScreen().findPreference(mSmsDisabledPrefKey) == null) { |
| getPreferenceScreen().addPreference(mSmsDisabledPreference); |
| isSmsEnabledBeforeState = true; |
| } else { |
| isSmsEnabledBeforeState = false; |
| } |
| isSmsEnabledCurrentState = false; |
| getPreferenceScreen().removePreference(mSmsEnabledPreference); |
| mSmsDisabledPreference.setSummary(defaultSmsAppLabel); |
| } |
| updateNotificationsPreferences(); |
| } |
| mIsSmsPreferenceClicked = false; |
| } |
| |
| private void updateNotificationsPreferences() { |
| final boolean canNotify = !OsUtil.isAtLeastKLP() |
| || PhoneUtils.getDefault().isDefaultSmsApp(); |
| mNotificationsEnabledPreference.setEnabled(canNotify); |
| } |
| |
| @Override |
| public void onStart() { |
| super.onStart(); |
| // We do this on start rather than on resume because the sound picker is in a |
| // separate activity. |
| getPreferenceScreen().getSharedPreferences() |
| .registerOnSharedPreferenceChangeListener(this); |
| } |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| updateSmsEnabledPreferences(); |
| updateNotificationsPreferences(); |
| } |
| |
| @Override |
| public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, |
| final String key) { |
| if (key.equals(mNotificationsEnabledPreferenceKey)) { |
| updateNotificationsPreferences(); |
| } else if (key.equals(mRingtonePreferenceKey)) { |
| updateSoundSummary(sharedPreferences); |
| } |
| } |
| |
| @Override |
| public void onStop() { |
| super.onStop(); |
| getPreferenceScreen().getSharedPreferences() |
| .unregisterOnSharedPreferenceChangeListener(this); |
| } |
| } |
| } |