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