diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 3f1ff53978..94d64bdb24 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.os.CountDownTimer; import android.preference.PreferenceManager; import android.text.Html; import android.text.SpannableStringBuilder; @@ -200,7 +201,7 @@ public class DialogUtils { String mb = size.toUpperCase().replaceAll("MB", "").trim(); Float i = Float.valueOf(mb); if (NetworkUtils.isWifiOr4GConnected(context) && i <= 50) { - AppExecutor.getUiExecutor().executeWithDelay(() -> Utils.toast(context, "当前使用移动网络下载,请注意流量消耗"),500); + AppExecutor.getUiExecutor().executeWithDelay(() -> Utils.toast(context, "当前使用移动网络下载,请注意流量消耗"), 500); return true; } @@ -889,7 +890,7 @@ public class DialogUtils { WindowManager.LayoutParams params = window.getAttributes(); params.horizontalMargin = 0; params.width = context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(40); - params.height = context.getResources().getDisplayMetrics().heightPixels- DisplayUtils.dip2px(120); + params.height = context.getResources().getDisplayMetrics().heightPixels - DisplayUtils.dip2px(120); window.setAttributes(params); } @@ -1149,6 +1150,39 @@ public class DialogUtils { return dialog; } + public static void showDownloadMutexDialog(Context context) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.GhAlertDialog); + + View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_downlaod_mutex, null); + TextView positive = contentView.findViewById(R.id.dialog_positive); + + CountDownTimer timer = new CountDownTimer(6000, 1000) { + public void onTick(long millisUntilFinished) { + positive.setText(("我知道了(" + millisUntilFinished / 1000 + ")")); + } + + public void onFinish() { + dialog.dismiss(); + } + }; + timer.start(); + + positive.setOnClickListener(v -> { + dialog.dismiss(); + }); + + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(contentView); + dialog.show(); + } + /** * @param context may be is application context * @return activity context diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index dd6d0b596f..a2f1f2d8b8 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -243,6 +243,18 @@ public class DownloadManager implements DownloadStatusListener { } } + // 插件版本下载互斥弹窗 + GameEntity.MutexDialog mutexDialog = gameEntity.getMutexDialog(); + if ("on".equals(mutexDialog.getStatus()) + && mutexDialog.getPackages().contains(apkEntity.getPackageName())) { + for (String pkg : mutexDialog.getPackages()) { + if (PackagesManager.isInstalled(pkg)) { + DialogUtils.showDownloadMutexDialog(context); + break; + } + } + } + DownloadEntity downloadEntity = new DownloadEntity(); downloadEntity.setUrl(apkEntity.getUrl()); downloadEntity.setName(gameEntity.getName()); @@ -639,7 +651,7 @@ public class DownloadManager implements DownloadStatusListener { Intent serviceIntent = new Intent(mContext, DownloadService.class); // 当满足系统版本大于 8.0 、应用在后台运行时以前台服务开启 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O - && !HaloApp.getInstance().isRunningForeground) { + && !HaloApp.getInstance().isRunningForeground) { serviceIntent.putExtra(DownloadService.KEY_SERVICE_ACTION, DownloadService.START_FOREGROUND); mContext.startForegroundService(serviceIntent); } else { @@ -734,7 +746,7 @@ public class DownloadManager implements DownloadStatusListener { public void markDownloadedTaskAsRead() { AppExecutor.getIoExecutor().execute(() -> { boolean markHasChanged = false; - + List all = getAll(); for (DownloadEntity downloadEntity : all) { DownloadStatus status = downloadEntity.getStatus(); @@ -747,20 +759,20 @@ public class DownloadManager implements DownloadStatusListener { } } } - + if (markHasChanged) { EventBus.getDefault().post(new EBDownloadStatus("download", "", "", "", "", "")); } }); } - + /** * 标记可用更新为已读 (用于下载管理页入口的 toolbar 红点显示) */ public void markUpdatableTaskAsRead() { AppExecutor.getIoExecutor().execute(() -> { boolean markHasChanged = false; - + ArrayList updates = PackageRepository.INSTANCE.getGameUpdate(); for (GameUpdateEntity update : updates) { String mark = update.getId() + update.getPackageName(); @@ -769,7 +781,7 @@ public class DownloadManager implements DownloadStatusListener { if (!markHasChanged) markHasChanged = true; } } - + if (markHasChanged) { saveUpdateMarkToStorage(); EventBus.getDefault().post(new EBDownloadStatus("download", "", "", "", "", "")); diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt index e8c41d7016..4940e30111 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -161,7 +161,9 @@ data class GameEntity( @SerializedName("played_time") val playedTime: Long = 0, @SerializedName("played_game_id") - val playedGameId: String = "") : Parcelable { + val playedGameId: String = "", + @SerializedName("mutex_dialog") + val mutexDialog: MutexDialog = MutexDialog()) : Parcelable { @IgnoredOnParcel private var entryMap: androidx.collection.ArrayMap? = androidx.collection.ArrayMap() @@ -337,6 +339,11 @@ data class GameEntity( ) : Parcelable } + @Parcelize + data class MutexDialog(val status: String = "off", //on/off + @SerializedName("package") + val packages: List = arrayListOf()) : Parcelable + companion object { const val TAG: String = "GameEntity" } diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt index 6a263b7910..96e45ea218 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt +++ b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt @@ -96,6 +96,7 @@ object PackagesManager { * @param packageName 包名 * @return true 已安装 false 未安装 */ + @JvmStatic fun isInstalled(packageName: String?): Boolean { if (TextUtils.isEmpty(packageName)) { return false diff --git a/app/src/main/res/layout/dialog_downlaod_mutex.xml b/app/src/main/res/layout/dialog_downlaod_mutex.xml new file mode 100644 index 0000000000..372a1135ef --- /dev/null +++ b/app/src/main/res/layout/dialog_downlaod_mutex.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + \ No newline at end of file