Merge change 2399 into donut
* changes: Motorola additions for CDMA support without CdmaSuppConnTracker
This commit is contained in:
@@ -151,6 +151,9 @@ public class CallLog {
|
|||||||
int presentation, int callType, long start, int duration) {
|
int presentation, int callType, long start, int duration) {
|
||||||
final ContentResolver resolver = context.getContentResolver();
|
final ContentResolver resolver = context.getContentResolver();
|
||||||
|
|
||||||
|
// TODO(Moto): Which is correct: original code, this only changes the
|
||||||
|
// number if the number is empty and never changes the caller info name.
|
||||||
|
if (false) {
|
||||||
if (TextUtils.isEmpty(number)) {
|
if (TextUtils.isEmpty(number)) {
|
||||||
if (presentation == Connection.PRESENTATION_RESTRICTED) {
|
if (presentation == Connection.PRESENTATION_RESTRICTED) {
|
||||||
number = CallerInfo.PRIVATE_NUMBER;
|
number = CallerInfo.PRIVATE_NUMBER;
|
||||||
@@ -160,7 +163,22 @@ public class CallLog {
|
|||||||
number = CallerInfo.UNKNOWN_NUMBER;
|
number = CallerInfo.UNKNOWN_NUMBER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// NEWCODE: From Motorola
|
||||||
|
|
||||||
|
//If this is a private number then set the number to Private, otherwise check
|
||||||
|
//if the number field is empty and set the number to Unavailable
|
||||||
|
if (presentation == Connection.PRESENTATION_RESTRICTED) {
|
||||||
|
number = CallerInfo.PRIVATE_NUMBER;
|
||||||
|
ci.name = "";
|
||||||
|
} else if (presentation == Connection.PRESENTATION_PAYPHONE) {
|
||||||
|
number = CallerInfo.PAYPHONE_NUMBER;
|
||||||
|
ci.name = "";
|
||||||
|
} else if (TextUtils.isEmpty(number) || presentation == Connection.PRESENTATION_UNKNOWN) {
|
||||||
|
number = CallerInfo.UNKNOWN_NUMBER;
|
||||||
|
ci.name = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
ContentValues values = new ContentValues(5);
|
ContentValues values = new ContentValues(5);
|
||||||
|
|
||||||
values.put(NUMBER, number);
|
values.put(NUMBER, number);
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class DialerKeyListener extends NumberKeyListener
|
|||||||
*/
|
*/
|
||||||
public static final char[] CHARACTERS = new char[] {
|
public static final char[] CHARACTERS = new char[] {
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*',
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*',
|
||||||
'+', '-', '(', ')', ',', '/', 'N', '.', ' '
|
'+', '-', '(', ')', ',', '/', 'N', '.', ' ', ';'
|
||||||
};
|
};
|
||||||
|
|
||||||
private static DialerKeyListener sInstance;
|
private static DialerKeyListener sInstance;
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ package android.media;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides methods to play DTMF tones (ITU-T Recommendation Q.23),
|
* This class provides methods to play DTMF tones (ITU-T Recommendation Q.23),
|
||||||
* call supervisory tones (3GPP TS 22.001, CEPT) and proprietary tones (3GPP TS 31.111).
|
* call supervisory tones (3GPP TS 22.001, CEPT) and proprietary tones (3GPP TS 31.111).
|
||||||
* Depending on call state and routing options, tones are mixed to the downlink audio
|
* Depending on call state and routing options, tones are mixed to the downlink audio
|
||||||
* or output to the speaker phone or headset.
|
* or output to the speaker phone or headset.
|
||||||
* This API is not for generating tones over the uplink audio path.
|
* This API is not for generating tones over the uplink audio path.
|
||||||
*/
|
*/
|
||||||
public class ToneGenerator
|
public class ToneGenerator
|
||||||
{
|
{
|
||||||
@@ -33,99 +33,99 @@ public class ToneGenerator
|
|||||||
* List of all available tones: These constants must be kept consistant with
|
* List of all available tones: These constants must be kept consistant with
|
||||||
* the enum in ToneGenerator C++ class. */
|
* the enum in ToneGenerator C++ class. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 0: 1336Hz, 941Hz, continuous</p>
|
* DTMF tone for key 0: 1336Hz, 941Hz, continuous</p>
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_0 = 0;
|
public static final int TONE_DTMF_0 = 0;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 1: 1209Hz, 697Hz, continuous
|
* DTMF tone for key 1: 1209Hz, 697Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_1 = 1;
|
public static final int TONE_DTMF_1 = 1;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 2: 1336Hz, 697Hz, continuous
|
* DTMF tone for key 2: 1336Hz, 697Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_2 = 2;
|
public static final int TONE_DTMF_2 = 2;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 3: 1477Hz, 697Hz, continuous
|
* DTMF tone for key 3: 1477Hz, 697Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_3 = 3;
|
public static final int TONE_DTMF_3 = 3;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 4: 1209Hz, 770Hz, continuous
|
* DTMF tone for key 4: 1209Hz, 770Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_4 = 4;
|
public static final int TONE_DTMF_4 = 4;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 5: 1336Hz, 770Hz, continuous
|
* DTMF tone for key 5: 1336Hz, 770Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_5 = 5;
|
public static final int TONE_DTMF_5 = 5;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 6: 1477Hz, 770Hz, continuous
|
* DTMF tone for key 6: 1477Hz, 770Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_6 = 6;
|
public static final int TONE_DTMF_6 = 6;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 7: 1209Hz, 852Hz, continuous
|
* DTMF tone for key 7: 1209Hz, 852Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_7 = 7;
|
public static final int TONE_DTMF_7 = 7;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 8: 1336Hz, 852Hz, continuous
|
* DTMF tone for key 8: 1336Hz, 852Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_8 = 8;
|
public static final int TONE_DTMF_8 = 8;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key 9: 1477Hz, 852Hz, continuous
|
* DTMF tone for key 9: 1477Hz, 852Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_9 = 9;
|
public static final int TONE_DTMF_9 = 9;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key *: 1209Hz, 941Hz, continuous
|
* DTMF tone for key *: 1209Hz, 941Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_S = 10;
|
public static final int TONE_DTMF_S = 10;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key #: 1477Hz, 941Hz, continuous
|
* DTMF tone for key #: 1477Hz, 941Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_P = 11;
|
public static final int TONE_DTMF_P = 11;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key A: 1633Hz, 697Hz, continuous
|
* DTMF tone for key A: 1633Hz, 697Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_A = 12;
|
public static final int TONE_DTMF_A = 12;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key B: 1633Hz, 770Hz, continuous
|
* DTMF tone for key B: 1633Hz, 770Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_B = 13;
|
public static final int TONE_DTMF_B = 13;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key C: 1633Hz, 852Hz, continuous
|
* DTMF tone for key C: 1633Hz, 852Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_C = 14;
|
public static final int TONE_DTMF_C = 14;
|
||||||
/**
|
/**
|
||||||
* DTMF tone for key D: 1633Hz, 941Hz, continuous
|
* DTMF tone for key D: 1633Hz, 941Hz, continuous
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_DTMF_D = 15;
|
public static final int TONE_DTMF_D = 15;
|
||||||
@@ -151,7 +151,7 @@ public class ToneGenerator
|
|||||||
* Call supervisory tone, Congestion:
|
* Call supervisory tone, Congestion:
|
||||||
* CEPT, JAPAN: 425Hz, 200ms ON, 200ms OFF...
|
* CEPT, JAPAN: 425Hz, 200ms ON, 200ms OFF...
|
||||||
* ANSI (IS-95): 480Hz+620Hz, 250ms ON, 250ms OFF...
|
* ANSI (IS-95): 480Hz+620Hz, 250ms ON, 250ms OFF...
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_CONGESTION = 18;
|
public static final int TONE_SUP_CONGESTION = 18;
|
||||||
@@ -159,27 +159,28 @@ public class ToneGenerator
|
|||||||
* Call supervisory tone, Radio path acknowlegment :
|
* Call supervisory tone, Radio path acknowlegment :
|
||||||
* CEPT, ANSI: 425Hz, 200ms ON
|
* CEPT, ANSI: 425Hz, 200ms ON
|
||||||
* JAPAN: 400Hz, 1s ON, 2s OFF...
|
* JAPAN: 400Hz, 1s ON, 2s OFF...
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_RADIO_ACK = 19;
|
public static final int TONE_SUP_RADIO_ACK = 19;
|
||||||
/**
|
/**
|
||||||
* Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts
|
* Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_RADIO_NOTAVAIL = 20;
|
public static final int TONE_SUP_RADIO_NOTAVAIL = 20;
|
||||||
/**
|
/**
|
||||||
* Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF...
|
* Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF...
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_ERROR = 21;
|
public static final int TONE_SUP_ERROR = 21;
|
||||||
/**
|
/**
|
||||||
* Call supervisory tone, Call Waiting:
|
* Call supervisory tone, Call Waiting:
|
||||||
* CEPT, JAPAN: 425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...
|
* CEPT, JAPAN: 425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...
|
||||||
* ANSI (IS-95): 440 Hz, 300 ms ON, 9.7 s OFF, (100 ms ON, 100 ms OFF, 100 ms ON, 9.7s OFF ...)
|
* ANSI (IS-95): 440 Hz, 300 ms ON, 9.7 s OFF,
|
||||||
*
|
* (100 ms ON, 100 ms OFF, 100 ms ON, 9.7s OFF ...)
|
||||||
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_CALL_WAITING = 22;
|
public static final int TONE_SUP_CALL_WAITING = 22;
|
||||||
@@ -187,42 +188,43 @@ public class ToneGenerator
|
|||||||
* Call supervisory tone, Ring Tone:
|
* Call supervisory tone, Ring Tone:
|
||||||
* CEPT, JAPAN: 425Hz, 1s ON, 4s OFF...
|
* CEPT, JAPAN: 425Hz, 1s ON, 4s OFF...
|
||||||
* ANSI (IS-95): 440Hz + 480Hz, 2s ON, 4s OFF...
|
* ANSI (IS-95): 440Hz + 480Hz, 2s ON, 4s OFF...
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_RINGTONE = 23;
|
public static final int TONE_SUP_RINGTONE = 23;
|
||||||
/**
|
/**
|
||||||
* Proprietary tone, general beep: 400Hz+1200Hz, 35ms ON
|
* Proprietary tone, general beep: 400Hz+1200Hz, 35ms ON
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_PROP_BEEP = 24;
|
public static final int TONE_PROP_BEEP = 24;
|
||||||
/**
|
/**
|
||||||
* Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts
|
* Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_PROP_ACK = 25;
|
public static final int TONE_PROP_ACK = 25;
|
||||||
/**
|
/**
|
||||||
* Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON
|
* Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_PROP_NACK = 26;
|
public static final int TONE_PROP_NACK = 26;
|
||||||
/**
|
/**
|
||||||
* Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON
|
* Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_PROP_PROMPT = 27;
|
public static final int TONE_PROP_PROMPT = 27;
|
||||||
/**
|
/**
|
||||||
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
public static final int TONE_PROP_BEEP2 = 28;
|
public static final int TONE_PROP_BEEP2 = 28;
|
||||||
/**
|
/**
|
||||||
* Call supervisory tone (IS-95), intercept tone: alternating 440 Hz and 620 Hz tones, each on for 250 ms
|
* Call supervisory tone (IS-95), intercept tone: alternating 440 Hz and 620 Hz tones,
|
||||||
|
* each on for 250 ms
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
@@ -240,7 +242,8 @@ public class ToneGenerator
|
|||||||
*/
|
*/
|
||||||
public static final int TONE_SUP_CONGESTION_ABBREV = 31;
|
public static final int TONE_SUP_CONGESTION_ABBREV = 31;
|
||||||
/**
|
/**
|
||||||
* Call supervisory tone (IS-95), confirm tone: a 350 Hz tone added to a 440 Hz tone repeated 3 times in a 100 ms on, 100 ms off cycle
|
* Call supervisory tone (IS-95), confirm tone: a 350 Hz tone added to a 440 Hz tone
|
||||||
|
* repeated 3 times in a 100 ms on, 100 ms off cycle
|
||||||
*
|
*
|
||||||
* @see #ToneGenerator(int, int)
|
* @see #ToneGenerator(int, int)
|
||||||
*/
|
*/
|
||||||
@@ -253,6 +256,241 @@ public class ToneGenerator
|
|||||||
public static final int TONE_SUP_PIP = 33;
|
public static final int TONE_SUP_PIP = 33;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CDMA SPECIFIC TONES START
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** TODO(Moto): Change "Proprietary" below with an appropriate specification reference */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_DIAL_TONE_LITE = 34;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_REORDER = 36;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_ABBR_REORDER = 37;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_NETWORK_BUSY = 38;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_ANSWER = 39;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_NETWORK_CALLWAITING = 40;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_PIP = 41;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 42;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 43;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_SP_PRI = 44;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 45;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_RING_RING = 46;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 47;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 48;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
|
||||||
|
*
|
||||||
|
* @see #ToneGenerator(int, int)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 49;
|
||||||
|
|
||||||
|
// TODO(Moto): Need comments for each one and we need ToneGenerator.cpp/ToneGenerator.h
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_L = 50;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_L = 51;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_SS = 52;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_SS = 53;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_SS = 54;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_SSL = 55;
|
||||||
|
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_SSL = 56;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_SSL = 57;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_SS_2 = 58;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_SS_2 = 59;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_SS_2 = 60;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_SLS = 61;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_SLS = 62;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_SLS = 63;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_S_X4 = 64;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_S_X4 = 65;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_S_X4 = 66;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_PBX_L = 67;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_PBX_L = 68;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_PBX_L = 69;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_PBX_SS = 70;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_PBX_SS = 71;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_PBX_SS = 72;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_PBX_SSL = 73;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_PBX_SSL = 74;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_PBX_SSL = 75;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_PBX_SLS = 76;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_PBX_SLS = 77;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_PBX_SLS = 78;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_HIGH_PBX_S_X4 = 79;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_MED_PBX_S_X4 = 80;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_LOW_PBX_S_X4 = 81;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_INTERCEPT_ONE_SHOT = TONE_SUP_INTERCEPT_ABBREV;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_REORDER_ONE_SHOT = TONE_CDMA_ABBR_REORDER;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 82;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_ABBR_ALERT = 83;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_SIGNAL_OFF = 84;
|
||||||
|
/** @hide */
|
||||||
|
public static final int TONE_CDMA_INVALID = 85;
|
||||||
|
|
||||||
/** Maximum volume, for use with {@link #ToneGenerator(int,int)} */
|
/** Maximum volume, for use with {@link #ToneGenerator(int,int)} */
|
||||||
public static final int MAX_VOLUME = AudioSystem.MAX_VOLUME;
|
public static final int MAX_VOLUME = AudioSystem.MAX_VOLUME;
|
||||||
/** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */
|
/** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */
|
||||||
@@ -261,10 +499,10 @@ public class ToneGenerator
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* ToneGenerator class contructor specifying output stream type and volume.
|
* ToneGenerator class contructor specifying output stream type and volume.
|
||||||
*
|
*
|
||||||
* @param streamType The streame type used for tone playback (e.g. STREAM_MUSIC).
|
* @param streamType The streame type used for tone playback (e.g. STREAM_MUSIC).
|
||||||
* @param volume The volume of the tone, given in percentage of maximum volume (from 0-100).
|
* @param volume The volume of the tone, given in percentage of maximum volume (from 0-100).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public ToneGenerator(int streamType, int volume) {
|
public ToneGenerator(int streamType, int volume) {
|
||||||
native_setup(streamType, volume);
|
native_setup(streamType, volume);
|
||||||
@@ -272,7 +510,7 @@ public class ToneGenerator
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method starts the playback of a tone of the specified type.
|
* This method starts the playback of a tone of the specified type.
|
||||||
* only one tone can play at a time: if a tone is playing while this method is called,
|
* only one tone can play at a time: if a tone is playing while this method is called,
|
||||||
* this tone is stopped and replaced by the one requested.
|
* this tone is stopped and replaced by the one requested.
|
||||||
* @param toneType The type of tone generate chosen from the following list:
|
* @param toneType The type of tone generate chosen from the following list:
|
||||||
* <ul>
|
* <ul>
|
||||||
@@ -328,9 +566,10 @@ public class ToneGenerator
|
|||||||
private native final void native_setup(int streamType, int volume);
|
private native final void native_setup(int streamType, int volume);
|
||||||
|
|
||||||
private native final void native_finalize();
|
private native final void native_finalize();
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void finalize() { native_finalize(); }
|
protected void finalize() { native_finalize(); }
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
private int mNativeContext; // accessed by native methods
|
private int mNativeContext; // accessed by native methods
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,10 +54,11 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
protected RegistrantList mIccStatusChangedRegistrants = new RegistrantList();
|
protected RegistrantList mIccStatusChangedRegistrants = new RegistrantList();
|
||||||
protected RegistrantList mVoicePrivacyOnRegistrants = new RegistrantList();
|
protected RegistrantList mVoicePrivacyOnRegistrants = new RegistrantList();
|
||||||
protected RegistrantList mVoicePrivacyOffRegistrants = new RegistrantList();
|
protected RegistrantList mVoicePrivacyOffRegistrants = new RegistrantList();
|
||||||
protected RegistrantList mOtaSessionRegistrants = new RegistrantList();
|
|
||||||
protected RegistrantList mCallWaitingRegistrants = new RegistrantList();
|
|
||||||
protected RegistrantList mInformationRecordsRegistrants = new RegistrantList();
|
|
||||||
protected Registrant mUnsolOemHookRawRegistrant;
|
protected Registrant mUnsolOemHookRawRegistrant;
|
||||||
|
protected RegistrantList mOtaProvisionRegistrants = new RegistrantList();
|
||||||
|
protected RegistrantList mCallWaitingInfoRegistrants = new RegistrantList();
|
||||||
|
protected RegistrantList mDisplayInfoRegistrants = new RegistrantList();
|
||||||
|
protected RegistrantList mSignalInfoRegistrants = new RegistrantList();
|
||||||
protected Registrant mSMSRegistrant;
|
protected Registrant mSMSRegistrant;
|
||||||
protected Registrant mNITZTimeRegistrant;
|
protected Registrant mNITZTimeRegistrant;
|
||||||
protected Registrant mSignalStrengthRegistrant;
|
protected Registrant mSignalStrengthRegistrant;
|
||||||
@@ -464,6 +465,29 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
mRestrictedStateRegistrant.clear();
|
mRestrictedStateRegistrant.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerForDisplayInfo(Handler h, int what, Object obj) {
|
||||||
|
Registrant r = new Registrant (h, what, obj);
|
||||||
|
mDisplayInfoRegistrants.add(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForDisplayInfo(Handler h) {
|
||||||
|
mDisplayInfoRegistrants.remove(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCallWaitingInfo(Handler h, int what, Object obj) {
|
||||||
|
Registrant r = new Registrant (h, what, obj);
|
||||||
|
mCallWaitingInfoRegistrants.add(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCallWaitingInfo(Handler h) {
|
||||||
|
mCallWaitingInfoRegistrants.remove(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForSignalInfo(Handler h, int what, Object obj) {
|
||||||
|
Registrant r = new Registrant (h, what, obj);
|
||||||
|
mSignalInfoRegistrants.add(r);
|
||||||
|
}
|
||||||
|
|
||||||
public void setOnUnsolOemHookRaw(Handler h, int what, Object obj) {
|
public void setOnUnsolOemHookRaw(Handler h, int what, Object obj) {
|
||||||
mUnsolOemHookRawRegistrant = new Registrant (h, what, obj);
|
mUnsolOemHookRawRegistrant = new Registrant (h, what, obj);
|
||||||
}
|
}
|
||||||
@@ -472,32 +496,19 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
mUnsolOemHookRawRegistrant.clear();
|
mUnsolOemHookRawRegistrant.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForOtaSessionStatus(Handler h, int what, Object obj){
|
public void unregisterForSignalInfo(Handler h) {
|
||||||
|
mSignalInfoRegistrants.remove(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCdmaOtaProvision(Handler h,int what, Object obj){
|
||||||
Registrant r = new Registrant (h, what, obj);
|
Registrant r = new Registrant (h, what, obj);
|
||||||
mOtaSessionRegistrants.add(r);
|
mOtaProvisionRegistrants.add(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterForOtaSessionStatus(Handler h){
|
public void unregisterForCdmaOtaProvision(Handler h){
|
||||||
mOtaSessionRegistrants.remove(h);
|
mOtaProvisionRegistrants.remove(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForCdmaCallWaiting(Handler h, int what, Object obj){
|
|
||||||
Registrant r = new Registrant (h, what, obj);
|
|
||||||
mCallWaitingRegistrants.add(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForCdmaCallWaiting(Handler h){
|
|
||||||
mCallWaitingRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerCdmaInformationRecord(Handler h, int what, Object obj) {
|
|
||||||
Registrant r = new Registrant (h, what, obj);
|
|
||||||
mInformationRecordsRegistrants.add(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterCdmaInformationRecord(Handler h) {
|
|
||||||
mInformationRecordsRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
//***** Protected Methods
|
//***** Protected Methods
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public abstract class CallTracker extends Handler {
|
|||||||
protected static final int EVENT_CONFERENCE_RESULT = 11;
|
protected static final int EVENT_CONFERENCE_RESULT = 11;
|
||||||
protected static final int EVENT_SEPARATE_RESULT = 12;
|
protected static final int EVENT_SEPARATE_RESULT = 12;
|
||||||
protected static final int EVENT_ECT_RESULT = 13;
|
protected static final int EVENT_ECT_RESULT = 13;
|
||||||
|
protected static final int EVENT_EXIT_ECM_RESPONSE_CDMA = 14;
|
||||||
|
|
||||||
|
|
||||||
protected void pollCallsWhenSafe() {
|
protected void pollCallsWhenSafe() {
|
||||||
|
|||||||
@@ -70,6 +70,12 @@ public class CallerInfo {
|
|||||||
*/
|
*/
|
||||||
public String name;
|
public String name;
|
||||||
public String phoneNumber;
|
public String phoneNumber;
|
||||||
|
|
||||||
|
public String cnapName;
|
||||||
|
public int numberPresentation;
|
||||||
|
public int namePresentation;
|
||||||
|
public boolean contactExists;
|
||||||
|
|
||||||
public String phoneLabel;
|
public String phoneLabel;
|
||||||
/* Split up the phoneLabel into number type and label name */
|
/* Split up the phoneLabel into number type and label name */
|
||||||
public int numberType;
|
public int numberType;
|
||||||
@@ -118,6 +124,7 @@ public class CallerInfo {
|
|||||||
info.numberLabel = null;
|
info.numberLabel = null;
|
||||||
info.cachedPhoto = null;
|
info.cachedPhoto = null;
|
||||||
info.isCachedPhotoCurrent = false;
|
info.isCachedPhotoCurrent = false;
|
||||||
|
info.contactExists = false;
|
||||||
|
|
||||||
if (Config.LOGV) Log.v(TAG, "construct callerInfo from cursor");
|
if (Config.LOGV) Log.v(TAG, "construct callerInfo from cursor");
|
||||||
|
|
||||||
@@ -176,6 +183,7 @@ public class CallerInfo {
|
|||||||
columnIndex = cursor.getColumnIndex(People.SEND_TO_VOICEMAIL);
|
columnIndex = cursor.getColumnIndex(People.SEND_TO_VOICEMAIL);
|
||||||
info.shouldSendToVoicemail = (columnIndex != -1) &&
|
info.shouldSendToVoicemail = (columnIndex != -1) &&
|
||||||
((cursor.getInt(columnIndex)) == 1);
|
((cursor.getInt(columnIndex)) == 1);
|
||||||
|
info.contactExists = true;
|
||||||
}
|
}
|
||||||
cursor.close();
|
cursor.close();
|
||||||
}
|
}
|
||||||
@@ -303,4 +311,3 @@ public class CallerInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,201 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.internal.telephony;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO(Teleca): This class was poorly implemented and didn't
|
|
||||||
* follow the Android coding conventions. It is now more or less
|
|
||||||
* follows the conventions but there is still some work, see the
|
|
||||||
* TODO's.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
public class CdmaInformationRecord {
|
|
||||||
public int messageName;
|
|
||||||
|
|
||||||
public CdmaDisplayInfoRec displayInfoRec;
|
|
||||||
public CdmaNumberInfoRec numberInfoRec;
|
|
||||||
public CdmaSignalInfoRec signalInfoRec;
|
|
||||||
public CdmaRedirectingNumberInfoRec redirectingNumberInfoRec;
|
|
||||||
public CdmaLineControlInfoRec lineControlInfoRec;
|
|
||||||
public CdmaT53ClirInfoRec cdmaT53ClirInfoRec;
|
|
||||||
public CdmaT53AudioControlInfoRec cdmaT53AudioControlInfoRec;
|
|
||||||
|
|
||||||
public static final int RIL_CDMA_DISPLAY_INFO_REC = 0;
|
|
||||||
public static final int RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC = 1;
|
|
||||||
public static final int RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC = 2;
|
|
||||||
public static final int RIL_CDMA_CONNECTED_NUMBER_INFO_REC = 3;
|
|
||||||
public static final int RIL_CDMA_SIGNAL_INFO_REC = 4;
|
|
||||||
public static final int RIL_CDMA_REDIRECTING_NUMBER_INFO_REC = 5;
|
|
||||||
public static final int RIL_CDMA_LINE_CONTROL_INFO_REC = 6;
|
|
||||||
public static final int RIL_CDMA_EXTENDED_DISPLAY_INFO_REC = 7;
|
|
||||||
public static final int RIL_CDMA_T53_CLIR_INFO_REC = 8;
|
|
||||||
public static final int RIL_CDMA_T53_RELEASE_INFO_REC = 9;
|
|
||||||
public static final int RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC = 10;
|
|
||||||
|
|
||||||
public CdmaInformationRecord(int messageName) {
|
|
||||||
this.messageName = messageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void createDisplayInfo(int length, char buffer[]) {
|
|
||||||
displayInfoRec = new CdmaDisplayInfoRec(length, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createNumberInfo(int length, char buffer[]) {
|
|
||||||
numberInfoRec = new CdmaNumberInfoRec(length, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createSignalInfo(char buffer[]) {
|
|
||||||
signalInfoRec = new CdmaSignalInfoRec(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createRedirectingNumberInfo(int length, char buffer[], int reason) {
|
|
||||||
redirectingNumberInfoRec = new CdmaRedirectingNumberInfoRec(length, buffer, reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createLineControlInfo(char buffer[]) {
|
|
||||||
lineControlInfoRec = new CdmaLineControlInfoRec(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createT53ClirInfo(char buffer) {
|
|
||||||
cdmaT53ClirInfoRec = new CdmaT53ClirInfoRec(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createT53AudioControlInfo(char ul, char dl) {
|
|
||||||
cdmaT53AudioControlInfoRec = new CdmaT53AudioControlInfoRec(ul, dl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO(Teleca): Add comments for each class giving the
|
|
||||||
* document and section where the information is defined
|
|
||||||
* as shown CdmaSignalInfoRec. Also add a toString to
|
|
||||||
* each of these to ease debugging.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signal Information record from 3GPP2 C.S005 3.7.5.5
|
|
||||||
*/
|
|
||||||
public static class CdmaSignalInfoRec {
|
|
||||||
public boolean isPresent; /* non-zero if signal information record is present */
|
|
||||||
public int signalType;
|
|
||||||
public int alertPitch;
|
|
||||||
public int signalCode;
|
|
||||||
|
|
||||||
public CdmaSignalInfoRec() {}
|
|
||||||
|
|
||||||
public CdmaSignalInfoRec(char buffer[]) {
|
|
||||||
isPresent = buffer[0] == 1;
|
|
||||||
signalType = buffer[1];
|
|
||||||
alertPitch = buffer[2];
|
|
||||||
signalCode = buffer[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "CdmaSignalInfo: {" +
|
|
||||||
" isPresent: " + isPresent +
|
|
||||||
", signalType: " + signalType +
|
|
||||||
", alertPitch: " + alertPitch +
|
|
||||||
", signalCode: " + signalCode +
|
|
||||||
" }";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CdmaDisplayInfoRec {
|
|
||||||
public char alphaLen;
|
|
||||||
public char alphaBuf[];
|
|
||||||
|
|
||||||
public CdmaDisplayInfoRec(int length, char buffer[]) {
|
|
||||||
alphaLen = (char)length;
|
|
||||||
alphaBuf = new char[length];
|
|
||||||
for(int i = 0; i < length; i++)
|
|
||||||
alphaBuf[i] = buffer[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CdmaNumberInfoRec {
|
|
||||||
public int len;
|
|
||||||
public char buf[];
|
|
||||||
public char numberType;
|
|
||||||
public char numberPlan;
|
|
||||||
public char pi; // TODO(Teleca): poor name, no meaning
|
|
||||||
public char si; // TODO(Teleca): poor name
|
|
||||||
|
|
||||||
public CdmaNumberInfoRec(int length, char buffer[]) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
len = length;
|
|
||||||
buf = new char[length];
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
buf[i] = buffer[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
numberType = buffer[i++];
|
|
||||||
numberPlan = buffer[i++];
|
|
||||||
pi = buffer[i++];
|
|
||||||
si = buffer[i++];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CdmaRedirectingNumberInfoRec {
|
|
||||||
public static final int REASON_UNKNOWN = 0;
|
|
||||||
public static final int REASON_CALL_FORWARDING_BUSY = 1;
|
|
||||||
public static final int REASON_CALL_FORWARDING_NO_REPLY = 2;
|
|
||||||
public static final int REASON_CALLED_DTE_OUT_OF_ORDER = 9;
|
|
||||||
public static final int REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
|
|
||||||
public static final int REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
|
|
||||||
|
|
||||||
public CdmaNumberInfoRec numberInfoRec;
|
|
||||||
public int redirectingReason;
|
|
||||||
|
|
||||||
public CdmaRedirectingNumberInfoRec(int length, char buffer[], int reason) {
|
|
||||||
numberInfoRec = new CdmaNumberInfoRec(length, buffer);
|
|
||||||
redirectingReason = reason;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CdmaLineControlInfoRec {
|
|
||||||
public char lineCtrlPolarityIncluded;
|
|
||||||
public char lineCtrlToggle;
|
|
||||||
public char lineCtrlReverse;
|
|
||||||
public char lineCtrlPowerDenial;
|
|
||||||
|
|
||||||
CdmaLineControlInfoRec(char buffer[]) {
|
|
||||||
lineCtrlPolarityIncluded = buffer[0];
|
|
||||||
lineCtrlToggle = buffer[1];
|
|
||||||
lineCtrlReverse = buffer[2];
|
|
||||||
lineCtrlPowerDenial = buffer[3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(Teleca): A class for a single character, is this needed?
|
|
||||||
public static class CdmaT53ClirInfoRec {
|
|
||||||
public char cause;
|
|
||||||
|
|
||||||
public CdmaT53ClirInfoRec(char buffer) {
|
|
||||||
cause = buffer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CdmaT53AudioControlInfoRec {
|
|
||||||
public char uplink;
|
|
||||||
public char downlink;
|
|
||||||
|
|
||||||
public CdmaT53AudioControlInfoRec(char ul, char dl) {
|
|
||||||
uplink = ul;
|
|
||||||
downlink = dl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -240,24 +240,6 @@ public interface CommandsInterface {
|
|||||||
void registerForRUIMReady(Handler h, int what, Object obj);
|
void registerForRUIMReady(Handler h, int what, Object obj);
|
||||||
void unregisterForRUIMReady(Handler h);
|
void unregisterForRUIMReady(Handler h);
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers for the status of an OTASP/OTAPA session
|
|
||||||
*/
|
|
||||||
void registerForOtaSessionStatus(Handler h, int what, Object obj);
|
|
||||||
void unregisterForOtaSessionStatus(Handler h);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* register for Call waiting for CDMA
|
|
||||||
*/
|
|
||||||
void registerForCdmaCallWaiting(Handler h, int what, Object obj);
|
|
||||||
void unregisterForCdmaCallWaiting(Handler h);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers for CDMA information records
|
|
||||||
*/
|
|
||||||
void registerCdmaInformationRecord(Handler h, int what, Object obj);
|
|
||||||
void unregisterCdmaInformationRecord(Handler h);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unlike the register* methods, there's only one new SMS handler
|
* unlike the register* methods, there's only one new SMS handler
|
||||||
* if you need to unregister, you should also tell the radio to stop
|
* if you need to unregister, you should also tell the radio to stop
|
||||||
@@ -343,16 +325,6 @@ public interface CommandsInterface {
|
|||||||
void setOnIccSmsFull(Handler h, int what, Object obj);
|
void setOnIccSmsFull(Handler h, int what, Object obj);
|
||||||
void unSetOnIccSmsFull(Handler h);
|
void unSetOnIccSmsFull(Handler h);
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the handler for Emergency call-back Mode enter mesage.
|
|
||||||
* Unlike the register* methods, there's only one notification handler
|
|
||||||
*
|
|
||||||
* @param h Handler for notification message.
|
|
||||||
* @param what User-defined message code.
|
|
||||||
* @param obj User object.
|
|
||||||
*/
|
|
||||||
void setEmergencyCallbackMode(Handler h, int what, Object obj);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the handler for SIM Refresh notifications.
|
* Sets the handler for SIM Refresh notifications.
|
||||||
* Unlike the register* methods, there's only one notification handler
|
* Unlike the register* methods, there's only one notification handler
|
||||||
@@ -452,6 +424,49 @@ public interface CommandsInterface {
|
|||||||
void setSuppServiceNotifications(boolean enable, Message result);
|
void setSuppServiceNotifications(boolean enable, Message result);
|
||||||
//void unSetSuppServiceNotifications(Handler h);
|
//void unSetSuppServiceNotifications(Handler h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the handler for Event Notifications for CDMA Display Info.
|
||||||
|
* Unlike the register* methods, there's only one notification handler
|
||||||
|
*
|
||||||
|
* @param h Handler for notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
void registerForDisplayInfo(Handler h, int what, Object obj);
|
||||||
|
void unregisterForDisplayInfo(Handler h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the handler for Event Notifications for CallWaiting Info.
|
||||||
|
* Unlike the register* methods, there's only one notification handler
|
||||||
|
*
|
||||||
|
* @param h Handler for notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
void registerForCallWaitingInfo(Handler h, int what, Object obj);
|
||||||
|
void unregisterForCallWaitingInfo(Handler h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the handler for Event Notifications for Signal Info.
|
||||||
|
* Unlike the register* methods, there's only one notification handler
|
||||||
|
*
|
||||||
|
* @param h Handler for notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
void registerForSignalInfo(Handler h, int what, Object obj);
|
||||||
|
void unregisterForSignalInfo(Handler h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires on if Modem enters Emergency Callback mode
|
||||||
|
*/
|
||||||
|
void setEmergencyCallbackMode(Handler h, int what, Object obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires on any CDMA OTA provision status change
|
||||||
|
*/
|
||||||
|
void registerForCdmaOtaProvision(Handler h,int what, Object obj);
|
||||||
|
void unregisterForCdmaOtaProvision(Handler h);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns current ICC status.
|
* Returns current ICC status.
|
||||||
@@ -1244,7 +1259,9 @@ public interface CommandsInterface {
|
|||||||
public void getCdmaBroadcastConfig(Message result);
|
public void getCdmaBroadcastConfig(Message result);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests the radio's system selection module to exit emergency callback mode.
|
* Requests the radio's system selection module to exit emergency callback mode.
|
||||||
|
* This function should only be called from CDMAPHone.java.
|
||||||
|
*
|
||||||
* @param response callback message
|
* @param response callback message
|
||||||
*/
|
*/
|
||||||
public void exitEmergencyCallbackMode(Message response);
|
public void exitEmergencyCallbackMode(Message response);
|
||||||
|
|||||||
@@ -72,6 +72,31 @@ public abstract class Connection {
|
|||||||
|
|
||||||
public abstract String getAddress();
|
public abstract String getAddress();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets cdma CNAP name associated with connection
|
||||||
|
* @return cnap name or null if unavailable
|
||||||
|
*/
|
||||||
|
public String getCnapName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get orignal dial string
|
||||||
|
* @return orignal dial string or null if unavailable
|
||||||
|
*/
|
||||||
|
public String getOrigDialString(){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets cdma CNAP presentation associated with connection
|
||||||
|
* @return cnap name or null if unavailable
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getCnapNamePresentation() {
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Call that owns this Connection, or null if none
|
* @return Call that owns this Connection, or null if none
|
||||||
*/
|
*/
|
||||||
@@ -204,8 +229,14 @@ public abstract class Connection {
|
|||||||
WILD, /* The post dial string playback is waiting for a
|
WILD, /* The post dial string playback is waiting for a
|
||||||
call to proceedAfterWildChar() */
|
call to proceedAfterWildChar() */
|
||||||
COMPLETE, /* The post dial string playback is complete */
|
COMPLETE, /* The post dial string playback is complete */
|
||||||
CANCELLED /* The post dial string playback was cancelled
|
CANCELLED, /* The post dial string playback was cancelled
|
||||||
with cancelPostDial() */
|
with cancelPostDial() */
|
||||||
|
PAUSE /* The post dial string playback is pausing for a
|
||||||
|
call to processNextPostDialChar*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearUserData(){
|
||||||
|
userData = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract PostDialState getPostDialState();
|
public abstract PostDialState getPostDialState();
|
||||||
|
|||||||
@@ -238,5 +238,10 @@ interface ITelephony {
|
|||||||
*/
|
*/
|
||||||
String getCdmaEriText();
|
String getCdmaEriText();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the unread count of voicemails
|
||||||
|
*/
|
||||||
|
int getCountVoiceMessages();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ public interface Phone {
|
|||||||
static final String DATA_APN_KEY = "apn";
|
static final String DATA_APN_KEY = "apn";
|
||||||
static final String DATA_IFACE_NAME_KEY = "iface";
|
static final String DATA_IFACE_NAME_KEY = "iface";
|
||||||
static final String NETWORK_UNAVAILABLE_KEY = "networkUnvailable";
|
static final String NETWORK_UNAVAILABLE_KEY = "networkUnvailable";
|
||||||
|
static final String PHONE_IN_ECM_STATE = "phoneinECMState";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APN types for data connections. These are usage categories for an APN
|
* APN types for data connections. These are usage categories for an APN
|
||||||
@@ -195,6 +196,24 @@ public interface Phone {
|
|||||||
static final int TTY_MODE_HCO = 2;
|
static final int TTY_MODE_HCO = 2;
|
||||||
static final int TTY_MODE_VCO = 3;
|
static final int TTY_MODE_VCO = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CDMA OTA PROVISION STATUS, the same as RIL_CDMA_OTA_Status in ril.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_SPL_UNLOCKED = 0;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_SPC_RETRIES_EXCEEDED = 1;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_A_KEY_EXCHANGED = 2;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_SSD_UPDATED = 3;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_NAM_DOWNLOADED = 4;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_MDN_DOWNLOADED = 5;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_IMSI_DOWNLOADED = 6;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_PRL_DOWNLOADED = 7;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_COMMITTED = 8;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_STARTED = 9;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_STOPPED = 10;
|
||||||
|
public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_ABORTED = 11;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current ServiceState. Use
|
* Get the current ServiceState. Use
|
||||||
* <code>registerForServiceStateChanged</code> to be informed of
|
* <code>registerForServiceStateChanged</code> to be informed of
|
||||||
@@ -273,7 +292,12 @@ public interface Phone {
|
|||||||
String getActiveApn();
|
String getActiveApn();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get current signal strength.
|
* Get current signal strength. No change notification available on this
|
||||||
|
* interface. Use <code>PhoneStateNotifier</code> or an equivalent.
|
||||||
|
* An ASU is 0-31 or -1 if unknown (for GSM, dBm = -113 - 2 * asu).
|
||||||
|
* The following special values are defined:</p>
|
||||||
|
* <ul><li>0 means "-113 dBm or less".</li>
|
||||||
|
* <li>31 means "-51 dBm or greater".</li></ul>
|
||||||
*
|
*
|
||||||
* @return Current signal strength as SignalStrength
|
* @return Current signal strength as SignalStrength
|
||||||
*/
|
*/
|
||||||
@@ -499,52 +523,20 @@ public interface Phone {
|
|||||||
void unregisterForInCallVoicePrivacyOff(Handler h);
|
void unregisterForInCallVoicePrivacyOff(Handler h);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register for notifications about information record available
|
* Register for notifications when CDMA OTA Provision status change
|
||||||
*
|
*
|
||||||
* @param h Handler that receives the notification message.
|
* @param h Handler that receives the notification message.
|
||||||
* @param what User-defined message code.
|
* @param what User-defined message code.
|
||||||
* @param obj User object.
|
* @param obj User object.
|
||||||
*/
|
*/
|
||||||
void registerCdmaInformationRecord(Handler h, int what, Object obj);
|
void registerForCdmaOtaStatusChange(Handler h, int what, Object obj);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister for notifications about information record available
|
* Unegister for notifications when CDMA OTA Provision status change
|
||||||
*
|
|
||||||
* @param h Handler to be removed from the registrant list.
|
* @param h Handler to be removed from the registrant list.
|
||||||
*/
|
*/
|
||||||
void unregisterCdmaInformationRecord(Handler h);
|
void unregisterForCdmaOtaStatusChange(Handler h);
|
||||||
|
|
||||||
/**
|
|
||||||
* Register for the indication of OTA status change
|
|
||||||
*
|
|
||||||
* @param h Handler that receives the notification message.
|
|
||||||
* @param what User-defined message code.
|
|
||||||
* @param obj User object.
|
|
||||||
*/
|
|
||||||
void registerForOtaStatusChange(Handler h, int what, Object obj);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregister for the indication of OTA status change
|
|
||||||
*
|
|
||||||
* @param h Handler to be removed from the registrant list.
|
|
||||||
*/
|
|
||||||
void unregisterForOtaStatusChange(Handler h);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register for the indication of Cdma Call Waiting
|
|
||||||
*
|
|
||||||
* @param h Handler that receives the notification message.
|
|
||||||
* @param what User-defined message code.
|
|
||||||
* @param obj User object.
|
|
||||||
*/
|
|
||||||
void registerForCdmaCallWaiting(Handler h, int what, Object obj);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregister for the indication of Cdma Call Waiting
|
|
||||||
*
|
|
||||||
* @param h Handler to be removed from the registrant list.
|
|
||||||
*/
|
|
||||||
void unregisterForCdmaCallWaiting(Handler h);
|
|
||||||
/**
|
/**
|
||||||
* Returns SIM record load state. Use
|
* Returns SIM record load state. Use
|
||||||
* <code>getSimCard().registerForReady()</code> for change notification.
|
* <code>getSimCard().registerForReady()</code> for change notification.
|
||||||
@@ -760,9 +752,18 @@ public interface Phone {
|
|||||||
void stopDtmf();
|
void stopDtmf();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Play a Burst of DTMF tone on the active call. Ignored if there is no active call.
|
* send burst DTMF tone, it can send the string as single character or multiple character
|
||||||
|
* ignore if there is no active call or not valid digits string.
|
||||||
|
* Valid digit means only includes characters ISO-LATIN characters 0-9, *, #
|
||||||
|
* The difference between sendDtmf and sendBurstDtmf is sendDtmf only sends one character,
|
||||||
|
* this api can send single character and multiple character, also, this api has response
|
||||||
|
* back to caller.
|
||||||
|
*
|
||||||
|
* @param dtmfString is string representing the dialing digit(s) in the active call
|
||||||
|
* @param onCompelte is the callback message when the action is processed by BP
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
void sendBurstDtmf(String dtmfString);
|
void sendBurstDtmf(String dtmfString, Message onComplete);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the radio power on/off state (off is sometimes
|
* Sets the radio power on/off state (off is sometimes
|
||||||
@@ -826,6 +827,12 @@ public interface Phone {
|
|||||||
*/
|
*/
|
||||||
String getVoiceMailNumber();
|
String getVoiceMailNumber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns unread voicemail count. This count is shown when the voicemail
|
||||||
|
* notification is expanded.<p>
|
||||||
|
*/
|
||||||
|
int getCountVoiceMessages();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the alpha tag associated with the voice mail number.
|
* Returns the alpha tag associated with the voice mail number.
|
||||||
* If there is no alpha tag associated or the record is not yet available,
|
* If there is no alpha tag associated or the record is not yet available,
|
||||||
@@ -859,7 +866,7 @@ public interface Phone {
|
|||||||
*
|
*
|
||||||
* @param commandInterfaceCFReason is one of the valid call forwarding
|
* @param commandInterfaceCFReason is one of the valid call forwarding
|
||||||
* CF_REASONS, as defined in
|
* CF_REASONS, as defined in
|
||||||
* <code>com.android.internal.telephony.CommandsInterface./code>
|
* <code>com.android.internal.telephony.CommandsInterface.</code>
|
||||||
* @param onComplete a callback message when the action is completed.
|
* @param onComplete a callback message when the action is completed.
|
||||||
* @see com.android.internal.telephony.CallForwardInfo for details.
|
* @see com.android.internal.telephony.CallForwardInfo for details.
|
||||||
*/
|
*/
|
||||||
@@ -872,10 +879,10 @@ public interface Phone {
|
|||||||
*
|
*
|
||||||
* @param commandInterfaceCFReason is one of the valid call forwarding
|
* @param commandInterfaceCFReason is one of the valid call forwarding
|
||||||
* CF_REASONS, as defined in
|
* CF_REASONS, as defined in
|
||||||
* <code>com.android.internal.telephony.CommandsInterface./code>
|
* <code>com.android.internal.telephony.CommandsInterface.</code>
|
||||||
* @param commandInterfaceCFAction is one of the valid call forwarding
|
* @param commandInterfaceCFAction is one of the valid call forwarding
|
||||||
* CF_ACTIONS, as defined in
|
* CF_ACTIONS, as defined in
|
||||||
* <code>com.android.internal.telephony.CommandsInterface./code>
|
* <code>com.android.internal.telephony.CommandsInterface.</code>
|
||||||
* @param dialingNumber is the target phone number to forward calls to
|
* @param dialingNumber is the target phone number to forward calls to
|
||||||
* @param timerSeconds is used by CFNRy to indicate the timeout before
|
* @param timerSeconds is used by CFNRy to indicate the timeout before
|
||||||
* forwarding is attempted.
|
* forwarding is attempted.
|
||||||
@@ -1335,10 +1342,16 @@ public interface Phone {
|
|||||||
|
|
||||||
//***** CDMA support methods
|
//***** CDMA support methods
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO(Moto) TODO(Teleca): can getCdmaMin, getEsn, getMeid use more generic calls
|
||||||
|
* already defined getXxxx above?
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the MIN for CDMA phones.
|
* Retrieves the MIN for CDMA phones.
|
||||||
*/
|
*/
|
||||||
String getMin();
|
|
||||||
|
String getCdmaMin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the ESN for CDMA phones.
|
* Retrieves the ESN for CDMA phones.
|
||||||
@@ -1383,14 +1396,6 @@ public interface Phone {
|
|||||||
*/
|
*/
|
||||||
void queryTTYMode(Message onComplete);
|
void queryTTYMode(Message onComplete);
|
||||||
|
|
||||||
/**
|
|
||||||
* exitEmergencyCallbackMode
|
|
||||||
* exits the emergency callback mode
|
|
||||||
*
|
|
||||||
* @param onComplete a callback message when the action is completed.
|
|
||||||
*/
|
|
||||||
void exitEmergencyCallbackMode(Message onComplete);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activate or deactivate cell broadcast SMS.
|
* Activate or deactivate cell broadcast SMS.
|
||||||
*
|
*
|
||||||
@@ -1438,4 +1443,93 @@ public interface Phone {
|
|||||||
*/
|
*/
|
||||||
public String getCdmaEriText();
|
public String getCdmaEriText();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* request to exit emergency call back mode
|
||||||
|
* the caller should use setOnECMModeExitResponse
|
||||||
|
* to receive the emergency callback mode exit response
|
||||||
|
*/
|
||||||
|
void exitEmergencyCallbackMode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this decides if the dial number is OTA(Over the air provision) number or not
|
||||||
|
* @param dialStr is string representing the dialing digit(s)
|
||||||
|
* @return true means the dialStr is OTA number, and false means the dialStr is not OTA number
|
||||||
|
*/
|
||||||
|
boolean isOtaSpNumber(String dialStr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register for notifications when CDMA call waiting comes
|
||||||
|
*
|
||||||
|
* @param h Handler that receives the notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
// TODO(Moto) TODO: Remove when generic implemented
|
||||||
|
void registerForCallWaiting(Handler h, int what, Object obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unegister for notifications when CDMA Call waiting comes
|
||||||
|
* @param h Handler to be removed from the registrant list.
|
||||||
|
*/
|
||||||
|
// TODO(Moto): Remove when generic implemented
|
||||||
|
void unregisterForCallWaiting(Handler h);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register for signal information notifications from the network.
|
||||||
|
* Message.obj will contain an AsyncResult.
|
||||||
|
* AsyncResult.result will be a SuppServiceNotification instance.
|
||||||
|
*
|
||||||
|
* @param h Handler that receives the notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void registerForSignalInfo(Handler h, int what, Object obj) ;
|
||||||
|
/**
|
||||||
|
* Unregisters for signal information notifications.
|
||||||
|
* Extraneous calls are tolerated silently
|
||||||
|
*
|
||||||
|
* @param h Handler to be removed from the registrant list.
|
||||||
|
*/
|
||||||
|
void unregisterForSignalInfo(Handler h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register for display information notifications from the network.
|
||||||
|
* Message.obj will contain an AsyncResult.
|
||||||
|
* AsyncResult.result will be a SuppServiceNotification instance.
|
||||||
|
*
|
||||||
|
* @param h Handler that receives the notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
void registerForDisplayInfo(Handler h, int what, Object obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters for display information notifications.
|
||||||
|
* Extraneous calls are tolerated silently
|
||||||
|
*
|
||||||
|
* @param h Handler to be removed from the registrant list.
|
||||||
|
*/
|
||||||
|
void unregisterForDisplayInfo(Handler h) ;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* registers for exit emergency call back mode request response
|
||||||
|
*
|
||||||
|
* @param h Handler that receives the notification message.
|
||||||
|
* @param what User-defined message code.
|
||||||
|
* @param obj User object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void setOnEcbModeExitResponse(Handler h, int what, Object obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters for exit emergency call back mode request response
|
||||||
|
*
|
||||||
|
* @param h Handler to be removed from the registrant list.
|
||||||
|
*/
|
||||||
|
void unsetOnEcbModeExitResponse(Handler h);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,8 +100,8 @@ public abstract class PhoneBase implements Phone {
|
|||||||
protected static final int EVENT_RUIM_RECORDS_LOADED = 21;
|
protected static final int EVENT_RUIM_RECORDS_LOADED = 21;
|
||||||
protected static final int EVENT_NV_READY = 22;
|
protected static final int EVENT_NV_READY = 22;
|
||||||
protected static final int EVENT_SET_ENHANCED_VP = 23;
|
protected static final int EVENT_SET_ENHANCED_VP = 23;
|
||||||
protected static final int EVENT_CDMA_CALL_WAITING = 24;
|
protected static final int EVENT_EMERGENCY_CALLBACK_MODE_ENTER = 24;
|
||||||
protected static final int EVENT_EMERGENCY_CALLBACK_MODE = 25;
|
protected static final int EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE = 25;
|
||||||
|
|
||||||
// Key used to read/write current CLIR setting
|
// Key used to read/write current CLIR setting
|
||||||
public static final String CLIR_KEY = "clir_key";
|
public static final String CLIR_KEY = "clir_key";
|
||||||
@@ -294,36 +294,6 @@ public abstract class PhoneBase implements Phone {
|
|||||||
mCM.unregisterForInCallVoicePrivacyOff(h);
|
mCM.unregisterForInCallVoicePrivacyOff(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void registerForOtaStatusChange(Handler h, int what, Object obj){
|
|
||||||
mCM.registerForOtaSessionStatus(h,what,obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void unregisterForOtaStatusChange(Handler h){
|
|
||||||
mCM.unregisterForOtaSessionStatus(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void registerCdmaInformationRecord(Handler h, int what, Object obj){
|
|
||||||
mCM.registerCdmaInformationRecord(h,what,obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void unregisterCdmaInformationRecord(Handler h){
|
|
||||||
mCM.unregisterCdmaInformationRecord(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void registerForCdmaCallWaiting(Handler h, int what, Object obj){
|
|
||||||
mCM.registerForCdmaCallWaiting(h,what,obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inherited documentation suffices.
|
|
||||||
public void unregisterForCdmaCallWaiting(Handler h){
|
|
||||||
mCM.unregisterForCdmaCallWaiting(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notifiy registrants of a new ringing Connection.
|
* Notifiy registrants of a new ringing Connection.
|
||||||
* Subclasses of Phone probably want to replace this with a
|
* Subclasses of Phone probably want to replace this with a
|
||||||
@@ -630,14 +600,6 @@ public abstract class PhoneBase implements Phone {
|
|||||||
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send the exit emergency callback mode message
|
|
||||||
*/
|
|
||||||
public void exitEmergencyCallbackMode(Message onComplete) {
|
|
||||||
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
|
||||||
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This should only be called in GSM mode.
|
* This should only be called in GSM mode.
|
||||||
* Only here for some backward compatibility
|
* Only here for some backward compatibility
|
||||||
@@ -684,6 +646,11 @@ public abstract class PhoneBase implements Phone {
|
|||||||
|
|
||||||
public abstract String getPhoneName();
|
public abstract String getPhoneName();
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public int getCountVoiceMessages(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the CDMA ERI icon index to display
|
* Returns the CDMA ERI icon index to display
|
||||||
*/
|
*/
|
||||||
@@ -710,4 +677,71 @@ public abstract class PhoneBase implements Phone {
|
|||||||
return "GSM nw, no ERI";
|
return "GSM nw, no ERI";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCdmaMin() {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendBurstDtmf(String dtmfString, Message onComplete) {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exitEmergencyCallbackMode() {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCdmaOtaStatusChange(Handler h) {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOtaSpNumber(String dialStr) {
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCallWaiting(Handler h, int what, Object obj){
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCallWaiting(Handler h){
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForSignalInfo(Handler h, int what, Object obj) {
|
||||||
|
mCM.registerForSignalInfo(h, what, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForSignalInfo(Handler h) {
|
||||||
|
mCM.unregisterForSignalInfo(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForDisplayInfo(Handler h, int what, Object obj) {
|
||||||
|
mCM.registerForDisplayInfo(h, what, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForDisplayInfo(Handler h) {
|
||||||
|
mCM.unregisterForDisplayInfo(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnEcbModeExitResponse(Handler h, int what, Object obj){
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsetOnEcbModeExitResponse(Handler h){
|
||||||
|
// This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
|
||||||
|
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -306,28 +306,12 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
mActivePhone.unregisterForInCallVoicePrivacyOff(h);
|
mActivePhone.unregisterForInCallVoicePrivacyOff(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerCdmaInformationRecord(Handler h, int what, Object obj) {
|
public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
|
||||||
mActivePhone.registerCdmaInformationRecord(h,what,obj);
|
mActivePhone.registerForCdmaOtaStatusChange(h,what,obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterCdmaInformationRecord(Handler h) {
|
public void unregisterForCdmaOtaStatusChange(Handler h) {
|
||||||
mActivePhone.unregisterCdmaInformationRecord(h);
|
mActivePhone.unregisterForCdmaOtaStatusChange(h);
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForOtaStatusChange(Handler h, int what, Object obj){
|
|
||||||
mActivePhone.registerForOtaStatusChange(h,what,obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForOtaStatusChange(Handler h){
|
|
||||||
mActivePhone.unregisterForOtaStatusChange(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForCdmaCallWaiting(Handler h, int what, Object obj){
|
|
||||||
mActivePhone.registerForCdmaCallWaiting(h,what,obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForCdmaCallWaiting(Handler h){
|
|
||||||
mActivePhone.unregisterForCdmaCallWaiting(h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getIccRecordsLoaded() {
|
public boolean getIccRecordsLoaded() {
|
||||||
@@ -414,10 +398,6 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
mActivePhone.stopDtmf();
|
mActivePhone.stopDtmf();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendBurstDtmf(String dtmfString) {
|
|
||||||
mActivePhone.sendBurstDtmf(dtmfString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRadioPower(boolean power) {
|
public void setRadioPower(boolean power) {
|
||||||
mActivePhone.setRadioPower(power);
|
mActivePhone.setRadioPower(power);
|
||||||
}
|
}
|
||||||
@@ -434,6 +414,10 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
return mActivePhone.getLine1Number();
|
return mActivePhone.getLine1Number();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCdmaMin() {
|
||||||
|
return mActivePhone.getCdmaMin();
|
||||||
|
}
|
||||||
|
|
||||||
public String getLine1AlphaTag() {
|
public String getLine1AlphaTag() {
|
||||||
return mActivePhone.getLine1AlphaTag();
|
return mActivePhone.getLine1AlphaTag();
|
||||||
}
|
}
|
||||||
@@ -446,6 +430,11 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
return mActivePhone.getVoiceMailNumber();
|
return mActivePhone.getVoiceMailNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public int getCountVoiceMessages(){
|
||||||
|
return mActivePhone.getCountVoiceMessages();
|
||||||
|
}
|
||||||
|
|
||||||
public String getVoiceMailAlphaTag() {
|
public String getVoiceMailAlphaTag() {
|
||||||
return mActivePhone.getVoiceMailAlphaTag();
|
return mActivePhone.getVoiceMailAlphaTag();
|
||||||
}
|
}
|
||||||
@@ -656,10 +645,6 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
return mActivePhone.getIccSerialNumber();
|
return mActivePhone.getIccSerialNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMin() {
|
|
||||||
return mActivePhone.getMin();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEsn() {
|
public String getEsn() {
|
||||||
return mActivePhone.getEsn();
|
return mActivePhone.getEsn();
|
||||||
}
|
}
|
||||||
@@ -688,10 +673,6 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
mActivePhone.queryTTYMode(onComplete);
|
mActivePhone.queryTTYMode(onComplete);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exitEmergencyCallbackMode(Message onComplete) {
|
|
||||||
mActivePhone.exitEmergencyCallbackMode(onComplete);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void activateCellBroadcastSms(int activate, Message response) {
|
public void activateCellBroadcastSms(int activate, Message response) {
|
||||||
mActivePhone.activateCellBroadcastSms(activate, response);
|
mActivePhone.activateCellBroadcastSms(activate, response);
|
||||||
}
|
}
|
||||||
@@ -720,12 +701,55 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
return mActivePhone.getCdmaEriIconIndex();
|
return mActivePhone.getCdmaEriIconIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCdmaEriText() {
|
||||||
|
return mActivePhone.getCdmaEriText();
|
||||||
|
}
|
||||||
|
|
||||||
public int getCdmaEriIconMode() {
|
public int getCdmaEriIconMode() {
|
||||||
return mActivePhone.getCdmaEriIconMode();
|
return mActivePhone.getCdmaEriIconMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCdmaEriText() {
|
public void sendBurstDtmf(String dtmfString, Message onComplete){
|
||||||
return mActivePhone.getCdmaEriText();
|
mActivePhone.sendBurstDtmf(dtmfString,onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exitEmergencyCallbackMode(){
|
||||||
|
mActivePhone.exitEmergencyCallbackMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOtaSpNumber(String dialStr){
|
||||||
|
return mActivePhone.isOtaSpNumber(dialStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCallWaiting(Handler h, int what, Object obj){
|
||||||
|
mActivePhone.registerForCallWaiting(h,what,obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCallWaiting(Handler h){
|
||||||
|
mActivePhone.unregisterForCallWaiting(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForSignalInfo(Handler h, int what, Object obj) {
|
||||||
|
mActivePhone.registerForSignalInfo(h,what,obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForSignalInfo(Handler h) {
|
||||||
|
mActivePhone.unregisterForSignalInfo(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForDisplayInfo(Handler h, int what, Object obj) {
|
||||||
|
mActivePhone.registerForDisplayInfo(h,what,obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForDisplayInfo(Handler h) {
|
||||||
|
mActivePhone.unregisterForDisplayInfo(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnEcbModeExitResponse(Handler h, int what, Object obj){
|
||||||
|
mActivePhone.setOnEcbModeExitResponse(h,what,obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsetOnEcbModeExitResponse(Handler h){
|
||||||
|
mActivePhone.unsetOnEcbModeExitResponse(h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,11 +38,18 @@ import android.telephony.SmsMessage;
|
|||||||
import android.util.Config;
|
import android.util.Config;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.telephony.CdmaInformationRecord;
|
import com.android.internal.telephony.CallForwardInfo;
|
||||||
import com.android.internal.telephony.cdma.CdmaCallWaiting;
|
import com.android.internal.telephony.CommandException;
|
||||||
import com.android.internal.telephony.DataCallState;
|
import com.android.internal.telephony.DataCallState;
|
||||||
import com.android.internal.telephony.gsm.NetworkInfo;
|
import com.android.internal.telephony.gsm.NetworkInfo;
|
||||||
import com.android.internal.telephony.gsm.SuppServiceNotification;
|
import com.android.internal.telephony.gsm.SuppServiceNotification;
|
||||||
|
import com.android.internal.telephony.IccCardApplication;
|
||||||
|
import com.android.internal.telephony.IccCardStatus;
|
||||||
|
import com.android.internal.telephony.IccUtils;
|
||||||
|
import com.android.internal.telephony.RILConstants;
|
||||||
|
import com.android.internal.telephony.SmsResponse;
|
||||||
|
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
|
||||||
|
import com.android.internal.telephony.cdma.CdmaInformationRecords;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
@@ -1063,10 +1070,11 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
sendBurstDtmf(String dtmfString, Message result) {
|
sendBurstDtmf(String dtmfString, Message result) {
|
||||||
RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
|
RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
|
||||||
|
|
||||||
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
|
|
||||||
|
|
||||||
rr.mp.writeString(dtmfString);
|
rr.mp.writeString(dtmfString);
|
||||||
|
|
||||||
|
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
|
||||||
|
+ " : " + dtmfString);
|
||||||
|
|
||||||
send(rr);
|
send(rr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1992,7 +2000,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RIL_REQUEST_CONFERENCE: ret = responseVoid(p); break;
|
case RIL_REQUEST_CONFERENCE: ret = responseVoid(p); break;
|
||||||
case RIL_REQUEST_UDUB: ret = responseVoid(p); break;
|
case RIL_REQUEST_UDUB: ret = responseVoid(p); break;
|
||||||
case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret = responseInts(p); break;
|
case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret = responseInts(p); break;
|
||||||
case RIL_REQUEST_SIGNAL_STRENGTH: ret = responseInts(p); break;
|
case RIL_REQUEST_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
|
||||||
case RIL_REQUEST_REGISTRATION_STATE: ret = responseStrings(p); break;
|
case RIL_REQUEST_REGISTRATION_STATE: ret = responseStrings(p); break;
|
||||||
case RIL_REQUEST_GPRS_REGISTRATION_STATE: ret = responseStrings(p); break;
|
case RIL_REQUEST_GPRS_REGISTRATION_STATE: ret = responseStrings(p); break;
|
||||||
case RIL_REQUEST_OPERATOR: ret = responseStrings(p); break;
|
case RIL_REQUEST_OPERATOR: ret = responseStrings(p); break;
|
||||||
@@ -2187,7 +2195,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret = responseInts(p); break;
|
case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret = responseInts(p); break;
|
||||||
case RIL_UNSOL_ON_USSD: ret = responseStrings(p); break;
|
case RIL_UNSOL_ON_USSD: ret = responseStrings(p); break;
|
||||||
case RIL_UNSOL_NITZ_TIME_RECEIVED: ret = responseString(p); break;
|
case RIL_UNSOL_NITZ_TIME_RECEIVED: ret = responseString(p); break;
|
||||||
case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseInts(p); break;
|
case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
|
||||||
case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
|
case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
|
||||||
case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
|
case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
|
||||||
case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
|
case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
|
||||||
@@ -2205,7 +2213,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
|
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
|
||||||
case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
|
case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
|
||||||
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
|
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
|
||||||
case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
|
case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInfoRec(p); break;
|
||||||
case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
|
case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -2391,10 +2399,11 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RIL_UNSOL_CALL_RING:
|
case RIL_UNSOL_CALL_RING:
|
||||||
if (RILJ_LOGD) unsljLog(response);
|
if (RILJ_LOGD) unsljLogRet(response, ret);
|
||||||
|
|
||||||
if (mRingRegistrant != null) {
|
if (mRingRegistrant != null) {
|
||||||
mRingRegistrant.notifyRegistrant();
|
mRingRegistrant.notifyRegistrant(
|
||||||
|
new AsyncResult (null, ret, null));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2434,13 +2443,6 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RIL_UNSOL_OEM_HOOK_RAW:
|
|
||||||
if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
|
|
||||||
if (mUnsolOemHookRawRegistrant != null) {
|
|
||||||
mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
|
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
|
||||||
if (RILJ_LOGD) unsljLog(response);
|
if (RILJ_LOGD) unsljLog(response);
|
||||||
|
|
||||||
@@ -2452,25 +2454,46 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RIL_UNSOL_CDMA_CALL_WAITING:
|
case RIL_UNSOL_CDMA_CALL_WAITING:
|
||||||
if (RILJ_LOGD) unsljLog(response);
|
if (RILJ_LOGD) unsljLog(response);
|
||||||
|
|
||||||
if(mCallWaitingRegistrants != null) {
|
if (mCallWaitingInfoRegistrants != null) {
|
||||||
mCallWaitingRegistrants.notifyRegistrants(new AsyncResult (null, ret, null));
|
mCallWaitingInfoRegistrants.notifyRegistrants(
|
||||||
|
new AsyncResult (null, ret, null));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
|
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
|
||||||
if (RILJ_LOGD) unsljLog(response);
|
if (RILJ_LOGD) unsljLogRet(response, ret);
|
||||||
|
|
||||||
if (mOtaSessionRegistrants != null) {
|
if (mOtaProvisionRegistrants != null) {
|
||||||
mOtaSessionRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
|
mOtaProvisionRegistrants.notifyRegistrants(
|
||||||
|
new AsyncResult (null, ret, null));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RIL_UNSOL_CDMA_INFO_REC:
|
case RIL_UNSOL_CDMA_INFO_REC:
|
||||||
if (RILJ_LOGD)
|
if (RILJ_LOGD) unsljLog(response);
|
||||||
unsljLog(response);
|
|
||||||
if (mInformationRecordsRegistrants != null) {
|
CdmaInformationRecords infoRec = (CdmaInformationRecords) ret;
|
||||||
mInformationRecordsRegistrants.notifyRegistrants(new AsyncResult(null, ret,
|
if (infoRec.isDispInfo) {
|
||||||
null));
|
if (mDisplayInfoRegistrants != null) {
|
||||||
|
if (RILJ_LOGD) unsljLogRet(response, infoRec.cdmaDisplayInfoRecord);
|
||||||
|
|
||||||
|
mDisplayInfoRegistrants.notifyRegistrants(
|
||||||
|
new AsyncResult (null, infoRec.cdmaDisplayInfoRecord, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (infoRec.isSignInfo) {
|
||||||
|
if (mSignalInfoRegistrants != null) {
|
||||||
|
if (RILJ_LOGD) unsljLogRet(response, infoRec.cdmaSignalInfoRecord);
|
||||||
|
mSignalInfoRegistrants.notifyRegistrants(
|
||||||
|
new AsyncResult (null, infoRec.cdmaSignalInfoRecord, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RIL_UNSOL_OEM_HOOK_RAW:
|
||||||
|
if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
|
||||||
|
if (mUnsolOemHookRawRegistrant != null) {
|
||||||
|
mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2721,11 +2744,8 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
dc.als = p.readInt();
|
dc.als = p.readInt();
|
||||||
voiceSettings = p.readInt();
|
voiceSettings = p.readInt();
|
||||||
dc.isVoice = (0 == voiceSettings) ? false : true;
|
dc.isVoice = (0 == voiceSettings) ? false : true;
|
||||||
|
|
||||||
//dc.isVoicePrivacy = (0 != p.readInt());
|
|
||||||
int voicePrivacy = p.readInt();
|
int voicePrivacy = p.readInt();
|
||||||
dc.isVoicePrivacy = (0 != voicePrivacy);
|
dc.isVoicePrivacy = (0 != voicePrivacy);
|
||||||
|
|
||||||
dc.number = p.readString();
|
dc.number = p.readString();
|
||||||
int np = p.readInt();
|
int np = p.readInt();
|
||||||
dc.numberPresentation = DriverCall.presentationFromCLIP(np);
|
dc.numberPresentation = DriverCall.presentationFromCLIP(np);
|
||||||
@@ -2834,15 +2854,48 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
|
|
||||||
private Object
|
private Object
|
||||||
responseCDMA_BR_CNF(Parcel p) {
|
responseCDMA_BR_CNF(Parcel p) {
|
||||||
int numInts;
|
int numServiceCategories;
|
||||||
int response[];
|
int response[];
|
||||||
|
|
||||||
numInts = p.readInt();
|
numServiceCategories = p.readInt();
|
||||||
|
|
||||||
|
if (numServiceCategories == 0) {
|
||||||
|
int numInts;
|
||||||
|
numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
|
||||||
|
response = new int[numInts];
|
||||||
|
|
||||||
|
// Indicate that a zero length table was received
|
||||||
|
response[0] = 0; // TODO(Moto): This is very strange, please explain why.
|
||||||
|
|
||||||
|
// Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
|
||||||
|
// default language and selection status to false
|
||||||
|
for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
|
||||||
|
response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
|
||||||
|
response[i + 1] = 1;
|
||||||
|
response[i + 2] = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int numInts;
|
||||||
|
numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
|
||||||
|
response = new int[numInts];
|
||||||
|
|
||||||
|
response[0] = numServiceCategories;
|
||||||
|
for (int i = 1 ; i < numInts; i++) {
|
||||||
|
response[i] = p.readInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object
|
||||||
|
responseSignalStrength(Parcel p) {
|
||||||
|
int numInts = 7;
|
||||||
|
int response[];
|
||||||
|
|
||||||
|
/* TODO: Add SignalStrength class to match RIL_SignalStrength */
|
||||||
response = new int[numInts];
|
response = new int[numInts];
|
||||||
|
for (int i = 0 ; i < numInts ; i++) {
|
||||||
response[0] = numInts;
|
|
||||||
for (int i = 1 ; i < numInts; i++) {
|
|
||||||
response[i] = p.readInt();
|
response[i] = p.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2850,105 +2903,81 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Object
|
private Object
|
||||||
responseCdmaInformationRecord(Parcel p){
|
responseCdmaInfoRec(Parcel p) {
|
||||||
|
int infoRecordName;
|
||||||
|
CdmaInformationRecords records = new CdmaInformationRecords();
|
||||||
|
|
||||||
int num;
|
int numberOfInfoRecs = p.readInt();
|
||||||
ArrayList<CdmaInformationRecord> response;
|
for (int i = 0; i < numberOfInfoRecs; i++) {
|
||||||
|
infoRecordName = p.readInt();
|
||||||
num = p.readInt();
|
switch(infoRecordName) {
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_DISPLAY_INFO_REC:
|
||||||
response = new ArrayList<CdmaInformationRecord>(num);
|
case CdmaInformationRecords.RIL_CDMA_EXTENDED_DISPLAY_INFO_REC:
|
||||||
|
records.setDispInfo(p.readString());
|
||||||
for (int i = 0; i < num; i++) {
|
|
||||||
int name = p.readInt();
|
|
||||||
CdmaInformationRecord InfoRec = new CdmaInformationRecord(name);
|
|
||||||
|
|
||||||
char buffer[];
|
|
||||||
int length;
|
|
||||||
switch (name) {
|
|
||||||
case CdmaInformationRecord.RIL_CDMA_DISPLAY_INFO_REC:
|
|
||||||
case CdmaInformationRecord.RIL_CDMA_EXTENDED_DISPLAY_INFO_REC:
|
|
||||||
length = p.readInt();
|
|
||||||
buffer = new char[length];
|
|
||||||
for (int j = 0; j < length; j++) {
|
|
||||||
buffer[j] = (char)p.readInt();
|
|
||||||
}
|
|
||||||
InfoRec.createDisplayInfo(length, buffer);
|
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_SIGNAL_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC:
|
records.setSignInfo(p.readInt(), p.readInt(), p.readInt(), p.readInt());
|
||||||
case CdmaInformationRecord.RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC:
|
|
||||||
case CdmaInformationRecord.RIL_CDMA_CONNECTED_NUMBER_INFO_REC:
|
|
||||||
length = p.readInt();
|
|
||||||
buffer = new char[length + 4];
|
|
||||||
for (int j = 0; j < (length + 4); j++) {
|
|
||||||
buffer[j] = (char)p.readInt();
|
|
||||||
}
|
|
||||||
InfoRec.createNumberInfo(length, buffer);
|
|
||||||
break;
|
break;
|
||||||
|
// InfoReocords with names as below aren't supported in AFW yet
|
||||||
case CdmaInformationRecord.RIL_CDMA_SIGNAL_INFO_REC:
|
case CdmaInformationRecords.RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC:
|
||||||
buffer = new char[4];
|
case CdmaInformationRecords.RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC:
|
||||||
for (int j = 0; j < 4; j++) {
|
case CdmaInformationRecords.RIL_CDMA_CONNECTED_NUMBER_INFO_REC:
|
||||||
buffer[j] = (char)p.readInt();
|
// TODO(Moto) implement
|
||||||
}
|
p.readString(); // number
|
||||||
InfoRec.createSignalInfo(buffer);
|
p.readInt(); // number_type
|
||||||
|
p.readInt(); // number_plan
|
||||||
|
p.readInt(); // pi
|
||||||
|
p.readInt(); // si
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_REDIRECTING_NUMBER_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_REDIRECTING_NUMBER_INFO_REC:
|
// TODO(Moto) implement
|
||||||
length = p.readInt();
|
p.readString(); // redirecting number
|
||||||
buffer = new char[length + 4];
|
p.readInt(); // number_type
|
||||||
int reason;
|
p.readInt(); // number_plan
|
||||||
for (int j = 0; j < (length + 4); j++) {
|
p.readInt(); // pi
|
||||||
buffer[j] = (char)p.readInt();
|
p.readInt(); // si
|
||||||
}
|
p.readInt(); // reason
|
||||||
reason = p.readInt();
|
|
||||||
InfoRec.createRedirectingNumberInfo(length, buffer, reason);
|
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_LINE_CONTROL_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_LINE_CONTROL_INFO_REC:
|
// TODO(Moto) implement
|
||||||
buffer = new char[4];
|
p.readInt(); // PolarityIncluded
|
||||||
for (int j = 0; j < 4; j++) {
|
p.readInt(); // Toggle
|
||||||
buffer[j] = (char)p.readInt();
|
p.readInt(); // Reverse
|
||||||
}
|
p.readInt(); // PowerDenial
|
||||||
InfoRec.createLineControlInfo(buffer);
|
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_T53_CLIR_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_T53_CLIR_INFO_REC:
|
// TODO(Moto) implement
|
||||||
char ch = (char)p.readInt();
|
p.readInt(); // Cause
|
||||||
InfoRec.createT53ClirInfo(ch);
|
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_T53_RELEASE_INFO_REC:
|
// TODO(Moto) implement
|
||||||
|
p.readInt(); // upLink
|
||||||
|
p.readInt(); // downLink
|
||||||
break;
|
break;
|
||||||
|
case CdmaInformationRecords.RIL_CDMA_T53_RELEASE_INFO_REC:
|
||||||
case CdmaInformationRecord.RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC:
|
// TODO(Moto) implement unknown fall through
|
||||||
char ul = (char)p.readInt();
|
|
||||||
char dl = (char)p.readInt();
|
|
||||||
InfoRec.createT53AudioControlInfo(ul, dl);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
throw new RuntimeException("RIL_UNSOL_CDMA_INFO_REC: unsupported record. Got "
|
||||||
|
+ records.recordToString(infoRecordName) + " ");
|
||||||
}
|
}
|
||||||
response.add(InfoRec);
|
|
||||||
}
|
}
|
||||||
|
return records;
|
||||||
return response;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object
|
private Object
|
||||||
responseCdmaCallWaiting(Parcel p){
|
responseCdmaCallWaiting(Parcel p) {
|
||||||
CdmaCallWaiting response = new CdmaCallWaiting();
|
CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
|
||||||
response.number = p.readString();
|
|
||||||
response.numberPresentation = p.readInt();
|
|
||||||
response.name = p.readString();
|
|
||||||
response.signalInfoRecord.isPresent = p.readInt() == 0 ? false : true;
|
|
||||||
response.signalInfoRecord.signalType = p.readInt();
|
|
||||||
response.signalInfoRecord.alertPitch = p.readInt();
|
|
||||||
response.signalInfoRecord.signalCode = p.readInt();
|
|
||||||
|
|
||||||
return response;
|
notification.number = p.readString();
|
||||||
|
notification.numberPresentation = p.readInt();
|
||||||
|
notification.name = p.readString();
|
||||||
|
notification.namePresentation = notification.numberPresentation;
|
||||||
|
notification.isPresent = p.readInt();
|
||||||
|
notification.signalType = p.readInt();
|
||||||
|
notification.alertPitch = p.readInt();
|
||||||
|
notification.signal = p.readInt();
|
||||||
|
|
||||||
|
return notification;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object
|
private Object
|
||||||
@@ -3104,16 +3133,16 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
|
case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
|
||||||
case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
|
case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
|
||||||
case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
|
case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
|
||||||
case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "RIL_UNSOL_RESTRICTED_STATE_CHANGED";
|
|
||||||
case RIL_UNSOL_OEM_HOOK_RAW: return "RIL_UNSOL_OEM_HOOK_RAW";
|
|
||||||
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
|
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
|
||||||
case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
|
case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
|
||||||
case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
|
case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
|
||||||
case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
|
case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
|
||||||
|
case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
|
||||||
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
|
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
|
||||||
case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
|
case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
|
||||||
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
|
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
|
||||||
case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
|
case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
|
||||||
|
case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
|
||||||
default: return "<unknown reponse>";
|
default: return "<unknown reponse>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3286,8 +3315,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public void exitEmergencyCallbackMode(Message response) {
|
public void exitEmergencyCallbackMode(Message response) {
|
||||||
RILRequest rr
|
RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
|
||||||
= RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
|
|
||||||
|
|
||||||
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
|
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
|
||||||
|
|
||||||
|
|||||||
@@ -54,8 +54,10 @@ public class TelephonyIntents {
|
|||||||
public static final String ACTION_RADIO_TECHNOLOGY_CHANGED
|
public static final String ACTION_RADIO_TECHNOLOGY_CHANGED
|
||||||
= "android.intent.action.RADIO_TECHNOLOGY";
|
= "android.intent.action.RADIO_TECHNOLOGY";
|
||||||
/**
|
/**
|
||||||
* <p>Broadcast Action: The emergency callback mode is entered.
|
* <p>Broadcast Action: The emergency callback mode is changed.
|
||||||
*
|
* <ul>
|
||||||
|
* <li><em>phoneinECMState</em> - A boolean value,true=phone in ECM, false=ECM off</li>
|
||||||
|
* </ul>
|
||||||
* <p class="note">
|
* <p class="note">
|
||||||
* You can <em>not</em> receive this through components declared
|
* You can <em>not</em> receive this through components declared
|
||||||
* in manifests, only by explicitly registering for it with
|
* in manifests, only by explicitly registering for it with
|
||||||
@@ -65,8 +67,8 @@ public class TelephonyIntents {
|
|||||||
* <p class="note">
|
* <p class="note">
|
||||||
* Requires no permission.
|
* Requires no permission.
|
||||||
*/
|
*/
|
||||||
public static final String ACTION_EMERGENCY_CALLBACK_MODE_ENTERED
|
public static final String ACTION_EMERGENCY_CALLBACK_MODE_CHANGED
|
||||||
= "android.intent.action.EMERGENCY_CALLBACK_MODE";
|
= "android.intent.action.EMERGENCY_CALLBACK_MODE_CHANGED";
|
||||||
/**
|
/**
|
||||||
* Broadcast Action: The phone's signal strength has changed. The intent will have the
|
* Broadcast Action: The phone's signal strength has changed. The intent will have the
|
||||||
* following extra values:</p>
|
* following extra values:</p>
|
||||||
@@ -179,4 +181,28 @@ public class TelephonyIntents {
|
|||||||
*/
|
*/
|
||||||
public static final String ACTION_NETWORK_SET_TIMEZONE
|
public static final String ACTION_NETWORK_SET_TIMEZONE
|
||||||
= "android.intent.action.NETWORK_SET_TIMEZONE";
|
= "android.intent.action.NETWORK_SET_TIMEZONE";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Broadcast Action: It indicates the Emergency callback mode blocks datacall/sms
|
||||||
|
* <p class="note">.
|
||||||
|
*/
|
||||||
|
// TODO(Moto): What is the use case, who is interested in this?
|
||||||
|
public static final String ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS
|
||||||
|
= "android.intent.action.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast Action: The MDN changed during the CDMA OTA Process
|
||||||
|
* The intent will have the following extra values:</p>
|
||||||
|
* <ul>
|
||||||
|
* <li><em>mdn</em> - An Integer of the updated MDN number.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* <p class="note">
|
||||||
|
*/
|
||||||
|
// TODO(Moto): Generally broadcast intents are for use to allow entities which
|
||||||
|
// may not know about each other to "communicate". This seems quite specific
|
||||||
|
// and maybe using the registrant style would be better.
|
||||||
|
public static final String ACTION_CDMA_OTA_MDN_CHANGED
|
||||||
|
= "android.intent.action.ACTION_MDN_STATE_CHANGED";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,4 +98,7 @@ public interface TelephonyProperties
|
|||||||
*/
|
*/
|
||||||
static String PROPERTY_DATA_NETWORK_TYPE = "gsm.network.type";
|
static String PROPERTY_DATA_NETWORK_TYPE = "gsm.network.type";
|
||||||
|
|
||||||
|
/** Indicate if phone is in emergency callback mode */
|
||||||
|
static final String PROPERTY_INECM_MODE = "ril.cdma.inecmmode";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import android.text.TextUtils;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_BASEBAND_VERSION;
|
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_BASEBAND_VERSION;
|
||||||
|
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_INECM_MODE;
|
||||||
|
|
||||||
import com.android.internal.telephony.CallStateException;
|
import com.android.internal.telephony.CallStateException;
|
||||||
import com.android.internal.telephony.CommandsInterface;
|
import com.android.internal.telephony.CommandsInterface;
|
||||||
@@ -54,9 +55,9 @@ import com.android.internal.telephony.RILConstants;
|
|||||||
import com.android.internal.telephony.TelephonyIntents;
|
import com.android.internal.telephony.TelephonyIntents;
|
||||||
import com.android.internal.telephony.TelephonyProperties;
|
import com.android.internal.telephony.TelephonyProperties;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
@@ -83,8 +84,21 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
|
|
||||||
// mEriFileLoadedRegistrants are informed after the ERI text has been loaded
|
// mEriFileLoadedRegistrants are informed after the ERI text has been loaded
|
||||||
private RegistrantList mEriFileLoadedRegistrants = new RegistrantList();
|
private RegistrantList mEriFileLoadedRegistrants = new RegistrantList();
|
||||||
|
|
||||||
|
// mECMExitRespRegistrant is informed after the phone has been exited
|
||||||
|
//the emergency callback mode
|
||||||
|
//keep track of if phone is in emergency callback mode
|
||||||
|
private boolean mIsPhoneInECMState;
|
||||||
|
private Registrant mECMExitRespRegistrant;
|
||||||
private String mEsn;
|
private String mEsn;
|
||||||
private String mMeid;
|
private String mMeid;
|
||||||
|
|
||||||
|
// A runnable which is used to automatically exit from ECM after a period of time.
|
||||||
|
private Runnable mExitEcmRunnable = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
exitEmergencyCallbackMode();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Registrant mPostDialHandler;
|
Registrant mPostDialHandler;
|
||||||
|
|
||||||
@@ -122,13 +136,16 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mCM.setOnCallRing(h, EVENT_CALL_RING, null);
|
mCM.setOnCallRing(h, EVENT_CALL_RING, null);
|
||||||
mSST.registerForNetworkAttach(h, EVENT_REGISTERED_TO_NETWORK, null);
|
mSST.registerForNetworkAttach(h, EVENT_REGISTERED_TO_NETWORK, null);
|
||||||
mCM.registerForNVReady(h, EVENT_NV_READY, null);
|
mCM.registerForNVReady(h, EVENT_NV_READY, null);
|
||||||
mCM.registerForCdmaCallWaiting(h,EVENT_CDMA_CALL_WAITING,null);
|
mCM.setEmergencyCallbackMode(h, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null);
|
||||||
mCM.setEmergencyCallbackMode(h, EVENT_EMERGENCY_CALLBACK_MODE, null);
|
|
||||||
|
|
||||||
|
|
||||||
//Change the system setting
|
//Change the system setting
|
||||||
SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE,
|
SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE,
|
||||||
new Integer(RILConstants.CDMA_PHONE).toString());
|
new Integer(RILConstants.CDMA_PHONE).toString());
|
||||||
|
|
||||||
|
// TODO(Moto): Is this needed to handle phone crashes and/or power cycling?
|
||||||
|
String inEcm=SystemProperties.get(PROPERTY_INECM_MODE, "false");
|
||||||
|
mIsPhoneInECMState = inEcm.equals("true");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
@@ -143,7 +160,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mSST.unregisterForNetworkAttach(h); //EVENT_REGISTERED_TO_NETWORK
|
mSST.unregisterForNetworkAttach(h); //EVENT_REGISTERED_TO_NETWORK
|
||||||
mCM.unSetOnSuppServiceNotification(h);
|
mCM.unSetOnSuppServiceNotification(h);
|
||||||
mCM.unSetOnCallRing(h);
|
mCM.unSetOnCallRing(h);
|
||||||
mCM.unregisterForCdmaCallWaiting(h);
|
|
||||||
|
|
||||||
//Force all referenced classes to unregister their former registered events
|
//Force all referenced classes to unregister their former registered events
|
||||||
mCT.dispose();
|
mCT.dispose();
|
||||||
@@ -370,8 +387,8 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
return mRuimRecords.getMdnNumber();
|
return mRuimRecords.getMdnNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMin() {
|
public String getCdmaMIN() {
|
||||||
return mRuimRecords.getMin();
|
return mRuimRecords.getCdmaMin();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getCallWaiting(Message onComplete) {
|
public void getCallWaiting(Message onComplete) {
|
||||||
@@ -434,7 +451,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setOnPostDialCharacter(Handler h, int what, Object obj) {
|
public void setOnPostDialCharacter(Handler h, int what, Object obj) {
|
||||||
Log.e(LOG_TAG, "setOnPostDialCharacter: not possible in CDMA");
|
mPostDialHandler = new Registrant(h, what, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean handlePinMmi(String dialString) {
|
public boolean handlePinMmi(String dialString) {
|
||||||
@@ -478,6 +495,30 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mDataConnection.setDataOnRoamingEnabled(enable);
|
mDataConnection.setDataOnRoamingEnabled(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
|
||||||
|
mCM.registerForCdmaOtaProvision(h, what, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCdmaOtaStatusChange(Handler h) {
|
||||||
|
mCM.unregisterForCdmaOtaProvision(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnEcbModeExitResponse(Handler h, int what, Object obj) {
|
||||||
|
mECMExitRespRegistrant = new Registrant (h, what, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsetOnEcbModeExitResponse(Handler h) {
|
||||||
|
mECMExitRespRegistrant.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerForCallWaiting(Handler h, int what, Object obj) {
|
||||||
|
Log.e(LOG_TAG, "method registerForCallWaiting is NOT yet supported in CDMA");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterForCallWaiting(Handler h) {
|
||||||
|
Log.e(LOG_TAG, "method unregisterForCallWaiting is NOT yet supported in CDMA");
|
||||||
|
}
|
||||||
|
|
||||||
public String getIpAddress(String apnType) {
|
public String getIpAddress(String apnType) {
|
||||||
return mDataConnection.getIpAddress();
|
return mDataConnection.getIpAddress();
|
||||||
}
|
}
|
||||||
@@ -565,7 +606,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mCM.stopDtmf(null);
|
mCM.stopDtmf(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendBurstDtmf(String dtmfString) {
|
public void sendBurstDtmf(String dtmfString, Message onComplete) {
|
||||||
boolean check = true;
|
boolean check = true;
|
||||||
for (int itr = 0;itr < dtmfString.length(); itr++) {
|
for (int itr = 0;itr < dtmfString.length(); itr++) {
|
||||||
if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) {
|
if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) {
|
||||||
@@ -576,7 +617,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((mCT.state == Phone.State.OFFHOOK)&&(check)) {
|
if ((mCT.state == Phone.State.OFFHOOK)&&(check)) {
|
||||||
mCM.sendBurstDtmf(dtmfString, null);
|
mCM.sendBurstDtmf(dtmfString, onComplete);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,7 +634,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) {
|
public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) {
|
||||||
Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA");
|
Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableLocationUpdates() {
|
public void enableLocationUpdates() {
|
||||||
@@ -630,7 +671,14 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
//TODO: Where can we get this value has to be clarified with QC
|
//TODO: Where can we get this value has to be clarified with QC
|
||||||
//return mSIMRecords.getVoiceMailNumber();
|
//return mSIMRecords.getVoiceMailNumber();
|
||||||
// throw new RuntimeException();
|
// throw new RuntimeException();
|
||||||
return "12345";
|
return "*86";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns Number of Voicemails
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getCountVoiceMessages() {
|
||||||
|
return mRuimRecords.getCountVoiceMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVoiceMailAlphaTag() {
|
public String getVoiceMailAlphaTag() {
|
||||||
@@ -648,7 +696,15 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean enableDataConnectivity() {
|
public boolean enableDataConnectivity() {
|
||||||
return mDataConnection.setDataEnabled(true);
|
|
||||||
|
// block data activities when phone is in emergency callback mode
|
||||||
|
if (mIsPhoneInECMState) {
|
||||||
|
Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS);
|
||||||
|
ActivityManagerNative.broadcastStickyIntent(intent, null);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return mDataConnection.setDataEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disableLocationUpdates() {
|
public void disableLocationUpdates() {
|
||||||
@@ -691,7 +747,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify any interested party of a Phone state change.
|
* Notify any interested party of a Phone state change.
|
||||||
*/
|
*/
|
||||||
/*package*/ void notifyPhoneStateChanged() {
|
/*package*/ void notifyPhoneStateChanged() {
|
||||||
@@ -736,6 +792,13 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mUnknownConnectionRegistrants.notifyResult(this);
|
mUnknownConnectionRegistrants.notifyResult(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sendEmergencyCallbackModeChange(){
|
||||||
|
//Send an Intent
|
||||||
|
Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
|
||||||
|
intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInECMState);
|
||||||
|
ActivityManagerNative.broadcastStickyIntent(intent,null);
|
||||||
|
}
|
||||||
|
|
||||||
/*package*/ void
|
/*package*/ void
|
||||||
updateMessageWaitingIndicator(boolean mwi) {
|
updateMessageWaitingIndicator(boolean mwi) {
|
||||||
// this also calls notifyMessageWaitingIndicator()
|
// this also calls notifyMessageWaitingIndicator()
|
||||||
@@ -761,6 +824,51 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, fc, null));
|
mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, fc, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exitEmergencyCallbackMode() {
|
||||||
|
// Send a message which will invoke handleExitEmergencyCallbackMode
|
||||||
|
mCM.exitEmergencyCallbackMode(h.obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleEnterEmergencyCallbackMode(Message msg) {
|
||||||
|
Log.d(LOG_TAG, "Event EVENT_EMERGENCY_CALLBACK_MODE Received");
|
||||||
|
// if phone is not in ECM mode, and it's changed to ECM mode
|
||||||
|
if (mIsPhoneInECMState == false) {
|
||||||
|
mIsPhoneInECMState = true;
|
||||||
|
// notify change
|
||||||
|
sendEmergencyCallbackModeChange();
|
||||||
|
setSystemProperty(PROPERTY_INECM_MODE, "true");
|
||||||
|
|
||||||
|
// Post this runnable so we will automatically exit
|
||||||
|
// if no one invokes exitEmergencyCallbackMode() directly.
|
||||||
|
// TODO(Moto): Get the delay a property so it can be adjusted
|
||||||
|
long delayInMillis = 300000; // 30,000 millis == 5 minutes
|
||||||
|
h.postDelayed(mExitEcmRunnable, delayInMillis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleExitEmergencyCallbackMode(Message msg) {
|
||||||
|
Log.d(LOG_TAG, "Event EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE Received");
|
||||||
|
AsyncResult ar = (AsyncResult)msg.obj;
|
||||||
|
|
||||||
|
// Remove pending exit ECM runnable, if any
|
||||||
|
h.removeCallbacks(mExitEcmRunnable);
|
||||||
|
|
||||||
|
if (mECMExitRespRegistrant != null) {
|
||||||
|
mECMExitRespRegistrant.notifyRegistrant(ar);
|
||||||
|
}
|
||||||
|
// if exiting ecm success
|
||||||
|
if (ar.exception == null) {
|
||||||
|
if (mIsPhoneInECMState) {
|
||||||
|
mIsPhoneInECMState = false;
|
||||||
|
setSystemProperty(PROPERTY_INECM_MODE, "false");
|
||||||
|
}
|
||||||
|
// send an Intent
|
||||||
|
sendEmergencyCallbackModeChange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//***** Inner Classes
|
//***** Inner Classes
|
||||||
class MyHandler extends Handler {
|
class MyHandler extends Handler {
|
||||||
MyHandler() {
|
MyHandler() {
|
||||||
@@ -770,6 +878,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
super(l);
|
super(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
AsyncResult ar;
|
AsyncResult ar;
|
||||||
Message onComplete;
|
Message onComplete;
|
||||||
@@ -806,12 +915,16 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_EMERGENCY_CALLBACK_MODE: {
|
case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{
|
||||||
Log.d(LOG_TAG, "Event EVENT_EMERGENCY_CALLBACK_MODE Received");
|
handleEnterEmergencyCallbackMode(msg);
|
||||||
Intent intent =
|
|
||||||
new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_ENTERED);
|
|
||||||
ActivityManagerNative.broadcastStickyIntent(intent, null);
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{
|
||||||
|
handleExitEmergencyCallbackMode(msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case EVENT_RUIM_RECORDS_LOADED:{
|
case EVENT_RUIM_RECORDS_LOADED:{
|
||||||
Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received");
|
Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received");
|
||||||
}
|
}
|
||||||
@@ -852,11 +965,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
Log.d(LOG_TAG, "ERI read, notify registrants");
|
Log.d(LOG_TAG, "ERI read, notify registrants");
|
||||||
mEriFileLoadedRegistrants.notifyRegistrants();
|
mEriFileLoadedRegistrants.notifyRegistrants();
|
||||||
}
|
}
|
||||||
}
|
setSystemProperty(PROPERTY_INECM_MODE,"false");
|
||||||
break;
|
|
||||||
|
|
||||||
case EVENT_CDMA_CALL_WAITING:{
|
|
||||||
Log.d(LOG_TAG, "Event EVENT_CDMA_CALL_WAITING Received");
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -867,26 +976,26 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the PhoneSubInfo of the CDMAPhone
|
* Retrieves the PhoneSubInfo of the CDMAPhone
|
||||||
*/
|
*/
|
||||||
public PhoneSubInfo getPhoneSubInfo(){
|
public PhoneSubInfo getPhoneSubInfo() {
|
||||||
return mSubInfo;
|
return mSubInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the IccSmsInterfaceManager of the CDMAPhone
|
* Retrieves the IccSmsInterfaceManager of the CDMAPhone
|
||||||
*/
|
*/
|
||||||
public IccSmsInterfaceManager getIccSmsInterfaceManager(){
|
public IccSmsInterfaceManager getIccSmsInterfaceManager() {
|
||||||
return mRuimSmsInterfaceManager;
|
return mRuimSmsInterfaceManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone
|
* Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone
|
||||||
*/
|
*/
|
||||||
public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){
|
public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() {
|
||||||
return mRuimPhoneBookInterfaceManager;
|
return mRuimPhoneBookInterfaceManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerForNvLoaded(Handler h, int what, Object obj) {
|
public void registerForNvLoaded(Handler h, int what, Object obj) {
|
||||||
Registrant r = new Registrant (h, what, obj);
|
Registrant r = new Registrant (h, what, obj);
|
||||||
@@ -906,97 +1015,146 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
mEriFileLoadedRegistrants.remove(h);
|
mEriFileLoadedRegistrants.remove(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
// override for allowing access from other classes of this package
|
// override for allowing access from other classes of this package
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public final void setSystemProperty(String property, String value) {
|
|
||||||
super.setSystemProperty(property, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public Handler getHandler(){
|
|
||||||
return h;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public IccFileHandler getIccFileHandler(){
|
|
||||||
return this.mIccFileHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the TTY mode of the CDMAPhone
|
|
||||||
*/
|
|
||||||
public void setTTYMode(int ttyMode, Message onComplete) {
|
|
||||||
this.mCM.setTTYMode(ttyMode, onComplete);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Queries the TTY mode of the CDMAPhone
|
|
||||||
*/
|
|
||||||
public void queryTTYMode(Message onComplete) {
|
|
||||||
this.mCM.queryTTYMode(onComplete);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends Exit EmergencyCallbackMode Exit request on CDMAPhone
|
|
||||||
*/
|
|
||||||
public void exitEmergencyCallbackMode(Message onComplete) {
|
|
||||||
this.mCM.exitEmergencyCallbackMode(onComplete);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Activate or deactivate cell broadcast SMS.
|
|
||||||
*
|
|
||||||
* @param activate
|
|
||||||
* 0 = activate, 1 = deactivate
|
|
||||||
* @param response
|
|
||||||
* Callback message is empty on completion
|
|
||||||
*/
|
|
||||||
public void activateCellBroadcastSms(int activate, Message response) {
|
|
||||||
mSMS.activateCellBroadcastSms(activate, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query the current configuration of cdma cell broadcast SMS.
|
|
||||||
*
|
|
||||||
* @param response
|
|
||||||
* Callback message is empty on completion
|
|
||||||
*/
|
|
||||||
public void getCellBroadcastSmsConfig(Message response){
|
|
||||||
mSMS.getCellBroadcastSmsConfig(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configure cdma cell broadcast SMS.
|
|
||||||
*
|
|
||||||
* @param response
|
|
||||||
* Callback message is empty on completion
|
|
||||||
*/
|
|
||||||
public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response){
|
|
||||||
mSMS.setCellBroadcastConfig(configValuesArray, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForOtaSessionStatus(Handler h, int what, Object obj){
|
|
||||||
mCM.registerForOtaSessionStatus(h, what, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForOtaSessionStatus(Handler h){
|
|
||||||
mCM.unregisterForOtaSessionStatus(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO(Teleca): The code in getCdmaEriIconIndex, getCdmaEriIconMode & getCdmaEriText share a
|
|
||||||
* lot of logic, refactor.
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* Returns the CDMA ERI icon index to display,
|
* {@inheritDoc}
|
||||||
* it returns 1, EriInfo.ROAMING_INDICATOR_OFF, in case there is no icon to display
|
|
||||||
*/
|
*/
|
||||||
|
public final void setSystemProperty(String property, String value) {
|
||||||
|
super.setSystemProperty(property, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public Handler getHandler() {
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public IccFileHandler getIccFileHandler() {
|
||||||
|
return this.mIccFileHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the TTY mode of the CDMAPhone
|
||||||
|
*/
|
||||||
|
public void setTTYMode(int ttyMode, Message onComplete) {
|
||||||
|
this.mCM.setTTYMode(ttyMode, onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries the TTY mode of the CDMAPhone
|
||||||
|
*/
|
||||||
|
public void queryTTYMode(Message onComplete) {
|
||||||
|
this.mCM.queryTTYMode(onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate or deactivate cell broadcast SMS.
|
||||||
|
*
|
||||||
|
* @param activate 0 = activate, 1 = deactivate
|
||||||
|
* @param response Callback message is empty on completion
|
||||||
|
*/
|
||||||
|
public void activateCellBroadcastSms(int activate, Message response) {
|
||||||
|
mSMS.activateCellBroadcastSms(activate, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query the current configuration of cdma cell broadcast SMS.
|
||||||
|
*
|
||||||
|
* @param response Callback message is empty on completion
|
||||||
|
*/
|
||||||
|
public void getCellBroadcastSmsConfig(Message response) {
|
||||||
|
mSMS.getCellBroadcastSmsConfig(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure cdma cell broadcast SMS.
|
||||||
|
*
|
||||||
|
* @param response Callback message is empty on completion
|
||||||
|
*/
|
||||||
|
public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) {
|
||||||
|
mSMS.setCellBroadcastConfig(configValuesArray, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String IS683A_FEATURE_CODE = "*228" ;
|
||||||
|
public static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4 ;
|
||||||
|
public static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2 ;
|
||||||
|
public static final int IS683A_SYS_SEL_CODE_OFFSET = 4;
|
||||||
|
|
||||||
|
private static final int IS683_CONST_800MHZ_A_BAND = 0;
|
||||||
|
private static final int IS683_CONST_800MHZ_B_BAND = 1;
|
||||||
|
private static final int IS683_CONST_1900MHZ_A_BLOCK = 2;
|
||||||
|
private static final int IS683_CONST_1900MHZ_B_BLOCK = 3;
|
||||||
|
private static final int IS683_CONST_1900MHZ_C_BLOCK = 4;
|
||||||
|
private static final int IS683_CONST_1900MHZ_D_BLOCK = 5;
|
||||||
|
private static final int IS683_CONST_1900MHZ_E_BLOCK = 6;
|
||||||
|
private static final int IS683_CONST_1900MHZ_F_BLOCK = 7;
|
||||||
|
|
||||||
|
private boolean isIs683OtaSpDialStr(String dialStr) {
|
||||||
|
int sysSelCodeInt;
|
||||||
|
boolean isOtaspDialString = false;
|
||||||
|
int dialStrLen = dialStr.length();
|
||||||
|
|
||||||
|
if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) {
|
||||||
|
if (dialStr.equals(IS683A_FEATURE_CODE)) {
|
||||||
|
isOtaspDialString = true;
|
||||||
|
}
|
||||||
|
} else if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 0,
|
||||||
|
IS683A_FEATURE_CODE_NUM_DIGITS) == true)
|
||||||
|
&& (dialStrLen >=
|
||||||
|
(IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS))) {
|
||||||
|
StringBuilder sb = new StringBuilder(dialStr);
|
||||||
|
// Separate the System Selection Code into its own string
|
||||||
|
char[] sysSel = new char[2];
|
||||||
|
sb.delete(0, IS683A_SYS_SEL_CODE_OFFSET);
|
||||||
|
sb.getChars(0, IS683A_SYS_SEL_CODE_NUM_DIGITS, sysSel, 0);
|
||||||
|
|
||||||
|
if ((PhoneNumberUtils.isISODigit(sysSel[0]))
|
||||||
|
&& (PhoneNumberUtils.isISODigit(sysSel[1]))) {
|
||||||
|
String sysSelCode = new String(sysSel);
|
||||||
|
sysSelCodeInt = Integer.parseInt((String)sysSelCode);
|
||||||
|
switch (sysSelCodeInt) {
|
||||||
|
case IS683_CONST_800MHZ_A_BAND:
|
||||||
|
case IS683_CONST_800MHZ_B_BAND:
|
||||||
|
case IS683_CONST_1900MHZ_A_BLOCK:
|
||||||
|
case IS683_CONST_1900MHZ_B_BLOCK:
|
||||||
|
case IS683_CONST_1900MHZ_C_BLOCK:
|
||||||
|
case IS683_CONST_1900MHZ_D_BLOCK:
|
||||||
|
case IS683_CONST_1900MHZ_E_BLOCK:
|
||||||
|
case IS683_CONST_1900MHZ_F_BLOCK:
|
||||||
|
isOtaspDialString = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isOtaspDialString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier
|
||||||
|
* OTASP dial string.
|
||||||
|
*
|
||||||
|
* @param dialStr the number to look up.
|
||||||
|
* @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isOtaSpNumber(String dialStr){
|
||||||
|
boolean isOtaSpNum = false;
|
||||||
|
if(dialStr != null){
|
||||||
|
isOtaSpNum=isIs683OtaSpDialStr(dialStr);
|
||||||
|
if(isOtaSpNum == false){
|
||||||
|
//TO DO:Add carrier specific OTASP number detection here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isOtaSpNum;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCdmaEriIconIndex() {
|
public int getCdmaEriIconIndex() {
|
||||||
int roamInd = getServiceState().getCdmaRoamingIndicator();
|
int roamInd = getServiceState().getCdmaRoamingIndicator();
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.os.RegistrantList;
|
|||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
import android.telephony.ServiceState;
|
import android.telephony.ServiceState;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
|
||||||
import com.android.internal.telephony.CallStateException;
|
import com.android.internal.telephony.CallStateException;
|
||||||
import com.android.internal.telephony.CallTracker;
|
import com.android.internal.telephony.CallTracker;
|
||||||
@@ -31,11 +32,12 @@ import com.android.internal.telephony.CommandsInterface;
|
|||||||
import com.android.internal.telephony.Connection;
|
import com.android.internal.telephony.Connection;
|
||||||
import com.android.internal.telephony.DriverCall;
|
import com.android.internal.telephony.DriverCall;
|
||||||
import com.android.internal.telephony.Phone;
|
import com.android.internal.telephony.Phone;
|
||||||
import com.android.internal.telephony.PhoneProxy;
|
import com.android.internal.telephony.TelephonyProperties;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
@@ -69,11 +71,12 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
|
|
||||||
CdmaConnection pendingMO;
|
CdmaConnection pendingMO;
|
||||||
boolean hangupPendingMO;
|
boolean hangupPendingMO;
|
||||||
|
boolean pendingCallInECM=false;
|
||||||
CDMAPhone phone;
|
CDMAPhone phone;
|
||||||
|
|
||||||
boolean desiredMute = false; // false = mute off
|
boolean desiredMute = false; // false = mute off
|
||||||
|
|
||||||
|
int pendingCallClirMode;
|
||||||
Phone.State state = Phone.State.IDLE;
|
Phone.State state = Phone.State.IDLE;
|
||||||
|
|
||||||
|
|
||||||
@@ -115,6 +118,7 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void finalize() {
|
protected void finalize() {
|
||||||
Log.d(LOG_TAG, "CdmaCallTracker finalized");
|
Log.d(LOG_TAG, "CdmaCallTracker finalized");
|
||||||
}
|
}
|
||||||
@@ -204,7 +208,15 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
// Always unmute when initiating a new call
|
// Always unmute when initiating a new call
|
||||||
setMute(false);
|
setMute(false);
|
||||||
|
|
||||||
cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());
|
String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
|
||||||
|
if(inEcm.equals("false")) {
|
||||||
|
cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());
|
||||||
|
} else {
|
||||||
|
phone.exitEmergencyCallbackMode();
|
||||||
|
phone.setOnEcbModeExitResponse(this,EVENT_EXIT_ECM_RESPONSE_CDMA, null);
|
||||||
|
pendingCallClirMode=clirMode;
|
||||||
|
pendingCallInECM=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePhoneState();
|
updatePhoneState();
|
||||||
@@ -536,6 +548,9 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
droppedDuringPoll.add(pendingMO);
|
droppedDuringPoll.add(pendingMO);
|
||||||
pendingMO = null;
|
pendingMO = null;
|
||||||
hangupPendingMO = false;
|
hangupPendingMO = false;
|
||||||
|
if( pendingCallInECM) {
|
||||||
|
pendingCallInECM = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newRinging != null) {
|
if (newRinging != null) {
|
||||||
@@ -847,8 +862,17 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
handleRadioNotAvailable();
|
handleRadioNotAvailable();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_EXIT_ECM_RESPONSE_CDMA:
|
||||||
|
//no matter the result, we still do the same here
|
||||||
|
if (pendingCallInECM) {
|
||||||
|
cm.dial(pendingMO.address, pendingCallClirMode, obtainCompleteMessage());
|
||||||
|
pendingCallInECM = false;
|
||||||
|
}
|
||||||
|
phone.unsetOnEcbModeExitResponse(this);
|
||||||
|
break;
|
||||||
|
|
||||||
default:{
|
default:{
|
||||||
throw new RuntimeException("unexpected event not handled");
|
throw new RuntimeException("unexpected event not handled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.internal.telephony.cdma;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.CdmaInformationRecord;
|
|
||||||
|
|
||||||
public class CdmaCallWaiting {
|
|
||||||
public String number;
|
|
||||||
public int numberPresentation;
|
|
||||||
public String name;
|
|
||||||
|
|
||||||
public CdmaInformationRecord.CdmaSignalInfoRec signalInfoRecord =
|
|
||||||
new CdmaInformationRecord.CdmaSignalInfoRec();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "CdmaCallWaiting: {" + " number: " + number + " numberPresentation: "
|
|
||||||
+ numberPresentation + " name: " + name + " signalInfoRecord: "
|
|
||||||
+ signalInfoRecord + " }";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.internal.telephony.cdma;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Supplementary Service Notification received from the network.
|
||||||
|
*
|
||||||
|
* {@hide}
|
||||||
|
*/
|
||||||
|
public class CdmaCallWaitingNotification {
|
||||||
|
public String number =null;
|
||||||
|
public int numberPresentation = 0;
|
||||||
|
public String name = null;
|
||||||
|
public int namePresentation = 0;
|
||||||
|
public int isPresent = 0;
|
||||||
|
public int signalType = 0;
|
||||||
|
public int alertPitch = 0;
|
||||||
|
public int signal = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return super.toString() + "Call Waiting Notification "
|
||||||
|
+ " number: " + number
|
||||||
|
+ " numberPresentation: " + numberPresentation
|
||||||
|
+ " name: " + name
|
||||||
|
+ " namePresentation: " + namePresentation
|
||||||
|
+ " isPresent: " + isPresent
|
||||||
|
+ " signalType: " + signalType
|
||||||
|
+ " alertPitch: " + alertPitch
|
||||||
|
+ " signal: " + signal ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -48,7 +48,7 @@ public class CdmaConnection extends Connection {
|
|||||||
String postDialString; // outgoing calls only
|
String postDialString; // outgoing calls only
|
||||||
boolean isIncoming;
|
boolean isIncoming;
|
||||||
boolean disconnected;
|
boolean disconnected;
|
||||||
|
String cnapName;
|
||||||
int index; // index in CdmaCallTracker.connections[], -1 if unassigned
|
int index; // index in CdmaCallTracker.connections[], -1 if unassigned
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -74,6 +74,8 @@ public class CdmaConnection extends Connection {
|
|||||||
DisconnectCause cause = DisconnectCause.NOT_DISCONNECTED;
|
DisconnectCause cause = DisconnectCause.NOT_DISCONNECTED;
|
||||||
PostDialState postDialState = PostDialState.NOT_STARTED;
|
PostDialState postDialState = PostDialState.NOT_STARTED;
|
||||||
int numberPresentation = Connection.PRESENTATION_ALLOWED;
|
int numberPresentation = Connection.PRESENTATION_ALLOWED;
|
||||||
|
int cnapNamePresentation = Connection.PRESENTATION_ALLOWED;
|
||||||
|
|
||||||
|
|
||||||
Handler h;
|
Handler h;
|
||||||
|
|
||||||
@@ -86,10 +88,19 @@ public class CdmaConnection extends Connection {
|
|||||||
static final int EVENT_WAKE_LOCK_TIMEOUT = 4;
|
static final int EVENT_WAKE_LOCK_TIMEOUT = 4;
|
||||||
|
|
||||||
//***** Constants
|
//***** Constants
|
||||||
static final int PAUSE_DELAY_FIRST_MILLIS = 100;
|
|
||||||
static final int PAUSE_DELAY_MILLIS = 3 * 1000;
|
|
||||||
static final int WAKE_LOCK_TIMEOUT_MILLIS = 60*1000;
|
static final int WAKE_LOCK_TIMEOUT_MILLIS = 60*1000;
|
||||||
|
static final int PAUSE_DELAY_MILLIS = 2 * 1000;
|
||||||
|
|
||||||
|
// TODO(Moto): These should be come from a resourse file
|
||||||
|
// at a minimum as different carriers may want to use
|
||||||
|
// different characters and our general default is "," & ";".
|
||||||
|
// Furthermore Android supports contacts that have phone
|
||||||
|
// numbers entered as strings so '1-800-164flowers' would not
|
||||||
|
// be handled as expected. Both issues need to be resolved.
|
||||||
|
static final char CUSTOMERIZED_WAIT_CHAR_UPPER ='W';
|
||||||
|
static final char CUSTOMERIZED_WAIT_CHAR_LOWER ='w';
|
||||||
|
static final char CUSTOMERIZED_PAUSE_CHAR_UPPER ='P';
|
||||||
|
static final char CUSTOMERIZED_PAUSE_CHAR_LOWER ='p';
|
||||||
//***** Inner Classes
|
//***** Inner Classes
|
||||||
|
|
||||||
class MyHandler extends Handler {
|
class MyHandler extends Handler {
|
||||||
@@ -126,6 +137,8 @@ public class CdmaConnection extends Connection {
|
|||||||
|
|
||||||
isIncoming = dc.isMT;
|
isIncoming = dc.isMT;
|
||||||
createTime = System.currentTimeMillis();
|
createTime = System.currentTimeMillis();
|
||||||
|
cnapName = dc.name;
|
||||||
|
cnapNamePresentation = dc.namePresentation;
|
||||||
numberPresentation = dc.numberPresentation;
|
numberPresentation = dc.numberPresentation;
|
||||||
|
|
||||||
this.index = index;
|
this.index = index;
|
||||||
@@ -134,6 +147,16 @@ public class CdmaConnection extends Connection {
|
|||||||
parent.attach(this, dc);
|
parent.attach(this, dc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CdmaConnection () {
|
||||||
|
owner = null;
|
||||||
|
h = null;
|
||||||
|
address = null;
|
||||||
|
index = -1;
|
||||||
|
parent = null;
|
||||||
|
isIncoming = true;
|
||||||
|
createTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
/** This is an MO call, created when dialing */
|
/** This is an MO call, created when dialing */
|
||||||
/*package*/
|
/*package*/
|
||||||
CdmaConnection (Context context, String dialString, CdmaCallTracker ct, CdmaCall parent) {
|
CdmaConnection (Context context, String dialString, CdmaCallTracker ct, CdmaCall parent) {
|
||||||
@@ -144,6 +167,9 @@ public class CdmaConnection extends Connection {
|
|||||||
h = new MyHandler(owner.getLooper());
|
h = new MyHandler(owner.getLooper());
|
||||||
|
|
||||||
this.dialString = dialString;
|
this.dialString = dialString;
|
||||||
|
Log.d(LOG_TAG, "[CDMAConn] CdmaConnection: dialString=" + dialString);
|
||||||
|
dialString = formatDialString(dialString);
|
||||||
|
Log.d(LOG_TAG, "[CDMAConn] CdmaConnection:formated dialString=" + dialString);
|
||||||
|
|
||||||
this.address = PhoneNumberUtils.extractNetworkPortion(dialString);
|
this.address = PhoneNumberUtils.extractNetworkPortion(dialString);
|
||||||
this.postDialString = PhoneNumberUtils.extractPostDialPortion(dialString);
|
this.postDialString = PhoneNumberUtils.extractPostDialPortion(dialString);
|
||||||
@@ -151,10 +177,15 @@ public class CdmaConnection extends Connection {
|
|||||||
index = -1;
|
index = -1;
|
||||||
|
|
||||||
isIncoming = false;
|
isIncoming = false;
|
||||||
|
cnapName = null;
|
||||||
|
cnapNamePresentation = 0;
|
||||||
|
numberPresentation = 0;
|
||||||
createTime = System.currentTimeMillis();
|
createTime = System.currentTimeMillis();
|
||||||
|
|
||||||
this.parent = parent;
|
if (parent != null) {
|
||||||
parent.attachFake(this, CdmaCall.State.DIALING);
|
this.parent = parent;
|
||||||
|
parent.attachFake(this, CdmaCall.State.DIALING);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
@@ -186,10 +217,22 @@ public class CdmaConnection extends Connection {
|
|||||||
return (isIncoming ? "incoming" : "outgoing");
|
return (isIncoming ? "incoming" : "outgoing");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getOrigDialString(){
|
||||||
|
return dialString;
|
||||||
|
}
|
||||||
|
|
||||||
public String getAddress() {
|
public String getAddress() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCnapName() {
|
||||||
|
return cnapName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCnapNamePresentation() {
|
||||||
|
return cnapNamePresentation;
|
||||||
|
}
|
||||||
|
|
||||||
public CdmaCall getCall() {
|
public CdmaCall getCall() {
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
@@ -320,6 +363,16 @@ public class CdmaConnection extends Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for 3way call only
|
||||||
|
*/
|
||||||
|
void update (CdmaConnection c) {
|
||||||
|
address = c.address;
|
||||||
|
cnapName = c.cnapName;
|
||||||
|
cnapNamePresentation = c.cnapNamePresentation;
|
||||||
|
numberPresentation = c.numberPresentation;
|
||||||
|
}
|
||||||
|
|
||||||
public void cancelPostDial() {
|
public void cancelPostDial() {
|
||||||
setPostDialState(PostDialState.CANCELLED);
|
setPostDialState(PostDialState.CANCELLED);
|
||||||
}
|
}
|
||||||
@@ -355,7 +408,7 @@ public class CdmaConnection extends Connection {
|
|||||||
case CallFailCause.CDMA_LOCKED_UNTIL_POWER_CYCLE:
|
case CallFailCause.CDMA_LOCKED_UNTIL_POWER_CYCLE:
|
||||||
return DisconnectCause.CDMA_LOCKED_UNTIL_POWER_CYCLE;
|
return DisconnectCause.CDMA_LOCKED_UNTIL_POWER_CYCLE;
|
||||||
case CallFailCause.CDMA_DROP:
|
case CallFailCause.CDMA_DROP:
|
||||||
return DisconnectCause.CDMA_DROP;
|
return DisconnectCause.LOST_SIGNAL; // TODO(Moto): wink/dave changed from CDMA_DROP;
|
||||||
case CallFailCause.CDMA_INTERCEPT:
|
case CallFailCause.CDMA_INTERCEPT:
|
||||||
return DisconnectCause.CDMA_INTERCEPT;
|
return DisconnectCause.CDMA_INTERCEPT;
|
||||||
case CallFailCause.CDMA_REORDER:
|
case CallFailCause.CDMA_REORDER:
|
||||||
@@ -434,6 +487,20 @@ public class CdmaConnection extends Connection {
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A null cnapName should be the same as ""
|
||||||
|
if (null != dc.name) {
|
||||||
|
if (cnapName != dc.name) {
|
||||||
|
cnapName = dc.name;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cnapName = "";
|
||||||
|
// TODO(Moto): Should changed = true if cnapName wasn't previously ""
|
||||||
|
}
|
||||||
|
log("--dssds----"+cnapName);
|
||||||
|
cnapNamePresentation = dc.namePresentation;
|
||||||
|
numberPresentation = dc.numberPresentation;
|
||||||
|
|
||||||
if (newParent != parent) {
|
if (newParent != parent) {
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.detach(this);
|
parent.detach(this);
|
||||||
@@ -533,25 +600,13 @@ public class CdmaConnection extends Connection {
|
|||||||
if (PhoneNumberUtils.is12Key(c)) {
|
if (PhoneNumberUtils.is12Key(c)) {
|
||||||
owner.cm.sendDtmf(c, h.obtainMessage(EVENT_DTMF_DONE));
|
owner.cm.sendDtmf(c, h.obtainMessage(EVENT_DTMF_DONE));
|
||||||
} else if (c == PhoneNumberUtils.PAUSE) {
|
} else if (c == PhoneNumberUtils.PAUSE) {
|
||||||
// From TS 22.101:
|
setPostDialState(PostDialState.PAUSE);
|
||||||
|
|
||||||
// "The first occurrence of the "DTMF Control Digits Separator"
|
// Upon occurrences of the separator, the UE shall
|
||||||
// shall be used by the ME to distinguish between the addressing
|
// pause again for 2 seconds before sending any
|
||||||
// digits (i.e. the phone number) and the DTMF digits...."
|
// further DTMF digits.
|
||||||
|
h.sendMessageDelayed(h.obtainMessage(EVENT_PAUSE_DONE),
|
||||||
if (nextPostDialChar == 1) {
|
|
||||||
// The first occurrence.
|
|
||||||
// We don't need to pause here, but wait for just a bit anyway
|
|
||||||
h.sendMessageDelayed(h.obtainMessage(EVENT_PAUSE_DONE),
|
|
||||||
PAUSE_DELAY_FIRST_MILLIS);
|
|
||||||
} else {
|
|
||||||
// It continues...
|
|
||||||
// "Upon subsequent occurrences of the separator, the UE shall
|
|
||||||
// pause again for 3 seconds (\u00B1 20 %) before sending any
|
|
||||||
// further DTMF digits."
|
|
||||||
h.sendMessageDelayed(h.obtainMessage(EVENT_PAUSE_DONE),
|
|
||||||
PAUSE_DELAY_MILLIS);
|
PAUSE_DELAY_MILLIS);
|
||||||
}
|
|
||||||
} else if (c == PhoneNumberUtils.WAIT) {
|
} else if (c == PhoneNumberUtils.WAIT) {
|
||||||
setPostDialState(PostDialState.WAIT);
|
setPostDialState(PostDialState.WAIT);
|
||||||
} else if (c == PhoneNumberUtils.WILD) {
|
} else if (c == PhoneNumberUtils.WILD) {
|
||||||
@@ -563,17 +618,40 @@ public class CdmaConnection extends Connection {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String
|
public String getRemainingPostDialString() {
|
||||||
getRemainingPostDialString() {
|
|
||||||
if (postDialState == PostDialState.CANCELLED
|
if (postDialState == PostDialState.CANCELLED
|
||||||
|| postDialState == PostDialState.COMPLETE
|
|| postDialState == PostDialState.COMPLETE
|
||||||
|| postDialString == null
|
|| postDialString == null
|
||||||
|| postDialString.length() <= nextPostDialChar
|
|| postDialString.length() <= nextPostDialChar) {
|
||||||
) {
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
return postDialString.substring(nextPostDialChar);
|
String subStr = postDialString.substring(nextPostDialChar);
|
||||||
|
if (subStr != null) {
|
||||||
|
int wIndex = subStr.indexOf(PhoneNumberUtils.WAIT);
|
||||||
|
int pIndex = subStr.indexOf(PhoneNumberUtils.PAUSE);
|
||||||
|
|
||||||
|
// TODO(Moto): Courtesy of jsh; is this simpler expression equivalent?
|
||||||
|
//
|
||||||
|
// if (wIndex > 0 && (wIndex < pIndex || pIndex <= 0)) {
|
||||||
|
// subStr = subStr.substring(0, wIndex);
|
||||||
|
// } else if (pIndex > 0) {
|
||||||
|
// subStr = subStr.substring(0, pIndex);
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (wIndex > 0 && pIndex > 0) {
|
||||||
|
if (wIndex > pIndex) {
|
||||||
|
subStr = subStr.substring(0, pIndex);
|
||||||
|
} else {
|
||||||
|
subStr = subStr.substring(0, wIndex);
|
||||||
|
}
|
||||||
|
} else if (wIndex > 0) {
|
||||||
|
subStr = subStr.substring(0, wIndex);
|
||||||
|
} else if (pIndex > 0) {
|
||||||
|
subStr = subStr.substring(0, pIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return subStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -591,8 +669,7 @@ public class CdmaConnection extends Connection {
|
|||||||
releaseWakeLock();
|
releaseWakeLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void
|
void processNextPostDialChar() {
|
||||||
processNextPostDialChar() {
|
|
||||||
char c = 0;
|
char c = 0;
|
||||||
Registrant postDialHandler;
|
Registrant postDialHandler;
|
||||||
|
|
||||||
@@ -698,21 +775,18 @@ public class CdmaConnection extends Connection {
|
|||||||
postDialState = s;
|
postDialState = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void
|
private void createWakeLock(Context context) {
|
||||||
createWakeLock(Context context) {
|
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
||||||
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
|
||||||
mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
|
mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void
|
private void acquireWakeLock() {
|
||||||
acquireWakeLock() {
|
|
||||||
log("acquireWakeLock");
|
log("acquireWakeLock");
|
||||||
mPartialWakeLock.acquire();
|
mPartialWakeLock.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void
|
private void releaseWakeLock() {
|
||||||
releaseWakeLock() {
|
synchronized (mPartialWakeLock) {
|
||||||
synchronized(mPartialWakeLock) {
|
|
||||||
if (mPartialWakeLock.isHeld()) {
|
if (mPartialWakeLock.isHeld()) {
|
||||||
log("releaseWakeLock");
|
log("releaseWakeLock");
|
||||||
mPartialWakeLock.release();
|
mPartialWakeLock.release();
|
||||||
@@ -720,6 +794,119 @@ public class CdmaConnection extends Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isPause(char c) {
|
||||||
|
if (c == CUSTOMERIZED_PAUSE_CHAR_UPPER || c == CUSTOMERIZED_PAUSE_CHAR_LOWER
|
||||||
|
|| c == PhoneNumberUtils.PAUSE) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isWait(char c) {
|
||||||
|
if (c == CUSTOMERIZED_WAIT_CHAR_LOWER || c == CUSTOMERIZED_WAIT_CHAR_UPPER
|
||||||
|
|| c == PhoneNumberUtils.WAIT) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* format string
|
||||||
|
* convert "+" to "011"
|
||||||
|
* handle corner cases for PAUSE/WAIT
|
||||||
|
* If PAUSE/WAIT sequence at the end,ignore them
|
||||||
|
* If PAUSE/WAIT sequence in the middle, then if there is any WAIT
|
||||||
|
* in PAUSE/WAIT sequence, treat them like WAIT
|
||||||
|
* If PAUSE followed by WAIT or WAIT followed by PAUSE in the middle,
|
||||||
|
* treat them like just PAUSE or WAIT
|
||||||
|
*/
|
||||||
|
private static String formatDialString(String phoneNumber) {
|
||||||
|
if (phoneNumber == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int length = phoneNumber.length();
|
||||||
|
StringBuilder ret = new StringBuilder();
|
||||||
|
|
||||||
|
// TODO(Moto): Modifying the for loop index is confusing, a
|
||||||
|
// while loop is probably better and overall this code is
|
||||||
|
// hard to follow. If this was routine was refactored and
|
||||||
|
// used several private methods with good names to make it
|
||||||
|
// easier to follow.
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
char c = phoneNumber.charAt(i);
|
||||||
|
|
||||||
|
if (PhoneNumberUtils.isDialable(c)) {
|
||||||
|
if (c == '+') {
|
||||||
|
// TODO(Moto): Is this valid for "all" countries????
|
||||||
|
// should probably be pulled from a resource based
|
||||||
|
// on current contry code (MCC).
|
||||||
|
ret.append("011");
|
||||||
|
} else {
|
||||||
|
ret.append(c);
|
||||||
|
}
|
||||||
|
} else if (isPause(c) || isWait(c)) {
|
||||||
|
if (i < length - 1) { // if PAUSE/WAIT not at the end
|
||||||
|
int index = 0;
|
||||||
|
boolean wMatched = false;
|
||||||
|
for (index = i + 1; index < length; index++) {
|
||||||
|
char cNext = phoneNumber.charAt(index);
|
||||||
|
// if there is any W inside P/W sequence,mark it
|
||||||
|
if (isWait(cNext)) {
|
||||||
|
wMatched = true;
|
||||||
|
}
|
||||||
|
// if any characters other than P/W chars after P/W sequence
|
||||||
|
// we break out the loop and append the correct
|
||||||
|
if (!isWait(cNext) && !isPause(cNext)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (index == length) {
|
||||||
|
// it means there is no dialable character after PAUSE/WAIT
|
||||||
|
i = length - 1;
|
||||||
|
break;
|
||||||
|
} else {// means index <length
|
||||||
|
if (isPause(c)) {
|
||||||
|
c = PhoneNumberUtils.PAUSE;
|
||||||
|
} else if (isWait(c)) {
|
||||||
|
c = PhoneNumberUtils.WAIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == i + 1) {
|
||||||
|
ret.append(c);
|
||||||
|
} else if (isWait(c)) {
|
||||||
|
// for case like 123WP456 =123P456
|
||||||
|
if ((index == i + 2) && isPause(phoneNumber.charAt(index - 1))) {
|
||||||
|
// skip W,append P
|
||||||
|
ret.append(PhoneNumberUtils.PAUSE);
|
||||||
|
} else {
|
||||||
|
// append W
|
||||||
|
ret.append(c);
|
||||||
|
}
|
||||||
|
i = index - 1;
|
||||||
|
} else if (isPause(c)) {
|
||||||
|
|
||||||
|
// for case like 123PW456 =123W456, skip p, append W
|
||||||
|
// or there is 1 W in between, treat the whole PW
|
||||||
|
// sequence as W
|
||||||
|
if (wMatched == true) {
|
||||||
|
// skip P,append W
|
||||||
|
ret.append(PhoneNumberUtils.WAIT);
|
||||||
|
i = index - 1;
|
||||||
|
} else {
|
||||||
|
ret.append(c);
|
||||||
|
}
|
||||||
|
} // end of pause case
|
||||||
|
} // end of index <length, it means dialable characters after P/W
|
||||||
|
}
|
||||||
|
} else { // if it's characters other than P/W
|
||||||
|
ret.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private void log(String msg) {
|
private void log(String msg) {
|
||||||
Log.d(LOG_TAG, "[CDMAConn] " + msg);
|
Log.d(LOG_TAG, "[CDMAConn] " + msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.internal.telephony.cdma;
|
||||||
|
import static com.android.internal.telephony.RILConstants.*;
|
||||||
|
|
||||||
|
public final class CdmaInformationRecords {
|
||||||
|
public static final int RIL_CDMA_DISPLAY_INFO_REC = 0;
|
||||||
|
public static final int RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC = 1;
|
||||||
|
public static final int RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC = 2;
|
||||||
|
public static final int RIL_CDMA_CONNECTED_NUMBER_INFO_REC = 3;
|
||||||
|
public static final int RIL_CDMA_SIGNAL_INFO_REC = 4;
|
||||||
|
public static final int RIL_CDMA_REDIRECTING_NUMBER_INFO_REC = 5;
|
||||||
|
public static final int RIL_CDMA_LINE_CONTROL_INFO_REC = 6;
|
||||||
|
public static final int RIL_CDMA_EXTENDED_DISPLAY_INFO_REC = 7;
|
||||||
|
public static final int RIL_CDMA_T53_CLIR_INFO_REC = 8;
|
||||||
|
public static final int RIL_CDMA_T53_RELEASE_INFO_REC = 9;
|
||||||
|
public static final int RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC = 10;
|
||||||
|
|
||||||
|
public boolean isDispInfo;
|
||||||
|
public boolean isSignInfo;
|
||||||
|
public String cdmaDisplayInfoRecord;
|
||||||
|
public int[] cdmaSignalInfoRecord;
|
||||||
|
|
||||||
|
private static final int ALPHA_LEN_FOR_DISPLAY_INFO = 64;
|
||||||
|
|
||||||
|
public CdmaInformationRecords() {
|
||||||
|
isDispInfo = false;
|
||||||
|
isSignInfo = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDispInfo(String resString) {
|
||||||
|
isDispInfo = true;
|
||||||
|
cdmaDisplayInfoRecord = resString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSignInfo(int isPresent, int signalType, int alertPitch, int signal) {
|
||||||
|
isSignInfo = true;
|
||||||
|
cdmaSignalInfoRecord = new int[4];
|
||||||
|
cdmaSignalInfoRecord[0] = isPresent;
|
||||||
|
cdmaSignalInfoRecord[1] = signalType;
|
||||||
|
cdmaSignalInfoRecord[2] = alertPitch;
|
||||||
|
cdmaSignalInfoRecord[3] = signal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String recordToString (int record) {
|
||||||
|
switch(record) {
|
||||||
|
case RIL_CDMA_DISPLAY_INFO_REC: return "RIL_CDMA_DISPLAY_INFO_REC";
|
||||||
|
case RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC: return "RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC";
|
||||||
|
case RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC: return "RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC";
|
||||||
|
case RIL_CDMA_CONNECTED_NUMBER_INFO_REC: return "RIL_CDMA_CONNECTED_NUMBER_INFO_REC";
|
||||||
|
case RIL_CDMA_SIGNAL_INFO_REC: return "RIL_CDMA_SIGNAL_INFO_REC";
|
||||||
|
case RIL_CDMA_REDIRECTING_NUMBER_INFO_REC: return "RIL_CDMA_REDIRECTING_NUMBER_INFO_REC";
|
||||||
|
case RIL_CDMA_LINE_CONTROL_INFO_REC: return "RIL_CDMA_LINE_CONTROL_INFO_REC";
|
||||||
|
case RIL_CDMA_EXTENDED_DISPLAY_INFO_REC: return "RIL_CDMA_EXTENDED_DISPLAY_INFO_REC";
|
||||||
|
case RIL_CDMA_T53_CLIR_INFO_REC: return "RIL_CDMA_T53_CLIR_INFO_REC";
|
||||||
|
case RIL_CDMA_T53_RELEASE_INFO_REC: return "RIL_CDMA_T53_RELEASE_INFO_REC";
|
||||||
|
case RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC: return "RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC";
|
||||||
|
default: return "<unknown record>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ import android.database.ContentObserver;
|
|||||||
import android.os.AsyncResult;
|
import android.os.AsyncResult;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.PowerManager;
|
||||||
import android.os.Registrant;
|
import android.os.Registrant;
|
||||||
import android.os.RegistrantList;
|
import android.os.RegistrantList;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
@@ -38,7 +39,9 @@ import android.telephony.cdma.CdmaCellLocation;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.EventLog;
|
import android.util.EventLog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.util.Config;
|
||||||
import android.util.TimeUtils;
|
import android.util.TimeUtils;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
import com.android.internal.telephony.CommandException;
|
import com.android.internal.telephony.CommandException;
|
||||||
import com.android.internal.telephony.CommandsInterface;
|
import com.android.internal.telephony.CommandsInterface;
|
||||||
@@ -100,12 +103,26 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
private RegistrantList cdmaDataConnectionAttachedRegistrants = new RegistrantList();
|
private RegistrantList cdmaDataConnectionAttachedRegistrants = new RegistrantList();
|
||||||
private RegistrantList cdmaDataConnectionDetachedRegistrants = new RegistrantList();
|
private RegistrantList cdmaDataConnectionDetachedRegistrants = new RegistrantList();
|
||||||
|
|
||||||
|
// Sometimes we get the NITZ time before we know what country we are in.
|
||||||
|
// Keep the time zone information from the NITZ string so we can fix
|
||||||
|
// the time zone once know the country.
|
||||||
|
private boolean mNeedFixZone = false;
|
||||||
|
private int mZoneOffset;
|
||||||
|
private boolean mZoneDst;
|
||||||
|
private long mZoneTime;
|
||||||
private boolean mGotCountryCode = false;
|
private boolean mGotCountryCode = false;
|
||||||
|
String mSavedTimeZone;
|
||||||
|
long mSavedTime;
|
||||||
|
long mSavedAtTime;
|
||||||
|
|
||||||
// We can't register for SIM_RECORDS_LOADED immediately because the
|
// We can't register for SIM_RECORDS_LOADED immediately because the
|
||||||
// SIMRecords object may not be instantiated yet.
|
// SIMRecords object may not be instantiated yet.
|
||||||
private boolean mNeedToRegForRuimLoaded;
|
private boolean mNeedToRegForRuimLoaded;
|
||||||
|
|
||||||
|
// Wake lock used while setting time of day.
|
||||||
|
private PowerManager.WakeLock mWakeLock;
|
||||||
|
private static final String WAKELOCK_TAG = "ServiceStateTracker";
|
||||||
|
|
||||||
// Keep track of SPN display rules, so we only broadcast intent if something changes.
|
// Keep track of SPN display rules, so we only broadcast intent if something changes.
|
||||||
private String curSpn = null;
|
private String curSpn = null;
|
||||||
private String curEriText = null;
|
private String curEriText = null;
|
||||||
@@ -134,7 +151,8 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
Log.i("CdmaServiceStateTracker", "Auto time state called ...");
|
Log.i("CdmaServiceStateTracker", "Auto time state called ...");
|
||||||
//NOTE in CDMA NITZ is not used
|
revertToNitz();
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -152,10 +170,15 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
newCellLoc = new CdmaCellLocation();
|
newCellLoc = new CdmaCellLocation();
|
||||||
mSignalStrength = new SignalStrength();
|
mSignalStrength = new SignalStrength();
|
||||||
|
|
||||||
|
PowerManager powerManager =
|
||||||
|
(PowerManager)phone.getContext().getSystemService(Context.POWER_SERVICE);
|
||||||
|
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG);
|
||||||
|
|
||||||
cm.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null);
|
cm.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null);
|
||||||
cm.registerForRadioStateChanged(this, EVENT_RADIO_STATE_CHANGED, null);
|
cm.registerForRadioStateChanged(this, EVENT_RADIO_STATE_CHANGED, null);
|
||||||
|
|
||||||
cm.registerForNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED_CDMA, null);
|
cm.registerForNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED_CDMA, null);
|
||||||
|
cm.setOnNITZTime(this, EVENT_NITZ_TIME, null);
|
||||||
cm.setOnSignalStrengthUpdate(this, EVENT_SIGNAL_STRENGTH_UPDATE, null);
|
cm.setOnSignalStrengthUpdate(this, EVENT_SIGNAL_STRENGTH_UPDATE, null);
|
||||||
|
|
||||||
cm.registerForRUIMReady(this, EVENT_RUIM_READY, null);
|
cm.registerForRUIMReady(this, EVENT_RUIM_READY, null);
|
||||||
@@ -188,6 +211,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
phone.unregisterForEriFileLoaded(this);
|
phone.unregisterForEriFileLoaded(this);
|
||||||
phone.mRuimRecords.unregisterForRecordsLoaded(this);
|
phone.mRuimRecords.unregisterForRecordsLoaded(this);
|
||||||
cm.unSetOnSignalStrengthUpdate(this);
|
cm.unSetOnSignalStrengthUpdate(this);
|
||||||
|
cm.unSetOnNITZTime(this);
|
||||||
cr.unregisterContentObserver(this.mAutoTimeObserver);
|
cr.unregisterContentObserver(this.mAutoTimeObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,6 +402,15 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
cm.getSignalStrength(obtainMessage(EVENT_GET_SIGNAL_STRENGTH));
|
cm.getSignalStrength(obtainMessage(EVENT_GET_SIGNAL_STRENGTH));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_NITZ_TIME:
|
||||||
|
ar = (AsyncResult) msg.obj;
|
||||||
|
|
||||||
|
String nitzString = (String)((Object[])ar.result)[0];
|
||||||
|
long nitzReceiveTime = ((Long)((Object[])ar.result)[1]).longValue();
|
||||||
|
|
||||||
|
setTimeFromNITZString(nitzString, nitzReceiveTime);
|
||||||
|
break;
|
||||||
|
|
||||||
case EVENT_SIGNAL_STRENGTH_UPDATE:
|
case EVENT_SIGNAL_STRENGTH_UPDATE:
|
||||||
// This is a notification from
|
// This is a notification from
|
||||||
// CommandsInterface.setOnSignalStrengthUpdate
|
// CommandsInterface.setOnSignalStrengthUpdate
|
||||||
@@ -800,8 +833,44 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void
|
private void fixTimeZone(String isoCountryCode) {
|
||||||
pollStateDone() {
|
TimeZone zone = null;
|
||||||
|
// If the offset is (0, false) and the time zone property
|
||||||
|
// is set, use the time zone property rather than GMT.
|
||||||
|
String zoneName = SystemProperties.get(TIMEZONE_PROPERTY);
|
||||||
|
if ((mZoneOffset == 0) && (mZoneDst == false) && (zoneName != null)
|
||||||
|
&& (zoneName.length() > 0)
|
||||||
|
&& (Arrays.binarySearch(GMT_COUNTRY_CODES, isoCountryCode) < 0)) {
|
||||||
|
// For NITZ string without time zone,
|
||||||
|
// need adjust time to reflect default time zone setting
|
||||||
|
zone = TimeZone.getDefault();
|
||||||
|
long tzOffset;
|
||||||
|
tzOffset = zone.getOffset(System.currentTimeMillis());
|
||||||
|
if (getAutoTime()) {
|
||||||
|
setAndBroadcastNetworkSetTime(System.currentTimeMillis() - tzOffset);
|
||||||
|
} else {
|
||||||
|
// Adjust the saved NITZ time to account for tzOffset.
|
||||||
|
mSavedTime = mSavedTime - tzOffset;
|
||||||
|
}
|
||||||
|
} else if (isoCountryCode.equals("")) {
|
||||||
|
// Country code not found. This is likely a test network.
|
||||||
|
// Get a TimeZone based only on the NITZ parameters (best guess).
|
||||||
|
zone = getNitzTimeZone(mZoneOffset, mZoneDst, mZoneTime);
|
||||||
|
} else {
|
||||||
|
zone = TimeUtils.getTimeZone(mZoneOffset, mZoneDst, mZoneTime, isoCountryCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
mNeedFixZone = false;
|
||||||
|
|
||||||
|
if (zone != null) {
|
||||||
|
if (getAutoTime()) {
|
||||||
|
setAndBroadcastNetworkSetTimeZone(zone.getID());
|
||||||
|
}
|
||||||
|
saveNitzTimeZone(zone.getID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pollStateDone() {
|
||||||
if (DBG) log("Poll ServiceState done: oldSS=[" + ss + "] newSS=[" + newSS + "]");
|
if (DBG) log("Poll ServiceState done: oldSS=[" + ss + "] newSS=[" + newSS + "]");
|
||||||
|
|
||||||
boolean hasRegistered =
|
boolean hasRegistered =
|
||||||
@@ -896,9 +965,9 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
if (operatorNumeric == null) {
|
if (operatorNumeric == null) {
|
||||||
phone.setSystemProperty(PROPERTY_OPERATOR_ISO_COUNTRY, "");
|
phone.setSystemProperty(PROPERTY_OPERATOR_ISO_COUNTRY, "");
|
||||||
} else {
|
} else {
|
||||||
String iso = "";
|
String isoCountryCode = "";
|
||||||
try{
|
try{
|
||||||
iso = MccTable.countryCodeForMcc(Integer.parseInt(
|
isoCountryCode = MccTable.countryCodeForMcc(Integer.parseInt(
|
||||||
operatorNumeric.substring(0,3)));
|
operatorNumeric.substring(0,3)));
|
||||||
} catch ( NumberFormatException ex){
|
} catch ( NumberFormatException ex){
|
||||||
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
||||||
@@ -906,8 +975,11 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
phone.setSystemProperty(PROPERTY_OPERATOR_ISO_COUNTRY, iso);
|
phone.setSystemProperty(PROPERTY_OPERATOR_ISO_COUNTRY, isoCountryCode);
|
||||||
mGotCountryCode = true;
|
mGotCountryCode = true;
|
||||||
|
if (mNeedFixZone) {
|
||||||
|
fixTimeZone(isoCountryCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
phone.setSystemProperty(PROPERTY_OPERATOR_ISROAMING,
|
phone.setSystemProperty(PROPERTY_OPERATOR_ISROAMING,
|
||||||
@@ -1123,6 +1195,169 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
return cdmaRoaming && !(equalsOnsl || equalsOnss);
|
return cdmaRoaming && !(equalsOnsl || equalsOnss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nitzReceiveTime is time_t that the NITZ time was posted
|
||||||
|
*/
|
||||||
|
|
||||||
|
private
|
||||||
|
void setTimeFromNITZString (String nitz, long nitzReceiveTime)
|
||||||
|
{
|
||||||
|
// "yy/mm/dd,hh:mm:ss(+/-)tz"
|
||||||
|
// tz is in number of quarter-hours
|
||||||
|
|
||||||
|
long start = SystemClock.elapsedRealtime();
|
||||||
|
Log.i(LOG_TAG, "NITZ: " + nitz + "," + nitzReceiveTime +
|
||||||
|
" start=" + start + " delay=" + (start - nitzReceiveTime));
|
||||||
|
|
||||||
|
try {
|
||||||
|
/* NITZ time (hour:min:sec) will be in UTC but it supplies the timezone
|
||||||
|
* offset as well (which we won't worry about until later) */
|
||||||
|
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
|
||||||
|
|
||||||
|
c.clear();
|
||||||
|
c.set(Calendar.DST_OFFSET, 0);
|
||||||
|
|
||||||
|
String[] nitzSubs = nitz.split("[/:,+-]");
|
||||||
|
|
||||||
|
int year = 2000 + Integer.parseInt(nitzSubs[0]);
|
||||||
|
c.set(Calendar.YEAR, year);
|
||||||
|
|
||||||
|
// month is 0 based!
|
||||||
|
int month = Integer.parseInt(nitzSubs[1]) - 1;
|
||||||
|
c.set(Calendar.MONTH, month);
|
||||||
|
|
||||||
|
int date = Integer.parseInt(nitzSubs[2]);
|
||||||
|
c.set(Calendar.DATE, date);
|
||||||
|
|
||||||
|
int hour = Integer.parseInt(nitzSubs[3]);
|
||||||
|
c.set(Calendar.HOUR, hour);
|
||||||
|
|
||||||
|
int minute = Integer.parseInt(nitzSubs[4]);
|
||||||
|
c.set(Calendar.MINUTE, minute);
|
||||||
|
|
||||||
|
int second = Integer.parseInt(nitzSubs[5]);
|
||||||
|
c.set(Calendar.SECOND, second);
|
||||||
|
|
||||||
|
boolean sign = (nitz.indexOf('-') == -1);
|
||||||
|
|
||||||
|
int tzOffset = Integer.parseInt(nitzSubs[6]);
|
||||||
|
|
||||||
|
int dst = (nitzSubs.length >= 8 ) ? Integer.parseInt(nitzSubs[7])
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
// The zone offset received from NITZ is for current local time,
|
||||||
|
// so DST correction is already applied. Don't add it again.
|
||||||
|
//
|
||||||
|
// tzOffset += dst * 4;
|
||||||
|
//
|
||||||
|
// We could unapply it if we wanted the raw offset.
|
||||||
|
|
||||||
|
tzOffset = (sign ? 1 : -1) * tzOffset * 15 * 60 * 1000;
|
||||||
|
|
||||||
|
TimeZone zone = null;
|
||||||
|
|
||||||
|
// As a special extension, the Android emulator appends the name of
|
||||||
|
// the host computer's timezone to the nitz string. this is zoneinfo
|
||||||
|
// timezone name of the form Area!Location or Area!Location!SubLocation
|
||||||
|
// so we need to convert the ! into /
|
||||||
|
if (nitzSubs.length >= 9) {
|
||||||
|
String tzname = nitzSubs[8].replace('!','/');
|
||||||
|
zone = TimeZone.getTimeZone( tzname );
|
||||||
|
}
|
||||||
|
|
||||||
|
String iso = SystemProperties.get(PROPERTY_OPERATOR_ISO_COUNTRY);
|
||||||
|
|
||||||
|
if (zone == null) {
|
||||||
|
|
||||||
|
if (mGotCountryCode) {
|
||||||
|
if (iso != null && iso.length() > 0) {
|
||||||
|
zone = TimeUtils.getTimeZone(tzOffset, dst != 0,
|
||||||
|
c.getTimeInMillis(),
|
||||||
|
iso);
|
||||||
|
} else {
|
||||||
|
// We don't have a valid iso country code. This is
|
||||||
|
// most likely because we're on a test network that's
|
||||||
|
// using a bogus MCC (eg, "001"), so get a TimeZone
|
||||||
|
// based only on the NITZ parameters.
|
||||||
|
zone = getNitzTimeZone(tzOffset, (dst != 0), c.getTimeInMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zone == null) {
|
||||||
|
// We got the time before the country, so we don't know
|
||||||
|
// how to identify the DST rules yet. Save the information
|
||||||
|
// and hope to fix it up later.
|
||||||
|
|
||||||
|
mNeedFixZone = true;
|
||||||
|
mZoneOffset = tzOffset;
|
||||||
|
mZoneDst = dst != 0;
|
||||||
|
mZoneTime = c.getTimeInMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zone != null) {
|
||||||
|
if (getAutoTime()) {
|
||||||
|
setAndBroadcastNetworkSetTimeZone(zone.getID());
|
||||||
|
}
|
||||||
|
saveNitzTimeZone(zone.getID());
|
||||||
|
}
|
||||||
|
|
||||||
|
String ignore = SystemProperties.get("gsm.ignore-nitz");
|
||||||
|
if (ignore != null && ignore.equals("yes")) {
|
||||||
|
Log.i(LOG_TAG, "NITZ: Not setting clock because gsm.ignore-nitz is set");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mWakeLock.acquire();
|
||||||
|
|
||||||
|
if (getAutoTime()) {
|
||||||
|
long millisSinceNitzReceived
|
||||||
|
= SystemClock.elapsedRealtime() - nitzReceiveTime;
|
||||||
|
|
||||||
|
if (millisSinceNitzReceived < 0) {
|
||||||
|
// Sanity check: something is wrong
|
||||||
|
Log.i(LOG_TAG, "NITZ: not setting time, clock has rolled "
|
||||||
|
+ "backwards since NITZ time was received, "
|
||||||
|
+ nitz);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (millisSinceNitzReceived > Integer.MAX_VALUE) {
|
||||||
|
// If the time is this far off, something is wrong > 24 days!
|
||||||
|
Log.i(LOG_TAG, "NITZ: not setting time, processing has taken "
|
||||||
|
+ (millisSinceNitzReceived / (1000 * 60 * 60 * 24))
|
||||||
|
+ " days");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: with range checks above, cast to int is safe
|
||||||
|
c.add(Calendar.MILLISECOND, (int)millisSinceNitzReceived);
|
||||||
|
|
||||||
|
Log.i(LOG_TAG, "NITZ: Setting time of day to " + c.getTime()
|
||||||
|
+ " NITZ receive delay(ms): " + millisSinceNitzReceived
|
||||||
|
+ " gained(ms): "
|
||||||
|
+ (c.getTimeInMillis() - System.currentTimeMillis())
|
||||||
|
+ " from " + nitz);
|
||||||
|
|
||||||
|
setAndBroadcastNetworkSetTime(c.getTimeInMillis());
|
||||||
|
Log.i(LOG_TAG, "NITZ: after Setting time of day");
|
||||||
|
}
|
||||||
|
SystemProperties.set("gsm.nitz.time", String.valueOf(c.getTimeInMillis()));
|
||||||
|
saveNitzTime(c.getTimeInMillis());
|
||||||
|
if (Config.LOGV) {
|
||||||
|
long end = SystemClock.elapsedRealtime();
|
||||||
|
Log.v(LOG_TAG, "NITZ: end=" + end + " dur=" + (end - start));
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
mWakeLock.release();
|
||||||
|
}
|
||||||
|
} catch (RuntimeException ex) {
|
||||||
|
Log.e(LOG_TAG, "NITZ: Parsing NITZ time " + nitz, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean getAutoTime() {
|
private boolean getAutoTime() {
|
||||||
try {
|
try {
|
||||||
return Settings.System.getInt(phone.getContext().getContentResolver(),
|
return Settings.System.getInt(phone.getContext().getContentResolver(),
|
||||||
@@ -1132,6 +1367,58 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveNitzTimeZone(String zoneId) {
|
||||||
|
mSavedTimeZone = zoneId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveNitzTime(long time) {
|
||||||
|
mSavedTime = time;
|
||||||
|
mSavedAtTime = SystemClock.elapsedRealtime();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the timezone and send out a sticky broadcast so the system can
|
||||||
|
* determine if the timezone was set by the carrier.
|
||||||
|
*
|
||||||
|
* @param zoneId timezone set by carrier
|
||||||
|
*/
|
||||||
|
private void setAndBroadcastNetworkSetTimeZone(String zoneId) {
|
||||||
|
AlarmManager alarm =
|
||||||
|
(AlarmManager) phone.getContext().getSystemService(Context.ALARM_SERVICE);
|
||||||
|
alarm.setTimeZone(zoneId);
|
||||||
|
Intent intent = new Intent(TelephonyIntents.ACTION_NETWORK_SET_TIMEZONE);
|
||||||
|
intent.putExtra("time-zone", zoneId);
|
||||||
|
phone.getContext().sendStickyBroadcast(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the time and Send out a sticky broadcast so the system can determine
|
||||||
|
* if the time was set by the carrier.
|
||||||
|
*
|
||||||
|
* @param time time set by network
|
||||||
|
*/
|
||||||
|
private void setAndBroadcastNetworkSetTime(long time) {
|
||||||
|
SystemClock.setCurrentTimeMillis(time);
|
||||||
|
Intent intent = new Intent(TelephonyIntents.ACTION_NETWORK_SET_TIME);
|
||||||
|
intent.putExtra("time", time);
|
||||||
|
phone.getContext().sendStickyBroadcast(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void revertToNitz() {
|
||||||
|
if (Settings.System.getInt(phone.getContext().getContentResolver(),
|
||||||
|
Settings.System.AUTO_TIME, 0) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone
|
||||||
|
+ "' mSavedTime=" + mSavedTime
|
||||||
|
+ " mSavedAtTime=" + mSavedAtTime);
|
||||||
|
if (mSavedTimeZone != null && mSavedTime != 0 && mSavedAtTime != 0) {
|
||||||
|
setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
|
||||||
|
setAndBroadcastNetworkSetTime(mSavedTime
|
||||||
|
+ (SystemClock.elapsedRealtime() - mSavedAtTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if phone is camping on a technology
|
* @return true if phone is camping on a technology
|
||||||
* that could support voice and data simultaneously.
|
* that could support voice and data simultaneously.
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public final class FeatureCode extends Handler implements MmiCode {
|
|||||||
|
|
||||||
CDMAPhone phone;
|
CDMAPhone phone;
|
||||||
Context context;
|
Context context;
|
||||||
|
CdmaConnection suppConn;
|
||||||
String action; // '*' in CDMA
|
String action; // '*' in CDMA
|
||||||
String sc; // Service Code
|
String sc; // Service Code
|
||||||
String poundString; // Entire Flash string
|
String poundString; // Entire Flash string
|
||||||
@@ -239,8 +239,15 @@ public final class FeatureCode extends Handler implements MmiCode {
|
|||||||
/** Process a Flash Code...anything that isn't a dialing number */
|
/** Process a Flash Code...anything that isn't a dialing number */
|
||||||
void processCode () {
|
void processCode () {
|
||||||
Log.d(LOG_TAG, "send feature code...");
|
Log.d(LOG_TAG, "send feature code...");
|
||||||
phone.mCM.sendCDMAFeatureCode(this.poundString,
|
if (this.poundString != null) {
|
||||||
obtainMessage(EVENT_CDMA_FLASH_COMPLETED));
|
// TODO(Moto): Is suppConn going away?
|
||||||
|
suppConn = new CdmaConnection(phone.getContext(), this.poundString, phone.mCT, null);
|
||||||
|
phone.mCM.sendCDMAFeatureCode(suppConn.address,
|
||||||
|
obtainMessage(EVENT_CDMA_FLASH_COMPLETED));
|
||||||
|
} else {
|
||||||
|
phone.mCM.sendCDMAFeatureCode(this.poundString,
|
||||||
|
obtainMessage(EVENT_CDMA_FLASH_COMPLETED));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called from CDMAPhone.handleMessage; not a Handler subclass */
|
/** Called from CDMAPhone.handleMessage; not a Handler subclass */
|
||||||
@@ -261,6 +268,7 @@ public final class FeatureCode extends Handler implements MmiCode {
|
|||||||
} else {
|
} else {
|
||||||
state = State.COMPLETE;
|
state = State.COMPLETE;
|
||||||
message = context.getText(com.android.internal.R.string.fcComplete);
|
message = context.getText(com.android.internal.R.string.fcComplete);
|
||||||
|
suppConn.processNextPostDialChar();
|
||||||
}
|
}
|
||||||
phone.onFeatureCodeDone(this);
|
phone.onFeatureCodeDone(this);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ import com.android.internal.telephony.IccRecords;
|
|||||||
import com.android.internal.telephony.IccUtils;
|
import com.android.internal.telephony.IccUtils;
|
||||||
import com.android.internal.telephony.PhoneProxy;
|
import com.android.internal.telephony.PhoneProxy;
|
||||||
|
|
||||||
|
import com.android.internal.telephony.TelephonyIntents;
|
||||||
|
import android.app.ActivityManagerNative;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
@@ -47,6 +51,7 @@ public final class RuimRecords extends IccRecords {
|
|||||||
static final String LOG_TAG = "CDMA";
|
static final String LOG_TAG = "CDMA";
|
||||||
|
|
||||||
private static final boolean DBG = true;
|
private static final boolean DBG = true;
|
||||||
|
private boolean m_ota_commited=false;
|
||||||
|
|
||||||
//***** Instance Variables
|
//***** Instance Variables
|
||||||
|
|
||||||
@@ -73,6 +78,7 @@ public final class RuimRecords extends IccRecords {
|
|||||||
private static final int EVENT_GET_SMS_DONE = 22;
|
private static final int EVENT_GET_SMS_DONE = 22;
|
||||||
|
|
||||||
private static final int EVENT_RUIM_REFRESH = 31;
|
private static final int EVENT_RUIM_REFRESH = 31;
|
||||||
|
private static final int EVENT_OTA_PROVISION_STATUS_CHANGE = 32;
|
||||||
|
|
||||||
RuimRecords(CDMAPhone p) {
|
RuimRecords(CDMAPhone p) {
|
||||||
super(p);
|
super(p);
|
||||||
@@ -93,6 +99,7 @@ public final class RuimRecords extends IccRecords {
|
|||||||
|
|
||||||
// Start off by setting empty state
|
// Start off by setting empty state
|
||||||
onRadioOffOrNotAvailable();
|
onRadioOffOrNotAvailable();
|
||||||
|
p.mCM.registerForCdmaOtaProvision(this,EVENT_OTA_PROVISION_STATUS_CHANGE, null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,6 +108,8 @@ public final class RuimRecords extends IccRecords {
|
|||||||
phone.mCM.unregisterForRUIMReady(this);
|
phone.mCM.unregisterForRUIMReady(this);
|
||||||
phone.mCM.unregisterForOffOrNotAvailable( this);
|
phone.mCM.unregisterForOffOrNotAvailable( this);
|
||||||
phone.mCM.unSetOnIccRefresh(this);
|
phone.mCM.unSetOnIccRefresh(this);
|
||||||
|
phone.mCM.unregisterForNVReady(this);
|
||||||
|
phone.mCM.unregisterForCdmaOtaProvision(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -134,7 +143,7 @@ public final class RuimRecords extends IccRecords {
|
|||||||
return mMyMobileNumber;
|
return mMyMobileNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMin() {
|
public String getCdmaMin() {
|
||||||
return mMin2Min1;
|
return mMin2Min1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,11 +228,21 @@ public final class RuimRecords extends IccRecords {
|
|||||||
if (ar.exception != null) {
|
if (ar.exception != null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if(m_ota_commited) {
|
||||||
|
if(mMyMobileNumber != localTemp[0]) {
|
||||||
|
Intent intent = new Intent(TelephonyIntents.ACTION_CDMA_OTA_MDN_CHANGED);
|
||||||
|
intent.putExtra("mdn", localTemp[0]);
|
||||||
|
Log.d(LOG_TAG,"Broadcasting intent MDN Change in OTA ");
|
||||||
|
ActivityManagerNative.broadcastStickyIntent(intent, null);
|
||||||
|
}
|
||||||
|
m_ota_commited=false;
|
||||||
|
}
|
||||||
mMyMobileNumber = localTemp[0];
|
mMyMobileNumber = localTemp[0];
|
||||||
mSid = localTemp[1];
|
mSid = localTemp[1];
|
||||||
mNid = localTemp[2];
|
mNid = localTemp[2];
|
||||||
mMin2Min1 = localTemp[3];
|
if (localTemp.length >= 3) { // TODO(Moto): remove when new ril always returns min2_min1
|
||||||
|
mMin2Min1 = localTemp[3];
|
||||||
|
}
|
||||||
|
|
||||||
Log.d(LOG_TAG, "MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1);
|
Log.d(LOG_TAG, "MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1);
|
||||||
|
|
||||||
@@ -272,6 +291,19 @@ public final class RuimRecords extends IccRecords {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_OTA_PROVISION_STATUS_CHANGE:
|
||||||
|
m_ota_commited=false;
|
||||||
|
ar = (AsyncResult)msg.obj;
|
||||||
|
if (ar.exception == null) {
|
||||||
|
int[] ints = (int[]) ar.result;
|
||||||
|
int otaStatus = ints[0];
|
||||||
|
if (otaStatus== phone.CDMA_OTA_PROVISION_STATUS_COMMITTED) {
|
||||||
|
m_ota_commited=true;
|
||||||
|
phone.mCM.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
}}catch (RuntimeException exc) {
|
}}catch (RuntimeException exc) {
|
||||||
// I don't want these exceptions to be fatal
|
// I don't want these exceptions to be fatal
|
||||||
Log.w(LOG_TAG, "Exception parsing RUIM record", exc);
|
Log.w(LOG_TAG, "Exception parsing RUIM record", exc);
|
||||||
@@ -374,17 +406,17 @@ public final class RuimRecords extends IccRecords {
|
|||||||
|
|
||||||
switch ((result[0])) {
|
switch ((result[0])) {
|
||||||
case CommandsInterface.SIM_REFRESH_FILE_UPDATED:
|
case CommandsInterface.SIM_REFRESH_FILE_UPDATED:
|
||||||
if (DBG) log("handleRuimRefresh with SIM_REFRESH_FILE_UPDATED");
|
if (DBG) log("handleRuimRefresh with SIM_REFRESH_FILE_UPDATED");
|
||||||
adnCache.reset();
|
adnCache.reset();
|
||||||
fetchRuimRecords();
|
fetchRuimRecords();
|
||||||
break;
|
break;
|
||||||
case CommandsInterface.SIM_REFRESH_INIT:
|
case CommandsInterface.SIM_REFRESH_INIT:
|
||||||
if (DBG) log("handleRuimRefresh with SIM_REFRESH_INIT");
|
if (DBG) log("handleRuimRefresh with SIM_REFRESH_INIT");
|
||||||
// need to reload all files (that we care about)
|
// need to reload all files (that we care about)
|
||||||
fetchRuimRecords();
|
fetchRuimRecords();
|
||||||
break;
|
break;
|
||||||
case CommandsInterface.SIM_REFRESH_RESET:
|
case CommandsInterface.SIM_REFRESH_RESET:
|
||||||
if (DBG) log("handleRuimRefresh with SIM_REFRESH_RESET");
|
if (DBG) log("handleRuimRefresh with SIM_REFRESH_RESET");
|
||||||
phone.mCM.setRadioPower(false, null);
|
phone.mCM.setRadioPower(false, null);
|
||||||
/* Note: no need to call setRadioPower(true). Assuming the desired
|
/* Note: no need to call setRadioPower(true). Assuming the desired
|
||||||
* radio power state is still ON (as tracked by ServiceStateTracker),
|
* radio power state is still ON (as tracked by ServiceStateTracker),
|
||||||
@@ -396,7 +428,7 @@ public final class RuimRecords extends IccRecords {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// unknown refresh operation
|
// unknown refresh operation
|
||||||
if (DBG) log("handleRuimRefresh with unknown operation");
|
if (DBG) log("handleRuimRefresh with unknown operation");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,272 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.internal.telephony.cdma;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.media.ToneGenerator;
|
||||||
|
|
||||||
|
public class SignalToneUtil {
|
||||||
|
// public final int int IS95_CONST_IR_SIGNAL_TYPE_TYPE;
|
||||||
|
static public final int IS95_CONST_IR_SIGNAL_TONE = 0;
|
||||||
|
static public final int IS95_CONST_IR_SIGNAL_ISDN = 1;
|
||||||
|
static public final int IS95_CONST_IR_SIGNAL_IS54B = 2;
|
||||||
|
static public final int IS95_CONST_IR_SIGNAL_USR_DEFD_ALERT = 4;
|
||||||
|
|
||||||
|
// public final int int IS95_CONST_IR_ALERT_PITCH_TYPE;
|
||||||
|
static public final int IS95_CONST_IR_ALERT_MED = 0;
|
||||||
|
static public final int IS95_CONST_IR_ALERT_HIGH = 1;
|
||||||
|
static public final int IS95_CONST_IR_ALERT_LOW = 2;
|
||||||
|
static public final int TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN = 255;
|
||||||
|
|
||||||
|
// public final int int IS95_CONST_IR_SIGNAL_TYPE;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_NORMAL = 0;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_INTGRP = 1;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_SP_PRI = 2;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_PAT_3 = 3;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_PING = 4;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_PAT_5 = 5;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_PAT_6 = 6;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_PAT_7 = 7;
|
||||||
|
static public final int IS95_CONST_IR_SIG_ISDN_OFF = 15;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_DIAL = 0;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_RING = 1;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_INT = 2;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_ABB_INT = 3;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_REORDER = 4;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_ABB_RE = 5;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_BUSY = 6;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_CONFIRM = 7;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_ANSWER = 8;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_CALL_W = 9;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_PIP = 10;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_NO_TONE = 63;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_NO_TONE = 0;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_L = 1;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_SS = 2;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_SSL = 3;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_SS_2 = 4;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_SLS = 5;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_S_X4 = 6;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_PBX_L = 7;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_PBX_SS = 8;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_PBX_SSL = 9;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_PBX_SLS = 10;
|
||||||
|
static public final int IS95_CONST_IR_SIG_IS54B_PBX_S_X4 = 11;
|
||||||
|
static public final int IS95_CONST_IR_SIG_TONE_ABBR_ALRT = 0;
|
||||||
|
|
||||||
|
// Hashmap to map signalInfo To AudioTone
|
||||||
|
static private HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
|
||||||
|
|
||||||
|
private static Integer signalParamHash(int signalType, int alertPitch, int signal) {
|
||||||
|
// TODO(Moto): The input should get checked before usage
|
||||||
|
return new Integer(signalType * 256 * 256 + alertPitch * 256 + signal);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getAudioToneFromSignalInfo(int signalType, int alertPitch, int signal) {
|
||||||
|
int result = ToneGenerator.TONE_CDMA_INVALID;
|
||||||
|
result = hm.get(signalParamHash(signalType, alertPitch, signal));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
|
||||||
|
/* SIGNAL_TYPE_ISDN */
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_NORMAL), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_INTGRP),
|
||||||
|
ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_SP_PRI), ToneGenerator.TONE_CDMA_CALL_SIGNAL_SP_PRI);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_PAT_3), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_PAT3);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_PING), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_RING_RING);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_PAT_5), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_PAT5);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_PAT_6), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_PAT6);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_PAT_7), ToneGenerator.TONE_CDMA_CALL_SIGNAL_ISDN_PAT7);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_ISDN, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_ISDN_OFF), ToneGenerator.TONE_CDMA_SIGNAL_OFF);
|
||||||
|
|
||||||
|
/* SIGNAL_TYPE_TONE */
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_DIAL), ToneGenerator.TONE_CDMA_DIAL_TONE_LITE);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_RING), ToneGenerator.TONE_CDMA_NETWORK_USA_RINGBACK);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_INT), ToneGenerator.TONE_SUP_INTERCEPT);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_ABB_INT), ToneGenerator.TONE_SUP_INTERCEPT_ABBREV);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_REORDER), ToneGenerator.TONE_CDMA_REORDER);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_ABB_RE), ToneGenerator.TONE_CDMA_ABBR_REORDER);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_BUSY), ToneGenerator.TONE_CDMA_NETWORK_BUSY);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_CONFIRM), ToneGenerator.TONE_SUP_CONFIRM);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_ANSWER), ToneGenerator.TONE_CDMA_ANSWER);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_ABB_RE), ToneGenerator.TONE_CDMA_NETWORK_CALLWAITING);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_PIP), ToneGenerator.TONE_CDMA_PIP);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_TONE, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_TONE_NO_TONE), ToneGenerator.TONE_CDMA_SIGNAL_OFF);
|
||||||
|
|
||||||
|
/* SIGNAL_TYPE_IS54B */
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_L), ToneGenerator.TONE_CDMA_HIGH_L);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_L), ToneGenerator.TONE_CDMA_INVALID);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_L), ToneGenerator.TONE_CDMA_LOW_L);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS), ToneGenerator.TONE_CDMA_HIGH_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS), ToneGenerator.TONE_CDMA_MED_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS), ToneGenerator.TONE_CDMA_LOW_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SSL), ToneGenerator.TONE_CDMA_HIGH_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SSL), ToneGenerator.TONE_CDMA_MED_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SSL), ToneGenerator.TONE_CDMA_LOW_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS_2), ToneGenerator.TONE_CDMA_HIGH_SS_2);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS_2), ToneGenerator.TONE_CDMA_MED_SS_2);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SS_2), ToneGenerator.TONE_CDMA_LOW_SS_2);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SLS), ToneGenerator.TONE_CDMA_HIGH_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SLS), ToneGenerator.TONE_CDMA_MED_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_SLS), ToneGenerator.TONE_CDMA_LOW_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_S_X4), ToneGenerator.TONE_CDMA_HIGH_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_S_X4), ToneGenerator.TONE_CDMA_MED_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_S_X4), ToneGenerator.TONE_CDMA_LOW_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_L), ToneGenerator.TONE_CDMA_HIGH_PBX_L);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_L), ToneGenerator.TONE_CDMA_MED_PBX_L);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_L), ToneGenerator.TONE_CDMA_LOW_PBX_L);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SS), ToneGenerator.TONE_CDMA_HIGH_PBX_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SS), ToneGenerator.TONE_CDMA_MED_PBX_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SS), ToneGenerator.TONE_CDMA_LOW_PBX_SS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SSL), ToneGenerator.TONE_CDMA_HIGH_PBX_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SSL), ToneGenerator.TONE_CDMA_MED_PBX_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SSL), ToneGenerator.TONE_CDMA_LOW_PBX_SSL);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SLS), ToneGenerator.TONE_CDMA_HIGH_PBX_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SLS), ToneGenerator.TONE_CDMA_MED_PBX_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_SLS), ToneGenerator.TONE_CDMA_LOW_PBX_SLS);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_HIGH,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_S_X4), ToneGenerator.TONE_CDMA_HIGH_PBX_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_MED,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_S_X4), ToneGenerator.TONE_CDMA_MED_PBX_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, IS95_CONST_IR_ALERT_LOW,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_PBX_S_X4), ToneGenerator.TONE_CDMA_LOW_PBX_S_X4);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_IS54B, TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN,
|
||||||
|
IS95_CONST_IR_SIG_IS54B_NO_TONE), ToneGenerator.TONE_CDMA_SIGNAL_OFF);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_USR_DEFD_ALERT,
|
||||||
|
TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN, IS95_CONST_IR_SIG_TONE_ABBR_ALRT),
|
||||||
|
ToneGenerator.TONE_CDMA_ABBR_ALERT);
|
||||||
|
|
||||||
|
hm.put(signalParamHash(IS95_CONST_IR_SIGNAL_USR_DEFD_ALERT,
|
||||||
|
TAPIAMSSCDMA_SIGNAL_PITCH_UNKNOWN, IS95_CONST_IR_SIG_TONE_NO_TONE),
|
||||||
|
ToneGenerator.TONE_CDMA_ABBR_ALERT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// suppress default constructor for noninstantiability
|
||||||
|
private SignalToneUtil() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -878,11 +878,6 @@ public class GSMPhone extends PhoneBase {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMin() {
|
|
||||||
Log.e(LOG_TAG, "[GSMPhone] getMin() is a CDMA method");
|
|
||||||
return "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDeviceId() {
|
public String getDeviceId() {
|
||||||
return mImei;
|
return mImei;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1137,7 +1137,7 @@ public final class SimulatedCommands extends BaseCommands
|
|||||||
String number, Message result) {unimplemented(result);}
|
String number, Message result) {unimplemented(result);}
|
||||||
|
|
||||||
public void setNetworkSelectionModeAutomatic(Message result) {unimplemented(result);}
|
public void setNetworkSelectionModeAutomatic(Message result) {unimplemented(result);}
|
||||||
|
public void exitEmergencyCallbackMode(Message result) {unimplemented(result);}
|
||||||
public void setNetworkSelectionModeManual(
|
public void setNetworkSelectionModeManual(
|
||||||
String operatorNumeric, Message result) {unimplemented(result);}
|
String operatorNumeric, Message result) {unimplemented(result);}
|
||||||
|
|
||||||
@@ -1460,10 +1460,6 @@ public final class SimulatedCommands extends BaseCommands
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exitEmergencyCallbackMode(Message response) {
|
|
||||||
// TODO method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
public void forceDataDormancy(Message response) {
|
public void forceDataDormancy(Message response) {
|
||||||
// TODO method stub
|
// TODO method stub
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user