universal7885: parts: Refactor

* Convert null properties to lateinit
* Implement apply on boot again
* Cleanup unused file
This commit is contained in:
roynatech2544 2022-04-12 19:18:01 +09:00
commit 4a9ca4730c
No known key found for this signature in database
GPG key ID: 50ABF73F0D19445D
15 changed files with 137 additions and 111 deletions

View file

@ -3,7 +3,7 @@
package="com.eurekateam.samsungextras" package="com.eurekateam.samsungextras"
android:sharedUserId="android.uid.system"> android:sharedUserId="android.uid.system">
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"/> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"/>
<protected-broadcast android:name="com.android.systemui.doze.pulse" /> <protected-broadcast android:name="com.android.systemui.doze.pulse" />
@ -12,6 +12,13 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.SubSettingsBase" android:theme="@style/Theme.SubSettingsBase"
android:fullBackupOnly="true"> android:fullBackupOnly="true">
<receiver android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity <activity
android:name=".DeviceSettingsActivity" android:name=".DeviceSettingsActivity"
android:exported="true" android:exported="true"

View file

@ -0,0 +1,42 @@
package com.eurekateam.samsungextras
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import androidx.preference.PreferenceManager
import com.eurekateam.samsungextras.battery.BatteryFragment
import com.eurekateam.samsungextras.dolby.DolbyCore
import com.eurekateam.samsungextras.dolby.DolbyFragment
import com.eurekateam.samsungextras.flashlight.FlashLightFragment
import com.eurekateam.samsungextras.interfaces.Battery
import com.eurekateam.samsungextras.interfaces.Display
import com.eurekateam.samsungextras.interfaces.Flashlight
class BootReceiver : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
val mSharedPreferences = p0?.let { PreferenceManager.getDefaultSharedPreferences(it) }
if (p1 != null && mSharedPreferences != null) {
if (p1.action == Intent.ACTION_BOOT_COMPLETED){
// Battery
Battery.chargeSysfs = if (mSharedPreferences
.getBoolean(BatteryFragment.PREF_CHARGE, true)) 0 else 1
Battery.setFastCharge(if (mSharedPreferences
.getBoolean(BatteryFragment.PREF_FASTCHARGE, true)) 0 else 1)
// Dolby
DolbyCore.setEnabled(mSharedPreferences
.getBoolean(DolbyFragment.PREF_DOLBY_ENABLE, false))
DolbyCore.setProfile(mSharedPreferences
.getInt(DolbyFragment.PREF_DOLBY_PROFILE, 0))
// FlashLight
Flashlight.setFlash(mSharedPreferences.getInt(FlashLightFragment.PREF_FLASHLIGHT, 5))
// Display
Display.DT2W = mSharedPreferences.getBoolean(DeviceSettings.PREF_DOUBLE_TAP, true)
Display.GloveMode = mSharedPreferences.getBoolean(DeviceSettings.PREF_GLOVE_MODE, false)
Log.i("SamsungParts", "Applied settings")
}
}
}
}

View file

@ -16,9 +16,9 @@
package com.eurekateam.samsungextras package com.eurekateam.samsungextras
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.os.Build import android.os.Build
import android.widget.Toast
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
@ -31,11 +31,11 @@ import com.eurekateam.samsungextras.interfaces.Display.DT2W
import com.eurekateam.samsungextras.speaker.ClearSpeakerActivity import com.eurekateam.samsungextras.speaker.ClearSpeakerActivity
class DeviceSettings : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener { class DeviceSettings : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
private val mPrefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
System.loadLibrary("samsungparts_jni") System.loadLibrary("samsungparts_jni")
setPreferencesFromResource(R.xml.preferences_samsung_parts, rootKey) setPreferencesFromResource(R.xml.preferences_samsung_parts, rootKey)
val mContext = this.context
val prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
val mClearSpeakerPref = findPreference<Preference>(PREF_CLEAR_SPEAKER)!! val mClearSpeakerPref = findPreference<Preference>(PREF_CLEAR_SPEAKER)!!
mClearSpeakerPref.onPreferenceClickListener = mClearSpeakerPref.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
@ -44,14 +44,16 @@ class DeviceSettings : PreferenceFragmentCompat(), Preference.OnPreferenceChange
true true
} }
val mFpsInfo = findPreference<SwitchPreference>(PREF_KEY_FPS_INFO)!! val mFpsInfo = findPreference<SwitchPreference>(PREF_KEY_FPS_INFO)!!
mFpsInfo.isChecked = prefs.getBoolean(PREF_KEY_FPS_INFO, false) mFpsInfo.isChecked = mPrefs.getBoolean(PREF_KEY_FPS_INFO, false)
mFpsInfo.onPreferenceChangeListener = this mFpsInfo.onPreferenceChangeListener = this
val mDT2W = findPreference<SwitchPreference>(PREF_DOUBLE_TAP)!! val mDT2W = findPreference<SwitchPreference>(PREF_DOUBLE_TAP)!!
mDT2W.onPreferenceChangeListener = this mDT2W.onPreferenceChangeListener = this
mDT2W.isEnabled = !(Build.PRODUCT == "a10" || Build.PRODUCT == "a20e") mDT2W.isEnabled = !(Build.PRODUCT == "a10" || Build.PRODUCT == "a20e")
mDT2W.isChecked = mPrefs.getBoolean(PREF_DOUBLE_TAP, false)
val mGloveMode = findPreference<SwitchPreference>(PREF_GLOVE_MODE)!! val mGloveMode = findPreference<SwitchPreference>(PREF_GLOVE_MODE)!!
mGloveMode.onPreferenceChangeListener = this mGloveMode.onPreferenceChangeListener = this
mGloveMode.isEnabled = !(Build.PRODUCT == "a10" || Build.PRODUCT == "a20e") mGloveMode.isEnabled = !(Build.PRODUCT == "a10" || Build.PRODUCT == "a20e")
mGloveMode.isChecked = mPrefs.getBoolean(PREF_GLOVE_MODE, false)
val mFlashLight = findPreference<Preference>(PREF_FLASHLIGHT)!! val mFlashLight = findPreference<Preference>(PREF_FLASHLIGHT)!!
mFlashLight.onPreferenceClickListener = mFlashLight.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
@ -71,19 +73,22 @@ class DeviceSettings : PreferenceFragmentCompat(), Preference.OnPreferenceChange
override fun onPreferenceChange(preference: Preference, value: Any): Boolean { override fun onPreferenceChange(preference: Preference, value: Any): Boolean {
when (preference.key) { when (preference.key) {
PREF_KEY_FPS_INFO -> { PREF_KEY_FPS_INFO -> {
val fps_enabled = value as Boolean val mEnabled = value as Boolean
val fpsinfo = Intent(this.context, FPSInfoService::class.java) val mFPSService = Intent(this.context, FPSInfoService::class.java)
if (fps_enabled) { if (mEnabled) {
requireContext().startService(fpsinfo) requireContext().startService(mFPSService)
} else { } else {
requireContext().stopService(fpsinfo) requireContext().stopService(mFPSService)
} }
mPrefs.edit().putBoolean(PREF_KEY_FPS_INFO, mEnabled).apply()
} }
PREF_DOUBLE_TAP -> { PREF_DOUBLE_TAP -> {
DT2W = value as Boolean DT2W = value as Boolean
mPrefs.edit().putBoolean(PREF_DOUBLE_TAP, value).apply()
} }
PREF_GLOVE_MODE -> { PREF_GLOVE_MODE -> {
GloveMode = value as Boolean GloveMode = value as Boolean
mPrefs.edit().putBoolean(PREF_GLOVE_MODE, value).apply()
} }
else -> { else -> {
return false return false

View file

@ -1,24 +0,0 @@
/*
* Copyright (C) 2022 Eureka Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.eurekateam.samsungextras
object GlobalConstants {
/**
* Global Variables
*/
const val FLASHLIGHT_SYSFS = "/sys/class/camera/flash/torch_brightness_lvl"
const val TAG = "SamsungExtras"
}

View file

@ -1,4 +1,4 @@
package com.eurekateam.samsungextras.utils package com.eurekateam.samsungextras
import android.os.Parcel import android.os.Parcel
import android.os.ServiceManager import android.os.ServiceManager

View file

@ -18,17 +18,17 @@ package com.eurekateam.samsungextras.battery
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.android.internal.R.id.content import android.R.id.content
import com.android.internal.R.id.home import android.R.id.home
class BatteryActivity : FragmentActivity() { class BatteryActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val fragment = this.supportFragmentManager.findFragmentById(content) val fragment = supportFragmentManager.findFragmentById(content)
val batteryFragment: BatteryFragment val batteryFragment: BatteryFragment
if (fragment == null) { if (fragment == null) {
batteryFragment = BatteryFragment() batteryFragment = BatteryFragment()
this.supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.add(content, batteryFragment) .add(content, batteryFragment)
.commit() .commit()
} }

View file

@ -20,23 +20,23 @@ import android.widget.Toast
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import androidx.preference.SwitchPreference import androidx.preference.SwitchPreference
import com.eurekateam.samsungextras.R import com.eurekateam.samsungextras.R
import com.eurekateam.samsungextras.interfaces.Battery import com.eurekateam.samsungextras.interfaces.Battery
class BatteryFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener { class BatteryFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
private var mFastChargePref: SwitchPreference? = null private lateinit var mFastChargePref: SwitchPreference
private var mChargePref: SwitchPreference? = null private lateinit var mChargePref: SwitchPreference
private val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.battery_settings) addPreferencesFromResource(R.xml.battery_settings)
mFastChargePref = findPreference(PREF_FASTCHARGE) mFastChargePref = findPreference(PREF_FASTCHARGE)!!
assert(mFastChargePref != null) mFastChargePref.onPreferenceChangeListener = this
mFastChargePref!!.onPreferenceChangeListener = this mFastChargePref.isChecked = mSharedPreferences.getBoolean(PREF_FASTCHARGE, true)
mFastChargePref!!.isChecked = Battery.chargeSysfs == 0 mChargePref = findPreference(PREF_CHARGE)!!
mChargePref = findPreference(PREF_CHARGE) mChargePref.onPreferenceChangeListener = this
assert(mChargePref != null) mChargePref.isChecked = mSharedPreferences.getBoolean(PREF_CHARGE, true)
mChargePref!!.onPreferenceChangeListener = this
mChargePref!!.isChecked = Battery.fastChargeSysfs == 0
val mBatteryInfo : ListPreference = findPreference(BATTERY_INFO)!! val mBatteryInfo : ListPreference = findPreference(BATTERY_INFO)!!
val items = arrayOf<CharSequence>( val items = arrayOf<CharSequence>(
Battery.getGeneralBatteryStats(1).toString() + " mAh", Battery.getGeneralBatteryStats(1).toString() + " mAh",
@ -60,21 +60,22 @@ class BatteryFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChang
if (preference === mChargePref) { if (preference === mChargePref) {
val value = newValue as Boolean val value = newValue as Boolean
Battery.chargeSysfs = if (value) 0 else 1 Battery.chargeSysfs = if (value) 0 else 1
mChargePref!!.isChecked = Battery.chargeSysfs == 0 mChargePref.isChecked = Battery.chargeSysfs == 0
mSharedPreferences.edit().putBoolean(PREF_CHARGE, Battery.chargeSysfs == 0).apply()
return true return true
} else if (preference === mFastChargePref) { } else if (preference === mFastChargePref) {
val value = newValue as Boolean val value = newValue as Boolean
Battery.setFastCharge(if (value) 0 else 1) Battery.setFastCharge(if (value) 0 else 1)
mFastChargePref!!.isChecked = mFastChargePref.isChecked = Battery.fastChargeSysfs == 0
Battery.fastChargeSysfs == 0 mSharedPreferences.edit().putBoolean(PREF_FASTCHARGE, Battery.fastChargeSysfs == 0).apply()
return true return true
} }
return false return false
} }
companion object { companion object {
private const val PREF_FASTCHARGE = "fastcharge_pref" const val PREF_FASTCHARGE = "fastcharge_pref"
private const val PREF_CHARGE = "charge_pref" const val PREF_CHARGE = "charge_pref"
private const val BATTERY_INFO = "battery_info" private const val BATTERY_INFO = "battery_info"
} }
} }

View file

@ -19,7 +19,7 @@ package com.eurekateam.samsungextras.dolby
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.android.internal.R.id.content import android.R.id.content
class DolbyActivity : FragmentActivity() { class DolbyActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -28,7 +28,7 @@ class DolbyActivity : FragmentActivity() {
val dolbyFragment: DolbyFragment val dolbyFragment: DolbyFragment
if (fragment == null) { if (fragment == null) {
dolbyFragment = DolbyFragment() dolbyFragment = DolbyFragment()
this.supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.add(content, dolbyFragment) .add(content, dolbyFragment)
.commit() .commit()
} }

View file

@ -17,9 +17,11 @@
package com.eurekateam.samsungextras.dolby package com.eurekateam.samsungextras.dolby
import android.os.Bundle import android.os.Bundle
import android.os.PerformanceHintManager
import android.widget.Switch import android.widget.Switch
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import com.android.settingslib.widget.MainSwitchPreference import com.android.settingslib.widget.MainSwitchPreference
import com.android.settingslib.widget.OnMainSwitchChangeListener import com.android.settingslib.widget.OnMainSwitchChangeListener
@ -30,7 +32,7 @@ import com.eurekateam.samsungextras.R
class DolbyFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener { class DolbyFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener {
private lateinit var switchBar: MainSwitchPreference private lateinit var switchBar: MainSwitchPreference
private val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.dolby_settings) addPreferencesFromResource(R.xml.dolby_settings)
@ -49,6 +51,7 @@ class DolbyFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener {
override fun onSwitchChanged(switchView: Switch, isChecked: Boolean) { override fun onSwitchChanged(switchView: Switch, isChecked: Boolean) {
DolbyCore.setEnabled(isChecked) DolbyCore.setEnabled(isChecked)
mSharedPreferences.edit().putBoolean(PREF_DOLBY_ENABLE, true).apply()
} }
private fun setProfile(profile: Int) { private fun setProfile(profile: Int) {
@ -58,11 +61,12 @@ class DolbyFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener {
val preference = findPreference<RadioButtonPreference>(key)!! val preference = findPreference<RadioButtonPreference>(key)!!
preference.isChecked = value == profile preference.isChecked = value == profile
} }
mSharedPreferences.edit().putInt(PREF_DOLBY_PROFILE, profile).apply()
} }
companion object { companion object {
const val PREF_DOLBY_ENABLE = "dolby_enable" const val PREF_DOLBY_ENABLE = "dolby_enable"
const val PREF_DOLBY_PROFILE = "dolby_profile"
val PREF_DOLBY_MODES = mapOf( val PREF_DOLBY_MODES = mapOf(
"dolby_profile_auto" to DolbyCore.PROFILE_AUTO, "dolby_profile_auto" to DolbyCore.PROFILE_AUTO,
"dolby_profile_movie" to DolbyCore.PROFILE_MOVIE, "dolby_profile_movie" to DolbyCore.PROFILE_MOVIE,

View file

@ -43,6 +43,6 @@ class DolbyTile : TileService() {
PreferenceManager.getDefaultSharedPreferences(this) PreferenceManager.getDefaultSharedPreferences(this)
.edit() .edit()
.putBoolean(PREF_DOLBY_ENABLE, isEnabled) .putBoolean(PREF_DOLBY_ENABLE, isEnabled)
.commit() .apply()
} }
} }

View file

@ -19,12 +19,12 @@ import android.R.id.content
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.android.internal.R.id.home import android.R.id.home
class FlashLightActivity : FragmentActivity() { class FlashLightActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val fragment = this.supportFragmentManager.findFragmentById(content) val fragment = supportFragmentManager.findFragmentById(content)
val flashLightFragment: FlashLightFragment val flashLightFragment: FlashLightFragment
if (fragment == null) { if (fragment == null) {
flashLightFragment = FlashLightFragment() flashLightFragment = FlashLightFragment()

View file

@ -15,43 +15,39 @@
*/ */
package com.eurekateam.samsungextras.flashlight package com.eurekateam.samsungextras.flashlight
import android.os.Bundle
import android.os.Build import android.os.Build
import android.os.Bundle
import android.os.PerformanceHintManager
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.eurekateam.samsungextras.GlobalConstants import androidx.preference.PreferenceManager
import com.eurekateam.samsungextras.R import com.eurekateam.samsungextras.R
import com.eurekateam.samsungextras.interfaces.Flashlight import com.eurekateam.samsungextras.interfaces.Flashlight
import com.eurekateam.samsungextras.preferences.CustomSeekBarPreference import com.eurekateam.samsungextras.preferences.CustomSeekBarPreference
import java.io.File
class FlashLightFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener { class FlashLightFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
private var mFlashLightPref: CustomSeekBarPreference? = null private lateinit var mFlashLightPref: CustomSeekBarPreference
private val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.flashlight_settings) addPreferencesFromResource(R.xml.flashlight_settings)
mFlashLightPref = findPreference(PREF_FLASHLIGHT) mFlashLightPref = findPreference(PREF_FLASHLIGHT)!!
assert(mFlashLightPref != null) mFlashLightPref.onPreferenceChangeListener = this
mFlashLightPref!!.onPreferenceChangeListener = this mFlashLightPref.setMax(10)
if (!File(GlobalConstants.FLASHLIGHT_SYSFS).exists()) { mFlashLightPref.setMin(1)
mFlashLightPref!!.isEnabled = false mFlashLightPref.value = Flashlight.getFlash(if (Build.DEVICE == "a10") 1 else 0)
}
mFlashLightPref!!.setMax(10)
mFlashLightPref!!.setMin(1)
val isa10 = Build.DEVICE == "a10"
mFlashLightPref!!.value = Flashlight.getFlash(if (isa10) 1 else 0)
} }
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
if (preference === mFlashLightPref) { if (preference == mFlashLightPref) {
val value = newValue as Int val value = newValue as Int
Flashlight.setFlash(value) Flashlight.setFlash(value)
mFlashLightPref!!.setValue(value, true) mSharedPreferences.edit().putInt(PREF_FLASHLIGHT, value).apply()
return true return true
} }
return false return false
} }
companion object { companion object {
private const val PREF_FLASHLIGHT = "flashlight_pref" const val PREF_FLASHLIGHT = "flashlight_pref"
} }
} }

View file

@ -28,7 +28,7 @@ import android.util.Log
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import com.eurekateam.samsungextras.utils.SurfaceFlingerFPS import com.eurekateam.samsungextras.SurfaceFlingerFPS
import kotlin.math.roundToInt import kotlin.math.roundToInt
open class FPSInfoService : Service() { open class FPSInfoService : Service() {

View file

@ -24,11 +24,11 @@ import androidx.fragment.app.FragmentActivity
class ClearSpeakerActivity : FragmentActivity() { class ClearSpeakerActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val fragment = this.supportFragmentManager.findFragmentById(content) val fragment = supportFragmentManager.findFragmentById(content)
val clearSpeakerFragment: ClearSpeakerFragment val clearSpeakerFragment: ClearSpeakerFragment
if (fragment == null) { if (fragment == null) {
clearSpeakerFragment = ClearSpeakerFragment() clearSpeakerFragment = ClearSpeakerFragment()
this.supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.add(content, clearSpeakerFragment) .add(content, clearSpeakerFragment)
.commit() .commit()
} }

View file

@ -15,7 +15,6 @@
*/ */
package com.eurekateam.samsungextras.speaker package com.eurekateam.samsungextras.speaker
import android.content.Context
import android.media.AudioManager import android.media.AudioManager
import android.media.MediaPlayer import android.media.MediaPlayer
import android.os.Bundle import android.os.Bundle
@ -29,16 +28,14 @@ import com.eurekateam.samsungextras.R
import java.io.IOException import java.io.IOException
class ClearSpeakerFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener { class ClearSpeakerFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
private var mAudioManager: AudioManager? = null private lateinit var mHandler: Handler
private var mHandler: Handler? = null private lateinit var mMediaPlayer: MediaPlayer
private var mMediaPlayer: MediaPlayer? = null private lateinit var mClearSpeakerPref: SwitchPreference
private var mClearSpeakerPref: SwitchPreference? = null
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.clear_speaker_settings) addPreferencesFromResource(R.xml.clear_speaker_settings)
mClearSpeakerPref = findPreference(PREF_CLEAR_SPEAKER) mClearSpeakerPref = findPreference(PREF_CLEAR_SPEAKER)!!
mClearSpeakerPref!!.onPreferenceChangeListener = this mClearSpeakerPref.onPreferenceChangeListener = this
mHandler = Handler(Looper.getMainLooper()) mHandler = Handler(Looper.getMainLooper())
mAudioManager = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
} }
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
@ -46,8 +43,8 @@ class ClearSpeakerFragment : PreferenceFragmentCompat(), Preference.OnPreference
val value = newValue as Boolean val value = newValue as Boolean
if (value) { if (value) {
if (startPlaying()) { if (startPlaying()) {
mHandler!!.removeCallbacksAndMessages(null) mHandler.removeCallbacksAndMessages(null)
mHandler!!.postDelayed({ stopPlaying() }, 30000) mHandler.postDelayed({ stopPlaying() }, 30000)
return true return true
} }
} }
@ -65,23 +62,22 @@ class ClearSpeakerFragment : PreferenceFragmentCompat(), Preference.OnPreference
* @return true on success, else false * @return true on success, else false
*/ */
private fun startPlaying(): Boolean { private fun startPlaying(): Boolean {
mAudioManager!!.setParameters("status_earpiece_clean=on")
mMediaPlayer = MediaPlayer() mMediaPlayer = MediaPlayer()
requireActivity().volumeControlStream = AudioManager.STREAM_MUSIC requireActivity().volumeControlStream = AudioManager.STREAM_MUSIC
mMediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC) mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
mMediaPlayer!!.isLooping = true mMediaPlayer.isLooping = true
try { try {
resources.openRawResourceFd(R.raw.clear_speaker_sound).use { file -> resources.openRawResourceFd(R.raw.clear_speaker_sound).use { file ->
mMediaPlayer!!.setDataSource( mMediaPlayer.setDataSource(
file.fileDescriptor, file.fileDescriptor,
file.startOffset, file.startOffset,
file.length file.length
) )
} }
mClearSpeakerPref!!.isEnabled = false mClearSpeakerPref.isEnabled = false
mMediaPlayer!!.setVolume(1.0f, 1.0f) mMediaPlayer.setVolume(1.0f, 1.0f)
mMediaPlayer!!.prepare() mMediaPlayer.prepare()
mMediaPlayer!!.start() mMediaPlayer.start()
} catch (ioe: IOException) { } catch (ioe: IOException) {
Log.e(TAG, "Failed to play speaker clean sound!", ioe) Log.e(TAG, "Failed to play speaker clean sound!", ioe)
return false return false
@ -93,14 +89,13 @@ class ClearSpeakerFragment : PreferenceFragmentCompat(), Preference.OnPreference
* Stops and invalidates * Stops and invalidates
*/ */
private fun stopPlaying() { private fun stopPlaying() {
if (mMediaPlayer != null) { if (::mMediaPlayer.isInitialized) {
mMediaPlayer!!.stop() mMediaPlayer.stop()
mMediaPlayer!!.reset() mMediaPlayer.reset()
mMediaPlayer!!.release() mMediaPlayer.release()
} }
mAudioManager!!.setParameters("status_earpiece_clean=off") mClearSpeakerPref.isEnabled = true
mClearSpeakerPref!!.isEnabled = true mClearSpeakerPref.isChecked = false
mClearSpeakerPref!!.isChecked = false
} }
companion object { companion object {