diff --git a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt index 56e218f15d..2de508afcb 100644 --- a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt +++ b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt @@ -7,6 +7,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.os.Build +import android.os.Handler import androidx.core.app.NotificationCompat import com.gh.gamecenter.R import com.halo.assistant.HaloApp @@ -24,6 +25,9 @@ object DownloadNotificationHelper { const val ACTION_INSTALL = "com.gh.gamecenter.INSTALL" const val ACTION_DOWNLOAD = "com.gh.gamecenter.DOWNLOAD" + private var mCreatedNotificationGroup = false + private val mHandler = Handler() + private fun getNotificationManager(): NotificationManager { return HaloApp.getInstance().application.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager } @@ -51,15 +55,6 @@ object DownloadNotificationHelper { notificationManager.createNotificationChannel(channel) } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val groupBuilder = NotificationCompat.Builder(HaloApp.getInstance().application, DOWNLOAD_CHANNEL_ID) - .setSmallIcon(R.mipmap.logo) - .setGroup(DOWNLOAD_GROUP_KEY) - .setStyle(NotificationCompat.BigTextStyle().bigText("下载任务")) - .setGroupSummary(true) - notificationManager.notify(DOWNLOAD_NOTIFICATION_FOLD_ID, groupBuilder.build()) - } - val builder = NotificationCompat.Builder(HaloApp.getInstance().application, DOWNLOAD_CHANNEL_ID) .setContentTitle(entity.name) .setSmallIcon(R.mipmap.logo) @@ -73,7 +68,9 @@ object DownloadNotificationHelper { SpeedUtils.getRemainTime(entity.size, entity.progress, entity.speed * 1024))) DownloadStatus.done -> builder.setContentText("下载完成,点击立即安装") DownloadStatus.waiting -> builder.setContentText("等待中") - DownloadStatus.subscribe -> builder.setContentText("已暂停,连接WiFi自动下载") + DownloadStatus.subscribe, + DownloadStatus.timeout, + DownloadStatus.neterror -> builder.setContentText("已暂停,连接WiFi自动下载") else -> builder.setContentText("暂停中") } @@ -86,15 +83,37 @@ object DownloadNotificationHelper { val notification = builder.build() notification.flags = notification.flags or Notification.FLAG_NO_CLEAR - // fuck,使用tag会影响折叠的最小值 if (entity.status == DownloadStatus.delete || entity.status == DownloadStatus.cancel || entity.status == DownloadStatus.hijack || - entity.status == DownloadStatus.notfound) { + entity.status == DownloadStatus.notfound || + entity.status == DownloadStatus.overflow) { notificationManager.cancel(downloadNotificationId) } else { - // todo 个别手机会丢失部分刷新数据(redmi k20 pro) - notificationManager.notify(downloadNotificationId, notification) + if (entity.status != DownloadStatus.downloading) { + // 刷新过于频繁,部分通知会丢失,对一个特殊状态做延迟处理 + mHandler.postDelayed({ + notificationManager.notify(downloadNotificationId, notification) + }, 1000) + } else { + notificationManager.notify(downloadNotificationId, notification) + } + } + + if (!mCreatedNotificationGroup) createNotificationGroup() + } + + private fun createNotificationGroup() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + mCreatedNotificationGroup = true + val groupBuilder = NotificationCompat.Builder(HaloApp.getInstance().application, DOWNLOAD_CHANNEL_ID) + .setSmallIcon(R.mipmap.logo) + .setGroup(DOWNLOAD_GROUP_KEY) + .setGroupSummary(true) + .setStyle(NotificationCompat.BigTextStyle().bigText("下载任务")) + val groupNotification = groupBuilder.build() + groupNotification.flags = groupNotification.flags or Notification.FLAG_NO_CLEAR + getNotificationManager().notify(DOWNLOAD_NOTIFICATION_FOLD_ID, groupNotification) } } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 99aa4c4ff8..a03a962c69 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -25,6 +25,9 @@ import android.view.View; import android.view.Window; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModelProviders; + import com.gh.base.AppUncaughtHandler; import com.gh.base.BaseActivity; import com.gh.base.fragment.BaseFragment_ViewPager; @@ -128,8 +131,6 @@ import java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModelProviders; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; @@ -165,7 +166,7 @@ public class MainActivity extends BaseActivity { private boolean isSkipped = false; public static boolean isNewFirstLaunch; - public String uuid= UUID.randomUUID().toString(); + public String uuid = UUID.randomUUID().toString(); private Handler handler = new Handler(); // 黄壮华 添加观察者 修改2015/8/15 @@ -618,7 +619,7 @@ public class MainActivity extends BaseActivity { this::finish); return true; } - if(!mMainWrapperFragment.onHandleBackPressed()) { + if (!mMainWrapperFragment.onHandleBackPressed()) { System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); mHits[mHits.length - 1] = SystemClock.uptimeMillis(); if (mHits[0] >= (SystemClock.uptimeMillis() - 1000)) {