Commits:
-
4d19dc54
by Beatriz Rizental at 2025-06-17T14:39:17-07:00
fixup! TB 42669: [android] Use custom no-op app-services
-
7d929101
by Beatriz Rizental at 2025-06-17T14:39:17-07:00
Revert "TB 40185: [android] Use NimbusDisabled"
This reverts commit c98c78c527f11856aab9f7e16ff503f267e665e2.
-
0235f26b
by Beatriz Rizental at 2025-06-17T14:39:17-07:00
[android] Override settings
-
d5bc2018
by Beatriz Rizental at 2025-06-17T14:39:17-07:00
fixup! [android] Override settings
Disable the tab-strip experiment for all channels. Having this
experiment enabled overrides the toolbar position to always be on the
top, which we don't want.
19 changed files:
Changes:
mobile/android/android-components/components/browser/storage-sync/src/main/java/mozilla/components/browser/storage/sync/RemoteTabsStorage.kt
| ... |
... |
@@ -161,6 +161,7 @@ class RemoteTabsCommandQueue( |
|
161
|
161
|
.groupBy {
|
|
162
|
162
|
when (it.command) {
|
|
163
|
163
|
is RemoteCommand.CloseTab -> PendingCommandGroup.Key.CloseTab(it.deviceId)
|
|
|
164
|
+ is RemoteCommand.__NOOP -> PendingCommandGroup.Key.Noop(it.deviceId)
|
|
164
|
165
|
// Add `is ... ->` branches for future pending commands here...
|
|
165
|
166
|
}.asAnyKey
|
|
166
|
167
|
}
|
| ... |
... |
@@ -184,6 +185,13 @@ class RemoteTabsCommandQueue( |
|
184
|
185
|
pendingCommands = pendingCommands,
|
|
185
|
186
|
)
|
|
186
|
187
|
}
|
|
|
188
|
+ is PendingCommandGroup.Key.Noop -> {
|
|
|
189
|
+ PendingCommandGroup(
|
|
|
190
|
+ deviceId = key.deviceId,
|
|
|
191
|
+ command = DeviceCommandOutgoing.Noop(),
|
|
|
192
|
+ pendingCommands = pendingCommands,
|
|
|
193
|
+ )
|
|
|
194
|
+ }
|
|
187
|
195
|
// Add `is ... ->` branches for future pending command grouping keys here...
|
|
188
|
196
|
}.asAnyGroup
|
|
189
|
197
|
}
|
| ... |
... |
@@ -279,6 +287,7 @@ class RemoteTabsCommandQueue( |
|
279
|
287
|
|
|
280
|
288
|
sealed interface Key {
|
|
281
|
289
|
data class CloseTab(val deviceId: String) : Key
|
|
|
290
|
+ data class Noop(val deviceId: String) : Key
|
|
282
|
291
|
// Add data classes for future pending command grouping keys here...
|
|
283
|
292
|
|
|
284
|
293
|
/** Returns this grouping key as a type-erased [Key]. */
|
mobile/android/android-components/components/concept/sync/src/main/java/mozilla/components/concept/sync/AccountEvent.kt
| ... |
... |
@@ -55,6 +55,9 @@ sealed class DeviceCommandIncoming { |
|
55
|
55
|
* Outgoing device commands (ie, targeted at other devices.)
|
|
56
|
56
|
*/
|
|
57
|
57
|
sealed class DeviceCommandOutgoing {
|
|
|
58
|
+ /** A command to do nothing */
|
|
|
59
|
+ class Noop() : DeviceCommandOutgoing()
|
|
|
60
|
+
|
|
58
|
61
|
/** A command to open a tab on another device */
|
|
59
|
62
|
class SendTab(val title: String, val url: String) : DeviceCommandOutgoing()
|
|
60
|
63
|
|
mobile/android/android-components/components/service/firefox-accounts/src/main/java/mozilla/components/service/fxa/FxaDeviceConstellation.kt
| ... |
... |
@@ -195,8 +195,10 @@ class FxaDeviceConstellation( |
|
195
|
195
|
is RustCloseTabsResult.Ok -> Result.success(true)
|
|
196
|
196
|
is RustCloseTabsResult.TabsNotClosed ->
|
|
197
|
197
|
Result.failure(SendCommandException.TabsNotClosed(closeTabsResult.urls))
|
|
|
198
|
+ is RustCloseTabsResult.__NOOP -> Result.success(false)
|
|
198
|
199
|
}
|
|
199
|
200
|
}
|
|
|
201
|
+ is DeviceCommandOutgoing.Noop -> Result.success(false)
|
|
200
|
202
|
}
|
|
201
|
203
|
val errors: List<Throwable> = SyncTelemetry.processFxaTelemetry(account.gatherTelemetry())
|
|
202
|
204
|
for (error in errors) {
|
mobile/android/android-components/components/service/nimbus/src/main/java/mozilla/components/service/nimbus/messaging/NimbusMessagingController.kt
| ... |
... |
@@ -96,32 +96,32 @@ open class NimbusMessagingController( |
|
96
|
96
|
* creates a URI string for the message action.
|
|
97
|
97
|
*/
|
|
98
|
98
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
|
99
|
|
- open fun processMessageActionToUri(message: Message): Uri {
|
|
|
99
|
+ fun processMessageActionToUri(message: Message): Uri {
|
|
100
|
100
|
val (uuid, action) = messagingStorage.generateUuidAndFormatMessage(message)
|
|
101
|
101
|
sendClickedMessageTelemetry(message.id, uuid)
|
|
102
|
102
|
|
|
103
|
103
|
return convertActionIntoDeepLinkSchemeUri(action)
|
|
104
|
104
|
}
|
|
105
|
105
|
|
|
106
|
|
- open fun sendDismissedMessageTelemetry(messageId: String) {
|
|
|
106
|
+ private fun sendDismissedMessageTelemetry(messageId: String) {
|
|
107
|
107
|
GleanMessaging.messageDismissed.record(GleanMessaging.MessageDismissedExtra(messageId))
|
|
108
|
108
|
}
|
|
109
|
109
|
|
|
110
|
|
- open fun sendShownMessageTelemetry(messageId: String) {
|
|
|
110
|
+ private fun sendShownMessageTelemetry(messageId: String) {
|
|
111
|
111
|
GleanMessaging.messageShown.record(GleanMessaging.MessageShownExtra(messageId))
|
|
112
|
112
|
}
|
|
113
|
113
|
|
|
114
|
|
- open fun sendExpiredMessageTelemetry(messageId: String) {
|
|
|
114
|
+ private fun sendExpiredMessageTelemetry(messageId: String) {
|
|
115
|
115
|
GleanMessaging.messageExpired.record(GleanMessaging.MessageExpiredExtra(messageId))
|
|
116
|
116
|
}
|
|
117
|
117
|
|
|
118
|
|
- open fun sendClickedMessageTelemetry(messageId: String, uuid: String?) {
|
|
|
118
|
+ private fun sendClickedMessageTelemetry(messageId: String, uuid: String?) {
|
|
119
|
119
|
GleanMessaging.messageClicked.record(
|
|
120
|
120
|
GleanMessaging.MessageClickedExtra(messageKey = messageId, actionUuid = uuid),
|
|
121
|
121
|
)
|
|
122
|
122
|
}
|
|
123
|
123
|
|
|
124
|
|
- open fun sendMicrosurveyCompletedTelemetry(messageId: String, answer: String) {
|
|
|
124
|
+ private fun sendMicrosurveyCompletedTelemetry(messageId: String, answer: String) {
|
|
125
|
125
|
Microsurvey.submitButtonTapped.record(
|
|
126
|
126
|
Microsurvey.SubmitButtonTappedExtra(
|
|
127
|
127
|
surveyId = messageId,
|
| ... |
... |
@@ -130,7 +130,7 @@ open class NimbusMessagingController( |
|
130
|
130
|
)
|
|
131
|
131
|
}
|
|
132
|
132
|
|
|
133
|
|
- open fun convertActionIntoDeepLinkSchemeUri(action: String): Uri =
|
|
|
133
|
+ private fun convertActionIntoDeepLinkSchemeUri(action: String): Uri =
|
|
134
|
134
|
if (action.startsWith("://")) {
|
|
135
|
135
|
"$deepLinkScheme$action".toUri()
|
|
136
|
136
|
} else {
|
mobile/android/android-components/components/service/nimbus/src/main/java/mozilla/components/service/nimbus/messaging/NimbusMessagingStorage.kt
| ... |
... |
@@ -33,7 +33,7 @@ const val MESSAGING_FEATURE_ID = "messaging" |
|
33
|
33
|
/**
|
|
34
|
34
|
* Provides messages from [messagingFeature] and combine with the metadata store on [metadataStorage].
|
|
35
|
35
|
*/
|
|
36
|
|
-open class NimbusMessagingStorage(
|
|
|
36
|
+class NimbusMessagingStorage(
|
|
37
|
37
|
private val context: Context,
|
|
38
|
38
|
private val metadataStorage: MessageMetadataStorage,
|
|
39
|
39
|
private val onMalformedMessage: (String) -> Unit = {
|
mobile/android/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt
| ... |
... |
@@ -3,8 +3,8 @@ |
|
3
|
3
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
4
|
4
|
|
|
5
|
5
|
// These lines are generated by android-components/automation/application-services-nightly-bump.py
|
|
6
|
|
-val VERSION = "140.20250523140405"
|
|
7
|
|
-val CHANNEL = ApplicationServicesChannel.NIGHTLY
|
|
|
6
|
+val VERSION = "140.0-TORBROWSER"
|
|
|
7
|
+val CHANNEL = ApplicationServicesChannel.RELEASE
|
|
8
|
8
|
|
|
9
|
9
|
object ApplicationServicesConfig {
|
|
10
|
10
|
val version = VERSION
|
mobile/android/fenix/app/nimbus.fml.yaml
| ... |
... |
@@ -642,13 +642,13 @@ features: |
|
642
|
642
|
defaults:
|
|
643
|
643
|
- channel: developer
|
|
644
|
644
|
value:
|
|
645
|
|
- enabled: true
|
|
|
645
|
+ enabled: false
|
|
646
|
646
|
- channel: nightly
|
|
647
|
647
|
value:
|
|
648
|
|
- enabled: true
|
|
|
648
|
+ enabled: false
|
|
649
|
649
|
- channel: beta
|
|
650
|
650
|
value:
|
|
651
|
|
- enabled: true
|
|
|
651
|
+ enabled: false
|
|
652
|
652
|
|
|
653
|
653
|
trending-searches:
|
|
654
|
654
|
description: Enables trending searches.
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt
| ... |
... |
@@ -212,7 +212,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { |
|
212
|
212
|
//
|
|
213
|
213
|
// We can initialize Nimbus before Glean because Glean will queue messages
|
|
214
|
214
|
// before it's initialized.
|
|
215
|
|
- // initializeNimbus()
|
|
|
215
|
+ initializeNimbus()
|
|
216
|
216
|
|
|
217
|
217
|
ProfilerMarkerFactProcessor.create { components.core.engine.profiler }.register()
|
|
218
|
218
|
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
| ... |
... |
@@ -124,6 +124,7 @@ import org.mozilla.fenix.ext.getNavDirections |
|
124
|
124
|
import org.mozilla.fenix.ext.hasTopDestination
|
|
125
|
125
|
import org.mozilla.fenix.ext.nav
|
|
126
|
126
|
import org.mozilla.fenix.ext.openSetDefaultBrowserOption
|
|
|
127
|
+import org.mozilla.fenix.ext.recordEventInNimbus
|
|
127
|
128
|
import org.mozilla.fenix.ext.setNavigationIcon
|
|
128
|
129
|
import org.mozilla.fenix.ext.settings
|
|
129
|
130
|
import org.mozilla.fenix.extension.WebExtensionPromptFeature
|
| ... |
... |
@@ -458,7 +459,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
|
458
|
459
|
|
|
459
|
460
|
if (!shouldShowOnboarding) {
|
|
460
|
461
|
lifecycleScope.launch(IO) {
|
|
461
|
|
- // showFullscreenMessageIfNeeded(applicationContext)
|
|
|
462
|
+ showFullscreenMessageIfNeeded(applicationContext)
|
|
462
|
463
|
}
|
|
463
|
464
|
|
|
464
|
465
|
// Unless the activity is recreated, navigate to home first (without rendering it)
|
| ... |
... |
@@ -498,7 +499,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
|
498
|
499
|
),
|
|
499
|
500
|
)
|
|
500
|
501
|
// This will record an event in Nimbus' internal event store. Used for behavioral targeting
|
|
501
|
|
- // recordEventInNimbus("app_opened")
|
|
|
502
|
+ recordEventInNimbus("app_opened")
|
|
502
|
503
|
|
|
503
|
504
|
if (safeIntent.action.equals(ACTION_OPEN_PRIVATE_TAB) && source == APP_ICON) {
|
|
504
|
505
|
AppIcon.newPrivateTabTapped.record(NoExtras())
|
| ... |
... |
@@ -1549,12 +1550,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
|
1549
|
1550
|
keyDismissButtonText = null,
|
|
1550
|
1551
|
)
|
|
1551
|
1552
|
|
|
1552
|
|
- /*
|
|
1553
|
1553
|
researchSurfaceDialogFragment.onAccept = {
|
|
1554
|
1554
|
processIntent(messaging.getIntentForMessage(nextMessage))
|
|
1555
|
1555
|
components.appStore.dispatch(AppAction.MessagingAction.MessageClicked(nextMessage))
|
|
1556
|
1556
|
}
|
|
1557
|
|
- */
|
|
1558
|
1557
|
|
|
1559
|
1558
|
researchSurfaceDialogFragment.onDismiss = {
|
|
1560
|
1559
|
components.appStore.dispatch(AppAction.MessagingAction.MessageDismissed(nextMessage))
|
| ... |
... |
@@ -1567,10 +1566,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
|
1567
|
1566
|
)
|
|
1568
|
1567
|
}
|
|
1569
|
1568
|
|
|
1570
|
|
-// // Update message as displayed.
|
|
1571
|
|
-// val currentBootUniqueIdentifier = BootUtils.getBootIdentifier(context)
|
|
1572
|
|
-//
|
|
1573
|
|
-// messaging.onMessageDisplayed(nextMessage, currentBootUniqueIdentifier)
|
|
|
1569
|
+ // Update message as displayed.
|
|
|
1570
|
+ val currentBootUniqueIdentifier = BootUtils.getBootIdentifier(context)
|
|
|
1571
|
+
|
|
|
1572
|
+ messaging.onMessageDisplayed(nextMessage, currentBootUniqueIdentifier)
|
|
1574
|
1573
|
}
|
|
1575
|
1574
|
|
|
1576
|
1575
|
private fun showCrashReporter() {
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
| ... |
... |
@@ -598,7 +598,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { |
|
598
|
598
|
|
|
599
|
599
|
override fun navToQuickSettingsSheet(tab: SessionState, sitePermissions: SitePermissions?) {
|
|
600
|
600
|
val useCase = requireComponents.useCases.trackingProtectionUseCases
|
|
601
|
|
- // FxNimbus.features.cookieBanners.recordExposure()
|
|
|
601
|
+ FxNimbus.features.cookieBanners.recordExposure()
|
|
602
|
602
|
useCase.containsException(tab.id) { hasTrackingProtectionException ->
|
|
603
|
603
|
lifecycleScope.launch {
|
|
604
|
604
|
val cookieBannersStorage = requireComponents.core.cookieBannersStorage
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt
| ... |
... |
@@ -49,6 +49,7 @@ import org.mozilla.fenix.GleanMetrics.SyncAuth |
|
49
|
49
|
import org.mozilla.fenix.R
|
|
50
|
50
|
import org.mozilla.fenix.ext.components
|
|
51
|
51
|
import org.mozilla.fenix.ext.maxActiveTime
|
|
|
52
|
+import org.mozilla.fenix.ext.recordEventInNimbus
|
|
52
|
53
|
import org.mozilla.fenix.ext.settings
|
|
53
|
54
|
import org.mozilla.fenix.perf.StrictModeManager
|
|
54
|
55
|
import org.mozilla.fenix.perf.lazyMonitored
|
| ... |
... |
@@ -266,7 +267,7 @@ internal class TelemetryAccountObserver( |
|
266
|
267
|
// User signed-in into an existing FxA account.
|
|
267
|
268
|
AuthType.Signin -> {
|
|
268
|
269
|
SyncAuth.signIn.record(NoExtras())
|
|
269
|
|
- // context.recordEventInNimbus("sync_auth.sign_in")
|
|
|
270
|
+ context.recordEventInNimbus("sync_auth.sign_in")
|
|
270
|
271
|
}
|
|
271
|
272
|
|
|
272
|
273
|
// User created a new FxA account.
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/NimbusComponents.kt
| ... |
... |
@@ -5,28 +5,17 @@ |
|
5
|
5
|
package org.mozilla.fenix.components
|
|
6
|
6
|
|
|
7
|
7
|
import android.content.Context
|
|
8
|
|
-import android.content.Intent
|
|
9
|
|
-import android.net.Uri
|
|
10
|
8
|
import mozilla.components.service.nimbus.NimbusApi
|
|
11
|
|
-import mozilla.components.service.nimbus.NimbusDisabled
|
|
12
|
9
|
import mozilla.components.service.nimbus.messaging.FxNimbusMessaging
|
|
13
|
|
-import mozilla.components.service.nimbus.messaging.Message
|
|
14
|
|
-import mozilla.components.service.nimbus.messaging.Message.Metadata
|
|
15
|
|
-import mozilla.components.service.nimbus.messaging.MessageData
|
|
16
|
|
-import mozilla.components.service.nimbus.messaging.MessageMetadataStorage
|
|
17
|
|
-import mozilla.components.service.nimbus.messaging.MessageSurfaceId
|
|
18
|
10
|
import mozilla.components.service.nimbus.messaging.NimbusMessagingController
|
|
19
|
11
|
import mozilla.components.service.nimbus.messaging.NimbusMessagingControllerInterface
|
|
20
|
12
|
import mozilla.components.service.nimbus.messaging.NimbusMessagingStorage
|
|
21
|
13
|
import mozilla.components.service.nimbus.messaging.OnDiskMessageMetadataStorage
|
|
22
|
|
-import mozilla.components.service.nimbus.messaging.StyleData
|
|
23
|
14
|
import org.mozilla.experiments.nimbus.NimbusEventStore
|
|
24
|
15
|
import org.mozilla.experiments.nimbus.NimbusMessagingHelperInterface
|
|
25
|
|
-import org.mozilla.experiments.nimbus.NullNimbus
|
|
26
|
16
|
import org.mozilla.fenix.BuildConfig
|
|
27
|
17
|
import org.mozilla.fenix.experiments.createNimbus
|
|
28
|
18
|
import org.mozilla.fenix.messaging.CustomAttributeProvider
|
|
29
|
|
-import org.mozilla.fenix.nimbus.FxNimbus
|
|
30
|
19
|
import org.mozilla.fenix.perf.lazyMonitored
|
|
31
|
20
|
|
|
32
|
21
|
/**
|
| ... |
... |
@@ -39,14 +28,7 @@ class NimbusComponents(private val context: Context) { |
|
39
|
28
|
* should be mediated through a FML generated class, e.g. [FxNimbus].
|
|
40
|
29
|
*/
|
|
41
|
30
|
val sdk: NimbusApi by lazyMonitored {
|
|
42
|
|
- if (BuildConfig.DATA_COLLECTION_DISABLED) {
|
|
43
|
|
- NimbusDisabled(context)
|
|
44
|
|
- } else {
|
|
45
|
|
- createNimbus(context, BuildConfig.NIMBUS_ENDPOINT).also { api ->
|
|
46
|
|
- FxNimbus.api = api
|
|
47
|
|
- }
|
|
48
|
|
- }
|
|
49
|
|
-
|
|
|
31
|
+ createNimbus(context, BuildConfig.NIMBUS_ENDPOINT)
|
|
50
|
32
|
}
|
|
51
|
33
|
|
|
52
|
34
|
/**
|
| ... |
... |
@@ -62,8 +44,7 @@ class NimbusComponents(private val context: Context) { |
|
62
|
44
|
* the JEXL helper available from [createJexlHelper].
|
|
63
|
45
|
*/
|
|
64
|
46
|
val events: NimbusEventStore by lazyMonitored {
|
|
65
|
|
- NullNimbus(context)
|
|
66
|
|
- //sdk.events
|
|
|
47
|
+ sdk.events
|
|
67
|
48
|
}
|
|
68
|
49
|
|
|
69
|
50
|
/**
|
| ... |
... |
@@ -97,7 +78,7 @@ class NimbusComponents(private val context: Context) { |
|
97
|
78
|
* from the Nimbus Messaging component.
|
|
98
|
79
|
*/
|
|
99
|
80
|
val messaging: NimbusMessagingControllerInterface by lazyMonitored {
|
|
100
|
|
- NullNimbusMessagingController(
|
|
|
81
|
+ NimbusMessagingController(
|
|
101
|
82
|
messagingStorage = messagingStorage,
|
|
102
|
83
|
deepLinkScheme = BuildConfig.DEEP_LINK_SCHEME,
|
|
103
|
84
|
)
|
| ... |
... |
@@ -111,132 +92,10 @@ class NimbusComponents(private val context: Context) { |
|
111
|
92
|
private val messagingStorage by lazyMonitored {
|
|
112
|
93
|
NimbusMessagingStorage(
|
|
113
|
94
|
context = context,
|
|
114
|
|
- metadataStorage = NullMessageMetadataStorage(), //OnDiskMessageMetadataStorage(context),
|
|
|
95
|
+ metadataStorage = OnDiskMessageMetadataStorage(context),
|
|
115
|
96
|
nimbus = sdk,
|
|
116
|
97
|
messagingFeature = FxNimbusMessaging.features.messaging,
|
|
117
|
98
|
attributeProvider = CustomAttributeProvider,
|
|
118
|
99
|
)
|
|
119
|
100
|
}
|
|
120
|
101
|
} |
|
121
|
|
-// Noop impl of MessageMetadataStorage to replace OnDiskMessageMetadataStorage
|
|
122
|
|
-class NullMessageMetadataStorage(): MessageMetadataStorage {
|
|
123
|
|
- override suspend fun getMetadata(): Map<String, Message.Metadata> {
|
|
124
|
|
- var metadataMap: MutableMap<String, Message.Metadata> = hashMapOf()
|
|
125
|
|
- return metadataMap
|
|
126
|
|
- }
|
|
127
|
|
-
|
|
128
|
|
- override suspend fun addMetadata(metadata: Message.Metadata): Message.Metadata {
|
|
129
|
|
- return metadata
|
|
130
|
|
- }
|
|
131
|
|
-
|
|
132
|
|
- override suspend fun updateMetadata(metadata: Message.Metadata) {
|
|
133
|
|
- // noop
|
|
134
|
|
- }
|
|
135
|
|
-}
|
|
136
|
|
-
|
|
137
|
|
-class NullNimbusMessagingController(
|
|
138
|
|
- messagingStorage: NimbusMessagingStorage,
|
|
139
|
|
- deepLinkScheme: String,
|
|
140
|
|
-) : NimbusMessagingController(messagingStorage, deepLinkScheme) {
|
|
141
|
|
-
|
|
142
|
|
- private val nullMessage: Message = Message(
|
|
143
|
|
- id = "",
|
|
144
|
|
- data = MessageData(),
|
|
145
|
|
- action = "",
|
|
146
|
|
- style = StyleData(),
|
|
147
|
|
- triggerIfAll = listOf(),
|
|
148
|
|
- excludeIfAny = listOf(),
|
|
149
|
|
- metadata = Metadata(""),
|
|
150
|
|
- )
|
|
151
|
|
-
|
|
152
|
|
- override suspend fun onMessageDisplayed(displayedMessage: Message, bootIdentifier: String?): Message {
|
|
153
|
|
- return nullMessage
|
|
154
|
|
- }
|
|
155
|
|
-
|
|
156
|
|
- /**
|
|
157
|
|
- * Called when a message has been dismissed by the user.
|
|
158
|
|
- *
|
|
159
|
|
- * Records a messageDismissed event, and records that the message
|
|
160
|
|
- * has been dismissed.
|
|
161
|
|
- */
|
|
162
|
|
- override suspend fun onMessageDismissed(message: Message) {
|
|
163
|
|
- return
|
|
164
|
|
- }
|
|
165
|
|
-
|
|
166
|
|
- /**
|
|
167
|
|
- * Called when a microsurvey attached to a message has been completed by the user.
|
|
168
|
|
- *
|
|
169
|
|
- * @param message The message containing the microsurvey that was completed.
|
|
170
|
|
- * @param answer The user's response to the microsurvey question.
|
|
171
|
|
- */
|
|
172
|
|
- override suspend fun onMicrosurveyCompleted(message: Message, answer: String) {
|
|
173
|
|
- return
|
|
174
|
|
- }
|
|
175
|
|
-
|
|
176
|
|
- /**
|
|
177
|
|
- * Called once the user has clicked on a message.
|
|
178
|
|
- *
|
|
179
|
|
- * This records that the message has been clicked on, but does not record a
|
|
180
|
|
- * glean event. That should be done via [processMessageActionToUri].
|
|
181
|
|
- */
|
|
182
|
|
- override suspend fun onMessageClicked(message: Message) {
|
|
183
|
|
- return
|
|
184
|
|
- }
|
|
185
|
|
-
|
|
186
|
|
- /**
|
|
187
|
|
- * Create and return the relevant [Intent] for the given [Message].
|
|
188
|
|
- *
|
|
189
|
|
- * @param message the [Message] to create the [Intent] for.
|
|
190
|
|
- * @return an [Intent] using the processed [Message].
|
|
191
|
|
- */
|
|
192
|
|
- override fun getIntentForMessage(message: Message) = Intent()
|
|
193
|
|
-
|
|
194
|
|
- /**
|
|
195
|
|
- * Will attempt to get the [Message] for the given [id].
|
|
196
|
|
- *
|
|
197
|
|
- * @param id the [Message.id] of the [Message] to try to match.
|
|
198
|
|
- * @return the [Message] with a matching [id], or null if no [Message] has a matching [id].
|
|
199
|
|
- */
|
|
200
|
|
- override suspend fun getMessage(id: String): Message? {
|
|
201
|
|
- return nullMessage
|
|
202
|
|
- }
|
|
203
|
|
-
|
|
204
|
|
- /**
|
|
205
|
|
- * The [message] action needs to be examined for string substitutions
|
|
206
|
|
- * and any `uuid` needs to be recorded in the Glean event.
|
|
207
|
|
- *
|
|
208
|
|
- * We call this `process` as it has a side effect of logging a Glean event while it
|
|
209
|
|
- * creates a URI string for the message action.
|
|
210
|
|
- */
|
|
211
|
|
- override fun processMessageActionToUri(message: Message): Uri {
|
|
212
|
|
- return Uri.EMPTY
|
|
213
|
|
- }
|
|
214
|
|
-
|
|
215
|
|
- override fun sendDismissedMessageTelemetry(messageId: String) {
|
|
216
|
|
- return
|
|
217
|
|
- }
|
|
218
|
|
-
|
|
219
|
|
- override fun sendShownMessageTelemetry(messageId: String) {
|
|
220
|
|
- return
|
|
221
|
|
- }
|
|
222
|
|
-
|
|
223
|
|
- override fun sendExpiredMessageTelemetry(messageId: String) {
|
|
224
|
|
- return
|
|
225
|
|
- }
|
|
226
|
|
-
|
|
227
|
|
- override fun sendClickedMessageTelemetry(messageId: String, uuid: String?) {
|
|
228
|
|
- return
|
|
229
|
|
- }
|
|
230
|
|
-
|
|
231
|
|
- override fun sendMicrosurveyCompletedTelemetry(messageId: String, answer: String) {
|
|
232
|
|
- return
|
|
233
|
|
- }
|
|
234
|
|
-
|
|
235
|
|
- override fun convertActionIntoDeepLinkSchemeUri(action: String): Uri = Uri.EMPTY
|
|
236
|
|
-
|
|
237
|
|
- override suspend fun getMessages(): List<Message> = listOf()
|
|
238
|
|
-
|
|
239
|
|
- override suspend fun getNextMessage(surfaceId: MessageSurfaceId) = nullMessage
|
|
240
|
|
-
|
|
241
|
|
- override fun getNextMessage(surfaceId: MessageSurfaceId, messages: List<Message>) = nullMessage
|
|
242
|
|
-} |
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
| ... |
... |
@@ -581,7 +581,7 @@ class HomeFragment : Fragment(), UserInteractionHandler { |
|
581
|
581
|
|
|
582
|
582
|
disableAppBarDragging()
|
|
583
|
583
|
|
|
584
|
|
- // FxNimbus.features.homescreen.recordExposure()
|
|
|
584
|
+ FxNimbus.features.homescreen.recordExposure()
|
|
585
|
585
|
|
|
586
|
586
|
// DO NOT MOVE ANYTHING BELOW THIS addMarker CALL!
|
|
587
|
587
|
requireComponents.core.engine.profiler?.addMarker(
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt
| ... |
... |
@@ -33,7 +33,7 @@ class FenixOnboarding(context: Context) : PreferencesHolder { |
|
33
|
33
|
// - We would like to evaluate the configuration only once (and thus it's kept in memory
|
|
34
|
34
|
// and not re-evaluated)
|
|
35
|
35
|
val config by lazy {
|
|
36
|
|
- // FxNimbus.features.onboarding.recordExposure()
|
|
|
36
|
+ FxNimbus.features.onboarding.recordExposure()
|
|
37
|
37
|
FxNimbus.features.onboarding.value()
|
|
38
|
38
|
}
|
|
39
|
39
|
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorker.kt
| ... |
... |
@@ -45,7 +45,7 @@ class ReEngagementNotificationWorker( |
|
45
|
45
|
|
|
46
|
46
|
// Recording the exposure event here to capture all users who met all criteria to receive
|
|
47
|
47
|
// the re-engagement notification
|
|
48
|
|
- // FxNimbus.features.reEngagementNotification.recordExposure()
|
|
|
48
|
+ FxNimbus.features.reEngagementNotification.recordExposure()
|
|
49
|
49
|
|
|
50
|
50
|
if (!settings.reEngagementNotificationEnabled) {
|
|
51
|
51
|
return Result.success()
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
| ... |
... |
@@ -216,14 +216,11 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { |
|
216
|
216
|
override fun onResume() {
|
|
217
|
217
|
super.onResume()
|
|
218
|
218
|
|
|
219
|
|
- // IN TOR BROWSER: We don't talk about Nimbus!
|
|
220
|
|
- // ~Use nimbus to set the title, and a trivial addition~
|
|
221
|
|
- // val nimbusValidation = FxNimbus.features.nimbusValidation.value()
|
|
|
219
|
+ // Use nimbus to set the title, and a trivial addition
|
|
|
220
|
+ val nimbusValidation = FxNimbus.features.nimbusValidation.value()
|
|
222
|
221
|
|
|
223
|
|
- // val title = nimbusValidation.settingsTitle
|
|
224
|
|
- // val suffix = nimbusValidation.settingsPunctuation
|
|
225
|
|
- val title = getString(R.string.settings_title)
|
|
226
|
|
- val suffix = ""
|
|
|
222
|
+ val title = nimbusValidation.settingsTitle
|
|
|
223
|
+ val suffix = nimbusValidation.settingsPunctuation
|
|
227
|
224
|
|
|
228
|
225
|
showToolbar("$title$suffix")
|
|
229
|
226
|
|
| ... |
... |
@@ -819,7 +816,7 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { |
|
819
|
816
|
|
|
820
|
817
|
@VisibleForTesting
|
|
821
|
818
|
internal fun setupCookieBannerPreference() {
|
|
822
|
|
- // FxNimbus.features.cookieBanners.recordExposure()
|
|
|
819
|
+ FxNimbus.features.cookieBanners.recordExposure()
|
|
823
|
820
|
if (context?.settings()?.shouldShowCookieBannerUI == false) return
|
|
824
|
821
|
with(requirePreference<SwitchPreference>(R.string.pref_key_cookie_banner_private_mode)) {
|
|
825
|
822
|
isVisible = context.settings().shouldShowCookieBannerUI
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt
| ... |
... |
@@ -40,7 +40,7 @@ class DefaultLocaleSettingsController( |
|
40
|
40
|
LocaleManager.updateBaseConfiguration(activity, locale)
|
|
41
|
41
|
|
|
42
|
42
|
// Invalidate cached values to use the new locale
|
|
43
|
|
- // FxNimbus.features.nimbusValidation.withCachedValue(null)
|
|
|
43
|
+ FxNimbus.features.nimbusValidation.withCachedValue(null)
|
|
44
|
44
|
activity.recreate()
|
|
45
|
45
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
|
46
|
46
|
activity.overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, 0, 0)
|
| ... |
... |
@@ -60,7 +60,7 @@ class DefaultLocaleSettingsController( |
|
60
|
60
|
LocaleManager.updateBaseConfiguration(activity, localeSettingsStore.state.localeList[0])
|
|
61
|
61
|
|
|
62
|
62
|
// Invalidate cached values to use the default locale
|
|
63
|
|
- // FxNimbus.features.nimbusValidation.withCachedValue(null)
|
|
|
63
|
+ FxNimbus.features.nimbusValidation.withCachedValue(null)
|
|
64
|
64
|
activity.recreate()
|
|
65
|
65
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
|
66
|
66
|
activity.overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, 0, 0)
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/SaveToPDFMiddleware.kt
| ... |
... |
@@ -22,6 +22,7 @@ import org.mozilla.fenix.R |
|
22
|
22
|
import org.mozilla.fenix.browser.StandardSnackbarError
|
|
23
|
23
|
import org.mozilla.fenix.components.appstate.AppAction
|
|
24
|
24
|
import org.mozilla.fenix.ext.components
|
|
|
25
|
+import org.mozilla.fenix.ext.recordEventInNimbus
|
|
25
|
26
|
import org.mozilla.geckoview.GeckoSession
|
|
26
|
27
|
import org.mozilla.geckoview.GeckoSession.GeckoPrintException.ERROR_NO_ACTIVITY_CONTEXT
|
|
27
|
28
|
import org.mozilla.geckoview.GeckoSession.GeckoPrintException.ERROR_NO_ACTIVITY_CONTEXT_DELEGATE
|
| ... |
... |
@@ -152,7 +153,7 @@ class SaveToPDFMiddleware( |
|
152
|
153
|
source = telemetrySource(isPdf),
|
|
153
|
154
|
),
|
|
154
|
155
|
)
|
|
155
|
|
- // context.recordEventInNimbus("print_tapped")
|
|
|
156
|
+ context.recordEventInNimbus("print_tapped")
|
|
156
|
157
|
} else {
|
|
157
|
158
|
Events.saveToPdfTapped.record(
|
|
158
|
159
|
Events.SaveToPdfTappedExtra(
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
| ... |
... |
@@ -320,7 +320,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
320
|
320
|
var showWallpaperOnboarding by lazyFeatureFlagPreference(
|
|
321
|
321
|
key = appContext.getPreferenceKey(R.string.pref_key_wallpapers_onboarding),
|
|
322
|
322
|
featureFlag = true,
|
|
323
|
|
- default = { true /* mr2022Sections[Mr2022Section.WALLPAPERS_SELECTION_TOOL] == true */ },
|
|
|
323
|
+ default = { true },
|
|
324
|
324
|
)
|
|
325
|
325
|
|
|
326
|
326
|
var openLinksInAPrivateTab by booleanPreference(
|
| ... |
... |
@@ -820,25 +820,25 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
820
|
820
|
get() = false // cookieBannersSection[CookieBannersSection.FEATURE_UI] == 1
|
|
821
|
821
|
|
|
822
|
822
|
val shouldEnableCookieBannerDetectOnly: Boolean
|
|
823
|
|
- get() = false // cookieBannersSection[CookieBannersSection.FEATURE_SETTING_DETECT_ONLY] == 1
|
|
|
823
|
+ get() = false
|
|
824
|
824
|
|
|
825
|
825
|
val shouldEnableCookieBannerGlobalRules: Boolean
|
|
826
|
|
- get() = false // cookieBannersSection[CookieBannersSection.FEATURE_SETTING_GLOBAL_RULES] == 1
|
|
|
826
|
+ get() = false
|
|
827
|
827
|
|
|
828
|
828
|
val shouldEnableCookieBannerGlobalRulesSubFrame: Boolean
|
|
829
|
|
- get() = false // cookieBannersSection[CookieBannersSection.FEATURE_SETTING_GLOBAL_RULES_SUB_FRAMES] == 1
|
|
|
829
|
+ get() = false
|
|
830
|
830
|
|
|
831
|
831
|
val shouldEnableQueryParameterStripping: Boolean
|
|
832
|
|
- get() = true // queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING] == "1"
|
|
|
832
|
+ get() = true
|
|
833
|
833
|
|
|
834
|
834
|
val shouldEnableQueryParameterStrippingPrivateBrowsing: Boolean
|
|
835
|
|
- get() = true // queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING_PMB] == "1"
|
|
|
835
|
+ get() = true
|
|
836
|
836
|
|
|
837
|
837
|
val queryParameterStrippingAllowList: String
|
|
838
|
|
- get() = "" // queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING_ALLOW_LIST].orEmpty()
|
|
|
838
|
+ get() = ""
|
|
839
|
839
|
|
|
840
|
840
|
val queryParameterStrippingStripList: String
|
|
841
|
|
- get() = "" // queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING_STRIP_LIST].orEmpty()
|
|
|
841
|
+ get() = ""
|
|
842
|
842
|
|
|
843
|
843
|
/**
|
|
844
|
844
|
* Declared as a function for performance purposes. This could be declared as a variable using
|
| ... |
... |
@@ -896,8 +896,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
896
|
896
|
* Indicates if the re-engagement notification feature is enabled
|
|
897
|
897
|
*/
|
|
898
|
898
|
val reEngagementNotificationType: Int
|
|
899
|
|
- get() = 0 // Neither Type A or B
|
|
900
|
|
- // FxNimbus.features.reEngagementNotification.value().type
|
|
|
899
|
+ get() = 0
|
|
901
|
900
|
|
|
902
|
901
|
val shouldUseAutoBatteryTheme by booleanPreference(
|
|
903
|
902
|
appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme),
|
| ... |
... |
@@ -1709,24 +1708,22 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
1709
|
1708
|
return currentlyEnabledLanguages.contains(userLangTag)
|
|
1710
|
1709
|
}
|
|
1711
|
1710
|
|
|
1712
|
|
-// private val mr2022Sections: Map<Mr2022Section, Boolean>
|
|
1713
|
|
-// get() =
|
|
1714
|
|
-// FxNimbus.features.mr2022.value().sectionsEnabled
|
|
|
1711
|
+ private val mr2022Sections: Map<Mr2022Section, Boolean>
|
|
|
1712
|
+ get() =
|
|
|
1713
|
+ FxNimbus.features.mr2022.value().sectionsEnabled
|
|
1715
|
1714
|
|
|
1716
|
|
-// private val cookieBannersSection: Map<CookieBannersSection, Int>
|
|
1717
|
|
-// get() =
|
|
1718
|
|
-// FxNimbus.features.cookieBanners.value().sectionsEnabled
|
|
|
1715
|
+ private val cookieBannersSection: Map<CookieBannersSection, Int>
|
|
|
1716
|
+ get() =
|
|
|
1717
|
+ FxNimbus.features.cookieBanners.value().sectionsEnabled
|
|
1719
|
1718
|
|
|
1720
|
|
-// private val queryParameterStrippingSection: Map<QueryParameterStrippingSection, String>
|
|
1721
|
|
-// get() =
|
|
1722
|
|
-// FxNimbus.features.queryParameterStripping.value().sectionsEnabled
|
|
|
1719
|
+ private val queryParameterStrippingSection: Map<QueryParameterStrippingSection, String>
|
|
|
1720
|
+ get() =
|
|
|
1721
|
+ FxNimbus.features.queryParameterStripping.value().sectionsEnabled
|
|
1723
|
1722
|
|
|
1724
|
|
-// private val homescreenSections: Map<HomeScreenSection, Boolean>
|
|
1725
|
|
-// get() =
|
|
1726
|
|
-// FxNimbus.features.homescreen.value().sectionsEnabled
|
|
|
1723
|
+ private val homescreenSections: Map<HomeScreenSection, Boolean>
|
|
|
1724
|
+ get() =
|
|
|
1725
|
+ FxNimbus.features.homescreen.value().sectionsEnabled
|
|
1727
|
1726
|
|
|
1728
|
|
- // IN TOR BROWSER: we want to avoid ever calling Nimbus, so we hard-code defaults
|
|
1729
|
|
- // for everything that would have accessed this property.
|
|
1730
|
1727
|
var historyMetadataUIFeature by lazyFeatureFlagPreference(
|
|
1731
|
1728
|
appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature),
|
|
1732
|
1729
|
default = { true },
|
| ... |
... |
@@ -1739,7 +1736,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
1739
|
1736
|
var showSyncCFR by lazyFeatureFlagPreference(
|
|
1740
|
1737
|
appContext.getPreferenceKey(R.string.pref_key_should_show_sync_cfr),
|
|
1741
|
1738
|
featureFlag = true,
|
|
1742
|
|
- default = { false /* mr2022Sections[Mr2022Section.SYNC_CFR] == true */ },
|
|
|
1739
|
+ default = { false },
|
|
1743
|
1740
|
)
|
|
1744
|
1741
|
|
|
1745
|
1742
|
/**
|
| ... |
... |
@@ -1748,7 +1745,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
1748
|
1745
|
var showHomeOnboardingDialog by lazyFeatureFlagPreference(
|
|
1749
|
1746
|
appContext.getPreferenceKey(R.string.pref_key_should_show_home_onboarding_dialog),
|
|
1750
|
1747
|
featureFlag = true,
|
|
1751
|
|
- default = { true /* mr2022Sections[Mr2022Section.HOME_ONBOARDING_DIALOG_EXISTING_USERS] == true */ },
|
|
|
1748
|
+ default = { true },
|
|
1752
|
1749
|
)
|
|
1753
|
1750
|
|
|
1754
|
1751
|
/**
|
| ... |
... |
@@ -1917,7 +1914,6 @@ class Settings(private val appContext: Context) : PreferencesHolder { |
|
1917
|
1914
|
isLauncherIntent: Boolean,
|
|
1918
|
1915
|
): Boolean {
|
|
1919
|
1916
|
return if (featureEnabled && !hasUserBeenOnboarded && isLauncherIntent) {
|
|
1920
|
|
- // FxNimbus.features.junoOnboarding.recordExposure()
|
|
1921
|
1917
|
false
|
|
1922
|
1918
|
} else {
|
|
1923
|
1919
|
false
|
|