diff --git a/app/build.gradle b/app/build.gradle index 60167c6..666eaad 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 87 - versionName "6.4.7" + versionCode 88 + versionName "6.4.8" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 24 @@ -164,6 +164,14 @@ android { keyPassword "android" v2SigningEnabled false } + + teclast8183 { + storeFile file("keystore/TeclastMTK12.jks") + storePassword "123456" + keyAlias "TeclastMTK12" + keyPassword "123456" + v2SigningEnabled false + } } // Disable release builds for now @@ -175,6 +183,20 @@ android { } buildTypes { + teclast8183Debug.initWith(debug) + teclast8183Debug { + versionNameSuffix "-debug" + debuggable true + signingConfig signingConfigs.teclast8183 + buildConfigField "String", "platform", '"teclast8183"' + } + + teclast8183Release.initWith(release) + teclast8183Release { + signingConfig signingConfigs.teclast8183 + buildConfigField "String", "platform", '"teclast8183"' + } + iPlay5013Debug.initWith(debug) iPlay5013Debug { buildConfigField "String", "platform", '"iplay5013"' diff --git a/app/keystore/TeclastMTK12.jks b/app/keystore/TeclastMTK12.jks new file mode 100644 index 0000000..669cfa9 Binary files /dev/null and b/app/keystore/TeclastMTK12.jks differ diff --git a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java index b0f3b3d..f1e2f5e 100644 --- a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java +++ b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java @@ -34,6 +34,8 @@ public class CommonConfig { */ public final static String DEVICES_FRIST_START = "DEVICES_FRIST_START"; + public static final String INSTALL_SD_APKS = "install_sd_apks"; + /*是否激活*/ public static final String UIUI_ACTIVATION_KEY = "uiui_activation"; /*保存激活码*/ diff --git a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java index b5f6c34..e77fef6 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -1248,7 +1248,7 @@ public class NetInterfaceManager { cacheHelper.put(UrlAddress.GET_DESKTOP, ""); // String whiteList = Settings.System.getString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST); for (String s : ApkUtils.desktopAPP) { - if ("com.aoleyunos.dop3".equals(s)){ + if ("com.aoleyunos.dop3".equals(s)) { continue; } if (!BuildConfig.DEBUG) { @@ -1940,6 +1940,7 @@ public class NetInterfaceManager { String ebagCode = eBagCode.getEbagCode(); SPUtils.put(mContext, "ebagCode", ebagCode); Settings.Global.putInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 1); + JGYUtils.getInstance().checkLocalExternalFiles(); } else { cacheHelper.put(UrlAddress.GET_EBAG_CODE, ""); Log.e("getEBagCode", "onNext: " + baseResponse.data); @@ -3992,6 +3993,7 @@ public class NetInterfaceManager { } } } else { + Settings.Global.putInt(mContext.getContentResolver(), CommonConfig.AOLEYUN_APPSTORE_INSTALL, 1); TimeUtils.setEmpty(mContext); TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(mContext); if (null != c) { diff --git a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java index 2dd13e7..cd62cc3 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java @@ -762,6 +762,7 @@ public class ApkUtils { this.add("com.aoleyun.os"); this.add("com.aoleyun.browser"); this.add("com.aoleyun.browser"); + this.add("com.uiui.filecloud"); }}; //出厂自带的app diff --git a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java index d548129..6e47fe4 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java @@ -32,7 +32,6 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; @@ -96,10 +95,18 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.Executor; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; + import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE; @@ -2500,7 +2507,7 @@ public class JGYUtils { String app_package = adminAppInfo.getApp_package(); String app_url = adminAppInfo.getApp_url(); String app_md5 = adminAppInfo.getApp_md5(); - int app_id = adminAppInfo.getId(); + int app_id = adminAppInfo.getId(); long app_version_code = adminAppInfo.getApp_version_code(); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("app_name", app_name); @@ -2532,4 +2539,134 @@ public class JGYUtils { } } } + + private static final String AOLE_DIR = "aoleapp"; + + public void checkLocalExternalFiles() { + int install = mMMKV.decodeInt(CommonConfig.INSTALL_SD_APKS, 0); + Log.e(TAG, "checkLocalExternalFiles: installed = " + install); + if (install == 1) { + Log.e(TAG, "checkLocalExternalFiles: install"); +// return; + } + File[] externalFiles = mContext.getExternalFilesDirs(null); + Log.e(TAG, "checkLocalAppInstall: externalFiles = " + Arrays.toString(externalFiles)); + + String SdPath = Environment.getExternalStorageDirectory().getAbsolutePath(); + Log.e(TAG, "checkLocalAppInstall: SdPath = " + SdPath); + String aolePath = SdPath + File.separator + AOLE_DIR; + File file = new File(aolePath); + if (!file.exists()) { + Log.e(TAG, "checkLocalExternalFiles: dir not exists"); + return; + } + String[] apkName = file.list(); + if (apkName == null || apkName.length == 0) { + Log.e(TAG, "checkLocalAppInstall: apkName is empty"); + } else { + Observable.create(new ObservableOnSubscribe>() { + @Override + public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable { + HashMap packageListMap = new HashMap<>(); + for (String fileName : apkName) { + String apkPath = aolePath + File.separator + fileName; + Log.e(TAG, "subscribe: " + apkPath); + String pkg = ApkUtils.getPackageName(mContext, apkPath); + if (mJxwApps.contains(pkg)) { + packageListMap.put(pkg, apkPath); + } else { + Log.e(TAG, "checkLocalAppInstall: skip: " + pkg + " fileName: " + fileName); + } + } + emitter.onNext(packageListMap); + emitter.onComplete(); + } + }).subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("checkLocalAppInstall", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull HashMap stringStringHashMap) { + Log.e("checkLocalAppInstall", "onNext: " + stringStringHashMap); + stringStringHashMap.forEach(new BiConsumer() { + @Override + public void accept(String key, String value) { + if (ApkUtils.isAvailable(mContext, key)) { + Log.e("checkLocalAppInstall", "accept: installed: " + key); + } else { + ApkUtils.installApp(mContext, value); + } + } + }); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("checkLocalAppInstall", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("checkLocalAppInstall", "onComplete: "); + mMMKV.encode(CommonConfig.INSTALL_SD_APKS, 1); + } + }); + } + } + + private Set mJxwApps = new HashSet() {{ + this.add("air.com.zhihuiyoujiao.flashplayer"); + this.add("com.example.arithmeticformula"); + this.add("com.example.elementcycleapp"); + this.add("com.example.pianpangbushou"); + this.add("com.iflytek.cyber.iot.show.core"); + this.add("com.iflytek.speechcloud"); + this.add("com.jxw.bihuamingcheng"); + this.add("com.jxw.bishunguize"); + this.add("com.jxw.characterlearning"); + this.add("com.jxw.dmxcy"); + this.add("com.jxw.englishsoundmark"); + this.add("com.jxw.examsystem"); + this.add("com.jxw.game"); + this.add("com.jxw.gb.zwpg"); + this.add("com.jxw.handwrite"); + this.add("com.jxw.jinfangyici"); + this.add("com.jxw.jxwbook"); + this.add("com.jxw.jxwcalculator"); + this.add("com.jxw.laboratory"); + this.add("com.jxw.learnchinesepinyin"); + this.add("com.jxw.letterstudynew"); + this.add("com.jxw.liancichengju"); + this.add("com.jxw.mskt.video"); + this.add("com.jxw.newyouer.video"); + this.add("com.jxw.online_study"); + this.add("com.jxw.question"); + this.add("com.jxw.schultegrid"); + this.add("com.jxw.singsound"); + this.add("com.jxw.studydigital"); + this.add("com.jxw.teacher.video"); + this.add("com.jxw.wuweijidanci"); + this.add("com.jxw.youer.video"); + this.add("com.jxw.yuwenxiezuo"); + this.add("com.jxw.yyhb"); + this.add("com.jxw.zncd"); + this.add("com.jxw.souti"); + this.add("com.jxw.xdfzq"); + this.add("com.oirsdfg89.flg"); + this.add("com.study.flashplayer"); + this.add("com.tech.translate"); + this.add("com.uiui.zybrowser"); + this.add("com.uiui.zysn "); + this.add("com.jxw.launcher"); + this.add("com.uiui.zyappstore"); + this.add("com.uiui.zy"); + this.add("com.uiui.zyos"); + this.add("com.teclast.zyos"); + this.add("com.teclast.zybrowser"); + this.add("com.teclast.zyappstore"); + this.add("com.teclast.zy"); + }}; } diff --git a/app/src/main/res/drawable-hdpi/aoleyun_qrcode.png b/app/src/main/res/drawable-hdpi/aoleyun_qrcode.png new file mode 100644 index 0000000..b09800e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/aoleyun_qrcode.png differ diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index b0182e9..40e835f 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -42,7 +42,6 @@ app:layout_constraintStart_toEndOf="@+id/iv_back" app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + @@ -722,9 +767,9 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_4" android:text="@string/binding_time" - android:visibility="gone" android:textColor="@color/text_gray" android:textSize="@dimen/sp_10" + android:visibility="gone" app:layout_constraintEnd_toEndOf="@+id/iv_qrcode" app:layout_constraintStart_toStartOf="@+id/iv_qrcode" app:layout_constraintTop_toBottomOf="@+id/iv_qrcode" /> diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index 40e835f..687b54a 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -749,16 +749,28 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_bind_statu"> + +