Skip to content

Commit

Permalink
Improve header and lockscreen clock loading performance
Browse files Browse the repository at this point in the history
Signed-off-by: DrDisagree <[email protected]>
  • Loading branch information
Mahmud0808 committed Nov 5, 2024
1 parent 5386434 commit 7babf3f
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 151 deletions.
7 changes: 6 additions & 1 deletion app/src/main/java/com/drdisagree/iconify/common/Const.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,14 @@ object Const {
BootLoopProtector.PACKAGE_STRIKE_KEY_KEY,
)

// Shell commands
const val RESET_LOCKSCREEN_CLOCK_COMMAND =
"settings put secure lock_screen_custom_clock_face default"

// AI Plugin
const val AI_PLUGIN_PACKAGE = "it.dhd.oxygencustomizer.aiplugin"
const val AI_PLUGIN_URL = "https://github.com/DHD2280/Oxygen-Customizer-AI-Plugin/releases/latest/"
const val AI_PLUGIN_URL =
"https://github.com/DHD2280/Oxygen-Customizer-AI-Plugin/releases/latest/"

const val ACTION_HOOK_CHECK_REQUEST = "${BuildConfig.APPLICATION_ID}.ACTION_HOOK_CHECK_REQUEST"
const val ACTION_HOOK_CHECK_RESULT = "${BuildConfig.APPLICATION_ID}.ACTION_HOOK_CHECK_RESULT"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,26 +107,23 @@ class HeaderClock : ControlledPreferenceFragmentCompat() {
BuildConfig.APPLICATION_ID
) != 0
) {
maxIndex++
}

