Skip to content

Commit ca368cf

Browse files
committed
Move WebStorageProvider to app module
1 parent ce8935d commit ca368cf

6 files changed

Lines changed: 30 additions & 38 deletions

File tree

browser-mode/browser-mode-impl/src/main/java/com/duckduckgo/browsermode/impl/WebStorageProvider.kt renamed to app/src/main/java/com/duckduckgo/app/browser/mode/WebStorageProvider.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.duckduckgo.browsermode.impl
17+
package com.duckduckgo.app.browser.mode
1818

1919
import android.annotation.SuppressLint
2020
import android.webkit.WebStorage
@@ -23,18 +23,35 @@ import androidx.webkit.ProfileStore
2323
import com.duckduckgo.browsermode.api.BrowserMode
2424
import com.duckduckgo.browsermode.api.BrowserModeDataProvider
2525
import com.duckduckgo.browsermode.api.FireModeAvailability
26+
import com.duckduckgo.browsermode.api.profileName
2627
import com.duckduckgo.di.scopes.AppScope
28+
import com.squareup.anvil.annotations.ContributesTo
29+
import dagger.Binds
30+
import dagger.Module
2731
import dagger.SingleInstanceIn
2832
import javax.inject.Inject
2933

34+
/**
35+
* Resolves a per-mode [WebStorage]. Callers must invoke [forMode] on the main thread when
36+
* `MULTI_PROFILE` is supported on the device — `ProfileStore` is tied to the WebView thread.
37+
* Falls back to the default shared [WebStorage] when MultiProfile is unsupported.
38+
*/
3039
@SuppressLint("RequiresFeature")
3140
@SingleInstanceIn(AppScope::class)
3241
class WebStorageProvider @Inject constructor(
3342
private val fireModeAvailability: FireModeAvailability,
3443
) : BrowserModeDataProvider<WebStorage> {
44+
3545
@UiThread
3646
override fun forMode(mode: BrowserMode): WebStorage {
3747
if (!fireModeAvailability.isAvailable()) return WebStorage.getInstance()
3848
return ProfileStore.getInstance().getOrCreateProfile(mode.profileName).webStorage
3949
}
4050
}
51+
52+
@ContributesTo(AppScope::class)
53+
@Module
54+
abstract class WebStorageProviderModule {
55+
@Binds
56+
abstract fun bindWebStorageProvider(impl: WebStorageProvider): BrowserModeDataProvider<WebStorage>
57+
}

browser-mode/browser-mode-impl/src/test/kotlin/com/duckduckgo/browsermode/impl/WebStorageProviderTest.kt renamed to app/src/test/java/com/duckduckgo/app/browser/mode/WebStorageProviderTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.duckduckgo.browsermode.impl
17+
package com.duckduckgo.app.browser.mode
1818

1919
import androidx.test.ext.junit.runners.AndroidJUnit4
2020
import com.duckduckgo.browsermode.api.BrowserMode
2121
import com.duckduckgo.browsermode.api.FireModeAvailability
22-
import junit.framework.TestCase.assertNotNull
22+
import org.junit.Assert.assertNotNull
2323
import org.junit.Test
2424
import org.junit.runner.RunWith
2525
import org.mockito.kotlin.mock

browser-mode/browser-mode-impl/src/main/java/com/duckduckgo/browsermode/impl/BrowserModeProfileName.kt renamed to browser-mode/browser-mode-api/src/main/java/com/duckduckgo/browsermode/api/BrowserModeProfileName.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.duckduckgo.browsermode.impl
17+
package com.duckduckgo.browsermode.api
1818

1919
import androidx.webkit.Profile
20-
import com.duckduckgo.browsermode.api.BrowserMode
2120

22-
internal val BrowserMode.profileName: String
21+
/**
22+
* Stable mapping from a [BrowserMode] to its WebView profile name.
23+
*
24+
* [REGULAR][BrowserMode.REGULAR] shares the default WebView profile;
25+
* [FIRE][BrowserMode.FIRE] gets its own isolated profile.
26+
*/
27+
val BrowserMode.profileName: String
2328
get() = when (this) {
2429
BrowserMode.REGULAR -> Profile.DEFAULT_PROFILE_NAME
2530
BrowserMode.FIRE -> "Fire"

browser-mode/browser-mode-impl/src/main/java/com/duckduckgo/browsermode/impl/BrowserModeModule.kt

Lines changed: 0 additions & 31 deletions
This file was deleted.

browser-mode/browser-mode-impl/src/main/java/com/duckduckgo/browsermode/impl/RealFireModeAvailability.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class RealFireModeAvailability @Inject constructor(
5151
private fun computeAndCache(): Boolean {
5252
cachedAvailability?.let { return it }
5353
val value = WebViewFeature.isFeatureSupported(WebViewFeature.MULTI_PROFILE) &&
54-
fireModeFeature.fireTabs().isEnabled()
54+
fireModeFeature.fireTabs().isEnabled()
5555
cachedAvailability = value
5656
return value
5757
}

browser-mode/browser-mode-impl/src/main/java/com/duckduckgo/browsermode/impl/RealWebViewProfileBinder.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.webkit.WebViewCompat
2323
import com.duckduckgo.browsermode.api.BrowserMode
2424
import com.duckduckgo.browsermode.api.FireModeAvailability
2525
import com.duckduckgo.browsermode.api.WebViewProfileBinder
26+
import com.duckduckgo.browsermode.api.profileName
2627
import com.duckduckgo.di.scopes.AppScope
2728
import com.squareup.anvil.annotations.ContributesBinding
2829
import dagger.SingleInstanceIn

0 commit comments

Comments
 (0)