diff options
author | Andrew Mahone <andrew.mahone@gmail.com> | 2012-07-11 01:30:39 -0400 |
---|---|---|
committer | Andrew Mahone <andrew.mahone@gmail.com> | 2012-07-11 03:02:32 -0400 |
commit | 4dbd01b5bd6a39aa9217b6a0c75c6ff8b7b62f7b (patch) | |
tree | 1ea8e1ea0dd2260cc5fc3fae7f5a8f67195263cc | |
parent | 4de07207865a24737f0bad0f036843064f2ba7e5 (diff) | |
download | frameworks_base-4dbd01b5bd6a39aa9217b6a0c75c6ff8b7b62f7b.zip frameworks_base-4dbd01b5bd6a39aa9217b6a0c75c6ff8b7b62f7b.tar.gz frameworks_base-4dbd01b5bd6a39aa9217b6a0c75c6ff8b7b62f7b.tar.bz2 |
Add RIL class for D2 GSM devices with Samsung video call field.
Add a new RIL class with responseCallList that handles the Samsung video call
field. Fixes stuck on hangup and missed incoming call on d2att.
Change-Id: I3204283876a0d1c8af4c6df1c04d8c34c3a6131f
-rw-r--r-- | telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java b/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java new file mode 100644 index 0000000..bd7c1d5 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012 The CyanogenMod 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; + +import static com.android.internal.telephony.RILConstants.*; + +import android.content.Context; +import android.os.Parcel; +import android.os.SystemProperties; +import android.util.Log; +import com.android.internal.telephony.RILConstants; +import java.util.Collections; +import android.telephony.PhoneNumberUtils; + +import java.util.ArrayList; + +/** + * Custom RIL to handle unique behavior of D2 radio + * + * {@hide} + */ +public class SamsungQualcommD2RIL extends SamsungQualcommUiccRIL implements CommandsInterface { + public SamsungQualcommD2RIL(Context context, int networkMode, int cdmaSubscription) { + super(context, networkMode, cdmaSubscription); + } + + @Override + protected Object + responseCallList(Parcel p) { + int num; + int voiceSettings; + ArrayList<DriverCall> response; + DriverCall dc; + + num = p.readInt(); + response = new ArrayList<DriverCall>(num); + + for (int i = 0 ; i < num ; i++) { + dc = new DriverCall(); + + dc.state = DriverCall.stateFromCLCC(p.readInt()); + dc.index = p.readInt(); + dc.TOA = p.readInt(); + dc.isMpty = (0 != p.readInt()); + dc.isMT = (0 != p.readInt()); + dc.als = p.readInt(); + voiceSettings = p.readInt(); + dc.isVoice = (0 == voiceSettings) ? false : true; + dc.isVoicePrivacy = (0 != p.readInt()); + //Some Samsung magic data for Videocalls + // hack taken from smdk4210ril class + voiceSettings = p.readInt(); + //printing it to cosole for later investigation + Log.d(LOG_TAG, "Samsung magic = " + voiceSettings); + dc.number = p.readString(); + int np = p.readInt(); + dc.numberPresentation = DriverCall.presentationFromCLIP(np); + dc.name = p.readString(); + dc.namePresentation = p.readInt(); + int uusInfoPresent = p.readInt(); + if (uusInfoPresent == 1) { + dc.uusInfo = new UUSInfo(); + dc.uusInfo.setType(p.readInt()); + dc.uusInfo.setDcs(p.readInt()); + byte[] userData = p.createByteArray(); + dc.uusInfo.setUserData(userData); + riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d", + dc.uusInfo.getType(), dc.uusInfo.getDcs(), + dc.uusInfo.getUserData().length)); + riljLogv("Incoming UUS : data (string)=" + + new String(dc.uusInfo.getUserData())); + riljLogv("Incoming UUS : data (hex): " + + IccUtils.bytesToHexString(dc.uusInfo.getUserData())); + } else { + riljLogv("Incoming UUS : NOT present!"); + } + + // Make sure there's a leading + on addresses with a TOA of 145 + dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA); + + response.add(dc); + + if (dc.isVoicePrivacy) { + mVoicePrivacyOnRegistrants.notifyRegistrants(); + riljLog("InCall VoicePrivacy is enabled"); + } else { + mVoicePrivacyOffRegistrants.notifyRegistrants(); + riljLog("InCall VoicePrivacy is disabled"); + } + } + + Collections.sort(response); + + return response; + } +} |