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