/* * 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; } }