blob: 4860649b350b8a880a2e3ea0498ce33a908d8cc7 [file] [log] [blame]
/**
* Copyright (C) 2017 The Android Open Source Project
*
* <p>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
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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.voicemail.impl.settings;
import android.annotation.TargetApi;
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.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
import com.android.voicemail.impl.R;
import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.sync.VvmAccountManager;
/**
* 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, VvmAccountManager.Listener {
private static final String TAG = "VmSettingsActivity";
@Nullable private PhoneAccountHandle phoneAccountHandle;
private OmtpVvmCarrierConfigHelper omtpVvmCarrierConfigHelper;
private Preference voicemailNotificationPreference;
private SwitchPreference voicemailVisualVoicemail;
private SwitchPreference autoArchiveSwitchPreference;
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));
omtpVvmCarrierConfigHelper = new OmtpVvmCarrierConfigHelper(getContext(), phoneAccountHandle);
}
@Override
public void onResume() {
super.onResume();
Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_SETTINGS_VIEWED);
VvmAccountManager.addListener(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));
if (!VoicemailComponent.get(getContext())
.getVoicemailClient()
.isVoicemailArchiveAvailable(getContext())) {
getPreferenceScreen().removePreference(autoArchiveSwitchPreference);
}
voicemailChangePinPreference = findPreference(getString(R.string.voicemail_change_pin_key));
if (omtpVvmCarrierConfigHelper.isValid()) {
Assert.isNotNull(phoneAccountHandle);
Intent changePinIntent =
new Intent(new Intent(getContext(), VoicemailChangePinActivity.class));
changePinIntent.putExtra(
VoicemailChangePinActivity.EXTRA_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.isDefaultOldPinSet(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(
VisualVoicemailSettingsUtil.isEnabled(getContext(), phoneAccountHandle));
autoArchiveSwitchPreference.setOnPreferenceChangeListener(this);
autoArchiveSwitchPreference.setChecked(
VisualVoicemailSettingsUtil.isArchiveEnabled(getContext(), phoneAccountHandle));
} else {
prefSet.removePreference(voicemailVisualVoicemail);
prefSet.removePreference(autoArchiveSwitchPreference);
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);
advancedSettings.setIntent(advancedSettingsIntent);
voicemailChangePinPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Logger.get(getContext())
.logImpression(DialerImpression.Type.VVM_ADVANCED_SETINGS_CLICKED);
// Let the preference handle the click.
return false;
}
});
}
@Override
public void onPause() {
VvmAccountManager.removeListener(this);
super.onPause();
}
/**
* Implemented to support onPreferenceChangeListener to look for preference changes.
*
* @param preference is the preference to be changed
* @param objValue should be the value of the selection, NOT its localized display value.
*/
@Override
public boolean onPreferenceChange(Preference preference, Object objValue) {
VvmLog.d(TAG, "onPreferenceChange: \"" + preference + "\" changed to \"" + objValue + "\"");
if (preference.getKey().equals(voicemailVisualVoicemail.getKey())) {
boolean isEnabled = (boolean) objValue;
VisualVoicemailSettingsUtil.setEnabled(getContext(), phoneAccountHandle, isEnabled);
if (isEnabled) {
Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_USER_ENABLED_IN_SETTINGS);
} else {
Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_USER_DISABLED_IN_SETTINGS);
}
updateChangePin();
} else if (preference.getKey().equals(autoArchiveSwitchPreference.getKey())) {
logArchiveToggle((boolean) objValue);
VisualVoicemailSettingsUtil.setArchiveEnabled(
getContext(), phoneAccountHandle, (boolean) objValue);
}
// Always let the preference setting proceed.
return true;
}
private void updateChangePin() {
if (!VisualVoicemailSettingsUtil.isEnabled(getContext(), phoneAccountHandle)) {
voicemailChangePinPreference.setSummary(
R.string.voicemail_change_pin_preference_summary_disable);
voicemailChangePinPreference.setEnabled(false);
} else if (!VvmAccountManager.isAccountActivated(getContext(), phoneAccountHandle)) {
voicemailChangePinPreference.setSummary(
R.string.voicemail_change_pin_preference_summary_not_activated);
voicemailChangePinPreference.setEnabled(false);
} else {
voicemailChangePinPreference.setSummary(null);
voicemailChangePinPreference.setEnabled(true);
}
}
private void logArchiveToggle(boolean userTurnedOn) {
if (userTurnedOn) {
Logger.get(getContext())
.logImpression(DialerImpression.Type.VVM_USER_TURNED_ARCHIVE_ON_FROM_SETTINGS);
} else {
Logger.get(getContext())
.logImpression(DialerImpression.Type.VVM_USER_TURNED_ARCHIVE_OFF_FROM_SETTINGS);
}
}
@Override
public void onActivationStateChanged(PhoneAccountHandle phoneAccountHandle, boolean isActivated) {
if (this.phoneAccountHandle.equals(phoneAccountHandle)) {
updateChangePin();
}
}
private Intent getNotificationSettingsIntent() {
String channelId =
NotificationChannelManager.getVoicemailChannelId(getContext(), phoneAccountHandle);
return new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
.putExtra(Settings.EXTRA_CHANNEL_ID, channelId)
.putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName());
}
}