1fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville/*
2fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Copyright (C) 2014 The Android Open Source Project
3fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville *
4fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * you may not use this file except in compliance with the License.
6fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * You may obtain a copy of the License at
7fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville *
8fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville *
10fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Unless required by applicable law or agreed to in writing, software
11fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * See the License for the specific language governing permissions and
14fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * limitations under the License.
15fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */
16fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
17fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savillepackage android.telephony;
18fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
19fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.os.Bundle;
20fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.os.Parcel;
21fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.os.Parcelable;
22fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savilleimport android.telephony.Rlog;
23fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
24fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville/**
25fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * Contains LTE network state related information.
26fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville *
27fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville * @hide
28fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville */
29fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Savillepublic final class VoLteServiceState implements Parcelable {
30fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
31fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private static final String LOG_TAG = "VoLteServiceState";
32fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private static final boolean DBG = false;
33fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
34fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    //Use int max, as -1 is a valid value in signal strength
35fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int INVALID = 0x7FFFFFFF;
36fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
37fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int NOT_SUPPORTED = 0;
38fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int SUPPORTED = 1;
39fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
40fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    // Single Radio Voice Call Continuity(SRVCC) progress state
41fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int HANDOVER_STARTED   = 0;
42fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int HANDOVER_COMPLETED = 1;
43fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int HANDOVER_FAILED    = 2;
44fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final int HANDOVER_CANCELED  = 3;
45fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
46fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private int mSrvccState;
47fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
48fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
49fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Create a new VoLteServiceState from a intent notifier Bundle
50fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
51fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * This method is used by PhoneStateIntentReceiver and maybe by
52fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * external applications.
53fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
54fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @param m Bundle from intent notifier
55fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @return newly created VoLteServiceState
56fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
57fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
58fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
59fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static VoLteServiceState newFromBundle(Bundle m) {
60fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        VoLteServiceState ret;
61fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        ret = new VoLteServiceState();
62fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        ret.setFromNotifierBundle(m);
63fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return ret;
64fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
65fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
66fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
67fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Empty constructor
68fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
69fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
70fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
71fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public VoLteServiceState() {
72fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        initialize();
73fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
74fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
75fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
76fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Constructor
77fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
78fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
79fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
80fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public VoLteServiceState(int srvccState) {
81fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        initialize();
82fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
83fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        mSrvccState = srvccState;
84fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
85fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
86fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
87fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Copy constructors
88fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
89fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @param s Source VoLteServiceState
90fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
91fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
92fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
93fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public VoLteServiceState(VoLteServiceState s) {
94fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        copyFrom(s);
95fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
96fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
97fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
98fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Initialize values to defaults.
99fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
100fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
101fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
102fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private void initialize() {
103fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        mSrvccState = INVALID;
104fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
105fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
106fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
107fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
108fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
109fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    protected void copyFrom(VoLteServiceState s) {
110fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        mSrvccState = s.mSrvccState;
111fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
112fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
113fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
114fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Construct a VoLteServiceState object from the given parcel.
115fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
116fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
117fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
118fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public VoLteServiceState(Parcel in) {
119fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        if (DBG) log("Size of VoLteServiceState parcel:" + in.dataSize());
120fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
121fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        mSrvccState = in.readInt();
122fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
123fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
124fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
125fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * {@link Parcelable#writeToParcel}
126fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
127fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public void writeToParcel(Parcel out, int flags) {
128fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        out.writeInt(mSrvccState);
129fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
130fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
131fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
132fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * {@link Parcelable#describeContents}
133fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
134fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public int describeContents() {
135fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return 0;
136fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
137fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
138fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
139fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * {@link Parcelable.Creator}
140fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
141fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
142fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
143fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public static final Parcelable.Creator<VoLteServiceState> CREATOR = new Parcelable.Creator() {
144fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        public VoLteServiceState createFromParcel(Parcel in) {
145fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville            return new VoLteServiceState(in);
146fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        }
147fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
148fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        public VoLteServiceState[] newArray(int size) {
149fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville            return new VoLteServiceState[size];
150fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        }
151fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    };
152fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
153fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
154fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Validate the individual fields as per the range
155fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * specified in ril.h
156fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Set to invalid any field that is not in the valid range
157fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
158fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @return
159fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *      Valid values for all fields
160fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
161fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
162fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public void validateInput() {
163fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
164fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
165fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public int hashCode() {
166fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        int primeNum = 31;
167fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return ((mSrvccState * primeNum));
168fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
169fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
170fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
171fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @return true if the LTE network states are the same
172fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
173fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    @Override
174fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public boolean equals (Object o) {
175fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        VoLteServiceState s;
176fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
177fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        try {
178fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville            s = (VoLteServiceState) o;
179fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        } catch (ClassCastException ex) {
180fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville            return false;
181fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        }
182fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
183fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        if (o == null) {
184fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville            return false;
185fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        }
186fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
187fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return (mSrvccState == s.mSrvccState);
188fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
189fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
190fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
191fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @return string representation.
192fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
193fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    @Override
194fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public String toString() {
195fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return ("VoLteServiceState:"
196fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville                + " " + mSrvccState);
197fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
198fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
199fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
200fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Set VoLteServiceState based on intent notifier map
201fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
202fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @param m intent notifier map
203fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
204fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
205fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private void setFromNotifierBundle(Bundle m) {
206fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        mSrvccState = m.getInt("mSrvccState");
207fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
208fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
209fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
210fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * Set intent notifier Bundle based on VoLteServiceState
211fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     *
212fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @param m intent notifier Bundle
213fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * @hide
214fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
215fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public void fillInNotifierBundle(Bundle m) {
216fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        m.putInt("mSrvccState", mSrvccState);
217fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
218fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
219fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    public int getSrvccState() {
220fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        return mSrvccState;
221fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
222fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
223fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    /**
224fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     * log
225fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville     */
226fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    private static void log(String s) {
227fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        Rlog.w(LOG_TAG, s);
228fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    }
229fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville}
230