diff options
| author | 2018-04-27 12:50:23 -0700 | |
|---|---|---|
| committer | 2018-04-27 12:50:23 -0700 | |
| commit | caee2573f9775e70c80f067d95e93614bc335093 (patch) | |
| tree | d3373f16b5330f24bd72039cb49a04c0195298c9 | |
| parent | 5b68325591421fa1a0e176f964aef8374caf2c20 (diff) | |
| parent | 093ade312d402c3453663db746d1f90787890d2b (diff) | |
Merge "Restore the OEM hook implementation and usage"
am: 093ade312d
Change-Id: I9f2f44e24c3b926609efa85cfb932d06422cc40c
6 files changed, 93 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 539c00135f6a..27e7ba8845e9 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -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; } diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java index 7db83f606938..3e73b9341da7 100644 --- a/telephony/java/android/telephony/PhoneStateListener.java +++ b/telephony/java/android/telephony/PhoneStateListener.java @@ -205,6 +205,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. * * @see #onCarrierNetworkRequest @@ -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; @@ -588,6 +601,16 @@ public class PhoneStateListener { } /** + * 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 * has been requested by an app using @@ -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); } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 6a6cca0aa568..375fdbbd5ec4 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -6424,6 +6424,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) diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl index 1cfe8c2442bd..0d315e5e563e 100644 --- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl +++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl @@ -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); } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 9b71b8a1b9a5..e0297ca6720b 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1055,6 +1055,17 @@ interface ITelephony { 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. * * @return true is any mobile radio needs to be shutdown diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl index 06dc13e53bf7..0127db97963e 100644 --- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl @@ -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); |