diff --git a/app/build.gradle b/app/build.gradle index ad59d0593d..932f70742c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -315,7 +315,7 @@ dependencies { implementation "com.ethanhua:skeleton:${skeleton}" implementation "io.supercharge:shimmerlayout:${shimmerlayout}" implementation "com.tencent.mm.opensdk:wechat-sdk-android-without-mta:${mta}" - implementation "com.walkud.rom.checker:RomChecker:${romChecker}" + implementation "com.github.nichbar:AndroidRomChecker:${romChecker}" debugImplementation "com.github.nichbar.chucker:library:$chucker" releaseImplementation "com.github.nichbar.chucker:library-no-op:$chucker" diff --git a/app/src/main/java/com/gh/base/AppUncaughtHandler.java b/app/src/main/java/com/gh/base/AppUncaughtHandler.java index b1736e5df6..1b6fc25a5f 100644 --- a/app/src/main/java/com/gh/base/AppUncaughtHandler.java +++ b/app/src/main/java/com/gh/base/AppUncaughtHandler.java @@ -25,6 +25,7 @@ import java.lang.Thread.UncaughtExceptionHandler; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import java.util.concurrent.TimeoutException; import io.sentry.Sentry; @@ -38,19 +39,21 @@ public class AppUncaughtHandler implements UncaughtExceptionHandler { } @Override - public void uncaughtException(Thread thread, Throwable ex) { - new Thread(new Runnable() { - @Override - public void run() { + public void uncaughtException(Thread t, Throwable e) { + if (("FinalizerWatchdogDaemon").equals(t.getName()) + && e instanceof TimeoutException) { + // ignore timeoutException + // detail can be found in this didi tech blog post https://mp.weixin.qq.com/s?__biz=MzU1ODEzNjI2NA==&mid=2247487185&idx=2&sn=cf2d9e10053f625bde0f61d246f14870&source=41#wechat_redirect + } else { + new Thread(() -> { Looper.prepare(); Utils.toast(mContext.getApplicationContext(), "\"光环助手\"发生错误"); Looper.loop(); - } - }); - - saveLocalLog(mContext, ex); - Sentry.captureException(ex); - restart(mContext); + }); + saveLocalLog(mContext, e); + restart(mContext); + Sentry.captureException(e); + } } public static void restart(final Context context) { diff --git a/app/src/main/java/com/gh/base/fragment/BaseDialogFragment.java b/app/src/main/java/com/gh/base/fragment/BaseDialogFragment.java index fd5cfc1f2d..4c41dfe77a 100644 --- a/app/src/main/java/com/gh/base/fragment/BaseDialogFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseDialogFragment.java @@ -9,6 +9,8 @@ import com.gh.gamecenter.R; import com.lightgame.utils.RuntimeUtils; import com.lightgame.utils.Utils; +import java.lang.reflect.Field; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; @@ -75,7 +77,22 @@ public class BaseDialogFragment extends DialogFragment { transaction.show(fragment); transaction.commit(); } else { - super.show(manager, tag); + try { + Class clazz = DialogFragment.class; + Field dismissed = clazz.getDeclaredField("mDismissed"); + dismissed.setAccessible(true); + dismissed.set(this, false); + + Field shownByMe = clazz.getDeclaredField("mShownByMe"); + shownByMe.setAccessible(true); + shownByMe.set(this, true); + FragmentTransaction transaction = manager.beginTransaction(); + transaction.add(this, tag); + transaction.commitAllowingStateLoss(); + } catch (Exception e) { + super.show(manager, tag); + e.printStackTrace(); + } } } } diff --git a/app/src/main/java/com/gh/common/dialog/BaseTrackableDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/BaseTrackableDialogFragment.kt index 2e896edf8c..43d9b32a0d 100644 --- a/app/src/main/java/com/gh/common/dialog/BaseTrackableDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/BaseTrackableDialogFragment.kt @@ -4,6 +4,8 @@ import android.content.DialogInterface import android.os.Bundle import android.view.KeyEvent import android.view.View +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager import com.gh.common.util.MtaHelper import com.lightgame.dialog.BaseDialogFragment import java.util.concurrent.atomic.AtomicBoolean @@ -63,4 +65,29 @@ abstract class BaseTrackableDialogFragment : BaseDialogFragment() { open fun trackWithBasicDeviceInfo() = false + + override fun show(manager: FragmentManager, tag: String?) { + val fragment = manager.findFragmentByTag(tag) + if (fragment != null) { + val transaction = manager.beginTransaction() + transaction.show(fragment) + transaction.commit() + } else { + try { + val clazz: Class<*> = DialogFragment::class.java + val dismissed = clazz.getDeclaredField("mDismissed") + dismissed.isAccessible = true + dismissed[this] = false + val shownByMe = clazz.getDeclaredField("mShownByMe") + shownByMe.isAccessible = true + shownByMe[this] = true + val transaction = manager.beginTransaction() + transaction.add(this, tag) + transaction.commitAllowingStateLoss() + } catch (e: Exception) { + super.show(manager, tag) + e.printStackTrace() + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/exposure/ExposureManager.kt b/app/src/main/java/com/gh/common/exposure/ExposureManager.kt index 28ed6b47f2..3d29a4f591 100644 --- a/app/src/main/java/com/gh/common/exposure/ExposureManager.kt +++ b/app/src/main/java/com/gh/common/exposure/ExposureManager.kt @@ -1,10 +1,8 @@ package com.gh.common.exposure -import android.database.sqlite.SQLiteFullException import com.aliyun.sls.android.sdk.model.LogGroup import com.gh.common.exposure.time.TimeUtil import com.gh.common.util.toJson -import com.gh.common.util.toastInInternalRelease import com.gh.common.util.tryWithDefaultCatch import com.gh.gamecenter.BuildConfig import com.gh.loghub.LgLOG @@ -42,12 +40,9 @@ object ExposureManager { loghubHelper.init(HaloApp.getInstance().application, ENDPOINT, PROJECT, LOG_STORE) { TimeUtil.currentTimeMillis() } exposureExecutor = excutor exposureExecutor?.execute { - try { + tryWithDefaultCatch { val eventList = exposureDao.getAll() exposureSet.addAll(eventList) - } catch (e: SQLiteFullException) { - e.printStackTrace() - toastInInternalRelease("数据库/磁盘已满,初始化曝光失败") } } } diff --git a/app/src/main/java/com/gh/common/loghub/LoghubUtils.kt b/app/src/main/java/com/gh/common/loghub/LoghubUtils.kt index f9485c3019..8fb66afc6d 100644 --- a/app/src/main/java/com/gh/common/loghub/LoghubUtils.kt +++ b/app/src/main/java/com/gh/common/loghub/LoghubUtils.kt @@ -26,8 +26,10 @@ object LoghubUtils { loghubEventExecutor = executor loghubEventExecutor?.execute { - val eventList = loghubEventDao.getAll() - loghubEventSet.addAll(eventList) + tryWithDefaultCatch { + val eventList = loghubEventDao.getAll() + loghubEventSet.addAll(eventList) + } } } diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt index 115df3997a..69398d4f86 100644 --- a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt +++ b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.Window import android.widget.ProgressBar import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import com.g00fy2.versioncompare.Version @@ -23,6 +24,7 @@ import com.gh.gamecenter.entity.TrackableEntity import com.halo.assistant.HaloApp import com.lightgame.download.* import com.lightgame.utils.Utils +import java.lang.ref.WeakReference import java.text.DecimalFormat class SimulatorDownloadManager private constructor() { @@ -34,6 +36,7 @@ class SimulatorDownloadManager private constructor() { private var appProgressFilling: View? = null private var appProgressAnchor: View? = null private var downloadDialog: Dialog? = null + private var mContextRef: WeakReference? = null private var simulatorLocation: SimulatorLocation? = null private var simulator: SimulatorEntity? = null @@ -71,7 +74,10 @@ class SimulatorDownloadManager private constructor() { val startTime = downloadEntity.getMetaExtra(Constants.SIMULATOR_DOWNLOAD_START_TIME) LogUtils.uploadSimulatorDownload("simulator_download_complete", fileName, simulator?.id, downloadEntity.name, gameId, locationStr, downloadType, startTime) DownloadManager.getInstance(HaloApp.getInstance().application).cancel(downloadEntity.url, false, true) - downloadDialog?.dismiss() + val activity = mContextRef?.get() as? AppCompatActivity + if (activity?.isFinishing == false) { + downloadDialog?.dismiss() + } } DownloadStatus.neterror == downloadEntity.status -> { ToastUtils.showToast("网络不稳定,下载任务已暂停") @@ -96,6 +102,7 @@ class SimulatorDownloadManager private constructor() { fun showDownloadDialog(context: Context?, simulator: SimulatorEntity?, location: SimulatorLocation, gameId: String = "", gameName: String = "", cancelCallback: (() -> Unit)? = null) { if (context == null) return + mContextRef = WeakReference(context) this.simulatorLocation = location this.simulator = simulator this.gameId = gameId @@ -154,7 +161,10 @@ class SimulatorDownloadManager private constructor() { view.findViewById(R.id.app_tv_cancel).setOnClickListener { DownloadManager.getInstance(context).pause(simulator?.apk?.url) MtaHelper.onEvent("模拟器下载", "下载中弹窗", "点击关闭") - downloadDialog?.dismiss() + val activity = mContextRef?.get() as? AppCompatActivity + if (activity?.isFinishing == false) { + downloadDialog?.dismiss() + } } downloadDialog?.setOnDismissListener { 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 f8eeabeaa3..fb0471340d 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -134,7 +134,7 @@ public class DownloadItemUtils { // 已预约 holder.gameDownloadBtn.setVisibility(View.VISIBLE); holder.gameDownloadBtn.setText("已预约"); - holder.gameDownloadBtn.setTextColor(ContextCompat.getColor(holder.gameDes.getContext(),R.color.aaaaaa)); + holder.gameDownloadBtn.setTextColor(ContextCompat.getColor(holder.gameDes.getContext(), R.color.aaaaaa)); holder.gameDownloadBtn.setBackgroundResource(R.drawable.button_round_f5f5f5); } } @@ -580,7 +580,9 @@ public class DownloadItemUtils { final String location, @Nullable final ExposureEvent traceEvent) { String str = downloadBtn.getText().toString(); - ApkEntity apk = gameEntity.getApk().get(0); + if (gameEntity.getApk().isEmpty()) return; + ApkEntity apk = ExtensionsKt.safelyGetInRelease(gameEntity.getApk(), 0); + if (apk == null) return; if (str.equals(context.getString(R.string.download))) { // 先弹下载弹窗(如果需要的话) diff --git a/app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt b/app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt index ae7a761350..3f26d55470 100644 --- a/app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt +++ b/app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt @@ -5,6 +5,7 @@ import android.app.Application import android.database.sqlite.SQLiteFullException import com.gh.common.util.toRequestBody import com.gh.common.util.toastInInternalRelease +import com.gh.common.util.tryWithDefaultCatch import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager @@ -29,12 +30,9 @@ object VideoRecordUtils { videoRecordExecutor = executor videoRecordExecutor?.execute { - try { + tryWithDefaultCatch { val recordList = videoRecordDao.getAll() videoRecordSet.addAll(recordList) - } catch (e: SQLiteFullException) { - e.printStackTrace() - toastInInternalRelease("数据库/磁盘已满,写入视频新日志失败") } } } diff --git a/app/src/main/java/com/gh/common/view/FixGridLayoutManager.java b/app/src/main/java/com/gh/common/view/FixGridLayoutManager.java new file mode 100644 index 0000000000..6d7e4ccf3f --- /dev/null +++ b/app/src/main/java/com/gh/common/view/FixGridLayoutManager.java @@ -0,0 +1,33 @@ +package com.gh.common.view; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class FixGridLayoutManager extends GridLayoutManager { + + + public FixGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public FixGridLayoutManager(Context context, int spanCount) { + super(context, spanCount); + } + + public FixGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) { + super(context, spanCount, orientation, reverseLayout); + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/view/FixedScrollView.kt b/app/src/main/java/com/gh/common/view/FixedScrollView.kt index dbcfdb2525..0627f3ffd1 100644 --- a/app/src/main/java/com/gh/common/view/FixedScrollView.kt +++ b/app/src/main/java/com/gh/common/view/FixedScrollView.kt @@ -4,6 +4,7 @@ import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import android.widget.ScrollView +import java.lang.IllegalArgumentException /** * 不能滑动的 ScrollView @@ -11,10 +12,16 @@ import android.widget.ScrollView class FixedScrollView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : ScrollView(context, attrs) { override fun onTouchEvent(ev: MotionEvent?): Boolean { - return when (ev?.action) { - MotionEvent.ACTION_DOWN -> true - else -> super.onTouchEvent(ev) + // super.onTouchEvent may cause IllegalArgumentException which is crazy! + try { + return when (ev?.action) { + MotionEvent.ACTION_DOWN -> true + else -> super.onTouchEvent(ev) + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() } + return false } override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { diff --git a/app/src/main/java/com/gh/common/view/ReserveDialog.kt b/app/src/main/java/com/gh/common/view/ReserveDialog.kt index d1311428b7..94c6ddb87f 100644 --- a/app/src/main/java/com/gh/common/view/ReserveDialog.kt +++ b/app/src/main/java/com/gh/common/view/ReserveDialog.kt @@ -25,6 +25,9 @@ class ReserveDialog : BaseDialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val binding: DialogReserveBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_reserve, container, false) + + mReserveList = arguments?.getParcelableArrayList(RESERVE_LIST) ?: arrayListOf() + binding.title.text = resources.getString(R.string.dialog_reserve_title, mReserveList.size).fromHtml() binding.more.visibility = if (mReserveList.size > 4) { View.VISIBLE @@ -74,8 +77,13 @@ class ReserveDialog : BaseDialogFragment() { } companion object { + const val RESERVE_LIST = "reserve_list" + @JvmStatic - fun getInstance(reserveList: List) = ReserveDialog().apply { mReserveList = reserveList } + fun getInstance(reserveList: List) = ReserveDialog().apply { + arguments = Bundle() + arguments?.putParcelableArrayList(RESERVE_LIST, ArrayList(reserveList)) + } } } diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index c7cd482c13..6f60a3a914 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -647,20 +647,22 @@ public class DownloadManager implements DownloadStatusListener { // startDownloadService(entry, DownloadStatus.cancel); // 将原来安装完成后在 downloadService 完成的功能放到这里,尝试避免因为 ANR 造成闪退 - mDownloadDao.removeErrorMessage(entry.getUrl()); - - DownloadTask task = DataChanger.INSTANCE.getDownloadingTasks().get(entry.getUrl()); - if (task != null) { - task.cancel(); - // 改任务队列的状态 - DataChanger.INSTANCE.getDownloadingTasks().remove(entry.getUrl()); + AppExecutor.getUiExecutor().executeWithDelay(() -> { + mDownloadDao.removeErrorMessage(entry.getUrl()); + + DownloadTask task = DataChanger.INSTANCE.getDownloadingTasks().get(entry.getUrl()); + if (task != null) { + task.cancel(); + // 改任务队列的状态 + DataChanger.INSTANCE.getDownloadingTasks().remove(entry.getUrl()); + DataChanger.INSTANCE.notifyDataChanged(entry); + } + DataChanger.INSTANCE.getDownloadEntries().remove(entry.getUrl()); DataChanger.INSTANCE.notifyDataChanged(entry); - } - DataChanger.INSTANCE.getDownloadEntries().remove(entry.getUrl()); - DataChanger.INSTANCE.notifyDataChanged(entry); - DownloadStatusManager.getInstance().onTaskCancelled(entry); - - Utils.log(DownloadManager.class.getSimpleName(), "cancel"); + DownloadStatusManager.getInstance().onTaskCancelled(entry); + + Utils.log(DownloadManager.class.getSimpleName(), "cancel"); + }, 0); } } diff --git a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt index dacd5da008..51155286fa 100644 --- a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt @@ -145,7 +145,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { // init slide val outMetrics = DisplayMetrics() - windowManager.defaultDisplay.getMetrics(outMetrics) + windowManager?.defaultDisplay?.getMetrics(outMetrics) val widthPixels = outMetrics.widthPixels mLimitWidth = if (NetworkUtils.isWifiOr4GConnected(this)) { widthPixels * 2 diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index 0f7231a3e1..b31efe1081 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -389,7 +389,12 @@ public class SkipActivity extends BaseActivity { } } else if ("market".equals(uri.getScheme())) { String host = uri.getHost(); - String id = uri.getQueryParameter("id"); + String id = ""; + try { + id = uri.getQueryParameter("id"); + } catch (UnsupportedOperationException e) { + e.printStackTrace(); + } if (host != null) { if ("details".equals(host)) { bundle = new Bundle(); diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 030273bd25..2386f8aa98 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -286,12 +286,12 @@ public class SplashScreenActivity extends BaseActivity { // 跳转到主界面 private void launchMainActivity() { HaloApp.getInstance().postInit(true); - - getUniqueId(); getAd(); prefetchData(); + uploadTeaAndGdtData(); + Bundle bundle = getIntent().getExtras(); Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); if (bundle != null) { diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index d2a85af41d..fc891ec6e2 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -1272,7 +1272,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall public String readFromFile() { if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { - + if (getExternalFilesDir(null) == null) return "SD Card error"; File file = new File(getExternalFilesDir(null).getPath() + "/log"); if (file.isFile()) return "检测log文件夹是文件"; diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 87b2e39e73..a5d3fadd12 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -81,7 +81,11 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { mWeiboShareAPI = new WbShareHandler(this); mWeiboShareAPI.registerApp(); - loadIconAndShare(shareIcon); + if (shareIcon != null) { + loadIconAndShare(shareIcon); + } else { + onWbShareFail(); + } } 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 867377c651..6a3ba8446d 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 @@ -107,6 +107,7 @@ public class DetailViewHolder { @Override public void onClick(View v) { // 这个 switch 纯粹是为了 MTA和上报光能任务 统计用的 + if (mViewHolder.mDownloadPb.getDownloadType() == null) return; switch (mViewHolder.mDownloadPb.getDownloadType()) { case DOWNLOADING_PLUGIN: MtaHelper.onEvent("游戏详情_新", "插件化中", mGameEntity.getName()); @@ -297,10 +298,12 @@ public class DetailViewHolder { Utils.toast(mViewHolder.context, "正在加急更新版本,敬请后续留意"); break; default: - Intent intent = DownloadManagerActivity.getDownloadMangerIntent(mViewHolder.context, - mGameEntity.getApk().get(0).getUrl(), - StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])")); - mViewHolder.context.startActivity(intent); + if (!mGameEntity.getApk().isEmpty()) { + Intent intent = DownloadManagerActivity.getDownloadMangerIntent(mViewHolder.context, + mGameEntity.getApk().get(0).getUrl(), + StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])")); + mViewHolder.context.startActivity(intent); + } break; } } diff --git a/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java b/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java index d0a9fc4b26..91e8751e94 100644 --- a/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java +++ b/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java @@ -8,6 +8,7 @@ import com.j256.ormlite.dao.Dao; import java.sql.SQLException; import java.util.List; +// TODO 这个数据库其实没有用了,上传到 loghub 已经有相关的逻辑处理,有空删掉它 public class DataCollectionDao { private DatabaseHelper helper; @@ -17,7 +18,7 @@ public class DataCollectionDao { try { helper = DatabaseHelper.getHelper(context); dao = helper.getDao(DataCollectionInfo.class); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -28,7 +29,7 @@ public class DataCollectionDao { public List findByType(String type) { try { return dao.queryForEq("type", type); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -40,7 +41,7 @@ public class DataCollectionDao { public void add(DataCollectionInfo entity) { try { dao.create(entity); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { // java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: e.printStackTrace(); } @@ -52,7 +53,7 @@ public class DataCollectionDao { public void delete(String id) { try { dao.deleteById(id); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { // java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: e.printStackTrace(); } @@ -64,7 +65,7 @@ public class DataCollectionDao { public void delete(List ids) { try { dao.deleteIds(ids); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -75,7 +76,7 @@ public class DataCollectionDao { public DataCollectionInfo find(String id) { try { return dao.queryForId(id); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -87,7 +88,7 @@ public class DataCollectionDao { public List getAll() { try { return dao.queryForAll(); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -99,7 +100,7 @@ public class DataCollectionDao { public List getClickData() { try { return dao.queryForEq("type", "click-item"); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -111,7 +112,7 @@ public class DataCollectionDao { public void update(DataCollectionInfo entity) { try { dao.update(entity); - } catch (SQLException | IllegalStateException e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/app/src/main/java/com/gh/gamecenter/db/FilterDao.java b/app/src/main/java/com/gh/gamecenter/db/FilterDao.java index 6b4579782f..746cd73fad 100644 --- a/app/src/main/java/com/gh/gamecenter/db/FilterDao.java +++ b/app/src/main/java/com/gh/gamecenter/db/FilterDao.java @@ -19,7 +19,7 @@ public class FilterDao { try { helper = DatabaseHelper.getHelper(context); dao = helper.getDao(PackageInfo.class); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -32,7 +32,7 @@ public class FilterDao { if (list != null && list.size() != 0) { return list.get(0).getTime(); } - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } return 0; @@ -44,7 +44,7 @@ public class FilterDao { if (filterEntity != null) { return true; } - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } return false; @@ -56,7 +56,7 @@ public class FilterDao { public void add(PackageInfo entity) { try { dao.create(entity); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -68,7 +68,7 @@ public class FilterDao { public void addAll(List list) { try { dao.create(list); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -76,7 +76,7 @@ public class FilterDao { public void deleteAll(List list) { try { dao.delete(list); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -87,7 +87,7 @@ public class FilterDao { public void delete(String packageName) { try { dao.deleteById(packageName); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -98,7 +98,7 @@ public class FilterDao { public List getAll() { try { return dao.queryForAll(); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -110,7 +110,7 @@ public class FilterDao { public long getCount() { try { return dao.countOf(); - } catch (SQLiteException | SQLException e) { + } catch (Exception e) { e.printStackTrace(); } return 0; diff --git a/app/src/main/java/com/gh/gamecenter/db/SearchHistoryDao.java b/app/src/main/java/com/gh/gamecenter/db/SearchHistoryDao.java index 3b191c2ae9..7625a2ce28 100644 --- a/app/src/main/java/com/gh/gamecenter/db/SearchHistoryDao.java +++ b/app/src/main/java/com/gh/gamecenter/db/SearchHistoryDao.java @@ -6,7 +6,6 @@ import com.gh.gamecenter.db.info.SearchHistoryInfo; import com.j256.ormlite.dao.CloseableIterator; import com.j256.ormlite.dao.Dao; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -20,7 +19,7 @@ public class SearchHistoryDao { try { helper = DatabaseHelper.getHelper(context); dao = helper.getDao(SearchHistoryInfo.class); - } catch (SQLException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -28,7 +27,7 @@ public class SearchHistoryDao { public void add(String item) { try { dao.createOrUpdate(new SearchHistoryInfo(item)); - } catch (SQLException e) { + } catch (Exception e) { e.printStackTrace(); } @@ -37,7 +36,7 @@ public class SearchHistoryDao { public void delete(String item) { try { dao.deleteById(item); - } catch (SQLException e) { + } catch (Exception e) { e.printStackTrace(); } @@ -49,7 +48,7 @@ public class SearchHistoryDao { while (iterator.hasNext()) { try { dao.delete(iterator.next()); - } catch (SQLException e) { + } catch (Exception e) { e.printStackTrace(); } @@ -66,7 +65,7 @@ public class SearchHistoryDao { while (hisIterator.hasNext()) { history.add(hisIterator.next().getItem()); } - } catch (SQLException e) { + } catch (Exception e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java index 326ce99ba7..f12b1080af 100644 --- a/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java @@ -112,7 +112,11 @@ public class InstalledGameFragmentAdapter extends BaseRecyclerAdapter ids = new ArrayList<>(); - Collections.sort(sortedList, (lhs, rhs) -> { // 按安装时间排序 + Collections.sort(sortedList, (lhs, rhs) -> { + if (rhs == null || lhs == null) { + return 0; + } + // 按安装时间排序 if (rhs.getInstallTime() > lhs.getInstallTime()) { return 1; } else if (rhs.getInstallTime() < lhs.getInstallTime()) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt index 9aea2ccb09..0965e5ff7a 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt @@ -102,8 +102,8 @@ class GameDetailMoreDialog : BaseDialogFragment(), View.OnTouchListener { shareEntrance = ShareUtils.ShareEntrance.plugin } } - shareUtils.shareParamsDetail(requireActivity(), url, gameEntity?.icon, gameEntity?.name, - gameEntity?.brief, shareEntrance, gameEntity?.id ?: "", null) + shareUtils.shareParamsDetail(requireActivity(), url, gameEntity?.icon ?: "", gameEntity?.name + ?: "", gameEntity?.brief ?: "", shareEntrance, gameEntity?.id ?: "", null) return shareUtils } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt index 2934b8c554..b13c351ac8 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt @@ -302,7 +302,7 @@ class RatingAdapter(context: Context, null } else -> { - mEntityList[dataPosition] + mEntityList.safelyGetInRelease(dataPosition) } } if (requestCode == RatingFragment.RATING_PATCH_REQUEST) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/video/TopVideoView.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/video/TopVideoView.kt index 736e749961..795ad6106d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/video/TopVideoView.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/video/TopVideoView.kt @@ -323,7 +323,7 @@ class TopVideoView @JvmOverloads constructor(context: Context, attrs: AttributeS } private fun hideBackBtn() { - mTopContainer.setBackgroundResource(0) + mTopContainer?.setBackgroundResource(0) back.visibility = View.GONE } diff --git a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java index 05a90a8a6e..3a770cfeff 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java @@ -135,7 +135,11 @@ public class UpdateManager { if (DownloadStatus.done.equals(downloadEntity.getStatus())) { DownloadManager.getInstance(mContext).cancel(downloadEntity.getUrl(), false, true); if (downloadDialog != null) { - downloadDialog.dismiss(); + try { + downloadDialog.dismiss(); + } catch (IllegalArgumentException ignored) { + // do nothing + } } if (appEntity != null && appEntity.isForce()) { AppExecutor.getUiExecutor().executeWithDelay(() -> exitApp(), 1000); diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt index 6300aac785..6508cfd37e 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt @@ -114,7 +114,7 @@ class MyReservationAdapter(context: Context, var mViewModel: MyReservationViewMo for (key in positionMap.keys) { if (key.contains(packageName)) { val position = positionMap[key]!! - val game = entityList?.get(position) + val game = entityList?.safelyGetInRelease(position) if (game != null) { positionList.add(GameAndPosition(game, position)) } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt index c75ce3a88a..cb1925cb46 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt @@ -127,7 +127,9 @@ class UserHomeFragment : NormalFragment() { ImageUtils.display(mHomeBinding?.badgeIcon, badge.icon) mHomeBinding?.badgeIcon?.setOnClickListener { DialogUtils.showViewBadgeDialog(requireContext(), Badge(badge.name, badge.icon, badge.actions)) { - directToBadgeWall(requireContext(), mPersonalEntity.id, mPersonalEntity.name, mPersonalEntity.icon) + if (::mPersonalEntity.isInitialized) { + directToBadgeWall(requireContext(), mPersonalEntity.id, mPersonalEntity.name, mPersonalEntity.icon) + } } } return@outside @@ -408,12 +410,16 @@ class UserHomeFragment : NormalFragment() { // 礼仪测试标签 regulationTestContainer.setOnClickListener { - DialogUtils.showPassRegulationDialog(requireContext(), mPersonalEntity.icon) + if (::mPersonalEntity.isInitialized) { + DialogUtils.showPassRegulationDialog(requireContext(), mPersonalEntity.icon) + } } // 徽章标签 badgeContainer.setOnClickListener { - directToBadgeWall(requireContext(), mPersonalEntity.id, mPersonalEntity.name, mPersonalEntity.icon) + if (::mPersonalEntity.isInitialized) { + directToBadgeWall(requireContext(), mPersonalEntity.id, mPersonalEntity.name, mPersonalEntity.icon) + } } userIcon.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt index 43d76aac37..95305fa975 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt @@ -94,14 +94,15 @@ class PersonalityBackgroundFragment : NormalFragment() { if (requestCode == MEDIA_STORE_REQUEST && resultCode == Activity.RESULT_OK) { val selectedPaths = Matisse.obtainPathResult(data) - if (selectedPaths.size > 0) { + if (!selectedPaths.isNullOrEmpty()) { val intent = BackgroundClipActivity.getIntent(requireContext(), selectedPaths[0], mEntrance) startActivityForResult(intent, REQUEST_CODE_IMAGE_CROP) } } else if (requestCode == REQUEST_CODE_IMAGE_CROP && resultCode == Activity.RESULT_OK) { if (data != null) { val imagePath = data.getStringExtra(CropImageActivity.RESULT_CLIP_PATH) - val intent = BackgroundPreviewActivity.getIntent(requireContext(), imagePath ?: "", null) + val intent = BackgroundPreviewActivity.getIntent(requireContext(), imagePath + ?: "", null) requireActivity().startActivityForResult(intent, CHANGE_BACKGROUND_SUCCESS) } } else if (requestCode == CHANGE_BACKGROUND_SUCCESS && resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt index 57ab757637..36588cf620 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.gh.common.util.dip2px import com.gh.common.util.viewModelProvider +import com.gh.common.view.FixGridLayoutManager import com.gh.common.view.GridSpacingItemDecoration import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListAdapter @@ -43,7 +44,7 @@ class UserVideoHistoryFragment : ListFragment() for (uri in uris) { val picturePath = PathUtils.getPath(getApplication(), uri) - if (File(picturePath).length() > ImageUtils.getUploadFileMaxSize()) { - val count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024 - val application: Application = getApplication() - Utils.toast(getApplication(), application.getString(R.string.pic_max_hint, count)) - continue + if (picturePath != null) { + if (File(picturePath).length() > ImageUtils.getUploadFileMaxSize()) { + val count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024 + val application: Application = getApplication() + Utils.toast(getApplication(), application.getString(R.string.pic_max_hint, count)) + continue + } + Utils.log("picturePath = $picturePath") + pictureList.add(picturePath) + } else { + Utils.log("picturePath is null") } - Utils.log("picturePath = $picturePath") - pictureList.add(picturePath) } if (pictureList.size == 0) return diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt index 34bae5b4d1..ff6409f518 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt @@ -189,7 +189,11 @@ class QuestionEditViewModel(application: Application) : AndroidViewModel(applica val cursor = application.contentResolver.query(picUri, filePathColumn, null, null, null) ?: return - cursor.moveToFirst() + val isNull = cursor.moveToFirst() + if (!isNull){ + cursor.close() + continue + } val columnIndex = cursor.getColumnIndex(filePathColumn[0]) val picPath = cursor.getString(columnIndex) diff --git a/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt b/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt index 802c290086..34564891ed 100644 --- a/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt @@ -102,8 +102,11 @@ class BindPhoneFragment : NormalFragment() { // 手机号冲突 mViewModel.phoneBoundLiveData.observe(viewLifecycleOwner, Observer { user -> - val phoneNum: String = mBindPhoneEt.text.toString().trim { it <= ' ' }.replace(" ".toRegex(), "") - val hidePhoneNum = phoneNum.substring(0, 3) + "****" + phoneNum.substring(7, 11) + val phoneNum = mBindPhoneEt.text.toString().trim { it <= ' ' }.replace(" ".toRegex(), "") + var hidePhoneNum = phoneNum + if (phoneNum.length >= 11) { + hidePhoneNum = phoneNum.substring(0, 3) + "****" + phoneNum.substring(7, 11) + } startActivityForResult(BindPhoneActivity.getBindPhoneConflictIntent(requireContext(), hidePhoneNum, user), 0) }) diff --git a/app/src/main/java/com/gh/gamecenter/security/BindPhoneViewModel.kt b/app/src/main/java/com/gh/gamecenter/security/BindPhoneViewModel.kt index 251739c64c..92a6303bdc 100644 --- a/app/src/main/java/com/gh/gamecenter/security/BindPhoneViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/security/BindPhoneViewModel.kt @@ -29,7 +29,7 @@ class BindPhoneViewModel(application: Application) : AndroidViewModel(applicatio var nextLiveData = MutableLiveData() var finishLiveData = MutableLiveData() var phoneBoundLiveData = MutableLiveData() - private lateinit var mServiceId: String + private var mServiceId = "" @SuppressLint("CheckResult") fun bindPhoneOne(phoneNum: String, context: Context) { diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt index 2932d86c3e..f41520ea55 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt @@ -897,7 +897,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } private fun hideBackBtn() { - mTopContainer.setBackgroundResource(0) + mTopContainer?.setBackgroundResource(0) back.visibility = View.GONE } diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt index b43e301cc2..914b3c3bff 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt @@ -281,8 +281,8 @@ class VideoAdapter(val mContext: Context, val mRecyclerView: RecyclerView, val r fun notifyItemByDownload(download: DownloadEntity) { for (i in 0 until videoList.size) { - val videoEntity = videoList[i] - if (videoEntity.game?.id == download.gameId) { + val videoEntity = videoList.safelyGetInRelease(i) + if (videoEntity?.game?.id == download.gameId) { val holder = mRecyclerView.findViewHolderForAdapterPosition(i) setDownloadButton(holder?.itemView as? DetailPlayerView, i) } diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 7312c27cc6..36533f4ae1 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -181,6 +181,8 @@ public class HaloApp extends MultiDexApplication { initDataHelper(); initThirdPartySdk(); + DataUtils.getGid(); + FixedRateJobHelper.begin(); PackageRepository.initData(); diff --git a/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java b/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java index 961c98a3d1..a244ac3446 100644 --- a/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java @@ -53,12 +53,14 @@ public class AboutFragment extends NormalFragment { @Override protected void handleMessage(Message msg) { super.handleMessage(msg); - if (msg.what == 0) { - final String version = (String) msg.obj; - mAboutVersion.setText(StringUtils.buildString("发现新版本 V", version)); - mAboutVersion.setTextColor(ContextCompat.getColor(getContext(), R.color.theme_font)); - } else if (msg.what == 1) { - mAboutVersion.setText(R.string.toast_upload_latest); + if (isAdded()) { + if (msg.what == 0) { + final String version = (String) msg.obj; + mAboutVersion.setText(StringUtils.buildString("发现新版本 V", version)); + mAboutVersion.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)); + } else if (msg.what == 1) { + mAboutVersion.setText(R.string.toast_upload_latest); + } } } diff --git a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java index 711a08f62d..f645853f3b 100644 --- a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java @@ -352,9 +352,11 @@ public class WebFragment extends NormalFragment implements IScrollable { // 页面里的下载跳转到自带浏览器 mWebView.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> { - Uri uri = Uri.parse(url); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - startActivity(intent); + if (isAdded()) { + Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + startActivity(intent); + } }); //设置加载进度条 diff --git a/dependencies.gradle b/dependencies.gradle index 2a8ecb1268..219a97a7f8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -100,7 +100,7 @@ ext { skeleton = "1.1.1" shimmerlayout = "2.1.0" mta = "5.3.1" - romChecker = "1.0.0" + romChecker = "1.0.1" oss = "2.9.2" toolargetool = "0.2.1@aar" chart = "3.1.0"