Skip to content

Commit 301e0f4

Browse files
@W-16176547: [MSDK Android] Code Review Follow-Up For W-15993541/W-15993636 - AILTN Publish & Push Notification Registration Updates (#2592)
1 parent 98f3360 commit 301e0f4

5 files changed

Lines changed: 119 additions & 91 deletions

File tree

libs/SalesforceSDK/src/com/salesforce/androidsdk/analytics/AnalyticsPublishingWorker.kt

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ import androidx.work.Worker
3838
import androidx.work.WorkerParameters
3939
import com.salesforce.androidsdk.accounts.UserAccountManager
4040
import com.salesforce.androidsdk.analytics.AnalyticsPublishingWorker.Companion.enqueueAnalyticsPublishWorkRequest
41+
import com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishDisabled
42+
import com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishOnAppBackground
43+
import com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishPeriodically
44+
import java.util.UUID
4145
import java.util.concurrent.TimeUnit.HOURS
4246

4347
/**
@@ -53,9 +57,7 @@ import java.util.concurrent.TimeUnit.HOURS
5357
*
5458
* @param context The Android context provided by the work manager
5559
* @param workerParams The worker parameters provided by the work manager
56-
* @see [SalesforceAnalyticsManager.setPublishOnceTimeOnAppBackgroundEnabled]
57-
* @see [SalesforceAnalyticsManager.setPublishPeriodicallyOnFrequencyEnabled]
58-
* @see [SalesforceAnalyticsManager.setPublishPeriodicallyFrequencyHours]
60+
* @see [SalesforceAnalyticsManager.analyticsPublishingType]
5961
* @see <a href='https://developer.android.com/guide/background'>Android
6062
* Background Tasks</a>
6163
*/
@@ -98,27 +100,27 @@ internal class AnalyticsPublishingWorker(
98100
* If a work request is already queued, it will be cancelled before
99101
* the replacement is enqueued.
100102
*
101-
* The publish hours interval parameter determines between background
102-
* periodic publishing and one-time publishing. Note, background
103-
* periodic publishing starts or resumes the host app and may incur
104-
* licensing costs if authorization token refresh is required.
103+
* Note, background periodic publishing starts or resumes the host app
104+
* and may incur licensing costs if authorization token refresh is
105+
* required.
105106
*
106107
* Only the Salesforce Mobile SDK should call this method as it is not
107108
* intended for public use.
108109
*
109110
* @param context The Android context
110111
* @param periodicBackgroundPublishingHoursInterval The interval for
111-
* periodic background publishing in hours or null to publish one time
112-
* only
112+
* periodic background publishing in hours
113113
* @return UUID The worker's unique id, which may be used for
114114
* cancellation
115115
*/
116116
fun enqueueAnalyticsPublishWorkRequest(
117117
context: Context,
118-
periodicBackgroundPublishingHoursInterval: Long? = null
119-
) = when (periodicBackgroundPublishingHoursInterval) {
118+
periodicBackgroundPublishingHoursInterval: Long = SalesforceAnalyticsManager.getPublishPeriodicallyFrequencyHours().toLong()
119+
): UUID? = when (SalesforceAnalyticsManager.analyticsPublishingType()) {
120120

121-
null -> OneTimeWorkRequest.Builder(
121+
PublishDisabled -> null
122+
123+
PublishOnAppBackground -> OneTimeWorkRequest.Builder(
122124
AnalyticsPublishingWorker::class.java
123125
).setConstraints(
124126
Constraints.Builder().setRequiredNetworkType(CONNECTED).build()
@@ -128,7 +130,7 @@ internal class AnalyticsPublishingWorker(
128130
}.getOrNull()?.enqueue(publishAnalyticsOneTimeWorkRequest)
129131
}.id
130132

131-
else -> PeriodicWorkRequest.Builder(
133+
PublishPeriodically -> PeriodicWorkRequest.Builder(
132134
AnalyticsPublishingWorker::class.java,
133135
periodicBackgroundPublishingHoursInterval,
134136
HOURS

libs/SalesforceSDK/src/com/salesforce/androidsdk/analytics/SalesforceAnalyticsManager.java

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,16 @@
2626
*/
2727
package com.salesforce.androidsdk.analytics;
2828

29+
import static com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishOnAppBackground;
30+
import static com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishPeriodically;
31+
2932
import android.content.Context;
3033
import android.content.SharedPreferences;
3134
import android.os.Build;
3235
import android.text.TextUtils;
3336

37+
import androidx.annotation.NonNull;
38+
3439
import com.salesforce.androidsdk.accounts.UserAccount;
3540
import com.salesforce.androidsdk.analytics.manager.AnalyticsManager;
3641
import com.salesforce.androidsdk.analytics.model.DeviceAppAttributes;
@@ -71,8 +76,10 @@ public class SalesforceAnalyticsManager {
7176

7277
private static Map<String, SalesforceAnalyticsManager> INSTANCES;
7378
private static boolean isPublishWorkRequestEnqueued;
74-
private static boolean isPublishOneTimeOnAppBackgroundEnabled = true;
75-
private static boolean isPublishPeriodicallyOnFrequencyEnabled = false;
79+
80+
/** The enabled Salesforce analytics publishing type */
81+
private static @NonNull SalesforceAnalyticsPublishingType analyticsPublishingType = PublishOnAppBackground;
82+
7683
private static int publishPeriodicallyFrequencyHours = DEFAULT_PUBLISH_FREQUENCY_IN_HOURS;
7784
private static int sEventPublishBatchSize = DEFAULT_BATCH_SIZE;
7885

@@ -192,13 +199,13 @@ public static synchronized void reset(UserAccount account, String communityId) {
192199
* is recommended to keep
193200
* this value under seven
194201
* days
195-
* @see #setPublishPeriodicallyOnFrequencyEnabled(boolean)
202+
* @see #setAnalyticsPublishingType(SalesforceAnalyticsPublishingType)
196203
*/
197204
public static synchronized void setPublishPeriodicallyFrequencyHours(
198205
int periodicBackgroundPublishingHoursInterval
199206
) {
200207
SalesforceAnalyticsManager.publishPeriodicallyFrequencyHours = periodicBackgroundPublishingHoursInterval;
201-
setPublishPeriodicallyOnFrequencyEnabled(true);
208+
setAnalyticsPublishingType(PublishPeriodically);
202209
}
203210

204211
/**
@@ -215,49 +222,21 @@ public static synchronized void setPublishFrequencyInHours(
215222
}
216223

217224
/**
218-
* Specifies if analytics publishing should occur one time when the app is
219-
* sent to the background.
220-
*/
221-
public static boolean isPublishOnceTimeOnAppBackgroundEnabled() {
222-
return isPublishOneTimeOnAppBackgroundEnabled;
223-
}
224-
225-
/**
226-
* Specifies if analytics publishing should occur one time when the app is
227-
* sent to the background.
228-
* <p/>
229-
* This is mutually exclusive with
230-
* [setPublishPeriodicallyOnFrequencyEnabled]
231-
*
232-
* @param value True to enable. False to disable
233-
*/
234-
public static void setPublishOnceTimeOnAppBackgroundEnabled(boolean value) {
235-
isPublishOneTimeOnAppBackgroundEnabled = value;
236-
}
237-
238-
/**
239-
* Specifies if analytics publishing should occur periodically as an
240-
* Android Background Task according to the frequency.
225+
* The enabled Salesforce analytics publishing type.
241226
*
242-
* @noinspection unused
243-
* @see #setPublishPeriodicallyFrequencyHours
227+
* @return The enabled Salesforce analytics publishing type
244228
*/
245-
public static boolean isPublishPeriodicallyOnFrequencyEnabled() {
246-
return isPublishPeriodicallyOnFrequencyEnabled;
229+
public static @NonNull SalesforceAnalyticsPublishingType analyticsPublishingType() {
230+
return analyticsPublishingType;
247231
}
248232

249233
/**
250-
* Specifies if analytics publishing should occur periodically as an
251-
* Android Background Task according to the frequency.
252-
* <p>
253-
* This is mutually exclusive with
254-
* [setPublishOnceTimeOnAppBackgroundEnabled]
234+
* Sets the enabled Salesforce analytics publishing type.
255235
*
256-
* @param value True to enable. False to disable
257-
* @see #setPublishPeriodicallyFrequencyHours
236+
* @param value The Salesforce analytics publishing type
258237
*/
259-
public static void setPublishPeriodicallyOnFrequencyEnabled(boolean value) {
260-
isPublishPeriodicallyOnFrequencyEnabled = value;
238+
public static void setAnalyticsPublishingType(@NonNull final SalesforceAnalyticsPublishingType value) {
239+
analyticsPublishingType = value;
261240
}
262241

263242
/**
@@ -564,4 +543,29 @@ private static void recreateAnalyticsPeriodicBackgroundPublishingWorkRequest() {
564543
(long) publishPeriodicallyFrequencyHours
565544
);
566545
}
546+
547+
/**
548+
* The available Salesforce analytics publishing types.
549+
*/
550+
public enum SalesforceAnalyticsPublishingType {
551+
552+
/**
553+
* Specifies analytics should not be published
554+
*/
555+
PublishDisabled,
556+
557+
/**
558+
* Specifies analytics publishing should occur one time when the app is sent to the
559+
* background
560+
*/
561+
PublishOnAppBackground,
562+
563+
/**
564+
* Specifies analytics publishing should occur periodically as a Android Background Task
565+
* according to the frequency
566+
*
567+
* @see #setPublishPeriodicallyFrequencyHours
568+
*/
569+
PublishPeriodically
570+
}
567571
}

libs/SalesforceSDK/src/com/salesforce/androidsdk/app/SalesforceSDKManager.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import com.salesforce.androidsdk.accounts.UserAccountManager.USER_SWITCH_TYPE_LO
7777
import com.salesforce.androidsdk.analytics.AnalyticsPublishingWorker.Companion.enqueueAnalyticsPublishWorkRequest
7878
import com.salesforce.androidsdk.analytics.EventBuilderHelper.createAndStoreEvent
7979
import com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager
80+
import com.salesforce.androidsdk.analytics.SalesforceAnalyticsManager.SalesforceAnalyticsPublishingType.PublishOnAppBackground
8081
import com.salesforce.androidsdk.analytics.security.Encryptor
8182
import com.salesforce.androidsdk.app.Features.FEATURE_APP_IS_IDP
8283
import com.salesforce.androidsdk.app.Features.FEATURE_APP_IS_SP
@@ -88,6 +89,7 @@ import com.salesforce.androidsdk.auth.HttpAccess
8889
import com.salesforce.androidsdk.auth.HttpAccess.DEFAULT
8990
import com.salesforce.androidsdk.auth.NativeLoginManager
9091
import com.salesforce.androidsdk.auth.OAuth2.LogoutReason
92+
import com.salesforce.androidsdk.auth.OAuth2.LogoutReason.UNKNOWN
9193
import com.salesforce.androidsdk.auth.OAuth2.revokeRefreshToken
9294
import com.salesforce.androidsdk.auth.idp.SPConfig
9395
import com.salesforce.androidsdk.auth.idp.interfaces.IDPManager
@@ -110,7 +112,8 @@ import com.salesforce.androidsdk.push.PushMessaging.register
110112
import com.salesforce.androidsdk.push.PushMessaging.unregister
111113
import com.salesforce.androidsdk.push.PushNotificationInterface
112114
import com.salesforce.androidsdk.push.PushService
113-
import com.salesforce.androidsdk.push.PushService.Companion.isPushNotificationsRegistrationOneTimeOnAppForegroundEnabled
115+
import com.salesforce.androidsdk.push.PushService.Companion.pushNotificationsRegistrationType
116+
import com.salesforce.androidsdk.push.PushService.PushNotificationReRegistrationType.ReRegistrationOnAppForeground
114117
import com.salesforce.androidsdk.rest.ClientManager
115118
import com.salesforce.androidsdk.rest.ClientManager.LoginOptions
116119
import com.salesforce.androidsdk.rest.RestClient
@@ -905,7 +908,7 @@ open class SalesforceSDKManager protected constructor(
905908
account = account,
906909
frontActivity = frontActivity,
907910
showLoginPage = showLoginPage,
908-
reason = LogoutReason.UNKNOWN
911+
reason = UNKNOWN
909912
)
910913
}
911914

@@ -931,7 +934,7 @@ open class SalesforceSDKManager protected constructor(
931934
account: Account? = null,
932935
frontActivity: Activity?,
933936
showLoginPage: Boolean = true,
934-
reason: LogoutReason = LogoutReason.UNKNOWN,
937+
reason: LogoutReason = UNKNOWN,
935938
) {
936939
createAndStoreEvent("userLogout", null, TAG, null)
937940
val clientMgr = ClientManager(
@@ -1461,7 +1464,7 @@ open class SalesforceSDKManager protected constructor(
14611464
screenLockManager?.onAppBackgrounded()
14621465

14631466
// Publish analytics one-time on app background, if enabled.
1464-
if (SalesforceAnalyticsManager.isPublishOnceTimeOnAppBackgroundEnabled()) {
1467+
if (SalesforceAnalyticsManager.analyticsPublishingType() == PublishOnAppBackground) {
14651468
enqueueAnalyticsPublishWorkRequest(
14661469
getInstance().appContext
14671470
)
@@ -1483,7 +1486,7 @@ open class SalesforceSDKManager protected constructor(
14831486

14841487
// Review push-notifications registration for the current user, if enabled.
14851488
userAccountManager.currentUser?.let { userAccount ->
1486-
if (isPushNotificationsRegistrationOneTimeOnAppForegroundEnabled) {
1489+
if (pushNotificationsRegistrationType == ReRegistrationOnAppForeground) {
14871490
register(
14881491
context = appContext,
14891492
account = userAccount,

libs/SalesforceSDK/src/com/salesforce/androidsdk/push/PushMessaging.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.salesforce.androidsdk.push.PushNotificationsRegistrationChangeWorker.
3939
import com.salesforce.androidsdk.push.PushNotificationsRegistrationChangeWorker.PushNotificationsRegistrationAction.Deregister
4040
import com.salesforce.androidsdk.push.PushNotificationsRegistrationChangeWorker.PushNotificationsRegistrationAction.Register
4141
import com.salesforce.androidsdk.push.PushService.Companion.enqueuePushNotificationsRegistrationWork
42+
import com.salesforce.androidsdk.push.PushService.PushNotificationReRegistrationType.ReRegistrationOnAppForeground
4243
import com.salesforce.androidsdk.security.KeyStoreWrapper
4344
import com.salesforce.androidsdk.util.SalesforceSDKLogger
4445

@@ -473,12 +474,14 @@ object PushMessaging {
473474
enqueuePushNotificationsRegistrationWork(
474475
userAccount = null,
475476
action = action,
477+
pushNotificationsRegistrationType = ReRegistrationOnAppForeground,
476478
delayDays = null
477479
)
478480
} else if (isRegistered(context, account)) {
479481
enqueuePushNotificationsRegistrationWork(
480482
userAccount = account,
481483
action = action,
484+
pushNotificationsRegistrationType = ReRegistrationOnAppForeground,
482485
delayDays = null
483486
)
484487
}

0 commit comments

Comments
 (0)