pref: 优化一键签到磁贴样式

This commit is contained in:
HuanChengFly 2020-11-14 15:51:04 +08:00
parent 129b9e7056
commit a38ff0a6c3
3 changed files with 63 additions and 10 deletions

View File

@ -7,8 +7,10 @@ import android.app.NotificationManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Binder
import android.os.Build import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.IBinder
import android.widget.Toast import android.widget.Toast
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
@ -32,7 +34,48 @@ import java.util.concurrent.ThreadLocalRandom
class OKSignService : IntentService(TAG) { class OKSignService : IntentService(TAG) {
private val signData: MutableList<SignDataBean> = ArrayList() private val signData: MutableList<SignDataBean> = ArrayList()
private var position = 0 private var position = 0
private var successCount = 0
lateinit var manager: NotificationManager 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() { override fun onCreate() {
super.onCreate() super.onCreate()
@ -48,12 +91,14 @@ class OKSignService : IntentService(TAG) {
private fun startSign() { private fun startSign() {
if (signData.size > 0) { if (signData.size > 0) {
okSignProgressListener?.onStart(signData.size)
position = 0 position = 0
sign(signData[position]) sign(signData[position])
updateNotification("即将开始签到", null, 100, 100, true) updateNotification("即将开始签到", null, 100, 100, true)
Toast.makeText(this@OKSignService, "签到已开始,可在通知栏查看进度", Toast.LENGTH_SHORT).show() Toast.makeText(this@OKSignService, "签到已开始,可在通知栏查看进度", Toast.LENGTH_SHORT).show()
} else { } 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) stopForeground(true)
} }
} }
@ -61,7 +106,7 @@ class OKSignService : IntentService(TAG) {
private fun buildNotification(title: String, text: String?): NotificationCompat.Builder { private fun buildNotification(title: String, text: String?): NotificationCompat.Builder {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel("1", val channel = NotificationChannel("1",
"一键签到", NotificationManager.IMPORTANCE_LOW) getString(R.string.title_oksign), NotificationManager.IMPORTANCE_LOW)
channel.enableLights(false) channel.enableLights(false)
channel.setShowBadge(false) channel.setShowBadge(false)
manager.createNotificationChannel(channel) manager.createNotificationChannel(channel)
@ -69,7 +114,7 @@ class OKSignService : IntentService(TAG) {
return NotificationCompat.Builder(this, "1") return NotificationCompat.Builder(this, "1")
.setContentText(text) .setContentText(text)
.setContentTitle(title) .setContentTitle(title)
.setSubText("一键签到") .setSubText(getString(R.string.title_oksign))
.setSmallIcon(R.drawable.ic_oksign) .setSmallIcon(R.drawable.ic_oksign)
.setWhen(System.currentTimeMillis()) .setWhen(System.currentTimeMillis())
.setAutoCancel(true) .setAutoCancel(true)
@ -106,15 +151,18 @@ class OKSignService : IntentService(TAG) {
TiebaApi.getInstance().sign(kw, data.tbs).enqueue(object : Callback<SignResultBean> { TiebaApi.getInstance().sign(kw, data.tbs).enqueue(object : Callback<SignResultBean> {
override fun onFailure(call: Call<SignResultBean>, t: Throwable) { override fun onFailure(call: Call<SignResultBean>, t: Throwable) {
if (t is TiebaException) { 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) updateNotification(getString(R.string.title_signing_progress, position, signData.size), "${kw}× (${t.code}) ${t.message}", position, signData.size, false)
} else { } 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) updateNotification(getString(R.string.title_signing_progress, position, signData.size), "${kw}× ${t.message}", position, signData.size, false)
} }
if (position < signData.size - 1) { if (position < signData.size - 1) {
position += 1 position += 1
handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong()) handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong())
} else { } 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)) sendBroadcast(Intent(ACTION_SIGN_SUCCESS_ALL))
stopForeground(true) stopForeground(true)
} }
@ -124,6 +172,7 @@ class OKSignService : IntentService(TAG) {
val signResultBean = response.body() ?: return val signResultBean = response.body() ?: return
if (position < signData.size - 1) { if (position < signData.size - 1) {
position += 1 position += 1
okSignProgressListener?.onProgress(signResultBean, position + 1, signData.size)
if (signResultBean.userInfo != null) { if (signResultBean.userInfo != null) {
updateNotification(getString(R.string.title_signing_progress, position, signData.size), kw + "吧 ✓ 经验 +" + signResultBean.userInfo.signBonusPoint, position, signData.size, false) updateNotification(getString(R.string.title_signing_progress, position, signData.size), kw + "吧 ✓ 经验 +" + signResultBean.userInfo.signBonusPoint, position, signData.size, false)
} else { } else {
@ -131,12 +180,12 @@ class OKSignService : IntentService(TAG) {
} }
handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong()) handler.postDelayed({ sign(signData[position]) }, ThreadLocalRandom.current().nextInt(1000, 3500).toLong())
} else { } 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)) sendBroadcast(Intent(ACTION_SIGN_SUCCESS_ALL))
stopForeground(true) stopForeground(true)
} }
} }
}) })
} }
@ -149,7 +198,8 @@ class OKSignService : IntentService(TAG) {
override fun onSuccess(data: MyInfoBean) { override fun onSuccess(data: MyInfoBean) {
TiebaApi.getInstance().forumRecommend().enqueue(object : Callback<ForumRecommend> { TiebaApi.getInstance().forumRecommend().enqueue(object : Callback<ForumRecommend> {
override fun onFailure(call: Call<ForumRecommend>, t: Throwable) { override fun onFailure(call: Call<ForumRecommend>, t: Throwable) {
updateNotification("签到失败", t.message ?: "未知错误", false) updateNotification(getString(R.string.title_oksign_fail), t.message
?: getString(R.string.error_unknown), false)
stopForeground(true) stopForeground(true)
} }
@ -167,12 +217,12 @@ class OKSignService : IntentService(TAG) {
} }
override fun onFailure(code: Int, error: String) { override fun onFailure(code: Int, error: String) {
updateNotification("签到失败", error, false) updateNotification(getString(R.string.title_oksign_fail), error, false)
stopForeground(true) stopForeground(true)
} }
}) })
} else { } 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) stopForeground(true)
} }
} }

View File

@ -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)); } } 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)); } }

View File

@ -394,4 +394,7 @@
<string name="title_forum_stat">贴吧数据</string> <string name="title_forum_stat">贴吧数据</string>
<string name="title_forum_tops">置顶贴</string> <string name="title_forum_tops">置顶贴</string>
<string name="text_unliked">未关注</string> <string name="text_unliked">未关注</string>
<string name="title_oksign_finish">签到完成</string>
<string name="title_oksign_fail">签到失败</string>
<string name="text_login_first">请先登录</string>
</resources> </resources>