From 8cca1cb6eeef256ac3971ccc3a848aaee417b610 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Wed, 14 Feb 2024 00:24:25 +0200 Subject: [PATCH] Initial commit --- .classpath | 9 ++++ .project | 33 +++++++++++++ AndroidManifest.xml | 32 +++++++++++++ proguard-project.txt | 20 ++++++++ project.properties | 14 ++++++ res/drawable-hdpi/ic_launcher.png | Bin 0 -> 2995 bytes res/drawable-mdpi/ic_launcher.png | Bin 0 -> 1914 bytes res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 3968 bytes res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 6504 bytes res/values-ru/strings.xml | 13 +++++ res/values-v11/styles.xml | 11 +++++ res/values/strings.xml | 11 +++++ res/values/styles.xml | 20 ++++++++ res/xml/accessibillity_service_config.xml | 8 ++++ .../TextInfoAccessibilityService.java | 45 ++++++++++++++++++ 15 files changed, 216 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 AndroidManifest.xml create mode 100644 proguard-project.txt create mode 100644 project.properties create mode 100644 res/drawable-hdpi/ic_launcher.png create mode 100644 res/drawable-mdpi/ic_launcher.png create mode 100644 res/drawable-xhdpi/ic_launcher.png create mode 100644 res/drawable-xxhdpi/ic_launcher.png create mode 100644 res/values-ru/strings.xml create mode 100644 res/values-v11/styles.xml create mode 100644 res/values/strings.xml create mode 100644 res/values/styles.xml create mode 100644 res/xml/accessibillity_service_config.xml create mode 100644 src/com/annimon/selectedtextinfo/TextInfoAccessibilityService.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..7bc01d9 --- /dev/null +++ b/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..e57058e --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + SelectedTextInfo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..aa13108 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + diff --git a/proguard-project.txt b/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..00cf62b --- /dev/null +++ b/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-22 diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..df0409f02a34f700abe90b83d308363f51dbd086 GIT binary patch literal 2995 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 O0000 + + + SelectedTextInfo + Показывает размер выделенного текста + + + Выделен %d символ. + Выделено %d символа. + Выделено %d символов. + Выделено %d символов. + + diff --git a/res/values-v11/styles.xml b/res/values-v11/styles.xml new file mode 100644 index 0000000..b06ab7a --- /dev/null +++ b/res/values-v11/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..81f3679 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,11 @@ + + + + SelectedTextInfo + Shows selected text length + + + Selected %d symbol. + Selected %d symbols. + + diff --git a/res/values/styles.xml b/res/values/styles.xml new file mode 100644 index 0000000..5ef233e --- /dev/null +++ b/res/values/styles.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/res/xml/accessibillity_service_config.xml b/res/xml/accessibillity_service_config.xml new file mode 100644 index 0000000..3998fd6 --- /dev/null +++ b/res/xml/accessibillity_service_config.xml @@ -0,0 +1,8 @@ + + diff --git a/src/com/annimon/selectedtextinfo/TextInfoAccessibilityService.java b/src/com/annimon/selectedtextinfo/TextInfoAccessibilityService.java new file mode 100644 index 0000000..462b1a4 --- /dev/null +++ b/src/com/annimon/selectedtextinfo/TextInfoAccessibilityService.java @@ -0,0 +1,45 @@ +package com.annimon.selectedtextinfo; + +import android.accessibilityservice.AccessibilityService; +import android.view.accessibility.AccessibilityEvent; +import android.widget.Toast; + +public class TextInfoAccessibilityService extends AccessibilityService { + + private Toast mToast; + + @Override + public void onAccessibilityEvent(AccessibilityEvent event) { + if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED) return; + + final String selectedText = getEventText(event); + final int length = selectedText.length(); + if (length > 0) + toast(getResources().getQuantityString(R.plurals.info, length, length)); + } + + @Override + public void onInterrupt() { + } + + private String getEventText(AccessibilityEvent event) { + final StringBuilder sb = new StringBuilder(); + for (CharSequence s : event.getText()) { + sb.append(s); + } + try { + return sb.substring(event.getFromIndex(), event.getToIndex()); + } catch (Exception ex) { + return ""; + } + } + + private void toast(String message) { + if (mToast == null) { + mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT); + } else { + mToast.setText(message); + } + mToast.show(); + } +}