forked from upstream-mirrors/quik
Merge branch 'octoshrimpy:master' into widget_conversations_162
This commit is contained in:
@@ -23,17 +23,45 @@ import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.klinker.android.send_message.BroadcastUtils
|
||||
import dev.octoshrimpy.quik.util.Preferences
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
import javax.inject.Inject
|
||||
|
||||
class WidgetManagerImpl @Inject constructor(private val context: Context) : WidgetManager {
|
||||
class WidgetManagerImpl @Inject constructor(
|
||||
private val context: Context,
|
||||
private val prefs: Preferences
|
||||
) : WidgetManager {
|
||||
|
||||
override fun updateUnreadCount() {
|
||||
BroadcastUtils.sendExplicitBroadcast(context, Intent(), WidgetManager.ACTION_NOTIFY_DATASET_CHANGED)
|
||||
companion object {
|
||||
private var staticUnreadAtTopPrefsDisposable = AtomicReference<Disposable>(null)
|
||||
|
||||
fun sendDatasetChanged(context: Context) {
|
||||
BroadcastUtils.sendExplicitBroadcast(context, Intent(), WidgetManager.ACTION_NOTIFY_DATASET_CHANGED)
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
// this class is always instantiated by it's factory with the application context so we can capture that context value below
|
||||
// when unreadAtTop preference changes, send broadcast to widgets to update themselves
|
||||
if (staticUnreadAtTopPrefsDisposable.get() === null)
|
||||
staticUnreadAtTopPrefsDisposable.set(prefs.unreadAtTop.asObservable()
|
||||
.skip(1)
|
||||
.debounce(400, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnNext { sendDatasetChanged(context) }
|
||||
.subscribe())
|
||||
}
|
||||
|
||||
override fun sendDatasetChanged() {
|
||||
sendDatasetChanged(context)
|
||||
}
|
||||
|
||||
override fun updateTheme() {
|
||||
val ids = AppWidgetManager.getInstance(context)
|
||||
.getAppWidgetIds(ComponentName("dev.octoshrimpy.quik", "dev.octoshrimpy.quik.feature.widget.WidgetProvider"))
|
||||
.getAppWidgetIds(ComponentName(context.packageName, "dev.octoshrimpy.quik.feature.widget.WidgetProvider"))
|
||||
|
||||
val intent = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
|
||||
|
||||
|
||||
@@ -56,7 +56,15 @@ class ConversationRepositoryImpl @Inject constructor(
|
||||
private val phoneNumberUtils: PhoneNumberUtils
|
||||
) : ConversationRepository {
|
||||
|
||||
override fun getConversations(archived: Boolean): RealmResults<Conversation> {
|
||||
override fun getConversations(unreadAtTop: Boolean, archived: Boolean): RealmResults<Conversation> {
|
||||
val sortOrder: MutableList<String> = arrayListOf("pinned", "draft", "lastMessage.date")
|
||||
val sortDirections: MutableList<Sort> = arrayListOf(Sort.DESCENDING, Sort.DESCENDING, Sort.DESCENDING)
|
||||
|
||||
if (unreadAtTop) {
|
||||
sortOrder.add(0, "lastMessage.read")
|
||||
sortDirections.add(0, Sort.ASCENDING)
|
||||
}
|
||||
|
||||
return Realm.getDefaultInstance()
|
||||
.where(Conversation::class.java)
|
||||
.notEqualTo("id", 0L)
|
||||
@@ -69,13 +77,21 @@ class ConversationRepositoryImpl @Inject constructor(
|
||||
.isNotEmpty("draft")
|
||||
.endGroup()
|
||||
.sort(
|
||||
arrayOf("pinned", "draft", "lastMessage.date"),
|
||||
arrayOf(Sort.DESCENDING, Sort.DESCENDING, Sort.DESCENDING)
|
||||
sortOrder.toTypedArray(),
|
||||
sortDirections.toTypedArray()
|
||||
)
|
||||
.findAllAsync()
|
||||
}
|
||||
|
||||
override fun getConversationsSnapshot(): List<Conversation> {
|
||||
override fun getConversationsSnapshot(unreadAtTop: Boolean): List<Conversation> {
|
||||
val sortOrder: MutableList<String> = arrayListOf("pinned", "draft", "lastMessage.date")
|
||||
val sortDirections: MutableList<Sort> = arrayListOf(Sort.DESCENDING, Sort.DESCENDING, Sort.DESCENDING)
|
||||
|
||||
if (unreadAtTop) {
|
||||
sortOrder.add(0, "lastMessage.read")
|
||||
sortDirections.add(0, Sort.ASCENDING)
|
||||
}
|
||||
|
||||
return Realm.getDefaultInstance().use { realm ->
|
||||
realm.refresh()
|
||||
realm.copyFromRealm(realm.where(Conversation::class.java)
|
||||
@@ -89,8 +105,8 @@ class ConversationRepositoryImpl @Inject constructor(
|
||||
.isNotEmpty("draft")
|
||||
.endGroup()
|
||||
.sort(
|
||||
arrayOf("pinned", "draft", "lastMessage.date"),
|
||||
arrayOf(Sort.DESCENDING, Sort.DESCENDING, Sort.DESCENDING)
|
||||
sortOrder.toTypedArray(),
|
||||
sortDirections.toTypedArray()
|
||||
)
|
||||
.findAll())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user