From 946f4768e9d2608abe42a258b7a64ab210f0ddcc Mon Sep 17 00:00:00 2001 From: roynatech2544 Date: Sat, 8 Oct 2022 01:09:57 +0900 Subject: [PATCH] universal7885: FMRadio: Remove source edit If the AIDL hal which can be allowed to change uid calls audioflinger API to change route, we don't need to change source for it. seteuid(audioserver_uid) will work fine --- universal7885-common/apps/FMRadio/Android.bp | 1 - .../apps/FMRadio/jni/Android.bp | 27 ------------------- .../com/eurekateam/fmradio/MainActivity.kt | 1 - .../eurekateam/fmradio/NativeFMInterface.kt | 2 +- .../apps/aidl-support/fm/default/Android.bp | 11 ++++++++ .../fm/default/FMAudioRouteControl.cpp} | 6 ++--- .../aidl-support/fm/default/FMDevControl.cpp | 9 +++++++ .../aidl-support/fm/default/FMSupport.cpp | 1 + .../eureka/hardware/fmradio/SetType.aidl | 1 + .../sepolicy/private/hal_fmradio_default.te | 2 ++ universal7885-common/vendorsetup.sh | 5 ---- 11 files changed, 27 insertions(+), 39 deletions(-) delete mode 100644 universal7885-common/apps/FMRadio/jni/Android.bp rename universal7885-common/apps/{FMRadio/jni/FM_AudioRoute_ctl.cpp => aidl-support/fm/default/FMAudioRouteControl.cpp} (84%) diff --git a/universal7885-common/apps/FMRadio/Android.bp b/universal7885-common/apps/FMRadio/Android.bp index 71c34be..52ea885 100644 --- a/universal7885-common/apps/FMRadio/Android.bp +++ b/universal7885-common/apps/FMRadio/Android.bp @@ -4,7 +4,6 @@ android_app { "src/**/*.kt", ], platform_apis: true, - jni_libs: ["libaudiohack"], certificate: "platform", static_libs: [ "androidx.core_core", diff --git a/universal7885-common/apps/FMRadio/jni/Android.bp b/universal7885-common/apps/FMRadio/jni/Android.bp deleted file mode 100644 index 6068e7c..0000000 --- a/universal7885-common/apps/FMRadio/jni/Android.bp +++ /dev/null @@ -1,27 +0,0 @@ -cc_library_shared { - name: "libaudiohack", - cflags: [ - "-Wno-unused-parameter", - ], - srcs: [ - "FM_AudioRoute_ctl.cpp", - ], - defaults: ["eureka_defaults"], - shared_libs: [ - "liblog", - "libutils", - "audioflinger-aidl-cpp", - "audiopolicy-aidl-cpp", - "audiopolicy-types-aidl-cpp", - "libaudiofoundation", - "libaudioutils", - "libaudioclient", - "libutils", - "libaudiopolicy", - "libaudiomanager", - ], - header_libs: [ - "libaudioclient_headers", - "jni_headers", - ], -} diff --git a/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/MainActivity.kt b/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/MainActivity.kt index a659bdf..11e1117 100644 --- a/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/MainActivity.kt +++ b/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/MainActivity.kt @@ -47,7 +47,6 @@ class MainActivity : AppCompatActivity() { private lateinit var mAlertImage: AppCompatImageView private lateinit var mAudioManager: AudioManager override fun onCreate(savedInstanceState: Bundle?) { - System.loadLibrary("audiohack") MainFragment.fd = mFMInterface.openFMDevice() mAlertView = (getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater) .inflate(R.layout.alertdialog, null) diff --git a/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/NativeFMInterface.kt b/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/NativeFMInterface.kt index f4d96ce..bb7b4c0 100644 --- a/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/NativeFMInterface.kt +++ b/universal7885-common/apps/FMRadio/src/com/eurekateam/fmradio/NativeFMInterface.kt @@ -37,5 +37,5 @@ class NativeFMInterface { fun setFMRSSI(a: Int, rssi: Long) = mDevCtl.setValue(SetType.SET_TYPE_FM_RMSSI, rssi.toInt()) fun closeFMDevice(fd: Int) = mDevCtl.close() fun getSysfsSupport(): Boolean = mSysfsCtl.getValue(GetType.GET_TYPE_FM_SYSFS_IF) == 0 - external fun setAudioRoute(speaker: Boolean): Int + fun setAudioRoute(speaker: Boolean) = mDevCtl.setValue(SetType.SET_TYPE_FM_SPEAKER_ROUTE, if (speaker) 1 else 0) } diff --git a/universal7885-common/apps/aidl-support/fm/default/Android.bp b/universal7885-common/apps/aidl-support/fm/default/Android.bp index 50b325d..0a3d985 100644 --- a/universal7885-common/apps/aidl-support/fm/default/Android.bp +++ b/universal7885-common/apps/aidl-support/fm/default/Android.bp @@ -8,6 +8,7 @@ cc_binary { srcs: [ "FMSupport.cpp", "FMDevControl.cpp", + "FMAudioRouteControl.cpp", "service.cpp", ], defaults: [ @@ -20,8 +21,18 @@ cc_binary { "libbinder_ndk", "liblog", "libfileio", + "libutils", + "audioflinger-aidl-cpp", + "audiopolicy-aidl-cpp", + "audiopolicy-types-aidl-cpp", + "libaudiofoundation", + "libaudioutils", + "libaudioclient", + "libaudiopolicy", + "libaudiomanager", "vendor.eureka.hardware.fmradio-ndk", ], + header_libs: ["libaudioclient_headers"], init_rc: ["vendor.eureka.hardware.fmradio-service.rc"], vintf_fragments: ["vendor.eureka.hardware.fmradio.xml"], } diff --git a/universal7885-common/apps/FMRadio/jni/FM_AudioRoute_ctl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp similarity index 84% rename from universal7885-common/apps/FMRadio/jni/FM_AudioRoute_ctl.cpp rename to universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp index a70d8b5..6aedc5d 100644 --- a/universal7885-common/apps/FMRadio/jni/FM_AudioRoute_ctl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMAudioRouteControl.cpp @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include + #include #include @@ -23,9 +23,7 @@ using namespace android; -extern "C" JNIEXPORT jboolean JNICALL -Java_com_eurekateam_fmradio_NativeFMInterface_setAudioRoute( - __unused JNIEnv *env, __unused jobject thiz, jboolean speaker) { +int audioflinger_exynos7885_forceroute (bool speaker) { const sp &af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; diff --git a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp index 7e4fc73..9fac37d 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp @@ -16,9 +16,13 @@ #include +#include #include #include +// FMAudioRouteControl.cpp +extern int audioflinger_exynos7885_forceroute(bool speaker); + namespace aidl::vendor::eureka::hardware::fmradio { static int fd = -1; @@ -81,6 +85,11 @@ static int fd = -1; case SetType::SET_TYPE_FM_SEARCH_CANCEL: fm_radio_slsi::stop_search(fd); break; + case SetType::SET_TYPE_FM_SPEAKER_ROUTE: + seteuid(1041 /* AudioServer UID */); + audioflinger_exynos7885_forceroute(value); + seteuid(0); + break; default: break; }; diff --git a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp index ae13a0a..041a0da 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp @@ -74,6 +74,7 @@ constexpr const char *FM_FREQ_SEEK = case SetType::SET_TYPE_FM_THREAD: case SetType::SET_TYPE_FM_RMSSI: case SetType::SET_TYPE_FM_SEARCH_CANCEL: + case SetType::SET_TYPE_FM_SPEAKER_ROUTE: NOT_SUPPORTED; default: break; diff --git a/universal7885-common/apps/aidl-support/fm/vendor/eureka/hardware/fmradio/SetType.aidl b/universal7885-common/apps/aidl-support/fm/vendor/eureka/hardware/fmradio/SetType.aidl index 7e13d1c..5a98ebb 100644 --- a/universal7885-common/apps/aidl-support/fm/vendor/eureka/hardware/fmradio/SetType.aidl +++ b/universal7885-common/apps/aidl-support/fm/vendor/eureka/hardware/fmradio/SetType.aidl @@ -22,4 +22,5 @@ enum SetType { SET_TYPE_FM_THREAD, SET_TYPE_FM_RMSSI, SET_TYPE_FM_SEARCH_CANCEL, + SET_TYPE_FM_SPEAKER_ROUTE, } diff --git a/universal7885-common/sepolicy/private/hal_fmradio_default.te b/universal7885-common/sepolicy/private/hal_fmradio_default.te index 57d110f..1a8a6f1 100644 --- a/universal7885-common/sepolicy/private/hal_fmradio_default.te +++ b/universal7885-common/sepolicy/private/hal_fmradio_default.te @@ -11,3 +11,5 @@ allow hal_fmradio_default sysfs_fmradio_tune:dir search; allow hal_fmradio_default sysfs_virtual:dir search; allow hal_fmradio_default fm_radio_device:chr_file { read write open ioctl }; + +allow hal_fmradio_default self:capability setuid; diff --git a/universal7885-common/vendorsetup.sh b/universal7885-common/vendorsetup.sh index 06b06fc..c7bb40e 100755 --- a/universal7885-common/vendorsetup.sh +++ b/universal7885-common/vendorsetup.sh @@ -24,11 +24,6 @@ for dev in a10dd a10 a20 a20e a30 a30s a40; do bash ${UNIVERSAL}/setup.sh "$dev" done -# For FM Radio -if grep -q isAudioServerUid\(callingUid\) frameworks/av/services/audioflinger/AudioFlinger.cpp; then - echo "Applying FM routing patch" - sed -i 's/isAudioServerUid(callingUid)/isAudioServerOrSystemServerUid(callingUid)/g' frameworks/av/services/audioflinger/AudioFlinger.cpp -fi # Remove multiple declared FMRadio path (we have our own FMRadio and this cause build error) if [ -d "$FM_PATH" ]; then echo "Remove FMRadio from ROM Source"