diff --git a/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt b/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
index 8676629..5121eb2 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/AppMenuAdapter.kt
@@ -63,7 +63,7 @@ class AppMenuAdapter(
}
inner class AppViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val listItem: FrameLayout = itemView.findViewById(R.id.listItem)
+ val listItem: FrameLayout = itemView.findViewById(R.id.listItem)
val textView: TextView = listItem.findViewById(R.id.appName)
val actionMenuLayout: LinearLayout = listItem.findViewById(R.id.actionMenu)
val editView: LinearLayout = listItem.findViewById(R.id.renameView)
@@ -136,14 +136,15 @@ class AppMenuAdapter(
uiUtils.setItemSpacing(holder.textView)
+ uiUtils.setTextFont(holder.textView)
+ holder.textView.setTextColor(sharedPreferenceManager.getTextColor())
+
// Update the application information (allows updating apps to work)
val appInfo = appUtils.getAppInfo(
app.first.applicationInfo.packageName,
app.third
)
- holder.textView.setTextColor(sharedPreferenceManager.getTextColor())
-
// Set app name on the menu. If the app has been uninstalled, replace it with "Removing" until the app menu updates.
val appLabel: CharSequence = appInfo?.let { activity.packageManager.getApplicationLabel(it) } ?: "Removing..."
diff --git a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
index 04d6468..f6ade5d 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
@@ -296,6 +296,10 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setMenuItemColors(searchView)
uiUtils.setMenuItemColors(binding.menuTitle, "A9")
+ uiUtils.setTextFont(binding.homeView)
+ uiUtils.setFont(searchView)
+ uiUtils.setFont(binding.menuTitle)
+
uiUtils.setClockVisibility(clock)
uiUtils.setDateVisibility(dateText)
uiUtils.setSearchVisibility(searchView, binding.searchReplacement)
@@ -432,6 +436,18 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
uiUtils.setMenuItemColors(binding.menuTitle, "A9")
}
+ "textFont" -> {
+ uiUtils.setTextFont(binding.homeView)
+ uiUtils.setFont(searchView)
+ uiUtils.setFont(binding.menuTitle)
+ }
+
+ "textStyle" -> {
+ uiUtils.setTextFont(binding.homeView)
+ uiUtils.setFont(searchView)
+ uiUtils.setFont(binding.menuTitle)
+ }
+
"clockEnabled" -> {
uiUtils.setClockVisibility(clock)
}
diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
index afaefde..b303878 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt
@@ -3,6 +3,8 @@ package eu.ottop.yamlauncher.settings
import android.app.AlertDialog
import android.content.Context
import android.graphics.Color
+import android.os.Handler
+import android.os.Looper
import android.util.TypedValue
import android.widget.TextView
import androidx.fragment.app.FragmentActivity
@@ -30,7 +32,6 @@ class SharedPreferenceManager (private val context: Context) {
return Color.parseColor(textColor)
}
-
private fun getThemeColor(attr: Int): Int {
val typedValue = TypedValue()
val theme = context.theme
@@ -38,6 +39,14 @@ class SharedPreferenceManager (private val context: Context) {
return typedValue.data
}
+ fun getTextFont(): String? {
+ return preferences.getString("textFont", "system")
+ }
+
+ fun getTextStyle(): String? {
+ return preferences.getString("textStyle", "normal")
+ }
+
fun isBarVisible(): Boolean {
return preferences.getBoolean("barVisibility", false)
}
@@ -247,21 +256,26 @@ class SharedPreferenceManager (private val context: Context) {
editor.clear()
editor.apply()
+ // We need to navigate through the fragments to apply all settings properly
activity.supportFragmentManager
.beginTransaction()
.replace(R.id.settingsLayout, UISettingsFragment())
.commit()
- activity.supportFragmentManager
- .beginTransaction()
- .replace(R.id.settingsLayout, HomeSettingsFragment())
- .commit()
- activity.supportFragmentManager
- .beginTransaction()
- .replace(R.id.settingsLayout, AppMenuSettingsFragment())
- .commit()
- activity.supportFragmentManager
- .beginTransaction()
- .replace(R.id.settingsLayout, SettingsFragment())
- .commit()
+ // The swapping after ui settings needs to be delayed or font changes don't work in app menu
+ val handler = Handler(Looper.getMainLooper())
+ handler.postDelayed({
+ activity.supportFragmentManager
+ .beginTransaction()
+ .replace(R.id.settingsLayout, HomeSettingsFragment())
+ .commit()
+ activity.supportFragmentManager
+ .beginTransaction()
+ .replace(R.id.settingsLayout, AppMenuSettingsFragment())
+ .commit()
+ activity.supportFragmentManager
+ .beginTransaction()
+ .replace(R.id.settingsLayout, SettingsFragment())
+ .commit()
+ }, 50)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt b/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
index 3463965..17a4de6 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/utils/UIUtils.kt
@@ -4,6 +4,7 @@ import android.content.Context
import android.graphics.BlendMode
import android.graphics.BlendModeColorFilter
import android.graphics.Color
+import android.graphics.Typeface
import android.util.TypedValue
import android.view.Gravity
import android.view.View
@@ -50,7 +51,6 @@ class UIUtils(private val context: Context) {
BlendModeColorFilter(sharedPreferenceManager.getTextColor(), BlendMode.SRC_ATOP)
view.compoundDrawables[2]?.colorFilter =
BlendModeColorFilter(sharedPreferenceManager.getTextColor(), BlendMode.SRC_ATOP)
-
}
else -> {
view.setBackgroundColor(color)
@@ -62,28 +62,56 @@ class UIUtils(private val context: Context) {
return try {
view.javaClass.getMethod(methodName, Int::class.java)
true
- } catch (e: NoSuchMethodException) {
+ } catch (_: NoSuchMethodException) {
false
}
}
fun setMenuItemColors(view: TextView, alphaHex: String = "FF") {
- val viewTreeObserver = view.viewTreeObserver
+ val color = sharedPreferenceManager.getTextColor()
+ view.setTextColor(setAlpha(color, alphaHex))
+ view.setHintTextColor(setAlpha(color, "A9"))
- val globalLayoutListener = object : ViewTreeObserver.OnGlobalLayoutListener {
- override fun onGlobalLayout() {
- view.viewTreeObserver.removeOnGlobalLayoutListener(this)
- val color = sharedPreferenceManager.getTextColor()
- view.setTextColor(setAlpha(color, alphaHex))
- view.setHintTextColor(setAlpha(color, "A9"))
+ view.compoundDrawables[0]?.mutate()?.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_ATOP)
+ }
- view.compoundDrawables[0]?.mutate()?.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_ATOP)
+ fun setTextFont(view: View) {
+ when {
+ view is ViewGroup -> {
+ view.children.forEach { child ->
+ setTextFont(child)
+ }
+ }
+ hasMethod(view, "setTextAppearance") -> {
+ setFont(view as TextView)
}
}
+ }
- if (viewTreeObserver.isAlive) {
- viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener)
+ fun setFont(view: TextView) {
+ var font = sharedPreferenceManager.getTextFont()
+ val style = sharedPreferenceManager.getTextStyle()
+
+ if (font == "system") {
+ val typedArray = context.obtainStyledAttributes(android.R.style.TextAppearance_DeviceDefault, intArrayOf(android.R.attr.fontFamily))
+ font = typedArray.getString(0)
+ typedArray.recycle()
+ }
+
+ when (style) {
+ "normal" -> {
+ view.setTypeface(Typeface.create(font, Typeface.NORMAL))
+ }
+ "bold" -> {
+ view.setTypeface(Typeface.create(font, Typeface.BOLD))
+ }
+ "italic" -> {
+ view.setTypeface(Typeface.create(font, Typeface.ITALIC))
+ }
+ "bold-italic" -> {
+ view.setTypeface(Typeface.create(font, Typeface.BOLD_ITALIC))
+ }
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index f279770..041faab 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -99,7 +99,7 @@
android:layout_marginHorizontal="32dp"
android:layout_marginTop="45dp"
android:layout_marginBottom="27dp"
- android:fontFamily="@null"
+ android:fontFamily="More Fonts..."
android:format12Hour="hh:mm"
android:format24Hour="HH:mm"
android:textAlignment="textStart"
@@ -115,7 +115,6 @@
android:id="@+id/textDate"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:fontFamily="@null"
android:format12Hour="dd MMM yyyy"
android:format24Hour="dd MMM yyyy"
android:lineSpacingExtra="8sp"
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index e45e7ab..3aa641a 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -31,6 +31,56 @@
- material
+
+ - System
+ - Casual
+ - Cursive
+ - Monospace
+ - Sans Serif
+ - Sans Serif Black
+ - Sans Serif Condensed
+ - Sans Serif Condensed Light
+ - Sans Serif Condensed Medium
+ - Sans Serif Light
+ - Sans Serif Medium
+ - Sans Serif Smallcaps
+ - Sans Serif Thin
+ - Serif
+ - Serif Monospace
+
+
+
+ - system
+ - casual
+ - cursive
+ - monospace
+ - sans-serif
+ - sans-serif-black
+ - sans-serif-condensed
+ - sans-serif-condensed-light
+ - sans-serif-condensed-medium
+ - sans-serif-light
+ - sans-serif-medium
+ - sans-serif-smallcaps
+ - sans-serif-thin
+ - serif
+ - serif-monospace
+
+
+
+ - Normal
+ - Bold
+ - Italic
+ - Bold-Italic
+
+
+
+ - normal
+ - bold
+ - italic
+ - bold-italic
+
+
- 0.25x
- 0.5x
diff --git a/app/src/main/res/xml/ui_preferences.xml b/app/src/main/res/xml/ui_preferences.xml
index f289fe4..559faed 100644
--- a/app/src/main/res/xml/ui_preferences.xml
+++ b/app/src/main/res/xml/ui_preferences.xml
@@ -4,7 +4,7 @@
+
+
+