mirror of
https://github.com/AllanWang/Frost-for-Facebook.git
synced 2024-11-08 20:12:39 +01:00
Fix icon loading
This commit is contained in:
parent
7f371a9532
commit
ba0b4e70d9
@ -137,8 +137,11 @@ interface NotificationDao {
|
||||
|
||||
suspend fun NotificationDao.deleteAll() = dao { _deleteAll() }
|
||||
|
||||
suspend fun NotificationDao.selectNotifications(userId: Long, type: String): List<NotificationContent> = dao {
|
||||
fun NotificationDao.selectNotificationsSync(userId: Long, type: String): List<NotificationContent> =
|
||||
_selectNotifications(userId, type).map { it.toNotifContent() }
|
||||
|
||||
suspend fun NotificationDao.selectNotifications(userId: Long, type: String): List<NotificationContent> = dao {
|
||||
selectNotificationsSync(userId, type)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -22,37 +22,34 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.widget.RemoteViews
|
||||
import android.widget.RemoteViewsService
|
||||
import androidx.annotation.ColorRes
|
||||
import ca.allanwang.kau.utils.ContextHelper
|
||||
import androidx.annotation.ColorInt
|
||||
import ca.allanwang.kau.utils.dimenPixelSize
|
||||
import ca.allanwang.kau.utils.withAlpha
|
||||
import com.bumptech.glide.request.target.AppWidgetTarget
|
||||
import com.pitchedapps.frost.R
|
||||
import com.pitchedapps.frost.db.NotificationDao
|
||||
import com.pitchedapps.frost.db.selectNotifications
|
||||
import com.pitchedapps.frost.db.selectNotificationsSync
|
||||
import com.pitchedapps.frost.glide.FrostGlide
|
||||
import com.pitchedapps.frost.glide.GlideApp
|
||||
import com.pitchedapps.frost.services.NOTIF_CHANNEL_GENERAL
|
||||
import com.pitchedapps.frost.services.NotificationContent
|
||||
import com.pitchedapps.frost.utils.L
|
||||
import com.pitchedapps.frost.utils.Prefs
|
||||
import com.pitchedapps.frost.widgets.NotificationWidget.Companion.NOTIF_WIDGET_IDS
|
||||
import com.pitchedapps.frost.widgets.NotificationWidget.Companion.NOTIF_WIDGET_TYPE
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.koin.standalone.KoinComponent
|
||||
import org.koin.standalone.inject
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
class NotificationWidget : AppWidgetProvider() {
|
||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||
super.onUpdate(context, appWidgetManager, appWidgetIds)
|
||||
val views = RemoteViews(context.packageName, com.pitchedapps.frost.R.layout.widget_notifications)
|
||||
val intent = NotificationWidgetService.createIntent(context, NOTIF_CHANNEL_GENERAL, appWidgetIds)
|
||||
for (id in appWidgetIds) {
|
||||
val views = RemoteViews(context.packageName, R.layout.widget_notifications)
|
||||
views.setBackgroundColor(R.id.widget_layout_container, Prefs.bgColor)
|
||||
views.setRemoteAdapter(R.id.widget_notification_list, intent)
|
||||
appWidgetManager.updateAppWidget(id, views)
|
||||
}
|
||||
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_notification_list)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@ -61,6 +58,10 @@ class NotificationWidget : AppWidgetProvider() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun RemoteViews.setBackgroundColor(viewId: Int, @ColorInt color: Int) {
|
||||
setInt(viewId, "setBackgroundColor", color)
|
||||
}
|
||||
|
||||
class NotificationWidgetService : RemoteViewsService() {
|
||||
override fun onGetViewFactory(intent: Intent): RemoteViewsFactory = NotificationWidgetDataProvider(this, intent)
|
||||
|
||||
@ -73,7 +74,7 @@ class NotificationWidgetService : RemoteViewsService() {
|
||||
}
|
||||
|
||||
class NotificationWidgetDataProvider(val context: Context, val intent: Intent) : RemoteViewsService.RemoteViewsFactory,
|
||||
CoroutineScope, KoinComponent {
|
||||
KoinComponent {
|
||||
|
||||
private val notifDao: NotificationDao by inject()
|
||||
@Volatile
|
||||
@ -83,25 +84,20 @@ class NotificationWidgetDataProvider(val context: Context, val intent: Intent) :
|
||||
|
||||
private val widgetIds = intent.getIntArrayExtra(NOTIF_WIDGET_IDS)
|
||||
|
||||
private lateinit var job: Job
|
||||
override val coroutineContext: CoroutineContext
|
||||
get() = ContextHelper.dispatcher + job
|
||||
private val avatarSize = context.dimenPixelSize(R.dimen.avatar_image_size)
|
||||
|
||||
private suspend fun loadNotifications() {
|
||||
content = notifDao.selectNotifications(Prefs.userId, type)
|
||||
private val glide = GlideApp.with(context).asBitmap()
|
||||
|
||||
private fun loadNotifications() {
|
||||
content = notifDao.selectNotificationsSync(Prefs.userId, type)
|
||||
L._d { "Updated notif widget with ${content.size} items" }
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
job = SupervisorJob()
|
||||
runBlocking {
|
||||
loadNotifications()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDataSetChanged() {
|
||||
runBlocking {
|
||||
loadNotifications()
|
||||
}
|
||||
loadNotifications()
|
||||
}
|
||||
|
||||
override fun getLoadingView(): RemoteViews? = null
|
||||
@ -112,29 +108,23 @@ class NotificationWidgetDataProvider(val context: Context, val intent: Intent) :
|
||||
|
||||
override fun getViewAt(position: Int): RemoteViews {
|
||||
val views = RemoteViews(context.packageName, R.layout.widget_notification_item)
|
||||
val glide = GlideApp.with(context).asBitmap()
|
||||
val notif = content[position]
|
||||
L._d { "View $position $notif" }
|
||||
views.setBackgroundColor(R.id.item_frame, Prefs.nativeBgColor(notif.unread))
|
||||
views.setTextColor(R.id.item_content, Prefs.textColor)
|
||||
views.setTextViewText(R.id.item_content, notif.text)
|
||||
views.setTextColor(R.id.item_date, Prefs.textColor.withAlpha(150))
|
||||
views.setTextViewText(R.id.item_date, notif.timestamp.toString()) // TODO
|
||||
glide.load(notif.profileUrl).transform(FrostGlide.circleCrop)
|
||||
.into(AppWidgetTarget(context, R.id.item_avatar, views))
|
||||
// views.setOnClickPendingIntent()
|
||||
val avatar = glide.load(notif.profileUrl).transform(FrostGlide.circleCrop).submit(avatarSize, avatarSize).get()
|
||||
views.setImageViewBitmap(R.id.item_avatar, avatar)
|
||||
return views
|
||||
}
|
||||
|
||||
private fun RemoteViews.setBackgroundColor(viewId: Int, @ColorRes color: Int) {
|
||||
setInt(viewId, "setBackgroundColor", color)
|
||||
}
|
||||
|
||||
override fun getCount(): Int = content.size
|
||||
|
||||
override fun getViewTypeCount(): Int {
|
||||
TODO("not implemented")
|
||||
}
|
||||
override fun getViewTypeCount(): Int = 1
|
||||
|
||||
override fun onDestroy() {
|
||||
job.cancel()
|
||||
}
|
||||
}
|
||||
}
|
5
app/src/main/res/drawable/ic_refresh_24dp.xml
Normal file
5
app/src/main/res/drawable/ic_refresh_24dp.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FF000000" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
|
||||
</vector>
|
@ -1,22 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
|
||||
android:layout_width="match_parent" android:layout_height="match_parent">
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/widget_layout_container"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/widget_layout_main"
|
||||
android:id="@+id/widget_layout_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/kau_padding_small"
|
||||
android:paddingEnd="@dimen/kau_padding_small">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/img_refresh"
|
||||
android:layout_width="@dimen/toolbar_icon_size"
|
||||
android:layout_margin="@dimen/kau_padding_small"
|
||||
android:layout_height="@dimen/toolbar_icon_size"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_refresh_24dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<ListView
|
||||
android:id="@+id/widget_notification_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
</ListView>
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
</LinearLayout>
|
@ -10,5 +10,5 @@
|
||||
<dimen name="intro_bar_height">64dp</dimen>
|
||||
<dimen name="badge_icon_size">20dp</dimen>
|
||||
|
||||
<dimen name="toolbar_icon_size">18dp</dimen>
|
||||
<dimen name="toolbar_icon_size">24dp</dimen>
|
||||
</resources>
|
||||
|
@ -1,4 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</appwidget-provider>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:initialKeyguardLayout="@layout/widget_notifications"
|
||||
android:initialLayout="@layout/widget_notifications"
|
||||
android:minHeight="110dp"
|
||||
android:minWidth="180dp"/>
|
||||
|
Loading…
Reference in New Issue
Block a user