diff --git a/app/src/main/java/com/denizd/textbasic/QuoteStorage.kt b/app/src/main/java/com/denizd/textbasic/QuoteStorage.kt index ec6c081..2f906a7 100644 --- a/app/src/main/java/com/denizd/textbasic/QuoteStorage.kt +++ b/app/src/main/java/com/denizd/textbasic/QuoteStorage.kt @@ -17,7 +17,8 @@ class QuoteStorage(context: Context) { private const val KEY_TEXT_SIZE = "textsize" private const val KEY_INVERTED = "inverted" private const val KEY_HIGH_CONTRAST = "hicontrast" - private const val KEY_TRANSPARENCY = "transparency" + private const val KEY_TEXT_TRANSPARENCY = "transparency_text" + private const val KEY_BG_TRANSPARENCY = "transparency" private const val KEY_RANDOM = "random" private const val KEY_WIDGET_POSITION = "widgetposition" private const val KEY_BACKGROUND_TYPE = "backgroundtype" @@ -51,10 +52,8 @@ class QuoteStorage(context: Context) { fun getTextSize() = prefs.getInt(KEY_TEXT_SIZE, 18) fun isInvertedEnabled(): Boolean = prefs.getBoolean(KEY_INVERTED, false) - - // TODO remove high contrast option once custom colours have been implemented - fun isHighContrastEnabled(): Boolean = prefs.getBoolean(KEY_HIGH_CONTRAST, false) - fun getTransparency(): Int = prefs.getInt(KEY_TRANSPARENCY, 100) + fun getTextTransparency(): Int = prefs.getInt(KEY_TEXT_TRANSPARENCY, 100) + fun getBackgroundTransparency(): Int = prefs.getInt(KEY_BG_TRANSPARENCY, 100) fun isOrderRandom(): Boolean = prefs.getBoolean(KEY_RANDOM, false) fun getWidgetGravity(): Int = prefs.getInt(KEY_WIDGET_POSITION, 1) fun getBackgroundType(): Int = prefs.getInt(KEY_BACKGROUND_TYPE, 0) @@ -73,7 +72,7 @@ class QuoteStorage(context: Context) { // Pair fun getColours( isInverted: Boolean = isInvertedEnabled(), - transparency: Int = getTransparency(), + transparency: Int = getBackgroundTransparency(), context: Context ): Pair { val colours = when (isInverted) { @@ -97,14 +96,22 @@ class QuoteStorage(context: Context) { fun getSize(): Pair = Pair(prefs.getInt(KEY_AVG_WIDTH, 1), prefs.getInt(KEY_AVG_HEIGHT, 1)) fun saveSettings( - textSize: Int, inverted: Boolean, transparency: Int, random: Boolean, - widgetPosition: Int, backgroundType: Int, typefaceIndex: Int, typefaceStyleIndex: Int, + textSize: Int, + inverted: Boolean, + textTransparency: Int, + bgTransparency: Int, + random: Boolean, + widgetPosition: Int, + backgroundType: Int, + typefaceIndex: Int, + typefaceStyleIndex: Int, outlineSize: Float ) { prefs.edit().apply { putInt(KEY_TEXT_SIZE, textSize) putBoolean(KEY_INVERTED, inverted) - putInt(KEY_TRANSPARENCY, transparency) + putInt(KEY_TEXT_TRANSPARENCY, textTransparency) + putInt(KEY_BG_TRANSPARENCY, bgTransparency) putBoolean(KEY_RANDOM, random) putInt(KEY_WIDGET_POSITION, widgetPosition) putInt(KEY_BACKGROUND_TYPE, backgroundType) diff --git a/app/src/main/java/com/denizd/textbasic/fragment/SettingsFragment.kt b/app/src/main/java/com/denizd/textbasic/fragment/SettingsFragment.kt index 9fa9041..d7e74c0 100644 --- a/app/src/main/java/com/denizd/textbasic/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/denizd/textbasic/fragment/SettingsFragment.kt @@ -66,7 +66,7 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) { } } - binding.transparencyPicker.apply { + binding.textTransparencyPicker.apply { minValue = 0 maxValue = 20 val formatter = NumberPicker.Formatter { value -> @@ -76,12 +76,35 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) { setFormatter(formatter) descendantFocusability = ViewGroup.FOCUS_BLOCK_DESCENDANTS wrapSelectorWheel = false - value = storage.getTransparency() + value = storage.getBackgroundTransparency() // Do not touch - fix for value on spinner not showing up until touched val f: Field = NumberPicker::class.java.getDeclaredField("mInputText") f.isAccessible = true - val inputText: EditText = f.get(binding.transparencyPicker) as EditText + val inputText: EditText = f.get(binding.textTransparencyPicker) as EditText + inputText.filters = arrayOfNulls(0) + + setOnValueChangedListener { _, _, _ -> + updatePreview() + } + } + + binding.bgTransparencyPicker.apply { + minValue = 0 + maxValue = 20 + val formatter = NumberPicker.Formatter { value -> + val temp = value * 5 + "" + temp + } + setFormatter(formatter) + descendantFocusability = ViewGroup.FOCUS_BLOCK_DESCENDANTS + wrapSelectorWheel = false + value = storage.getBackgroundTransparency() + + // Do not touch - fix for value on spinner not showing up until touched + val f: Field = NumberPicker::class.java.getDeclaredField("mInputText") + f.isAccessible = true + val inputText: EditText = f.get(binding.bgTransparencyPicker) as EditText inputText.filters = arrayOfNulls(0) setOnValueChangedListener { _, _, _ -> @@ -117,31 +140,6 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) { } } -// binding.switchHighContrast.apply { -// isChecked = storage.isHighContrastEnabled() -// -// setOnCheckedChangeListener { _, _ -> -// updatePreview() -// } -// } - -// binding.typefaceMenuTextview.apply { -// typefaceIndex = storage.getTypefaceIndex() -// val typefaces = context.resources.getStringArray(R.array.typefaces) -// val typefaceAdapter = ArrayAdapter( -// context, -// android.R.layout.simple_dropdown_item_1line, -// typefaces -// ) -// setAdapter(typefaceAdapter) -// setText(typefaces[typefaceIndex], false) -// -// setOnItemClickListener { adapterView, view, index, l -> -// typefaceIndex = index -// updatePreview() -// } -// } - binding.typefaceToggleButton.apply { typefaceIndex = storage.getTypefaceIndex() @@ -244,36 +242,13 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) { } } -// val isBackgroundDark = if (storage.isInvertedEnabled()) { // bg white -// (storage.getTransparency() * 5) <= 5 -// } else { // bg black -// (storage.getTransparency() * 5) > 5 -// } - -// Log.d("ASDF", isBackgroundDark.toString()) - -// binding.textPreviewBackground.setBackgroundColor( -// Color.parseColor(ColorTransparentUtils.transparentColor(context.getColor(if (isBackgroundDark) { -// R.color.md_theme_light_background -// } else { -// R.color.md_theme_dark_background -// }), storage.getTransparency() * 5))) - -// binding.textPreviewBackground.setBackgroundColor( -// storage.getColours( -// !storage.isInvertedEnabled(), -// abs(storage.getTransparency() - 100), -// context = context -// ).second -// ) - binding.textPreviewBackgroundDark.setBackgroundColor( Color.parseColor(ColorTransparentUtils.transparentColor( context.getColor(R.color.md_theme_dark_background), if (storage.isInvertedEnabled()) { - abs((storage.getTransparency() * 5)) + abs((storage.getBackgroundTransparency() * 5)) } else { - abs((storage.getTransparency() * 5) - 100) + abs((storage.getBackgroundTransparency() * 5) - 100) } )) ) @@ -281,26 +256,14 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) { val bitmap = CanvasText.drawText(context, true) binding.textPreview.setImageBitmap(bitmap) - -// val colours = storage.getColours( -// binding.switchInvert.isChecked, -//// binding.switchHighContrast.isChecked, -// binding.transparencyPicker.value, -// context -// ) -//// binding.exampleText.textSize = binding.textSizePicker.value.toFloat() -// binding.exampleText.setTextColor(colours.first) -// binding.background.setBackgroundColor(colours.second) - -// Log.d("VALVALUE", "${(binding.transparencyPicker.value * 5).toString()} /// ${colours.second}") } private fun save() { storage.saveSettings( binding.textSizePicker.value, binding.switchInvert.isChecked, -// binding.switchHighContrast.isChecked, - binding.transparencyPicker.value, + binding.textTransparencyPicker.value, + binding.bgTransparencyPicker.value, binding.switchRandom.isChecked, widgetGravity, backgroundIndex, 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 ca6abcd..682714d 100644 --- a/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt +++ b/app/src/main/java/com/denizd/textbasic/widget/CanvasText.kt @@ -71,46 +71,44 @@ class CanvasText { val boundsText = Rect() paint.getTextBounds(quote, 0, quote.length, boundsText) - val (x, y) = calculateWidgetGravity(storage.getWidgetGravity(), bmp, boundsText, isPreview) -// val x = canvas.width / 2 -// val y = ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2)) val padding = 16f val alignment = when (widgetGravity) { - 0 -> { + 0 -> { // Align TOP LEFT canvas.translate(boundsText.left.toFloat() + padding, 0f) Paint.Align.LEFT } - 1 -> { + 1 -> { // Align TOP CENTER canvas.translate(canvas.width / 2f, 0f) Paint.Align.CENTER } - 2 -> { + 2 -> { // Align TOP RIGHT canvas.translate(canvas.width.toFloat() - padding, 0f) Paint.Align.RIGHT } - 3 -> { - canvas.translate(boundsText.left.toFloat() + padding, 0f) + 3 -> { // Align CENTER LEFT + canvas.translate(boundsText.left.toFloat() + padding, (bmp.height.toFloat() / 2) - (staticLayout.height / 2)) Paint.Align.LEFT } - 5 -> { - canvas.translate(canvas.width.toFloat() - padding, 0f) + // 4 is defined further below + 5 -> { // Align CENTER RIGHT + canvas.translate(canvas.width.toFloat() - padding, (bmp.height.toFloat() / 2) - (staticLayout.height / 2)) Paint.Align.RIGHT } - 6 -> { + 6 -> { // Align BOTTOM LEFT canvas.translate(boundsText.left.toFloat() + padding, bmp.height.toFloat() - staticLayout.height - padding) Paint.Align.LEFT } - 7 -> { + 7 -> { // Align BOTTOM CENTER canvas.translate(canvas.width / 2f, bmp.height.toFloat() - staticLayout.height - padding) Paint.Align.CENTER } - 8 -> { + 8 -> { // Align BOTTOM RIGHT canvas.translate(canvas.width.toFloat() - padding, bmp.height.toFloat() - staticLayout.height - padding) Paint.Align.RIGHT } - else -> { // 4 - canvas.translate(canvas.width / 2f, 0f) + else -> { // 4; Align CENTER + canvas.translate(canvas.width / 2f, (bmp.height.toFloat() / 2) - (staticLayout.height / 2)) Paint.Align.CENTER } } diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 60d9177..6966e7d 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -42,13 +42,27 @@ + + + + @@ -287,6 +301,7 @@ android:id="@+id/text_preview" android:layout_width="match_parent" android:layout_height="wrap_content" + android:contentDescription="@string/widget_preview_content_desc" android:paddingHorizontal="4dp"/> @@ -340,6 +355,7 @@ android:layout_height="wrap_content" android:src="@drawable/arrow_top_left" android:background="@android:color/transparent" + android:contentDescription="@string/position_button_content_desc_tl" android:padding="@dimen/orientation_button_padding"/> @@ -372,6 +390,7 @@ android:layout_height="wrap_content" android:src="@drawable/arrow_left" android:background="@android:color/transparent" + android:contentDescription="@string/position_button_content_desc_cl" android:padding="@dimen/orientation_button_padding"/> @@ -404,6 +425,7 @@ android:layout_height="wrap_content" android:src="@drawable/arrow_bottom_left" android:background="@android:color/transparent" + android:contentDescription="@string/position_button_content_desc_bl" android:padding="@dimen/orientation_button_padding"/> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2498958..442fa35 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -4,7 +4,8 @@ Gib etwas ein… Dies ist ein Beispieltext Textgröße - Opazität + Textopazität + Hintergrundopazität Dicke Stärke Farben umkehren @@ -20,6 +21,17 @@ Position + Vorschau für das Widget + Positioniere Widget oben links + Positioniere Widget oben zentriert + Positioniere Widget oben rechts + Positioniere Widget zentriert links + Positioniere Widget zentriert + Positioniere Widget zentriert rechts + Positioniere Widget unten links + Positioniere Widget unten zentriert + Positioniere Widget unten rechts + Sans-Serif Serif Monospace diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae2e75f..2d3a284 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,8 @@ Enter something… This is an example text text size - opacity + text opacity + bg opacity thickness intensity Invert colours @@ -19,6 +20,17 @@ position + Preview for the widget + Position widget at top left + Position widget at top center + Position widget at top right + Position widget at center left + Position widget at center + Position widget at center right + Position widget at bottom left + Position widget at bottom center + Position widget at bottom right + Sans-Serif Serif Monospace