blob: ac0df6fabcad5d5a0f43f67df7a859b7bcac51a9 [file] [log] [blame]
/**
* Copyright (C) 2014 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.voicemailomtp.settings;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import com.android.voicemailomtp.OmtpConstants;
import com.android.voicemailomtp.OmtpVvmCarrierConfigHelper;
import com.android.voicemailomtp.R;
import com.android.voicemailomtp.SubscriptionInfoHelper;
import com.android.voicemailomtp.VisualVoicemailPreferences;
public class VoicemailSettingsActivity extends PreferenceActivity implements
Preference.OnPreferenceChangeListener {
private static final String LOG_TAG = VoicemailSettingsActivity.class.getSimpleName();
private static final boolean DBG = true;
/**
* Intent action to bring up Voicemail Provider settings
* DO NOT RENAME. There are existing apps which use this intent value.
*/
public static final String ACTION_ADD_VOICEMAIL =
"com.android.voicemailomtp.CallFeaturesSetting.ADD_VOICEMAIL";
/**
* Intent action to bring up the {@code VoicemailSettingsActivity}.
* DO NOT RENAME. There are existing apps which use this intent value.
*/
public static final String ACTION_CONFIGURE_VOICEMAIL =
"com.android.voicemailomtp.CallFeaturesSetting.CONFIGURE_VOICEMAIL";
// Extra put in the return from VM provider config containing voicemail number to set
public static final String VM_NUMBER_EXTRA = "com.android.voicemailomtp.VoicemailNumber";
// Extra put in the return from VM provider config containing call forwarding number to set
public static final String FWD_NUMBER_EXTRA = "com.android.voicemailomtp.ForwardingNumber";
// Extra put in the return from VM provider config containing call forwarding number to set
public static final String FWD_NUMBER_TIME_EXTRA = "com.android.voicemailomtp.ForwardingNumberTime";
// If the VM provider returns non null value in this extra we will force the user to
// choose another VM provider
public static final String SIGNOUT_EXTRA = "com.android.voicemailomtp.Signout";
/**
* String Extra put into ACTION_ADD_VOICEMAIL call to indicate which provider should be hidden
* in the list of providers presented to the user. This allows a provider which is being
* disabled (e.g. GV user logging out) to force the user to pick some other provider.
*/
public static final String IGNORE_PROVIDER_EXTRA = "com.android.voicemailomtp.ProviderToIgnore";
/**
* String Extra put into ACTION_ADD_VOICEMAIL to indicate that the voicemail setup screen should
* be opened.
*/
public static final String SETUP_VOICEMAIL_EXTRA = "com.android.voicemailomtp.SetupVoicemail";
/** Event for Async voicemail change call */
private static final int EVENT_VOICEMAIL_CHANGED = 500;
private static final int EVENT_FORWARDING_CHANGED = 501;
private static final int EVENT_FORWARDING_GET_COMPLETED = 502;
/** Handle to voicemail pref */
private static final int VOICEMAIL_PREF_ID = 1;
private static final int VOICEMAIL_PROVIDER_CFG_ID = 2;
/**
* Used to indicate that the voicemail preference should be shown.
*/
private boolean mShowVoicemailPreference = false;
private int mSubId;
private PhoneAccountHandle mPhoneAccountHandle;
private SubscriptionInfoHelper mSubscriptionInfoHelper;
private OmtpVvmCarrierConfigHelper mOmtpVvmCarrierConfigHelper;
private SwitchPreference mVoicemailVisualVoicemail;
private Preference mVoicemailChangePinPreference;
//*********************************************************************************************
// Preference Activity Methods
//*********************************************************************************************
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Show the voicemail preference in onResume if the calling intent specifies the
// ACTION_ADD_VOICEMAIL action.
mShowVoicemailPreference = (icicle == null) &&
TextUtils.equals(getIntent().getAction(), ACTION_ADD_VOICEMAIL);
mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent());
mSubscriptionInfoHelper.setActionBarTitle(
getActionBar(), getResources(), R.string.voicemail_settings_with_label);
mSubId = mSubscriptionInfoHelper.getSubId();
// TODO: scrap this activity.
/*
mPhoneAccountHandle = PhoneAccountHandleConverter
.fromSubId(this, mSubId);
mOmtpVvmCarrierConfigHelper = new OmtpVvmCarrierConfigHelper(
this, mSubId);
*/
}
@Override
protected void onResume() {
super.onResume();
PreferenceScreen preferenceScreen = getPreferenceScreen();
if (preferenceScreen != null) {
preferenceScreen.removeAll();
}
addPreferencesFromResource(R.xml.voicemail_settings);
PreferenceScreen prefSet = getPreferenceScreen();
mVoicemailVisualVoicemail = (SwitchPreference) findPreference(
getResources().getString(R.string.voicemail_visual_voicemail_key));
mVoicemailChangePinPreference = findPreference(
getResources().getString(R.string.voicemail_change_pin_key));
Intent changePinIntent = new Intent(new Intent(this, VoicemailChangePinActivity.class));
changePinIntent.putExtra(VoicemailChangePinActivity.EXTRA_PHONE_ACCOUNT_HANDLE,
mPhoneAccountHandle);
mVoicemailChangePinPreference.setIntent(changePinIntent);
if (VoicemailChangePinActivity.isDefaultOldPinSet(this, mPhoneAccountHandle)) {
mVoicemailChangePinPreference.setTitle(R.string.voicemail_set_pin_dialog_title);
} else {
mVoicemailChangePinPreference.setTitle(R.string.voicemail_change_pin_dialog_title);
}
if (mOmtpVvmCarrierConfigHelper.isValid()) {
mVoicemailVisualVoicemail.setOnPreferenceChangeListener(this);
mVoicemailVisualVoicemail.setChecked(
VisualVoicemailSettingsUtil.isEnabled(this, mPhoneAccountHandle));
if (!isVisualVoicemailActivated()) {
prefSet.removePreference(mVoicemailChangePinPreference);
}
} else {
prefSet.removePreference(mVoicemailVisualVoicemail);
prefSet.removePreference(mVoicemailChangePinPreference);
}
}
@Override
public void onPause() {
super.onPause();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* 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) {
if (DBG) log("onPreferenceChange: \"" + preference + "\" changed to \"" + objValue + "\"");
if (preference.getKey().equals(mVoicemailVisualVoicemail.getKey())) {
boolean isEnabled = (boolean) objValue;
VisualVoicemailSettingsUtil
.setEnabled(this, mPhoneAccountHandle, isEnabled);
PreferenceScreen prefSet = getPreferenceScreen();
if (isVisualVoicemailActivated()) {
prefSet.addPreference(mVoicemailChangePinPreference);
} else {
prefSet.removePreference(mVoicemailChangePinPreference);
}
}
// Always let the preference setting proceed.
return true;
}
private boolean isVisualVoicemailActivated() {
if (!VisualVoicemailSettingsUtil.isEnabled(this, mPhoneAccountHandle)) {
return false;
}
VisualVoicemailPreferences preferences = new VisualVoicemailPreferences(this,
mPhoneAccountHandle);
return preferences.getString(OmtpConstants.SERVER_ADDRESS, null) != null;
}
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
}