1 /** 2 * Copyright (C) 2014 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.phone.settings; 18 19 import android.telephony.PhoneNumberUtils; 20 21 import com.android.internal.telephony.CallForwardInfo; 22 import com.android.internal.telephony.CommandsInterface; 23 24 import java.util.Arrays; 25 26 /** 27 * Settings for a voicemail provider, including any conditional forwarding information. 28 */ 29 public class VoicemailProviderSettings { 30 31 // If no forwarding is set, leave the forwarding number unchanged from its current value. 32 public static final CallForwardInfo[] NO_FORWARDING = null; 33 34 /** 35 * Reasons for the forwarding settings we are going to save. 36 */ 37 public static final int [] FORWARDING_SETTINGS_REASONS = new int[] { 38 CommandsInterface.CF_REASON_UNCONDITIONAL, 39 CommandsInterface.CF_REASON_BUSY, 40 CommandsInterface.CF_REASON_NO_REPLY, 41 CommandsInterface.CF_REASON_NOT_REACHABLE 42 }; 43 44 private String mVoicemailNumber; 45 private CallForwardInfo[] mForwardingSettings; 46 47 /** 48 * Constructs settings object, setting all conditional forwarding to the specified number 49 */ VoicemailProviderSettings( String voicemailNumber, String forwardingNumber, int timeSeconds)50 public VoicemailProviderSettings( 51 String voicemailNumber, String forwardingNumber, int timeSeconds) { 52 mVoicemailNumber = voicemailNumber; 53 if (forwardingNumber == null || forwardingNumber.length() == 0) { 54 mForwardingSettings = NO_FORWARDING; 55 } else { 56 mForwardingSettings = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length]; 57 for (int i = 0; i < mForwardingSettings.length; i++) { 58 CallForwardInfo fi = new CallForwardInfo(); 59 mForwardingSettings[i] = fi; 60 fi.reason = FORWARDING_SETTINGS_REASONS[i]; 61 fi.status = (fi.reason == CommandsInterface.CF_REASON_UNCONDITIONAL) ? 0 : 1; 62 fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 63 fi.toa = PhoneNumberUtils.TOA_International; 64 fi.number = forwardingNumber; 65 fi.timeSeconds = timeSeconds; 66 } 67 } 68 } 69 VoicemailProviderSettings(String voicemailNumber, CallForwardInfo[] infos)70 public VoicemailProviderSettings(String voicemailNumber, CallForwardInfo[] infos) { 71 mVoicemailNumber = voicemailNumber; 72 mForwardingSettings = infos; 73 } 74 75 @Override equals(Object o)76 public boolean equals(Object o) { 77 if (o == null) { 78 return false; 79 } 80 if (!(o instanceof VoicemailProviderSettings)) { 81 return false; 82 } 83 84 final VoicemailProviderSettings v = (VoicemailProviderSettings) o; 85 return ((mVoicemailNumber == null && v.getVoicemailNumber() == null) 86 || (mVoicemailNumber != null && mVoicemailNumber.equals(v.getVoicemailNumber())) 87 && forwardingSettingsEqual(mForwardingSettings, v.getForwardingSettings())); 88 } 89 90 @Override toString()91 public String toString() { 92 return mVoicemailNumber + ((mForwardingSettings == null) ? "" 93 : ", " + Arrays.toString(mForwardingSettings)); 94 } 95 getVoicemailNumber()96 public String getVoicemailNumber() { 97 return mVoicemailNumber; 98 } 99 getForwardingSettings()100 public CallForwardInfo[] getForwardingSettings() { 101 return mForwardingSettings; 102 } 103 forwardingSettingsEqual(CallForwardInfo[] infos1, CallForwardInfo[] infos2)104 private boolean forwardingSettingsEqual(CallForwardInfo[] infos1, CallForwardInfo[] infos2) { 105 if (infos1 == infos2) { 106 return true; 107 } 108 if (infos1 == null || infos2 == null) { 109 return false; 110 } 111 if (infos1.length != infos2.length) { 112 return false; 113 } 114 115 for (int i = 0; i < infos1.length; i++) { 116 CallForwardInfo i1 = infos1[i]; 117 CallForwardInfo i2 = infos2[i]; 118 if (i1.status != i2.status 119 || i1.reason != i2.reason 120 || i1.serviceClass != i2.serviceClass 121 || i1.toa != i2.toa 122 || i1.number != i2.number 123 || i1.timeSeconds != i2.timeSeconds) { 124 return false; 125 } 126 } 127 return true; 128 } 129 } 130