From 7cfc5cda2f2a382a3eabd1c5382c412f2d1dedcf Mon Sep 17 00:00:00 2001 From: sqian Date: Tue, 17 Apr 2018 11:54:14 -0700 Subject: [PATCH] Revert "Remove the OEM hook implementation and usage" This reverts commit 2635a89c8cb536d487c5a77ea205f787c19dc92e. Bug: 34344851 Test: Treehugger Change-Id: I96697165fd75054de42f007c16ca294ed6725708 Merged-In: I96697165fd75054de42f007c16ca294ed6725708 (cherry picked from commit 00b89515a54b7f8d635408994c6384fb80fe2127) --- .../com/android/server/TelephonyRegistry.java | 30 +++++++++++++++++++ .../android/telephony/PhoneStateListener.java | 27 +++++++++++++++++ .../android/telephony/TelephonyManager.java | 23 ++++++++++++++ .../telephony/IPhoneStateListener.aidl | 1 + .../internal/telephony/ITelephony.aidl | 11 +++++++ .../telephony/ITelephonyRegistry.aidl | 1 + 6 files changed, 93 insertions(+) diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 83fe97697194f..60d11d7e6f4b9 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 0ff29825bfb3d..c16701ba0f351 100644 --- a/telephony/java/android/telephony/PhoneStateListener.java +++ b/telephony/java/android/telephony/PhoneStateListener.java @@ -203,6 +203,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. * @@ -367,6 +377,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; @@ -582,6 +595,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 @@ -698,6 +721,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 ca8c6d69cfc32..ba39ffd93d73e 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -6445,6 +6445,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 1cfe8c2442bd6..0d315e5e563e1 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 7e8b2de4bc2a7..73cd498123fdd 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1070,6 +1070,17 @@ interface ITelephony { in List gsmNonRoamingList, in List cdmaRoamingList, in List 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. * diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl index 06dc13e53bf7a..0127db97963e3 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);