redirect RIL_UNSOL_OEM_HOOK_RAW to system app

Add LISTEN_OEM_HOOK_RAW_EVENT and onOemHookRawEvent to PhoneStateListener.

Bug: 17298769
Change-Id: Iaea054d3cc2925eea1e11f8871faabc7bc9dfb2d
This commit is contained in:
New Author Steven Liu
2014-09-11 10:18:45 -05:00
committed by Vineeta Srivastava
parent c2f4985e84
commit 485f2095f8
4 changed files with 57 additions and 0 deletions

View File

@@ -1068,6 +1068,30 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
public void notifyOemHookRawEventForSubscriber(long subId, byte[] rawData) {
if (!checkNotifyPermission("notifyOemHookRawEventForSubscriber")) {
return;
}
synchronized (mRecords) {
for (Record r : mRecords) {
if (VDBG) {
log("notifyOemHookRawEventForSubscriber: r=" + r + " subId=" + subId);
}
if (((r.events & PhoneStateListener.LISTEN_OEM_HOOK_RAW_EVENT) != 0) &&
((r.subId == subId) ||
(r.subId == SubscriptionManager.DEFAULT_SUB_ID))) {
try {
r.callback.onOemHookRawEvent(rawData);
} catch (RemoteException ex) {
mRemoveList.add(r.binder);
}
}
}
handleRemoveListLocked();
}
}
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
@@ -1277,6 +1301,11 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
android.Manifest.permission.READ_PRECISE_PHONE_STATE, null);
}
if ((events & PhoneStateListener.LISTEN_OEM_HOOK_RAW_EVENT) != 0) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, null);
}
}
private void handleRemoveListLocked() {

View File

@@ -212,6 +212,14 @@ public class PhoneStateListener {
*/
public static final int LISTEN_VOLTE_STATE = 0x00004000;
/**
* Listen for OEM hook raw event
*
* @see #onOemHookRawEvent
* @hide
*/
public static final int LISTEN_OEM_HOOK_RAW_EVENT = 0x00008000;
/*
* Subscription used to listen to the phone state changes
* @hide
@@ -312,6 +320,10 @@ public class PhoneStateListener {
case LISTEN_VOLTE_STATE:
PhoneStateListener.this.onVoLteServiceStateChanged((VoLteServiceState)msg.obj);
break;
case LISTEN_OEM_HOOK_RAW_EVENT:
PhoneStateListener.this.onOemHookRawEvent((byte[])msg.obj);
break;
}
}
};
@@ -479,6 +491,16 @@ public class PhoneStateListener {
public void onVoLteServiceStateChanged(VoLteServiceState stateInfo) {
}
/**
* Callback invoked when OEM hook raw event is received. Requires
* the READ_PRIVILEGED_PHONE_STATE permission.
* @param rawData is the byte array of the OEM hook raw data.
* @hide
*/
public void onOemHookRawEvent(byte[] rawData) {
// default implementation empty
}
/**
* The callback methods need to be called on the handler thread where
* this object was created. If the binder did that for us it'd be nice.
@@ -551,6 +573,10 @@ public class PhoneStateListener {
public void onVoLteServiceStateChanged(VoLteServiceState lteState) {
Message.obtain(mHandler, LISTEN_VOLTE_STATE, 0, 0, lteState).sendToTarget();
}
public void onOemHookRawEvent(byte[] rawData) {
Message.obtain(mHandler, LISTEN_OEM_HOOK_RAW_EVENT, 0, 0, rawData).sendToTarget();
}
};
private void log(String s) {

View File

@@ -43,5 +43,6 @@ oneway interface IPhoneStateListener {
void onPreciseDataConnectionStateChanged(in PreciseDataConnectionState dataConnectionState);
void onDataConnectionRealTimeInfoChanged(in DataConnectionRealTimeInfo dcRtInfo);
void onVoLteServiceStateChanged(in VoLteServiceState lteState);
void onOemHookRawEvent(in byte[] rawData);
}

View File

@@ -62,4 +62,5 @@ interface ITelephonyRegistry {
void notifyCellInfoForSubscriber(in long subId, in List<CellInfo> cellInfo);
void notifyDataConnectionRealTimeInfo(in DataConnectionRealTimeInfo dcRtInfo);
void notifyVoLteServiceStateChanged(in VoLteServiceState lteState);
void notifyOemHookRawEventForSubscriber(in long subId, in byte[] rawData);
}