mirror of
https://github.com/chararomandroid/android_device_samsung_a20
synced 2026-08-23 12:35:33 -04:00
universal7885: FM: Fix sepolicy denial and crash of app
- Don't crash on no headphones detected - Use progressdialog instead of disabling touch - Don't crash while manually updating freqs list - Address selinux denial on aidl
This commit is contained in:
parent
25c497ade3
commit
e682783f6b
6 changed files with 32 additions and 12 deletions
|
|
@ -40,4 +40,5 @@
|
||||||
<string name="retry">Retry</string>
|
<string name="retry">Retry</string>
|
||||||
<string name="exit_app">Exit App</string>
|
<string name="exit_app">Exit App</string>
|
||||||
<string name="fm_radio_freq">FM %s Mhz</string>
|
<string name="fm_radio_freq">FM %s Mhz</string>
|
||||||
|
<string name="update_freq">Updating channel freqs list</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -64,12 +64,12 @@ class FMRadioService : Service() {
|
||||||
}
|
}
|
||||||
ACTION_START -> {
|
ACTION_START -> {
|
||||||
mMediaSession = MediaSession(this, "FMRadio")
|
mMediaSession = MediaSession(this, "FMRadio")
|
||||||
mContext = this
|
|
||||||
setPlaybackState()
|
setPlaybackState()
|
||||||
mMediaSession.isActive = true
|
mMediaSession.isActive = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mContext = this
|
||||||
sendMetaData("FM ${mNativeFMInterface.mDefaultCtl.getValue(GetType.GET_TYPE_FM_FREQ).toFloat() / 1000} Mhz")
|
sendMetaData("FM ${mNativeFMInterface.mDefaultCtl.getValue(GetType.GET_TYPE_FM_FREQ).toFloat() / 1000} Mhz")
|
||||||
startForeground(51, pushNotification())
|
startForeground(51, pushNotification())
|
||||||
Log.i("--- FMRadio Background (OUT) ---")
|
Log.i("--- FMRadio Background (OUT) ---")
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import com.google.android.material.color.DynamicColors
|
import com.google.android.material.color.DynamicColors
|
||||||
import com.google.android.material.textview.MaterialTextView
|
import com.google.android.material.textview.MaterialTextView
|
||||||
import vendor.eureka.hardware.fmradio.SetType
|
import vendor.eureka.hardware.fmradio.SetType
|
||||||
|
import vendor.eureka.hardware.fmradio.GetType
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
private lateinit var mIntent: Intent
|
private lateinit var mIntent: Intent
|
||||||
|
|
@ -96,6 +97,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
.show()
|
.show()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
val receiverFilter = IntentFilter(Intent.ACTION_HEADSET_PLUG)
|
val receiverFilter = IntentFilter(Intent.ACTION_HEADSET_PLUG)
|
||||||
registerReceiver(mWiredHeadsetReceiver, receiverFilter)
|
registerReceiver(mWiredHeadsetReceiver, receiverFilter)
|
||||||
|
|
@ -167,16 +169,23 @@ class MainActivity : AppCompatActivity() {
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
Log.i("Application onPause")
|
Log.i("Application onPause")
|
||||||
|
if (mFMInterface.mDefaultCtl.getValue(GetType.GET_TYPE_FM_MUTEX_LOCKED) == 0) {
|
||||||
mIntent.action = ACTION_START
|
mIntent.action = ACTION_START
|
||||||
startService(mIntent)
|
startService(mIntent)
|
||||||
|
mStartedService = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRestart() {
|
override fun onRestart() {
|
||||||
super.onRestart()
|
super.onRestart()
|
||||||
|
if (mStartedService) {
|
||||||
stopService(mIntent)
|
stopService(mIntent)
|
||||||
|
mStartedService = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ACTION_START = "com.eurekateam.fmradio.START"
|
private const val ACTION_START = "com.eurekateam.fmradio.START"
|
||||||
|
private var mStartedService = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.eurekateam.fmradio.fragments
|
package com.eurekateam.fmradio.fragments
|
||||||
|
|
||||||
|
import android.app.ProgressDialog
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -56,19 +57,23 @@ class ChannelListFragment :
|
||||||
|
|
||||||
override fun onClick(v: View?) {
|
override fun onClick(v: View?) {
|
||||||
mNativeIF.mDefaultCtl.setValue(SetType.SET_TYPE_FM_SEARCH_START, 0)
|
mNativeIF.mDefaultCtl.setValue(SetType.SET_TYPE_FM_SEARCH_START, 0)
|
||||||
requireActivity().window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
val loading = ProgressDialog(requireContext())
|
||||||
|
loading.setMessage(requireContext().resources.getString(R.string.update_freq))
|
||||||
|
loading.setCancelable(false)
|
||||||
|
loading.setInverseBackgroundForced(false)
|
||||||
|
loading.show()
|
||||||
WaitUntil.setTimer(
|
WaitUntil.setTimer(
|
||||||
requireActivity(),
|
requireActivity(),
|
||||||
object : IWaitUntil {
|
object : IWaitUntil {
|
||||||
override fun cond(): Boolean = mNativeIF.mDefaultCtl.getValue(GetType.GET_TYPE_FM_MUTEX_LOCKED) == 0
|
override fun cond(): Boolean = mNativeIF.mDefaultCtl.getValue(GetType.GET_TYPE_FM_MUTEX_LOCKED) == 0
|
||||||
override fun todo() {
|
override fun todo() {
|
||||||
if (isAdded()) {
|
if (isAdded()) {
|
||||||
|
loading.hide()
|
||||||
(requireActivity() as MainActivity).getMySupportFragmentManager().apply {
|
(requireActivity() as MainActivity).getMySupportFragmentManager().apply {
|
||||||
beginTransaction().remove(this@ChannelListFragment).commit()
|
beginTransaction().remove(this@ChannelListFragment).commit()
|
||||||
executePendingTransactions()
|
executePendingTransactions()
|
||||||
beginTransaction().add(R.id.container_view, this@ChannelListFragment).commit()
|
beginTransaction().add(R.id.container_view, this@ChannelListFragment).commit()
|
||||||
}
|
}
|
||||||
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.eurekateam.fmradio.fragments
|
package com.eurekateam.fmradio.fragments
|
||||||
|
|
||||||
|
import android.app.ProgressDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
|
|
@ -123,8 +124,11 @@ class MainFragment :
|
||||||
mFMInterface.mDefaultCtl.setValue(SetType.SET_TYPE_FM_FREQ, mRestoreFreq)
|
mFMInterface.mDefaultCtl.setValue(SetType.SET_TYPE_FM_FREQ, mRestoreFreq)
|
||||||
mFMFreq.text = mCleanFormat.format(mRestoreFreq.toFloat() / 1000)
|
mFMFreq.text = mCleanFormat.format(mRestoreFreq.toFloat() / 1000)
|
||||||
mFMInterface.mDevCtl.setValue(SetType.SET_TYPE_FM_THREAD, 1)
|
mFMInterface.mDevCtl.setValue(SetType.SET_TYPE_FM_THREAD, 1)
|
||||||
Toast.makeText(requireContext(), "Updating freqs list... Please wait", Toast.LENGTH_LONG).show()
|
val loading = ProgressDialog(requireContext())
|
||||||
requireActivity().window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
loading.setMessage(requireContext().resources.getString(R.string.update_freq))
|
||||||
|
loading.setCancelable(false)
|
||||||
|
loading.setInverseBackgroundForced(false)
|
||||||
|
loading.show()
|
||||||
mFMInterface.mDefaultCtl.setValue(SetType.SET_TYPE_FM_SEARCH_START, 0)
|
mFMInterface.mDefaultCtl.setValue(SetType.SET_TYPE_FM_SEARCH_START, 0)
|
||||||
WaitUntil.setTimer(
|
WaitUntil.setTimer(
|
||||||
requireActivity(),
|
requireActivity(),
|
||||||
|
|
@ -136,8 +140,7 @@ class MainFragment :
|
||||||
if (mSharedPref.getBoolean("fav_$i", false)) mFavList += i
|
if (mSharedPref.getBoolean("fav_$i", false)) mFavList += i
|
||||||
}
|
}
|
||||||
if (!mFMPower) mUpdateEnableDisable(false)
|
if (!mFMPower) mUpdateEnableDisable(false)
|
||||||
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
loading.hide()
|
||||||
Toast.makeText(requireContext(), "Done", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -13,5 +13,7 @@ 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 fm_radio_device:chr_file { read write open ioctl };
|
||||||
|
|
||||||
allow hal_fmradio_default hal_audio_route_service:service_manager find;
|
allow hal_fmradio_default hal_audio_route_service:service_manager find;
|
||||||
|
allow hal_fmradio_default self:capability kill;
|
||||||
|
allow hal_fmradio_default system_app:process signull;
|
||||||
|
|
||||||
binder_call(hal_fmradio_default, hal_audio_route_default)
|
binder_call(hal_fmradio_default, hal_audio_route_default)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue