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

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.ServiceManager

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -15,43 +15,39 @@
*/
package com.eurekateam.samsungextras.flashlight
import android.os.Bundle
import android.os.Build
import android.os.Bundle
import android.os.PerformanceHintManager
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.eurekateam.samsungextras.GlobalConstants
import androidx.preference.PreferenceManager
import com.eurekateam.samsungextras.R
import com.eurekateam.samsungextras.interfaces.Flashlight
import com.eurekateam.samsungextras.preferences.CustomSeekBarPreference
import java.io.File
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?) {
addPreferencesFromResource(R.xml.flashlight_settings)
mFlashLightPref = findPreference(PREF_FLASHLIGHT)
assert(mFlashLightPref != null)
mFlashLightPref!!.onPreferenceChangeListener = this
if (!File(GlobalConstants.FLASHLIGHT_SYSFS).exists()) {
mFlashLightPref!!.isEnabled = false
}
mFlashLightPref!!.setMax(10)
mFlashLightPref!!.setMin(1)
val isa10 = Build.DEVICE == "a10"
mFlashLightPref!!.value = Flashlight.getFlash(if (isa10) 1 else 0)
mFlashLightPref = findPreference(PREF_FLASHLIGHT)!!
mFlashLightPref.onPreferenceChangeListener = this
mFlashLightPref.setMax(10)
mFlashLightPref.setMin(1)
mFlashLightPref.value = Flashlight.getFlash(if (Build.DEVICE == "a10") 1 else 0)
}
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
if (preference === mFlashLightPref) {
if (preference == mFlashLightPref) {
val value = newValue as Int
Flashlight.setFlash(value)
mFlashLightPref!!.setValue(value, true)
mSharedPreferences.edit().putInt(PREF_FLASHLIGHT, value).apply()
return true
}
return false
}
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.View
import android.view.WindowManager
import com.eurekateam.samsungextras.utils.SurfaceFlingerFPS
import com.eurekateam.samsungextras.SurfaceFlingerFPS
import kotlin.math.roundToInt
open class FPSInfoService : Service() {

View file

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

View file

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