diff --git a/app/build.gradle b/app/build.gradle index 79f1ec2644..b21674bb69 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -259,6 +259,8 @@ dependencies { implementation "com.llew.huawei:verifier:1.0.6" + implementation "com.github.tbruyelle:rxpermissions:${rxPermissions}" + implementation 'com.ethanhua:skeleton:1.1.1' implementation 'io.supercharge:shimmerlayout:2.1.0' implementation "com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.3.1" diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index 72cf99fd63..b5532d29f8 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -356,15 +356,17 @@ public class DownloadItemUtils { if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.getId())) { downloadBtn.setOnClickListener(v -> { CheckLoginUtils.checkLogin(context, entrance, () -> { - ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance( - gameEntity.getId(), - () -> adapter.notifyItemChanged(position) - ); - dialogFragment.show(((AppCompatActivity) context).getSupportFragmentManager(), "reserve"); + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(context, () -> { + ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance( + gameEntity.getId(), + () -> adapter.notifyItemChanged(position) + ); + dialogFragment.show(((AppCompatActivity) context).getSupportFragmentManager(), "reserve"); + }); + if (clickCallback != null) { + clickCallback.onCallback(); + } }); - if (clickCallback != null) { - clickCallback.onCallback(); - } }); } else { downloadBtn.setOnClickListener(v -> { @@ -379,17 +381,21 @@ public class DownloadItemUtils { if (gameEntity.getApk().size() == 1) { downloadBtn.setOnClickListener(v -> { - onNormalClick(context, downloadBtn, gameEntity, position, adapter, entrance, location, traceEvent); - if (clickCallback != null) { - clickCallback.onCallback(); - } + PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { + onNormalClick(context, downloadBtn, gameEntity, position, adapter, entrance, location, traceEvent); + if (clickCallback != null) { + clickCallback.onCallback(); + } + }); }); } else { downloadBtn.setOnClickListener(v -> { - DownloadDialog.getInstance(context).showPopupWindow(v, gameEntity, entrance, location, traceEvent); - if (clickCallback != null) { - clickCallback.onCallback(); - } + PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { + DownloadDialog.getInstance(context).showPopupWindow(v, gameEntity, entrance, location, traceEvent); + if (clickCallback != null) { + clickCallback.onCallback(); + } + }); }); } diff --git a/app/src/main/java/com/gh/common/util/PermissionHelper.kt b/app/src/main/java/com/gh/common/util/PermissionHelper.kt new file mode 100644 index 0000000000..949c4c819c --- /dev/null +++ b/app/src/main/java/com/gh/common/util/PermissionHelper.kt @@ -0,0 +1,69 @@ +package com.gh.common.util + +import android.Manifest +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.provider.Settings +import androidx.fragment.app.FragmentActivity +import com.lightgame.utils.Utils +import com.tbruyelle.rxpermissions2.RxPermissions + +object PermissionHelper { + + @JvmStatic + fun checkStoragePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) { + if (context is FragmentActivity) { + val rxPermission = RxPermissions(context) + rxPermission.request( + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE) + .subscribe { granted -> + if (granted) { + emptyCallback.onCallback() + } else { + DialogUtils.showPermissionDialog(context, "权限申请", + "在设置-应用-光环助手-权限中开启存储权限,以保证能正常使用相关功能", + "去设置", + "放弃", + { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intent.data = Uri.parse("package:" + context.getPackageName()) + context.startActivity(intent) + }, + { + Utils.toast(context, "不给权限不能使用此功能") + }) + } + } + } + } + + @JvmStatic + fun checkReadPhoneStatePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) { + if (context is FragmentActivity) { + val rxPermission = RxPermissions(context) + rxPermission.request( + Manifest.permission.READ_PHONE_STATE) + .subscribe { granted -> + if (granted) { + emptyCallback.onCallback() + } else { + DialogUtils.showPermissionDialog(context, "权限申请", + "在设置-应用-光环助手-权限中开启获取手机信息,以保证能正常使用相关功能", + "去设置", + "放弃", + { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intent.data = Uri.parse("package:" + context.getPackageName()) + context.startActivity(intent) + }, + { + Utils.toast(context, "不给权限不能使用此功能") + }) + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index a8e80c3008..27f013778f 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -8,17 +8,18 @@ import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.Settings; -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.gh.base.BaseActivity; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceTokenUtils; @@ -36,13 +37,11 @@ import com.gh.gamecenter.user.UserRepository; import com.halo.assistant.HaloApp; import com.lightgame.download.DownloadEntity; import com.lightgame.download.FileUtils; -import com.lightgame.utils.AppManager; import com.lightgame.utils.Utils; import com.qq.gdt.action.ActionType; import java.io.File; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; @@ -66,20 +65,6 @@ public class SplashScreenActivity extends BaseActivity { private String[] mPermissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE}; - public static Intent[] getRedirectIntents(Context context, Uri uri) { - List intentList = new ArrayList<>(); - if (AppManager.getInstance().isEmpty()) { - intentList.add(BaseActivity.getReorderToFrontIntent(context, SplashScreenActivity.class)); - intentList.add(BaseActivity.getReorderToFrontIntent(context, MainActivity.class)); - } - -// if (uri != null && !TextUtils.isEmpty(uri.toString())) { -// intentList.add(NavigationActivity.getNavigateUriIntent(context, uri)); -// } - - return intentList.toArray(new Intent[intentList.size()]); - } - public static Intent getSplashScreenIntent(Context context, Bundle bundle) { Intent intent = new Intent(context, SplashScreenActivity.class); intent.setAction(Intent.ACTION_MAIN); @@ -99,11 +84,6 @@ public class SplashScreenActivity extends BaseActivity { UserRepository.getInstance(getApplication()); // 初始化登录 -// if (!AppManager.getInstance().isEmpty()) { -// redirectAndFinish(getRedirectIntents(this, getIntent().getData())); -// return; -// } - // 处理助手已经在后台运行导致的再次启动助手 if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { finish(); @@ -251,17 +231,17 @@ public class SplashScreenActivity extends BaseActivity { @Override public void onPermissionsDenied(int requestCode, List perms) { if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { // 设置"不要再询问",必须手动到系统设置授权 - DialogUtils.showPermissionDialog(this, "重要提醒", - "请授予光环助手权限,否则将无法使用\n请点击\"设置\"-\"应用\"-\"光环助手\"-\"权限\"-打开所需权限", "去设置", "退出", + DialogUtils.showPermissionDialog(this, "权限申请", + "光环助手需要获取(存储空间权限)和(设备信息),以保证游戏的正常下载以及您的账号安全", "去设置", "放弃", () -> { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); - }, this::finish); + }, this::launch); } else { - DialogUtils.showPermissionDialog(this, "重要提醒", - "请授予光环助手权限,否则将无法使用", "重试", "退出", - this::checkAndRequestPermission, this::finish); + DialogUtils.showPermissionDialog(this, "权限申请", + "在设置-应用-光环助手-权限中开启存储和手机信息权限,以保证能正常使用相关功能", "重试", "放弃", + this::checkAndRequestPermission, this::launch); } } diff --git a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java index b50dec3323..ac3baa2c2a 100644 --- a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java @@ -10,11 +10,6 @@ import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Environment; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; @@ -23,6 +18,12 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager.OnPageChangeListener; + import com.facebook.binaryresource.BinaryResource; import com.facebook.cache.common.CacheKey; import com.facebook.common.executors.CallerThreadExecutor; @@ -41,6 +42,7 @@ import com.gh.common.util.EntranceUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.MessageShareUtils; import com.gh.common.util.NetworkUtils; +import com.gh.common.util.PermissionHelper; import com.gh.common.view.EmptyDrawable; import com.gh.common.view.Gh_RelativeLayout; import com.gh.common.view.Gh_RelativeLayout.OnSingleTapListener; @@ -344,8 +346,10 @@ public class ViewImageActivity extends BaseActivity implements OnPageChangeListe } reportTv.setOnClickListener(v -> { - findImageBM(); - dialog.cancel(); + PermissionHelper.checkStoragePermissionBeforeAction(ViewImageActivity.this, () -> { + findImageBM(); + dialog.cancel(); + }); }); }); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index a159fc11df..4cd260475b 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -18,6 +18,7 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.DownloadDialogHelper; import com.gh.common.util.MtaHelper; import com.gh.common.util.PackageUtils; +import com.gh.common.util.PermissionHelper; import com.gh.common.util.StringUtils; import com.gh.common.view.DownloadDialog; import com.gh.common.view.DownloadProgressBar; @@ -142,20 +143,22 @@ public class DetailViewHolder { break; case NORMAL: case PLUGIN: - if (mGameEntity.getApk().size() == 1) { - ApkEntity apk = mGameEntity.getApk().get(0); - DownloadDialogHelper.findAvailableDialogAndShow(mViewHolder.context, mGameEntity, apk, - () -> { - DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); - }); - } else { - DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, - mGameEntity, - autoDownloadPlatform, - StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), - mName + ":" + mTitle, - mTraceEvent); - } + PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { + if (mGameEntity.getApk().size() == 1) { + ApkEntity apk = mGameEntity.getApk().get(0); + DownloadDialogHelper.findAvailableDialogAndShow(mViewHolder.context, mGameEntity, apk, + () -> { + DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); + }); + } else { + DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, + mGameEntity, + autoDownloadPlatform, + StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), + mName + ":" + mTitle, + mTraceEvent); + } + }); break; case LAUNCH_OR_OPEN: if (mGameEntity.getApk().size() == 1) { @@ -171,19 +174,23 @@ public class DetailViewHolder { break; case INSTALL_PLUGIN: case INSTALL_NORMAL: - if (mDownloadEntity == null) { - mDownloadEntity = DownloadManager.getInstance(mViewHolder.context).getDownloadEntityByUrl(mGameEntity.getApk().get(0).getUrl()); - } - if (mDownloadEntity != null) { - PackageUtils.launchSetup(mViewHolder.context, mDownloadEntity.getPath()); - } + PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { + if (mDownloadEntity == null) { + mDownloadEntity = DownloadManager.getInstance(mViewHolder.context).getDownloadEntityByUrl(mGameEntity.getApk().get(0).getUrl()); + } + if (mDownloadEntity != null) { + PackageUtils.launchSetup(mViewHolder.context, mDownloadEntity.getPath()); + } + }); break; case RESERVABLE: CheckLoginUtils.checkLogin(mViewHolder.context, mEntrance, () -> { - ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance( - mGameEntity.getId(), - () -> DetailDownloadUtils.detailInitDownload(mViewHolder, false)); - dialogFragment.show(((AppCompatActivity) mViewHolder.context).getSupportFragmentManager(), "reserve"); + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(mViewHolder.context, () -> { + ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance( + mGameEntity.getId(), + () -> DetailDownloadUtils.detailInitDownload(mViewHolder, false)); + dialogFragment.show(((AppCompatActivity) mViewHolder.context).getSupportFragmentManager(), "reserve"); + }); }); break; case RESERVED: diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyGameActivity.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyGameActivity.kt index f7a38f85c7..29a30249ba 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyGameActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyGameActivity.kt @@ -2,12 +2,18 @@ package com.gh.gamecenter.mygame import android.content.Context import android.content.Intent +import android.os.Bundle import androidx.fragment.app.Fragment import com.gh.base.BaseActivity_TabLayout import com.halo.assistant.fragment.myconcern.MyConcernFragment class MyGameActivity : BaseActivity_TabLayout() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setNavigationTitle("我的游戏") + } + override fun initFragmentList(fragments: MutableList?) { fragments?.add(MyGameFragment()) fragments?.add(MyConcernFragment()) diff --git a/build.gradle b/build.gradle index fc177fb037..41c6a84420 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,7 @@ buildscript { repositories { google() jcenter() + maven { url 'https://jitpack.io' } maven { url "https://maven.google.com" } maven { url "https://dl.bintray.com/thelasterstar/maven/" } //weiboSDK } @@ -34,6 +35,7 @@ allprojects { repositories { google() jcenter() + maven { url 'https://jitpack.io' } maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } } diff --git a/dependencies.gradle b/dependencies.gradle index 223ad8d70e..cddc3e2de9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -65,6 +65,8 @@ ext { // 权限申请库 easypermissions = "1.0.0" + rxPermissions = "0.10.2" + // httpdns = "1.1.3"; expandableLayout = "2.9.2"