@Test public void testLogStateTransition() throws Exception { appStateManager.getSession().start(context); manager.mInstallType = MParticle.InstallType.KnownInstall; BaseMPMessage message = manager.logStateTransition(null, null, null, null, null, 0, 0, 0); assertNull(message); message = manager.logStateTransition("", null, null, null, null, 0, 0, 0); assertNull(message); String currentActivity = "some activity name"; String launchUri = "some uri"; String launchExtras = "some extras"; String launchSourcePackage = "com.some.package"; message = manager.logStateTransition(Constants.StateTransitionType.STATE_TRANS_INIT, currentActivity, launchUri, launchExtras, launchSourcePackage, 42, 24, 123); assertNotNull(message); assertEquals(Constants.MessageType.APP_STATE_TRANSITION, message.getMessageType()); assertEquals(message.getString(Constants.MessageKey.STATE_TRANSITION_TYPE), Constants.StateTransitionType.STATE_TRANS_INIT); assertEquals(message.getSessionId(), appStateManager.getSession().mSessionID); assertEquals(message.getString(Constants.MessageKey.CURRENT_ACTIVITY), currentActivity); assertEquals(message.getString(Constants.MessageKey.ST_LAUNCH_REFERRER), launchUri); assertEquals(message.getString(Constants.MessageKey.ST_LAUNCH_PARAMS), launchExtras); assertEquals(message.getString(Constants.MessageKey.ST_LAUNCH_SOURCE_PACKAGE), launchSourcePackage); assertEquals(message.getLong(Constants.MessageKey.ST_LAUNCH_PRV_FORE_TIME), 42); assertEquals(message.getLong(Constants.MessageKey.ST_LAUNCH_TIME_SUSPENDED), 24); assertEquals(message.getLong(Constants.MessageKey.ST_INTERRUPTIONS), 123); assertEquals(message.getBoolean(Constants.MessageKey.APP_INIT_UPGRADE), false); assertEquals(message.getBoolean(Constants.MessageKey.APP_INIT_FIRST_RUN), true); Mockito.verify(messageHandler, Mockito.times(1)).sendMessage(Mockito.any(Message.class)); }
public BaseMPMessage logStateTransition(String stateTransInit, String currentActivity, String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions) { if (!MPUtility.isEmpty(stateTransInit)) { try { BaseMPMessage message = new BaseMPMessage.Builder(MessageType.APP_STATE_TRANSITION) .timestamp(System.currentTimeMillis()) .build(mAppStateManager.getSession(), mLocation, mConfigManager.getMpid()); message.put(MessageKey.STATE_TRANSITION_TYPE, stateTransInit); if (currentActivity != null) { message.put(MessageKey.CURRENT_ACTIVITY, currentActivity); } boolean crashedInForeground = sPreferences.getBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false); if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT) || stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_FORE)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, true).apply(); message.put(MessageKey.ST_LAUNCH_REFERRER, launchUri); message.put(MessageKey.ST_LAUNCH_PARAMS, launchExtras); message.put(MessageKey.ST_LAUNCH_SOURCE_PACKAGE, launchSourcePackage); if (previousForegroundTime > 0) { message.put(MessageKey.ST_LAUNCH_PRV_FORE_TIME, previousForegroundTime); } if (suspendedTime > 0) { message.put(MessageKey.ST_LAUNCH_TIME_SUSPENDED, suspendedTime); } if (interruptions >= 0) { message.put(MessageKey.ST_INTERRUPTIONS, interruptions); } } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT)) { SharedPreferences.Editor editor = sPreferences.edit(); if (!isFirstRunForAST()) { message.put(MessageKey.APP_INIT_CRASHED, crashedInForeground); } int versionCode = 0; try { PackageInfo pInfo = sContext.getPackageManager().getPackageInfo(sContext.getPackageName(), 0); versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException nnfe) { } boolean upgrade = (versionCode != sPreferences.getInt(Constants.PrefKeys.INITUPGRADE, versionCode)); editor.putInt(Constants.PrefKeys.INITUPGRADE, versionCode).apply(); if (!upgrade) { if (mInstallType == MParticle.InstallType.KnownUpgrade) { upgrade = true; } else if (mInstallType == MParticle.InstallType.KnownInstall) { upgrade = false; } } message.put(MessageKey.APP_INIT_FIRST_RUN, isFirstRunForAST()); if (isFirstRunForAST()) { setFirstRunForAST(false); } message.put(MessageKey.APP_INIT_UPGRADE, upgrade); } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_BG)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false).apply(); } mMessageHandler.sendMessage(mMessageHandler.obtainMessage(MessageHandler.STORE_MESSAGE, message)); return message; } catch (JSONException e) { Logger.warning("Failed to create mParticle state transition message."); } } return null; }
MessageManager implements MessageManagerCallbacks, ReportingManager { public BaseMPMessage logStateTransition(String stateTransInit, String currentActivity, String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions) { if (!MPUtility.isEmpty(stateTransInit)) { try { BaseMPMessage message = new BaseMPMessage.Builder(MessageType.APP_STATE_TRANSITION) .timestamp(System.currentTimeMillis()) .build(mAppStateManager.getSession(), mLocation, mConfigManager.getMpid()); message.put(MessageKey.STATE_TRANSITION_TYPE, stateTransInit); if (currentActivity != null) { message.put(MessageKey.CURRENT_ACTIVITY, currentActivity); } boolean crashedInForeground = sPreferences.getBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false); if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT) || stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_FORE)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, true).apply(); message.put(MessageKey.ST_LAUNCH_REFERRER, launchUri); message.put(MessageKey.ST_LAUNCH_PARAMS, launchExtras); message.put(MessageKey.ST_LAUNCH_SOURCE_PACKAGE, launchSourcePackage); if (previousForegroundTime > 0) { message.put(MessageKey.ST_LAUNCH_PRV_FORE_TIME, previousForegroundTime); } if (suspendedTime > 0) { message.put(MessageKey.ST_LAUNCH_TIME_SUSPENDED, suspendedTime); } if (interruptions >= 0) { message.put(MessageKey.ST_INTERRUPTIONS, interruptions); } } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT)) { SharedPreferences.Editor editor = sPreferences.edit(); if (!isFirstRunForAST()) { message.put(MessageKey.APP_INIT_CRASHED, crashedInForeground); } int versionCode = 0; try { PackageInfo pInfo = sContext.getPackageManager().getPackageInfo(sContext.getPackageName(), 0); versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException nnfe) { } boolean upgrade = (versionCode != sPreferences.getInt(Constants.PrefKeys.INITUPGRADE, versionCode)); editor.putInt(Constants.PrefKeys.INITUPGRADE, versionCode).apply(); if (!upgrade) { if (mInstallType == MParticle.InstallType.KnownUpgrade) { upgrade = true; } else if (mInstallType == MParticle.InstallType.KnownInstall) { upgrade = false; } } message.put(MessageKey.APP_INIT_FIRST_RUN, isFirstRunForAST()); if (isFirstRunForAST()) { setFirstRunForAST(false); } message.put(MessageKey.APP_INIT_UPGRADE, upgrade); } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_BG)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false).apply(); } mMessageHandler.sendMessage(mMessageHandler.obtainMessage(MessageHandler.STORE_MESSAGE, message)); return message; } catch (JSONException e) { Logger.warning("Failed to create mParticle state transition message."); } } return null; } }
MessageManager implements MessageManagerCallbacks, ReportingManager { public BaseMPMessage logStateTransition(String stateTransInit, String currentActivity, String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions) { if (!MPUtility.isEmpty(stateTransInit)) { try { BaseMPMessage message = new BaseMPMessage.Builder(MessageType.APP_STATE_TRANSITION) .timestamp(System.currentTimeMillis()) .build(mAppStateManager.getSession(), mLocation, mConfigManager.getMpid()); message.put(MessageKey.STATE_TRANSITION_TYPE, stateTransInit); if (currentActivity != null) { message.put(MessageKey.CURRENT_ACTIVITY, currentActivity); } boolean crashedInForeground = sPreferences.getBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false); if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT) || stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_FORE)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, true).apply(); message.put(MessageKey.ST_LAUNCH_REFERRER, launchUri); message.put(MessageKey.ST_LAUNCH_PARAMS, launchExtras); message.put(MessageKey.ST_LAUNCH_SOURCE_PACKAGE, launchSourcePackage); if (previousForegroundTime > 0) { message.put(MessageKey.ST_LAUNCH_PRV_FORE_TIME, previousForegroundTime); } if (suspendedTime > 0) { message.put(MessageKey.ST_LAUNCH_TIME_SUSPENDED, suspendedTime); } if (interruptions >= 0) { message.put(MessageKey.ST_INTERRUPTIONS, interruptions); } } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT)) { SharedPreferences.Editor editor = sPreferences.edit(); if (!isFirstRunForAST()) { message.put(MessageKey.APP_INIT_CRASHED, crashedInForeground); } int versionCode = 0; try { PackageInfo pInfo = sContext.getPackageManager().getPackageInfo(sContext.getPackageName(), 0); versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException nnfe) { } boolean upgrade = (versionCode != sPreferences.getInt(Constants.PrefKeys.INITUPGRADE, versionCode)); editor.putInt(Constants.PrefKeys.INITUPGRADE, versionCode).apply(); if (!upgrade) { if (mInstallType == MParticle.InstallType.KnownUpgrade) { upgrade = true; } else if (mInstallType == MParticle.InstallType.KnownInstall) { upgrade = false; } } message.put(MessageKey.APP_INIT_FIRST_RUN, isFirstRunForAST()); if (isFirstRunForAST()) { setFirstRunForAST(false); } message.put(MessageKey.APP_INIT_UPGRADE, upgrade); } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_BG)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false).apply(); } mMessageHandler.sendMessage(mMessageHandler.obtainMessage(MessageHandler.STORE_MESSAGE, message)); return message; } catch (JSONException e) { Logger.warning("Failed to create mParticle state transition message."); } } return null; } MessageManager();  MessageManager(Context appContext, ConfigManager configManager, MParticle.InstallType installType, AppStateManager appStateManager, MParticleDBManager dbManager, MessageHandler messageHandler, UploadHandler uploadHandler);  MessageManager(ConfigManager configManager, AppStateManager appStateManager, boolean devicePerformanceMetricsDisabled, MParticleDBManager dbManager, MParticleOptions options); }
MessageManager implements MessageManagerCallbacks, ReportingManager { public BaseMPMessage logStateTransition(String stateTransInit, String currentActivity, String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions) { if (!MPUtility.isEmpty(stateTransInit)) { try { BaseMPMessage message = new BaseMPMessage.Builder(MessageType.APP_STATE_TRANSITION) .timestamp(System.currentTimeMillis()) .build(mAppStateManager.getSession(), mLocation, mConfigManager.getMpid()); message.put(MessageKey.STATE_TRANSITION_TYPE, stateTransInit); if (currentActivity != null) { message.put(MessageKey.CURRENT_ACTIVITY, currentActivity); } boolean crashedInForeground = sPreferences.getBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false); if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT) || stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_FORE)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, true).apply(); message.put(MessageKey.ST_LAUNCH_REFERRER, launchUri); message.put(MessageKey.ST_LAUNCH_PARAMS, launchExtras); message.put(MessageKey.ST_LAUNCH_SOURCE_PACKAGE, launchSourcePackage); if (previousForegroundTime > 0) { message.put(MessageKey.ST_LAUNCH_PRV_FORE_TIME, previousForegroundTime); } if (suspendedTime > 0) { message.put(MessageKey.ST_LAUNCH_TIME_SUSPENDED, suspendedTime); } if (interruptions >= 0) { message.put(MessageKey.ST_INTERRUPTIONS, interruptions); } } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT)) { SharedPreferences.Editor editor = sPreferences.edit(); if (!isFirstRunForAST()) { message.put(MessageKey.APP_INIT_CRASHED, crashedInForeground); } int versionCode = 0; try { PackageInfo pInfo = sContext.getPackageManager().getPackageInfo(sContext.getPackageName(), 0); versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException nnfe) { } boolean upgrade = (versionCode != sPreferences.getInt(Constants.PrefKeys.INITUPGRADE, versionCode)); editor.putInt(Constants.PrefKeys.INITUPGRADE, versionCode).apply(); if (!upgrade) { if (mInstallType == MParticle.InstallType.KnownUpgrade) { upgrade = true; } else if (mInstallType == MParticle.InstallType.KnownInstall) { upgrade = false; } } message.put(MessageKey.APP_INIT_FIRST_RUN, isFirstRunForAST()); if (isFirstRunForAST()) { setFirstRunForAST(false); } message.put(MessageKey.APP_INIT_UPGRADE, upgrade); } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_BG)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false).apply(); } mMessageHandler.sendMessage(mMessageHandler.obtainMessage(MessageHandler.STORE_MESSAGE, message)); return message; } catch (JSONException e) { Logger.warning("Failed to create mParticle state transition message."); } } return null; } MessageManager();  MessageManager(Context appContext, ConfigManager configManager, MParticle.InstallType installType, AppStateManager appStateManager, MParticleDBManager dbManager, MessageHandler messageHandler, UploadHandler uploadHandler);  MessageManager(ConfigManager configManager, AppStateManager appStateManager, boolean devicePerformanceMetricsDisabled, MParticleDBManager dbManager, MParticleOptions options); boolean isDevicePerformanceMetricsDisabled(); void setDevicePerformanceMetricsDisabled(boolean disabled); static JSONObject getStateInfo(); static long getTotalMemory(); static long getSystemMemoryThreshold(); BaseMPMessage createFirstRunMessage(); BaseMPMessage startSession(InternalSession session); void updateSessionEnd(InternalSession session); void endSession(InternalSession session); void installReferrerUpdated(); BaseMPMessage logEvent(MPEvent event, String currentActivity); BaseMPMessage logEvent(CommerceEvent event); BaseMPMessage logScreen(MPEvent event, boolean started); BaseMPMessage logBreadcrumb(String breadcrumb); BaseMPMessage optOut(long time, boolean optOutStatus); BaseMPMessage logErrorEvent(String errorMessage, Throwable t, JSONObject attributes); BaseMPMessage logErrorEvent(String errorMessage, Throwable t, JSONObject attributes, boolean caught); BaseMPMessage logNetworkPerformanceEvent(long time, String method, String url, long length, long bytesSent, long bytesReceived, String requestString); BaseMPMessage setPushRegistrationId(String token, boolean registeringFlag); void setSessionAttributes(); void startUploadLoop(); void doUpload(); @Override void messagesClearedForUpload(); void setLocation(@Nullable Location location); Location getLocation(); BaseMPMessage logStateTransition(String stateTransInit, String currentActivity,
                                            String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions); void logNotification(ProviderCloudMessage cloudMessage, String appState); @Override void logNotification(int contentId, String payload, String appState, int newBehavior); void logProfileAction(String action); BaseMPMessage logUserIdentityChangeMessage(JSONObject newIdentity, JSONObject oldIdentity, JSONArray userIdentities, long mpId); BaseMPMessage logUserAttributeChangeMessage(String userAttributeKey, Object newValue, Object oldValue, boolean deleted, boolean isNewAttribute, long time, long mpId); @Override String getApiKey(); @SuppressLint("MissingPermission") @Override void delayedStart(); @Override void endUploadLoop(); @Override void checkForTrigger(BaseMPMessage message); void refreshConfiguration(); void initConfigDelayed(); @Override void log(JsonReportingMessage reportingMessage); @Override void logAll(List<? extends JsonReportingMessage> messageList); Map<String, Object> getUserAttributes(final UserAttributeListener listener, long mpId); void removeUserAttribute(String key, long mpId); @Override void attributeRemoved(String key, long mpId); void setUserAttribute(String key, Object value, long mpId); void setUserAttribute(String key, Object value, long mpId, boolean synchronously); void incrementUserAttribute(String key, int value, long mpId); synchronized DeviceAttributes getDeviceAttributes(); Map<MParticle.IdentityType, String> getUserIdentities(long mpId); JSONArray getUserIdentityJson(long mpId); void setDataConnection(NetworkInfo activeNetwork); BackgroundTaskHandler getTaskHandler(); Handler getMessageHandler(); MParticleDBManager getMParticleDBManager(); void disableHandlers(); void logAliasRequest(final AliasRequest aliasRequest); }
