From 7b598903ae777b6e333a4b8228581fae3c3644b7 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Tue, 16 May 2023 09:49:16 +0200 Subject: [PATCH] Implemented functionality in settings for text style, size, opacity, highlight style, intensity, opacity, and order --- .../com/denizd/textbasic/db/QuoteStorage.kt | 13 ++- .../textbasic/fragment/SettingsNewFragment.kt | 109 ++++++++++++++++-- .../textbasic/util/SettingsPreference.kt | 2 +- .../com/denizd/textbasic/widget/CanvasText.kt | 2 +- .../main/res/layout/fragment_settings_new.xml | 18 +-- app/src/main/res/values-de/strings.xml | 6 +- app/src/main/res/values/strings.xml | 4 +- 7 files changed, 124 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/denizd/textbasic/db/QuoteStorage.kt b/app/src/main/java/com/denizd/textbasic/db/QuoteStorage.kt index 8f8540a..ae7bc09 100644 --- a/app/src/main/java/com/denizd/textbasic/db/QuoteStorage.kt +++ b/app/src/main/java/com/denizd/textbasic/db/QuoteStorage.kt @@ -41,6 +41,7 @@ class QuoteStorage private constructor(context: Context) { private const val KEY_AVG_WIDTH = "avgwidth" private const val KEY_AVG_HEIGHT = "avgheight" private const val KEY_OUTLINE_SIZE = "outlinesize" + const val KEY_OUTLINE_SIZE_NEW = "outlinesizeint" } private val prefs = context.getSharedPreferences(PREF_NAME, 0) @@ -108,13 +109,19 @@ class QuoteStorage private constructor(context: Context) { 2 -> Typeface.MONOSPACE else -> Typeface.SANS_SERIF }, - getTypefaceStyle() + when (getTypefaceStyle()) { + 1 -> Typeface.BOLD + 2 -> Typeface.ITALIC + 3 -> Typeface.BOLD_ITALIC + else -> Typeface.NORMAL + } ) fun getTypefaceStyle(): Int = prefs.getInt(KEY_TYPEFACE_STYLE, 0) fun setTypefaceStyle(newValue: Int) { prefs.edit().putInt(KEY_TYPEFACE_STYLE, newValue).apply() } fun getOutlineSize(): Float = prefs.getFloat(KEY_OUTLINE_SIZE, 8f) + fun getOutlineSizeNew(): Int = prefs.getInt(KEY_OUTLINE_SIZE_NEW, 8) // Pair fun getColours( @@ -132,13 +139,13 @@ class QuoteStorage private constructor(context: Context) { Color.parseColor( ColorTransparentUtils.transparentColor( context.getColor(colours.first), - textTransparency * 5 + textTransparency, ) ),//Color.parseColor(ColorTransparentUtils.transparentColor(colours.first, 10)), Color.parseColor( ColorTransparentUtils.transparentColor( context.getColor(colours.second), - bgTransparency * 5 + bgTransparency, ) ) ) diff --git a/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt b/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt index ad9d59c..c490004 100644 --- a/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt +++ b/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt @@ -10,6 +10,7 @@ import com.denizd.textbasic.databinding.FragmentSettingsNewBinding import com.denizd.textbasic.db.QuoteStorage import com.denizd.textbasic.util.SettingsPreference import com.denizd.textbasic.util.viewBinding +import com.denizd.textbasic.widget.CanvasText import com.google.android.material.button.MaterialButton class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { @@ -23,6 +24,9 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { storage = QuoteStorage.getInstance(context) + // --- text font --- // + + // --- font style --- // binding.toggleGroupFont.apply { check(when (storage.getTypefaceStyle()) { @@ -40,6 +44,8 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { R.id.toggle_button_font_bold_italic -> 3 else -> 0 }) + + updatePreview() } } } @@ -118,25 +124,70 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { // --- highlight style --- // binding.toggleGroupHighlightStyle.apply { - check(when (storage.getBackgroundType()) { - 0 -> R.id.toggle_button_highlight_background - 1 -> R.id.toggle_button_highlight_stroke - 2 -> R.id.toggle_button_highlight_shadow - else -> R.id.toggle_button_highlight_none // 3 - }) + check(checkBackgroundIntensity(storage.getBackgroundType())) addOnButtonCheckedListener { _, checkedId, isChecked -> if (isChecked) { - storage.setBackgroundType(when (checkedId) { - R.id.toggle_button_highlight_background -> 0 - R.id.toggle_button_highlight_stroke -> 1 - R.id.toggle_button_highlight_shadow -> 2 - else -> 3 // none - }) + when (checkedId) { + R.id.toggle_button_highlight_background -> { + storage.setBackgroundType(0) + checkBackgroundIntensity(0) + } + R.id.toggle_button_highlight_stroke -> { + storage.setBackgroundType(1) + checkBackgroundIntensity(1) + } + R.id.toggle_button_highlight_shadow -> { + storage.setBackgroundType(2) + checkBackgroundIntensity(2) + } + else -> { + storage.setBackgroundType(3) + checkBackgroundIntensity(3) + } // none + } + + updatePreview() } } } + // --- highlight intensity --- // + binding.textIntensity.text = storage.getInt(SettingsPreference.HIGHLIGHT_INTENSITY, 100).toString() + + binding.buttonIntensityDecreaseFast.setOnClickAction( + 0, + 100, + isPositive = false, + isFast = true, + binding.textIntensity, + SettingsPreference.HIGHLIGHT_INTENSITY, + ) + binding.buttonIntensityDecrease.setOnClickAction( + 0, + 100, + isPositive = false, + isFast = false, + binding.textIntensity, + SettingsPreference.HIGHLIGHT_INTENSITY, + ) + binding.buttonIntensityIncrease.setOnClickAction( + 0, + 100, + isPositive = true, + isFast = false, + binding.textIntensity, + SettingsPreference.HIGHLIGHT_INTENSITY, + ) + binding.buttonIntensityIncreaseFast.setOnClickAction( + 0, + 100, + isPositive = true, + isFast = true, + binding.textIntensity, + SettingsPreference.HIGHLIGHT_INTENSITY, + ) + // --- text highlight transparency --- // binding.textHighlightTransparency.text = storage.getInt(SettingsPreference.HIGHLIGHT_TRANSPARENCY, 100).toString() @@ -189,6 +240,31 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { @SuppressLint("SetTextI18n") binding.appVersionText.text = "${BuildConfig.VERSION_NAME}-${if (BuildConfig.DEBUG) "dev" else "release"}" + + updatePreview() + } + + /** + * Retrieves which button to check for the highlight, and sets the visibility of the intensity + * modifying layout accordingly. + */ + private fun checkBackgroundIntensity(index: Int): Int = when (index) { + 0 -> { // background + binding.layoutIntensity.visibility = View.GONE + R.id.toggle_button_highlight_background + } + 1 -> { // stroke + binding.layoutIntensity.visibility = View.VISIBLE + R.id.toggle_button_highlight_stroke + } + 2 -> { // shadow + binding.layoutIntensity.visibility = View.VISIBLE + R.id.toggle_button_highlight_shadow + } + else -> { // none + binding.layoutIntensity.visibility = View.GONE + R.id.toggle_button_highlight_none + } } // TODO horrible, horrible, horrible function. but it works. fix this in the future. please. @@ -223,6 +299,15 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) { storage.setInt(pref, value) textField.text = value.toString() + + updatePreview() } } + + private fun updatePreview() { + + val bitmap = CanvasText.drawText(context, true) + + binding.textPreview.setImageBitmap(bitmap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/textbasic/util/SettingsPreference.kt b/app/src/main/java/com/denizd/textbasic/util/SettingsPreference.kt index a78e752..5f32d42 100644 --- a/app/src/main/java/com/denizd/textbasic/util/SettingsPreference.kt +++ b/app/src/main/java/com/denizd/textbasic/util/SettingsPreference.kt @@ -5,7 +5,7 @@ import com.denizd.textbasic.db.QuoteStorage enum class SettingsPreference(val key: String) { TEXT_SIZE(QuoteStorage.KEY_TEXT_SIZE), TEXT_TRANSPARENCY(QuoteStorage.KEY_TEXT_TRANSPARENCY), - HIGHLIGHT_INTENSITY(""), // TODO + HIGHLIGHT_INTENSITY(QuoteStorage.KEY_OUTLINE_SIZE_NEW), // TODO HIGHLIGHT_TRANSPARENCY(QuoteStorage.KEY_BG_TRANSPARENCY), ; } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt b/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt index d8fdb41..2df144b 100644 --- a/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt +++ b/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt @@ -22,7 +22,7 @@ class CanvasText { } val widgetSize = storage.getSize() - val outlineSize = storage.getOutlineSize() + val outlineSize = storage.getOutlineSizeNew().toFloat() val bmp = if (isPreview) { Bitmap.createBitmap(1024, 256, Bitmap.Config.ARGB_8888) diff --git a/app/src/main/res/layout/fragment_settings_new.xml b/app/src/main/res/layout/fragment_settings_new.xml index ae6ef2e..7378a86 100644 --- a/app/src/main/res/layout/fragment_settings_new.xml +++ b/app/src/main/res/layout/fragment_settings_new.xml @@ -30,14 +30,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" - android:background="@color/md_theme_light_background" app:layout_scrollFlags="scroll|snap"> + - + + + + + - + @@ -387,7 +387,8 @@ android:layout_marginEnd="8dp" android:orientation="vertical" android:paddingHorizontal="16dp" - android:paddingVertical="8dp"> + android:paddingVertical="8dp" + android:animateLayoutChanges="true"> Kursiv Fett & Kursiv Textgröße - Texttransparenz + Textopazität Highlight-Stil Stil @@ -43,11 +43,11 @@ Umrandet Schatten Stärke - Highlight-Transparenz + Highlight-Opazität Widget Nutze zufällige Reihenfolge - Sonst wird die Reihenfolge der Liste genutzt; ändere sie durch D rag & Drop + Sonst wird die Reihenfolge der Liste genutzt; ändere sie durch Drag & Drop Standard Zufall Setze Position des Texts diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f059231..7dc1474 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,7 +33,7 @@ Italic Bold & Italic Text size - Text transparency + Text opacity Highlight Style Style @@ -42,7 +42,7 @@ Stroke Shadow Intensity - Transparency + Opacity Widget Randomise entry order