/** * Copyright (C) 2017 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.dialer.voicemail.settings;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.telecom.TelecomUtil;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailClient.ActivationStateListener;
import com.android.voicemail.VoicemailComponent;
import com.google.common.base.Optional;
/**
* Fragment for voicemail settings. Requires {@link VoicemailClient#PARAM_PHONE_ACCOUNT_HANDLE} set
* in arguments.
*/
@TargetApi(VERSION_CODES.O)
public class VoicemailSettingsFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener, ActivationStateListener {
private static final String TAG = "VmSettingsActivity";
// Extras copied from com.android.phone.settings.VoicemailSettingsActivity,
// it does not recognize EXTRA_PHONE_ACCOUNT_HANDLE in O.
@VisibleForTesting
static final String SUB_ID_EXTRA =
"com.android.phone.settings.SubscriptionInfoHelper.SubscriptionId";
// Extra on intent containing the label of a subscription.
@VisibleForTesting
static final String SUB_LABEL_EXTRA =
"com.android.phone.settings.SubscriptionInfoHelper.SubscriptionLabel";
@Nullable private PhoneAccountHandle phoneAccountHandle;
private VoicemailClient voicemailClient;
private Preference voicemailNotificationPreference;
private SwitchPreference voicemailVisualVoicemail;
private SwitchPreference autoArchiveSwitchPreference;
private SwitchPreference donateVoicemailSwitchPreference;
private Preference voicemailChangePinPreference;
private PreferenceScreen advancedSettings;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
phoneAccountHandle =
Assert.isNotNull(getArguments().getParcelable(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE));
voicemailClient = VoicemailComponent.get(getContext()).getVoicemailClient();
}
@Override
public void onResume() {
super.onResume();
Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_SETTINGS_VIEWED);
voicemailClient.addActivationStateListener(this);
PreferenceScreen preferenceScreen = getPreferenceScreen();
if (preferenceScreen != null) {
preferenceScreen.removeAll();
}
addPreferencesFromResource(R.xml.voicemail_settings);
PreferenceScreen prefSet = getPreferenceScreen();
voicemailNotificationPreference =
findPreference(getString(R.string.voicemail_notifications_key));
voicemailNotificationPreference.setIntent(getNotificationSettingsIntent());
voicemailNotificationPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Logger.get(getContext())
.logImpression(DialerImpression.Type.VVM_CHANGE_RINGTONE_CLICKED);
// Let the preference handle the click.
return false;
}
});
voicemailVisualVoicemail =
(SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_key));
autoArchiveSwitchPreference =
(SwitchPreference)
findPreference(getString(R.string.voicemail_visual_voicemail_archive_key));
donateVoicemailSwitchPreference =
(SwitchPreference)
findPreference(getString(R.string.voicemail_visual_voicemail_donation_key));
if (!VoicemailComponent.get(getContext())
.getVoicemailClient()
.isVoicemailArchiveAvailable(getContext())) {
getPreferenceScreen().removePreference(autoArchiveSwitchPreference);
}
if (!VoicemailComponent.get(getContext())
.getVoicemailClient()
.isVoicemailDonationAvailable(getContext())) {
getPreferenceScreen().removePreference(donateVoicemailSwitchPreference);
}
voicemailChangePinPreference = findPreference(getString(R.string.voicemail_change_pin_key));
if (voicemailClient.hasCarrierSupport(getContext(), phoneAccountHandle)) {
Assert.isNotNull(phoneAccountHandle);
Intent changePinIntent =
new Intent(new Intent(getContext(), VoicemailChangePinActivity.class));
changePinIntent.putExtra(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
voicemailChangePinPreference.setIntent(changePinIntent);
voicemailChangePinPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_CHANGE_PIN_CLICKED);
// Let the preference handle the click.
return false;
}
});
if (VoicemailChangePinActivity.isPinScrambled(getContext(), phoneAccountHandle)) {
voicemailChangePinPreference.setTitle(R.string.voicemail_set_pin_preference_title);
} else {
voicemailChangePinPreference.setTitle(R.string.voicemail_change_pin_preference_title);
}
updateChangePin();
voicemailVisualVoicemail.setOnPreferenceChangeListener(this);
voicemailVisualVoicemail.setChecked(
voicemailClient.isVoicemailEnabled(getContext(), phoneAccountHandle));
autoArchiveSwitchPreference.setOnPreferenceChangeListener(this);
autoArchiveSwitchPreference.setChecked(
voicemailClient.isVoicemailArchiveEnabled(getContext(), phoneAccountHandle));
donateVoicemailSwitchPreference.setOnPreferenceChangeListener(this);
donateVoicemailSwitchPreference.setChecked(
voicemailClient.isVoicemailDonationEnabled(getContext(), phoneAccountHandle));
updateDonateVoicemail();
} else {
prefSet.removePreference(voicemailVisualVoicemail);
prefSet.removePreference(autoArchiveSwitchPreference);
prefSet.removePreference(donateVoicemailSwitchPreference);
prefSet.removePreference(voicemailChangePinPreference);
}
advancedSettings =
(PreferenceScreen) findPreference(getString(R.string.voicemail_advanced_settings_key));
Intent advancedSettingsIntent = new Intent(TelephonyManager.ACTION_CONFIGURE_VOICEMAIL);
advancedSettingsIntent.putExtra(TelephonyManager.EXTRA_HIDE_PUBLIC_SETTINGS, true);
advancedSettingsIntent.putExtra(
TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
// (a bug): EXTRA_PHONE_ACCOUNT_HANDLE not implemented in telephony in O.
Optional