├── .editorconfig ├── .github └── workflows │ └── mirror-to-codeberg.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── TUTORIAL.md ├── app ├── build.gradle.kts ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── fredhappyface │ │ └── ewesticker │ │ └── ScreenshotTest.kt │ └── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ └── com │ │ └── fredhappyface │ │ └── ewesticker │ │ ├── ImageKeyboard.kt │ │ ├── MainActivity.kt │ │ ├── adapter │ │ └── StickerPackAdapter.kt │ │ ├── model │ │ └── StickerPack.kt │ │ ├── utilities │ │ ├── Cache.kt │ │ ├── StartLogger.kt │ │ ├── StickerClickListener.kt │ │ ├── StickerImporter.kt │ │ ├── StickerSender.kt │ │ ├── Toaster.kt │ │ └── Utils.kt │ │ └── view │ │ └── StickerPackViewHolder.kt │ ├── lint.xml │ └── res │ ├── drawable │ ├── arrow_back_circle.xml │ ├── ic_launcher_mono.xml │ ├── qwerty_key.xml │ ├── search_circle.xml │ └── time.xml │ ├── layout │ ├── activity_main.xml │ ├── keyboard_layout.xml │ ├── qwerty_key.xml │ ├── qwerty_layout.xml │ ├── sticker_card.xml │ └── sticker_preview.xml │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-hdpi │ └── ic_launcher_foreground.webp │ ├── mipmap-mdpi │ └── ic_launcher_foreground.webp │ ├── mipmap-xhdpi │ └── ic_launcher_foreground.webp │ ├── mipmap-xxhdpi │ └── ic_launcher_foreground.webp │ ├── mipmap-xxxhdpi │ └── ic_launcher_foreground.webp │ ├── resources.properties │ ├── values-ar │ └── strings.xml │ ├── values-bn │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-hi │ └── strings.xml │ ├── values-in │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-ko │ └── strings.xml │ ├── values-night │ └── themes.xml │ ├── values-pt │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-ur │ └── strings.xml │ ├── values-v27 │ └── styles.xml │ ├── values-zh-rCN │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values │ ├── colors.xml │ ├── dimen.xml │ ├── ic_launcher_background.xml │ ├── strings.xml │ ├── styles.xml │ └── themes.xml │ └── xml │ ├── data_extraction_rules.xml │ ├── file_paths.xml │ ├── full_backup_content.xml │ └── method.xml ├── build.gradle.kts ├── crowdin.yml ├── documentation ├── help │ └── README.md ├── reference │ ├── README.md │ ├── app │ │ ├── com.fredhappyface.ewesticker.adapter │ │ │ ├── -sticker-pack-adapter │ │ │ │ ├── -sticker-pack-adapter.md │ │ │ │ ├── get-item-count.md │ │ │ │ ├── index.md │ │ │ │ ├── on-bind-view-holder.md │ │ │ │ └── on-create-view-holder.md │ │ │ └── index.md │ │ ├── com.fredhappyface.ewesticker.model │ │ │ ├── -sticker-pack │ │ │ │ ├── -sticker-pack.md │ │ │ │ ├── index.md │ │ │ │ ├── sticker-list.md │ │ │ │ └── thumb-sticker.md │ │ │ └── index.md │ │ ├── com.fredhappyface.ewesticker.utilities │ │ │ ├── -cache │ │ │ │ ├── -cache.md │ │ │ │ ├── add.md │ │ │ │ ├── from-shared-pref.md │ │ │ │ ├── index.md │ │ │ │ ├── to-files.md │ │ │ │ └── to-shared-pref.md │ │ │ ├── -sticker-click-listener │ │ │ │ ├── index.md │ │ │ │ ├── on-sticker-clicked.md │ │ │ │ └── on-sticker-long-clicked.md │ │ │ ├── -sticker-sender │ │ │ │ ├── -sticker-sender.md │ │ │ │ ├── index.md │ │ │ │ └── send-sticker.md │ │ │ ├── -toaster │ │ │ │ ├── -toaster.md │ │ │ │ ├── index.md │ │ │ │ ├── set-state.md │ │ │ │ ├── toast-on-state.md │ │ │ │ └── toast.md │ │ │ ├── -utils │ │ │ │ ├── get-mime-type.md │ │ │ │ ├── get-supported-mimes.md │ │ │ │ └── index.md │ │ │ └── index.md │ │ ├── com.fredhappyface.ewesticker.view │ │ │ ├── -sticker-pack-view-holder │ │ │ │ ├── -sticker-pack-view-holder.md │ │ │ │ ├── index.md │ │ │ │ └── sticker-thumbnail.md │ │ │ └── index.md │ │ ├── com.fredhappyface.ewesticker │ │ │ ├── -image-keyboard │ │ │ │ ├── -image-keyboard.md │ │ │ │ ├── index.md │ │ │ │ ├── on-create-input-view.md │ │ │ │ ├── on-create.md │ │ │ │ ├── on-evaluate-fullscreen-mode.md │ │ │ │ ├── on-finish-input.md │ │ │ │ ├── on-start-input.md │ │ │ │ ├── on-sticker-clicked.md │ │ │ │ └── on-sticker-long-clicked.md │ │ │ ├── -main-activity │ │ │ │ ├── -main-activity.md │ │ │ │ ├── choose-dir.md │ │ │ │ ├── enable-keyboard.md │ │ │ │ ├── index.md │ │ │ │ └── reload-stickers.md │ │ │ ├── -sticker-importer │ │ │ │ ├── -sticker-importer.md │ │ │ │ ├── import-stickers.md │ │ │ │ └── index.md │ │ │ ├── index.md │ │ │ └── trim-string.md │ │ └── package-list │ └── index.md └── tutorials │ ├── README.md │ └── assets │ ├── configure.png │ ├── enable-import.png │ ├── few.png │ ├── make-packs.png │ ├── many.png │ ├── sys-enable.png │ ├── sys-import.png │ └── sys-switcher.png ├── example-files ├── gif │ ├── 1027+fire.gif │ └── 1122+thumbs_up.gif ├── heif │ └── 1130+man_shrugging.heif ├── jpeg │ └── 1329+OK_hand.jpeg ├── mp4 │ └── 1324+face_with_tears_of_joy.mp4 ├── png │ ├── 1101+fire.png │ └── 1324+face_with_tears_of_joy.png ├── svg │ └── hotel-svgrepo-com.svg ├── webm │ └── 1324+face_with_tears_of_joy.webm ├── webp │ └── 1345+face_with_crossed-out_eyes.webp └── webp_animated │ └── 1324+face_with_tears_of_joy.webp ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── metadata └── en-US │ ├── changelogs │ ├── 20210612.txt │ ├── 20210714.txt │ ├── 20210810.txt │ ├── 20210909.txt │ ├── 20211011.txt │ ├── 20211029.txt │ ├── 20211114.txt │ ├── 20211118.txt │ ├── 20220103.txt │ ├── 20220128.txt │ ├── 20220311.txt │ ├── 20230823.txt │ ├── 20230824.txt │ ├── 20230825.txt │ ├── 20230828.txt │ ├── 20231008.txt │ ├── 20240322.txt │ ├── 20240825.txt │ ├── 20250209.txt │ └── 20250217.txt │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ └── phoneScreenshots │ │ ├── dark-1.png │ │ ├── dark-2.png │ │ ├── dark-3.png │ │ ├── dark-4.png │ │ ├── dark-5.png │ │ ├── dark-6.png │ │ ├── dark-7.png │ │ ├── light-1.png │ │ ├── light-2.png │ │ └── light-3.png │ ├── short_description.txt │ └── title.txt ├── readme-assets ├── badges │ ├── badge_fdroid.png │ ├── badge_github.png │ ├── badge_gplay.png │ └── badge_obtainium.png └── icons │ ├── EweSticker.png │ ├── EweSticker.xcf │ ├── EweSticker_foreground.webp │ └── EweSticker_mono.svg └── settings.gradle /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | indent_size = 4 6 | 7 | [*.{kt,kts}] 8 | max_line_length = 100 9 | ktlint_standard_indent = disabled 10 | ktlint_wrapping = disabled 11 | -------------------------------------------------------------------------------- /.github/workflows/mirror-to-codeberg.yaml: -------------------------------------------------------------------------------- 1 | 2 | # Sync repo to the Codeberg mirror 3 | name: Repo sync GitHub -> Codeberg 4 | on: 5 | push: 6 | branches: 7 | - '**' 8 | 9 | jobs: 10 | codeberg: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | with: 15 | fetch-depth: 0 16 | - uses: spyoungtech/mirror-action@v0.7.0 17 | with: 18 | REMOTE: "https://codeberg.org/FredHappyface/Android.EweSticker.git" 19 | GIT_USERNAME: FredHappyface 20 | GIT_PASSWORD: ${{ secrets.CODEBERG_PASSWORD }} 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /app/debug 2 | /app/release 3 | /documentation/reference 4 | 5 | # Gradle files 6 | .gradle/ 7 | build/ 8 | 9 | # Local configuration file (sdk path, etc) 10 | local.properties 11 | 12 | # Log/OS Files 13 | *.log 14 | 15 | # Android Studio generated files and folders 16 | captures/ 17 | .externalNativeBuild/ 18 | .cxx/ 19 | *.apk 20 | *.aab 21 | output.json 22 | 23 | # IntelliJ 24 | *.iml 25 | .idea/ 26 | misc.xml 27 | deploymentTargetDropDown.xml 28 | render.experimental.xml 29 | 30 | # Keystore files 31 | *.jks 32 | *.keystore 33 | 34 | # Google Services (e.g. APIs or Firebase) 35 | google-services.json 36 | 37 | # Android Profiling 38 | *.hprof 39 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v4.5.0 4 | hooks: 5 | - id: trailing-whitespace 6 | - id: end-of-file-fixer 7 | - id: check-case-conflict 8 | - id: check-executables-have-shebangs 9 | - id: check-json 10 | - id: check-merge-conflict 11 | - id: check-shebang-scripts-are-executable 12 | - id: check-symlinks 13 | - id: check-toml 14 | - id: check-vcs-permalinks 15 | - id: check-yaml 16 | - id: detect-private-key 17 | - id: mixed-line-ending 18 | 19 | - repo: https://github.com/boidolr/pre-commit-images 20 | rev: v1.5.2 21 | hooks: 22 | - id: optimize-jpg 23 | - id: optimize-png 24 | - id: optimize-svg 25 | - id: optimize-webp 26 | 27 | exclude: "documentation/reference|example-files" 28 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Kieran W 4 | Copyright (c) 2021 Randy Zhou (rzhou1999) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /TUTORIAL.md: -------------------------------------------------------------------------------- 1 | 2 | # Tutorial 3 | 4 | The tutorial now lives at [Tutorials](/documentation/tutorials) 5 | -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.android.application") 3 | id("kotlin-android") 4 | id("org.jetbrains.dokka") 5 | id("org.jlleitschuh.gradle.ktlint") 6 | } 7 | 8 | tasks.dokkaGfm.configure { 9 | outputDirectory.set(file(layout.buildDirectory.dir("../../documentation/reference"))) 10 | dokkaSourceSets { 11 | named("main") { 12 | skipDeprecated.set(true) 13 | skipEmptyPackages.set(true) 14 | sourceRoots.from(file("src/main/java")) 15 | suppressInheritedMembers.set(true) 16 | includeNonPublic.set(true) 17 | } 18 | } 19 | } 20 | 21 | tasks.register("genDocs") { 22 | val ref = layout.buildDirectory.dir("../../documentation/reference") 23 | delete(ref) 24 | dependsOn("dokkaGfm") 25 | doLast { 26 | copy { 27 | from("${ref.get()}/index.md") 28 | into(ref.get()) 29 | rename { "README.md" } 30 | } 31 | } 32 | } 33 | 34 | android { 35 | compileSdk = 35 36 | buildToolsVersion = "35.0.0" 37 | namespace = "com.fredhappyface.ewesticker" 38 | 39 | kotlinOptions { 40 | jvmTarget = "17" 41 | } 42 | 43 | androidResources { 44 | generateLocaleConfig = true 45 | } 46 | 47 | defaultConfig { 48 | applicationId = "com.fredhappyface.ewesticker" 49 | minSdk = 26 50 | targetSdk = 35 51 | versionCode = 20250217 52 | versionName = "20250217" 53 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" 54 | setProperty("archivesBaseName", "$applicationId-$versionName") 55 | } 56 | 57 | buildTypes { 58 | getByName("debug") { 59 | versionNameSuffix = "-debug" 60 | } 61 | getByName("release") { 62 | proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro") 63 | isMinifyEnabled = false 64 | } 65 | } 66 | 67 | compileOptions { 68 | sourceCompatibility(JavaVersion.VERSION_17) 69 | targetCompatibility(JavaVersion.VERSION_17) 70 | } 71 | } 72 | 73 | dependencies { 74 | dokkaPlugin("org.jetbrains.dokka:android-documentation-plugin:2.0.0") 75 | implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.10") 76 | implementation("androidx.core:core-ktx:1.15.0") 77 | implementation("androidx.appcompat:appcompat:1.7.0") 78 | implementation("com.google.android.material:material:1.12.0") 79 | implementation("androidx.preference:preference-ktx:1.2.1") 80 | implementation("io.coil-kt:coil:2.7.0") 81 | implementation("io.coil-kt:coil-gif:2.7.0") 82 | implementation("io.coil-kt:coil-video:2.7.0") 83 | implementation("io.coil-kt:coil-svg:2.7.0") 84 | implementation("androidx.gridlayout:gridlayout:1.0.0") 85 | implementation("io.noties.markwon:core:4.6.2") 86 | implementation("com.elvishew:xlog:1.11.1") 87 | androidTestImplementation("junit:junit:4.13.2") 88 | androidTestImplementation("androidx.test:core:1.6.1") 89 | androidTestImplementation("androidx.test.ext:junit:1.2.1") 90 | androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") 91 | } 92 | 93 | configure { 94 | version.set("0.50.0") 95 | android.set(true) 96 | coloredOutput.set(false) 97 | } 98 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/fredhappyface/ewesticker/ScreenshotTest.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker 2 | 3 | import android.app.UiModeManager 4 | import android.content.ContentValues 5 | import android.content.Context 6 | import android.content.res.Configuration 7 | import android.graphics.Bitmap 8 | import android.os.Environment 9 | import android.provider.MediaStore 10 | import androidx.test.core.app.ActivityScenario 11 | import androidx.test.core.app.takeScreenshot 12 | import androidx.test.ext.junit.runners.AndroidJUnit4 13 | import androidx.test.platform.app.InstrumentationRegistry 14 | import org.junit.Before 15 | import org.junit.Rule 16 | import org.junit.Test 17 | import org.junit.rules.TestName 18 | import org.junit.runner.RunWith 19 | import java.io.OutputStream 20 | import java.util.Locale 21 | 22 | /* 23 | * Illustrates usage of APIs to capture a bitmap from view and saving it to test storage. 24 | * 25 | * When this test is executed via gradle managed devices, the saved image files will be stored at 26 | * build/outputs/managed_device_android_test_additional_output/debugAndroidTest/managedDevice/nexusOneApi30/ 27 | */ 28 | @RunWith(AndroidJUnit4::class) 29 | class ScreenshotTest { 30 | 31 | // a handy JUnit rule that stores the method name, so it can be used to generate unique 32 | // screenshot files per test method 33 | @get:Rule 34 | var nameRule: TestName = TestName() 35 | 36 | private val appContext: Context = InstrumentationRegistry.getInstrumentation().targetContext 37 | private lateinit var activityScenario: ActivityScenario 38 | 39 | @Before 40 | fun setUp() { 41 | // Launch the main activity of your app 42 | activityScenario = ActivityScenario.launch(MainActivity::class.java) 43 | } 44 | 45 | /** 46 | * Captures and saves an image of the entire device screen to storage. 47 | */ 48 | @Test 49 | fun mainActivityLight() { 50 | val bitmap = takeScreenshot() 51 | saveBitmapToMediaStore(appContext, bitmap, nameRule.methodName) 52 | assert(true) 53 | } 54 | 55 | @Test 56 | fun mainActivityDark() { 57 | val uiModeManager = appContext.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager 58 | uiModeManager.nightMode = UiModeManager.MODE_NIGHT_YES 59 | activityScenario.recreate() 60 | 61 | val bitmap = takeScreenshot() 62 | saveBitmapToMediaStore(appContext, bitmap, nameRule.methodName) 63 | 64 | uiModeManager.nightMode = UiModeManager.MODE_NIGHT_NO 65 | 66 | assert(true) 67 | } 68 | 69 | @Test 70 | fun mainActivityFr() { 71 | setLocale("fr") 72 | val bitmap = takeScreenshot() 73 | saveBitmapToMediaStore(appContext, bitmap, nameRule.methodName) 74 | assert(true) 75 | } 76 | 77 | private fun setLocale(languageCode: String) { 78 | val locale = Locale(languageCode) 79 | val config = Configuration() 80 | config.setLocale(locale) 81 | InstrumentationRegistry.getInstrumentation().targetContext.resources.updateConfiguration( 82 | config, 83 | null, 84 | ) 85 | } 86 | 87 | private fun saveBitmapToMediaStore(context: Context, bitmap: Bitmap, fileName: String) { 88 | // Define the subdirectory where the image will be saved (e.g., "Screenshots") 89 | val subdirectory = "Screenshots/" 90 | 91 | // Prepare the content values for the MediaStore 92 | val values = ContentValues() 93 | values.put(MediaStore.Images.Media.DISPLAY_NAME, "screenshot_$fileName") 94 | values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") 95 | values.put( 96 | MediaStore.MediaColumns.RELATIVE_PATH, 97 | "${Environment.DIRECTORY_DCIM}/$subdirectory", 98 | ) 99 | values.put(MediaStore.Images.Media.IS_PENDING, 1) // Mark the image as pending 100 | 101 | // Insert the image into the MediaStore 102 | val uri = 103 | context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) 104 | uri?.let { 105 | try { 106 | // Open an OutputStream to the newly created image 107 | val os: OutputStream? = context.contentResolver.openOutputStream(uri) 108 | 109 | // Compress and save the bitmap to the OutputStream\ 110 | if (os != null) { 111 | bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os) 112 | } 113 | os?.close() 114 | 115 | // Mark the image as non-pending 116 | values.clear() 117 | values.put(MediaStore.Images.Media.IS_PENDING, 0) 118 | context.contentResolver.update(uri, values, null, null) 119 | } catch (e: Exception) { 120 | e.printStackTrace() 121 | } 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 28 | 31 | 32 | 33 | 34 | 35 | 40 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/adapter/StickerPackAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.adapter 2 | 3 | import android.os.Build 4 | import android.view.GestureDetector 5 | import android.view.HapticFeedbackConstants 6 | import android.view.LayoutInflater 7 | import android.view.ViewGroup 8 | import androidx.recyclerview.widget.RecyclerView 9 | import coil.load 10 | import com.fredhappyface.ewesticker.R 11 | import com.fredhappyface.ewesticker.utilities.StickerClickListener 12 | import com.fredhappyface.ewesticker.view.StickerPackViewHolder 13 | import java.io.File 14 | 15 | class StickerPackAdapter( 16 | private val iconSize: Int, 17 | private val stickers: Array, 18 | private val listener: StickerClickListener, 19 | private val gestureDetector: GestureDetector, 20 | private val vibrate: Boolean, 21 | ) : 22 | 23 | RecyclerView.Adapter() { 24 | 25 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StickerPackViewHolder { 26 | val itemView = LayoutInflater.from(parent.context) 27 | .inflate(R.layout.sticker_card, parent, false) 28 | return StickerPackViewHolder(itemView) 29 | } 30 | 31 | override fun onBindViewHolder(holder: StickerPackViewHolder, position: Int) { 32 | val stickerFile = stickers[position] 33 | holder.stickerThumbnail.load(stickerFile) 34 | holder.stickerThumbnail.layoutParams.height = iconSize 35 | holder.stickerThumbnail.layoutParams.width = iconSize 36 | holder.stickerThumbnail.tag = stickerFile 37 | holder.stickerThumbnail.setOnClickListener { 38 | val file = it.tag as File 39 | if (vibrate && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { 40 | it.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_PRESS) 41 | } 42 | listener.onStickerClicked(file) 43 | } 44 | holder.stickerThumbnail.setOnLongClickListener { 45 | val file = it.tag as File 46 | listener.onStickerLongClicked(file) 47 | return@setOnLongClickListener true 48 | } 49 | holder.stickerThumbnail.setOnTouchListener { _, event -> 50 | return@setOnTouchListener gestureDetector.onTouchEvent(event) 51 | } 52 | } 53 | 54 | override fun getItemCount(): Int = stickers.size 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/model/StickerPack.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.model 2 | 3 | import java.io.File 4 | 5 | /** Helper class to provide pack-related information A "Pack" is informally represented as a File */ 6 | class StickerPack(packDir: File) { 7 | private val stickers: Array? = 8 | packDir.listFiles { obj: File -> obj.isFile }?.sortedArray() 9 | 10 | /** Get the pack name (name of the pack directory) */ 11 | internal val name: String = packDir.name 12 | 13 | /** 14 | * Note: When MainActivity copies files over, it filters out all non-supported files (i.e. any 15 | * file that is not supported as well as directories). Because of this there is no extra filter 16 | * in this function. The exception is the base directory, which is handled in the constructor. 17 | * 18 | * @return Array of Files corresponding to all stickers found in this pack 19 | */ 20 | val stickerList: Array 21 | get() = this.stickers ?: arrayOf() 22 | 23 | /** 24 | * Provides a sticker to use as the pack-nav container thumbnail. Currently just takes the first 25 | * element, but could theoretically include any selection logic. 26 | * 27 | * @return File that should be used for thumbnail 28 | */ 29 | val thumbSticker: File 30 | get() = this.stickers!![0] 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/utilities/Cache.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.utilities 2 | 3 | import java.io.File 4 | import java.util.ArrayDeque 5 | import java.util.Deque 6 | 7 | /** 8 | * Basically this behaves like an ordered set with some maximum capacity. When this capacity is 9 | * exceeded an element is removed from the start 10 | */ 11 | class Cache(private val capacity: Int = 30) { 12 | private val data: Deque = ArrayDeque() 13 | 14 | /** 15 | * Logic to add an element 16 | * 17 | * @param elem 18 | * 19 | * @return 20 | */ 21 | fun add(elem: String): String? { 22 | if (data.contains(elem)) { 23 | data.remove(elem) 24 | } else if (data.size >= capacity) { 25 | return data.pollFirst() 26 | } 27 | data.offerLast(elem) 28 | return null 29 | } 30 | 31 | /** 32 | * convert this to a string to write to shared-pref 33 | * 34 | * @return 35 | */ 36 | fun toSharedPref(): String { 37 | return data.joinToString("\n") 38 | } 39 | 40 | /** 41 | * convert this to a array of files 42 | * 43 | * @return 44 | */ 45 | fun toFiles(): Array { 46 | return data.map { File(it) }.toTypedArray() 47 | } 48 | 49 | /** convert from a string (shared-pref) to this */ 50 | fun fromSharedPref(raw: String) { 51 | data.clear() 52 | if (raw.trim().isNotEmpty()) { 53 | data.addAll(raw.split("\n")) 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/utilities/StartLogger.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.utilities 2 | 3 | import com.elvishew.xlog.LogConfiguration 4 | import com.elvishew.xlog.LogLevel 5 | import com.elvishew.xlog.XLog 6 | import com.elvishew.xlog.printer.AndroidPrinter 7 | import com.elvishew.xlog.printer.file.FilePrinter 8 | import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator 9 | import java.io.File 10 | 11 | 12 | fun startLogger(filesDir: File) { 13 | 14 | try { 15 | XLog.i("startLogger if not already started") 16 | } catch (e: IllegalStateException) { 17 | 18 | val logConfig = LogConfiguration.Builder().logLevel(LogLevel.ALL).tag("EweSticker").build() 19 | val androidPrinter = 20 | AndroidPrinter(true) // Printer that print the log using android.util.Log 21 | val filePrinter = FilePrinter.Builder( 22 | File(filesDir, "logs").path 23 | ).fileNameGenerator(DateFileNameGenerator()).build() 24 | 25 | XLog.init(logConfig, androidPrinter, filePrinter) 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/utilities/StickerClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.utilities 2 | 3 | import java.io.File 4 | 5 | interface StickerClickListener { 6 | fun onStickerClicked(sticker: File) 7 | fun onStickerLongClicked(sticker: File) 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/utilities/Toaster.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.utilities 2 | 3 | import android.content.Context 4 | import android.widget.Toast 5 | import com.elvishew.xlog.XLog 6 | 7 | /** 8 | * The Toaster class provides a simplified interface to android.widget.Toast. Pass in the 9 | * android.content.Context to the constructor and call the 'toast' function (others as below) 10 | * toaster.state keeps track of an error state or similar. 11 | * 12 | * @property context: android.content.Context. e.g. baseContext 13 | */ 14 | class Toaster(private val context: Context) { 15 | var messages: MutableList = mutableListOf() 16 | 17 | /** 18 | * Call toaster.toast with some string to always create a toast notification. Context is set when 19 | * Toaster is instantiated. Duration is determined based on text length 20 | * 21 | * @param string: String. Message to output 22 | */ 23 | fun toast(string: String) { 24 | Toast.makeText( 25 | this.context, 26 | string, 27 | if (string.length > 60) { 28 | Toast.LENGTH_LONG 29 | } else { 30 | Toast.LENGTH_SHORT 31 | }, 32 | ) 33 | .show() 34 | } 35 | 36 | /** 37 | * 38 | **/ 39 | fun toastOnMessages() { 40 | XLog.i("Messages: [${this.messages.joinToString(", ")}]") 41 | for (idx in this.messages.take(3).indices) { 42 | this.toast(messages[idx]) 43 | } 44 | this.messages = mutableListOf() 45 | } 46 | 47 | /** 48 | * Set a message 49 | **/ 50 | fun setMessage(message: String) { 51 | XLog.i("Adding message: '$message' to toaster") 52 | this.messages.add(message) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/utilities/Utils.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.utilities 2 | 3 | import android.webkit.MimeTypeMap 4 | import java.io.File 5 | 6 | /** Class to provide utils that are shared across ewesticker. */ 7 | object Utils { 8 | /** 9 | * Get the mimetype of a File 10 | * 11 | * @param file File file to get the mimetype of 12 | * @return String? Return the mimetype or none if it cannot be determined 13 | */ 14 | fun getMimeType(file: File): String? { 15 | return MimeTypeMap.getSingleton().getMimeTypeFromExtension(file.extension) 16 | } 17 | 18 | /** 19 | * Return a MutableList of EweSticker Supported mimetypes 20 | * 21 | * @return MutableList of EweSticker Supported mimetypes 22 | */ 23 | fun getSupportedMimes(): MutableList { 24 | return mutableListOf( 25 | "image/svg+xml", 26 | "image/gif", 27 | "image/png", 28 | "image/webp", 29 | "image/jpeg", 30 | "image/heif", 31 | "video/3gpp", 32 | "video/mp4", 33 | "video/x-matroska", 34 | "video/webm", 35 | ) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/fredhappyface/ewesticker/view/StickerPackViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.fredhappyface.ewesticker.view 2 | 3 | import android.view.View 4 | import android.widget.ImageView 5 | import androidx.recyclerview.widget.RecyclerView 6 | import com.fredhappyface.ewesticker.R 7 | 8 | class StickerPackViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 9 | val stickerThumbnail: ImageView = itemView.findViewById(R.id.stickerButton) 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_back_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qwerty_key.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/time.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/keyboard_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 18 | 19 | 24 | 25 | 26 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/qwerty_key.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/qwerty_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 20 | 21 | 26 | 27 | 28 | 29 | 36 | 37 | 44 | 45 | 52 | 53 | 54 | 55 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sticker_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sticker_preview.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 25 | 26 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/resources.properties: -------------------------------------------------------------------------------- 1 | unqualifiedResLocale=en 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | أيقونة الحزمة 5 | أيقونة الملصق 6 | [انقر لإغلاق معاينة الملصق] 7 | 8 | تمكين لوحة المفاتيح 9 | شغل الإعدادات 10 | 11 | تحديث حزمة الملصقات 12 | اختر مجلد مصدر الملصقات 13 | إعادة تحميل الملصقات 14 | معلومات حزم الملصقات المحمَّلة حاليًا: 15 | - المسار: 16 | لم يتم تحديده 17 | - التاريخ: 18 | أبدًا 19 | - الإجمالي: 20 | 21 | الخيارات 22 | إظهار زر الرجوع في شريط التنقل 23 | تمكين البحث 24 | تغذية هزازة عند الضغط على المفتاح 25 | استخدام تخطيط عمودي 26 | استعادة لوحة المفاتيح السابقة عند إغلاق لوحة المفاتيح 27 | تمكين التمرير بين الحزم (عرضيًا لاتجاه التمرير) 28 | "عدد الصفوف: " 29 | "حجم الأيقونة: " 30 | 31 | المعلومات 32 | EweSticker هو تطبيق لوحة المفاتيح للملصقات على نظام Android، مصمم خصيصًا لمشاركة مجموعة متنوعة من الملصقات المخصصة في تطبيقات المراسلة المدعومة. يستلهم هذا المشروع من مشروع uSticker وهو نسخة مشعرة من مستودع woosticker. 33 | 34 | الميزات 35 | "تقدم تطبيق EweSticker لنظام Android الميزات الرئيسية التالية لتعزيز تجربة المراسلة الخاصة بك: 36 | 37 | - **مجموعة واسعة من الستيكرات المخصصة المدعومة**: يدعم EweSticker مجموعة متنوعة من تنسيقات الستيكرات، مما يضمن أن يتمكن المستخدمون من مشاركة إبداعهم بطرق مختلفة. تنسيقات الملفات المدعومة تشمل image/gif، image/png، image/webp، image/jpeg، image/heif، video/3gpp، video/mp4، video/x-matroska، و video/webm. 38 | 39 | - **مشاركة الستيكرات بسلاسة**: يمكنك بسهولة إرسال الستيكرات داخل تطبيقات المراسلة التي تدعم مشاركة الوسائط المخصصة باستخدام image/png كبديل. 40 | 41 | - **التمرير قابل للتخصيص**: استخدم التمرير العمودي أو الأفقي للتنقل في مجموعة الستيكرات الخاصة بك. 42 | 43 | - **خيارات العرض**: قم بضبط عدد الصفوف وحجم معاينة الستيكرات، لتخصيص تجربة المشاهدة وفقًا لتفضيلاتك وأبعاد شاشة جهازك. 44 | 45 | - **البحث في مكتبة الستيكرات الخاصة بك**: استخدم لوحة المفاتيح qwerty للبحث عن الستيكرات بواسطة اسم الملف لتسهيل الاكتشاف. 46 | 47 | - **التكامل مع موضوع النظام**: يتكامل EweSticker بسلاسة مع موضوع النظام، مما يضمن تناسق مظهر التطبيق مع اختيارات التصميم على مستوى الجهاز. 48 | 49 | - **معاينة الستيكر عند الضغط المطول**: لتسهيل اختيار الستيكر، يمكنك الضغط بشكل مطول على الستيكر لإظهار معاينة تساعدك على اتخاذ قرار سريع بشأن الستيكر الذي تريد مشاركته من دون الحاجة إلى فتح مجموعة الستيكرات بشكل منفصل. 50 | 51 | يقدم EweSticker مجموعة واسعة من الخيارات المخصصة، والدعم لتنسيقات متنوعة، والتكامل مع تطبيقات المراسلة. سواء كان المستخدمون يشاركون الصور الثابتة أو الصور المتحركة GIF، أو حتى مقاطع الفيديو القصيرة، يهدف التطبيق إلى توفير طريقة مشوقة ومعبرة للتواصل باستخدام الستيكرات المخصصة. 52 | 53 | كيفية الاستخدام 54 | حدد مجلدًا يحتوي على الملصقات وأرسلها في تطبيقاتك المفضلة! 55 | 56 | رخصة MIT 57 | حقوق النشر © فريد هابي فيس 58 | \nحقوق النشر © راندي زو 59 | 60 | الروابط 61 | - الشيفرة المصدرية لEweSticker متاحة على https://github.com/FredHappyface/Android.EweSticker 62 | \n 63 | \n- تأخذ الدروس بيدك خلال سلسلة من الخطوات لبدء استخدام البرنامج. ابدأ من هنا إذا كنت جديدًا: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- دليل المساعدة يوفر نقطة انطلاق ويوضح المشكلات الشائعة التي قد تواجهها: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- رخصة MIT 68 | \n(انظر الرخصة لمزيد من المعلومات https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | معلومات الإصدار 71 | تم تغيير التفضيلات. أعد تحميل لوحة المفاتيح لتطبيق الإعدادات 72 | بدء عملية الاستيراد. قد يستغرق ذلك بعض الوقت! 73 | تم استيراد %1$d ملصق. أعد تحميل لوحة المفاتيح لعرض الملصقات الجديدة 74 | E034: فشلت عملية إعادة تحميل الملصقات، حاول اختيار مجلد مصدر الملصقات 75 | E041: حدث استثناء غير متوقع أثناء تحويل الملصق 76 | 77 | %1$s (حزمة: %2$s) 78 | تمكين فرز الحزم غير الحسّاس لحالة الأحرف 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-bn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | প্যাক আইকন 5 | স্টিকার আইকন 6 | [স্টিকার প্রিভিউ বন্ধ করতে ট্যাপ করুন] 7 | 8 | কীবোর্ড সক্রিয় করুন 9 | সেটিংস চালান 10 | 11 | স্টিকার প্যাক আপডেট করুন 12 | স্টিকার শোর্স ডিরেক্টরি চয়ন করুন 13 | স্টিকার পুনরায় লোড করুন 14 | বর্তমান লোড করা স্টিকার প্যাকের তথ্য: 15 | - পথ: 16 | সেট করা হয়নি 17 | - তারিখ: 18 | কখনো না 19 | - মোট: 20 | 21 | বিকল্পসমূহ 22 | ন্যাভবারে ব্যাক বাটন দেখান 23 | অনুসন্ধান সক্ষম করুন 24 | কী-প্রেসে হ্যাপটিক প্রতিক্রিয়া 25 | ভার্টিক্যাল লেআউট ব্যবহার করুন 26 | কীবোর্ড বন্ধ হলে পূর্বের কীবোর্ড পুনরুদ্ধার করুন 27 | প্যাক মধ্যে স্বাইপ সক্রিয় করুন (স্ক্রল দিকে লম্ব) 28 | "সারির সংখ্যা: " 29 | "আইকন সাইজ: " 30 | 31 | তথ্য 32 | EweSticker হল একটি Android স্টিকার কীবোর্ড অ্যাপ্লিকেশন, যা সমর্থিত মেসেজিং অ্যাপ্সে বিভিন্ন ধরণের কাস্টম স্টিকার শেয়ার করতে উন্নত করা হয়েছে। এই প্রকল্পটি uSticker প্রকল্প থেকে ইন্সপাইরেশন পেয়েছে এবং ওস্টিকার সংরক্ষণের জন্য একটি প্রজ্ঞপতি প্রকল্পের একটি ফোর্ক। 33 | 34 | বৈশিষ্ট্যসমূহ 35 | "EweSticker Android অ্যাপটি আপনার মেসেজিং অভিজ্ঞতাকে আরো সুন্দর করার জন্য নিম্নলিখিত প্রধান বৈশিষ্ট্যগুলি প্রদান করে: 36 | 37 | - **বিভিন্ন প্রকারের কাস্টম স্টিকার সমর্থিত**: EweSticker বিভিন্ন ধরণের স্টিকার ফরম্যাট সমর্থন করে, যাতে ব্যবহারকারীরা বিভিন্ন উপায়ে তাদের সৃজনশীলতা ভাগ করতে পারেন। সমর্থিত ফরম্যাট হল: image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, এবং video/webm। 38 | 39 | - **সহজেই স্টিকার শেয়ার করুন**: অবস্থানিক মিডিয়া শেয়ারিং সমর্থন করা মেসেজিং অ্যাপগুলিতে স্টিকার প্রেরণ করুন যা ছবি/পিএনজি কে একটি গ্রহণযোগ্য বিকল্প হিসাবে ব্যবহার করে। 40 | 41 | - **কাস্টমাইজেবল স্ক্রোলিং**: আপনার স্টিকার সংগ্রহ পরিবর্তনশীলভাবে দেখার জন্য সারি এবং স্টিকার পূর্বরূপ আয়তন পরিবর্তন করুন। 42 | 43 | - **ডিসপ্লে অপশনস**: দেখার অভিজ্ঞতা আপনার পছন্দ এবং ডিভাইস স্ক্রিন মাপের মতো করার জন্য সারির সংখ্যা এবং স্টিকার পূর্বরূপ পরিষ্কার করুন। 44 | 45 | - **আপনার স্টিকার লাইব্রেরি অনুসন্ধান করুন**: আবিষ্কার করা সহজ করতে স্টিকার ফাইলের নাম দিয়ে অনুসন্ধান করুন। 46 | 47 | - **সিস্টেম থিম সাথে সংহতি**: EweSticker সিস্টেম থিম সাথে অনুগতিপূর্ণভাবে সংহতি প্রদান করে, যাতে অ্যাপের উপস্থিতি আপনার ডিভাইসের পূর্ণাঙ্গ ডিজাইন নির্বাচনের সাথে মিলে। 48 | 49 | - **স্টিকার পূর্বরূপ দীর্ঘ প্রেস করুন**: স্টিকার নির্বাচন সুবিধার সাহায্যে, আপনি প্রদর্শন করার জন্য স্টিকার পূর্বরূপ দেখতে দীর্ঘ প্রেস করতে পারেন। 50 | 51 | EweSticker কাস্টমাইজেশন বিকল্প, বিভিন্ন পার্টে সমর্থন, এবং মেসেজিং অ্যাপস সংগতি আনতে। ব্যবহারকারীরা যখন স্থায়ী ছবি, গিফ বা সাধারণ ভিডিও শেয়ার করছেন, এই অ্যাপটি সস্থির উপায়ে স্টিকার ব্যবহার করার এবং কাস্টম স্টিকার ব্যবহার করার জন্য একটি মোবাইল এবং উপায় সরবরাহ করতে লক্ষ্য করে। 52 | 53 | কীভাবে ব্যবহার করবেন 54 | একটি স্টিকার সংগ্রহ নির্বাচন করুন এবং তাদেরকে আপনার প্রিয় অ্যাপগুলিতে প্রেরণ করুন! 55 | 56 | মিট লাইসেন্স 57 | কপিরাইট © ফ্রেডহ্যাপি ফেস 58 | \nকপিরাইট © র্যান্ডি জো 59 | 60 | লিঙ্কস 61 | - EweStickerের উৎসকোড উপলব্ধ https://github.com/FredHappyface/Android.EweSticker 62 | \n 63 | \n- টিউটোরিয়ালগুলি আপনাকে সফলভাবে সফটওয়্যার ব্যবহার করার জন্য এক ধরনের ধরাধারিত ধাক্কা মেয়ে নিয়ে যায়। নতুন হলে এখানে শুরু করুন: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- সাহায্য গাইড একটি শুরুপ্রয়াস প্রদান করে এবং আপনি যে সাধারণ সমস্যা নিয়ে বাধা পান তা প্রতিপাদন করে: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- মিট লাইসেন্স 68 | \n(আরও তথ্যের জন্য লাইসেন্সটি দেখুন https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | সংস্করণের তথ্য 71 | পছন্দস্থান পরিবর্তন হয়েছে। সেটিংস প্রয়োগ করার জন্য কীবোর্ড পুনরায় লোড করুন 72 | আমদানি শুরু হয়েছে। এটি কিছু সময় নিতে পারে! 73 | %1$d টি স্টিকার আমদানি করা হয়েছে। নতুন স্টিকার দেখানোর জন্য কীবোর্ড পুনরায় লোড করুন 74 | E034: স্টিকার পুনরায় লোড করা যায়নি, স্টিকার শোর্স ডিরেক্টরি চয়ন করার চেষ্টা করুন 75 | E041: অপ্রত্যাশিত IOException যখন স্টিকার রুপান্তর করা হয় 76 | 77 | %1$s (প্যাক: %2$s) 78 | কেস-অনুভূতিপূর্ণ প্যাক সাজানো সক্রিয় করুন 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Pack-Symbol 5 | Sticker-Symbol 6 | [Antippen, um Sticker-Vorschau zu schließen] 7 | 8 | Tastatur aktivieren 9 | Einstellungen öffnen 10 | 11 | Sticker-Pack aktualisieren 12 | Sticker-Quellverzeichnis auswählen 13 | Sticker neu laden 14 | Aktuelle Informationen zu geladenen Sticker-Packs: 15 | - Pfad: 16 | Nicht festgelegt 17 | - Datum: 18 | Nie 19 | - Gesamt: 20 | 21 | Optionen 22 | Zurück-Button in der Navigationsleiste anzeigen 23 | Suche aktivieren 24 | Haptisches Feedback bei Tastendruck 25 | Vertikales Layout verwenden 26 | Vorherige Tastatur wiederherstellen, wenn Tastatur geschlossen wird 27 | Wischen zwischen Packs aktivieren (senkrecht zur Scrollrichtung) 28 | "Anzahl der Reihen: " 29 | "Symbolgröße: " 30 | 31 | Informationen 32 | EweSticker ist eine Android-Sticker-Tastaturanwendung, die speziell entwickelt wurde, um eine vielfältige Auswahl an individuellen Stickern in unterstützten Messaging-Apps zu teilen. Dieses Projekt wurde von dem uSticker-Projekt inspiriert und ist ein Fork des woosticker-Repositorys. 33 | 34 | Eigenschaften 35 | "Die EweSticker Android-App bietet folgende Hauptfunktionen, um deine Messaging-Erfahrung zu verbessern: 36 | 37 | - **Breite Palette von unterstützten individuellen Stickern**: EweSticker unterstützt eine vielfältige Auswahl von Sticker-Formaten, sodass Nutzer ihre Kreativität auf verschiedene Arten teilen können. Unterstützte Formate umfassen Bild/GIF, Bild/PNG, Bild/WEBP, Bild/JPEG, Bild/HEIF, Video/3GPP, Video/MP4, Video/X-Matroska und Video/WEBM. 38 | 39 | - **Nahtloses Teilen von Stickern**: Senden Sie ganz einfach Sticker innerhalb von Messaging-Apps, die benutzerdefiniertes Mediasharing unterstützen, wobei Bild/png als Alternative verwendet wird. 40 | 41 | - **Anpassbares Scrollen**: Verwenden Sie entweder vertikales oder horizontales Scrollen, um durch Ihre Stickersammlung zu navigieren. 42 | 43 | - **Anzeigeoptionen**: Passen Sie die Anzahl der Zeilen und die Größe der Sticker-Vorschau an, um das Anzeigeerlebnis Ihren Vorlieben und den Bildschirmabmessungen Ihres Geräts anzupassen. 44 | 45 | - **Durchsuchen Ihrer Stickersammlung**: Verwenden Sie eine QWERTZ-Tastatur, um Sticker nach Dateinamen zu durchsuchen und die Entdeckung zu erleichtern. 46 | 47 | - **Integration mit dem Systemdesign**: EweSticker integriert sich nahtlos in das Designs des Systems, sodass das Erscheinungsbild der App Ihren systemweiten Designentscheidungen entspricht. 48 | 49 | - **Sticker-Vorschau bei langem Drücken**: Um die Sticker-Auswahl zu erleichtern, können Sie lange auf einen Sticker drücken, um eine Vorschau anzuzeigen, die Ihnen hilft, schnell zu entscheiden, welchen Sticker Sie teilen möchten, ohne die Stickersammlung separat öffnen zu müssen. 50 | 51 | EweSticker bietet eine breite Palette an Anpassungsoptionen, vielfältige Formatunterstützung und Integration mit Messaging-Apps. Ob Nutzer statische Bilder, animierte GIFs oder sogar kurze Videos teilen, die App zielt darauf ab, eine ansprechende und ausdrucksstarke Art der Kommunikation mit individuellen Stickern zu bieten." 52 | 53 | Anwendungshinweise 54 | Wähle ein Verzeichnis mit Stickern aus und sende sie in deinen Lieblings-Apps! 55 | 56 | MIT Lizenz 57 | Copyright © FredHappyface 58 | \nCopyright © Randy Zhou 59 | 60 | Links 61 | "- Der Quellcode für EweSticker ist verfügbar unter https://github.com/FredHappyface/Android.EweSticker 62 | 63 | - Die Tutorials führen dich schrittweise durch eine Reihe von Schritten, um die Software zu verwenden. Starte hier, wenn du neu bist: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | 65 | - Der Hilfsleitfaden bietet einen Ausgangspunkt und erläutert häufig auftretende Probleme, die auftreten können: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | 67 | - MIT Lizenz 68 | (Siehe die Lizenz für weitere Informationen https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | Versionsinfo 71 | Einstellungen geändert. Lade die Tastatur neu, damit die Einstellungen wirksam werden 72 | Import wird gestartet. Dies könnte einige Zeit dauern! 73 | %1$d Sticker importiert. Lade die Tastatur neu, um neue Sticker anzuzeigen 74 | E034: Neuladen der Sticker fehlgeschlagen, versuche ein Sticker-Quellverzeichnis auszuwählen 75 | E041: Unerwarteter IOException beim Konvertieren des Stickers 76 | 77 | %1$s (Paket: %2$s) 78 | Groß-/Kleinschreibung bei der Packsortierung ignorieren 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Icône du paquet 4 | Icône de l’autocollant 5 | [appuyer pour fermer l\'aperçu de l\'autocollant] 6 | Activer le clavier 7 | Réglages de lancement 8 | Mettre à jour le paquet d’autocollant 9 | Choisissez le répertoire source d’autocollants 10 | Recharger les autocollants 11 | - Chemin: 12 | E034: Impossible de recharger les autocollants, essayez de choisir un répertoire source d’autocollants 13 | E041: IOException inattendue lors de la conversion de l’autocollant 14 | Informations actuelles sur les autocollants chargés: 15 | Non défini 16 | - Date: 17 | Jamais 18 | - Total: 19 | Options 20 | Afficher le bouton dans la barre de navigation 21 | Activer la recherche 22 | Retour haptique lors de l’appui sur une touche 23 | Utiliser la mise en page verticale 24 | Restaurer le clavier précédent en fermant le clavier 25 | Permet de glisser entre les paquets (perpendiculaire à la direction de défilement) 26 | "Nombre de rangées: " 27 | "Taille de l’icône " 28 | Infos 29 | EweSticker est une application de clavier d\'autocollant Android, spécialement conçue pour partager une grande variété d\'autocollants personnalisés dans les applications de messagerie prises en charge. Ce projet s\'inspire du projet uSticker et est une fourche du dépôt woosticker. 30 | Caractéristiques 31 | "L'application Android EweSticker offre les fonctionnalités clés suivantes pour améliorer votre expérience de messagerie: 32 | 33 | - **Prise en charge d'une large gamme de stickers personnalisés** : EweSticker prend en charge une variété de formats de stickers, permettant aux utilisateurs de partager leur créativité de différentes manières. Les formats pris en charge incluent image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, et video/webm. 34 | 35 | - **Partage de stickers transparent** : Envoyez facilement des stickers dans des applications de messagerie qui prennent en charge le partage de médias personnalisés en utilisant image/png comme solution de rechange. 36 | 37 | - **Défilement personnalisable** : Utilisez le défilement vertical ou horizontal pour naviguer dans votre collection de stickers. 38 | 39 | - **Options d'affichage** : ajustez le nombre de lignes et la taille de l'aperçu du sticker, adaptant ainsi l'expérience de visualisation à vos préférences et aux dimensions de l'écran de votre appareil. 40 | 41 | - **Recherche dans votre bibliothèque de stickers** : Utilisez un clavier QWERTY pour rechercher des stickers par nom de fichier et faciliter leur découverte. 42 | 43 | - **Intégration avec le thème du système** : EweSticker s'intègre parfaitement au thème du système, garantissant que l'apparence de l'application corresponde à vos choix de conception à l'échelle du périphérique. 44 | 45 | - **Aperçu du sticker en maintenant une pression longue** : Pour faciliter la sélection de stickers, vous pouvez maintenir une pression longue sur un sticker pour afficher un aperçu qui vous aidera à décider rapidement quel sticker partager sans avoir besoin d'ouvrir la collection de stickers séparément. 46 | 47 | EweSticker offre une large gamme d'options de personnalisation, prend en charge divers formats et s'intègre aux applications de messagerie. Que les utilisateurs partagent des images statiques, des GIF animés ou même de courtes vidéos, l'application vise à offrir un moyen engageant et expressif de communiquer à l'aide de stickers personnalisés." 48 | 49 | Comment l’utiliser 50 | Sélectionnez un répertoire contenant des autocollants et envoyez-les dans vos applications préférées! 51 | Licence MIT 52 | Copyright © FredHappyface 53 | \nCopyright © Randy Zhou 54 | Liens 55 | - Le code source pour EweSticker est disponible à l\'adresse https://github.com/FredHappyface/Android. 56 | \n 57 | \n- Les tutoriels vous emmènent à la main par une série de étapes pour commencer à utiliser le logiciel. Commencez ici si vous êtes nouveau: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 58 | \n 59 | \n- Le guide d\'aide fournit un point de départ et décrit les questions fréquentes que vous pouvez avoir: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 60 | \n 61 | \n- Licence MIT 62 | \n(Voir la licence pour plus d\'informations https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 63 | Informations sur la version 64 | Les préférences ont changé. Recharger le clavier pour les appliquer 65 | Démarrage de l’importation. Ceci va prendre du temps! 66 | Autocollants importés %1$d. Recharger le clavier pour afficher les nouveaux autocollants 67 | 68 | %1$s (Pack : %2$s) 69 | Activer le tri des paquets sans tenir compte de la casse 70 | 71 | -------------------------------------------------------------------------------- /app/src/main/res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | पैक आइकन 4 | स्टिकर आइकन 5 | [स्टिकर पूर्वावलोकन बंद करने के लिए टैप करें] 6 | 7 | कीबोर्ड सक्षम करें 8 | सेटिंग्स लॉन्च करें 9 | 10 | स्टिकर पैक अपडेट करें 11 | स्टिकर स्रोत निर्दिष्ट करें 12 | स्टिकर्स को पुनः लोड करें 13 | मौजूद स्टिकर पैक की जानकारी: 14 | - पथ: 15 | सेट नहीं हुआ 16 | - तारीख: 17 | कभी नहीं 18 | - कुल: 19 | 20 | विकल्प 21 | नैविगेशन बार में बैक बटन दिखाएं 22 | खोज सक्षम करें 23 | कुंजी-दबाने पर हैप्टिक प्रतिक्रिया 24 | उद्देश्य खगोल उपयोग करें 25 | कीबोर्ड बंद होने पर पिछली स्थिति को पुनर्स्थापित करें 26 | पैक के बीच स्वाइप को सक्षम करें (स्क्रॉल दिशा के पर्पेंडिक्युलर) 27 | "पंक्तियों की संख्या: " 28 | "आइकन आकार: " 29 | 30 | जानकारी 31 | EweSticker एक Android स्टिकर कीबोर्ड एप्लिकेशन है, जिसे खासतर आपके पसंदीदा समर्थित संदेशन एप्लिकेशन्स में विभिन्न प्रकार के कस्टम स्टिकर साझा करने के लिए डिज़ाइन किया गया है। इस प्रोजेक्ट का प्रेरणा uSticker प्रोजेक्ट से मिली है और यह woosticker रिपॉजिटरी का एक फोर्क है। 32 | 33 | विशेषताएँ 34 | "एंड्रॉइड ऐप EweSticker आपके संदेशन अनुभव को बेहतर बनाने के लिए निम्नलिखित मुख्य विशेषताओं की पेशकश करता है: 35 | 36 | - **विभिन्न प्रकार के कस्टम स्टिकर समर्थित**: EweSticker विभिन्न प्रकार के स्टिकर प्रारूपों का समर्थन करता है, जिससे उपयोगकर्ता विभिन्न तरीकों से अपनी रचनात्मकता साझा कर सकते हैं। समर्थित प्रारूपों में image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, और video/webm शामिल हैं। 37 | 38 | - **अनिर्वाण स्टिकर साझा करें**: image/png का उपयोग करके कस्टम मीडिया साझा करने का समर्थन करने वाली संदेशन ऐप्स के भीतर आसानी से स्टिकर भेजें। 39 | 40 | - **समग्र स्टिकर साझा करना**: अपने स्टिकर संग्रह में भ्रमण करने के लिए उभर्ता या क्षैतिज लहराने का प्रयोग करें। 41 | 42 | - **प्रदर्शन विकल्प**: पंक्तियों की संख्या और स्टिकर पूर्वावलोकन का आकार समायोजित करें, अपने पसंद के अनुसार दृश्य अनुभव को तैयार करने के लिए। 43 | 44 | - **अपनी स्टिकर पुस्तकालय खोजें**: खोज प्रारंभ करने के लिए फ़ाइल नाम द्वारा स्टिकर खोजें और खोज को सुगम बनाने के लिए QWERTY कुंजीपटल का उपयोग करें। 45 | 46 | - **सिस्टम थीम के साथ एकीकरण**: EweSticker सिस्टम के थीम के साथ सहज रूप से एकीकृत होता है, जिससे ऐप का प्रस्तुति आपके डिवाइस-व्यापी डिज़ाइन विकल्पों के साथ मेल खाती है। 47 | 48 | - **दीर्घाक्षर पर स्टिकर पूर्वावलोकन**: स्टिकर चयन को सुविधाजनक बनाने के लिए, आप स्टिकर पर लंबी दबाएँ कर स्टिकर पूर्वावलोकन को उजागर कर सकते हैं, जो आपको अलग से स्टिकर संग्रह खोलने की आवश्यकता के बिना त्वरित रूप से निर्णय करने में मदद करेगा। 49 | 50 | EweSticker विभिन्न संविदान विकल्पों, विविध प्रारूप समर्थन, और संदेशन ऐप्स के साथ एकीकरण लाता है। चाहे उपयोगकर्ता स्थिर छवियों, एनिमेटेड GIF, या छोटे video साझा कर रहे हैं, ऐप उपयोगकर्ता कस्टम स्टिकर्स का उपयोग करके संवाद करने के लिए एक रुचिकर और अभिव्यक्तिपूर्ण तरीके से प्रदान करने का उद्देश्य रखता है।" 51 | 52 | कैसे उपयोग करें 53 | imageकों को साझा करने के लिए एक डायरेक्टरी का चयन करें और उन्हें अपने पसंदीदा ऐप्स में भेजें! 54 | 55 | MIT लाइसेंस 56 | कॉपीराइट © फ्रेडहैपीफेस 57 | \nकॉपीराइट © रैंडी ज़ो 58 | 59 | लिंक्स 60 | - EweSticker का स्रोत कोड https://github.com/FredHappyface/Android.EweSticker पर उपलब्ध है 61 | \n 62 | \n- यदि आप नए हैं, तो यह सॉफ़्टवेयर उपयोग करना शुरू करने के लिए एक सीरीज के स्टेप्स के माध्यम से जाते हैं: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 63 | \n 64 | \n- सहायता गाइड एक शुरुआती पॉइंट प्रदान करता है और आपके पास सामान्य समस्याएँ को आउटलाइन करता है जो आपके पास हो सकती हैं: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 65 | \n 66 | \n- MIT लाइसेंस 67 | \n(अधिक जानकारी के लिए लाइसेंस देखें https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 68 | 69 | संस्करण जानकारी 70 | प्राथमिकताएँ बदल गईं। सेटिंग्स को लागू करने के लिए कीबोर्ड को पुनः लोड करें 71 | आयात शुरू हुआ। इसमें कुछ समय लग सकता है! 72 | %1$d स्टिकर्स का आयात हुआ। नए स्टिकर्स दिखाने के लिए कीबोर्ड को पुनः लोड करें 73 | E034: स्टिकर्स को पुनः लोड करने में विफलता हुई, कृपया स्टिकर स्रोत निर्दिष्ट करने का प्रयास करें 74 | E041: स्टिकर कन्वर्ट करते समय अप्रत्याशित IOException 75 | 76 | %1$s (पैक: %2$s) 77 | केस-इनसेंसिटिव पैक सॉर्टिंग सक्षम करें 78 | 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ikon paket 5 | Ikon stiker 6 | [ketuk untuk menutup pratinjau stiker] 7 | 8 | Aktifkan Keyboard 9 | Buka Pengaturan 10 | 11 | Perbarui Paket Stiker 12 | Pilih direktori sumber stiker 13 | Muat ulang stiker 14 | Informasi paket stiker saat ini yang dimuat: 15 | - jalur: 16 | Belum Diatur 17 | - Tanggal: 18 | Tidak Pernah 19 | - Total: 20 | 21 | Opsi 22 | Tampilkan tombol kembali di navbar 23 | Aktifkan pencarian 24 | Umpan balik haptik saat menekan tombol 25 | Gunakan tata letak vertikal 26 | Pulihkan keyboard sebelumnya saat menutup keyboard 27 | Aktifkan swipe antara paket stiker (tegak lurus terhadap arah gulir) 28 | "Jumlah Baris: " 29 | "Ukuran Ikon: " 30 | 31 | Informasi 32 | EweSticker adalah aplikasi papan ketik stiker Android, yang dirancang khusus untuk berbagi berbagai macam stiker khusus dalam aplikasi pesan yang didukung. Proyek ini mendapatkan inspirasi dari proyek uSticker dan merupakan cabang dari repositori woosticker. 33 | 34 | Fitur 35 | "Aplikasi Android EweSticker menawarkan fitur-fitur utama berikut ini untuk meningkatkan pengalaman berkirim pesan Anda: 36 | 37 | - **Berbagai Jenis Stiker Khusus yang Didukung**: EweSticker mendukung beragam format stiker, memastikan bahwa pengguna dapat berbagi kreativitas dengan berbagai cara. Format yang didukung termasuk image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, dan video/webm. 38 | 39 | - **Berbagi Stiker dengan Lancar**: Mudah kirim stiker dalam aplikasi pesan yang mendukung berbagi media kustom menggunakan gambar/png sebagai cadangan. 40 | 41 | - **Guliran yang Dapat Disesuaikan**: Gunakan guliran vertikal atau horizontal untuk menavigasi koleksi stiker Anda. 42 | 43 | - **Opsi Tampilan**: Sesuaikan jumlah baris dan ukuran pratinjau stiker, menyesuaikan pengalaman penampilan sesuai keinginan dan dimensi layar perangkat Anda. 44 | 45 | - **Telusuri Pustaka Stiker Anda**: Gunakan papan ketik QWERTY untuk mencari stiker berdasarkan nama file untuk memudahkan penemuan. 46 | 47 | - **Integrasi dengan Tema Sistem**: EweSticker terintegrasi secara mulus dengan tema sistem, memastikan penampilan aplikasi sesuai dengan pilihan desain di seluruh perangkat Anda. 48 | 49 | - **Pratinjau Stiker dengan Tekan Lama**: Untuk memfasilitasi pemilihan stiker, Anda dapat menekan lama pada stiker untuk menampilkan pratinjau yang membantu Anda memutuskan stiker mana yang akan dibagikan dengan cepat tanpa perlu membuka koleksi stiker secara terpisah. 50 | 51 | EweSticker menghadirkan berbagai pilihan kustomisasi, dukungan format yang beragam, dan integrasi dengan aplikasi perpesanan. Baik pengguna berbagi gambar statis, GIF animasi, atau bahkan video pendek, aplikasi ini bertujuan untuk memberikan cara yang menarik dan ekspresif untuk berkomunikasi menggunakan stiker khusus." 52 | 53 | 54 | Cara penggunaan 55 | Pilih direktori yang berisi stiker dan kirim ke aplikasi favorit Anda! 56 | 57 | Lisensi MIT 58 | Hak Cipta © FredHappyface 59 | \nHak Cipta © Randy Zhou 60 | 61 | Tautan 62 | - Kode sumber untuk EweSticker tersedia di https://github.com/FredHappyface/Android.EweSticker 63 | \n 64 | \n- Tutorial ini memandu Anda melalui serangkaian langkah untuk mulai menggunakan perangkat lunak ini. Mulailah dari sini jika Anda masih baru: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 65 | \n 66 | \n- Panduan bantuan menyediakan titik awal dan menguraikan masalah umum yang mungkin Anda alami: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 67 | \n 68 | \n- Lisensi MIT 69 | \n (Lihat lisensi untuk informasi lebih lanjut https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 70 | 71 | Informasi versi 72 | Preferensi berubah. Muat ulang keyboard agar pengaturan dapat diterapkan 73 | Mulai impor. Ini mungkin membutuhkan waktu! 74 | Mengimpor stiker %1$d. Muat ulang keyboard agar stiker baru dapat ditampilkan 75 | E034: Gagal memuat ulang stiker, coba pilih direktori sumber stiker 76 | E041: IOException yang tidak diharapkan saat mengonversi stiker 77 | 78 | %1$s (Paket: %2$s) 79 | Aktifkan penyortiran paket tanpa membedakan huruf besar dan kecil 80 | 81 | -------------------------------------------------------------------------------- /app/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | パックアイコン 4 | ステッカーアイコン 5 | [ステッカープレビューを閉じるにはタップ] 6 | 7 | キーボードを有効にする 8 | 設定を起動 9 | 10 | ステッカーパックを更新 11 | ステッカーソースディレクトリを選択 12 | ステッカーを再読み込み 13 | 現在読み込まれているステッカーパック情報: 14 | - パス: 15 | 未設定 16 | - 日付: 17 | なし 18 | - 合計: 19 | 20 | オプション 21 | ナビゲーションバーに戻るボタンを表示 22 | 検索を有効にする 23 | キー操作時の触覚フィードバック 24 | 垂直レイアウトを使用 25 | キーボードを閉じた際に前回のキーボードを復元 26 | パック間をスワイプで切り替えるを有効にする(スクロール方向に対して垂直) 27 | "行数: " 28 | "アイコンサイズ: " 29 | 30 | 情報 31 | EweStickerは、サポートされているメッセージングアプリでさまざまなカスタムステッカーを共有するために特別に設計されたAndroidステッカーキーボードアプリです。このプロジェクトはuStickerプロジェクトからインスパイアを受け、woostickerリポジトリのフォークです。 32 | 33 | 特徴 34 | "EweSticker Androidアプリは、メッセージング体験を向上させるために以下の主要な機能を提供します: 35 | 36 | - **多様なカスタムステッカー対応**: EweStickerは多様なステッカーフォーマットをサポートし、ユーザーがさまざまな方法でクリエイティビティを共有できるようにします。サポートされるフォーマットにはimage/gif、image/png、image/webp、image/jpeg、image/heif、video/3gpp、video/mp4、video/x-matroska、およびvideo/webmが含まれます。 37 | 38 | - **シームレスなステッカーの共有**: image/pngをフォールバックとして使用して、カスタムメディア共有をサポートするメッセージングアプリ内で簡単にステッカーを送信できます。 39 | 40 | - **カスタマイズ可能なスクロール**: ステッカーコレクションをナビゲートするために垂直または水平スクロールを使用できます。 41 | 42 | - **表示オプション**: 行数とステッカープレビューサイズを調整して、表示体験を好みやデバイスの画面サイズに合わせることができます。 43 | 44 | - **ステッカーライブラリの検索**: ファイル名でステッカーを検索するためにQWERTYキーボードを使用して、発見を容易にします。 45 | 46 | - **システムテーマとの統合**: EweStickerはシステムのテーマとシームレスに統合され、アプリの外観がデバイス全体のデザイン選択に合致するようにします。 47 | 48 | - **ロングプレスでのステッカープレビュー**: ステッカーの選択を容易にするために、ステッカーをロングプレスしてプレビューを表示し、ステッカーコレクションを別個に開く必要なしに素早く共有するステッカーを迅速に決定できます。 49 | 50 | EweStickerは幅広いカスタマイズオプション、多様なフォーマットのサポート、メッセージングアプリとの統合を提供します。ユーザーが静止画、アニメーションGIF、または短いビデオを共有している場合でも、このアプリはカスタムステッカーを使用したコミュニケーションの魅力的で表現豊かな方法を提供することを目指しています。" 51 | 52 | 53 | 使い方 54 | ステッカーを含むディレクトリを選択し、お気に入りのアプリで送信してください! 55 | 56 | MITライセンス 57 | Copyright © FredHappyface 58 | \nCopyright © Randy Zhou 59 | 60 | リンク 61 | - EweStickerのソースコードは https://github.com/FredHappyface/Android.EweSticker で利用可能です。 62 | \n 63 | \n- チュートリアルでは、ソフトウェアの使用を開始する一連の手順を紹介しています。新規の場合はこちらから始めてください: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- ヘルプガイドはスタート地点を提供し、一般的な問題について概説しています: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- MITライセンス 68 | \n(詳細についてはライセンスを参照 https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | バージョン情報 71 | 設定が変更されました。設定が適用されるようにキーボードを再読み込みしてください 72 | インポートを開始しました。しばらく時間がかかることがあります! 73 | %1$d ステッカーをインポートしました。新しいステッカーを表示するにはキーボードを再読み込みしてください 74 | E034: ステッカーの再読み込みに失敗しました。ステッカーソースディレクトリを選択してみてください 75 | E041: ステッカーを変換する際に予期しないIOExceptionが発生しました 76 | 77 | %1$s(パック: %2$s) 78 | 大文字と小文字を区別しないパックのソートを有効にする 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 팩 아이콘 5 | 스티커 아이콘 6 | [스티커 미리보기 닫기를 탭하세요] 7 | 8 | 키보드 활성화 9 | 설정 시작 10 | 11 | 스티커 팩 업데이트 12 | 스티커 소스 디렉터리 선택 13 | 스티커 다시 불러오기 14 | 현재 로드된 스티커 팩 정보: 15 | - 경로: 16 | 설정되지 않음 17 | - 날짜: 18 | 없음 19 | - 전체: 20 | 21 | 옵션 22 | 네비게이션 바에 뒤로 가기 버튼 표시 23 | 검색 활성화 24 | 키를 누를 때 햅틱 피드백 25 | 수직 레이아웃 사용 26 | 키보드 닫을 때 이전 키보드 복원 27 | 팩 간 스와이프 활성화 (스크롤 방향과 수직) 28 | "행 수: " 29 | "아이콘 크기: " 30 | 31 | 정보 32 | EweSticker는 Android 스티커 키보드 애플리케이션으로, 지원되는 메시징 앱에서 다양한 사용자 지정 스티커를 공유하기 위해 특별히 디자인되었습니다. 이 프로젝트는 uSticker 프로젝트에서 영감을 받아 woosticker 저장소의 포크입니다. 33 | 34 | 특징 35 | "EweSticker Android 앱은 다음과 같은 주요 기능을 제공하여 메시지 체험을 향상시킵니다: 36 | 37 | - **다양한 사용자 지정 스티커 지원**: EweSticker는 다양한 스티커 형식을 지원하여 사용자가 다양한 방법으로 창의력을 공유할 수 있도록 합니다. 지원되는 형식에는 image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska 및 video/webm이 포함됩니다. 38 | 39 | - **원활한 스티커 공유**: 이미지/png를 대체로 사용하여 사용자 정의 미디어 공유를 지원하는 메시지 앱 내에서 쉽게 스티커를 전송할 수 있습니다. 40 | 41 | - **사용자 정의 가능한 스크롤링**: 수직 또는 수평 스크롤링을 사용하여 스티커 컬렉션을 탐색할 수 있습니다. 42 | 43 | - **디스플레이 옵션**: 행 수 및 스티커 미리보기 크기를 조정하여 보기 경험을 사용자의 기호와 기기 화면 크기에 맞게 맞출 수 있습니다. 44 | 45 | - **스티커 라이브러리 검색**: 파일 이름으로 스티커를 검색하여 발견을 용이하게 합니다. 46 | 47 | - **시스템 테마 통합**: 시스템 테마와 원활하게 통합되어 앱의 외관이 기기 전체적인 디자인 선택과 일치하도록 합니다. 48 | 49 | - **길게 눌러 스티커 미리보기**: 스티커 선택을 용이하게 하기 위해 스티커를 길게 누르면 별도로 스티커 컬렉션을 열지 않고도 빠르게 공유할 스티커를 결정하는 데 도움이 되는 미리보기를 표시할 수 있습니다. 50 | 51 | EweSticker는 다양한 사용자 정의 옵션, 다양한 형식 지원 및 메시징 앱 통합을 제공합니다. 사용자가 정적 이미지, 애니메이션 GIF 또는 짧은 비디오를 공유하더라도 이 앱은 사용자 정의 스티커를 사용하여 의사 표현을 하는 데 흥미롭고 표현적인 방법을 제공하기 위한 것입니다." 52 | 53 | 사용 방법 54 | 스티커를 포함한 디렉터리를 선택하고, 그것들을 좋아하는 앱으로 보내세요! 55 | 56 | MIT 라이선스 57 | 저작권 © FredHappyface 58 | \n저작권 © Randy Zhou 59 | 60 | 링크 61 | - EweSticker의 소스 코드는 https://github.com/FredHappyface/Android.EweSticker에서 제공됩니다. 62 | \n 63 | \n- 튜토리얼은 소프트웨어 사용을 시작하기 위한 일련의 단계를 안내합니다. 처음 사용자라면 여기에서 시작하십시오: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- 도움말 가이드는 시작점을 제공하고 일반적인 문제를 개요로 설명합니다: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- MIT 라이선스 68 | \n(자세한 정보는 라이선스에서 확인하십시오 https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | 버전 정보 71 | 설정이 변경되었습니다. 설정을 적용하려면 키보드를 다시 불러오세요 72 | 가져오기 시작. 시간이 걸릴 수 있습니다! 73 | %1$d개의 스티커를 가져왔습니다. 새 스티커를 표시하려면 키보드를 다시 불러오세요 74 | E034: 스티커 다시 불러오기 실패. 스티커 소스 디렉터리를 선택해보세요 75 | E041: 스티커 변환 중 예기치 않은 IOException 발생 76 | 77 | %1$s (팩: %2$s) 78 | 대소문자를 구분하지 않는 패키지 정렬 활성화 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #191c1b 4 | #e0e3e1 5 | #1c2624 6 | false 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Ícone do Pacote 4 | Ícone do Adesivo 5 | [toque para fechar a pré-visualização de adesivos] 6 | 7 | Habilitar Teclado 8 | Abrir Configurações 9 | 10 | Atualizar Pacote de Adesivos 11 | Escolher diretório de origem dos adesivos 12 | Recarregar adesivos 13 | Informações atuais dos pacotes de adesivos carregados: 14 | - Diretório: 15 | Não definido 16 | - Data: 17 | Nunca 18 | - Total: 19 | 20 | Opções 21 | Mostrar botão de voltar na barra de navegação 22 | Ativar busca 23 | Feedback háptico ao pressionar teclas 24 | Usar layout vertical 25 | Restaurar teclado anterior ao fechar o teclado 26 | Habilitar deslize entre pacotes (perpendicular à direção de rolagem) 27 | "Número de Linhas: " 28 | "Tamanho do ícone: " 29 | 30 | Informações 31 | O EweSticker é um aplicativo de teclado de adesivos para Android, projetado especificamente para compartilhar uma grande variedade de adesivos personalizados em aplicativos de mensagens suportados. Este projeto se inspira no projeto uSticker e é um fork do repositório woosticker. 32 | 33 | Recursos 34 | "O aplicativo Android EweSticker oferece os seguintes recursos principais para aprimorar sua experiência de mensagens: 35 | 36 | - **Ampla Gama de Adesivos Personalizados Suportados**: O EweSticker suporta uma variedade de formatos de adesivos, garantindo que os usuários possam compartilhar sua criatividade de várias maneiras. Os formatos suportados incluem image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska e video/webm. 37 | 38 | - **Compartilhamento de Adesivos Sem Costura**: Envie facilmente adesivos dentro de aplicativos de mensagens que suportam compartilhamento de mídia personalizada usando image/png como alternativa. 39 | 40 | - **Rolagem Personalizável**: Use a rolagem vertical ou horizontal para navegar pela sua coleção de adesivos. 41 | 42 | - **Opções de Exibição**: ajuste o número de linhas e o tamanho da visualização do adesivo, adaptando a experiência de visualização às suas preferências e dimensões da tela do dispositivo. 43 | 44 | - **Pesquise sua Biblioteca de Adesivos**: Use um teclado qwerty para pesquisar adesivos pelo nome do arquivo para facilitar a descoberta. 45 | 46 | - **Integração com o Tema do Sistema**: O EweSticker se integra perfeitamente ao tema do sistema, garantindo que a aparência do aplicativo esteja alinhada com as escolhas de design em todo o dispositivo. 47 | 48 | - **Pré-visualização de Adesivo com Toque Longo**: Para facilitar a seleção de adesivos, você pode tocar e segurar em um adesivo para revelar uma pré-visualização e ajudá-lo a decidir rapidamente qual adesivo compartilhar, sem a necessidade de abrir a coleção de adesivos separadamente. 49 | 50 | O EweSticker oferece uma ampla variedade de opções de personalização, suporte a formatos diversos e integração com aplicativos de mensagens. Se os usuários estão compartilhando imagens estáticas, GIFs animados ou até mesmo vídeos curtos, o aplicativo tem como objetivo fornecer uma maneira envolvente e expressiva de se comunicar usando adesivos personalizados." 51 | 52 | Como Usar 53 | Selecione um diretório contendo adesivos e envie-os em seus aplicativos favoritos! 54 | 55 | Licença MIT 56 | "Direitos autorais © FredHappyface 57 | Direitos autorais © Randy Zhou 58 | 59 | Links 60 | - O código-fonte do EweSticker está disponível em https://github.com/FredHappyface/Android.EweSticker 61 | \n 62 | \n- Os tutoriais o guiarão passo a passo para começar a usar o software. Comece aqui se você for iniciante: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 63 | \n 64 | \n- O guia de ajuda fornece um ponto de partida e destaca problemas comuns que você pode encontrar: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 65 | \n 66 | \n- Licença MIT 67 | \n(Consulte a licença para obter mais informações em https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 68 | 69 | Informações da versão 70 | Preferências alteradas. Recarregue o teclado para que as configurações se apliquem 71 | Iniciando a importação. Isso pode levar algum tempo! 72 | Importados %1$d adesivos. Recarregue o teclado para mostrar os novos adesivos 73 | E034: Falha ao recarregar adesivos, tente escolher um diretório de origem dos adesivos 74 | E041: IOException inesperada ao converter adesivo 75 | 76 | %1$s (Pacote: %2$s) 77 | Ativar a ordenação de pacotes sem diferenciar maiúsculas de minúsculas 78 | 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-ur/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | پیک آئکن 5 | اسٹکر آئکن 6 | [اسٹکر پیشنظری کو بند کرنے کے لئے ٹیپ کریں] 7 | 8 | کی بورڈ فعال کریں 9 | سیٹنگز شروع کریں 10 | 11 | اپ ڈیٹ اسٹکر پیک 12 | اسٹکر سورس ڈائریکٹری منتخب کریں 13 | اسٹکر دوبارہ لوڈ کریں 14 | موجودہ لوڈ شدہ اسٹکر پیک کی معلومات: 15 | - راہ: 16 | مقرر نہیں 17 | - تاریخ: 18 | کبھی نہیں 19 | - کل: 20 | 21 | اختیارات 22 | نیویگیشن بار میں پیچھے جائیں کا بٹن دکھائیں 23 | تلاش کو فعال کریں 24 | کی پریس پر ہیپٹک فیڈ بیک 25 | عمودی لے آؤٹ استعمال کریں 26 | کی بورڈ بند ہونے پر پچھلا کی بورڈ بحال کریں 27 | پیک کے درمیان میں چھلانے کی اجازت دیں (سکرول کی سمت کے عمودی) 28 | "قطاروں کی تعداد: " 29 | "آئکن سائز: " 30 | 31 | معلومات 32 | EweSticker ایک اینڈروئیڈ اسٹکر کی بورڈ ایپلیکیشن ہے، خصوصاً تصدیق شدہ میسیجنگ ایپس میں مختلف انوکھے اختیارات کے ساتھ اپنے کسٹم اسٹکر شیئر کرنے کے لئے ڈیزائن کی گئی ہے۔ یہ پروجیکٹ uSticker پروجیکٹ سے انسپائریشن حاصل کرتا ہے اور وووسٹکر مخزن کا فورک ہے۔ 33 | 34 | خصوصیات 35 | "EweSticker اینڈروئیڈ ایپ آپ کے میسیجنگ تجربے کو بہتر بنانے کیلئے مندرجہ ذیل کی کلیدی خصوصیات پیش کرتا ہے: 36 | 37 | - **کسٹم اسٹکر کی وسیع رینج کی حمایت**: EweSticker مختلف اقسام کے اسٹکر فارمیٹ کی حمایت فراہم کرتا ہے، جس سے یہ یقینی بنایا جاتا ہے کہ صارفین مختلف طریقوں سے اپنی تخلیقیت کا اشتراک کر سکتے ہیں۔ حمایت شدہ فارمیٹس میں شامل ہیں: image/gif، image/png، image/webp، image/jpeg، image/heif، video/3gpp، video/mp4، video/x-matroska، اور video/webm۔ 38 | 39 | - **بے لکیر اسٹکر شیئر کرنا**: کسٹم میڈیا شیئر کرنے کے میسجنگ ایپس میں آسانی سے اسٹکر بھیجیں۔ 40 | 41 | - **اختیاری اسکرولنگ**: اپنے اسٹکر کی کلیکشن میں گھومنے کے لئے عمودی یا افقی اسکرولنگ کا استعمال کریں۔ 42 | 43 | - **دکھائیں اختیارات**: قطاروں کی تعداد اور اسٹکر پیش نظارہ کا سائز ترتیب دیں، دیکھنے کے تجربے کو اپنی مرضی کے مطابق اور آلہ کے اسکرین کے ابعاد پر مطابقت دیں۔ 44 | 45 | - **اپنی اسٹکر لائبریری تلاش کریں**: اسٹکرز کو فائل کے نام سے تلاش کرنے کے لئے qwerty کی بورڈ کا استعمال کریں۔ 46 | 47 | - **نظامی تھیم کے ساتھ انسلاکشن**: EweSticker نظامی تھیم کے ساتھ بلا جھجھک انسلاکشن فراہم کرتا ہے، جس سے یہ یقینی بنایا جاتا ہے کہ ایپ کی شکل آپ کے آلہ کے ڈیزائن کے چناؤ کے ساتھ مطابقت رکھتی ہو۔ 48 | 49 | - **لمبے دباؤ پر اسٹکر پیش نظارہ**: اسٹکر کا انتخاب آسان بنانے کے لئے، آپ اسٹکر پر لمبا دباؤ لگا کر پیش نظارہ دیکھ سکتے ہیں، تاکہ آپ فوراً فیصلہ کر سکیں کہ کون سا اسٹکر بغیر اسٹکر کی کلیکشن کو الگ سے کھولے پہ بھیجیں۔ 50 | 51 | EweSticker صارفین کو کئی مختلف ترتیبات کی وسیع تعداد کی حمایت، مختلف فارمیٹ کی حمایت، اور میسیجنگ ایپس کے ساتھ انٹیگریشن فراہم کرتا ہے۔ چاہے صارفین استاتیک تصاویر، اینیمیٹڈ GIFs، یا چھوٹے ویڈیوز کو شیئر کر رہے ہیں، یہ ایپ کسٹم اسٹکرز کا استعمال کرکے اپنے ارادے کو اظہار کرنے کے ایک دلچسپ اور اظہاری طریقے فراہم کرنے کا مقصد رکھتا ہے۔ 52 | 53 | استعمال کرنے کا طریقہ 54 | اسٹکرز کو شامل کرنے والی ڈائریکٹری کو منتخب کریں اور انہیں اپنے پسندیدہ ایپس میں بھیجیں! 55 | 56 | MIT لائسنس 57 | کاپی رائٹ © فریڈ ہیپی فیس 58 | \nکاپی رائٹ © رینڈی چو 59 | 60 | لنکس 61 | - EweSticker کا سورس کوڈ https://github.com/FredHappyface/Android.EweSticker پر دستیاب ہے۔ 62 | \n 63 | \n- ٹیوٹوریلز آپ کو استعمال کرنے کے لئے ایک سلسلہ کاروائیوں کے ذریعے لے جاتے ہیں۔ اگر آپ نئے ہیں تو یہاں سے شروع کریں: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- مدد گائیڈ عمدہ آغاز فراہم کرتا ہے اور آپ کی سامنے آنے والی عام مسائل کی مختصر جائزہ دیتا ہے: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- MIT لائسنس 68 | \n(مزید معلومات کے لئے لائسنس دیکھیں https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 69 | 70 | ورژن کی معلومات 71 | ترتیبات تبدیل ہوگئی ہیں. ترتیبات کو اطلاق کرنے کے لئے کی بورڈ دوبارہ لوڈ کریں 72 | شروع کریں منتقلی. اس میں کچھ وقت لگ سکتا ہے! 73 | %1$d اسٹکر منتقل کر لئے گئے ہیں. نئے اسٹکرز دکھانے کے لئے کی بورڈ دوبارہ لوڈ کریں 74 | E034: اسٹکرز دوبارہ لوڈ کرنے میں ناکامی. ایک اسٹکر سورس ڈائریکٹری منتخب کرنے کا کوشش کریں 75 | E041: اسٹکر کو تبدیل کرنے کے دوران غیر متوقع IOException کا اعلان 76 | 77 | %1$s (پیک: %2$s) 78 | کیس-ان حساس پیک ترتیب کو فعال کریں 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-v27/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 包图标 5 | 贴纸图标 6 | [点击关闭贴纸预览] 7 | 8 | 启用键盘 9 | 启动设置 10 | 11 | 更新贴纸包 12 | 选择贴纸源目录 13 | 重新加载贴纸 14 | 当前已加载的贴纸包信息: 15 | - 路径: 16 | 未设置 17 | - 日期: 18 | 从不 19 | - 总数: 20 | 21 | 选项 22 | 在导航栏中显示返回按钮 23 | 启用搜索 24 | 按键时触觉反馈 25 | 使用垂直布局 26 | 在键盘关闭时还原上一个键盘 27 | 启用在贴纸包之间滑动(垂直于滚动方向) 28 | "行数: " 29 | "图标大小: " 30 | 31 | 信息 32 | EweSticker 是一款专为在支持的消息应用程序中分享各种自定义贴纸而设计的 Android 贴纸键盘应用程序。该项目从 uSticker 项目中汲取灵感,是 woosticker 存储库的分支。 33 | 34 | 特性 35 | "EweSticker Android 应用程序提供以下关键特性,以增强您的消息体验: 36 | 37 | - **支持广泛的自定义贴纸**: EweSticker 支持多种贴纸格式,确保用户可以以各种方式分享他们的创意。支持的格式包括image/gif、image/png、image/webp、image/jpeg、image/heif、video/3gpp、video/mp4、video/x-matroska video/webm。 38 | 39 | - **无缝贴纸分享**: 在支持自定义媒体分享的消息应用程序中轻松发送贴纸,使用 image/png 作为备用选项。 40 | 41 | - **可定制的滚动**: 使用垂直或水平滚动浏览您的贴纸收藏。 42 | 43 | - **显示选项**: 调整行数和贴纸预览大小,根据您的喜好和设备屏幕尺寸定制查看体验。 44 | 45 | - **搜索您的贴纸库**: 使用 QWERTY 键盘按文件名搜索贴纸,以便轻松发现。 46 | 47 | - **与系统主题集成**: EweSticker 与系统主题无缝集成,确保应用程序的外观与您的设备范围设计选择一致。 48 | 49 | - **长按预览贴纸**: 为了方便选择贴纸,您可以长按贴纸以显示预览,帮助您快速决定要分享哪个贴纸,无需单独打开贴纸收藏。 50 | 51 | EweSticker 提供了广泛的定制选项、多种格式支持以及与消息应用程序的集成。无论用户是分享静态图像、动画 GIF 还是短视频,该应用程序旨在提供一种 engaging 和富有表现力的方式来使用自定义贴纸进行通信。" 52 | 53 | 如何使用 54 | 选择包含贴纸的目录,然后将它们发送到您喜爱的应用程序中! 55 | 56 | MIT 许可证 57 | 版权 © FredHappyface 58 | \n版权 © Randy Zhou 59 | 60 | 链接 61 | - EweSticker 的源代码可在 https://github.com/FredHappyface/Android.EweSticker 上获得 62 | \n 63 | \n- 教程将逐步引导您开始使用该软件。如果您是新手,请从这里开始: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- 帮助指南提供了一个起点,并概述了您可能遇到的常见问题: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- MIT 许可证 68 | \n(有关更多信息,请参阅许可证 https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md) 69 | 70 | 版本信息 71 | 首选项已更改。重新加载键盘以应用设置 72 | 开始导入。这可能需要一些时间! 73 | 已导入 %1$d 个贴纸。重新加载键盘以显示新贴纸 74 | E034: 重新加载贴纸失败,请尝试选择贴纸源目录 75 | E041: 在转换贴纸时发生意外的 IOException 76 | 77 | %1$s(包: %2$s) 78 | 启用不区分大小写的包排序 79 | 80 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 貼圖包圖示 5 | 貼圖圖示 6 | [點擊以關閉貼圖預覽] 7 | 8 | 啟用鍵盤 9 | 啟動設定 10 | 11 | 更新貼圖包 12 | 選擇貼圖來源目錄 13 | 重新載入貼圖 14 | 目前已載入的貼圖包資訊: 15 | - 路徑: 16 | 未設定 17 | - 日期: 18 | 永不 19 | - 總數: 20 | 21 | 選項 22 | 在導航欄中顯示返回按鈕 23 | 啟用搜尋 24 | 按鍵時觸覺回饋 25 | 使用垂直佈局 26 | 在鍵盤關閉時還原先前的鍵盤 27 | 啟用在貼圖包之間滑動(垂直於捲動方向) 28 | "行數: " 29 | "圖示大小: " 30 | 31 | 資訊 32 | EweSticker 是一個 Android 貼圖鍵盤應用程式,專為在支援的訊息應用程式中共享各種自訂貼圖而設計。這個專案從 uSticker 專案中汲取靈感,是 woosticker 儲存庫的一個分支。 33 | 34 | 特點 35 | EweSticker Android 應用程式提供以下主要功能以增強你的訊息傳遞體驗: 36 | \n 37 | \n- **支援多種自訂貼圖**:EweSticker 支援多種貼圖格式,確保使用者可以透過各種方式分享他們的創造力。支援的格式包括 image/gif、image/png、image/webp、image/jpeg、image/heif、video/3gpp、video/mp4、video/x-matroska 和 video/webm。 38 | \n 39 | \n- **無縫的貼圖共享**:在支援自訂媒體分享的訊息應用程式中輕鬆發送貼圖,使用 image/png 作為後備格式。 40 | \n 41 | \n- **可自訂的捲動**:使用垂直或水平捲動瀏覽你的貼圖集合。 42 | \n 43 | \n- **顯示選項**:調整行數和貼圖預覽大小,根據你的喜好和裝置螢幕尺寸客製化檢視體驗。 44 | \n 45 | \n- **搜尋你的貼圖庫**:使用 qwerty 鍵盤以檔案名稱搜尋貼圖以輕鬆發現 46 | \n 47 | \n- **與系統主題整合**:EweSticker 與系統主題無縫整合,確保應用程式的外觀與你的裝置設計選擇保持一致。 48 | \n 49 | \n- **長按貼圖預覽**:為了方便選擇貼圖,你可以長按貼圖以顯示預覽,以幫助你快速決定要分享的貼圖而無需單獨打開貼圖集合。 50 | \n 51 | \nEweSticker 帶來了廣泛的客製化選項,多種格式支援以及與訊息應用程式的整合。無論使用者是分享靜態圖片、動畫 GIF,甚至是短影片,應用程式都旨在使用自訂貼圖提供一種引人入勝且富有表現力的交流方式。 52 | 53 | 如何使用 54 | 選擇包含貼圖的目錄,然後將它們傳送至你喜愛的應用程式中! 55 | 56 | MIT 許可證 57 | 版權所有 © FredHappyface 58 | \n版權所有 © Randy Zhou 59 | 60 | 連結 61 | - EweSticker 的原始碼可以在 https://github.com/FredHappyface/Android.EweSticker 上獲得 62 | \n 63 | \n- 教程將逐步引導你完成一系列步驟以開始使用軟體。如果你是新手,請從這裏開始:https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 64 | \n 65 | \n- 幫助指南提供了一個起點,並概述了您可能遇到的常見問題:https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 66 | \n 67 | \n- MIT 許可證 68 | \n(有關更多資訊,請參閱許可證 https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md) 69 | 70 | 版本資訊 71 | 偏好設定已變更。重新載入鍵盤以套用設定 72 | 正在開始匯入。這可能需要一些時間! 73 | 已匯入 %1$d 個貼圖。重新載入鍵盤以顯示新貼圖 74 | E034:重新載入貼圖失敗,請嘗試選擇貼圖來源目錄 75 | E041:在轉換貼圖時發生意外的 IOException 76 | 77 | %1$s(包:%2$s) 78 | 啟用不區分大小寫的套件排序 79 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0fa3a2 4 | #880fa3a2 5 | #0000 6 | #e6e6e6 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 32sp 4 | 32dp 5 | 36sp 6 | 24sp 7 | 16sp 8 | 10sp 9 | 40sp 10 | 11 | 10dp 12 | 16dp 13 | 8dp 14 | 4dp 15 | 0dp 16 | 16dp 17 | 40dp 18 | 4dp 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0FA9A8 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | EweSticker 4 | Pack icon 5 | Sticker icon 6 | [tap to close sticker preview] 7 | 8 | Enable Keyboard 9 | Launch Settings 10 | 11 | Update Sticker Pack 12 | Choose sticker source directory 13 | Reload stickers 14 | Current loaded sticker packs information: 15 | - Path: 16 | Not Set 17 | - Date: 18 | Never 19 | - Total: 20 | 21 | Options 22 | Show back button in navbar 23 | Enable search 24 | Haptic feedback on key-press 25 | Use vertical layout 26 | Restore previous keyboard on keyboard close 27 | Enable swipe between packs (perpendicular to scroll direction) 28 | Enable case-insensitive pack sorting 29 | Enable PNG sticker fallback if sticker format isn\'t supported 30 | "Number of Rows: " 31 | "Icon size: " 32 | 33 | Info 34 | EweSticker is an Android sticker keyboard application, specifically designed for sharing a wide variety of custom stickers in supported messaging apps. This project draws inspiration from the uSticker project and is a fork of the woosticker repository. 35 | 36 | Features 37 | "The EweSticker Android app offers the following key features to enhance your messaging experience: 38 | 39 | - **Wide Range of Custom Stickers Supported**: EweSticker supports a diverse set of sticker formats, ensuring that users can share their creativity in various ways. Supported formats include image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, and video/webm. 40 | 41 | - **Seamless Sticker Sharing**: Easily send stickers within messaging apps that support custom media sharing using image/png as a fallback. 42 | 43 | - **Customizable Scrolling**: Use either vertical or horizontal scrolling to navigate through your sticker collection. 44 | 45 | - **Display Options**: adjust the number of rows and the sticker preview size, tailoring the viewing experience to your liking and device screen dimensions. 46 | 47 | - **Search your Sticker library**: Use a qwerty keyboard to search stickers by file name to ease discovery 48 | 49 | - **Integration with System Theme**: EweSticker seamlessly integrates with the system's theme, ensuring that the app's appearance aligns with your device-wide design choices. 50 | 51 | - **Sticker Preview on Long Press**: To facilitate sticker selection, you can long-press on a sticker to reveal a preview to help you quickly decide which sticker to share without the need to open the sticker collection separately. 52 | 53 | EweSticker brings a wide range of customization options, diverse format support, and integration with messaging apps. Whether users are sharing static images, animated GIFs, or even short videos, the app aims to provide an engaging and expressive way to communicate using custom stickers. 54 | 55 | 56 | How to Use 57 | Select a directory containing stickers and send them in your favourite apps! 58 | 59 | MIT License 60 | "Copyright © FredHappyface 61 | Copyright © Randy Zhou 62 | 63 | Links 64 | "- The source code for EweSticker is available at https://github.com/FredHappyface/Android.EweSticker 65 | 66 | - The tutorials take you by the hand through a series of steps to get started using the software. Start here if you’re new: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials 67 | 68 | - The help guide provides a starting point and outlines common issues that you may have: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help 69 | 70 | - MIT License 71 | (See the license for more information https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md ) 72 | Version Info 73 | [debug] 74 | 75 | Logs 76 | Get log file 77 | 78 | Preferences changed. Reload the keyboard for settings to apply 79 | Starting import. This might take some time! 80 | Imported %1$d stickers. Reload the keyboard for new stickers to show 81 | E031: Found more than %1$d stickers in total 82 | E032: Found more than %1$d stickers in pack (%2$s) 83 | E033: Unsupported format found (%1$s, file: %2$s/%3$s) 84 | E034: Reloading stickers failed, try choosing a sticker source directory 85 | E041: Unexpected IOException when converting sticker 86 | 87 | %1$s (Pack: %2$s) 88 | 89 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 25 | 26 | 31 | 32 | 35 | 36 | 39 | 40 | 43 | 44 | 47 | 48 | 51 | 52 | 55 | 56 | 60 | 61 | 65 | 66 | 69 | 70 | 76 | 77 | 80 | 81 | 86 | 87 | 93 | 94 | 100 | 101 | 107 | 108 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #fafdfc 4 | #2d3131 5 | #edf5f4 6 | true 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 6 | \ 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 37 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/xml/full_backup_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/xml/method.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id("com.android.application") version "8.5.2" apply false 4 | id("org.jetbrains.kotlin.android") version "2.1.0" apply false 5 | id("org.jetbrains.dokka") version "1.9.20" 6 | id("org.jlleitschuh.gradle.ktlint") version "11.6.0" 7 | } 8 | 9 | tasks.register("clean") { delete(layout.buildDirectory) } 10 | 11 | configure { 12 | version.set("0.50.0") 13 | coloredOutput.set(false) 14 | } 15 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: app/src/main/res/values/strings.xml 3 | translation: /app/src/main/res/values-%two_letters_code%/strings.xml 4 | translate_attributes: 0 5 | content_segmentation: 0 6 | -------------------------------------------------------------------------------- /documentation/help/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Help Guide 4 | 5 | Support is provided via GitHub issues, please note this is provided on a voluntary basis 6 | 7 | Please take a look at [Error Codes](#error-codes) first. This may provide some useful information 8 | for why you are getting a certain error code. If an issue is created that is answered by this section 9 | you'll likely be asked if you've read this :) 10 | 11 | - [Error Codes](#error-codes) 12 | - [E031](#e031) 13 | - [E032](#e032) 14 | - [E033](#e033) 15 | - [E034](#e034) 16 | - [E041](#e041) 17 | - [Reach out](#reach-out) 18 | 19 | ## Error Codes 20 | 21 | ### E031 22 | Some stickers failed to import (some number imported). Max stickers reached 23 | 24 | This means that the total number of stickers that you are trying to import exceeds the 25 | maximum number of stickers supported by EweSticker. Try and import fewer stickers, 26 | see [Tutorial](/documentation/tutorials) 27 | 28 | **NOTE:** that the maximum pack size is currently **128** and the total maximum number of stickers supported 29 | is **4096** 30 | 31 | If you feel strongly that the maximum limit should be increased, contribute to the discussion at 32 | https://github.com/FredHappyface/Android.EweSticker/discussions/41 and make a request - Be sure 33 | to explain why this would be useful. Simply creating an issue saying 'I want 20000 stickers!' 34 | will likely result in the issue being closed 35 | 36 | ### E032 37 | Some stickers failed to import (some number imported). Max pack size reached 38 | 39 | This means that one of your sticker packs contains a number of stickers that exceeds the 40 | maximum pack size supported by EweSticker. Try splitting the pack up into smaller chunks, 41 | see [Tutorial](/documentation/tutorials) 42 | 43 | **NOTE:** that the maximum pack size is currently **128** and the total maximum number of stickers supported 44 | is **4096** 45 | 46 | If you feel strongly that the maximum limit should be increased, contribute to the discussion at 47 | https://github.com/FredHappyface/Android.EweSticker/discussions/41 and make a request - Be sure 48 | to explain why this would be useful. Simply creating an issue saying 'I want 20000 stickers!' 49 | will likely result in the issue being closed 50 | 51 | ### E033 52 | Some stickers failed to import (some number imported). Unsupported formats found 53 | 54 | This could be for a few reasons, perhaps you have a non sticker file in the sticker directory such 55 | as a document in the wrong place. Alternatively this may result in a seemingly valid sticker not being 56 | imported. Chances are that the sticker is not in a [supported format](/README.md#features). 57 | 58 | ### E034 59 | 60 | Reloading stickers failed, try choosing a sticker source directory 61 | 62 | ### E041 63 | Unexpected IOException when converting sticker 64 | 65 | This is an unexpected error and happens when creating a compat-sticker to send to the application. 66 | Please open an issue and provide as much information as you can. E.g. Android Version, phone 67 | manufacturer, app you are trying to send the sticker in 68 | 69 | ## Reach out 70 | 71 | Support is provided via GitHub issues, please note this is provided on a voluntary basis 72 | 73 | You are therefore not entitled to free customer service (that is not to say that contributions/ issues and questions are not welcome - more reminding you that project maintainers are well within their rights to prioritize other issues). 74 | 75 | https://github.com/FredHappyface/.github/blob/master/SUPPORT.md provides a little more info 76 | from the types of support you can expect 77 | 78 | Please make sure to read https://github.com/FredHappyface/Android.EweSticker/issues/21 before 79 | opening an issue, this may seem a bit grumpy but chances are I won't be able to help with your 80 | issue if you do not fill in the template provided 81 | 82 | To open a new issue click the following link: https://github.com/FredHappyface/Android.EweSticker/issues/new/choose 83 | 84 | **NOTE:** you will need to have a GitHub account to open issues (create one at https://github.com/signup) 85 | -------------------------------------------------------------------------------- /documentation/reference/README.md: -------------------------------------------------------------------------------- 1 | //[app](index.md) 2 | 3 | # app 4 | 5 | ## Packages 6 | 7 | | Name | 8 | |---| 9 | | [com.fredhappyface.ewesticker](app/com.fredhappyface.ewesticker/index.md) | 10 | | [com.fredhappyface.ewesticker.adapter](app/com.fredhappyface.ewesticker.adapter/index.md) | 11 | | [com.fredhappyface.ewesticker.model](app/com.fredhappyface.ewesticker.model/index.md) | 12 | | [com.fredhappyface.ewesticker.utilities](app/com.fredhappyface.ewesticker.utilities/index.md) | 13 | | [com.fredhappyface.ewesticker.view](app/com.fredhappyface.ewesticker.view/index.md) | 14 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/-sticker-pack-adapter/-sticker-pack-adapter.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.adapter](../index.md)/[StickerPackAdapter](index.md)/[StickerPackAdapter](-sticker-pack-adapter.md) 2 | 3 | # StickerPackAdapter 4 | 5 | [androidJvm]\ 6 | constructor(iconSize: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html), stickers: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>, listener: [StickerClickListener](../../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md), gestureDetector: [GestureDetector](https://developer.android.com/reference/kotlin/android/view/GestureDetector.html), vibrate: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/-sticker-pack-adapter/get-item-count.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.adapter](../index.md)/[StickerPackAdapter](index.md)/[getItemCount](get-item-count.md) 2 | 3 | # getItemCount 4 | 5 | [androidJvm]\ 6 | open override fun [getItemCount](get-item-count.md)(): [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/-sticker-pack-adapter/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.adapter](../index.md)/[StickerPackAdapter](index.md) 2 | 3 | # StickerPackAdapter 4 | 5 | [androidJvm]\ 6 | class [StickerPackAdapter](index.md)(iconSize: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html), stickers: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>, listener: [StickerClickListener](../../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md), gestureDetector: [GestureDetector](https://developer.android.com/reference/kotlin/android/view/GestureDetector.html), vibrate: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)) : [RecyclerView.Adapter](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView.Adapter.html)<[StickerPackViewHolder](../../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md)> 7 | 8 | ## Constructors 9 | 10 | | | | 11 | |---|---| 12 | | [StickerPackAdapter](-sticker-pack-adapter.md) | [androidJvm]
constructor(iconSize: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html), stickers: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>, listener: [StickerClickListener](../../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md), gestureDetector: [GestureDetector](https://developer.android.com/reference/kotlin/android/view/GestureDetector.html), vibrate: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)) | 13 | 14 | ## Functions 15 | 16 | | Name | Summary | 17 | |---|---| 18 | | [getItemCount](get-item-count.md) | [androidJvm]
open override fun [getItemCount](get-item-count.md)(): [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) | 19 | | [onBindViewHolder](on-bind-view-holder.md) | [androidJvm]
open override fun [onBindViewHolder](on-bind-view-holder.md)(holder: [StickerPackViewHolder](../../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md), position: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)) | 20 | | [onCreateViewHolder](on-create-view-holder.md) | [androidJvm]
open override fun [onCreateViewHolder](on-create-view-holder.md)(parent: [ViewGroup](https://developer.android.com/reference/kotlin/android/view/ViewGroup.html), viewType: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)): [StickerPackViewHolder](../../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md) | 21 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/-sticker-pack-adapter/on-bind-view-holder.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.adapter](../index.md)/[StickerPackAdapter](index.md)/[onBindViewHolder](on-bind-view-holder.md) 2 | 3 | # onBindViewHolder 4 | 5 | [androidJvm]\ 6 | open override fun [onBindViewHolder](on-bind-view-holder.md)(holder: [StickerPackViewHolder](../../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md), position: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/-sticker-pack-adapter/on-create-view-holder.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.adapter](../index.md)/[StickerPackAdapter](index.md)/[onCreateViewHolder](on-create-view-holder.md) 2 | 3 | # onCreateViewHolder 4 | 5 | [androidJvm]\ 6 | open override fun [onCreateViewHolder](on-create-view-holder.md)(parent: [ViewGroup](https://developer.android.com/reference/kotlin/android/view/ViewGroup.html), viewType: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)): [StickerPackViewHolder](../../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.adapter/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker.adapter](index.md) 2 | 3 | # Package-level declarations 4 | 5 | ## Types 6 | 7 | | Name | Summary | 8 | |---|---| 9 | | [StickerPackAdapter](-sticker-pack-adapter/index.md) | [androidJvm]
class [StickerPackAdapter](-sticker-pack-adapter/index.md)(iconSize: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html), stickers: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>, listener: [StickerClickListener](../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md), gestureDetector: [GestureDetector](https://developer.android.com/reference/kotlin/android/view/GestureDetector.html), vibrate: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)) : [RecyclerView.Adapter](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView.Adapter.html)<[StickerPackViewHolder](../com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md)> | 10 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.model/-sticker-pack/-sticker-pack.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.model](../index.md)/[StickerPack](index.md)/[StickerPack](-sticker-pack.md) 2 | 3 | # StickerPack 4 | 5 | [androidJvm]\ 6 | constructor(packDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.model/-sticker-pack/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.model](../index.md)/[StickerPack](index.md) 2 | 3 | # StickerPack 4 | 5 | [androidJvm]\ 6 | class [StickerPack](index.md)(packDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | 8 | Helper class to provide pack-related information A "Pack" is informally represented as a File 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [StickerPack](-sticker-pack.md) | [androidJvm]
constructor(packDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) | 15 | 16 | ## Properties 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [stickerList](sticker-list.md) | [androidJvm]
val [stickerList](sticker-list.md): [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>
Note: When MainActivity copies files over, it filters out all non-supported files (i.e. any file that is not supported as well as directories). Because of this there is no extra filter in this function. The exception is the base directory, which is handled in the constructor. | 21 | | [thumbSticker](thumb-sticker.md) | [androidJvm]
val [thumbSticker](thumb-sticker.md): [File](https://developer.android.com/reference/kotlin/java/io/File.html)
Provides a sticker to use as the pack-nav container thumbnail. Currently just takes the first element, but could theoretically include any selection logic. | 22 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.model/-sticker-pack/sticker-list.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.model](../index.md)/[StickerPack](index.md)/[stickerList](sticker-list.md) 2 | 3 | # stickerList 4 | 5 | [androidJvm]\ 6 | val [stickerList](sticker-list.md): [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)> 7 | 8 | Note: When MainActivity copies files over, it filters out all non-supported files (i.e. any file that is not supported as well as directories). Because of this there is no extra filter in this function. The exception is the base directory, which is handled in the constructor. 9 | 10 | #### Return 11 | 12 | Array of Files corresponding to all stickers found in this pack 13 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.model/-sticker-pack/thumb-sticker.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.model](../index.md)/[StickerPack](index.md)/[thumbSticker](thumb-sticker.md) 2 | 3 | # thumbSticker 4 | 5 | [androidJvm]\ 6 | val [thumbSticker](thumb-sticker.md): [File](https://developer.android.com/reference/kotlin/java/io/File.html) 7 | 8 | Provides a sticker to use as the pack-nav container thumbnail. Currently just takes the first element, but could theoretically include any selection logic. 9 | 10 | #### Return 11 | 12 | File that should be used for thumbnail 13 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.model/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker.model](index.md) 2 | 3 | # Package-level declarations 4 | 5 | ## Types 6 | 7 | | Name | Summary | 8 | |---|---| 9 | | [StickerPack](-sticker-pack/index.md) | [androidJvm]
class [StickerPack](-sticker-pack/index.md)(packDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html))
Helper class to provide pack-related information A "Pack" is informally represented as a File | 10 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/-cache.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md)/[Cache](-cache.md) 2 | 3 | # Cache 4 | 5 | [androidJvm]\ 6 | constructor(capacity: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) = 30) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/add.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md)/[add](add.md) 2 | 3 | # add 4 | 5 | [androidJvm]\ 6 | fun [add](add.md)(elem: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)? 7 | 8 | Logic to add an element 9 | 10 | #### Return 11 | 12 | #### Parameters 13 | 14 | androidJvm 15 | 16 | | | 17 | |---| 18 | | elem | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/from-shared-pref.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md)/[fromSharedPref](from-shared-pref.md) 2 | 3 | # fromSharedPref 4 | 5 | [androidJvm]\ 6 | fun [fromSharedPref](from-shared-pref.md)(raw: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)) 7 | 8 | convert from a string (shared-pref) to this 9 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md) 2 | 3 | # Cache 4 | 5 | [androidJvm]\ 6 | class [Cache](index.md)(capacity: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) = 30) 7 | 8 | Basically this behaved like an ordered set with some maximum capacity. When this capacity is exceeded an element is removed from the start 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [Cache](-cache.md) | [androidJvm]
constructor(capacity: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) = 30) | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [add](add.md) | [androidJvm]
fun [add](add.md)(elem: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?
Logic to add an element | 21 | | [fromSharedPref](from-shared-pref.md) | [androidJvm]
fun [fromSharedPref](from-shared-pref.md)(raw: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html))
convert from a string (shared-pref) to this | 22 | | [toFiles](to-files.md) | [androidJvm]
fun [toFiles](to-files.md)(): [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)>
convert this to a array of files | 23 | | [toSharedPref](to-shared-pref.md) | [androidJvm]
fun [toSharedPref](to-shared-pref.md)(): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
convert this to a string to write to shared-pref | 24 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/to-files.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md)/[toFiles](to-files.md) 2 | 3 | # toFiles 4 | 5 | [androidJvm]\ 6 | fun [toFiles](to-files.md)(): [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[File](https://developer.android.com/reference/kotlin/java/io/File.html)> 7 | 8 | convert this to a array of files 9 | 10 | #### Return 11 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-cache/to-shared-pref.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Cache](index.md)/[toSharedPref](to-shared-pref.md) 2 | 3 | # toSharedPref 4 | 5 | [androidJvm]\ 6 | fun [toSharedPref](to-shared-pref.md)(): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) 7 | 8 | convert this to a string to write to shared-pref 9 | 10 | #### Return 11 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerClickListener](index.md) 2 | 3 | # StickerClickListener 4 | 5 | interface [StickerClickListener](index.md) 6 | 7 | #### Inheritors 8 | 9 | | | 10 | |---| 11 | | [ImageKeyboard](../../com.fredhappyface.ewesticker/-image-keyboard/index.md) | 12 | 13 | ## Functions 14 | 15 | | Name | Summary | 16 | |---|---| 17 | | [onStickerClicked](on-sticker-clicked.md) | [androidJvm]
abstract fun [onStickerClicked](on-sticker-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) | 18 | | [onStickerLongClicked](on-sticker-long-clicked.md) | [androidJvm]
abstract fun [onStickerLongClicked](on-sticker-long-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-click-listener/on-sticker-clicked.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerClickListener](index.md)/[onStickerClicked](on-sticker-clicked.md) 2 | 3 | # onStickerClicked 4 | 5 | [androidJvm]\ 6 | abstract fun [onStickerClicked](on-sticker-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-click-listener/on-sticker-long-clicked.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerClickListener](index.md)/[onStickerLongClicked](on-sticker-long-clicked.md) 2 | 3 | # onStickerLongClicked 4 | 5 | [androidJvm]\ 6 | abstract fun [onStickerLongClicked](on-sticker-long-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-sender/-sticker-sender.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerSender](index.md)/[StickerSender](-sticker-sender.md) 2 | 3 | # StickerSender 4 | 5 | [androidJvm]\ 6 | constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../-toaster/index.md), internalDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html), currentInputConnection: [InputConnection](https://developer.android.com/reference/kotlin/android/view/inputmethod/InputConnection.html)?, currentInputEditorInfo: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, compatCache: [Cache](../-cache/index.md), imageLoader: ImageLoader) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-sender/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerSender](index.md) 2 | 3 | # StickerSender 4 | 5 | [androidJvm]\ 6 | class [StickerSender](index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../-toaster/index.md), internalDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html), currentInputConnection: [InputConnection](https://developer.android.com/reference/kotlin/android/view/inputmethod/InputConnection.html)?, currentInputEditorInfo: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, compatCache: [Cache](../-cache/index.md), imageLoader: ImageLoader) 7 | 8 | The StickerSender Class used to contain all of the methods used for sending a sticker to an InputConnection 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [StickerSender](-sticker-sender.md) | [androidJvm]
constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../-toaster/index.md), internalDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html), currentInputConnection: [InputConnection](https://developer.android.com/reference/kotlin/android/view/inputmethod/InputConnection.html)?, currentInputEditorInfo: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, compatCache: [Cache](../-cache/index.md), imageLoader: ImageLoader) | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [sendSticker](send-sticker.md) | [androidJvm]
fun [sendSticker](send-sticker.md)(file: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) | 21 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-sticker-sender/send-sticker.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[StickerSender](index.md)/[sendSticker](send-sticker.md) 2 | 3 | # sendSticker 4 | 5 | [androidJvm]\ 6 | fun [sendSticker](send-sticker.md)(file: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-toaster/-toaster.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Toaster](index.md)/[Toaster](-toaster.md) 2 | 3 | # Toaster 4 | 5 | [androidJvm]\ 6 | constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-toaster/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Toaster](index.md) 2 | 3 | # Toaster 4 | 5 | [androidJvm]\ 6 | class [Toaster](index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html)) 7 | 8 | The Toaster class provides a simplified interface to android.widget.Toast. Pass in the android.content.Context to the constructor and call the 'toast' function (others as below) toaster.state keeps track of an error state or similar. 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [Toaster](-toaster.md) | [androidJvm]
constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html)) | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [setState](set-state.md) | [androidJvm]
fun [setState](set-state.md)(state: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html))
Set the state to some integer value | 21 | | [toast](toast.md) | [androidJvm]
fun [toast](toast.md)(string: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html))
Call toaster.toast with some string to always create a toast notification. Context is set when Toaster is instantiated. Duration is determined based on text length | 22 | | [toastOnState](toast-on-state.md) | [androidJvm]
fun [toastOnState](toast-on-state.md)(strings: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)>)
Call toaster.toastOnState with an array of messages to create a toast notification. Context is set when Toaster is instantiated. Duration is determined based on text length. The message is selected based on the state (which can be set in a callback function or elsewhere | 23 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-toaster/set-state.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Toaster](index.md)/[setState](set-state.md) 2 | 3 | # setState 4 | 5 | [androidJvm]\ 6 | fun [setState](set-state.md)(state: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)) 7 | 8 | Set the state to some integer value 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | state | : Int | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-toaster/toast-on-state.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Toaster](index.md)/[toastOnState](toast-on-state.md) 2 | 3 | # toastOnState 4 | 5 | [androidJvm]\ 6 | fun [toastOnState](toast-on-state.md)(strings: [Array](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html)<[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)>) 7 | 8 | Call toaster.toastOnState with an array of messages to create a toast notification. Context is set when Toaster is instantiated. Duration is determined based on text length. The message is selected based on the state (which can be set in a callback function or elsewhere 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | strings | : Array. Array of potential messages to output. | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-toaster/toast.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Toaster](index.md)/[toast](toast.md) 2 | 3 | # toast 4 | 5 | [androidJvm]\ 6 | fun [toast](toast.md)(string: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)) 7 | 8 | Call toaster.toast with some string to always create a toast notification. Context is set when Toaster is instantiated. Duration is determined based on text length 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | string | : String. Message to output | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-utils/get-mime-type.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Utils](index.md)/[getMimeType](get-mime-type.md) 2 | 3 | # getMimeType 4 | 5 | [androidJvm]\ 6 | fun [getMimeType](get-mime-type.md)(file: [File](https://developer.android.com/reference/kotlin/java/io/File.html)): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)? 7 | 8 | Get the mimetype of a File 9 | 10 | #### Return 11 | 12 | String? Return the mimetype or none if it cannot be determined 13 | 14 | #### Parameters 15 | 16 | androidJvm 17 | 18 | | | | 19 | |---|---| 20 | | file | File file to get the mimetype of | 21 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-utils/get-supported-mimes.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Utils](index.md)/[getSupportedMimes](get-supported-mimes.md) 2 | 3 | # getSupportedMimes 4 | 5 | [androidJvm]\ 6 | fun [getSupportedMimes](get-supported-mimes.md)(): [MutableList](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)<[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)> 7 | 8 | Return a MutableList of EweSticker Supported mimetypes 9 | 10 | #### Return 11 | 12 | MutableList of EweSticker Supported mimetypes 13 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/-utils/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.utilities](../index.md)/[Utils](index.md) 2 | 3 | # Utils 4 | 5 | [androidJvm]\ 6 | object [Utils](index.md) 7 | 8 | Class to provide utils that are shared across ewesticker. 9 | 10 | ## Functions 11 | 12 | | Name | Summary | 13 | |---|---| 14 | | [getMimeType](get-mime-type.md) | [androidJvm]
fun [getMimeType](get-mime-type.md)(file: [File](https://developer.android.com/reference/kotlin/java/io/File.html)): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?
Get the mimetype of a File | 15 | | [getSupportedMimes](get-supported-mimes.md) | [androidJvm]
fun [getSupportedMimes](get-supported-mimes.md)(): [MutableList](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)<[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)>
Return a MutableList of EweSticker Supported mimetypes | 16 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.utilities/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker.utilities](index.md) 2 | 3 | # Package-level declarations 4 | 5 | ## Types 6 | 7 | | Name | Summary | 8 | |---|---| 9 | | [Cache](-cache/index.md) | [androidJvm]
class [Cache](-cache/index.md)(capacity: [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) = 30)
Basically this behaved like an ordered set with some maximum capacity. When this capacity is exceeded an element is removed from the start | 10 | | [StickerClickListener](-sticker-click-listener/index.md) | [androidJvm]
interface [StickerClickListener](-sticker-click-listener/index.md) | 11 | | [StickerSender](-sticker-sender/index.md) | [androidJvm]
class [StickerSender](-sticker-sender/index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](-toaster/index.md), internalDir: [File](https://developer.android.com/reference/kotlin/java/io/File.html), currentInputConnection: [InputConnection](https://developer.android.com/reference/kotlin/android/view/inputmethod/InputConnection.html)?, currentInputEditorInfo: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, compatCache: [Cache](-cache/index.md), imageLoader: ImageLoader)
The StickerSender Class used to contain all of the methods used for sending a sticker to an InputConnection | 12 | | [Toaster](-toaster/index.md) | [androidJvm]
class [Toaster](-toaster/index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html))
The Toaster class provides a simplified interface to android.widget.Toast. Pass in the android.content.Context to the constructor and call the 'toast' function (others as below) toaster.state keeps track of an error state or similar. | 13 | | [Utils](-utils/index.md) | [androidJvm]
object [Utils](-utils/index.md)
Class to provide utils that are shared across ewesticker. | 14 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/-sticker-pack-view-holder.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.view](../index.md)/[StickerPackViewHolder](index.md)/[StickerPackViewHolder](-sticker-pack-view-holder.md) 2 | 3 | # StickerPackViewHolder 4 | 5 | [androidJvm]\ 6 | constructor(itemView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.view](../index.md)/[StickerPackViewHolder](index.md) 2 | 3 | # StickerPackViewHolder 4 | 5 | [androidJvm]\ 6 | class [StickerPackViewHolder](index.md)(itemView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) : [RecyclerView.ViewHolder](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView.ViewHolder.html) 7 | 8 | ## Constructors 9 | 10 | | | | 11 | |---|---| 12 | | [StickerPackViewHolder](-sticker-pack-view-holder.md) | [androidJvm]
constructor(itemView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) | 13 | 14 | ## Properties 15 | 16 | | Name | Summary | 17 | |---|---| 18 | | [stickerThumbnail](sticker-thumbnail.md) | [androidJvm]
val [stickerThumbnail](sticker-thumbnail.md): [ImageView](https://developer.android.com/reference/kotlin/android/widget/ImageView.html) | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.view/-sticker-pack-view-holder/sticker-thumbnail.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker.view](../index.md)/[StickerPackViewHolder](index.md)/[stickerThumbnail](sticker-thumbnail.md) 2 | 3 | # stickerThumbnail 4 | 5 | [androidJvm]\ 6 | val [stickerThumbnail](sticker-thumbnail.md): [ImageView](https://developer.android.com/reference/kotlin/android/widget/ImageView.html) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker.view/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker.view](index.md) 2 | 3 | # Package-level declarations 4 | 5 | ## Types 6 | 7 | | Name | Summary | 8 | |---|---| 9 | | [StickerPackViewHolder](-sticker-pack-view-holder/index.md) | [androidJvm]
class [StickerPackViewHolder](-sticker-pack-view-holder/index.md)(itemView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) : [RecyclerView.ViewHolder](https://developer.android.com/reference/kotlin/androidx/recyclerview/widget/RecyclerView.ViewHolder.html) | 10 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/-image-keyboard.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[ImageKeyboard](-image-keyboard.md) 2 | 3 | # ImageKeyboard 4 | 5 | [androidJvm]\ 6 | constructor() 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md) 2 | 3 | # ImageKeyboard 4 | 5 | [androidJvm]\ 6 | class [ImageKeyboard](index.md) : [InputMethodService](https://developer.android.com/reference/kotlin/android/inputmethodservice/InputMethodService.html), [StickerClickListener](../../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md) 7 | 8 | ImageKeyboard class inherits from the InputMethodService class - provides the keyboard functionality 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [ImageKeyboard](-image-keyboard.md) | [androidJvm]
constructor() | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [onCreate](on-create.md) | [androidJvm]
open override fun [onCreate](on-create.md)()
When the activity is created... | 21 | | [onCreateInputView](on-create-input-view.md) | [androidJvm]
open override fun [onCreateInputView](on-create-input-view.md)(): [View](https://developer.android.com/reference/kotlin/android/view/View.html)
When the keyboard is first drawn... | 22 | | [onEvaluateFullscreenMode](on-evaluate-fullscreen-mode.md) | [androidJvm]
open override fun [onEvaluateFullscreenMode](on-evaluate-fullscreen-mode.md)(): [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)
Disable full-screen mode as content will likely be hidden by the IME. | 23 | | [onFinishInput](on-finish-input.md) | [androidJvm]
open override fun [onFinishInput](on-finish-input.md)()
When leaving some input field update the caches | 24 | | [onStartInput](on-start-input.md) | [androidJvm]
open override fun [onStartInput](on-start-input.md)(info: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, restarting: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html))
When entering some input field update the list of supported-mimes | 25 | | [onStickerClicked](on-sticker-clicked.md) | [androidJvm]
open override fun [onStickerClicked](on-sticker-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html))
onStickerClicked | 26 | | [onStickerLongClicked](on-sticker-long-clicked.md) | [androidJvm]
open override fun [onStickerLongClicked](on-sticker-long-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html))
onStickerLongClicked | 27 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-create-input-view.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onCreateInputView](on-create-input-view.md) 2 | 3 | # onCreateInputView 4 | 5 | [androidJvm]\ 6 | open override fun [onCreateInputView](on-create-input-view.md)(): [View](https://developer.android.com/reference/kotlin/android/view/View.html) 7 | 8 | When the keyboard is first drawn... 9 | 10 | - 11 | inflate keyboardLayout 12 | - 13 | set the keyboard height 14 | - 15 | create pack icons 16 | 17 | #### Return 18 | 19 | View keyboardLayout 20 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-create.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onCreate](on-create.md) 2 | 3 | # onCreate 4 | 5 | [androidJvm]\ 6 | open override fun [onCreate](on-create.md)() 7 | 8 | When the activity is created... 9 | 10 | - 11 | ensure coil can decode (and display) animated images 12 | - 13 | set the internal sticker dir, icon-padding, icon-size, icons-per-col, caches and loaded-packs 14 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-evaluate-fullscreen-mode.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onEvaluateFullscreenMode](on-evaluate-fullscreen-mode.md) 2 | 3 | # onEvaluateFullscreenMode 4 | 5 | [androidJvm]\ 6 | open override fun [onEvaluateFullscreenMode](on-evaluate-fullscreen-mode.md)(): [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) 7 | 8 | Disable full-screen mode as content will likely be hidden by the IME. 9 | 10 | #### Return 11 | 12 | Boolean false 13 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-finish-input.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onFinishInput](on-finish-input.md) 2 | 3 | # onFinishInput 4 | 5 | [androidJvm]\ 6 | open override fun [onFinishInput](on-finish-input.md)() 7 | 8 | When leaving some input field update the caches 9 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-start-input.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onStartInput](on-start-input.md) 2 | 3 | # onStartInput 4 | 5 | [androidJvm]\ 6 | open override fun [onStartInput](on-start-input.md)(info: [EditorInfo](https://developer.android.com/reference/kotlin/android/view/inputmethod/EditorInfo.html)?, restarting: [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)) 7 | 8 | When entering some input field update the list of supported-mimes 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | 15 | |---| 16 | | info | 17 | | restarting | 18 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-sticker-clicked.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onStickerClicked](on-sticker-clicked.md) 2 | 3 | # onStickerClicked 4 | 5 | [androidJvm]\ 6 | open override fun [onStickerClicked](on-sticker-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | 8 | onStickerClicked 9 | 10 | When a sticker is tapped/ clicked. Update the cache and send the sticker 11 | 12 | #### Parameters 13 | 14 | androidJvm 15 | 16 | | | | 17 | |---|---| 18 | | sticker | : File | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-image-keyboard/on-sticker-long-clicked.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[ImageKeyboard](index.md)/[onStickerLongClicked](on-sticker-long-clicked.md) 2 | 3 | # onStickerLongClicked 4 | 5 | [androidJvm]\ 6 | open override fun [onStickerLongClicked](on-sticker-long-clicked.md)(sticker: [File](https://developer.android.com/reference/kotlin/java/io/File.html)) 7 | 8 | onStickerLongClicked 9 | 10 | When a sticker is long tapped/ clicked. Attach a new view to see an enlarged version of the sticker 11 | 12 | #### Parameters 13 | 14 | androidJvm 15 | 16 | | | | 17 | |---|---| 18 | | sticker | : File | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-main-activity/-main-activity.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[MainActivity](index.md)/[MainActivity](-main-activity.md) 2 | 3 | # MainActivity 4 | 5 | [androidJvm]\ 6 | constructor() 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-main-activity/choose-dir.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[MainActivity](index.md)/[chooseDir](choose-dir.md) 2 | 3 | # chooseDir 4 | 5 | [androidJvm]\ 6 | fun [chooseDir](choose-dir.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) 7 | 8 | Called on button press to choose a new directory 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | ignoredView | : View | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-main-activity/enable-keyboard.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[MainActivity](index.md)/[enableKeyboard](enable-keyboard.md) 2 | 3 | # enableKeyboard 4 | 5 | [androidJvm]\ 6 | fun [enableKeyboard](enable-keyboard.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) 7 | 8 | Called on button press to launch settings 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | ignoredView | : View | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-main-activity/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[MainActivity](index.md) 2 | 3 | # MainActivity 4 | 5 | [androidJvm]\ 6 | class [MainActivity](index.md) : [AppCompatActivity](https://developer.android.com/reference/kotlin/androidx/appcompat/app/AppCompatActivity.html) 7 | 8 | MainActivity class inherits from the AppCompatActivity class - provides the settings view 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [MainActivity](-main-activity.md) | [androidJvm]
constructor() | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [chooseDir](choose-dir.md) | [androidJvm]
fun [chooseDir](choose-dir.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html))
Called on button press to choose a new directory | 21 | | [enableKeyboard](enable-keyboard.md) | [androidJvm]
fun [enableKeyboard](enable-keyboard.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html))
Called on button press to launch settings | 22 | | [reloadStickers](reload-stickers.md) | [androidJvm]
fun [reloadStickers](reload-stickers.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html))
reloadStickers | 23 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-main-activity/reload-stickers.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[MainActivity](index.md)/[reloadStickers](reload-stickers.md) 2 | 3 | # reloadStickers 4 | 5 | [androidJvm]\ 6 | fun [reloadStickers](reload-stickers.md)(ignoredView: [View](https://developer.android.com/reference/kotlin/android/view/View.html)) 7 | 8 | reloadStickers 9 | 10 | Call this function when a user taps the reload stickers button. If we have a set stickerDirPath, call importStickers() 11 | 12 | #### Parameters 13 | 14 | androidJvm 15 | 16 | | | | 17 | |---|---| 18 | | ignoredView | : View | 19 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-sticker-importer/-sticker-importer.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[StickerImporter](index.md)/[StickerImporter](-sticker-importer.md) 2 | 3 | # StickerImporter 4 | 5 | [androidJvm]\ 6 | constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../../com.fredhappyface.ewesticker.utilities/-toaster/index.md), progressBar: LinearProgressIndicator) 7 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-sticker-importer/import-stickers.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[StickerImporter](index.md)/[importStickers](import-stickers.md) 2 | 3 | # importStickers 4 | 5 | [androidJvm]\ 6 | suspend fun [importStickers](import-stickers.md)(stickerDirPath: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)): [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) 7 | 8 | Used by the ACTION_OPEN_DOCUMENT_TREE handler function to copy stickers from a stickerDirPath to the application internal storage for access later on by the keyboard 9 | 10 | #### Parameters 11 | 12 | androidJvm 13 | 14 | | | | 15 | |---|---| 16 | | stickerDirPath | a URI to the stickers directory to import into EweSticker | 17 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/-sticker-importer/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../../index.md)/[com.fredhappyface.ewesticker](../index.md)/[StickerImporter](index.md) 2 | 3 | # StickerImporter 4 | 5 | [androidJvm]\ 6 | class [StickerImporter](index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../../com.fredhappyface.ewesticker.utilities/-toaster/index.md), progressBar: LinearProgressIndicator) 7 | 8 | The StickerImporter class includes a helper function to import stickers from a user-selected stickerDirPath (see importStickers). The class requires the application baseContext and an instance of Toaster (in turn requiring the application baseContext) 9 | 10 | ## Constructors 11 | 12 | | | | 13 | |---|---| 14 | | [StickerImporter](-sticker-importer.md) | [androidJvm]
constructor(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../../com.fredhappyface.ewesticker.utilities/-toaster/index.md), progressBar: LinearProgressIndicator) | 15 | 16 | ## Functions 17 | 18 | | Name | Summary | 19 | |---|---| 20 | | [importStickers](import-stickers.md) | [androidJvm]
suspend fun [importStickers](import-stickers.md)(stickerDirPath: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)): [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)
Used by the ACTION_OPEN_DOCUMENT_TREE handler function to copy stickers from a stickerDirPath to the application internal storage for access later on by the keyboard | 21 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/index.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker](index.md) 2 | 3 | # Package-level declarations 4 | 5 | ## Types 6 | 7 | | Name | Summary | 8 | |---|---| 9 | | [ImageKeyboard](-image-keyboard/index.md) | [androidJvm]
class [ImageKeyboard](-image-keyboard/index.md) : [InputMethodService](https://developer.android.com/reference/kotlin/android/inputmethodservice/InputMethodService.html), [StickerClickListener](../com.fredhappyface.ewesticker.utilities/-sticker-click-listener/index.md)
ImageKeyboard class inherits from the InputMethodService class - provides the keyboard functionality | 10 | | [MainActivity](-main-activity/index.md) | [androidJvm]
class [MainActivity](-main-activity/index.md) : [AppCompatActivity](https://developer.android.com/reference/kotlin/androidx/appcompat/app/AppCompatActivity.html)
MainActivity class inherits from the AppCompatActivity class - provides the settings view | 11 | | [StickerImporter](-sticker-importer/index.md) | [androidJvm]
class [StickerImporter](-sticker-importer/index.md)(context: [Context](https://developer.android.com/reference/kotlin/android/content/Context.html), toaster: [Toaster](../com.fredhappyface.ewesticker.utilities/-toaster/index.md), progressBar: LinearProgressIndicator)
The StickerImporter class includes a helper function to import stickers from a user-selected stickerDirPath (see importStickers). The class requires the application baseContext and an instance of Toaster (in turn requiring the application baseContext) | 12 | 13 | ## Functions 14 | 15 | | Name | Summary | 16 | |---|---| 17 | | [trimString](trim-string.md) | [androidJvm]
fun [trimString](trim-string.md)(str: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
trimString | 18 | -------------------------------------------------------------------------------- /documentation/reference/app/com.fredhappyface.ewesticker/trim-string.md: -------------------------------------------------------------------------------- 1 | //[app](../../index.md)/[com.fredhappyface.ewesticker](index.md)/[trimString](trim-string.md) 2 | 3 | # trimString 4 | 5 | [androidJvm]\ 6 | fun [trimString](trim-string.md)(str: [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) 7 | 8 | trimString 9 | 10 | for strings longer than 32 chars, trim to 32 chars and add ellipsis ... 11 | 12 | #### Return 13 | 14 | String 15 | 16 | #### Parameters 17 | 18 | androidJvm 19 | 20 | | | | 21 | |---|---| 22 | | str | : String | 23 | -------------------------------------------------------------------------------- /documentation/reference/index.md: -------------------------------------------------------------------------------- 1 | //[app](index.md) 2 | 3 | # app 4 | 5 | ## Packages 6 | 7 | | Name | 8 | |---| 9 | | [com.fredhappyface.ewesticker](app/com.fredhappyface.ewesticker/index.md) | 10 | | [com.fredhappyface.ewesticker.adapter](app/com.fredhappyface.ewesticker.adapter/index.md) | 11 | | [com.fredhappyface.ewesticker.model](app/com.fredhappyface.ewesticker.model/index.md) | 12 | | [com.fredhappyface.ewesticker.utilities](app/com.fredhappyface.ewesticker.utilities/index.md) | 13 | | [com.fredhappyface.ewesticker.view](app/com.fredhappyface.ewesticker.view/index.md) | 14 | -------------------------------------------------------------------------------- /documentation/tutorials/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Tutorial 3 | 4 | See below for a step-by-step tutorial on how to use EweSticker with your existing 5 | sticker collection. 6 | 7 | - [Step 1 - Create Sticker Directory (and transfer to device)](#step-1---create-sticker-directory-and-transfer-to-device) 8 | - [Step 2 - Download EweSticker](#step-2---download-ewesticker) 9 | - [Step 3 - Activate the keyboard](#step-3---activate-the-keyboard) 10 | - [Step 4 - Select Directory with EweSticker](#step-4---select-directory-with-ewesticker) 11 | - [Step 5 - Send Stickers in your favourite apps](#step-5---send-stickers-in-your-favourite-apps) 12 | 13 | ## Step 1 - Create Sticker Directory (and transfer to device) 14 | 15 | VSCode showing an example sticker pack structure 16 | 17 | The sticker directory has the following structure: 18 | 19 | ```none 20 | /root 21 | /sticker-pack-name-1 22 | /sticker-1 23 | /sticker-2 24 | /sticker-pack-name-2 25 | /sticker-1 26 | /sticker-2 27 | ``` 28 | 29 | Then transfer this to your phone/ device. Plugging this into a PC is a pretty 30 | convenient way to do this. 31 | 32 | **NOTE:** that the maximum pack size is currently **128** and the total maximum number of stickers supported 33 | is **4096** 34 | 35 | ## Step 2 - Download EweSticker 36 | 37 | You can install the app using the following methods, Follow the link to the listing on your 38 | preferred store by clicking on one of the badges below, then download/install: 39 | 40 | [Get it on F-Droid](https://f-droid.org/en/packages/com.fredhappyface.ewesticker/) 41 | [Get it on Google Play](https://play.google.com/store/apps/details?id=com.fredhappyface.ewesticker) 42 | [Direct apk download](../../releases) 43 | 44 | ## Step 3 - Activate the keyboard 45 | 46 | Click the `Launch Settings` button 47 | 48 | EweSticker UI with 'Launch Settings' button 49 | 50 | Toggle EweSticker on 51 | 52 | System UI 'On Screen Keyboard' with EweSticker toggle 53 | 54 | ## Step 4 - Select Directory with EweSticker 55 | 56 | Click the `Choose sticker source directory` button 57 | 58 | EweSticker UI with 'Choose sticker source directory' button 59 | 60 | Select the sticker directory created in step 1 61 | 62 | System UI file chooser 63 | 64 | ## Step 5 - Send Stickers in your favourite apps 65 | 66 | Tap the keyboard switcher icon and select EweSticker 67 | 68 | System UI keyboard switcher wit select EweSticker 69 | 70 | Find and send a sticker of your choosing 71 | 72 | EweSticker UI showing horizontal layout 5 wide x 3 stickers deep 73 | 74 | **Note:** That you can configure EweSticker to: 75 | 76 | - enable/disable the back button 77 | - use the vertical scroll layout 78 | - restore the previous keyboard when the keyboard is closed (through tapping away from a text input) 79 | - enable swipe between sticker packs (perpendicular to scroll direction, i.e. vertical swipe if not using the vertical layout) 80 | - number of rows (between 2 and 6) 81 | - icon size if not in vertical scroll layout 82 | 83 | EweSticker UI showing configuration options 84 | 85 | EweSticker UI showing horizontal layout 5 wide x 6 stickers deep 86 | -------------------------------------------------------------------------------- /documentation/tutorials/assets/configure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/configure.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/enable-import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/enable-import.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/few.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/few.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/make-packs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/make-packs.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/many.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/many.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/sys-enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/sys-enable.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/sys-import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/sys-import.png -------------------------------------------------------------------------------- /documentation/tutorials/assets/sys-switcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/documentation/tutorials/assets/sys-switcher.png -------------------------------------------------------------------------------- /example-files/gif/1027+fire.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/gif/1027+fire.gif -------------------------------------------------------------------------------- /example-files/gif/1122+thumbs_up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/gif/1122+thumbs_up.gif -------------------------------------------------------------------------------- /example-files/heif/1130+man_shrugging.heif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/heif/1130+man_shrugging.heif -------------------------------------------------------------------------------- /example-files/jpeg/1329+OK_hand.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/jpeg/1329+OK_hand.jpeg -------------------------------------------------------------------------------- /example-files/mp4/1324+face_with_tears_of_joy.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/mp4/1324+face_with_tears_of_joy.mp4 -------------------------------------------------------------------------------- /example-files/png/1101+fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/png/1101+fire.png -------------------------------------------------------------------------------- /example-files/png/1324+face_with_tears_of_joy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/png/1324+face_with_tears_of_joy.png -------------------------------------------------------------------------------- /example-files/svg/hotel-svgrepo-com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /example-files/webm/1324+face_with_tears_of_joy.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/webm/1324+face_with_tears_of_joy.webm -------------------------------------------------------------------------------- /example-files/webp/1345+face_with_crossed-out_eyes.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/webp/1345+face_with_crossed-out_eyes.webp -------------------------------------------------------------------------------- /example-files/webp_animated/1324+face_with_tears_of_joy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/example-files/webp_animated/1324+face_with_tears_of_joy.webp -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Kotlin code style for this project: "official" or "obsolete": 19 | kotlin.code.style=official 20 | # Enables namespacing of each library's R class so that its R class includes only the 21 | # resources declared in the library itself and none from the library's dependencies, 22 | # thereby reducing the size of the R class for that library 23 | android.nonTransitiveRClass=true 24 | android.nonFinalResIds=false 25 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Feb 08 15:53:44 GMT 2025 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20210612.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Changes from upstream:
  • 3 |
      4 |
    • Merged `ui-update`, `feature_distributed_apks`, `fallback`. Providing a fresher 5 | ui and the ability to send a fallback sticker for unsupported formats.
    • 6 |
    • Converted to Kotlin
    • 7 |
    • Provided fastlane metadata for fdroid
    • 8 |
    • Provided tutorial (TUTORIAL.md)
    • 9 |
    • Cleaned up assets and codebase
    • 10 |
    • Changed package name to `com.fredhappyface.ewesticker`
    • 11 |
    • Changed app icon
    • 12 |
    13 |
14 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20210714.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Added link to online tutorial (on GitHub)
  • 3 |
  • Ignore the compat sticker when creating groups
  • 4 |
  • SVG back arrow
  • 5 |
  • Add headings to UI
  • 6 |
  • Removed unnecessary permissions
  • 7 |
8 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20210810.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Code optimisations 3 |
      4 |
    • Code clean-up
    • 5 |
    • Removed APNG animation due to memory leak
    • 6 |
    • Linting fixes
    • 7 |
  • 8 |
  • Added caching functionality 9 |
      10 |
    • to improve performance of fallback stickers
    • 11 |
    • to enable addition of recent list
    • 12 |
    • to improve switching packs performance
    • 13 |
  • 14 |
  • Updated gradle and dependencies
  • 15 |
  • Add recent icon
  • 16 |
17 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20210909.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • update ui 3 |
      4 |
    • use MaterialCardView and Snack-bar in settings (MainActivity)
    • 5 |
    • improvements to the keyboard layout
    • 6 |
    • theme improvements
    • 7 |
  • 8 |
  • general code improvements
  • 9 |
  • stability improvements
  • 10 |
11 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20211011.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Performance improvements to cache miss in switchImageContainer (call createImageContainer(stickers) once)
  • 3 |
  • update screenshots with new phone frame
  • 4 |
  • fix sticker shadows on light mode
  • 5 |
  • tidy up files committed to git
  • 6 |
  • attempt to fix https://github.com/FredHappyface/Android.EweSticker/issues/7 by using layoutInflater.inflate(R.layout.image_container, imageContainer, false) in place of View.inflate(applicationContext, R.layout.image_container, null)
  • 7 |
  • additional logging to predict java.lang.IllegalStateException (no prevention) in the hope that this provides additional context to make fixing easier if imageContainer.addView(imageContainerLayout) raises in the future
  • 8 |
9 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20211029.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Use coil https://coil-kt.github.io/coil/ for supported image types to improve performance
  • 3 |
  • Add support for vertical scroll https://github.com/FredHappyface/Android.EweSticker/issues/8
  • 4 |
  • Add Spanish translation https://github.com/FredHappyface/Android.EweSticker/pull/13
  • 5 |
  • Long press on a sticker to show a preview https://github.com/FredHappyface/Android.EweSticker/issues/10
  • 6 |
  • Use JavaVersion.VERSION_11 in place of JavaVersion.VERSION_1_8
  • 7 |
  • Use GridLayout in place of linear views
  • 8 |
  • Refactor and code clean up (reduced ImageKeyboard.kt by about 17% sloc, reduced MainActivity.kt by about 18% sloc)
  • 9 |
  • Update UI (now more material you inspired)
  • 10 |
  • Update screenshots
  • 11 |
  • Update tutorial
  • 12 |
  • Update fonts (using fira sans ttf)
  • 13 |
14 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20211114.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Reopen last used pack https://github.com/FredHappyface/Android.EweSticker/issues/14
  • 3 |
  • Variable number of columns in vertical scroll https://github.com/FredHappyface/Android.EweSticker/issues/16
  • 4 |
  • Nested directory structures now supported https://github.com/FredHappyface/Android.EweSticker/issues/17
  • 5 |
  • Recent stickers are in the expected order https://github.com/FredHappyface/Android.EweSticker/issues/18
  • 6 |
  • Back button now switches to the previously used keyboard (api>=28) https://github.com/FredHappyface/Android.EweSticker/issues/23
  • 7 |
  • Localisations for Sticker Path: Not Set, Sticker Date: Never
  • 8 |
  • Code clean up + documentation improvements
  • 9 |
  • The new target SDK version is 31 (Android 12) - previously 30 (Android 11)
  • 10 |
  • The new minimum SDK version is 26 (Android 8 Oreo) - previously 28 (Android 9 Pie)
  • 11 |
12 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20211118.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Attempt to resolve issue reported where the app crashed when importing stickers (suspected cause of a java.lang.OutOfMemoryError)
  • 3 |
  • Improve sticker layout https://github.com/FredHappyface/Android.EweSticker/issues/24
  • 4 |
  • Improve large sticker preview https://github.com/FredHappyface/Android.EweSticker/issues/25
  • 5 |
  • Recent tab can now be saved as last used https://github.com/FredHappyface/Android.EweSticker/issues/30
  • 6 |
7 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20220103.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Add ‘Enable Keyboard’ section with ‘Launch Settings’ button. https://github.com/FredHappyface/Android.EweSticker/issues/31
  • 3 |
  • Show back button in navbar by default. https://github.com/FredHappyface/Android.EweSticker/issues/32
  • 4 |
5 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20220128.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • Highlight the selected tab. 3 | https://github.com/FredHappyface/Android.EweSticker/issues/29
  • 4 |
  • Add support for video formats 5 | https://github.com/FredHappyface/Android.EweSticker/issues/34 6 |
      7 |
    • “video/3gpp”, “video/mp4”, “video/x-matroska”, “video/webm”
    • 8 |
  • 9 |
  • Reformat
  • 10 |
  • Update dependencies
  • 11 |
  • Limit sticker pack size to resolve java.lang.OutOfMemoryError: 12 | at androidx.gridlayout.widget.GridLayout
  • 13 |
14 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20220311.txt: -------------------------------------------------------------------------------- 1 |
    2 |
  • New Feature: Improve error messages for the user per 3 | https://github.com/FredHappyface/Android.EweSticker/issues/39
  • 4 |
  • New Feature: Add Help to provide 5 | guidance for error messages
  • 6 |
  • New Feature: Add Gradle tasks 7 |
      8 |
    • ktlintCheck (gradlew ktlintCheck): run ktlint over the 9 | codebase
    • 10 |
    • genDocs (gradlew genDocs): generate the api reference 11 | using dokka
    • 12 |
  • 13 |
  • New Feature: Update navbar theme (dark/light rather than the app 14 | accent colour)
  • 15 |
  • Bugfix: Refactor in response to bug found when investigating 16 | https://github.com/FredHappyface/Android.EweSticker/issues/37
  • 17 |
  • Bugfix: Back button now enabled in fresh install per 18 | https://github.com/FredHappyface/Android.EweSticker/issues/38
  • 19 |
  • Update: dependencies
  • 20 |
  • Update: tutorial, and tutorial location to Tutorials
  • 22 |
23 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20230823.txt: -------------------------------------------------------------------------------- 1 |

20230823

2 |
    3 |
  • Update dependencies
  • 4 |
  • Performance improvements for sticker import (3-4x faster)
  • 5 |
  • Performance improvements for sticker keyboard (recyclerview)
  • 6 |
  • Add example-files
  • 7 |
  • Add restore prior keyboard on minimize (closes issue #49)
  • 8 |
  • Add send stickers with system sharesheets (closes issue #48)
  • 9 |
  • Add reload stickers from directory (closes issue #46)
  • 10 |
11 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20230824.txt: -------------------------------------------------------------------------------- 1 |

20230824

2 |
    3 |
  • Add Feature: switch between folders by swiping (closes issue 4 | #33)
  • 5 |
  • Add Progress bar for sticker import (closes issue #51)
  • 6 |
7 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20230825.txt: -------------------------------------------------------------------------------- 1 |

20230825

2 |
    3 |
  • Update launcher icon, version, screenshots
  • 4 |
5 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20230828.txt: -------------------------------------------------------------------------------- 1 |

20230828

2 |
    3 |
  • Update app description
  • 4 |
  • Add German (de) translations with help from google translate and 5 | friends. Contributions to enhance this are very welcome!
  • 6 |
7 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20231008.txt: -------------------------------------------------------------------------------- 1 |

20231008

2 |
    3 |
  • Update Fastlane Metadata
  • 4 |
  • Update to use API level 34 5 |
  • 6 |
  • Minor tweaks to readme
  • 7 |
  • Add translations from Weblate (thank you to the following!) 8 |
      9 |
    • German 10 |
        11 |
      • Ettore Atalan
      • 12 |
    • 13 |
    • French 14 |
        15 |
      • J. Lavoie
      • 16 |
    • 17 |
  • 18 |
  • Add Android 13 Icon
  • 19 |
  • Code clean up and ktlint check and formatting
  • 20 |
  • Fix Bug: Keyboard has a transparent background
  • 21 |
  • Fix Bug where the keyboard forgets last ‘Recent’ last selected
  • 22 |
23 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20240322.txt: -------------------------------------------------------------------------------- 1 |

20240322

2 |
    3 |
  • Add sticker search
  • 4 |
  • Add haptic feedback option
  • 5 |
  • Update translations from Weblate (thank you to the following!) 6 |
  • 13 |
  • Update screenshots and docs
  • 14 |
  • Update deps
  • 15 |
16 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20240825.txt: -------------------------------------------------------------------------------- 1 |

20240825

2 |
    3 |
  • Add case insensitive sort
  • 4 |
  • Add app version in-app
  • 5 |
6 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20250209.txt: -------------------------------------------------------------------------------- 1 |

20250209

2 |
    3 |
  • Update dependency versions
  • 4 |
  • Add a shortcut to google keyboard (fixes #76)
  • 5 |
  • Add SVG image support
  • 6 |
  • Code quality improvements
  • 7 |
  • Use xLog (https://github.com/elvishew/xLog) to capture today’s logs 8 | (to assist with debugging)
  • 9 |
  • Make PNG sticker fallback configurable and improve share sheet 10 | (fixes #80)
  • 11 |
  • Improve toast logging experience
  • 12 |
13 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/20250217.txt: -------------------------------------------------------------------------------- 1 |

20250217

2 |
    3 |
  • Fix critical bug with the logger crashing the app
  • 4 |
5 | -------------------------------------------------------------------------------- /metadata/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | EweSticker is an Android sticker keyboard application, specifically designed for sharing a wide variety of custom stickers in supported messaging apps. This project draws inspiration from the uSticker project and is a fork of the woosticker repository. 2 | 3 | Features: 4 | 5 | The EweSticker Android app offers the following key features to enhance your messaging experience: 6 | 7 |
    8 |
  • Wide Range of Custom Stickers Supported: EweSticker supports a diverse set of sticker formats, ensuring that users can share their creativity in various ways. Supported formats include image/gif, image/png, image/webp, image/jpeg, image/heif, video/3gpp, video/mp4, video/x-matroska, and video/webm.
  • 9 |
  • Seamless Sticker Sharing: Easily send stickers within messaging apps that support custom media sharing using image/png as a fallback.
  • 10 |
  • Customizable Scrolling: Use either vertical or horizontal scrolling to navigate through your sticker collection.
  • 11 |
  • Display Options: adjust the number of rows and the sticker preview size, tailoring the viewing experience to your liking and device screen dimensions.
  • 12 |
  • Search your Sticker library: Use a qwerty keyboard to search stickers by file name to ease discovery
  • 13 |
  • Integration with System Theme: EweSticker seamlessly integrates with the system’s theme, ensuring that the app’s appearance aligns with your device-wide design choices.
  • 14 |
  • Sticker Preview on Long Press: To facilitate sticker selection, you can long-press on a sticker to reveal a preview to help you quickly decide which sticker to share without the need to open the sticker collection separately.
  • 15 |
16 | 17 | EweSticker brings a wide range of customization options, diverse format support, and integration with messaging apps. Whether users are sharing static images, animated GIFs, or even short videos, the app aims to provide an engaging and expressive way to communicate using custom stickers. 18 | 19 | Links: 20 | 21 |
  • The source code for EweSticker is available at https://github.com/FredHappyface/Android.EweSticker
  • 22 |
  • The tutorials take you by the hand through a series of steps to get started using the software. Start here if you’re new: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/tutorials
  • 23 |
  • The help guide provides a starting point and outlines common issues that you may have: https://github.com/FredHappyface/Android.EweSticker/blob/main/documentation/help
  • 24 |
  • MIT License (See the license for more information https://github.com/FredHappyface/Android.EweSticker/blob/main/LICENSE.md )
  • 25 | 26 | -------------------------------------------------------------------------------- /metadata/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /metadata/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/icon.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-1.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-2.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-3.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-4.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-5.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-6.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/dark-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/dark-7.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/light-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/light-1.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/light-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/light-2.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/light-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/metadata/en-US/images/phoneScreenshots/light-3.png -------------------------------------------------------------------------------- /metadata/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | EweSticker: Sticker Keyboard for using custom stickers in messaging 2 | -------------------------------------------------------------------------------- /metadata/en-US/title.txt: -------------------------------------------------------------------------------- 1 | EweSticker 2 | -------------------------------------------------------------------------------- /readme-assets/badges/badge_fdroid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/badges/badge_fdroid.png -------------------------------------------------------------------------------- /readme-assets/badges/badge_github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/badges/badge_github.png -------------------------------------------------------------------------------- /readme-assets/badges/badge_gplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/badges/badge_gplay.png -------------------------------------------------------------------------------- /readme-assets/badges/badge_obtainium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/badges/badge_obtainium.png -------------------------------------------------------------------------------- /readme-assets/icons/EweSticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/icons/EweSticker.png -------------------------------------------------------------------------------- /readme-assets/icons/EweSticker.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/icons/EweSticker.xcf -------------------------------------------------------------------------------- /readme-assets/icons/EweSticker_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FredHappyface/Android.EweSticker/713c51009ac820bf620551b63bd2b343f617ae80/readme-assets/icons/EweSticker_foreground.webp -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "EweSticker" 16 | include ':app' 17 | --------------------------------------------------------------------------------