@@ -70,8 +70,10 @@ public class SalesforceAnalyticsManager {
7070 private static final String UNAUTH_INSTANCE_KEY = "_no_user" ;
7171
7272 private static Map <String , SalesforceAnalyticsManager > INSTANCES ;
73- private static boolean sPublishHandlerActive ;
74- private static int sPublishFrequencyInHours = DEFAULT_PUBLISH_FREQUENCY_IN_HOURS ;
73+ private static boolean isPublishWorkRequestEnqueued ;
74+ private static boolean isPublishOneTimeOnAppBackgroundEnabled = true ;
75+ private static boolean isPublishPeriodicallyOnFrequencyEnabled = false ;
76+ private static int publishPeriodicallyFrequencyHours = DEFAULT_PUBLISH_FREQUENCY_IN_HOURS ;
7577 private static int sEventPublishBatchSize = DEFAULT_BATCH_SIZE ;
7678
7779 private final AnalyticsManager analyticsManager ;
@@ -102,7 +104,7 @@ public static synchronized SalesforceAnalyticsManager getInstance(UserAccount ac
102104 /**
103105 * Returns the instance of this class associated with this user and community.
104106 *
105- * @param account User account.
107+ * @param account User account.
106108 * @param communityId Community ID.
107109 * @return Instance of this class.
108110 */
@@ -131,9 +133,9 @@ public static synchronized SalesforceAnalyticsManager getInstance(UserAccount ac
131133 }
132134
133135 // Adds a handler for publishing if not already active.
134- if (!sPublishHandlerActive ) {
135- recreateAnalyticsPublishPeriodicWorkRequest ();
136- sPublishHandlerActive = true ;
136+ if (!isPublishWorkRequestEnqueued ) {
137+ recreateAnalyticsPeriodicBackgroundPublishingWorkRequest ();
138+ isPublishWorkRequestEnqueued = true ;
137139 }
138140 return instance ;
139141 }
@@ -157,7 +159,7 @@ public static synchronized void reset(UserAccount account) {
157159 /**
158160 * Resets the instance of this class associated with this user and community.
159161 *
160- * @param account User account.
162+ * @param account User account.
161163 * @param communityId Community ID.
162164 */
163165 public static synchronized void reset (UserAccount account , String communityId ) {
@@ -182,13 +184,80 @@ public static synchronized void reset(UserAccount account, String communityId) {
182184 }
183185
184186 /**
185- * Sets the publish frequency, in hours.
187+ * Sets the interval for periodic background publishing in hours.
188+ *
189+ * @param periodicBackgroundPublishingHoursInterval The interval for
190+ * periodic background
191+ * publishing in hours. It
192+ * is recommended to keep
193+ * this value under seven
194+ * days
195+ * @see #setPublishPeriodicallyOnFrequencyEnabled(boolean)
196+ */
197+ public static synchronized void setPublishPeriodicallyFrequencyHours (
198+ int periodicBackgroundPublishingHoursInterval
199+ ) {
200+ SalesforceAnalyticsManager .publishPeriodicallyFrequencyHours = periodicBackgroundPublishingHoursInterval ;
201+ setPublishPeriodicallyOnFrequencyEnabled (true );
202+ }
203+
204+ /**
205+ * Sets the interval for periodic background publishing in hours.
206+ *
207+ * @deprecated Planned for removal 13.0.
208+ * Use {@link #setPublishPeriodicallyFrequencyHours(int)} )}.
209+ */
210+ @ Deprecated ()
211+ public static synchronized void setPublishFrequencyInHours (
212+ int periodicBackgroundPublishingHoursInterval
213+ ) {
214+ setPublishPeriodicallyFrequencyHours (periodicBackgroundPublishingHoursInterval );
215+ }
216+
217+ /**
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.
241+ *
242+ * @noinspection unused
243+ * @see #setPublishPeriodicallyFrequencyHours
244+ */
245+ public static boolean isPublishPeriodicallyOnFrequencyEnabled () {
246+ return isPublishPeriodicallyOnFrequencyEnabled ;
247+ }
248+
249+ /**
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]
186255 *
187- * @param publishFrequencyInHours Publish frequency, in hours.
256+ * @param value True to enable. False to disable
257+ * @see #setPublishPeriodicallyFrequencyHours
188258 */
189- public static synchronized void setPublishFrequencyInHours (int publishFrequencyInHours ) {
190- sPublishFrequencyInHours = publishFrequencyInHours ;
191- recreateAnalyticsPublishPeriodicWorkRequest ();
259+ public static void setPublishPeriodicallyOnFrequencyEnabled (boolean value ) {
260+ isPublishPeriodicallyOnFrequencyEnabled = value ;
192261 }
193262
194263 /**
@@ -209,9 +278,23 @@ public static synchronized void setEventPublishBatchSize(int batchSize) {
209278 * Returns the publish frequency currently set, in hours.
210279 *
211280 * @return Publish frequency, in hours.
281+ * @noinspection unused
212282 */
283+ public static int getPublishPeriodicallyFrequencyHours () {
284+ return publishPeriodicallyFrequencyHours ;
285+ }
286+
287+ /**
288+ * Returns the publish frequency currently set, in hours.
289+ *
290+ * @return Publish frequency, in hours.
291+ * @noinspection unused
292+ * @deprecated Planned for removal 13.0.
293+ * Use {@link #getPublishPeriodicallyFrequencyHours()} )}.
294+ */
295+ @ Deprecated
213296 public static int getPublishFrequencyInHours () {
214- return sPublishFrequencyInHours ;
297+ return getPublishPeriodicallyFrequencyHours () ;
215298 }
216299
217300 /**
@@ -295,6 +378,7 @@ public synchronized void publishEvents(Iterable<InstrumentationEvent> events) {
295378 if (events == null ) {
296379 return ;
297380 }
381+
298382 final Set <String > eventsIds = new HashSet <>();
299383 boolean success = true ;
300384 final Set <Map .Entry <Class <? extends Transform >, Class <? extends AnalyticsPublisher >>> remoteKeySet = remotes .entrySet ();
@@ -474,10 +558,10 @@ private void resetAnalyticsPolicy() {
474558 e .commit ();
475559 }
476560
477- private static void recreateAnalyticsPublishPeriodicWorkRequest () {
478- AnalyticsPublishingWorker .Companion .reEnqueueAnalyticsPublishPeriodicWorkRequest (
561+ private static void recreateAnalyticsPeriodicBackgroundPublishingWorkRequest () {
562+ AnalyticsPublishingWorker .Companion .enqueueAnalyticsPublishWorkRequest (
479563 SalesforceSDKManager .getInstance ().getAppContext (),
480- sPublishFrequencyInHours
564+ ( long ) publishPeriodicallyFrequencyHours
481565 );
482566 }
483567}
0 commit comments