From b4ab6fdbb87d5826c7783172b0968c1f2e1b2ed2 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Mon, 23 Jun 2025 15:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=AF=91=E6=8A=A5=E9=94=99=EF=BC=8C?= =?UTF-8?q?=E6=8E=92=E6=9F=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 81 + app/keystore/G10zUserDebug.keystore | Bin 0 -> 2554 bytes app/keystore/U1302.keystore | Bin 0 -> 2330 bytes app/keystore/aiud.keystore | Bin 0 -> 3982 bytes app/libs/qz_cubemdm_sdk_v1.0.0_1.8.jar | Bin 0 -> 23168 bytes app/src/main/AndroidManifest.xml | 2 +- .../ttutils/activity/AoleyunTestActivity.java | 662 -------- .../ttutils/activity/PackageActivity.java | 30 +- .../aoleyuntest/AoleyunTestActivity.java | 567 +++++++ .../aoleyuntest/AoleyunTestViewModel.java | 18 + .../ttutils/activity/main/MainAPresenter.java | 2 +- .../ttutils/activity/main/MainActivity.java | 43 +- .../activity/retrofit/RetrofitActivity.java | 14 +- .../activity/retrofit/RetrofitPresenter.java | 2 +- .../ttutils/activity/test/TestActivity.java | 28 +- .../ttstd/ttutils/base/BaseApplication.java | 6 + .../ttutils/base/BaseDataBindingActivity.java | 68 + .../com/ttstd/ttutils/base/BaseFragment.java | 122 +- .../ttutils/base/BaseTransparentActivity.java | 57 + .../ttutils/base/ImmerseBaseActivity.java | 52 - .../ttstd/ttutils/base/KotlinApplication.kt | 9 +- .../ttutils/base/mvp/BaseMvpActivity.java | 34 + .../ttstd/ttutils/base/mvp/BasePresenter.java | 7 + .../com/ttstd/ttutils/base/mvp/BaseView.java | 5 + .../ttutils/base/mvvm/BaseMvvmActivity.java | 54 + .../ttutils/base/mvvm/BaseViewModel.java | 71 + .../base/mvvm/ViewDataBindingCallback.java | 26 + .../base/mvvm/fragment/BaseMvvmFragment.java | 275 ++++ .../ttstd/ttutils/base/old/BaseActivity1.java | 128 -- .../BaseRxActivity.java} | 55 +- .../ttstd/ttutils/base/rx/BaseRxFragment.java | 123 ++ .../ttstd/ttutils/base/rx/BaseRxService.java | 63 + .../ttutils/disklrucache/CacheHelper.java | 2 +- .../ttutils/network/NetInterfaceManager.java | 2 +- .../interceptor/RepeatRequestInterceptor.java | 2 +- .../interceptor/RequestInterceptor.java | 2 +- .../ttstd/ttutils/receiver/BootReceiver.java | 2 +- .../ttutils/receiver/ShortcutReceiver.java | 2 +- .../ttutils/server/main/MainSPresenter.java | 2 +- .../ttutils/server/main/MainService.java | 2 +- .../ttstd/ttutils/utils/java/ApkUtils.java | 83 +- .../ttutils/utils/java/DevicesUtils.java | 19 + .../java/{JGYUtils.java => JgyUtils.java} | 30 +- .../ttutils/utils/java/LauncherUtils.java | 2 +- .../com/ttstd/ttutils/utils/java/TTUtils.java | 2 +- .../main/res/layout/activity_aoleyun_test.xml | 1454 +++++++++-------- build.gradle | 11 + niceimageview/build.gradle | 7 + viewlibrary/build.gradle | 7 + 49 files changed, 2516 insertions(+), 1719 deletions(-) create mode 100644 app/keystore/G10zUserDebug.keystore create mode 100644 app/keystore/U1302.keystore create mode 100644 app/keystore/aiud.keystore create mode 100644 app/libs/qz_cubemdm_sdk_v1.0.0_1.8.jar delete mode 100644 app/src/main/java/com/ttstd/ttutils/activity/AoleyunTestActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestViewModel.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/BaseDataBindingActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/BaseTransparentActivity.java delete mode 100644 app/src/main/java/com/ttstd/ttutils/base/ImmerseBaseActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvp/BaseMvpActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvp/BasePresenter.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvp/BaseView.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseMvvmActivity.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseViewModel.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvvm/ViewDataBindingCallback.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/mvvm/fragment/BaseMvvmFragment.java delete mode 100644 app/src/main/java/com/ttstd/ttutils/base/old/BaseActivity1.java rename app/src/main/java/com/ttstd/ttutils/base/{BaseActivity.java => rx/BaseRxActivity.java} (62%) create mode 100644 app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxFragment.java create mode 100644 app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxService.java rename app/src/main/java/com/ttstd/ttutils/utils/java/{JGYUtils.java => JgyUtils.java} (90%) diff --git a/app/build.gradle b/app/build.gradle index 7749e31..c6cedbf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -47,6 +47,11 @@ android { XG_ACCESS_ID : "1500026407", XG_ACCESS_KEY: "AQ6C6W1O19LT", ] + + dataBinding { + enabled true + } + } externalNativeBuild { @@ -261,9 +266,73 @@ android { v1SigningEnabled true v2SigningEnabled true } + + zhanruiG10Z { + storeFile file("keystore/zhanruiG10Z.keystore") + storePassword "123456" + keyAlias "zhanruiG10Z" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } + + G10ZUserDebug { + storeFile file("keystore/G10zUserDebug.keystore") + storePassword "123456" + keyAlias "G10zUserDebug" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } + + seewo { + storeFile file("keystore/aiud.keystore") + storePassword "s4HdJuphaiHhU7WY" + keyAlias "androidreleasekey" + keyPassword "JwUw2oV16rUjWLBC" + v1SigningEnabled true + v2SigningEnabled true + } + + U1302 { + storeFile file("keystore/U1302.keystore") + storePassword "123456" + keyAlias "u1302" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } } buildTypes { + QZ15Debug.initWith(debug) + QZ15Debug { + buildConfigField "String", "platform", '"QZA15"' + versionNameSuffix "-debug" + debuggable true + signingConfig signingConfigs.U1302 + } + + QZ15Release.initWith(release) + QZ15Release { + buildConfigField "String", "platform", '"QZA15"' + signingConfig signingConfigs.U1302 + } + + seewoDebug.initWith(debug) + seewoDebug { + versionNameSuffix "-debug" + debuggable true + signingConfig signingConfigs.seewo + buildConfigField "String", "platform", '"seewo"' + } + + seewoRelease.initWith(release) + seewoRelease { + signingConfig signingConfigs.seewo + buildConfigField "String", "platform", '"seewo"' + } + Huaruian8768Debug.initWith(debug) Huaruian8768Debug { versionNameSuffix "-debug" @@ -414,6 +483,14 @@ android { signingConfig signingConfigs.P20S } + zhanruiG10ZUserDebug.initWith(debug) + zhanruiG10ZUserDebug { + versionNameSuffix "-debug" + debuggable true + signingConfig signingConfigs.G10ZUserDebug + buildConfigField "String", "platform", '"ZR6016"' + } + zhanruiG10ZDebug.initWith(debug) zhanruiG10ZDebug { versionNameSuffix "-debug" @@ -516,6 +593,7 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) compileOnly files('libs/framework.jar') + compileOnly files('libs/qz_cubemdm_sdk_v1.0.0_1.8.jar') implementation project(':viewlibrary') implementation project(path: ':niceimageview') @@ -623,6 +701,8 @@ dependencies { // implementation 'com.github.zane618:NiceImageView:1.0.0' // 权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.github.getActivity:XXPermissions:12.3' + // 吐司框架:https://github.com/getActivity/Toaster + implementation 'com.github.getActivity:Toaster:12.6' //动态权限框架 implementation 'com.yanzhenjie:permission:2.0.3' //沉浸状态栏 @@ -637,6 +717,7 @@ dependencies { implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0' //网络监听 implementation 'com.github.tianma8023:NetDetector:v0.2.0' + } preBuild { diff --git a/app/keystore/G10zUserDebug.keystore b/app/keystore/G10zUserDebug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..6f8990db78f97af4778c77a26173a1be1099a196 GIT binary patch literal 2554 zcmd6o`8(9@9>?c9GiWfv*tfpJHTcz*a?_w{+*_kCTT&wah`_vgp*k7Wo10zC@g&pK|nHmA7r6tl%faVfFzU+0O%laGJO6^81GwPlgKr!K z#}QRB*tu-mZ8o>5TChz-B3}qkv&ikR8R-Dx&7pP)YH?H^uX;wYlR{Nj9n{d#ug2nO zlE{_!_~cQ?f84V;d9dWXj@g9)Uh^xd37;KU@Ya*Pc9)(!v!b#=xOwR>zuRxq`Gb%% zy*=j0`o>L`nWp*Bdu&d@M~UgG0ZEFcvfZR^j9K(XNW2prr!2XRagE!)R-V-6yjdn! zTiAW(Tx2)@RPb=&oab}tr1lOiVbYyl%1k1D%j}ycWuKt6?U=XcX1^LEXwPos_@u!nJcD{Og65`0Y%@n7t66sA@)S0sWAbg+E#&H zoV~fPaiAQ)8o4u3w=lvA(;yLiqsC5sv!&Yb5qyhMvim!uYek>&mN<^N5>F1zMl`zU zKij!eQsiMu$0=LNT>90+ThowWU-kv*Z7rSo7CHOlWL&s(S}|?%aV$n_t$NmN^+{V; zXC-?e!*8(#)JwzYal^f9h~@YigAU0)?(2ceD`g*4o1=9^ z1mKYBa?YSU@xXDr2CI2&YvAEkaOK6`GO57At(&rnw!(Z{jf5@pe9xD&uJ?xJ_|aHf zgvfl@IDS6Kom2vC`pnmcV>wmREBo(ObZ|}Dg18<>)CuQWUZNvrL6~X<HPu6Olt7>i_hb3 zy?b~CD_2zw-R}{g9O@BNyarko9Df>aF;t%9vA^Ci&Gq#(mz@6Oinq5^u{GO`u z50{|9_yhw2>MT9i@yEtang+`~yjfOOVSz#|imepR(z?#b$zrkgfjYNxgNb0Wq|jV^ zP{T%sd*+E;L+Bn48TY%6rCBW7u-*0CbwJNJLo8-bQ=kie-hI`YyLxlte!{Cpn*BHR zKkbpu0;>QjLm=>yBRebt$*_bR7!-g)5s-?saLQZrzV9HC9wAB5qiiDq0Dk0}q!bw@ z5J3+!gVUp+W+pNyknLx348?ff!Nc{Mw~v>rgA5nQ@e?wjkOtoVUVaX)UTAYyLZA%m zk>MV3MihgFmy?gTtJA*;)Bh0Ie~Ac){!a}EfD7gDue-RvR;;79Cn&^?1eHK}83kEc zc~AkgseXf^@Ipkx4mWZs}lDnZ&P34AIhEOiz@ zycG4AJ$)F;(QNfb6cyT+DjP`p1W{*b9W4^x(PI!iDj}wNC)`7#;v&jlG(X8j1P>nr z@aIAp`}pWO{kAe-!S*0E!EZn_eA4}?WR$!j@1@0UNj+)Ab9i}_Eqlqsrs6<#7s$)S zgBeeY`jPpMT)TPph|IG^@&yyi)h{Y9z_S=~UHAJ=o2IV!DGnLzGOEVK%jeb7^f%>* zGz>9A^>LKxQ)ZKWj>%E&K_OAYR|{$x`OCY#rV=QlB@=Uo2G`uf3pux{winSzL_t$! zmN4#2%raX-j0(*%F?`K<{!C>4Ws^R;rUYW!N+$*i!174@AZZsAJQ9u|3!DqiVK|*r zF`ij_YFp4Js&%d<9!+UZ14&&!_eJ5PCXiGg{(sLrBBke(9{f#}K>p>&G5>4@1*ZdH z0C4!LJdXa~kvss%W${ZjA5>2Gemd@{lTGDUPE+MKmOF$$Ssy}_F-u=La4~p zybZilW(d`vrt~U?EEbk0EbjhDTF@;%X;HAe#aAXcr}6A+|FbRa(si*1*|lCl9Iv6) z#Fr$c-i`5nx>W8yvD?<$l}JbOHpX^X32*sgCYe7)IKUdu@3ZIfIec`~q8Un+4~dn% zJAH1esN76$d2b=6&P{LpA{zTKrJWWxSfiW-`&f#7uOo^zT&PP$rL==Amz1XZ1|nyt hrz1@6)|6LV=E*5*krjm}=Vm{C3J4iV^xmf8{|SUTJ6Zq$ literal 0 HcmV?d00001 diff --git a/app/keystore/U1302.keystore b/app/keystore/U1302.keystore new file mode 100644 index 0000000000000000000000000000000000000000..2648503879864b98f89cb55b7d8e90921555f431 GIT binary patch literal 2330 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 literal 0 HcmV?d00001 diff --git a/app/libs/qz_cubemdm_sdk_v1.0.0_1.8.jar b/app/libs/qz_cubemdm_sdk_v1.0.0_1.8.jar new file mode 100644 index 0000000000000000000000000000000000000000..58c1322ea7599ea270a133582796daa634365878 GIT binary patch literal 23168 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 literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a554630..a278b60 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,7 +59,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/ImmerseTheme"> - + diff --git a/app/src/main/java/com/ttstd/ttutils/activity/AoleyunTestActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/AoleyunTestActivity.java deleted file mode 100644 index af7af11..0000000 --- a/app/src/main/java/com/ttstd/ttutils/activity/AoleyunTestActivity.java +++ /dev/null @@ -1,662 +0,0 @@ -package com.ttstd.ttutils.activity; - -import android.app.PendingIntent; -import android.app.StatusBarManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.media.AudioManager; -import android.net.Uri; -import android.provider.Settings; -import android.util.Log; -import android.view.KeyEvent; -import android.view.View; -import android.view.inputmethod.InputMethodInfo; -import android.view.inputmethod.InputMethodManager; -import android.widget.Button; -import android.widget.EditText; - -import androidx.core.content.pm.ShortcutInfoCompat; -import androidx.core.content.pm.ShortcutManagerCompat; -import androidx.core.graphics.drawable.IconCompat; - -import com.ttstd.ttutils.BuildConfig; -import com.ttstd.ttutils.R; -import com.ttstd.ttutils.activity.main.MainActivity; -import com.ttstd.ttutils.base.BaseActivity; -import com.ttstd.ttutils.receiver.ShortcutReceiver; -import com.ttstd.ttutils.utils.java.JGYUtils; -import com.ttstd.ttutils.utils.java.ToastUtil; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class AoleyunTestActivity extends BaseActivity { - private static final String TAG = AoleyunTestActivity.class.getSimpleName(); - - @BindView(R.id.bt_settings) - Button bt_settings; - @BindView(R.id.bt_usb) - Button bt_usb; - @BindView(R.id.bt_usb_statu) - Button bt_usb_statu; - @BindView(R.id.bt_usb_charge) - Button bt_usb_charge; - @BindView(R.id.bt_usb_mtp) - Button bt_usb_mtp; - @BindView(R.id.bt_usb_midi) - Button bt_usb_midi; - - @BindView(R.id.bt_desktop) - Button bt_desktop; - @BindView(R.id.bt_desktop_statu) - Button bt_desktop_statu; - @BindView(R.id.bt_desktop_launcher) - Button bt_desktop_launcher; - @BindView(R.id.bt_desktop_dop2) - Button bt_desktop_dop2; - @BindView(R.id.bt_desktop_aoleyun_os) - Button bt_desktop_aoleyun_os; - @BindView(R.id.bt_desktop_aoleyun) - Button bt_desktop_aoleyun; - - @BindView(R.id.bt_sd) - Button bt_sd; - @BindView(R.id.bt_sd_statu) - Button bt_sd_statu; - @BindView(R.id.bt_sd_on) - Button bt_sd_on; - @BindView(R.id.bt_sd_off) - Button bt_sd_off; - - @BindView(R.id.bt_developer) - Button bt_developer; - @BindView(R.id.bt_developer_statu) - Button bt_developer_statu; - @BindView(R.id.bt_developer_on) - Button bt_developer_on; - @BindView(R.id.bt_developer_off) - Button bt_developer_off; - - @BindView(R.id.bt_navigation) - Button bt_navigation; - @BindView(R.id.bt_navigation_statu) - Button bt_navigation_statu; - @BindView(R.id.bt_navigation_on) - Button bt_navigation_on; - @BindView(R.id.bt_navigation_off) - Button bt_navigation_off; - - @BindView(R.id.bt_statusbar) - Button bt_statusbar; - @BindView(R.id.bt_statusbar_back) - Button bt_statusbar_back; - @BindView(R.id.bt_statusbar_home) - Button bt_statusbar_home; - @BindView(R.id.bt_statusbar_recent) - Button bt_statusbar_recent; - - @BindView(R.id.bt_status) - Button bt_status; - @BindView(R.id.bt_status_statu) - Button bt_status_statu; - @BindView(R.id.bt_status_on) - Button bt_status_on; - @BindView(R.id.bt_status_off) - Button bt_status_off; - - @BindView(R.id.bt_statusbar_collapse) - Button bt_statusbar_collapse; - @BindView(R.id.bt_collapse_statu) - Button bt_collapse_statu; - @BindView(R.id.bt_collapse_on) - Button bt_collapse_on; - @BindView(R.id.bt_collapse_off) - Button bt_collapse_off; - - @BindView(R.id.bt_hotspot) - Button bt_hotspot; - @BindView(R.id.bt_hotspot_statu) - Button bt_hotspot_statu; - @BindView(R.id.bt_hotspot_on) - Button bt_hotspot_on; - @BindView(R.id.bt_hotspot_off) - Button bt_hotspot_off; - - @BindView(R.id.bt_bht) - Button bt_bht; - @BindView(R.id.bt_bht_statu) - Button bt_bht_statu; - @BindView(R.id.bt_bht_on) - Button bt_bht_on; - @BindView(R.id.bt_bht_off) - Button bt_bht_off; - - @BindView(R.id.bt_bt_on) - Button bt_bt_on; - @BindView(R.id.bt_bt_off) - Button bt_bt_off; - @BindView(R.id.bt_bhtvideo_on) - Button bt_bhtvideo_on; - @BindView(R.id.bt_bhtvideo_off) - Button bt_bhtvideo_off; - - @BindView(R.id.bt_reset) - Button bt_reset; - @BindView(R.id.bt_reset_statu) - Button bt_reset_statu; - @BindView(R.id.bt_reset_on) - Button bt_reset_on; - @BindView(R.id.bt_reset_off) - Button bt_reset_off; - - @BindView(R.id.bt_input) - Button bt_input; - @BindView(R.id.bt_input_statu) - EditText bt_input_statu; - @BindView(R.id.bt_input_on) - Button bt_input_on; - @BindView(R.id.bt_input_off) - Button bt_input_off; - - @BindView(R.id.bt_browser) - Button bt_browser; - @BindView(R.id.bt_browser_statu) - Button bt_browser_statu; - @BindView(R.id.bt_browser_on) - Button bt_browser_on; - @BindView(R.id.bt_browser_off) - Button bt_browser_off; - - @BindView(R.id.bt_app_net) - Button bt_app_net; - @BindView(R.id.bt_app_statu) - Button bt_app_statu; - @BindView(R.id.bt_app_on) - Button bt_app_on; - @BindView(R.id.bt_app_off) - Button bt_app_off; - - @BindView(R.id.bt_night_on) - Button bt_night_on; - @BindView(R.id.bt_night_off) - Button bt_night_off; - @BindView(R.id.bt_read_on) - Button bt_read_on; - @BindView(R.id.bt_read_off) - Button bt_read_off; - - @BindView(R.id.bt_add_shortcut) - Button bt_add_shortcut; - - public static final String NIGHT_DISPLAY_ENABLED = "NIGHT_DISPLAY_ENABLED"; - public static final String NIGHT_DISPLAY_DISABLED = "NIGHT_DISPLAY_DISABLED"; - public static final String READ_MODEL_ENABLED = "READ_MODEL_ENABLED"; - public static final String READ_MODEL_DISABLED = "READ_MODEL_DISABLED"; - - StatusBarManager mStatusBarManager; - - @Override - public int getLayoutId() { - return R.layout.activity_aoleyun_test; - } - - @Override - public void initView() { - ButterKnife.bind(this); - - PackageManager pm = getPackageManager(); - try { - Log.e(TAG, "initView: " + pm.getApplicationEnabledSetting("com.teclast.update")); - pm.setApplicationEnabledSetting("com.teclast.update", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); - // pm.getApplicationEnabledSetting("com.teclast.update") == PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - } catch (Exception e) { - e.printStackTrace(); - } - - try { - Intent intent = new Intent(); - intent.setClassName("com.teclast.update", "com.teclast.update. GoogleOtaClient"); - startActivity(intent); - } catch (Exception e) { - e.printStackTrace(); - } - - if (BuildConfig.DEBUG) { -// ApkUtils.openApp(this, "com.android.settings"); - //静音 - AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); - int ringMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_RING); - audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0); - int musicMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_MUSIC); - int voiceMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_VOICE_CALL); - audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0); - audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量 - } - mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); - - init(); - - } - - @Override - public void initData() { - - } - - private void init() { - bt_settings.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(Settings.ACTION_SETTINGS)); -// startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS)); - } - }); - bt_usb.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Settings.System.putString(getContentResolver(), "app_view_click_disabled", - "com.android.gallery3d:12345,78901;com.android.settings:9876543,12346"); - } - }); - bt_usb_statu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - ToastUtil.show("app_view_click_disabled"); - } - }); - bt_usb_charge.setOnClickListener(view -> { - Log.e(TAG, "bt_usb_charge: " + view.getId()); - Intent usbIntent = new Intent("aole_action_usb_usb_charge"); - if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MTK8515Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.TeclastP20sPlatform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.AH6016Platform - ) { - usbIntent.setPackage("com.android.settings"); - } - sendBroadcast(usbIntent); - }); - bt_usb_mtp.setOnClickListener(view -> { - Log.e(TAG, "bt_usb_charge: " + view.getId()); - Intent usbIntent = new Intent("aole_action_usb_usb_mtp"); - if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MTK8515Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.TeclastP20sPlatform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.AH6016Platform - ) { - usbIntent.setPackage("com.android.settings"); - } - sendBroadcast(usbIntent); - }); - bt_usb_midi.setOnClickListener(view -> { - Log.e(TAG, "bt_usb_charge: " + view.getId()); - Intent usbIntent = new Intent("aole_action_usb_usb_midi"); - if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MTK8515Platform - || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.TeclastP20sPlatform - ) { - usbIntent.setPackage("com.android.settings"); - } - sendBroadcast(usbIntent); - }); - - bt_desktop_statu.setOnClickListener(view -> gotoLauncher()); - bt_desktop_launcher.setOnClickListener(view -> { - Intent intent = new Intent("setDefaultLauncher"); - intent.putExtra("package", "com.android.launcher3"); - intent.putExtra("className", "com.android.launcher3.Launcher"); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - bt_desktop_dop2.setOnClickListener(view -> { - Intent intent = new Intent("setDefaultLauncher"); - intent.putExtra("package", "com.aoleyunos.dop2"); - intent.putExtra("className", "com.aoleyunos.dop2.activity.main.MainActivity"); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - bt_desktop_aoleyun_os.setOnClickListener(view -> { - Intent intent = new Intent("setDefaultLauncher"); - intent.putExtra("package", "com.android.uiuios"); - intent.putExtra("className", "com.android.uiuios.Launcher"); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - bt_desktop_aoleyun.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent("setDefaultLauncher"); - intent.putExtra("package", "com.aoleyun.os"); - intent.putExtra("className", "com.aoleyun.os.Launcher"); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - } - }); - - - bt_sd_statu.setOnClickListener(view -> { - int aole_sdcard_forbid_on = Settings.System.getInt(getContentResolver(), "aole_sdcard_forbid_on", 0); - bt_sd_statu.setText("状态:" + aole_sdcard_forbid_on); - }); - bt_sd_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 0)); - bt_sd_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 1)); - - bt_developer_statu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - int aole_Developeroptions = Settings.System.getInt(getContentResolver(), "aole_Developeroptions", 0); - Log.e(TAG, "onClick: aole_Developeroptions = " + aole_Developeroptions); - bt_developer_statu.setText("状态:" + aole_Developeroptions); - } - }); - bt_developer_on.setOnClickListener(view -> setDeveloperOptions(0)); - bt_developer_off.setOnClickListener(view -> setDeveloperOptions(1)); - - bt_navigation_statu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); - startActivity(intent); - } - }); - bt_navigation_on.setOnClickListener(view -> { - Intent navIntent = new Intent("aole_show_NavigationBar"); -// Intent navIntent = new Intent("aole_show_NavigationBar").setPackage("com.android.systemui"); - sendBroadcast(navIntent); - }); - bt_navigation_off.setOnClickListener(view -> { - Intent navIntent = new Intent("aole_hide_NavigationBar"); -// Intent navIntent = new Intent("aole_hide_NavigationBar").setPackage("com.android.systemui"); - sendBroadcast(navIntent); - }); - - bt_statusbar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME); -// mStatusBarManager.disable(StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME); - mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);//显示隐藏的虚拟按键 - } - }); - bt_statusbar_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mStatusBarManager.disable(StatusBarManager.DISABLE_BACK);//隐藏返回键 - } - }); - bt_statusbar_home.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键 - } - }); - bt_statusbar_recent.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT);//隐藏recent键 - } - }); - - - bt_status_on.setOnClickListener(view -> { - Intent navIntent = new Intent("aole_show_statusBar"); -// Intent navIntent = new Intent("aole_show_statusBar").setPackage("com.android.systemui"); - sendBroadcast(navIntent); - }); - bt_status_off.setOnClickListener(view -> { - Intent navIntent = new Intent("aole_hide_statusBar"); -// Intent navIntent = new Intent("aole_hide_statusBar").setPackage("com.android.systemui"); - sendBroadcast(navIntent); - }); - - bt_collapse_on.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { -// StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); -// mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND); -// mStatusBarManager.disable(StatusBarManager.DISABLE2_NOTIFICATION_SHADE); - Settings.Global.putInt(getContentResolver(), "PULLDOWN_MENU_ENABLED", 1); - } - }); - - bt_collapse_off.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Settings.Global.putInt(getContentResolver(), "PULLDOWN_MENU_ENABLED", 0); -// StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); -// mStatusBarManager.disable(StatusBarManager.DISABLE_NONE); -// mStatusBarManager.disable(StatusBarManager.DISABLE2_NONE); - } - }); - - bt_hotspot_on.setOnClickListener(view -> { - Settings.System.putInt(getContentResolver(), "aole_hotspot_forbid_on", 0); - }); - bt_hotspot_off.setOnClickListener(view -> { - Settings.System.putInt(getContentResolver(), "aole_hotspot_forbid_on", 1); - Intent intent = new Intent("aole_hotspot_close"); - intent.setPackage("com.android.settings"); - sendStickyBroadcast(intent); - }); - - bt_bht_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bht_forbid_on", 0)); - bt_bht_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bht_forbid_on", 1)); - bt_bt_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bt_forbid_on", 0)); - bt_bt_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bt_forbid_on", 1)); - bt_bhtvideo_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bhtvideo_forbid_on", 0)); - bt_bhtvideo_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_bhtvideo_forbid_on", 1)); - - bt_reset_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_restore_forbid_on", 0)); - bt_reset_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_restore_forbid_on", 1)); - - bt_input.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); - List InputMethods = imeManager.getEnabledInputMethodList(); - Log.e(TAG, "onClick: " + InputMethods); - } - }); - bt_input_on.setOnClickListener(view -> { - Log.e(TAG, "init: " + getInputMethodId("com.baidu.input")); - Intent intent = new Intent("setDefaultInputMethod"); - intent.putExtra("package", getInputMethodId("com.baidu.input")); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - bt_input_off.setOnClickListener(view -> { - Log.e(TAG, "init: " + getInputMethodId("com.sohu.inputmethod.sogou")); - Intent intent = new Intent("setDefaultInputMethod"); - intent.putExtra("package", getInputMethodId("com.sohu.inputmethod.sogou")); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - - - bt_browser_statu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(); - intent.setAction("android.intent.action.VIEW"); - Uri content_url = Uri.parse("https://www.baidu.com/"); - intent.setData(content_url); - startActivity(intent); - } - }); - bt_browser_on.setOnClickListener(view -> { - Intent intent = new Intent("setDefaultBrowser"); - intent.putExtra("package", ("com.quark.browser")); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - bt_browser_off.setOnClickListener(view -> { - Intent intent = new Intent("setDefaultBrowser"); - intent.putExtra("package", ("com.android.chrome")); - intent.setPackage("com.android.settings"); - sendBroadcast(intent); - }); - - bt_app_net.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - } - }); - bt_app_statu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.e("aole_network_disallow", "onClick: " + Settings.System.getString(getContentResolver(), "aole_network_disallow")); - } - }); - bt_app_on.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Settings.System.putString(getContentResolver(), "aole_network_disallow", "com.quark.browser"); - } - }); - bt_app_off.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Settings.System.putString(getContentResolver(), "aole_network_disallow", ""); - } - }); - bt_night_on.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sendBroadcast(new Intent(NIGHT_DISPLAY_ENABLED)); - } - }); - bt_night_off.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sendBroadcast(new Intent(NIGHT_DISPLAY_DISABLED)); - } - }); - bt_read_on.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sendBroadcast(new Intent(READ_MODEL_ENABLED)); - } - }); - bt_read_off.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sendBroadcast(new Intent(READ_MODEL_DISABLED)); - } - }); - bt_add_shortcut.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { -// addShortcut(AoleyunTestActivity.this, new Intent( -// AoleyunTestActivity.this, MainActivity.class), "TTUtilsTest", false, -// ((BitmapDrawable) getResources().getDrawable(R.drawable.ic_launcher)).getBitmap()); - addShortCutCompact(AoleyunTestActivity.this); - } - }); - } - - - private static final String ACTION_INSTALL_SHORTCUT = - "com.android.launcher.action.INSTALL_SHORTCUT"; - - /** - * 添加快捷方式 - * - * @param context context - * @param actionIntent 要启动的Intent - * @param name name - */ - public void addShortcut(Context context, Intent actionIntent, String name, boolean allowRepeat, Bitmap iconBitmap) { - Intent addShortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT); - // 是否允许重复创建 - addShortcutIntent.putExtra("duplicate", allowRepeat); - // 快捷方式的标题 - addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); - // 快捷方式的图标 - addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconBitmap); - // 快捷方式的动作 - addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, actionIntent); - context.sendBroadcast(addShortcutIntent); - } - - public static void addShortCutCompact(Context context) { - if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { - Intent shortcutInfoIntent = new Intent(context, MainActivity.class); - shortcutInfoIntent.setAction(Intent.ACTION_VIEW); //action必须设置,不然报错 - ShortcutInfoCompat info = new ShortcutInfoCompat.Builder(context, "id") - .setIcon(IconCompat.createWithResource(context, R.mipmap.ic_launcher)) - .setShortLabel("name") - .setIntent(shortcutInfoIntent) - .build(); - //当添加快捷方式的确认弹框弹出来时,将被回调,自定义Receiver - PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(context, 0, new Intent(context, ShortcutReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT); - ShortcutManagerCompat.requestPinShortcut(context, info, - shortcutCallbackIntent.getIntentSender()); - } - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { - lazyExit(); - return true; - } - return super.onKeyDown(keyCode, event); - } - - private long mPreClickTime; - - private void lazyExit() { - if (System.currentTimeMillis() - mPreClickTime > 5000) { - ToastUtil.show("再按一次,退出"); - mPreClickTime = System.currentTimeMillis(); - } else { - finish(); - } - } - - private void gotoLauncher() { - Intent i = new Intent(Intent.ACTION_MAIN); - i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //android123提示如果是服务里调用,必须加入new task标识 - i.addCategory(Intent.CATEGORY_HOME); - startActivity(i); - } - - private String getInputMethodId(String pkg) { - InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); - List InputMethods = imeManager.getInputMethodList(); - Map inputMap = new HashMap<>(); - for (InputMethodInfo inputMethodInfo : InputMethods) { - inputMap.put(inputMethodInfo.getPackageName(), inputMethodInfo.getId()); - } - String id = inputMap.get(pkg); - Log.e(TAG, "getInputMethodId: " + id); - return id; - } - - public void setDeveloperOptions(int state) { - Settings.System.putInt(getContentResolver(), "aole_Developeroptions", state); - - Log.e(TAG, "setDeveloperOptions: " + state); - Settings.System.putInt(getContentResolver(), "aole_Developeroptions", state); - int old_dev_enabled = Settings.Global.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0); - Log.e(TAG, "setDeveloperOptions: old_dev_enabled = " + old_dev_enabled); - int new_state = (state == 1 ? 0 : 1); - if (old_dev_enabled != new_state) { - Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, new_state); - Settings.Global.putInt(getContentResolver(), Settings.Global.ADB_ENABLED, new_state); - } - if (state == 1) { -// Intent intent = new Intent(); -// intent.setAction("qch_developeroptions_close"); -// intent.setPackage(JGYActions.ANDROID_SETTINGS_PACKAGE_NAME); -// sendBroadcast(intent); - Log.e(TAG, "setDeveloperOptions: " + "关闭开发者模式"); - } else { - Log.e(TAG, "setDeveloperOptions: " + "打开开发者模式"); - } - } -} diff --git a/app/src/main/java/com/ttstd/ttutils/activity/PackageActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/PackageActivity.java index cea6814..0311678 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/PackageActivity.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/PackageActivity.java @@ -1,21 +1,35 @@ package com.ttstd.ttutils.activity; -import androidx.appcompat.app.AppCompatActivity; - import android.content.Intent; import android.content.IntentFilter; -import android.os.Bundle; -import com.ttstd.ttutils.receiver.PackageReceiver; import com.ttstd.ttutils.R; +import com.ttstd.ttutils.base.mvvm.BaseMvvmActivity; +import com.ttstd.ttutils.receiver.PackageReceiver; -public class PackageActivity extends AppCompatActivity { +public class PackageActivity extends BaseMvvmActivity { private PackageReceiver packageReceiver; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_package); + protected int getLayoutId() { + return R.layout.activity_package; + } + + @Override + protected void initDataBinding() { + + } + + @Override + protected void initView() { +// mViewModel.setCtx(this); +// mViewModel.setVDBinding(mViewDataBinding); +// mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initData() { register(); } diff --git a/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestActivity.java new file mode 100644 index 0000000..4351970 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestActivity.java @@ -0,0 +1,567 @@ +package com.ttstd.ttutils.activity.aoleyuntest; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.StatusBarManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.media.AudioManager; +import android.net.Uri; +import android.os.Build; +import android.provider.Settings; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.drawable.IconCompat; + +import com.ttstd.ttutils.BuildConfig; +import com.ttstd.ttutils.R; +import com.ttstd.ttutils.activity.main.MainActivity; +import com.ttstd.ttutils.base.mvvm.BaseMvvmActivity; +import com.ttstd.ttutils.databinding.ActivityAoleyunTestBinding; +import com.ttstd.ttutils.receiver.ShortcutReceiver; +import com.ttstd.ttutils.utils.java.ApkUtils; +import com.ttstd.ttutils.utils.java.JgyUtils; +import com.ttstd.ttutils.utils.java.ToastUtil; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class AoleyunTestActivity extends BaseMvvmActivity { + private static final String TAG = "AoleyunTestActivity"; + + public static final String NIGHT_DISPLAY_ENABLED = "NIGHT_DISPLAY_ENABLED"; + public static final String NIGHT_DISPLAY_DISABLED = "NIGHT_DISPLAY_DISABLED"; + public static final String READ_MODEL_ENABLED = "READ_MODEL_ENABLED"; + public static final String READ_MODEL_DISABLED = "READ_MODEL_DISABLED"; + + StatusBarManager mStatusBarManager; + + @Override + public int getLayoutId() { + return R.layout.activity_aoleyun_test; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + public void initView() { + PackageManager pm = getPackageManager(); + try { + Log.e(TAG, "initView: " + pm.getApplicationEnabledSetting("com.teclast.update")); + pm.setApplicationEnabledSetting("com.teclast.update", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); + // pm.getApplicationEnabledSetting("com.teclast.update") == PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + } catch (Exception e) { + e.printStackTrace(); + } + + try { + Intent intent = new Intent(); + intent.setClassName("com.teclast.update", "com.teclast.update. GoogleOtaClient"); + startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + } + + if (BuildConfig.DEBUG) { +// ApkUtils.openApp(this, "com.android.settings"); + //静音 + AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + int ringMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_RING); + audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0); + int musicMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_MUSIC); + int voiceMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_VOICE_CALL); + audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0); + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量 + } + mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); + notificationManager = NotificationManagerCompat.from(this); + + createNotificationChannel(); + } + + @Override + public void initData() { + + } + + + private static final String CHANNEL_ID = "CHANNEL_ID"; + private static final String CHANNEL_NAME = "应用中心"; + private static final String CHANNEL_DESCRIPTION = "应用中心通知"; + private NotificationManagerCompat notificationManager; + private int NotificationID = 7897; + + + private void createNotificationChannel() { + // Create the NotificationChannel, but only on API 26+ because + // the NotificationChannel class is new and not in the support library + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); + channel.setDescription(CHANNEL_DESCRIPTION); + channel.setSound(null, null); + // Register the channel with the system; you can't change the importance + // or other notification behaviors after this + NotificationManager notificationManager = getSystemService(NotificationManager.class); + if (notificationManager != null) { + notificationManager.createNotificationChannel(channel); + } + } + } + + private void sendSimpleNotification() { + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) + .setSmallIcon(R.mipmap.ic_launcher) + .setContentTitle("应用中心正在运行") +// .setContentText("测试内容") +// .setAutoCancel(false) + .setShowWhen(false) +// .setOngoing(true) + .setOnlyAlertOnce(true) + .setPriority(NotificationCompat.PRIORITY_MIN); + // notificationId is a unique int for each notification that you must define + notificationManager.notify(NotificationID, builder.build()); + } + + private static final String ACTION_INSTALL_SHORTCUT = + "com.android.launcher.action.INSTALL_SHORTCUT"; + + /** + * 添加快捷方式 + * + * @param context context + * @param actionIntent 要启动的Intent + * @param name name + */ + public void addShortcut(Context context, Intent actionIntent, String name, boolean allowRepeat, Bitmap iconBitmap) { + Intent addShortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT); + // 是否允许重复创建 + addShortcutIntent.putExtra("duplicate", allowRepeat); + // 快捷方式的标题 + addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); + // 快捷方式的图标 + addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconBitmap); + // 快捷方式的动作 + addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, actionIntent); + context.sendBroadcast(addShortcutIntent); + } + + public static void addShortCutCompact(Context context) { + if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { + Intent shortcutInfoIntent = new Intent(context, MainActivity.class); + shortcutInfoIntent.setAction(Intent.ACTION_VIEW); //action必须设置,不然报错 + ShortcutInfoCompat info = new ShortcutInfoCompat.Builder(context, "id") + .setIcon(IconCompat.createWithResource(context, R.mipmap.ic_launcher)) + .setShortLabel("name") + .setIntent(shortcutInfoIntent) + .build(); + //当添加快捷方式的确认弹框弹出来时,将被回调,自定义Receiver + PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(context, 0, new Intent(context, ShortcutReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT); + ShortcutManagerCompat.requestPinShortcut(context, info, + shortcutCallbackIntent.getIntentSender()); + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { + lazyExit(); + return true; + } + return super.onKeyDown(keyCode, event); + } + + private long mPreClickTime; + + private void lazyExit() { + if (System.currentTimeMillis() - mPreClickTime > 5000) { + ToastUtil.show("再按一次,退出"); + mPreClickTime = System.currentTimeMillis(); + } else { + finish(); + } + } + + private void gotoLauncher() { + Intent i = new Intent(Intent.ACTION_MAIN); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //android123提示如果是服务里调用,必须加入new task标识 + i.addCategory(Intent.CATEGORY_HOME); + startActivity(i); + } + + private String getInputMethodId(String pkg) { + InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); + List InputMethods = imeManager.getInputMethodList(); + Map inputMap = new HashMap<>(); + for (InputMethodInfo inputMethodInfo : InputMethods) { + inputMap.put(inputMethodInfo.getPackageName(), inputMethodInfo.getId()); + } + String id = inputMap.get(pkg); + Log.e(TAG, "getInputMethodId: " + id); + return id; + } + + public void setDeveloperOptions(int state) { + Settings.System.putInt(getContentResolver(), "aole_Developeroptions", state); + + Log.e(TAG, "setDeveloperOptions: " + state); + Settings.System.putInt(getContentResolver(), "aole_Developeroptions", state); + int old_dev_enabled = Settings.Global.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0); + Log.e(TAG, "setDeveloperOptions: old_dev_enabled = " + old_dev_enabled); + int new_state = (state == 1 ? 0 : 1); + if (old_dev_enabled != new_state) { + Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, new_state); + Settings.Global.putInt(getContentResolver(), Settings.Global.ADB_ENABLED, new_state); + } + if (state == 1) { +// Intent intent = new Intent(); +// intent.setAction("qch_developeroptions_close"); +// intent.setPackage(JGYActions.ANDROID_SETTINGS_PACKAGE_NAME); +// sendBroadcast(intent); + Log.e(TAG, "setDeveloperOptions: " + "关闭开发者模式"); + } else { + Log.e(TAG, "setDeveloperOptions: " + "打开开发者模式"); + } + } + + public class BtnClick { + public void openSettings(View view) { + startActivity(new Intent(Settings.ACTION_SETTINGS)); +// startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS)); + } + + public void setUsbSettings(View view) { + Settings.System.putString(getContentResolver(), "app_view_click_disabled", + "com.android.gallery3d:12345,78901;com.android.settings:9876543,12346"); + } + + public void getUsbSettings(View view) { + String app_view_click_disabled = Settings.System.getString(getContentResolver(), "app_view_click_disabled"); + ToastUtil.show(app_view_click_disabled); + } + + public void setUsbCharge(View view) { + Log.e(TAG, "bt_usb_charge: " + view.getId()); + Intent usbIntent = new Intent("aole_action_usb_usb_charge"); + if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MTK8515Platform + || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.TeclastP20sPlatform + || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform + ) { + usbIntent.setPackage("com.android.settings"); + } + sendBroadcast(usbIntent); + } + + public void setUsbMtp(View view) { + Log.e(TAG, "bt_usb_charge: " + view.getId()); + Intent usbIntent = new Intent("aole_action_usb_usb_mtp"); + if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MTK8515Platform + || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.TeclastP20sPlatform + || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AH6016Platform + ) { + usbIntent.setPackage("com.android.settings"); + } + sendBroadcast(usbIntent); + } + + public void setUsbMidi(View view) { + Log.e(TAG, "bt_usb_charge: " + view.getId()); + Intent usbIntent = new Intent("aole_action_usb_usb_midi"); + if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MTK8515Platform + || JgyUtils.getInstance().checkAppPlatform() == JgyUtils.TeclastP20sPlatform + ) { + usbIntent.setPackage("com.android.settings"); + } + sendBroadcast(usbIntent); + } + + public void goLauncher(View view) { + gotoLauncher(); + } + + public void setDefaultLauncher3(View view) { + Intent intent = new Intent("setDefaultLauncher"); + intent.putExtra("package", "com.android.launcher3"); + intent.putExtra("className", "com.android.launcher3.Launcher"); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void setDefaultDop2(View view) { + Intent intent = new Intent("setDefaultLauncher"); + intent.putExtra("package", "com.aoleyunos.dop2"); + intent.putExtra("className", "com.aoleyunos.dop2.activity.main.MainActivity"); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void setDefaultUiuiOs(View view) { + Intent intent = new Intent("setDefaultLauncher"); + intent.putExtra("package", "com.android.uiuios"); + intent.putExtra("className", "com.android.uiuios.Launcher"); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void setDefaultAoleyun(View view) { + Intent intent = new Intent("setDefaultLauncher"); + intent.putExtra("package", "com.aoleyun.os"); + intent.putExtra("className", "com.aoleyun.os.Launcher"); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void openDocumentsui(View view) { + ApkUtils.openPackage(AoleyunTestActivity.this, "com.android.documentsui"); + } + + public void getSdStatus(View view) { + int aole_sdcard_forbid_on = Settings.System.getInt(getContentResolver(), "aole_sdcard_forbid_on", 0); + mViewDataBinding.btSdStatu.setText("状态:" + aole_sdcard_forbid_on); + } + + public void setSdOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 0); + } + + public void setSdOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 1); + } + + public void getDeveloperStatu(View view) { + int aole_Developeroptions = Settings.System.getInt(getContentResolver(), "aole_Developeroptions", 0); + Log.e(TAG, "onClick: aole_Developeroptions = " + aole_Developeroptions); + mViewDataBinding.btDeveloperStatu.setText("状态:" + aole_Developeroptions); + } + + public void setDeveloperOn(View view) { + setDeveloperOptions(0); + } + + public void btDeveloperOff(View view) { + setDeveloperOptions(1); + } + + public void getNavigationStatus(View view) { + Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); + startActivity(intent); + } + + public void setNavigationOn(View view) { + Intent navIntent = new Intent("aole_show_NavigationBar"); +// Intent navIntent = new Intent("aole_show_NavigationBar").setPackage("com.android.systemui"); + sendBroadcast(navIntent); + } + + public void setNavigationOff(View view) { + Intent navIntent = new Intent("aole_hide_NavigationBar"); +// Intent navIntent = new Intent("aole_hide_NavigationBar").setPackage("com.android.systemui"); + sendBroadcast(navIntent); + } + + public void showStatusbar(View view) { +// mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME); +// mStatusBarManager.disable(StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME); + mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);//显示隐藏的虚拟按键 + } + + public void hideStatusbarBack(View view) { + mStatusBarManager.disable(StatusBarManager.DISABLE_BACK);//隐藏返回键 + } + + public void hideStatusbarHome(View view) { + mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键 + } + + public void hideStatusbarRecent(View view) { + mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT);//隐藏recent键 + } + + public void setStatusOn(View view) { + Intent navIntent = new Intent("aole_show_statusBar"); +// Intent navIntent = new Intent("aole_show_statusBar").setPackage("com.android.systemui"); + sendBroadcast(navIntent); + } + + public void hideStatusOff(View view) { + Intent navIntent = new Intent("aole_hide_statusBar"); +// Intent navIntent = new Intent("aole_hide_statusBar").setPackage("com.android.systemui"); + sendBroadcast(navIntent); + } + + public void setCollapseOn(View view) { +// StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); +// mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND); +// mStatusBarManager.disable(StatusBarManager.DISABLE2_NOTIFICATION_SHADE); + Settings.Global.putInt(getContentResolver(), "PULLDOWN_MENU_ENABLED", 1); + } + + public void setCollapseOff(View view) { + Settings.Global.putInt(getContentResolver(), "PULLDOWN_MENU_ENABLED", 0); +// StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); +// mStatusBarManager.disable(StatusBarManager.DISABLE_NONE); +// mStatusBarManager.disable(StatusBarManager.DISABLE2_NONE); + } + + public void setHotspotOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_hotspot_forbid_on", 0); + } + + public void setHotspotOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_hotspot_forbid_on", 1); + Intent intent = new Intent("aole_hotspot_close"); + intent.setPackage("com.android.settings"); + sendStickyBroadcast(intent); + } + + public void setBhtOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_bht_forbid_on", 0); + } + + public void setBhtOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_bht_forbid_on", 1); + } + + public void setBtOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_bt_forbid_on", 0); + } + + public void setBtOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_bt_forbid_on", 1); + } + + public void setBhtvideoOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_bhtvideo_forbid_on", 0); + } + + public void setBhtvideoOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_bhtvideo_forbid_on", 1); + } + + public void setResetOn(View view) { + Settings.System.putInt(getContentResolver(), "aole_restore_forbid_on", 0); + } + + public void setResetOff(View view) { + Settings.System.putInt(getContentResolver(), "aole_restore_forbid_on", 1); + } + + public void listInputMeth(View view) { + InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); + List InputMethods = imeManager.getEnabledInputMethodList(); + Log.e(TAG, "onClick: " + InputMethods); + } + + public void setInputBaidu(View view) { + Log.e(TAG, "init: " + getInputMethodId("com.baidu.input")); + Intent intent = new Intent("setDefaultInputMethod"); + intent.putExtra("package", getInputMethodId("com.baidu.input")); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void setInputSogou(View view) { + Log.e(TAG, "init: " + getInputMethodId("com.sohu.inputmethod.sogou")); + Intent intent = new Intent("setDefaultInputMethod"); + intent.putExtra("package", getInputMethodId("com.sohu.inputmethod.sogou")); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void openUrl(View view) { + Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + Uri content_url = Uri.parse("https://www.baidu.com/"); + intent.setData(content_url); + startActivity(intent); + } + + public void setBrowserOn(View view) { + Intent intent = new Intent("setDefaultBrowser"); + intent.putExtra("package", ("com.quark.browser")); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void setBrowserOff(View view) { + Intent intent = new Intent("setDefaultBrowser"); + intent.putExtra("package", ("com.android.chrome")); + intent.setPackage("com.android.settings"); + sendBroadcast(intent); + } + + public void getAppStatus(View view) { + Log.e("aole_network_disallow", "onClick: " + Settings.System.getString(getContentResolver(), "aole_network_disallow")); + } + + + public void setAppOn(View view) { + Settings.System.putString(getContentResolver(), "aole_network_disallow", "com.quark.browser"); + } + + + public void setAppOff(View view) { + Settings.System.putString(getContentResolver(), "aole_network_disallow", ""); + + } + public void setNightOn(View view) { + sendBroadcast(new Intent(NIGHT_DISPLAY_ENABLED)); + } + + public void setNightOff(View view) { + sendBroadcast(new Intent(NIGHT_DISPLAY_DISABLED)); + } + + public void setReadOn(View view) { + sendBroadcast(new Intent(READ_MODEL_ENABLED)); + } + + public void setReadOff(View view) { + sendBroadcast(new Intent(READ_MODEL_DISABLED)); + } + + public void addshortcut(View view) { +// addShortcut(AoleyunTestActivity.this, new Intent( +// AoleyunTestActivity.this, MainActivity.class), "TTUtilsTest", false, +// ((BitmapDrawable) getResources().getDrawable(R.drawable.ic_launcher)).getBitmap()); + addShortCutCompact(AoleyunTestActivity.this); + } + public void addNoti(View view) { + sendSimpleNotification(); + } + + public void notiOff(View view) { + Intent statusIntent = new Intent("aole_hide_appinfo"); + sendBroadcast(statusIntent); + } + + public void notiOn(View view) { + Intent statusIntent = new Intent("aole_show_appinfo"); + sendBroadcast(statusIntent); + } + public void setNotiBlackList(View view) { + Settings.System.putString(getContentResolver(), "aole_app_info", BuildConfig.APPLICATION_ID); + Log.e("bt_noti_black", "onClick: " + Settings.System.getString(getContentResolver(), "aole_app_info")); + } + } +} diff --git a/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestViewModel.java b/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestViewModel.java new file mode 100644 index 0000000..27d495c --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/activity/aoleyuntest/AoleyunTestViewModel.java @@ -0,0 +1,18 @@ +package com.ttstd.ttutils.activity.aoleyuntest; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.ttstd.ttutils.base.mvvm.BaseViewModel; +import com.ttstd.ttutils.databinding.ActivityAoleyunTestBinding; + +public class AoleyunTestViewModel extends BaseViewModel { + + @Override + public ActivityAoleyunTestBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/ttstd/ttutils/activity/main/MainAPresenter.java b/app/src/main/java/com/ttstd/ttutils/activity/main/MainAPresenter.java index 045c31f..024facd 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/main/MainAPresenter.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/main/MainAPresenter.java @@ -15,7 +15,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; * @author jgy02 */ public class MainAPresenter implements MainAContact.Presenter { - private static final String TAG = MainAPresenter.class.getSimpleName(); + private static final String TAG = "MainAPresenter"; private MainAContact.MainView mView; private Context mContext; diff --git a/app/src/main/java/com/ttstd/ttutils/activity/main/MainActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/main/MainActivity.java index 3c75234..ba991be 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/main/MainActivity.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/main/MainActivity.java @@ -24,11 +24,11 @@ import android.widget.Toast; import com.jiaoguanyi.appstore.IGetLicenseInterface; import com.notepad.uiui.INoteAidlInterface; -import com.ttstd.ttutils.base.ImmerseBaseActivity; +import com.ttstd.ttutils.base.mvvm.BaseMvvmActivity; import com.ttstd.ttutils.server.main.MainService; import com.ttstd.ttutils.R; import com.ttstd.ttutils.utils.java.CmdUtil; -import com.ttstd.ttutils.utils.java.JGYUtils; +import com.ttstd.ttutils.utils.java.JgyUtils; import com.ttstd.ttutils.utils.java.TTUtils; import com.ttstd.ttutils.utils.java.ToastUtil; import com.ttstd.ttutils.utils.jni.NDKTools; @@ -39,7 +39,7 @@ import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; -public class MainActivity extends ImmerseBaseActivity { +public class MainActivity extends BaseMvvmActivity { @BindView(R.id.tv_qch_Developeroptions) TextView tv_qch_Developeroptions; @BindView(R.id.tv_development_settings_enabled) @@ -114,7 +114,7 @@ public class MainActivity extends ImmerseBaseActivity { private IGetLicenseInterface getLicenseInterface; private ServiceConnection mIGetInfoConnection; private IGetInfoInterface getInfoInterface; - private static final String TAG = MainActivity.class.getSimpleName(); + private static final String TAG = "MainActivity"; private UsbManager mUsbManager; @@ -123,6 +123,14 @@ public class MainActivity extends ImmerseBaseActivity { return R.layout.activity_main; } + @Override + protected void initDataBinding() { + // mViewModel.setCtx(this); +// mViewModel.setVDBinding(mViewDataBinding); +// mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { ButterKnife.bind(this); @@ -140,19 +148,8 @@ public class MainActivity extends ImmerseBaseActivity { TTUtils.getExtrax(intent); } mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); - } - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - if (intent != null) { - TTUtils.getExtrax(intent); - } - } - - @Override - public void setListener() { -// mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_NONE, true); + // mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_NONE, true); none.setOnClickListener(view -> mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_NONE, true)); //报错 adb.setOnClickListener(view -> mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_ADB, true)); @@ -219,12 +216,20 @@ public class MainActivity extends ImmerseBaseActivity { bt_bc_boot.setOnClickListener(view -> CmdUtil.execute("am broadcast -a android.intent.action.BOOT_COMPLETED")); bt_start_jgy.setOnClickListener(view -> { - JGYUtils.getInstance().wakeUpAppstore(); - JGYUtils.getInstance().wakeUpDeviceInfo(); - JGYUtils.getInstance().wakeUpNotify(); + JgyUtils.getInstance().wakeUpAppstore(); + JgyUtils.getInstance().wakeUpDeviceInfo(); + JgyUtils.getInstance().wakeUpNotify(); }); } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + if (intent != null) { + TTUtils.getExtrax(intent); + } + } + @Override public void initData() { startService(new Intent(MainActivity.this, MainService.class)); diff --git a/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitActivity.java index 81ce940..e0a689d 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitActivity.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitActivity.java @@ -1,9 +1,9 @@ package com.ttstd.ttutils.activity.retrofit; import com.ttstd.ttutils.R; -import com.ttstd.ttutils.base.BaseActivity; +import com.ttstd.ttutils.base.mvvm.BaseMvvmActivity; -public class RetrofitActivity extends BaseActivity implements RetrofitContact.MainView { +public class RetrofitActivity extends BaseMvvmActivity implements RetrofitContact.MainView { private RetrofitPresenter mRetrofitPresenter; @Override @@ -11,12 +11,20 @@ public class RetrofitActivity extends BaseActivity implements RetrofitContact.Ma return R.layout.activity_retrofit; } + @Override + protected void initDataBinding() { + // mViewModel.setCtx(this); +// mViewModel.setVDBinding(mViewDataBinding); +// mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { mRetrofitPresenter = new RetrofitPresenter(this); mRetrofitPresenter.attachView(this); mRetrofitPresenter.setProvider(this); - mRetrofitPresenter.setLifecycle(lifecycleSubject); + mRetrofitPresenter.setLifecycle(getLifecycleSubject()); } @Override diff --git a/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitPresenter.java b/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitPresenter.java index 87ea15a..afa724e 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitPresenter.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/retrofit/RetrofitPresenter.java @@ -34,7 +34,7 @@ import retrofit2.converter.gson.GsonConverterFactory; * @author jgy02 */ public class RetrofitPresenter implements RetrofitContact.Presenter { - private static final String TAG = RetrofitPresenter.class.getSimpleName(); + private static final String TAG = "RetrofitPresenter"; private RetrofitContact.MainView mView; private Context mContext; diff --git a/app/src/main/java/com/ttstd/ttutils/activity/test/TestActivity.java b/app/src/main/java/com/ttstd/ttutils/activity/test/TestActivity.java index 5ae84ba..d64f143 100644 --- a/app/src/main/java/com/ttstd/ttutils/activity/test/TestActivity.java +++ b/app/src/main/java/com/ttstd/ttutils/activity/test/TestActivity.java @@ -11,6 +11,8 @@ import android.os.Bundle; import android.widget.Button; import com.ttstd.ttutils.R; +import com.ttstd.ttutils.base.BaseDataBindingActivity; +import com.ttstd.ttutils.base.mvvm.BaseMvvmActivity; import com.ttstd.ttutils.utils.java.TTUtils; import java.util.List; @@ -18,8 +20,8 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class TestActivity extends AppCompatActivity { - private String TAG = TestActivity.class.getSimpleName(); +public class TestActivity extends BaseMvvmActivity { + private String TAG = "TestActivity"; @BindView(R.id.bt1) Button bt1; @@ -29,9 +31,20 @@ public class TestActivity extends AppCompatActivity { Button bt3; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_test); + protected int getLayoutId() { + return R.layout.activity_test; + } + + @Override + protected void initDataBinding() { + // mViewModel.setCtx(this); +// mViewModel.setVDBinding(mViewDataBinding); +// mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { ButterKnife.bind(this); Intent intent = getIntent(); if (intent != null) { @@ -42,6 +55,11 @@ public class TestActivity extends AppCompatActivity { bt3.setOnClickListener(view -> setDefault("com.aoleyun.os")); } + @Override + protected void initData() { + + } + @Override protected void onNewIntent(Intent intent) { diff --git a/app/src/main/java/com/ttstd/ttutils/base/BaseApplication.java b/app/src/main/java/com/ttstd/ttutils/base/BaseApplication.java index 5202d27..eb80bd9 100644 --- a/app/src/main/java/com/ttstd/ttutils/base/BaseApplication.java +++ b/app/src/main/java/com/ttstd/ttutils/base/BaseApplication.java @@ -5,6 +5,9 @@ import android.os.Handler; import android.os.Looper; import android.util.Log; +import androidx.multidex.MultiDex; + +import com.hjq.toast.Toaster; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushConfig; import com.tencent.android.tpush.XGPushManager; @@ -14,9 +17,12 @@ public class BaseApplication extends Application { @Override public void onCreate() { super.onCreate(); + + MultiDex.install(this); if (!BuildConfig.DEBUG) { catchException(); } + Toaster.init(this); XGPushConfig.enableDebug(this, true); XGPushManager.registerPush(this, new XGIOperateCallback() { @Override diff --git a/app/src/main/java/com/ttstd/ttutils/base/BaseDataBindingActivity.java b/app/src/main/java/com/ttstd/ttutils/base/BaseDataBindingActivity.java new file mode 100644 index 0000000..83c1d04 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/BaseDataBindingActivity.java @@ -0,0 +1,68 @@ +package com.ttstd.ttutils.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.ttstd.ttutils.R; +import com.ttstd.ttutils.base.rx.BaseRxActivity; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseDataBindingActivity extends BaseRxActivity { + + public BaseDataBindingActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + initDataBinding(); + initView(); + initData(); + } + + /** + * @return 是否是黑色状态栏 + */ +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } + + /** + * @return 是否是入侵 + */ +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } + + + protected abstract void initDataBinding(); + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} \ No newline at end of file diff --git a/app/src/main/java/com/ttstd/ttutils/base/BaseFragment.java b/app/src/main/java/com/ttstd/ttutils/base/BaseFragment.java index 2ceb90b..2bb6153 100644 --- a/app/src/main/java/com/ttstd/ttutils/base/BaseFragment.java +++ b/app/src/main/java/com/ttstd/ttutils/base/BaseFragment.java @@ -1,114 +1,44 @@ package com.ttstd.ttutils.base; import android.os.Bundle; -import android.view.View; -import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; +import com.ttstd.ttutils.base.rx.BaseRxFragment; -import com.trello.rxlifecycle4.LifecycleProvider; -import com.trello.rxlifecycle4.LifecycleTransformer; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.trello.rxlifecycle4.android.RxLifecycleAndroid; +public abstract class BaseFragment extends BaseRxFragment { -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; + protected boolean isViewInitiated; + protected boolean isVisibleToUser; + protected boolean isDataInitiated; -public class BaseFragment extends Fragment implements LifecycleProvider { - private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - public BaseFragment() { - super(); - } - - @ContentView - public BaseFragment(@LayoutRes int contentLayoutId) { - super(contentLayoutId); + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + isViewInitiated = true; + prepareFetchData(); } @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + this.isVisibleToUser = isVisibleToUser; + prepareFetchData(); } - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + public abstract void fetchData(); + + public boolean prepareFetchData() { + return prepareFetchData(false); } - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindFragment(lifecycleSubject); + public boolean prepareFetchData(boolean forceUpdate) { + if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) { + fetchData(); + //注释掉保证每次都更新数据 +// isDataInitiated = true; + return true; + } + return false; } - @Override - public void onAttach(android.app.Activity activity) { - super.onAttach(activity); - lifecycleSubject.onNext(FragmentEvent.ATTACH); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE); - } - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); - } - - @Override - public void onStart() { - super.onStart(); - lifecycleSubject.onNext(FragmentEvent.START); - } - - @Override - public void onResume() { - super.onResume(); - lifecycleSubject.onNext(FragmentEvent.RESUME); - } - - @Override - public void onPause() { - lifecycleSubject.onNext(FragmentEvent.PAUSE); - super.onPause(); - } - - @Override - public void onStop() { - lifecycleSubject.onNext(FragmentEvent.STOP); - super.onStop(); - } - - @Override - public void onDestroyView() { - lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); - super.onDestroyView(); - } - - @Override - public void onDestroy() { - lifecycleSubject.onNext(FragmentEvent.DESTROY); - super.onDestroy(); - } - - @Override - public void onDetach() { - lifecycleSubject.onNext(FragmentEvent.DETACH); - super.onDetach(); - } } diff --git a/app/src/main/java/com/ttstd/ttutils/base/BaseTransparentActivity.java b/app/src/main/java/com/ttstd/ttutils/base/BaseTransparentActivity.java new file mode 100644 index 0000000..2b4a59b --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/BaseTransparentActivity.java @@ -0,0 +1,57 @@ +package com.ttstd.ttutils.base; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.ttstd.ttutils.R; +import com.ttstd.ttutils.base.rx.BaseRxActivity; +import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; + +public abstract class BaseTransparentActivity extends BaseRxActivity { + + public BaseTransparentActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// StatusBarUtil.init(this); + UltimateBarX.statusBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + UltimateBarX.navigationBar(this) + .transparent() + .colorRes(R.color.colorPrimaryDark) + .light(setNightMode()) + .fitWindow(setfitWindow()) + .apply(); + } + + /** + * 设置布局 + */ + protected abstract int getLayoutId(); + + /** + * @return 是否是黑色状态栏 + */ +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } + + /** + * @return 是否是入侵 + */ +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ttstd/ttutils/base/ImmerseBaseActivity.java b/app/src/main/java/com/ttstd/ttutils/base/ImmerseBaseActivity.java deleted file mode 100644 index 48bb869..0000000 --- a/app/src/main/java/com/ttstd/ttutils/base/ImmerseBaseActivity.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.ttstd.ttutils.base; - -import android.os.Bundle; - -import androidx.annotation.Nullable; - -import com.ttstd.ttutils.R; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; - -public abstract class ImmerseBaseActivity extends BaseActivity { - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); -// StatusBarUtil.init(this); - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - //状态栏改变放在setContentView前后有所不同 - setContentView(this.getLayoutId()); - initView(); - setListener(); - initData(); - } - - /** - * 设置布局 - */ - public abstract int getLayoutId(); - - /** - * 初始化视图 - */ - public abstract void initView(); - - /** - * - */ - public abstract void setListener(); - - /** - * 初始化数据 - */ - public abstract void initData(); -} diff --git a/app/src/main/java/com/ttstd/ttutils/base/KotlinApplication.kt b/app/src/main/java/com/ttstd/ttutils/base/KotlinApplication.kt index 98ab199..c21cabd 100644 --- a/app/src/main/java/com/ttstd/ttutils/base/KotlinApplication.kt +++ b/app/src/main/java/com/ttstd/ttutils/base/KotlinApplication.kt @@ -4,13 +4,15 @@ import android.app.Application import android.os.Handler import android.os.Looper import android.util.Log +import androidx.multidex.MultiDex +import com.hjq.toast.Toaster import com.tencent.android.tpush.XGIOperateCallback import com.tencent.android.tpush.XGPushConfig import com.tencent.android.tpush.XGPushManager import com.tencent.bugly.crashreport.CrashReport import com.tencent.mmkv.MMKV import com.ttstd.ttutils.BuildConfig -import com.ttstd.ttutils.utils.java.JGYUtils +import com.ttstd.ttutils.utils.java.JgyUtils import com.ttstd.ttutils.utils.java.TTUtils import com.ttstd.ttutils.utils.java.ToastUtil @@ -19,12 +21,15 @@ class KotlinApplication : Application() { override fun onCreate() { super.onCreate() + MultiDex.install(this) + val rootDir = MMKV.initialize(this) Log.e("KotlinApplication", "mmkv root: $rootDir") ToastUtil.init(this) + Toaster.init(this) TTUtils.init(this) - JGYUtils.init(this) + JgyUtils.init(this) CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false); XGPushConfig.enableDebug(this, true) diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseMvpActivity.java b/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseMvpActivity.java new file mode 100644 index 0000000..09bf527 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseMvpActivity.java @@ -0,0 +1,34 @@ +package com.ttstd.ttutils.base.mvp; + +import android.os.Bundle; + +import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; + +import com.ttstd.ttutils.base.BaseTransparentActivity; + +public abstract class BaseMvpActivity extends BaseTransparentActivity { + + public BaseMvpActivity() { + super(); + } + + @Override + @CallSuper + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + initView(); + initData(); + } + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvp/BasePresenter.java b/app/src/main/java/com/ttstd/ttutils/base/mvp/BasePresenter.java new file mode 100644 index 0000000..43bcb75 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvp/BasePresenter.java @@ -0,0 +1,7 @@ +package com.ttstd.ttutils.base.mvp; + +public interface BasePresenter { + void attachView(V view); + + void detachView(); +} \ No newline at end of file diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseView.java b/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseView.java new file mode 100644 index 0000000..9506f38 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvp/BaseView.java @@ -0,0 +1,5 @@ +package com.ttstd.ttutils.base.mvp; + +public interface BaseView { + +} \ No newline at end of file diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseMvvmActivity.java new file mode 100644 index 0000000..4aa3350 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseMvvmActivity.java @@ -0,0 +1,54 @@ +package com.ttstd.ttutils.base.mvvm; + +import android.os.Bundle; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.ttstd.ttutils.base.BaseTransparentActivity; + +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; + +public abstract class BaseMvvmActivity extends BaseTransparentActivity { + + private static final String TAG = "BaseMvvmActivity"; + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //ViewDataBinding + mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId()); + mViewDataBinding.setLifecycleOwner(this); + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + boolean isAbstract = Modifier.isAbstract(vmClass.getModifiers()); + Log.e(TAG, "isLocalClass:" + vmClass.getSimpleName().equals("ViewModel") + " isAbstract:" + isAbstract); + if (!isAbstract) {//不是一个抽象类 + mViewModel = new ViewModelProvider(this).get(vmClass); + } + initDataBinding(); + initView(); + initData(); + } + + protected abstract void initDataBinding(); + + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); +} diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseViewModel.java b/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseViewModel.java new file mode 100644 index 0000000..22c732f --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvvm/BaseViewModel.java @@ -0,0 +1,71 @@ +package com.ttstd.ttutils.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; + +import java.lang.ref.WeakReference; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * 所有viewmodel的基类 + */ +public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback { + + /** + * 当前viewmodel对应的页面binding + */ + protected VDB binding; + + @Override + public void setVDBinding(ViewDataBinding vdBinding) { + + binding = (VDB) vdBinding; + } + + @Override + public VDB getVDBinding() { + if (binding == null) { + throw new NullPointerException("BaseViewModel >> getVDBinding >> null!!!"); + } + return binding; + } + + + /** + * 上下文 + */ + private WeakReference ctx; + + @Override + public void setCtx(Context context) { + if (ctx == null) { + ctx = new WeakReference<>(context); + } + } + + @Override + public Context getCtx() { + if (ctx == null) { + throw new NullPointerException("BaseViewModel >> getCtx >> null!!!"); + } + return ctx.get(); + } + + + public abstract void onDestroy(); + + private BehaviorSubject mBehaviorSubject; + + @Override + public void setLifecycle(BehaviorSubject subject) { + this.mBehaviorSubject = (BehaviorSubject) subject; + } + + @Override + public BehaviorSubject getLifecycle() { + return mBehaviorSubject; + } +} diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvvm/ViewDataBindingCallback.java b/app/src/main/java/com/ttstd/ttutils/base/mvvm/ViewDataBindingCallback.java new file mode 100644 index 0000000..5903e98 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvvm/ViewDataBindingCallback.java @@ -0,0 +1,26 @@ +package com.ttstd.ttutils.base.mvvm; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; + +import com.trello.rxlifecycle4.android.ActivityEvent; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public interface ViewDataBindingCallback { + + + void setVDBinding(VDB binding); + + VDB getVDBinding() throws NullPointerException; + + + void setCtx(Context context); + + Context getCtx() throws NullPointerException; + + void setLifecycle(BehaviorSubject subject); + + BehaviorSubject getLifecycle(); +} diff --git a/app/src/main/java/com/ttstd/ttutils/base/mvvm/fragment/BaseMvvmFragment.java b/app/src/main/java/com/ttstd/ttutils/base/mvvm/fragment/BaseMvvmFragment.java new file mode 100644 index 0000000..d3976f1 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/mvvm/fragment/BaseMvvmFragment.java @@ -0,0 +1,275 @@ +package com.ttstd.ttutils.base.mvvm.fragment; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.ttstd.ttutils.base.BaseFragment; + +import java.lang.ref.WeakReference; +import java.lang.reflect.ParameterizedType; + +/** + * @author: lml + * @date: 2021/12/15 + */ +public abstract class BaseMvvmFragment extends BaseFragment { + protected String mTag = this.getClass().getSimpleName(); + /** + * 是否顯示了 + */ + protected boolean mIsVisible; + /** + * 是否準備好了-Created + */ + protected boolean mHasPrepare; + + + protected VM mViewModel; + protected VDB mViewDataBinding; + protected Class vmClass; + // +// protected Toolbar toolbar; +// protected View statusBarView; + // + protected Bundle bundle;//来自getArguments() + protected Bundle savedInstanceState; + +// protected Context context; + + /** + * 上下文 + */ + private WeakReference ctx; + + public Context getCtx() { + return ctx == null ? null : ctx.get(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); +// this.context = context; + ctx = new WeakReference<>(context); + } + + /** + * onCreate、onResume里不能调用 + * + * @return + */ + public boolean isAttached() { + boolean flag = getCtx() != null && isAdded(); + Log.e(" >> isAttached >>", "flag = " + flag); + return flag; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //ViewDataBinding + mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false); + mViewDataBinding.setLifecycleOwner(this); + + //ViewModel + vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + mViewModel = new ViewModelProvider(this).get(vmClass); + // + return mViewDataBinding.getRoot(); + } + + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + +// if (initStatusBarToolBar()) { +// toolbar = getToolbar(); +// } + //注册eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.register(this); + // + +// fitsLayoutOverlap(); + initDataBinding(); + initView(bundle = getArguments()); + // + initData(this.savedInstanceState = savedInstanceState); + // + if (mIsVisible) { + onEnter(); + } + mHasPrepare = true; + // +// LiveDataBus.get().with(ConstantUtils.DATA_BUS_LOADING_FRAGMENT, Boolean.class).observe(getActivity(), bool -> { +// L.e(" >> LiveDataBus >> DATA_BUS_LOADING_FRAGMENT: %s", bool); +// if(bool) { +// showLoading(R.string.str_please_wait); +// } else { +// hideLoading(); +// } +// }); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mHasPrepare = false; + mViewDataBinding = null; + //移除eventbus +// if (getClass().isAnnotationPresent(BindEventBus.class)) +// EventBusManager.unregister(this); + // + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (mIsVisible == getUserVisibleHint()) + return; + mIsVisible = getUserVisibleHint(); + if (mIsVisible) { + if (!mHasPrepare) + return; + onEnter(); + } else { + onExit(); + } + } + + @LayoutRes + protected abstract int getLayoutId(); + +// protected abstract Toolbar getToolbar(); + +// protected View getStatusView() { +// return null; +// } + + protected abstract void initDataBinding(); + + protected abstract void initView(Bundle bundle); + + protected abstract void initData(Bundle savedInstanceState); + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); +// fitsLayoutOverlap(); + } + +// protected boolean isImmersionBarEnabled() { +// return true; +// } + +// protected boolean initStatusBarToolBar() { +// return true; +// } + + +// private void fitsLayoutOverlap() { +// if (!isImmersionBarEnabled()) return; +// if (statusBarView != null) { +// ImmersionBar.setStatusBarView(getActivity(), statusBarView); +// } +// if (toolbar != null) { +// ImmersionBar.setTitleBar(getActivity(), toolbar); +// } +// } + + protected void hideInputMethod(Activity activity) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + protected void hideInputMethod(Activity activity, EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = activity.getCurrentFocus(); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + } + + protected void showInputMethod(EditText editText) { + InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); + } + + +// private CustomDialog mWaitDialog; +// +// public void showLoading(@StringRes int contentID) { +// showLoading(contentID, R.color.white); +// } +// +// public void showLoading(@StringRes int contentID, @ColorRes int color) { +// hideLoading(); +// DialogX.init(getActivity()); +// if (color == R.color.white) { +// mWaitDialog = DialogXUtil.getInstance().showLoading(getActivity(), getString(contentID), getResources().getColor(color)); +// } else { +// mWaitDialog = DialogXUtil.getInstance().showLoading_black(getActivity(), getString(contentID), getResources().getColor(color)); +// } +// } +// +// public void updateLoadingTip(@StringRes int messageID, int percent) { +// try { +// if (mWaitDialog != null && mWaitDialog.isShow()) { +// TextView tvTip = mWaitDialog.getCustomView().findViewById(R.id.tv_load_tip); +// if (tvTip != null) +// tvTip.setText(getResources().getString(messageID) + (percent == -1 ? "" : percent + "%")); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// public boolean isShowLoading() { +// return mWaitDialog != null && mWaitDialog.isShow(); +// } +// +// public void hideLoading() { +// try { +// boolean isShow = isShowLoading(); +// L.d(" >> hideLoading :: isShow: %s", isShow); +// if (isShow) +// mWaitDialog.dismiss(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + + /** + * 進入界面 + */ + protected void onEnter() { + + } + + /** + * 離開界面 + */ + protected void onExit() { + + } + +} diff --git a/app/src/main/java/com/ttstd/ttutils/base/old/BaseActivity1.java b/app/src/main/java/com/ttstd/ttutils/base/old/BaseActivity1.java deleted file mode 100644 index 693aafd..0000000 --- a/app/src/main/java/com/ttstd/ttutils/base/old/BaseActivity1.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.ttstd.ttutils.base.old; - -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -public abstract class BaseActivity1 extends AppCompatActivity { - private static Handler sHandler; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(setLayoutResourceID()); - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); - sHandler = new Handler(); - sHandler.post(mHideRunnable); // hide the navigation bar - final View decorView = getWindow().getDecorView(); - decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { - @Override - public void onSystemUiVisibilityChange(int visibility) { - if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) { - sHandler.postDelayed(mHideRunnable, 3000); // hide the navigation bar - } - } - }); - - initView(); - initData(); - setListener(); - - } - - - protected abstract int setLayoutResourceID(); - - protected abstract void initView(); - - - protected void setListener() { - } - - - protected abstract void initData(); - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) { -// initViewFull(this); - } - } - -// public static void initViewFull(final Activity activity) { -// activity.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { -// @Override -// public void onSystemUiVisibilityChange(int visibility) { -// new Thread() { -// @Override -// public void run() { -// super.run(); -// try { -// Thread.sleep(3000); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// activity.runOnUiThread(new Runnable() { -// @Override -// public void run() { -// initViewFull(activity); -// -// } -// }); -// } -// }.start(); -// } -// }); -// // //设置无标题 -// activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, -// WindowManager.LayoutParams.FLAG_FULLSCREEN); -// activity.getWindow().getDecorView().setSystemUiVisibility( -// View.SYSTEM_UI_FLAG_LAYOUT_STABLE -// | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION -// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN -// | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar -// | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar -// | View.SYSTEM_UI_FLAG_IMMERSIVE); -// } - - Runnable mHideRunnable = new Runnable() { - @Override - public void run() { - int flags; - int curApiVersion = Build.VERSION.SDK_INT; - // This work only for android 4.4+ - if (curApiVersion >= Build.VERSION_CODES.KITKAT) { - // This work only for android 4.4+ - // hide navigation bar permanently in android activity - // touch the screen, the navigation bar will not show - flags = -// View.SYSTEM_UI_FLAG_HIDE_NAVIGATION -// | View.SYSTEM_UI_FLAG_IMMERSIVE -// | View.SYSTEM_UI_FLAG_FULLSCREEN; - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar - | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar - | View.SYSTEM_UI_FLAG_IMMERSIVE; - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - } else { - // touch the screen, the navigation bar will show - flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - } - // must be executed in main thread - - getWindow().getDecorView().setSystemUiVisibility(flags); - } - }; - -} diff --git a/app/src/main/java/com/ttstd/ttutils/base/BaseActivity.java b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxActivity.java similarity index 62% rename from app/src/main/java/com/ttstd/ttutils/base/BaseActivity.java rename to app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxActivity.java index a88c822..066df42 100644 --- a/app/src/main/java/com/ttstd/ttutils/base/BaseActivity.java +++ b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxActivity.java @@ -1,11 +1,9 @@ -package com.ttstd.ttutils.base; +package com.ttstd.ttutils.base.rx; import android.os.Bundle; import androidx.annotation.CallSuper; import androidx.annotation.CheckResult; -import androidx.annotation.ContentView; -import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -15,23 +13,19 @@ import com.trello.rxlifecycle4.LifecycleTransformer; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.trello.rxlifecycle4.android.RxLifecycleAndroid; -import com.ttstd.ttutils.R; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.BehaviorSubject; +/** + * {@link com.trello.rxlifecycle4.components.RxActivity} + * copied form RxActivity} + */ +public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); -public abstract class BaseActivity extends AppCompatActivity implements LifecycleProvider { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - public BaseActivity() { - super(); - } - - @ContentView - public BaseActivity(@LayoutRes int contentLayoutId) { - super(contentLayoutId); + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; } @Override @@ -60,38 +54,8 @@ public abstract class BaseActivity extends AppCompatActivity implements Lifecycl protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); lifecycleSubject.onNext(ActivityEvent.CREATE); -// StatusBarUtil.init(this); - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - setContentView(this.getLayoutId()); - initView(); - initData(); } - /** - * 设置布局 - */ - public abstract int getLayoutId(); - - /** - * 初始化视图 - */ - public abstract void initView(); - - - /** - * 初始化数据 - */ - public abstract void initData(); - @Override @CallSuper protected void onStart() { @@ -127,3 +91,4 @@ public abstract class BaseActivity extends AppCompatActivity implements Lifecycl super.onDestroy(); } } + diff --git a/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxFragment.java b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxFragment.java new file mode 100644 index 0000000..2369fa7 --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxFragment.java @@ -0,0 +1,123 @@ +package com.ttstd.ttutils.base.rx; + +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.CallSuper; +import androidx.annotation.CheckResult; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.trello.rxlifecycle4.LifecycleProvider; +import com.trello.rxlifecycle4.LifecycleTransformer; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.trello.rxlifecycle4.android.RxLifecycleAndroid; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * {@link com.trello.rxlifecycle4.components.RxFragment} + * copied form RxFragment} + */ +public class BaseRxFragment extends Fragment implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; + } + + @Override + @NonNull + @CheckResult + public final Observable lifecycle() { + return lifecycleSubject.hide(); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { + return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindToLifecycle() { + return RxLifecycleAndroid.bindFragment(lifecycleSubject); + } + + @Override + @CallSuper + public void onAttach(android.app.Activity activity) { + super.onAttach(activity); + lifecycleSubject.onNext(FragmentEvent.ATTACH); + } + + @Override + @CallSuper + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE); + } + + @Override + @CallSuper + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); + } + + @Override + @CallSuper + public void onStart() { + super.onStart(); + lifecycleSubject.onNext(FragmentEvent.START); + } + + @Override + @CallSuper + public void onResume() { + super.onResume(); + lifecycleSubject.onNext(FragmentEvent.RESUME); + } + + @Override + @CallSuper + public void onPause() { + lifecycleSubject.onNext(FragmentEvent.PAUSE); + super.onPause(); + } + + @Override + @CallSuper + public void onStop() { + lifecycleSubject.onNext(FragmentEvent.STOP); + super.onStop(); + } + + @Override + @CallSuper + public void onDestroyView() { + lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); + super.onDestroyView(); + } + + @Override + @CallSuper + public void onDestroy() { + lifecycleSubject.onNext(FragmentEvent.DESTROY); + super.onDestroy(); + } + + @Override + @CallSuper + public void onDetach() { + lifecycleSubject.onNext(FragmentEvent.DETACH); + super.onDetach(); + } +} + diff --git a/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxService.java b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxService.java new file mode 100644 index 0000000..b21c26b --- /dev/null +++ b/app/src/main/java/com/ttstd/ttutils/base/rx/BaseRxService.java @@ -0,0 +1,63 @@ +package com.ttstd.ttutils.base.rx; + +import android.app.Service; +import android.content.Intent; + +import androidx.annotation.CheckResult; +import androidx.annotation.NonNull; + +import com.trello.rxlifecycle4.LifecycleProvider; +import com.trello.rxlifecycle4.LifecycleTransformer; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.trello.rxlifecycle4.android.RxLifecycleAndroid; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public abstract class BaseRxService extends Service implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; + } + + + @Override + @NonNull + @CheckResult + public final Observable lifecycle() { + return lifecycleSubject.hide(); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) { + return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindToLifecycle() { + return RxLifecycleAndroid.bindActivity(lifecycleSubject); + } + + @Override + public void onCreate() { + super.onCreate(); + lifecycleSubject.onNext(ActivityEvent.CREATE); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onDestroy() { + super.onDestroy(); + lifecycleSubject.onNext(ActivityEvent.STOP); + } +} diff --git a/app/src/main/java/com/ttstd/ttutils/disklrucache/CacheHelper.java b/app/src/main/java/com/ttstd/ttutils/disklrucache/CacheHelper.java index 1dbcdc7..9dff17d 100644 --- a/app/src/main/java/com/ttstd/ttutils/disklrucache/CacheHelper.java +++ b/app/src/main/java/com/ttstd/ttutils/disklrucache/CacheHelper.java @@ -29,7 +29,7 @@ import java.io.Serializable; * 磁盘缓存帮助类 */ public class CacheHelper { - private static final String TAG = CacheHelper.class.getSimpleName(); + private static final String TAG = "CacheHelper"; private MMKV mMMKV = MMKV.defaultMMKV(); diff --git a/app/src/main/java/com/ttstd/ttutils/network/NetInterfaceManager.java b/app/src/main/java/com/ttstd/ttutils/network/NetInterfaceManager.java index 90a3206..4d6bb7d 100644 --- a/app/src/main/java/com/ttstd/ttutils/network/NetInterfaceManager.java +++ b/app/src/main/java/com/ttstd/ttutils/network/NetInterfaceManager.java @@ -18,7 +18,7 @@ import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class NetInterfaceManager { - private static final String TAG = NetInterfaceManager.class.getSimpleName(); + private static final String TAG = "NetInterfaceManager"; @SuppressLint("StaticFieldLeak") private static NetInterfaceManager INSTANCE; diff --git a/app/src/main/java/com/ttstd/ttutils/network/interceptor/RepeatRequestInterceptor.java b/app/src/main/java/com/ttstd/ttutils/network/interceptor/RepeatRequestInterceptor.java index 0ee186f..61e0a4c 100644 --- a/app/src/main/java/com/ttstd/ttutils/network/interceptor/RepeatRequestInterceptor.java +++ b/app/src/main/java/com/ttstd/ttutils/network/interceptor/RepeatRequestInterceptor.java @@ -22,7 +22,7 @@ import okio.Buffer; * v1.0 2022-07-15 16:16:52 */ public class RepeatRequestInterceptor implements Interceptor { - private static final String TAG = RepeatRequestInterceptor.class.getSimpleName(); + private static final String TAG = "RepeatRequestInterceptor"; private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); public static final String REPEAT_REQUEST_PROTOCOL = "OKHTTP_REPEAT_REQUEST_PROTOCOL"; diff --git a/app/src/main/java/com/ttstd/ttutils/network/interceptor/RequestInterceptor.java b/app/src/main/java/com/ttstd/ttutils/network/interceptor/RequestInterceptor.java index 1a890cf..07d4811 100644 --- a/app/src/main/java/com/ttstd/ttutils/network/interceptor/RequestInterceptor.java +++ b/app/src/main/java/com/ttstd/ttutils/network/interceptor/RequestInterceptor.java @@ -16,7 +16,7 @@ import okhttp3.Request; import okhttp3.Response; public class RequestInterceptor implements Interceptor { - private static final String TAG = RequestInterceptor.class.getSimpleName(); + private static final String TAG = "RequestInterceptor"; private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); public static final String REPEAT_REQUEST_PROTOCOL = "OKHTTP_REPEAT_REQUEST_PROTOCOL"; diff --git a/app/src/main/java/com/ttstd/ttutils/receiver/BootReceiver.java b/app/src/main/java/com/ttstd/ttutils/receiver/BootReceiver.java index aa9f03d..6474e6c 100644 --- a/app/src/main/java/com/ttstd/ttutils/receiver/BootReceiver.java +++ b/app/src/main/java/com/ttstd/ttutils/receiver/BootReceiver.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.util.Log; public class BootReceiver extends BroadcastReceiver { - private static String TAG = BootReceiver.class.getSimpleName() + ":ttutils"; + private static String TAG = "BootReceiver" + ":ttutils"; public static final String BOOT_COMPLETED = "aoleyun.intent.action.BOOT_COMPLETED"; @Override diff --git a/app/src/main/java/com/ttstd/ttutils/receiver/ShortcutReceiver.java b/app/src/main/java/com/ttstd/ttutils/receiver/ShortcutReceiver.java index 5737aea..2edac6a 100644 --- a/app/src/main/java/com/ttstd/ttutils/receiver/ShortcutReceiver.java +++ b/app/src/main/java/com/ttstd/ttutils/receiver/ShortcutReceiver.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.util.Log; public class ShortcutReceiver extends BroadcastReceiver { - private static final String TAG = ShortcutReceiver.class.getSimpleName(); + private static final String TAG = "ShortcutReceiver"; @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/ttstd/ttutils/server/main/MainSPresenter.java b/app/src/main/java/com/ttstd/ttutils/server/main/MainSPresenter.java index 8f7582f..71c5642 100644 --- a/app/src/main/java/com/ttstd/ttutils/server/main/MainSPresenter.java +++ b/app/src/main/java/com/ttstd/ttutils/server/main/MainSPresenter.java @@ -15,7 +15,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; * @author jgy02 */ public class MainSPresenter implements MainSContact.Presenter { - private static final String TAG = MainSPresenter.class.getSimpleName(); + private static final String TAG = "MainSPresenter"; private MainSContact.MainView mView; private Context mContext; diff --git a/app/src/main/java/com/ttstd/ttutils/server/main/MainService.java b/app/src/main/java/com/ttstd/ttutils/server/main/MainService.java index dcabb06..68871cc 100644 --- a/app/src/main/java/com/ttstd/ttutils/server/main/MainService.java +++ b/app/src/main/java/com/ttstd/ttutils/server/main/MainService.java @@ -36,7 +36,7 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class MainService extends Service implements MainSContact.MainView { - private static final String TAG = MainService.class.getSimpleName(); + private static final String TAG = "MainService"; private MainSPresenter mPresenter; private UsbManager mUsbManager; diff --git a/app/src/main/java/com/ttstd/ttutils/utils/java/ApkUtils.java b/app/src/main/java/com/ttstd/ttutils/utils/java/ApkUtils.java index 0717f71..26037ad 100644 --- a/app/src/main/java/com/ttstd/ttutils/utils/java/ApkUtils.java +++ b/app/src/main/java/com/ttstd/ttutils/utils/java/ApkUtils.java @@ -1,19 +1,26 @@ package com.ttstd.ttutils.utils.java; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageStats; +import android.content.pm.ResolveInfo; import android.os.RemoteException; +import android.text.TextUtils; import android.util.Log; +import com.hjq.toast.Toaster; + import java.io.File; import java.lang.reflect.Method; +import java.util.List; public class ApkUtils { - private static final String TAG = ApkUtils.class.getSimpleName(); + private static final String TAG = "ApkUtils"; private final long MAX_WAIT_TIME = 60 * 1000; private final long WAIT_TIME_INCR = 10 * 1000; @@ -104,4 +111,78 @@ public class ApkUtils { } } + public static boolean openPackage(Context context, String packageName) { + Context pkgContext = getPackageContext(context, packageName); + Intent intent = getAppOpenIntentByPackageName(context, packageName); + if (pkgContext != null && intent != null) { + pkgContext.startActivity(intent); + return true; + } + return false; + } + + public static boolean openPackage(Context context, String packageName, String className) { + if (TextUtils.isEmpty(className)) { + return openPackage(context, packageName); + } + ComponentName cn = new ComponentName(packageName, className); + Intent intent = new Intent(); + intent.setComponent(cn); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (context != null) { + try { + context.startActivity(intent); + return true; + } catch (Exception e) { + Log.e(TAG, "openPackage: " + e.getMessage()); + Toaster.show("打开失败"); + return false; + } + } + return false; + } + + public static Context getPackageContext(Context context, String packageName) { + Context pkgContext = null; + if (context.getPackageName().equals(packageName)) { + pkgContext = context; + } else { + // 创建第三方应用的上下文环境 + try { + pkgContext = context.createPackageContext(packageName, + Context.CONTEXT_IGNORE_SECURITY + | Context.CONTEXT_INCLUDE_CODE); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + return pkgContext; + } + + public static Intent getAppOpenIntentByPackageName(Context context, String packageName) { + //Activity完整名 + String mainAct = null; + //根据包名寻找 + PackageManager pkgMag = context.getPackageManager(); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK); + + List list = pkgMag.queryIntentActivities(intent, + PackageManager.GET_ACTIVITIES); + for (int i = 0; i < list.size(); i++) { + ResolveInfo info = list.get(i); + if (info.activityInfo.packageName.equals(packageName)) { + mainAct = info.activityInfo.name; + break; + } + } + if (TextUtils.isEmpty(mainAct)) { + return null; + } + intent.setComponent(new ComponentName(packageName, mainAct)); + return intent; + } + } diff --git a/app/src/main/java/com/ttstd/ttutils/utils/java/DevicesUtils.java b/app/src/main/java/com/ttstd/ttutils/utils/java/DevicesUtils.java index 6f7be5f..d37cc2a 100644 --- a/app/src/main/java/com/ttstd/ttutils/utils/java/DevicesUtils.java +++ b/app/src/main/java/com/ttstd/ttutils/utils/java/DevicesUtils.java @@ -1,5 +1,6 @@ package com.ttstd.ttutils.utils.java; +import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; import android.provider.Settings; @@ -38,6 +39,24 @@ public class DevicesUtils { return serial; } + @SuppressLint({"NewApi"}) + public String getBuildSerial() { + String serial = ""; + if (Build.VERSION.SDK_INT >= 28) { + try { + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("get", String.class); + serial = (String)get.invoke(c, "ro.serialno"); + } catch (Exception var4) { + var4.printStackTrace(); + } + } else { + serial = Build.SERIAL; + } + + return serial; + } + public static String getDeviceSN() { String serial = null; try { diff --git a/app/src/main/java/com/ttstd/ttutils/utils/java/JGYUtils.java b/app/src/main/java/com/ttstd/ttutils/utils/java/JgyUtils.java similarity index 90% rename from app/src/main/java/com/ttstd/ttutils/utils/java/JGYUtils.java rename to app/src/main/java/com/ttstd/ttutils/utils/java/JgyUtils.java index 0388ff7..bd73776 100644 --- a/app/src/main/java/com/ttstd/ttutils/utils/java/JGYUtils.java +++ b/app/src/main/java/com/ttstd/ttutils/utils/java/JgyUtils.java @@ -13,11 +13,11 @@ import com.ttstd.ttutils.BuildConfig; import com.ttstd.ttutils.disklrucache.CacheHelper; import com.ttstd.ttutils.receiver.BootReceiver; -public class JGYUtils { - private static final String TAG = JGYUtils.class.getSimpleName(); +public class JgyUtils { + private static final String TAG = "JgyUtils"; @SuppressLint("StaticFieldLeak") - private static JGYUtils sInstance; + private static JgyUtils sInstance; private Context mContext; private ContentResolver crv; private CacheHelper cacheHelper; @@ -32,6 +32,7 @@ public class JGYUtils { public static final int UnknowPlatform = 0; public static final int AH6016Platform = 9; public static final int TeclastP20sPlatform = 11; + public static final int U1302Platform = 26; public static final String MTKTag = "MTK"; @@ -42,9 +43,10 @@ public class JGYUtils { public static final String G13Tag = "G13"; public static final String AH6016Tag = "AH6016"; public static final String TeclastP20sTag = "P20S"; + public static final String allwinner_U1302 = "QZA15"; - private JGYUtils(Context context) { + private JgyUtils(Context context) { if (context == null) { throw new RuntimeException("Context is NULL"); } @@ -56,13 +58,13 @@ public class JGYUtils { public static void init(Context context) { if (sInstance == null) { Log.e(TAG, "init: "); - sInstance = new JGYUtils(context); + sInstance = new JgyUtils(context); } } - public static JGYUtils getInstance() { + public static JgyUtils getInstance() { if (sInstance == null) { - throw new IllegalStateException("You must be init JGYUtils first"); + throw new IllegalStateException("You must be init JgyUtils first"); } return sInstance; } @@ -147,6 +149,10 @@ public class JGYUtils { } } + public static boolean isAllWinnerDevice() { + return JgyUtils.getInstance().checkAppPlatform() == U1302Platform; + } + /** * 从Manifest中获取meta-data值 * https://blog.csdn.net/yue_233/article/details/91453451 @@ -165,28 +171,28 @@ public class JGYUtils { } public static boolean isOfficialVersion() { - String channelValue = JGYUtils.getInstance().getStringMetaData(); + String channelValue = JgyUtils.getInstance().getStringMetaData(); return "official".equals(channelValue); } public static boolean isOfficialVersion(Context context) { Log.e(TAG, "isOfficialVersion: " + ProcessUtil.getCurrentProcessName(context)); - String channelValue = JGYUtils.getInstance().getStringMetaData(); + String channelValue = JgyUtils.getInstance().getStringMetaData(); return "official".equals(channelValue); } public static boolean isNewlyVersion() { - String channelValue = JGYUtils.getInstance().getStringMetaData(); + String channelValue = JgyUtils.getInstance().getStringMetaData(); return "beta".equals(channelValue); } public static boolean isBetaVersion() { - String channelValue = JGYUtils.getInstance().getStringMetaData(); + String channelValue = JgyUtils.getInstance().getStringMetaData(); return "beta".equals(channelValue); } public static String getCHANNEL_VALUE() { - return JGYUtils.getInstance().getStringMetaData(); + return JgyUtils.getInstance().getStringMetaData(); } diff --git a/app/src/main/java/com/ttstd/ttutils/utils/java/LauncherUtils.java b/app/src/main/java/com/ttstd/ttutils/utils/java/LauncherUtils.java index 773cece..05a5e62 100644 --- a/app/src/main/java/com/ttstd/ttutils/utils/java/LauncherUtils.java +++ b/app/src/main/java/com/ttstd/ttutils/utils/java/LauncherUtils.java @@ -39,7 +39,7 @@ public class LauncherUtils { UserHandle user = Process.myUserHandle(); Log.i("settingssssssstemf", (add ? "Adding" : "Removing") + " package as role holder, role: " + roleName + ", package: " + packageName); - if (JGYUtils.getInstance().checkAppPlatform() != JGYUtils.MTKPlatform) { + if (JgyUtils.getInstance().checkAppPlatform() != JgyUtils.MTKPlatform) { RoleManager roleManager = context.getSystemService(RoleManager.class); Executor executor = context.getMainExecutor(); Consumer callback = successful -> { diff --git a/app/src/main/java/com/ttstd/ttutils/utils/java/TTUtils.java b/app/src/main/java/com/ttstd/ttutils/utils/java/TTUtils.java index 19341a2..74031c7 100644 --- a/app/src/main/java/com/ttstd/ttutils/utils/java/TTUtils.java +++ b/app/src/main/java/com/ttstd/ttutils/utils/java/TTUtils.java @@ -15,7 +15,7 @@ import java.util.Iterator; import java.util.Set; public class TTUtils { - private static final String TAG = TTUtils.class.getSimpleName(); + private static final String TAG = "TTUtils"; @SuppressLint("StaticFieldLeak") private static TTUtils sInstance; diff --git a/app/src/main/res/layout/activity_aoleyun_test.xml b/app/src/main/res/layout/activity_aoleyun_test.xml index 74c3fd4..407942d 100644 --- a/app/src/main/res/layout/activity_aoleyun_test.xml +++ b/app/src/main/res/layout/activity_aoleyun_test.xml @@ -1,693 +1,801 @@ - + tools:context=".activity.aoleyuntest.AoleyunTestActivity"> - + + + + + - + android:layout_height="match_parent"> + android:orientation="vertical"> -