pref: 优化一键签到磁贴样式
This commit is contained in:
parent
129b9e7056
commit
a38ff0a6c3
|
|
@ -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<SignDataBean> = 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<SignResultBean> {
|
||||
override fun onFailure(call: Call<SignResultBean>, 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<ForumRecommend> {
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
}
}
|
||||
|
|
@ -394,4 +394,7 @@
|
|||
<string name="title_forum_stat">贴吧数据</string>
|
||||
<string name="title_forum_tops">置顶贴</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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue