改包名com.aiosman.ravenow
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package com.aiosman.ravenow.model
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
|
||||
data class ChatNotificationData(
|
||||
@DrawableRes val avatar: Int,
|
||||
val name: String,
|
||||
val message: String,
|
||||
val time: String,
|
||||
val unread: Int
|
||||
)
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.aiosman.ravenow.model
|
||||
|
||||
import androidx.paging.PagingSource
|
||||
import androidx.paging.PagingState
|
||||
import kotlin.math.ceil
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
internal class TestChatBackend(
|
||||
private val backendDataList: List<ChatNotificationData>,
|
||||
private val loadDelay: Long = 500,
|
||||
) {
|
||||
val DataBatchSize = 1
|
||||
class DesiredLoadResultPageResponse(val data: List<ChatNotificationData>)
|
||||
/** Returns [DataBatchSize] items for a key */
|
||||
fun searchItemsByKey(key: Int): DesiredLoadResultPageResponse {
|
||||
val maxKey = ceil(backendDataList.size.toFloat() / DataBatchSize).toInt()
|
||||
if (key >= maxKey) {
|
||||
return DesiredLoadResultPageResponse(emptyList())
|
||||
}
|
||||
val from = key * DataBatchSize
|
||||
val to = minOf((key + 1) * DataBatchSize, backendDataList.size)
|
||||
val currentSublist = backendDataList.subList(from, to)
|
||||
return DesiredLoadResultPageResponse(currentSublist)
|
||||
}
|
||||
fun getAllData() = TestChatPagingSource(this, loadDelay)
|
||||
}
|
||||
internal class TestChatPagingSource(
|
||||
private val backend: TestChatBackend,
|
||||
private val loadDelay: Long,
|
||||
) : PagingSource<Int, ChatNotificationData>() {
|
||||
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ChatNotificationData> {
|
||||
// Simulate latency
|
||||
delay(loadDelay)
|
||||
val pageNumber = params.key ?: 0
|
||||
val response = backend.searchItemsByKey(pageNumber)
|
||||
// Since 0 is the lowest page number, return null to signify no more pages should
|
||||
// be loaded before it.
|
||||
val prevKey = if (pageNumber > 0) pageNumber - 1 else null
|
||||
// This API defines that it's out of data when a page returns empty. When out of
|
||||
// data, we return `null` to signify no more pages should be loaded
|
||||
val nextKey = if (response.data.isNotEmpty()) pageNumber + 1 else null
|
||||
return LoadResult.Page(data = response.data, prevKey = prevKey, nextKey = nextKey)
|
||||
}
|
||||
override fun getRefreshKey(state: PagingState<Int, ChatNotificationData>): Int? {
|
||||
return state.anchorPosition?.let {
|
||||
state.closestPageToPosition(it)?.prevKey?.plus(1)
|
||||
?: state.closestPageToPosition(it)?.nextKey?.minus(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
41
app/src/main/java/com/aiosman/ravenow/model/UpdateInfo.kt
Normal file
41
app/src/main/java/com/aiosman/ravenow/model/UpdateInfo.kt
Normal file
@@ -0,0 +1,41 @@
|
||||
package com.aiosman.ravenow.model
|
||||
|
||||
import android.app.DownloadManager
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
|
||||
data class UpdateInfo(
|
||||
val versionCode: Int,
|
||||
val versionName: String,
|
||||
val updateContent: String,
|
||||
val downloadUrl: String,
|
||||
val forceUpdate: Boolean
|
||||
)
|
||||
|
||||
class ApkInstallReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
Log.d("ApkInstallReceiver", "onReceive() called") // 添加日志输出
|
||||
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE == intent.action) {
|
||||
Log.d("ApkInstallReceiver", "Download complete") // 添加日志输出
|
||||
val downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)
|
||||
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
|
||||
|
||||
// 方案二:通过 DownloadManager 的 API 获取 Uri
|
||||
val uri = downloadManager.getUriForDownloadedFile(downloadId)
|
||||
if (uri != null) {
|
||||
installApk(context, uri)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun installApk(context: Context, uri: Uri) {
|
||||
Log.d("ApkInstallReceiver", "installApk() called with: context = $context, uri = $uri") // 添加日志输出
|
||||
val installIntent = Intent(Intent.ACTION_VIEW)
|
||||
installIntent.setDataAndType(uri, "application/vnd.android.package-archive")
|
||||
installIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
context.startActivity(installIntent)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user