1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.voicemail.impl; 18 19 import android.app.PendingIntent; 20 import android.content.Context; 21 import android.telecom.PhoneAccountHandle; 22 import android.telephony.TelephonyManager; 23 import android.telephony.VisualVoicemailService; 24 import android.telephony.VisualVoicemailSmsFilterSettings; 25 import com.android.dialer.common.LogUtil; 26 import java.lang.reflect.Method; 27 28 /** Handles {@link TelephonyManager} API changes in experimental SDK */ 29 public class TelephonyMangerCompat { 30 /** Moved from VisualVoicemailService to TelephonyManager */ sendVisualVoicemailSms( Context context, PhoneAccountHandle phoneAccountHandle, String number, int port, String text, PendingIntent sentIntent)31 public static String sendVisualVoicemailSms( 32 Context context, 33 PhoneAccountHandle phoneAccountHandle, 34 String number, 35 int port, 36 String text, 37 PendingIntent sentIntent) { 38 try { 39 Method method = 40 TelephonyManager.class.getMethod( 41 "sendVisualVoicemailSms", String.class, int.class, String.class, PendingIntent.class); 42 try { 43 LogUtil.i("TelephonyMangerCompat.sendVisualVoicemailSms", "using TelephonyManager"); 44 TelephonyManager telephonyManager = 45 context 46 .getSystemService(TelephonyManager.class) 47 .createForPhoneAccountHandle(phoneAccountHandle); 48 return (String) method.invoke(telephonyManager, number, port, text, sentIntent); 49 } catch (ReflectiveOperationException e) { 50 throw new RuntimeException(e); 51 } 52 } catch (NoSuchMethodException e) { 53 // Do nothing, try the next version. 54 } 55 56 try { 57 LogUtil.i("TelephonyMangerCompat.sendVisualVoicemailSms", "using VisualVoicemailService"); 58 Method method = 59 VisualVoicemailService.class.getMethod( 60 "sendVisualVoicemailSms", 61 Context.class, 62 PhoneAccountHandle.class, 63 String.class, 64 short.class, 65 String.class, 66 PendingIntent.class); 67 return (String) 68 method.invoke(null, context, phoneAccountHandle, number, (short) port, text, sentIntent); 69 70 } catch (ReflectiveOperationException e) { 71 throw new RuntimeException(e); 72 } 73 } 74 75 /** Moved from VisualVoicemailService to TelephonyManager */ setVisualVoicemailSmsFilterSettings( Context context, PhoneAccountHandle phoneAccountHandle, VisualVoicemailSmsFilterSettings settings)76 public static String setVisualVoicemailSmsFilterSettings( 77 Context context, 78 PhoneAccountHandle phoneAccountHandle, 79 VisualVoicemailSmsFilterSettings settings) { 80 try { 81 Method method = 82 TelephonyManager.class.getMethod( 83 "setVisualVoicemailSmsFilterSettings", VisualVoicemailSmsFilterSettings.class); 84 try { 85 LogUtil.i( 86 "TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings", "using TelephonyManager"); 87 TelephonyManager telephonyManager = 88 context 89 .getSystemService(TelephonyManager.class) 90 .createForPhoneAccountHandle(phoneAccountHandle); 91 return (String) method.invoke(telephonyManager, settings); 92 } catch (ReflectiveOperationException e) { 93 throw new RuntimeException(e); 94 } 95 } catch (NoSuchMethodException e) { 96 // Do nothing, try the next version. 97 } 98 99 try { 100 LogUtil.i( 101 "TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings", 102 "using VisualVoicemailService"); 103 Method method = 104 VisualVoicemailService.class.getMethod( 105 "setSmsFilterSettings", 106 Context.class, 107 PhoneAccountHandle.class, 108 VisualVoicemailSmsFilterSettings.class); 109 return (String) method.invoke(null, context, phoneAccountHandle, settings); 110 111 } catch (ReflectiveOperationException e) { 112 throw new RuntimeException(e); 113 } 114 } 115 } 116