From c2801bf34076ac6050dd2e8895f430dd97a741c1 Mon Sep 17 00:00:00 2001 From: Kieran W <41634689+FredHappyface@users.noreply.github.com> Date: Thu, 24 Aug 2023 19:08:51 +0100 Subject: [PATCH] cleanup and linting --- README.md | 2 +- .../fredhappyface/ewesticker/ImageKeyboard.kt | 15 ++++++++++++++- .../fredhappyface/ewesticker/MainActivity.kt | 17 ++++++++++++----- .../ewesticker/StickerImporter.kt | 4 +++- .../ewesticker/adapter/StickerPackAdapter.kt | 2 +- app/src/main/lint.xml | 7 +++++++ app/src/main/res/layout/activity_main.xml | 3 --- app/src/main/res/layout/sticker_preview.xml | 1 - app/src/main/res/values-es/strings.xml | 4 ++++ app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/full_backup_content.xml | 1 + .../ewesticker/ExampleUnitTest.kt | 6 +++++- readme-assets/icons/name.png | Bin 16207 -> 0 bytes readme-assets/icons/proj-icon.png | Bin 8869 -> 0 bytes 14 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 app/src/main/lint.xml delete mode 100644 readme-assets/icons/name.png delete mode 100644 readme-assets/icons/proj-icon.png diff --git a/README.md b/README.md index 22271d1..d876336 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ # Android.EweSticker -Project Icon +Feature Graphic Sticker-board for android inspired by uSticker (forked from woosticker). diff --git a/app/src/main/java/com/fredhappyface/ewesticker/ImageKeyboard.kt b/app/src/main/java/com/fredhappyface/ewesticker/ImageKeyboard.kt index e20c22f..e271ad0 100644 --- a/app/src/main/java/com/fredhappyface/ewesticker/ImageKeyboard.kt +++ b/app/src/main/java/com/fredhappyface/ewesticker/ImageKeyboard.kt @@ -304,11 +304,25 @@ class ImageKeyboard : InputMethodService(), StickerClickListener { } } + /** + * onStickerClicked + * + * When a sticker is tapped/ clicked. Update the cache and send the sticker + * + * @param sticker: File + */ override fun onStickerClicked(sticker: File) { this.recentCache.add(sticker.absolutePath) this.stickerSender.sendSticker(sticker) } + /** + * onStickerLongClicked + * + * When a sticker is long tapped/ clicked. Attach a new view to see an enlarged version of the sticker + * + * @param sticker: File + */ override fun onStickerLongClicked(sticker: File) { val fullStickerLayout = layoutInflater.inflate(R.layout.sticker_preview, this.keyboardRoot, false) as @@ -409,4 +423,3 @@ fun trimString(str: String): String { } return str } - diff --git a/app/src/main/java/com/fredhappyface/ewesticker/MainActivity.kt b/app/src/main/java/com/fredhappyface/ewesticker/MainActivity.kt index 29b02a7..d6b3a54 100644 --- a/app/src/main/java/com/fredhappyface/ewesticker/MainActivity.kt +++ b/app/src/main/java/com/fredhappyface/ewesticker/MainActivity.kt @@ -85,9 +85,9 @@ class MainActivity : AppCompatActivity() { /** * Called on button press to launch settings * - * @param view: View + * @param ignoredView: View */ - fun enableKeyboard(view: View) { + fun enableKeyboard(ignoredView: View) { val intent = Intent(Settings.ACTION_INPUT_METHOD_SETTINGS) startActivity(intent) } @@ -95,16 +95,23 @@ class MainActivity : AppCompatActivity() { /** * Called on button press to choose a new directory * - * @param view: View + * @param ignoredView: View */ - fun chooseDir(view: View) { + fun chooseDir(ignoredView: View) { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) chooseDirResultLauncher.launch(intent) } - fun reloadStickers(view: View) { + /** + * reloadStickers + * + * Call this function when a user taps the reload stickers button. If we have a set stickerDirPath, call importStickers() + * + * @param ignoredView: View + */ + fun reloadStickers(ignoredView: View) { val stickerDirPath = this.sharedPreferences.getString( "stickerDirPath", null ) diff --git a/app/src/main/java/com/fredhappyface/ewesticker/StickerImporter.kt b/app/src/main/java/com/fredhappyface/ewesticker/StickerImporter.kt index 9272644..9bb24f0 100644 --- a/app/src/main/java/com/fredhappyface/ewesticker/StickerImporter.kt +++ b/app/src/main/java/com/fredhappyface/ewesticker/StickerImporter.kt @@ -123,7 +123,9 @@ class StickerImporter( } } } - inputStream.close() + withContext(Dispatchers.IO) { + inputStream.close() + } totalStickers++ } } catch (_: IOException) { diff --git a/app/src/main/java/com/fredhappyface/ewesticker/adapter/StickerPackAdapter.kt b/app/src/main/java/com/fredhappyface/ewesticker/adapter/StickerPackAdapter.kt index a8b1c7a..86c8db5 100644 --- a/app/src/main/java/com/fredhappyface/ewesticker/adapter/StickerPackAdapter.kt +++ b/app/src/main/java/com/fredhappyface/ewesticker/adapter/StickerPackAdapter.kt @@ -42,7 +42,7 @@ class StickerPackAdapter( return@setOnLongClickListener true } holder.stickerThumbnail.setOnTouchListener { _, event -> - gestureDetector.onTouchEvent(event) + return@setOnTouchListener gestureDetector.onTouchEvent(event) } } diff --git a/app/src/main/lint.xml b/app/src/main/lint.xml new file mode 100644 index 0000000..274a24e --- /dev/null +++ b/app/src/main/lint.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3554d7b..9cebda0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,13 +7,11 @@ android:background="@color/bg"> Paquete de etiqueta actualización Elija el directorio de fuente de la etiqueta Paquetes de etiqueta cargada actual Información: + Recargar pegatinas - Sendero: No se establece - Fecha: @@ -19,6 +20,8 @@ Opciones Mostrar botón atrás en navbar Usar layout vertical + Restaurar el teclado anterior al cerrar el teclado + Habilitar el deslizamiento entre paquetes (perpendicular a la dirección de desplazamiento) "Número de filas: " "Tamaño del icono: " @@ -61,5 +64,6 @@ Copyright © Randy Zhou E031: Algunos pegatinas no se importaron (%1$d importado).Pegatinas max alcanzadas E032: Algunos pegatinas no importaron (%1$d importado).Tamaño máximo del paquete alcanzado E033: Algunos pegatinas no importaron (%1$d importado).Formatos no compatibles encontrados + E034: Falló la recarga de stickers, intenta elegir un directorio de origen de stickers E041: IOException inesperado al convertir la pegatina diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb42b2b..74e433b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,6 +65,6 @@ Copyright © Randy Zhou E031: Some stickers failed to import (%1$d imported). Max stickers reached E032: Some stickers failed to import (%1$d imported). Max pack size reached E033: Some stickers failed to import (%1$d imported). Unsupported formats found - E034: Reload stickers failed, try choosing a sticker source directory + E034: Reloading stickers failed, try choosing a sticker source directory E041: Unexpected IOException when converting sticker diff --git a/app/src/main/res/xml/full_backup_content.xml b/app/src/main/res/xml/full_backup_content.xml index e3ca821..1b2c6a3 100644 --- a/app/src/main/res/xml/full_backup_content.xml +++ b/app/src/main/res/xml/full_backup_content.xml @@ -1 +1,2 @@ + diff --git a/app/src/test/java/com/fredhappyface/ewesticker/ExampleUnitTest.kt b/app/src/test/java/com/fredhappyface/ewesticker/ExampleUnitTest.kt index ab3e863..795af3e 100644 --- a/app/src/test/java/com/fredhappyface/ewesticker/ExampleUnitTest.kt +++ b/app/src/test/java/com/fredhappyface/ewesticker/ExampleUnitTest.kt @@ -1,5 +1,9 @@ package com.fredhappyface.ewesticker +import org.hamcrest.MatcherAssert +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers +import org.hamcrest.Matchers.* import org.junit.Assert.assertEquals import org.junit.Test @@ -11,6 +15,6 @@ import org.junit.Test class ExampleUnitTest { @Test fun addition_isCorrect() { - assertEquals(4, 2 + 2) + assertThat(2 + 2, `is`(4)) } } diff --git a/readme-assets/icons/name.png b/readme-assets/icons/name.png deleted file mode 100644 index fc75660342e8707058410ada55e10219a5b1ede9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16207 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 diff --git a/readme-assets/icons/proj-icon.png b/readme-assets/icons/proj-icon.png deleted file mode 100644 index 082228d7043073624442e5a6726b04f787b09ab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8869 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

v&u*M- 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