From 8b37a63a4ab813d00084573ab871f1f837c0fb9f Mon Sep 17 00:00:00 2001
From: renhaoting <370797079@qq.com>
Date: Fri, 28 Nov 2025 14:47:21 +0800
Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=BC=80=E7=B3=BB=E7=BB=9F=E9=80=9A?=
=?UTF-8?q?=E7=9F=A5=E8=AE=BE=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 1 +
.../java/com/gamedog/vididin/Constants.kt | 2 +
.../vididin/main/fragments/TasksFragment.kt | 21 +-
.../architecture/src/main/AndroidManifest.xml | 4 +
.../ama/core/architecture/util/AndroidUtil.kt | 47 ++++
.../util/permission/PermissionActivity.java | 218 ++++++++++++++++++
.../util/permission/PermissionUtil.java | 87 +++++++
.../src/main/res/values/strings.xml | 1 +
8 files changed, 378 insertions(+), 3 deletions(-)
create mode 100644 core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionActivity.java
create mode 100644 core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionUtil.java
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7f084c4..edda3af 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
+
(), OnTab
override fun ViewBinding.initViews() {
with(binding) {
- setOnClickBatch(ivGotoDailySign, llTaskBenefit, llTaskWatchVideo, llTaskGame, llTaskZerobuy, tvWatchVideo, tvWithdraw) {
+ setOnClickBatch(ivGotoDailySign, llTaskBenefit, llTaskWatchVideo, llTaskGame,
+ llTaskZerobuy, tvWatchVideo, tvWithdraw) {
when(this) {
ivGotoDailySign->{
DailySignDialog(requireActivity()).show()
@@ -211,11 +216,21 @@ class TasksFragment : AppViewsFragment(), OnTab
}
private fun gotoDiscord() {
- //TODO("Not yet implemented")
+ AndroidUtil.openUrl(VidiConst.URL_DISCORD)
}
private fun gotoNotification() {
- //TODO("Not yet implemented")
+ PermissionUtil.checkPermission(Manifest.permission.POST_NOTIFICATIONS, object : PermissionUtil.ICallback() {
+ override fun onAllGranted() {
+ AndroidUtil.openAppNotifySettings()
+ }
+
+ override fun onPartialGranted() {
+ }
+
+ override fun onAllRejected() {
+ }
+ })
}
private fun gotoWithVideo() {
diff --git a/core/architecture/src/main/AndroidManifest.xml b/core/architecture/src/main/AndroidManifest.xml
index afa9220..643110e 100644
--- a/core/architecture/src/main/AndroidManifest.xml
+++ b/core/architecture/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools">
+
+
+
+
\ No newline at end of file
diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt
index 0c6c652..e8f329d 100644
--- a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt
+++ b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt
@@ -1,9 +1,17 @@
package com.ama.core.architecture.util
+import android.app.Activity
+import android.content.Intent
+import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.provider.Settings
import android.widget.Toast
import com.ama.core.architecture.BaseApp
import kotlin.random.Random
+
class AndroidUtil private constructor() {
companion object {
@@ -22,8 +30,47 @@ class AndroidUtil private constructor() {
Toast.makeText(BaseApp.appContext(), str, Toast.LENGTH_SHORT).show()
}
+ fun openUrl(url: String) {
+ val appContext = BaseApp.appContext()
+ val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
+ intent.flags = FLAG_ACTIVITY_NEW_TASK
+ if (intent.resolveActivity(appContext.packageManager) != null) {
+ appContext.startActivity(intent)
+ } else {
+ Toast.makeText(appContext, "No available browser", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ fun openAppNotifySettings() {
+ val context = BaseApp.appContext()
+ val intent = Intent()
+ intent.flags = FLAG_ACTIVITY_NEW_TASK
+ try {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android >=8
+ intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
+ intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
+ intent.putExtra(Settings.EXTRA_CHANNEL_ID, context.applicationInfo.uid)
+
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Android 5.0-7.1
+ intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
+ intent.putExtra("app_package", context.packageName)
+ intent.putExtra("app_uid", context.applicationInfo.uid)
+ }
+
+ context.startActivity(intent)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ val fallbackIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ fallbackIntent.data = Uri.fromParts("package", context.packageName, null)
+ context.startActivity(fallbackIntent)
+ }
+ }
+
+
}
+
+
}
\ No newline at end of file
diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionActivity.java b/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionActivity.java
new file mode 100644
index 0000000..d87c82c
--- /dev/null
+++ b/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionActivity.java
@@ -0,0 +1,218 @@
+package com.ama.core.architecture.util.permission;
+
+
+
+import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION;
+import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION_EXTRA_RESULT;
+import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION_EXTRA_UUID;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+import com.ama.core.architecture.R;
+import com.ama.core.architecture.util.ResUtil;
+import java.util.ArrayList;
+
+
+public class PermissionActivity extends AppCompatActivity {
+ public static final int PERMISSION_REQUEST_CODE = 1000;
+ private static final String PERMISSION_TOTAL_REJECTED_HINT = ResUtil.INSTANCE.getString(R.string.permission_hint);
+
+ public static final String EXTRA_PERMISSION = "extra_permission";
+ public static final String EXTRA_ACTION_UUID = "extra_callback";
+
+ private String mActionUUID;
+ private ArrayList mPermissionList;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStatusBarColor(this, Color.TRANSPARENT);
+ setNavigationBarColor(this, Color.TRANSPARENT);
+
+ mActionUUID = getIntent().getStringExtra(EXTRA_ACTION_UUID);
+ mPermissionList = getIntent().getStringArrayListExtra(EXTRA_PERMISSION);
+ startRequest();
+ }
+
+
+ private void startRequest() {
+ if (mActionUUID == null || mPermissionList == null && mPermissionList.size() <= 0) {
+ finish();
+ }
+
+
+ ActivityCompat.requestPermissions(PermissionActivity.this,
+ mPermissionList.toArray(new String[mPermissionList.size()]), PERMISSION_REQUEST_CODE);
+
+ }
+
+
+
+
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ if (PERMISSION_REQUEST_CODE == requestCode) {
+ if (grantResults == null || grantResults.length <= 0) {
+ sendResultBroadCast(PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
+ } else {
+ int grantedCount = 0;
+ int unGrantedCount = 0;
+ for (int result : grantResults) {
+ if (result == PackageManager.PERMISSION_GRANTED) {
+ grantedCount++;
+ } else {
+ unGrantedCount++;
+ }
+ }
+
+ if (unGrantedCount <= 0) {
+ sendResultBroadCast(PermissionUtil.PERMISSION_RESULT_ALL_GRANTED);
+ } else {
+ int finalGrantedCount = grantedCount;
+ StringBuilder unGrantedPermissionsStr = new StringBuilder();
+ for (int i=0; i 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
+ }
+ })
+ .setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ sendResultBroadCast(finalGrantedCount > 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ sendResultBroadCast(finalGrantedCount > 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
+ }
+ })
+ .create()
+ .show();
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 用户选择了"不再询问", 引导用户跳转系统设置
+ */
+ private void showJump2SystemSettingDialog() {
+
+
+
+ // new
+ new AlertDialog.Builder(this)
+ .setTitle("权限已被拒绝")
+ .setMessage(mPermissionList + PERMISSION_TOTAL_REJECTED_HINT)
+ .setPositiveButton("系统设置", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ Uri packageURI = Uri.parse("package:" + getPackageName());
+ Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
+ startActivity(intent);
+ }
+ })
+ .setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ }
+ })
+ .create()
+ .show();
+ }
+
+
+ private void sendResultBroadCast(int permissionResult) {
+ Intent intent = new Intent(PERMISSION_BROADCAST_ACTION);
+ intent.putExtra(PERMISSION_BROADCAST_ACTION_EXTRA_RESULT, permissionResult);
+ intent.putExtra(PERMISSION_BROADCAST_ACTION_EXTRA_UUID, mActionUUID);
+ LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
+ finish();
+ }
+
+
+
+
+ //******************************** Static Methods *********************************//
+ private static void setStatusBarColor(Activity activity, int colorId) {
+ Window window = activity.getWindow();
+ window.setStatusBarColor(colorId);
+ }
+
+ private static void setNavigationBarColor(Activity activity, int colorId) {
+ Window window = activity.getWindow();
+ window.setNavigationBarColor(colorId);
+ }
+
+ private static void setTranslucentStatus(Window window) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ View decorView = window.getDecorView();
+ int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+ decorView.setSystemUiVisibility(option);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.TRANSPARENT);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ WindowManager.LayoutParams attributes = window.getAttributes();
+ int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
+ attributes.flags |= flagTranslucentStatus;
+ window.setAttributes(attributes);
+ }
+ }
+
+}
diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionUtil.java b/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionUtil.java
new file mode 100644
index 0000000..06d4ac4
--- /dev/null
+++ b/core/architecture/src/main/java/com/ama/core/architecture/util/permission/PermissionUtil.java
@@ -0,0 +1,87 @@
+package com.ama.core.architecture.util.permission;
+
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+import com.ama.core.architecture.BaseApp;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.UUID;
+
+public class PermissionUtil {
+ public static final int PERMISSION_RESULT_ALL_GRANTED = 1;
+ public static final int PERMISSION_RESULT_PARTIAL_GRANTED = 2;
+ public static final int PERMISSION_RESULT_ALL_REJECTED = 3;
+
+
+
+ public static final String PERMISSION_BROADCAST_ACTION = "permission_broadcast_action";
+ public static final String PERMISSION_BROADCAST_ACTION_EXTRA_UUID = "permission_broadcast_action_extra_uuid";
+ public static final String PERMISSION_BROADCAST_ACTION_EXTRA_RESULT = "permission_broadcast_action_extra_result";
+
+
+ public static abstract class ICallback implements Serializable {
+ public abstract void onAllGranted();
+ public abstract void onPartialGranted();
+ public abstract void onAllRejected();
+ }
+
+ public static void checkPermission(@NonNull String permission,
+ @NonNull ICallback callback) {
+ if (!TextUtils.isEmpty(permission)) {
+ checkPermission(new String[]{permission}, callback);
+ }
+ }
+
+ public static void checkPermission(@NonNull String[] permissionArr,
+ @NonNull ICallback callback) {
+ if (permissionArr == null || permissionArr.length == 0) {
+ callback.onAllGranted();
+ return;
+ }
+
+ String actionUUID = UUID.randomUUID().toString();
+ regisBroadcast(actionUUID, callback);
+
+ Intent intent = new Intent(BaseApp.Companion.appContext(), PermissionActivity.class);
+ intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(PermissionActivity.EXTRA_ACTION_UUID, actionUUID);
+ intent.putStringArrayListExtra(PermissionActivity.EXTRA_PERMISSION, new ArrayList(Arrays.asList(permissionArr)));
+ BaseApp.Companion.appContext().startActivity(intent);
+ }
+
+ private static void regisBroadcast(String actionUUID, ICallback callback) {
+ LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(BaseApp.Companion.appContext());
+ broadcastManager.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String resultActionUUID = intent.getStringExtra(PERMISSION_BROADCAST_ACTION_EXTRA_UUID);
+ int permissionResult = intent.getIntExtra(PERMISSION_BROADCAST_ACTION_EXTRA_RESULT, PERMISSION_RESULT_ALL_REJECTED);
+ broadcastManager.unregisterReceiver(this);
+
+ if (callback != null && actionUUID.equalsIgnoreCase(resultActionUUID)) {
+ switch (permissionResult) {
+ case PERMISSION_RESULT_ALL_GRANTED:
+ callback.onAllGranted();
+ break;
+
+ case PERMISSION_RESULT_PARTIAL_GRANTED:
+ callback.onPartialGranted();
+ break;
+
+ case PERMISSION_RESULT_ALL_REJECTED:
+ callback.onAllRejected();
+ break;
+ }
+ }
+ }
+ }, new IntentFilter(PERMISSION_BROADCAST_ACTION));
+ }
+
+}
diff --git a/core/architecture/src/main/res/values/strings.xml b/core/architecture/src/main/res/values/strings.xml
index bf90e87..e19431a 100644
--- a/core/architecture/src/main/res/values/strings.xml
+++ b/core/architecture/src/main/res/values/strings.xml
@@ -6,4 +6,5 @@
The request timed out. Please try again later.
Unable to connect to server. Please check network connection.
Unknown Exception: %1$s
+ You have to enable the permissions, or the system can\'t works\\n
\ No newline at end of file