Skip to content

Commit e0f19df

Browse files
committed
Implement BloggingRemindersProvider
1 parent 09877eb commit e0f19df

3 files changed

Lines changed: 74 additions & 1 deletion

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.wordpress.android.bloggingreminders.provider
2+
3+
import android.database.Cursor
4+
import android.net.Uri
5+
import kotlinx.coroutines.flow.first
6+
import kotlinx.coroutines.runBlocking
7+
import org.wordpress.android.WordPress
8+
import org.wordpress.android.fluxc.model.BloggingRemindersModel
9+
import org.wordpress.android.fluxc.model.SiteModel
10+
import org.wordpress.android.fluxc.store.BloggingRemindersStore
11+
import org.wordpress.android.fluxc.store.SiteStore
12+
import org.wordpress.android.provider.query.QueryContentProvider
13+
import org.wordpress.android.provider.query.QueryResult
14+
import org.wordpress.android.util.publicdata.ClientVerification
15+
import org.wordpress.android.util.signature.SignatureNotFoundException
16+
import javax.inject.Inject
17+
18+
typealias SiteModelBloggingReminderMap = Map<SiteModel, BloggingRemindersModel>
19+
20+
class BloggingRemindersProvider : QueryContentProvider() {
21+
@Inject lateinit var bloggingRemindersStore: BloggingRemindersStore
22+
@Inject lateinit var siteStore: SiteStore
23+
@Inject lateinit var queryResult: QueryResult
24+
@Inject lateinit var clientVerification: ClientVerification
25+
26+
override fun onCreate(): Boolean {
27+
return true
28+
}
29+
30+
@Suppress("SwallowedException")
31+
override fun query(
32+
uri: Uri,
33+
projection: Array<out String>?,
34+
selection: String?,
35+
selectionArgs: Array<out String>?,
36+
sortOrder: String?
37+
): Cursor? {
38+
inject()
39+
return context?.let {
40+
try {
41+
if (clientVerification.canTrust(callingPackage)) {
42+
runBlocking {
43+
val allSiteModels = siteStore.sites
44+
val filteredBloggingReminders = allSiteModels.map { siteModel ->
45+
bloggingRemindersStore.bloggingRemindersModel(siteModel.id).first()
46+
}.filter { bloggingRemindersModel ->
47+
bloggingRemindersModel.enabledDays.isNotEmpty()
48+
}
49+
val filteredSiteIds = filteredBloggingReminders.map { bloggingReminder ->
50+
bloggingReminder.siteId
51+
}
52+
val filteredSiteModels = allSiteModels.filter { siteModel ->
53+
filteredSiteIds.contains(siteModel.id)
54+
}
55+
val result: SiteModelBloggingReminderMap =
56+
filteredSiteModels.zip(filteredBloggingReminders).toMap()
57+
queryResult.createCursor(result)
58+
}
59+
} else null
60+
} catch (signatureNotFoundException: SignatureNotFoundException) {
61+
null
62+
}
63+
}
64+
}
65+
66+
private fun inject() {
67+
if (!this::bloggingRemindersStore.isInitialized) {
68+
(context?.applicationContext as WordPress).component().inject(this)
69+
}
70+
}
71+
}

WordPress/src/main/java/org/wordpress/android/modules/AppComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.automattic.android.tracks.crashlogging.CrashLogging;
44

5+
import org.wordpress.android.bloggingreminders.provider.BloggingRemindersProvider;
56
import org.wordpress.android.push.GCMMessageService;
67
import org.wordpress.android.push.GCMRegistrationIntentService;
78
import org.wordpress.android.push.NotificationsProcessingService;
@@ -652,4 +653,6 @@ public interface AppComponent {
652653
void inject(WeekWidgetBlockListProviderFactory object);
653654

654655
void inject(UserFlagsProvider object);
656+
657+
void inject(BloggingRemindersProvider object);
655658
}

WordPress/src/main/java/org/wordpress/android/util/publicdata/ClientVerification.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ class ClientVerification @Inject constructor(
99
private val signatureUtils: SignatureUtils,
1010
private val contextProvider: ContextProvider,
1111
) {
12-
1312
fun canTrust(callerPackage: String?): Boolean {
1413
if (callerPackage == null) {
1514
return false

0 commit comments

Comments
 (0)