for (i in 0 until maxIndex) {
headerClock.add(
ClockModel(
if (i == 0) {
if (maxIndex == 0) {
requireContext().getString(R.string.clock_none)
} else {
requireContext().getString(R.string.clock_style_name, i)
requireContext().getString(R.string.clock_style_name, maxIndex)
},
requireContext()
.resources
.getIdentifier(
HEADER_CLOCK_LAYOUT + i,
HEADER_CLOCK_LAYOUT + maxIndex,
"layout",
BuildConfig.APPLICATION_ID
)
)
)
maxIndex++
}

return ClockPreviewAdapter(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,23 @@
package com.drdisagree.iconify.ui.fragments.xposed

import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import com.drdisagree.iconify.BuildConfig
import com.drdisagree.iconify.Iconify.Companion.appContext
import com.drdisagree.iconify.Iconify.Companion.appContextLocale
import com.drdisagree.iconify.R
import com.drdisagree.iconify.common.Const.RESET_LOCKSCREEN_CLOCK_COMMAND
import com.drdisagree.iconify.common.Dynamic.isAtleastA14
import com.drdisagree.iconify.common.Preferences.LSCLOCK_FONT_SWITCH
import com.drdisagree.iconify.common.Preferences.LSCLOCK_STYLE
import com.drdisagree.iconify.common.Preferences.LSCLOCK_SWITCH
import com.drdisagree.iconify.common.Resources.LOCKSCREEN_CLOCK_LAYOUT
import com.drdisagree.iconify.common.Resources.LSCLOCK_FONT_DIR
import com.drdisagree.iconify.config.RPrefs.getBoolean
import com.drdisagree.iconify.config.RPrefs.putBoolean
import com.drdisagree.iconify.ui.activities.MainActivity
import com.drdisagree.iconify.ui.adapters.ClockPreviewAdapter
import com.drdisagree.iconify.ui.base.ControlledPreferenceFragmentCompat
import com.drdisagree.iconify.ui.models.ClockModel
import com.drdisagree.iconify.ui.preferences.FilePickerPreference
import com.drdisagree.iconify.ui.preferences.RecyclerPreference
import com.drdisagree.iconify.utils.FileUtils.getRealPath
import com.drdisagree.iconify.utils.FileUtils.launchFilePicker
import com.drdisagree.iconify.utils.FileUtils.moveToIconifyHiddenDir
Expand Down Expand Up @@ -78,9 +72,7 @@ class LockscreenClock : ControlledPreferenceFragmentCompat() {
when (key) {
LSCLOCK_SWITCH -> {
if (getBoolean(key) && isAtleastA14) {
Shell.cmd(
"settings put secure lock_screen_custom_clock_face default"
).exec()
Shell.cmd(RESET_LOCKSCREEN_CLOCK_COMMAND).exec()
}

MainActivity.showOrHidePendingActionButton(
Expand All @@ -94,58 +86,10 @@ class LockscreenClock : ControlledPreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
super.onCreatePreferences(savedInstanceState, rootKey)

findPreference<RecyclerPreference>(LSCLOCK_STYLE)?.apply {
setAdapter(initLockscreenClockStyles())
setPreference(LSCLOCK_STYLE, 0)
}

findPreference<FilePickerPreference>("xposed_lockscreenclockfontpicker")?.apply {
setOnButtonClick {
launchFilePicker(context, "font", startActivityIntent)
}
}
}

@SuppressLint("DiscouragedApi")
private fun initLockscreenClockStyles(): ClockPreviewAdapter {
val lsClock = ArrayList<ClockModel>()
var maxIndex = 0

while (requireContext()
.resources
.getIdentifier(
LOCKSCREEN_CLOCK_LAYOUT + maxIndex,
"layout",
BuildConfig.APPLICATION_ID
) != 0
) {
maxIndex++
}

for (i in 0 until maxIndex) {
lsClock.add(
ClockModel(
if (i == 0) {
requireContext().getString(R.string.clock_none)
} else {
requireContext().getString(R.string.clock_style_name, i)
},
requireContext()
.resources
.getIdentifier(
LOCKSCREEN_CLOCK_LAYOUT + i,
"layout",
BuildConfig.APPLICATION_ID
)
)
)
}

return ClockPreviewAdapter(
requireContext(),
lsClock,
LSCLOCK_SWITCH,
LSCLOCK_STYLE
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import com.drdisagree.iconify.databinding.FragmentXposedLockscreenClockBinding
import com.drdisagree.iconify.ui.activities.MainActivity.Companion.replaceFragment
import com.drdisagree.iconify.ui.base.BaseFragment
import com.drdisagree.iconify.ui.base.ControlledPreferenceFragmentCompat
import com.drdisagree.iconify.ui.models.ClockCarouselItemViewModel
import com.drdisagree.iconify.ui.models.ClockCarouselItemModel
import com.drdisagree.iconify.ui.preferences.preferencesearch.SearchPreferenceResult
import com.drdisagree.iconify.ui.utils.ViewHelper.setHeader
import com.drdisagree.iconify.ui.views.ClockCarouselView
Expand All @@ -35,6 +35,7 @@ import com.drdisagree.iconify.utils.WallpaperUtils.loadWallpaper
import com.topjohnwu.superuser.internal.UiThreadHandler.handler
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.concurrent.Executors

class LockscreenClockParent : BaseFragment() {

Expand Down Expand Up @@ -89,65 +90,63 @@ class LockscreenClockParent : BaseFragment() {
val clockCarouselView =
binding.clockCarouselView.clockCarouselViewStub.inflate() as ClockCarouselView

val lsClock: MutableList<ClockCarouselItemViewModel> = ArrayList()
var maxIndex = 0
while (resources.getIdentifier(
"preview_lockscreen_clock_$maxIndex",
"layout",
BuildConfig.APPLICATION_ID
) != 0
) {
maxIndex++
}

for (i in 0 until maxIndex) {
lsClock.add(
ClockCarouselItemViewModel(
if (i == 0) {
requireContext().getString(R.string.clock_none)
} else {
requireContext().getString(R.string.clock_style_name, i)
},
i,
getInt(LSCLOCK_STYLE, 0) == i,
LOCKSCREEN_CLOCK_LAYOUT + i,
LayoutInflater.from(requireContext()).inflate(
resources.getIdentifier(
LOCKSCREEN_CLOCK_LAYOUT + i,
"layout",
BuildConfig.APPLICATION_ID
Executors.newSingleThreadExecutor().execute {
val lsClock: MutableList<ClockCarouselItemModel> = ArrayList()
var maxIndex = 0
while (resources.getIdentifier(
LOCKSCREEN_CLOCK_LAYOUT + maxIndex,
"layout",
BuildConfig.APPLICATION_ID
) != 0
) {
lsClock.add(
ClockCarouselItemModel(
if (maxIndex == 0) requireContext().getString(R.string.clock_none) else requireContext().getString(
R.string.clock_style_name,
maxIndex
),
null
).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
maxIndex,
getInt(LSCLOCK_STYLE, 0) == maxIndex,
LOCKSCREEN_CLOCK_LAYOUT + maxIndex,
LayoutInflater.from(requireContext()).inflate(
resources.getIdentifier(
LOCKSCREEN_CLOCK_LAYOUT + maxIndex,
"layout",
BuildConfig.APPLICATION_ID
),
null
).apply {
gravity = Gravity.CENTER_HORIZONTAL
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
).apply {
gravity = Gravity.CENTER_HORIZONTAL
}
}
}
)
)
)
}
maxIndex++
}

Handler(Looper.getMainLooper()).postDelayed({
clockCarouselView.setUpClockCarouselView(lsClock) { onClockSelected ->
updateRunnable?.let {
handler.removeCallbacks(it)
}
updateRunnable = Runnable {
putInt(LSCLOCK_STYLE, onClockSelected.clockLayout)
}
updateRunnable?.let {
handler.postDelayed(it, 500)
Handler(Looper.getMainLooper()).postDelayed({
clockCarouselView.setUpClockCarouselView(lsClock) { onClockSelected ->
updateRunnable?.let {
handler.removeCallbacks(it)
}
updateRunnable = Runnable {
putInt(LSCLOCK_STYLE, onClockSelected.clockLayout)
}
updateRunnable?.let {
handler.postDelayed(it, 500)
}
}
}

binding.clockCarouselView.screenPreviewClickView.setOnSideClickedListener { isStart ->
if (isStart) clockCarouselView.scrollToPrevious()
else clockCarouselView.scrollToNext()
}
}, 50)
binding.clockCarouselView.screenPreviewClickView.setOnSideClickedListener { isStart ->
if (isStart) clockCarouselView.scrollToPrevious()
else clockCarouselView.scrollToNext()
}
}, 50)
}
}

override fun onSearchResultClicked(result: SearchPreferenceResult) {
Expand All @@ -165,11 +164,14 @@ class LockscreenClockParent : BaseFragment() {
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
val bitmap = loadWallpaper(requireContext(), isLockscreen = true).await()

binding.clockCarouselView.preview.wallpaperDimmingScrim.visibility = View.VISIBLE
binding.clockCarouselView.preview.wallpaperFadeinScrim.visibility = View.VISIBLE
binding.clockCarouselView.preview.wallpaperPreviewSpinner.visibility = View.GONE

if (bitmap != null) {
binding.clockCarouselView.preview.wallpaperDimmingScrim.visibility = View.VISIBLE
binding.clockCarouselView.preview.wallpaperFadeinScrim.visibility = View.VISIBLE
binding.clockCarouselView.preview.wallpaperPreviewSpinner.visibility = View.GONE
binding.clockCarouselView.preview.wallpaperFadeinScrim.setImageBitmap(bitmap)
} else {
binding.clockCarouselView.preview.wallpaperFadeinScrim.setImageResource(R.drawable.google_pixel_wallpaper)
}
}
}
Expand All @@ -188,7 +190,7 @@ class LockscreenClockParent : BaseFragment() {

fun scrollToPreference() {
Handler(Looper.getMainLooper()).postDelayed({
binding?.scrollView!!.smoothScrollTo(0, binding.fragmentContainer.top)
binding.scrollView.smoothScrollTo(0, binding.fragmentContainer.top)
}, 180)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.drdisagree.iconify.ui.models

import android.view.View

class ClockCarouselItemViewModel(
class ClockCarouselItemModel(
val clockName: String,
val clockLayout: Int,
val isSelected: Boolean,
Expand Down
Loading

0 comments on commit 7babf3f

Please sign in to comment.