From e809435de4efb6e2e6028791fd4897a508aca317 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Mon, 27 Aug 2018 12:36:18 +0100 Subject: [PATCH 1/2] Possibly fix for corrupted DB crashes --- .../com/duckduckgo/app/global/DuckDuckGoApplication.kt | 8 ++++++++ .../java/com/duckduckgo/app/httpsupgrade/HttpsUpgrader.kt | 8 +------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt b/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt index abade181e9a0..bf9df120fdaf 100644 --- a/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt +++ b/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt @@ -31,6 +31,7 @@ import com.duckduckgo.app.fire.FireActivity import com.duckduckgo.app.global.install.AppInstallStore import com.duckduckgo.app.global.notification.NotificationRegistrar import com.duckduckgo.app.global.shortcut.AppShortcutCreator +import com.duckduckgo.app.httpsupgrade.HttpsUpgrader import com.duckduckgo.app.job.AppConfigurationSyncer import com.duckduckgo.app.migration.LegacyMigration import com.duckduckgo.app.statistics.api.StatisticsUpdater @@ -48,6 +49,7 @@ import io.reactivex.schedulers.Schedulers import org.jetbrains.anko.doAsync import timber.log.Timber import javax.inject.Inject +import kotlin.concurrent.thread open class DuckDuckGoApplication : HasActivityInjector, HasServiceInjector, HasSupportFragmentInjector, Application(), LifecycleObserver { @@ -87,6 +89,9 @@ open class DuckDuckGoApplication : HasActivityInjector, HasServiceInjector, HasS @Inject lateinit var appShortcutCreator: AppShortcutCreator + @Inject + lateinit var httpsUpgrader: HttpsUpgrader + override fun onCreate() { super.onCreate() @@ -110,6 +115,9 @@ open class DuckDuckGoApplication : HasActivityInjector, HasServiceInjector, HasS migrateLegacyDb() notificationRegistrar.registerApp() + + thread { httpsUpgrader.reloadData() } + } private fun recordInstallationTimestamp() { diff --git a/app/src/main/java/com/duckduckgo/app/httpsupgrade/HttpsUpgrader.kt b/app/src/main/java/com/duckduckgo/app/httpsupgrade/HttpsUpgrader.kt index 9dd3375eb941..87cf68eb18c0 100644 --- a/app/src/main/java/com/duckduckgo/app/httpsupgrade/HttpsUpgrader.kt +++ b/app/src/main/java/com/duckduckgo/app/httpsupgrade/HttpsUpgrader.kt @@ -24,7 +24,6 @@ import com.duckduckgo.app.httpsupgrade.api.HttpsBloomFilterFactory import com.duckduckgo.app.httpsupgrade.db.HttpsWhitelistDao import timber.log.Timber import java.util.concurrent.locks.ReentrantLock -import kotlin.concurrent.thread interface HttpsUpgrader { @@ -35,6 +34,7 @@ interface HttpsUpgrader { return uri.buildUpon().scheme(UrlScheme.https).build() } + @WorkerThread fun reloadData() } @@ -46,12 +46,6 @@ class HttpsUpgraderImpl( private var httpsBloomFilter: BloomFilter? = null private val dataReloadLock = ReentrantLock() - init { - thread { - reloadData() - } - } - @WorkerThread override fun shouldUpgrade(uri: Uri): Boolean { From 1234b3805c06ca6c5e92383035c8d3e4c6145916 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Tue, 4 Sep 2018 14:47:01 +0100 Subject: [PATCH 2/2] Move https upgrader initialization to its own method --- .../java/com/duckduckgo/app/global/DuckDuckGoApplication.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt b/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt index bf9df120fdaf..6c134554303c 100644 --- a/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt +++ b/app/src/main/java/com/duckduckgo/app/global/DuckDuckGoApplication.kt @@ -116,7 +116,7 @@ open class DuckDuckGoApplication : HasActivityInjector, HasServiceInjector, HasS migrateLegacyDb() notificationRegistrar.registerApp() - thread { httpsUpgrader.reloadData() } + initializeHttpsUpgrader() } @@ -172,6 +172,10 @@ open class DuckDuckGoApplication : HasActivityInjector, HasServiceInjector, HasS statisticsUpdater.initializeAtb() } + private fun initializeHttpsUpgrader() { + thread { httpsUpgrader.reloadData() } + } + /** * Immediately syncs data. Upon completion (successful or error), * it will schedule a recurring job to keep the data in sync.