blob: 9f39db12952bde28ad7a12d43daf438e31a4ea25 [file] [log] [blame]
/*
* 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.phone.vvm.omtp;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import com.android.phone.vvm.omtp.sms.OmtpCvvmMessageSender;
import com.android.phone.vvm.omtp.sms.OmtpMessageSender;
import com.android.phone.vvm.omtp.sms.OmtpStandardMessageSender;
/**
* Handle activation and deactivation of a visual voicemail source. This class is necessary to
* retrieve carrier vvm configuration details before sending the appropriate texts.
*/
public class OmtpVvmCarrierConfigHelper {
private static final String TAG = "OmtpVvmCarrierConfigHelper";
private Context mContext;
private int mSubId;
private PersistableBundle mCarrierConfig;
private String mVvmType;
public OmtpVvmCarrierConfigHelper(Context context, int subId) {
mContext = context;
mSubId = subId;
mCarrierConfig = getCarrierConfig();
mVvmType = getVvmType();
}
public String getVvmType() {
if (mCarrierConfig == null) {
return null;
}
return mCarrierConfig.getString(
CarrierConfigManager.KEY_VVM_TYPE_STRING, null);
}
public String getCarrierVvmPackageName() {
if (mCarrierConfig == null) {
return null;
}
return mCarrierConfig.getString(
CarrierConfigManager.KEY_CARRIER_VVM_PACKAGE_NAME_STRING, null);
}
public boolean isOmtpVvmType() {
return (TelephonyManager.VVM_TYPE_OMTP.equals(mVvmType) ||
TelephonyManager.VVM_TYPE_CVVM.equals(mVvmType));
}
/**
* For checking upon sim insertion whether visual voicemail should be enabled. This method does
* so by checking if the carrier's voicemail app is installed.
*/
public boolean isEnabledByDefault() {
String packageName = mCarrierConfig.getString(
CarrierConfigManager.KEY_CARRIER_VVM_PACKAGE_NAME_STRING);
if (packageName == null) {
return true;
}
try {
mContext.getPackageManager().getPackageInfo(packageName, 0);
return false;
} catch (NameNotFoundException e) {
return true;
}
}
public void startActivation() {
OmtpMessageSender messageSender = getMessageSender();
if (messageSender != null) {
Log.i(TAG, "Requesting VVM activation for subId: " + mSubId);
messageSender.requestVvmActivation(null);
}
}
public void startDeactivation() {
OmtpMessageSender messageSender = getMessageSender();
if (messageSender != null) {
Log.i(TAG, "Requesting VVM deactivation for subId: " + mSubId);
messageSender.requestVvmDeactivation(null);
}
}
private PersistableBundle getCarrierConfig() {
if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
Log.w(TAG, "Invalid subscriptionId or subscriptionId not provided in intent.");
return null;
}
CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
if (carrierConfigManager == null) {
Log.w(TAG, "No carrier config service found.");
return null;
}
return carrierConfigManager.getConfigForSubId(mSubId);
}
private OmtpMessageSender getMessageSender() {
if (mCarrierConfig == null) {
Log.w(TAG, "Empty carrier config.");
return null;
}
int applicationPort = mCarrierConfig.getInt(
CarrierConfigManager.KEY_VVM_PORT_NUMBER_INT, 0);
String destinationNumber = mCarrierConfig.getString(
CarrierConfigManager.KEY_VVM_DESTINATION_NUMBER_STRING);
if (TextUtils.isEmpty(destinationNumber)) {
Log.w(TAG, "No destination number for this carrier.");
return null;
}
OmtpMessageSender messageSender = null;
SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(mSubId);
switch (mVvmType) {
case TelephonyManager.VVM_TYPE_OMTP:
messageSender = new OmtpStandardMessageSender(smsManager, (short) applicationPort,
destinationNumber, null, OmtpConstants.PROTOCOL_VERSION1_1, null);
break;
case TelephonyManager.VVM_TYPE_CVVM:
messageSender = new OmtpCvvmMessageSender(smsManager, (short) applicationPort,
destinationNumber);
break;
default:
Log.w(TAG, "Unexpected visual voicemail type: " + mVvmType);
}
return messageSender;
}
}