From fc605ef023fe6f538ea681849ac31a449471d3ca Mon Sep 17 00:00:00 2001 From: xingag Date: Sun, 1 Mar 2020 14:12:31 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=9C=8B=E5=8F=8B=E5=9C=88=E9=98=B2?= =?UTF-8?q?=E6=8A=98=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 18436 -> 18436 bytes .gitignore | 1 + README.md | 1 + .../.DS_Store" | Bin 0 -> 8196 bytes .../NoCollapseInput/.gitignore" | 15 ++ .../.idea/codeStyles/Project.xml" | 113 ++++++++++++ .../NoCollapseInput/.idea/gradle.xml" | 21 +++ .../NoCollapseInput/.idea/misc.xml" | 14 ++ .../.idea/runConfigurations.xml" | 12 ++ .../NoCollapseInput/.project" | 17 ++ .../org.eclipse.buildship.core.prefs" | 2 + .../NoCollapseInput/.vscode/settings.json" | 3 + .../NoCollapseInput/app/.classpath" | 6 + .../NoCollapseInput/app/.gitignore" | 1 + .../NoCollapseInput/app/.project" | 23 +++ .../org.eclipse.buildship.core.prefs" | 2 + .../NoCollapseInput/app/build.gradle" | 44 +++++ .../NoCollapseInput/app/proguard-rules.pro" | 21 +++ .../ExampleInstrumentedTest.java" | 29 +++ .../app/src/main/AndroidManifest.xml" | 50 +++++ .../com/xingag/preventrubbishapp/App.java" | 24 +++ .../preventrubbishapp/MainActivity.java" | 82 +++++++++ .../java/com/xingag/service/BaseService.java" | 89 +++++++++ .../com/xingag/service/PreventService.java" | 131 +++++++++++++ .../com/xingag/utils/AccessibilityUtil.java" | 141 ++++++++++++++ .../main/java/com/xingag/utils/AppUtil.java" | 56 ++++++ .../drawable-v24/ic_launcher_foreground.xml" | 34 ++++ .../app/src/main/res/drawable/btn_bg.xml" | 7 + .../res/drawable/ic_launcher_background.xml" | 170 +++++++++++++++++ .../src/main/res/layout/activity_main.xml" | 82 +++++++++ .../res/layout/dialog_bottom_alertmsg.xml" | 33 ++++ .../src/main/res/layout/item_app_select.xml" | 22 +++ .../app/src/main/res/layout/title_bar.xml" | 10 + .../src/main/res/mipmap-xhdpi/ic_back.png" | Bin 0 -> 1075 bytes .../main/res/mipmap-xhdpi/ic_launcher.png" | Bin 0 -> 3832 bytes .../src/main/res/mipmap-xhdpi/ic_sure.png" | Bin 0 -> 1688 bytes .../app/src/main/res/values/colors.xml" | 6 + .../app/src/main/res/values/strings.xml" | 5 + .../app/src/main/res/values/styles.xml" | 11 ++ .../main/res/xml/accessibility_settings.xml" | 9 + .../preventrubbishapp/ExampleUnitTest.java" | 19 ++ .../NoCollapseInput/build.gradle" | 43 +++++ .../NoCollapseInput/gradle.properties" | 20 ++ .../gradle/wrapper/gradle-wrapper.jar" | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties" | 6 + .../NoCollapseInput/gradlew" | 172 ++++++++++++++++++ .../NoCollapseInput/gradlew.bat" | 84 +++++++++ .../NoCollapseInput/readme.md" | 2 + .../NoCollapseInput/settings.gradle" | 2 + ...0\345\217\240\346\234\215\345\212\241.apk" | Bin 0 -> 2342952 bytes 50 files changed, 1635 insertions(+) create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/.DS_Store" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.gitignore" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/codeStyles/Project.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/gradle.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/misc.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/runConfigurations.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.project" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.settings/org.eclipse.buildship.core.prefs" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.vscode/settings.json" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.classpath" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.gitignore" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.project" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.settings/org.eclipse.buildship.core.prefs" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/build.gradle" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/proguard-rules.pro" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/androidTest/java/com/xingag/preventrubbishapp/ExampleInstrumentedTest.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/AndroidManifest.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/App.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/MainActivity.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/BaseService.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/PreventService.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AccessibilityUtil.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AppUtil.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/btn_bg.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/ic_launcher_background.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/activity_main.xml" create mode 100755 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/dialog_bottom_alertmsg.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/item_app_select.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/title_bar.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/mipmap-xhdpi/ic_back.png" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/mipmap-xhdpi/ic_launcher.png" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/mipmap-xhdpi/ic_sure.png" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/values/colors.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/values/strings.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/values/styles.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/xml/accessibility_settings.xml" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/test/java/com/xingag/preventrubbishapp/ExampleUnitTest.java" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/build.gradle" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/gradle.properties" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/gradle/wrapper/gradle-wrapper.jar" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/gradle/wrapper/gradle-wrapper.properties" create mode 100755 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/gradlew" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/gradlew.bat" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/readme.md" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/settings.gradle" create mode 100644 "\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/\351\230\262\346\212\230\345\217\240\346\234\215\345\212\241.apk" diff --git a/.DS_Store b/.DS_Store index 558ef795e1eadc7adf707509ba4bff6a740ac490..33e8cc2b90ff77f4cbdb81481e406e1259b3c839 100644 GIT binary patch delta 713 zcmaiyOK4L;6o%)&P2#<21CyH6mL~QV6EJBKbMt6yHEL>5M5}>-BE?ryOsRPkAN5gV zL`o19n>hFeF}M)A)6qp2f^Ef(pr9_?RdFXO=t4yodPxeBE_7BieE)&-oipPljF(Vq zN3m@2qqiK}&#s#d80AKM(=i$Se37UTK^e7}_>}pn&Y(**#-HsFulN$z;&0hp=Y-kU z6LQIZZy@iI#}p;xb;-d{ka?7#yDpnfDe+`3GeZ8JI?iq@GFsWRa)}k3PE^>W^9%cJ z>?m+DMP|u!@`Ai1ugDwnj(i{=$tUued?!E1Px1>QjA+JUbYM9g=zZ3GsgQ*E7^ z4IA|~7N&VN7Z_$KcTdu0x9TbALs5F&vZS@mVYgbTAd1z8+oQ4ux^JHO{CX?Z(m|<4 zLo4-qs-cIZTIK4nN_BMeJdO0Jlo*AIB(a=n1v7Qi0Uesqf~AnL3^v%|ffqjb5m1%a zB7(lE_SUNQP7GidcB}G37)BZyWN}ngAHzxHQN&rCs}A8ZuHpu6vO;%Pp>8pmTr`?U z=Mw5b#P=~*<%xDCqTUx|2LGEG8T$7J7>ysyrgPa8A^e1;EZk|7DVlkccavD2v~mMI bt>s_C4gp1OSto0>PaehgFfg5B$umjxH)<>cq31H~98UlbPEtRQfVZF9YB57WX2jElJy1Q>ZX t^B8z?OxD$q-CU$Gm3=b1g9u~$W*G+s7Dk52jxGl$`%8Oo_B7qi1OOl%C};ox diff --git a/.gitignore b/.gitignore index 894a44c..3277328 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,4 @@ venv.bak/ # mypy .mypy_cache/ +.DS_Store diff --git a/README.md b/README.md index 3acf8d5..e8f1516 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ ## 文章列表 +* [朋友圈防折叠](./朋友圈防折叠/) * [批量生成手机号码](./批量生成手机号码) * [短视频二次创作](./video_auto/二次剪辑) * [使用 Python 制作 GIF 动画视频](./video_auto/制作GIF视频/) diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/.DS_Store" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..ae8216825ed89308000a89ddf663bba5ce188c75 GIT binary patch literal 8196 zcmeHLU2GIp6h3EL;Lh;VX@PBvlx|oWsw}!&S{k6pwp$EUej2xBTPU`(I|Ch=&a6AL zyZy1IF~<0VPX?o4Vl@5)c@m$DFB0B-&_qc@UyMdye9*)PG5X@Ub7v6>O^FX`VD9GL zbMHOp+`0Fg@7_CS0RVf7S^}T}02pO1mE~02B5^&>H>Hr@!<9(>04DuZ$b$p=P1Zq2 zfIxsifIxsifIxu2{{aEIvw30*-1|ZslmP+(0(T_>{CtQ|<}&HaIU&8Hg96|^0_Z(~FvD@%)N-2RZJONJ8FKYW zm)DLscEL?~hNFs7bo57cvNKA0FIkgo9UtjX-ZgB?Ijk2PlF?+`TLehwSFByv9Btj& z*4dT3ymD2IBG<`lG9|+?vZg**HZ*s9Saou`r5VD_sS!3pJ9I%m41)$` zI0dKS6?hBI!-wz@T!PQwbNB+jge&kJd=EdskMJ{Gh2P;1_!Ak{VjZr=W^BcKaSO&U zfje;*?#2f(h5PXU9>RV+jH5V)S7xt5AXthjGy2| zF~3lS)P15|De)5379+J&@;7tn$gL>aL=@fhpHlSe6`Yr~b*tB`-4NZpCEl@f&$U-N z?>*i?wCmaBy+Oekk4Y7#2nL7i8yeT$BR35a$Mnhhtgq|_Wf^A^yUeYdBTY>TBWjE0 zrbv^lAd@^@E7yg5O>8S^s)*7;muQollqJMo;kUh0mX&Ivx6tnDBJENlvd|{GNeg_V zN%Oh5AQR8Q1-M8o{06=y?)?P6!c_!ZiYqXT8!&=V+=MN7KgO{Qw_!VRZx1H18z1)g zcMvl;j7M<o&{@Z0?Fi*D$~ + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+ \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/gradle.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/gradle.xml" new file mode 100644 index 0000000..674414f --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/gradle.xml" @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/misc.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/misc.xml" new file mode 100644 index 0000000..703e5d4 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/misc.xml" @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/runConfigurations.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/runConfigurations.xml" new file mode 100644 index 0000000..7f68460 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.idea/runConfigurations.xml" @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.project" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.project" new file mode 100644 index 0000000..aec280f --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.project" @@ -0,0 +1,17 @@ + + + NoCollapseInput + Project NoCollapseInput created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.settings/org.eclipse.buildship.core.prefs" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.settings/org.eclipse.buildship.core.prefs" new file mode 100644 index 0000000..e889521 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.settings/org.eclipse.buildship.core.prefs" @@ -0,0 +1,2 @@ +connection.project.dir= +eclipse.preferences.version=1 diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.vscode/settings.json" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.vscode/settings.json" new file mode 100644 index 0000000..e0f15db --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/.vscode/settings.json" @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.classpath" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.classpath" new file mode 100644 index 0000000..eb19361 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.classpath" @@ -0,0 +1,6 @@ + + + + + + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.gitignore" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.gitignore" new file mode 100644 index 0000000..796b96d --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.gitignore" @@ -0,0 +1 @@ +/build diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.project" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.project" new file mode 100644 index 0000000..ac485d7 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.project" @@ -0,0 +1,23 @@ + + + app + Project app created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.settings/org.eclipse.buildship.core.prefs" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.settings/org.eclipse.buildship.core.prefs" new file mode 100644 index 0000000..b1886ad --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/.settings/org.eclipse.buildship.core.prefs" @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/build.gradle" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/build.gradle" new file mode 100644 index 0000000..0bf342f --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/build.gradle" @@ -0,0 +1,44 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.xingag.preventrubbishapp" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } + } + + buildTypes { + + debug { + minifyEnabled false + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } + +} + + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + implementation 'com.wuhenzhizao:titlebar:1.1.4' + implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.code.gson:gson:2.8.6' +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/proguard-rules.pro" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/proguard-rules.pro" new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/proguard-rules.pro" @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/androidTest/java/com/xingag/preventrubbishapp/ExampleInstrumentedTest.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/androidTest/java/com/xingag/preventrubbishapp/ExampleInstrumentedTest.java" new file mode 100644 index 0000000..05797e4 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/androidTest/java/com/xingag/preventrubbishapp/ExampleInstrumentedTest.java" @@ -0,0 +1,29 @@ +package com.xingag.preventrubbishapp; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest +{ + @Test + public void useAppContext() + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.xingag.preventrubbishapp", appContext.getPackageName()); + } +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/AndroidManifest.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/AndroidManifest.xml" new file mode 100644 index 0000000..6546f04 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/AndroidManifest.xml" @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/App.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/App.java" new file mode 100644 index 0000000..787a3b0 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/App.java" @@ -0,0 +1,24 @@ +package com.xingag.preventrubbishapp; + +import android.app.Application; +import android.content.Context; + +public class App extends Application +{ + private static App instance = null; + + public static int phone_type = 0; + + public static App getInstance() + { + return instance; + } + + @Override + public void onCreate() + { + super.onCreate(); + instance = this; + phone_type = BuildConfig.phone_type; + } +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/MainActivity.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/MainActivity.java" new file mode 100644 index 0000000..0d00f89 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/preventrubbishapp/MainActivity.java" @@ -0,0 +1,82 @@ +package com.xingag.preventrubbishapp; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.TextView; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + +import com.xingag.utils.AccessibilityUtil; + +public class MainActivity extends AppCompatActivity implements View.OnClickListener +{ + + //包名和服务名称 + private static final String PACKAGE_NAME = "com.xingag.preventrubbishapp"; + private static final String SERVICE_NAME = "com.xingag.service.PreventService"; + + private AccessibilityUtil accessibilityUtil = null; + + //状态 + private TextView status_tv = null; + + private Button open_service_btn = null; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + status_tv = findViewById(R.id.status_tv); + open_service_btn = findViewById(R.id.open_service_btn); + open_service_btn.setOnClickListener(this); + + accessibilityUtil = new AccessibilityUtil(MainActivity.this, + PACKAGE_NAME, SERVICE_NAME); + + //设置标题 + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) + { + actionBar.setTitle("不折叠服务"); + } + + //判断状态,如果没有开启,就跳到设置界面 + openAccessibilityMet(); + } + + public void openAccessibilityMet() + { + //服务状态 + boolean status = AccessibilityUtil.isAccessibilitySettingsOn(this, SERVICE_NAME); + if (!status) + { + accessibilityUtil.openSettingDialog(); + } + } + + + @Override + protected void onResume() + { + super.onResume(); + //判断服务状态 + boolean status = AccessibilityUtil.isAccessibilitySettingsOn(this, SERVICE_NAME); + status_tv.setText(status ? "开启" : "关闭"); + } + + @Override + public void onClick(View view) + { + if (view.getId() == R.id.open_service_btn) + { + accessibilityUtil.openSettingPage(); + } + } +} + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/BaseService.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/BaseService.java" new file mode 100644 index 0000000..2bb0f5a --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/BaseService.java" @@ -0,0 +1,89 @@ +package com.xingag.service; + +import android.accessibilityservice.AccessibilityService; +import android.accessibilityservice.AccessibilityServiceInfo; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; + + +import java.util.List; + +/*** + * 无障碍服务的基类 + */ + + +public class BaseService extends AccessibilityService +{ + + @SuppressLint("StaticFieldLeak") + private static BaseService mInstance = null; + + + public static BaseService getInstance() + { + if (mInstance == null) + { + mInstance = new BaseService(); + } + return mInstance; + } + + + @Override + public void onAccessibilityEvent(AccessibilityEvent event) + { + + } + + @Override + public void onInterrupt() + { + + } + + + /** + * 模拟输入 + * + * @param nodeInfo nodeInfo + * @param text text + */ + public void inputText(AccessibilityNodeInfo nodeInfo, String text) + { + ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + + Log.d("xag", "字符个数为:" + text.length()); + for (int i = 0; i < text.length(); i++) + { + String temp = text.substring(0, i + 1); + Log.e("xag", "输入一次,输入内容是:" + temp); + + //输入内容 + Bundle arguments = new Bundle(); + arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, temp); + nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); + + //下面可以控制输入的速度,这里设置间隔为0.1s + try + { + Thread.sleep(100); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + } + + +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/PreventService.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/PreventService.java" new file mode 100644 index 0000000..cabf382 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/service/PreventService.java" @@ -0,0 +1,131 @@ +package com.xingag.service; + +import android.accessibilityservice.AccessibilityService; +import android.annotation.TargetApi; +import android.content.Intent; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.Toast; + +import com.xingag.utils.AppUtil; + +import java.util.ArrayList; +import java.util.List; + +public class PreventService extends BaseService +{ + //所有的节点 + public static List nodes = new ArrayList<>(); + + private static final String CLASS_NAME_SNS_UPLOAD = "com.tencent.mm.plugin.sns.ui.SnsUploadUI"; + + /** + * 连接服务成功后回调该方法 + */ + @Override + protected void onServiceConnected() + { + super.onServiceConnected(); + //缓存中获取数据 + Toast.makeText(PreventService.this, "连接服务成功", + Toast.LENGTH_SHORT).show(); + + stopSelf(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) + { + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onAccessibilityEvent(AccessibilityEvent event) + { + //如果是朋友圈发布界面 + String className = event.getClassName().toString(); + + Log.d("xag", "className:" + className); + + if (TextUtils.equals(CLASS_NAME_SNS_UPLOAD, className)) + { + Log.e("xag", "朋友圈发布界面"); + + //获取剪切板的内容 + String content = AppUtil.getClipBoardContent(getApplicationContext()); + + if (!TextUtils.isEmpty(content)) + { + Log.d("xag", "剪切板内容是:" + content); + inputContent(event, content); + } else + { + Log.d("xag", "剪切板内容为空"); + } + } + + } + + + /*** + * 回复消息 + * @param event + */ + private void inputContent(AccessibilityEvent event, String content) + { + //获取输入框元素 + //方式一 +// AccessibilityNodeInfo chat_edit = findViewByID("com.tencent.mm:id/d41"); + + //方式二 + nodes.clear(); + AppUtil.getAllNodes(getRootInActiveWindow()); + AccessibilityNodeInfo chat_edit = findNodeInfoByClassName("android.widget.EditText"); + + //把文本输入到输入框内 + inputText(chat_edit, content); + } + + + /*** + * 通过类名查找元素 + * @param className + * @return + */ + public AccessibilityNodeInfo findNodeInfoByClassName(String className) + { + for (int i = 0; i < nodes.size(); i++) + { + //当前节点元素及classname + AccessibilityNodeInfo currentNode = nodes.get(i); + String tagClassName = currentNode.getClassName().toString(); + + Log.d("xag", "tagClassName:" + tagClassName); + if (TextUtils.equals(tagClassName, className)) + { + Log.d("xag", "元素找到了"); + return currentNode; + } + } + Log.d("xag", "元素没找到"); + return null; + } + + + @Override + public void onInterrupt() + { + Log.d("xag", "无障碍服务被打断"); + } + + + @Override + public void onDestroy() + { + super.onDestroy(); + Log.d("xag", "无障碍服务销毁"); + } +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AccessibilityUtil.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AccessibilityUtil.java" new file mode 100644 index 0000000..94c0378 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AccessibilityUtil.java" @@ -0,0 +1,141 @@ +package com.xingag.utils; + +import android.app.ActivityManager; +import android.app.AlertDialog; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.provider.Settings; +import android.text.TextUtils; + +import com.xingag.preventrubbishapp.R; + +import java.util.List; + +public class AccessibilityUtil +{ + private Context mContext; + private String locPackageName; + private String accessibilityClassAbsolutePath; + + /** + * 构造方法 + * + * @param mContext + * @param accessibilityClassAbsolutePath + */ + public AccessibilityUtil(Context mContext, String locPackageName, + String accessibilityClassAbsolutePath + ) + { + this.mContext = mContext; + this.locPackageName = locPackageName; + this.accessibilityClassAbsolutePath = accessibilityClassAbsolutePath; + } + + + /** + * 判断是否有辅助功能权限 + * + * @return 是否开启服务 + */ + public static boolean isAccessibilitySettingsOn(Context context, String className) + { + if (context == null) + { + return false; + } + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + // 获取正在运行的服务列表 + List runningServices = + activityManager.getRunningServices(300); + for (int i = 0; i < runningServices.size(); i++) + { + ComponentName service = runningServices.get(i).service; + if (service.getClassName().equals(className)) + { + return true; + } + } + return false; + } + + public boolean isAccessibilitySettingsOn() + { + boolean isAccessibilityOn = false; + try + { + int accessibilityEnabled = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED); + TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':'); + if (accessibilityEnabled == 1) + { + String settingValue = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + if (settingValue != null) + { + TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; + splitter.setString(settingValue); + while (splitter.hasNext()) + { + String accessabilityService = splitter.next(); + //辅助服务关键路径,格式如"com.corget/com.corget.service.UnAccessibilityService" + String service = locPackageName + "/" + accessibilityClassAbsolutePath; + if (accessabilityService.equalsIgnoreCase(service)) + { + isAccessibilityOn = true; + } + } + } + } + } catch (Settings.SettingNotFoundException e) + { + e.printStackTrace(); + } + return isAccessibilityOn; + } + + + public void openSettingDialog() + { + AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(mContext); + + mDialogBuilder.setIcon(R.mipmap.ic_launcher); + mDialogBuilder.setTitle("警告"); + mDialogBuilder.setMessage("防折叠服务没有开启,请先开启服务"); + mDialogBuilder.setCancelable(false); + mDialogBuilder.setPositiveButton("Sure", + new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int which) + { + dialog.dismiss(); + openSettingPage(); + } + }); + mDialogBuilder.setNegativeButton("Cancel", + new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int which) + { + dialog.dismiss(); + } + }); + mDialogBuilder.create().show(); + } + + /*** + * 打开设置界面 + */ + public void openSettingPage() + { + Intent startIntent = new Intent( + Settings.ACTION_ACCESSIBILITY_SETTINGS); + mContext.startActivity(startIntent); + mContext.sendBroadcast(new Intent() + .setAction("com.xingag.setting.dialog")); + } + + +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AppUtil.java" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AppUtil.java" new file mode 100644 index 0000000..74253f2 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/java/com/xingag/utils/AppUtil.java" @@ -0,0 +1,56 @@ +package com.xingag.utils; + +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.util.Log; +import android.view.accessibility.AccessibilityNodeInfo; + +import com.xingag.service.PreventService; + +import static android.content.Context.CLIPBOARD_SERVICE; + + +public class AppUtil +{ + + /*** + * 获取剪切板上的内容 + * @return + */ + public static String getClipBoardContent(Context context) + { + ClipboardManager cm = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE); + ClipData cd2 = cm.getPrimaryClip(); + String result = ""; + try + { + result = cd2.getItemAt(0).getText().toString(); + } catch (Exception e) + { + //pass + Log.d("xag", "产生异常了。。。。"); + } + return result; + } + + /*** + * 获取当前页面所有的元素 + * @param node + */ + public static void getAllNodes(AccessibilityNodeInfo node) + { + int count = node.getChildCount(); + + if (count == 0) + { + PreventService.nodes.add(node); + } else + { + for (int i = 0; i < count; i++) + { + getAllNodes(node.getChild(i)); + } + } + } +} diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/btn_bg.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/btn_bg.xml" new file mode 100644 index 0000000..1f6bdb7 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/btn_bg.xml" @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/ic_launcher_background.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/ic_launcher_background.xml" new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/drawable/ic_launcher_background.xml" @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/activity_main.xml" "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/activity_main.xml" new file mode 100644 index 0000000..143762a --- /dev/null +++ "b/\346\234\213\345\217\213\345\234\210\351\230\262\346\212\230\345\217\240/NoCollapseInput/app/src/main/res/layout/activity_main.xml" @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + +