From a38ff0a6c361f40f0cc27a91cdc63afa813e1030 Mon Sep 17 00:00:00 2001 From: HuanChengFly <609486518@qq.com> Date: Sat, 14 Nov 2020 15:51:04 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E4=BC=98=E5=8C=96=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E7=AD=BE=E5=88=B0=E7=A3=81=E8=B4=B4=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tieba/post/services/OKSignService.kt | 68 ++++++++++++++++--- .../post/services/OKSignTileService.java | 2 +- app/src/main/res/values/strings.xml | 3 + 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignService.kt b/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignService.kt index ccb22cad..4572c75a 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignService.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignService.kt @@ -7,8 +7,10 @@ import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.os.Binder import android.os.Build import android.os.Handler +import android.os.IBinder import android.widget.Toast import androidx.core.app.NotificationCompat import com.huanchengfly.tieba.post.R @@ -32,7 +34,48 @@ import java.util.concurrent.ThreadLocalRandom class OKSignService : IntentService(TAG) { private val signData: MutableList = ArrayList() private var position = 0 + private var successCount = 0 lateinit var manager: NotificationManager + private var okSignProgressListener: OKSignProgressListener? = null + + fun setProgressListener(listener: OKSignProgressListener?) { + okSignProgressListener = listener + } + + interface OKSignProgressListener { + fun onStart( + total: Int + ) + + fun onFinish( + success: Boolean, + signedCount: Int, + total: Int + ) + + fun onProgress( + signResultBean: SignResultBean, + current: Int, + total: Int + ) + + fun onFailure( + current: Int, + total: Int, + errorCode: Int, + errorMsg: String + ) + } + + inner class OKSignBinder : Binder() { + fun getService(): OKSignService { + return this@OKSignService + } + } + + override fun onBind(intent: Intent?): IBinder? { + return OKSignBinder() + } override fun onCreate() { super.onCreate() @@ -48,12 +91,14 @@ class OKSignService : IntentService(TAG) { private fun startSign() { if (signData.size > 0) { + okSignProgressListener?.onStart(signData.size) position = 0 sign(signData[position]) updateNotification("即将开始签到", null, 100, 100, true) Toast.makeText(this@OKSignService, "签到已开始,可在通知栏查看进度", Toast.LENGTH_SHORT).show() } else { - updateNotification("签到完成", "没有可签到的吧", Intent(this, MainActivity::class.java)) + okSignProgressListener?.onFinish(true, 0, 0) + updateNotification(getString(R.string.title_oksign_finish), "没有可签到的吧", Intent(this, MainActivity::class.java)) stopForeground(true) } } @@ -61,7 +106,7 @@ class OKSignService : IntentService(TAG) { private fun buildNotification(title: String, text: String?): NotificationCompat.Builder { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel("1", - "一键签到", NotificationManager.IMPORTANCE_LOW) + getString(R.string.title_oksign), NotificationManager.IMPORTANCE_LOW) channel.enableLights(false) channel.setShowBadge(false) manager.createNotificationChannel(channel) @@ -69,7 +114,7 @@ class OKSignService : IntentService(TAG) { return NotificationCompat.Builder(this, "1") .setContentText(text) .setContentTitle(title) - .setSubText("一键签到") + .setSubText(getString(R.string.title_oksign)) .setSmallIcon(R.drawable.ic_oksign) .setWhen(System.currentTimeMillis()) .setAutoCancel(true) @@ -106,15 +151,18 @@ class OKSignService : IntentService(TAG) { TiebaApi.getInstance().sign(kw, data.tbs).enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { if (t is TiebaException) { + okSignProgressListener?.onFailure(position + 1, signData.size, t.code, "${t.message}") updateNotification(getString(R.string.title_signing_progress, position, signData.size), "${kw}吧 × (${t.code}) ${t.message}", position, signData.size, false) } else { + okSignProgressListener?.onFailure(position + 1, signData.size, -1, "${t.message}") updateNotification(getString(R.string.title_signing_progress, position, signData.size), "${kw}吧 × ${t.message}", position, signData.size, false) } if (position < signData.size - 1) { position += 1 handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong()) } else { - updateNotification("签到完成", getString(R.string.text_oksign_done, signData.size), Intent(this@OKSignService, MainActivity::class.java)) + okSignProgressListener?.onFinish(false, successCount, signData.size) + updateNotification(getString(R.string.title_oksign_finish), getString(R.string.text_oksign_done, signData.size), Intent(this@OKSignService, MainActivity::class.java)) sendBroadcast(Intent(ACTION_SIGN_SUCCESS_ALL)) stopForeground(true) } @@ -124,6 +172,7 @@ class OKSignService : IntentService(TAG) { val signResultBean = response.body() ?: return if (position < signData.size - 1) { position += 1 + okSignProgressListener?.onProgress(signResultBean, position + 1, signData.size) if (signResultBean.userInfo != null) { updateNotification(getString(R.string.title_signing_progress, position, signData.size), kw + "吧 ✓ 经验 +" + signResultBean.userInfo.signBonusPoint, position, signData.size, false) } else { @@ -131,12 +180,12 @@ class OKSignService : IntentService(TAG) { } handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong()) } else { - updateNotification("签到完成", getString(R.string.text_oksign_done, signData.size), Intent(this@OKSignService, MainActivity::class.java)) + okSignProgressListener?.onFinish(true, successCount, signData.size) + updateNotification(getString(R.string.title_oksign_finish), getString(R.string.text_oksign_done, signData.size), Intent(this@OKSignService, MainActivity::class.java)) sendBroadcast(Intent(ACTION_SIGN_SUCCESS_ALL)) stopForeground(true) } } - }) } @@ -149,7 +198,8 @@ class OKSignService : IntentService(TAG) { override fun onSuccess(data: MyInfoBean) { TiebaApi.getInstance().forumRecommend().enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { - updateNotification("签到失败", t.message ?: "未知错误", false) + updateNotification(getString(R.string.title_oksign_fail), t.message + ?: getString(R.string.error_unknown), false) stopForeground(true) } @@ -167,12 +217,12 @@ class OKSignService : IntentService(TAG) { } override fun onFailure(code: Int, error: String) { - updateNotification("签到失败", error, false) + updateNotification(getString(R.string.title_oksign_fail), error, false) stopForeground(true) } }) } else { - updateNotification("签到失败", "请先登录", Intent(this, LoginActivity::class.java)) + updateNotification(getString(R.string.title_oksign_fail), getString(R.string.text_login_first), Intent(this, LoginActivity::class.java)) stopForeground(true) } } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignTileService.java b/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignTileService.java index 18772021..c9c80f69 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignTileService.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/services/OKSignTileService.java @@ -1 +1 @@ -package com.huanchengfly.tieba.post.services; import android.annotation.TargetApi; import android.content.Intent; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import com.huanchengfly.tieba.post.activities.OKSignActivity; @TargetApi(24) public class OKSignTileService extends TileService { @Override public void onStartListening() { super.onStartListening(); if (getQsTile() == null) { return; } getQsTile().setState(Tile.STATE_ACTIVE); getQsTile().updateTile(); } @Override public void onStopListening() { super.onStopListening(); if (getQsTile() == null) { return; } getQsTile().setState(Tile.STATE_INACTIVE); getQsTile().updateTile(); } @Override public void onClick() { super.onClick(); startActivity(new Intent(this, OKSignActivity.class) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } } \ No newline at end of file +package com.huanchengfly.tieba.post.services; import android.annotation.TargetApi; import android.content.Intent; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import com.huanchengfly.tieba.post.activities.OKSignActivity; @TargetApi(24) public class OKSignTileService extends TileService { @Override public void onStartListening() { super.onStartListening(); if (getQsTile() == null) { return; } getQsTile().setState(Tile.STATE_INACTIVE); getQsTile().updateTile(); } @Override public void onStopListening() { super.onStopListening(); if (getQsTile() == null) { return; } getQsTile().setState(Tile.STATE_INACTIVE); getQsTile().updateTile(); } @Override public void onClick() { super.onClick(); startActivity(new Intent(this, OKSignActivity.class) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9b7397b6..00bf40b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -394,4 +394,7 @@ 贴吧数据 置顶贴 未关注 + 签到完成 + 签到失败 + 请先登录