Restore the OEM hook implementation and usage

The current plan is to keep the OEM hook implementation in the framework
, this is for legacy device and old device upgrading (per b/78098059).

For P launching device, the OEM hook service is removed in hal, so the 
OEM hook api in framework should return something dummy, and prevent 
infinite loop to get service, but these parts should be done in seperate
CLs after this restore CL is merged.

This reverts commit f09bde2809.

Bug: 34344851
Change-Id: I2aea9be9aa7cecd4f7a1f1783391f0af173bfc59
Test: pass Treehugger tests; pass cuttlefish test RilE2eTests

Merged-In: I1f2117331a7f846b192c5f956f3841d58cb8154b
This commit is contained in:
Shuo Qian
2018-04-27 01:27:02 +00:00
parent f09bde2809
commit 1c11e207af
6 changed files with 93 additions and 0 deletions

View File

@@ -1426,6 +1426,31 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
public void notifyOemHookRawEventForSubscriber(int subId, byte[] rawData) {
if (!checkNotifyPermission("notifyOemHookRawEventForSubscriber")) {
return;
}
synchronized (mRecords) {
for (Record r : mRecords) {
if (VDBG) {
log("notifyOemHookRawEventForSubscriber: r=" + r + " subId=" + subId);
}
if ((r.matchPhoneStateListenerEvent(
PhoneStateListener.LISTEN_OEM_HOOK_RAW_EVENT)) &&
((r.subId == subId) ||
(r.subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID))) {
try {
r.callback.onOemHookRawEvent(rawData);
} catch (RemoteException ex) {
mRemoveList.add(r.binder);
}
}
}
handleRemoveListLocked();
}
}
@Override
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
@@ -1693,6 +1718,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);
}
return true;
}

View File

@@ -204,6 +204,16 @@ public class PhoneStateListener {
*/
public static final int LISTEN_VOLTE_STATE = 0x00004000;
/**
* Listen for OEM hook raw event
*
* @see #onOemHookRawEvent
* @hide
* @deprecated OEM needs a vendor-extension hal and their apps should use that instead
*/
@Deprecated
public static final int LISTEN_OEM_HOOK_RAW_EVENT = 0x00008000;
/**
* Listen for carrier network changes indicated by a carrier app.
*
@@ -368,6 +378,9 @@ public class PhoneStateListener {
case LISTEN_USER_MOBILE_DATA_STATE:
PhoneStateListener.this.onUserMobileDataStateChanged((boolean)msg.obj);
break;
case LISTEN_OEM_HOOK_RAW_EVENT:
PhoneStateListener.this.onOemHookRawEvent((byte[])msg.obj);
break;
case LISTEN_CARRIER_NETWORK_CHANGE:
PhoneStateListener.this.onCarrierNetworkChange((boolean)msg.obj);
break;
@@ -587,6 +600,16 @@ public class PhoneStateListener {
// default implementation empty
}
/**
* 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
}
/**
* Callback invoked when telephony has received notice from a carrier
* app that a network action that could result in connectivity loss
@@ -703,6 +726,10 @@ public class PhoneStateListener {
send(LISTEN_USER_MOBILE_DATA_STATE, 0, 0, enabled);
}
public void onOemHookRawEvent(byte[] rawData) {
send(LISTEN_OEM_HOOK_RAW_EVENT, 0, 0, rawData);
}
public void onCarrierNetworkChange(boolean active) {
send(LISTEN_CARRIER_NETWORK_CHANGE, 0, 0, active);
}

View File

@@ -6425,6 +6425,29 @@ public class TelephonyManager {
return retVal;
}
/**
* Returns the result and response from RIL for oem request
*
* @param oemReq the data is sent to ril.
* @param oemResp the respose data from RIL.
* @return negative value request was not handled or get error
* 0 request was handled succesfully, but no response data
* positive value success, data length of response
* @hide
* @deprecated OEM needs a vendor-extension hal and their apps should use that instead
*/
@Deprecated
public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) {
try {
ITelephony telephony = getITelephony();
if (telephony != null)
return telephony.invokeOemRilRequestRaw(oemReq, oemResp);
} catch (RemoteException ex) {
} catch (NullPointerException ex) {
}
return -1;
}
/** @hide */
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)

View File

@@ -47,6 +47,7 @@ oneway interface IPhoneStateListener {
void onVoLteServiceStateChanged(in VoLteServiceState lteState);
void onVoiceActivationStateChanged(int activationState);
void onDataActivationStateChanged(int activationState);
void onOemHookRawEvent(in byte[] rawData);
void onCarrierNetworkChange(in boolean active);
void onUserMobileDataStateChanged(in boolean enabled);
}

View File

@@ -1054,6 +1054,17 @@ interface ITelephony {
in List<String> gsmNonRoamingList, in List<String> cdmaRoamingList,
in List<String> cdmaNonRoamingList);
/**
* Returns the result and response from RIL for oem request
*
* @param oemReq the data is sent to ril.
* @param oemResp the respose data from RIL.
* @return negative value request was not handled or get error
* 0 request was handled succesfully, but no response data
* positive value success, data length of response
*/
int invokeOemRilRequestRaw(in byte[] oemReq, out byte[] oemResp);
/**
* Check if any mobile Radios need to be shutdown.
*

View File

@@ -70,6 +70,7 @@ interface ITelephonyRegistry {
void notifyVoLteServiceStateChanged(in VoLteServiceState lteState);
void notifySimActivationStateChangedForPhoneId(in int phoneId, in int subId,
int activationState, int activationType);
void notifyOemHookRawEventForSubscriber(in int subId, in byte[] rawData);
void notifySubscriptionInfoChanged();
void notifyCarrierNetworkChange(in boolean active);
void notifyUserMobileDataStateChangedForPhoneId(in int phoneId, in int subId, in boolean state);