MessageManager implements MessageManagerCallbacks, ReportingManager { public BaseMPMessage logStateTransition(String stateTransInit, String currentActivity, String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions) { if (!MPUtility.isEmpty(stateTransInit)) { try { BaseMPMessage message = new BaseMPMessage.Builder(MessageType.APP_STATE_TRANSITION) .timestamp(System.currentTimeMillis()) .build(mAppStateManager.getSession(), mLocation, mConfigManager.getMpid()); message.put(MessageKey.STATE_TRANSITION_TYPE, stateTransInit); if (currentActivity != null) { message.put(MessageKey.CURRENT_ACTIVITY, currentActivity); } boolean crashedInForeground = sPreferences.getBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false); if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT) || stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_FORE)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, true).apply(); message.put(MessageKey.ST_LAUNCH_REFERRER, launchUri); message.put(MessageKey.ST_LAUNCH_PARAMS, launchExtras); message.put(MessageKey.ST_LAUNCH_SOURCE_PACKAGE, launchSourcePackage); if (previousForegroundTime > 0) { message.put(MessageKey.ST_LAUNCH_PRV_FORE_TIME, previousForegroundTime); } if (suspendedTime > 0) { message.put(MessageKey.ST_LAUNCH_TIME_SUSPENDED, suspendedTime); } if (interruptions >= 0) { message.put(MessageKey.ST_INTERRUPTIONS, interruptions); } } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_INIT)) { SharedPreferences.Editor editor = sPreferences.edit(); if (!isFirstRunForAST()) { message.put(MessageKey.APP_INIT_CRASHED, crashedInForeground); } int versionCode = 0; try { PackageInfo pInfo = sContext.getPackageManager().getPackageInfo(sContext.getPackageName(), 0); versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException nnfe) { } boolean upgrade = (versionCode != sPreferences.getInt(Constants.PrefKeys.INITUPGRADE, versionCode)); editor.putInt(Constants.PrefKeys.INITUPGRADE, versionCode).apply(); if (!upgrade) { if (mInstallType == MParticle.InstallType.KnownUpgrade) { upgrade = true; } else if (mInstallType == MParticle.InstallType.KnownInstall) { upgrade = false; } } message.put(MessageKey.APP_INIT_FIRST_RUN, isFirstRunForAST()); if (isFirstRunForAST()) { setFirstRunForAST(false); } message.put(MessageKey.APP_INIT_UPGRADE, upgrade); } if (stateTransInit.equals(Constants.StateTransitionType.STATE_TRANS_BG)) { sPreferences.edit().putBoolean(Constants.PrefKeys.CRASHED_IN_FOREGROUND, false).apply(); } mMessageHandler.sendMessage(mMessageHandler.obtainMessage(MessageHandler.STORE_MESSAGE, message)); return message; } catch (JSONException e) { Logger.warning("Failed to create mParticle state transition message."); } } return null; } MessageManager();  MessageManager(Context appContext, ConfigManager configManager, MParticle.InstallType installType, AppStateManager appStateManager, MParticleDBManager dbManager, MessageHandler messageHandler, UploadHandler uploadHandler);  MessageManager(ConfigManager configManager, AppStateManager appStateManager, boolean devicePerformanceMetricsDisabled, MParticleDBManager dbManager, MParticleOptions options); boolean isDevicePerformanceMetricsDisabled(); void setDevicePerformanceMetricsDisabled(boolean disabled); static JSONObject getStateInfo(); static long getTotalMemory(); static long getSystemMemoryThreshold(); BaseMPMessage createFirstRunMessage(); BaseMPMessage startSession(InternalSession session); void updateSessionEnd(InternalSession session); void endSession(InternalSession session); void installReferrerUpdated(); BaseMPMessage logEvent(MPEvent event, String currentActivity); BaseMPMessage logEvent(CommerceEvent event); BaseMPMessage logScreen(MPEvent event, boolean started); BaseMPMessage logBreadcrumb(String breadcrumb); BaseMPMessage optOut(long time, boolean optOutStatus); BaseMPMessage logErrorEvent(String errorMessage, Throwable t, JSONObject attributes); BaseMPMessage logErrorEvent(String errorMessage, Throwable t, JSONObject attributes, boolean caught); BaseMPMessage logNetworkPerformanceEvent(long time, String method, String url, long length, long bytesSent, long bytesReceived, String requestString); BaseMPMessage setPushRegistrationId(String token, boolean registeringFlag); void setSessionAttributes(); void startUploadLoop(); void doUpload(); @Override void messagesClearedForUpload(); void setLocation(@Nullable Location location); Location getLocation(); BaseMPMessage logStateTransition(String stateTransInit, String currentActivity,
                                            String launchUri, String launchExtras, String launchSourcePackage, long previousForegroundTime, long suspendedTime, int interruptions); void logNotification(ProviderCloudMessage cloudMessage, String appState); @Override void logNotification(int contentId, String payload, String appState, int newBehavior); void logProfileAction(String action); BaseMPMessage logUserIdentityChangeMessage(JSONObject newIdentity, JSONObject oldIdentity, JSONArray userIdentities, long mpId); BaseMPMessage logUserAttributeChangeMessage(String userAttributeKey, Object newValue, Object oldValue, boolean deleted, boolean isNewAttribute, long time, long mpId); @Override String getApiKey(); @SuppressLint("MissingPermission") @Override void delayedStart(); @Override void endUploadLoop(); @Override void checkForTrigger(BaseMPMessage message); void refreshConfiguration(); void initConfigDelayed(); @Override void log(JsonReportingMessage reportingMessage); @Override void logAll(List<? extends JsonReportingMessage> messageList); Map<String, Object> getUserAttributes(final UserAttributeListener listener, long mpId); void removeUserAttribute(String key, long mpId); @Override void attributeRemoved(String key, long mpId); void setUserAttribute(String key, Object value, long mpId); void setUserAttribute(String key, Object value, long mpId, boolean synchronously); void incrementUserAttribute(String key, int value, long mpId); synchronized DeviceAttributes getDeviceAttributes(); Map<MParticle.IdentityType, String> getUserIdentities(long mpId); JSONArray getUserIdentityJson(long mpId); void setDataConnection(NetworkInfo activeNetwork); BackgroundTaskHandler getTaskHandler(); Handler getMessageHandler(); MParticleDBManager getMParticleDBManager(); void disableHandlers(); void logAliasRequest(final AliasRequest aliasRequest); public UploadHandler mUploadHandler; }