summaryrefslogtreecommitdiff
path: root/javaSE
diff options
context:
space:
mode:
authorJulian Kast <Julian.kast@livio.io>2021-03-05 11:47:00 -0500
committerGitHub <noreply@github.com>2021-03-05 11:47:00 -0500
commitaf9d766dcee36cca42a3563a149b4623f04ae688 (patch)
treec289ef30cef3f410c5ecf67860953db72e264099 /javaSE
parenta70d82d4219a80412fb092cbb4989a722083338b (diff)
downloadsdl_android-af9d766dcee36cca42a3563a149b4623f04ae688.tar.gz
Screen manager alert manager (#1555)
* Added AlertAudioData and AudioData classes * Added AlertManager and BaseAlertManager Classes, Some logic to get proof of concept working * Added PresentAlertOperation Class and some bare bones logic for proof of concept * Added AlertView class and AlertCanceledListener interface * Added AlertManager to BaseScreenManager, more refining is needed here * Added FileManager to AlertManager * Cleaned up AudioData and AlertAudioData, implemented creating TTSChunk in AudioData * Modified BaseAlertManager to have queues and to create an operation for Alerts. * Added logic to create the Alert RPC, Upload Images and audio files. Added capability checking and aligned with IOS. * Fixed formatting and Fixed Timeout logic * Move All AlertManager related classes to Screen Manager package * Add logic for Cancel ID to BaseAlertManager and PresentAlertOperation, as well as fix adding audio to an alert in PresentAlertOperation * Fix package naming and null checking * Added check to check and assign SoftButtons Id's in BaseScreenManager, BaseAlertManager and BaseSoftButtonManager * Alert Text field concatenation logic * Added method to managerUtility to check for alert textField capability * Added PermissionManager logic to ScreenManager and AlertManager * Added a setter to AlertView * Rearrange logic in constructor to prevent errors when creating listeners * Fix softbutton id logic and add permission manager to alertManager in BaseScreenManager * Add Permission Manager to Alert Manager * Add Permission Manager import to AlertManager * Add AlertCompletionListener * Add AlertCompletionListener * Renamed SoftButtonLocation to ManagerLocation to be more generic, incase it needs to be used in the future * Modify AudioData Classes, Proposal needs revised to reflect changes. * Add ranges for cancelId's for chioiceSetManager and alertManager * Fix setting audio data for alert RPC in AlertManager and fix names in AudioData class * Added SpeechCapability check for audio files * Added check for supporting alert icon * Added CancelInteraction to presentAlertOperation * Add permission manager to ISDL, revert code adding it to the screenManager * Proposed Adding PermissionManager to ISDL * Add null audio check in PresentAlertOperation as well as crated clone methods for AlertAudioData and AlertView, fixed issue in AudioData where speech capability was not being added to prompts with spoken strings * revert changes adding permissionManager to baseLifecycleManagrer * Add ISdl implementation to SdlManager in android and javaSE * Formatting fix * Adding unit test classes * Fix npe in PresentAlertOperation and make ISdl in SdlManager package private for unit test * Added testPresentAlert to PresentAlertOperation, fix SystemCapabilityManagerTest * Add audio file to testing for alerts * Add null check for softbuttons in PresentAlertOperation * Fixe unit test involving sdlManager ISdl, AlertManagers Permission Manager and setting SoftButtons * Add AlertManager class to javaSE * Added AlertAudioDataTest and fixed UnsupportedOperationException * Remove checkAndAssignButtonIds from BaseSoftButtonManager as we use the screenManager now * Add Unit Test * Add SoftButtonCheck and unit test to AlertManager * Add unit test to AlertManager * Add setters in AlertView as well as add unit test * Add comments and Align with IOS * Align AudioData and AlertAudioData classes with IOS and add comments * Align and cleanup AlertView with iOS * Deprecated setting SoftButtonID's and added comments * Remove unnecessary check * Blocking a unit test to check code cov * Reformat AlertAudioData, Add SoftButtonObject clone method, Add OnRPCNotificationListener in AlertManager of softButtons * Add Unit Test to PresentAlertOperation * Rearrange cancel logic and add unit test. * Add OnFinished to operation * Added custom errors * Change logInfo to logError in PresentAlertOperation for checking if it supports audio files, fix unit test and formatting * Formatting fix * Add DispatchGroup.java and implement it in PresentAlertOperation * Use new FileManager method filesNeedsUpload in PresentAlertOperation * Rename methods for alignment and fix unit test * iOS alignment * iOS Alignment * Align with IOS for setting SoftButtons in AlertView * Update JavaDocs * Update WindowCapability for pending task in AlertManager if Capability changes. * Add max value to cancelID and align naming with iOS * Update hello_sdl_android and hello_sdl_java to use alertManager * Fix unit test * fixed bug in PresentAlertOperation * Set range for SoftButtonId's Currently we don’t have managers for Subtle Alerts, Alert Maneuver, Scrollable Message, Show Constant TBT and Perform Audio Pass Thrus. These RPCs can all have soft buttons (that the developer must assign a custom id to). Limiting the range for managers will allow us to guarantee to developers that what they set in thoes RPC's won’t clash with the screen manager generated soft button ids. * Add getMTU to new ISDL Implementation * Fixed log errors * Add Class description to AlertManager * Update documentation on AlertManager * Update cancel ID Range * Add Class description * Add a throw exception if trying to set a softButton with more then one state for an Alert * Change creatAlert() to alertRPC() in PresentAlertOperation, add log message when Alert is finished presenting and remove cancel check as op is over after Alert has presented * Remove cancel op in PresentAlert OnRPCResponseListener as it is not needed at this point * Removed prompts list and created an audioData HashMap * Fix unit test * Fix CancelAlert logic, remove unnecessary check for getting timeout in AlertView * Fix unit test * fixed comment * Remove default constructors and unnecessary tag * Set alert manager cancel id range is 1-100 and the choice set manager cancel id range is 101-200. * Added a check to see if a file has been uploaded before adding it to the Alert RPC * Align with iOS for textFields truncate * Add JavaDocs * Align uploading Audio for Alert in PresentAlertOperation with iOS * Add SoftButton limit and align Image uploads with IOS * Limit number of softButtons set in alertManager * Align Alert cancel logic with IOS * remove unnecessary setter for WindowCapability * Change nextCancelID to package private for unit test. Fix unit test * Add Comments to AlertView and AudioData Class * Fix audio check in PresentAlertOperation * Add Comments and rearrange method order to match IOS * Remove space in test class * Clean up testing imports and formatting * Remove cancel op test as logic was changed to match iOS * add setter for showWaitIndicator * Update queue number to 6 * Fix speechCapabilities conversion * Fix audioFile check * Add comment to deprecation of setting ID to SoftButtonObject * Fix cancelID for choiceSetManager * Add interface for clearing out references to SoftButtonObjects in BaseAlertManager * Fix unit test for PresentAlertOperation * Remove unnecessary if statement Co-authored-by: Julian Kast <julian@livio.com>
Diffstat (limited to 'javaSE')
-rw-r--r--javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java16
-rw-r--r--javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManager.java144
-rw-r--r--javaSE/javaSE/src/main/java/com/smartdevicelink/managers/screen/AlertManager.java18
3 files changed, 174 insertions, 4 deletions
diff --git a/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java b/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java
index d4eef253b..8b15abaf4 100644
--- a/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java
+++ b/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java
@@ -32,11 +32,13 @@
package com.smartdevicelink.java;
+import com.smartdevicelink.managers.AlertCompletionListener;
import com.smartdevicelink.managers.CompletionListener;
import com.smartdevicelink.managers.SdlManager;
import com.smartdevicelink.managers.SdlManagerListener;
import com.smartdevicelink.managers.file.filetypes.SdlArtwork;
import com.smartdevicelink.managers.lifecycle.LifecycleConfigurationUpdate;
+import com.smartdevicelink.managers.screen.AlertView;
import com.smartdevicelink.managers.screen.OnButtonListener;
import com.smartdevicelink.managers.screen.choiceset.ChoiceCell;
import com.smartdevicelink.managers.screen.choiceset.ChoiceSet;
@@ -373,10 +375,16 @@ public class SdlService {
}
private void showAlert(String text) {
- Alert alert = new Alert();
- alert.setAlertText1(text);
- alert.setDuration(5000);
- sdlManager.sendRPC(alert);
+ AlertView.Builder builder = new AlertView.Builder();
+ builder.setText(text);
+ builder.setTimeout(5);
+ AlertView alertView = builder.build();
+ sdlManager.getScreenManager().presentAlert(alertView, new AlertCompletionListener() {
+ @Override
+ public void onComplete(boolean success, Integer tryAgainTime) {
+ DebugTool.logInfo(TAG, "Alert presented: "+ success);
+ }
+ });
}
public interface SdlServiceCallback {
diff --git a/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManager.java b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManager.java
index 09a495355..879ff0f27 100644
--- a/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManager.java
+++ b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManager.java
@@ -34,11 +34,27 @@ package com.smartdevicelink.managers;
import androidx.annotation.NonNull;
+import com.livio.taskmaster.Taskmaster;
import com.smartdevicelink.managers.file.FileManager;
+import com.smartdevicelink.managers.lifecycle.SystemCapabilityManager;
import com.smartdevicelink.managers.permission.PermissionManager;
import com.smartdevicelink.managers.screen.ScreenManager;
+import com.smartdevicelink.protocol.ISdlServiceListener;
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.protocol.enums.SessionType;
+import com.smartdevicelink.proxy.RPCMessage;
+import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse;
+import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
+import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCRequestListener;
+import com.smartdevicelink.streaming.video.VideoStreamingParameters;
import com.smartdevicelink.transport.enums.TransportType;
import com.smartdevicelink.util.DebugTool;
+import com.smartdevicelink.util.Version;
+
+import java.util.List;
/**
* <strong>SDLManager</strong> <br>
@@ -178,4 +194,132 @@ public class SdlManager extends BaseSdlManager {
super(appId, appName, listener);
}
}
+ private ISdl _internalInterface = new ISdl() {
+ @Override
+ public void start() {
+ lifecycleManager.getInternalInterface(SdlManager.this).start();
+ }
+
+ @Override
+ public void stop() {
+ lifecycleManager.getInternalInterface(SdlManager.this).start();
+ }
+
+ @Override
+ public boolean isConnected() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).isConnected();
+ }
+
+ @Override
+ public void addServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).addServiceListener(serviceType, sdlServiceListener);
+ }
+
+ @Override
+ public void removeServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).removeServiceListener(serviceType, sdlServiceListener);
+ }
+
+ @Override
+ public void startVideoService(VideoStreamingParameters parameters, boolean encrypted) {
+ lifecycleManager.getInternalInterface(SdlManager.this).startVideoService(parameters,encrypted);
+ }
+
+ @Override
+ public void startAudioService(boolean encrypted) {
+ lifecycleManager.getInternalInterface(SdlManager.this).startAudioService(encrypted);
+ }
+
+ @Override
+ public void sendRPC(RPCMessage message) {
+ lifecycleManager.getInternalInterface(SdlManager.this).sendRPC(message);
+ }
+
+ @Override
+ public void sendRPCs(List<? extends RPCMessage> rpcs, OnMultipleRequestListener listener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).sendRPCs(rpcs, listener);
+ }
+
+ @Override
+ public void sendSequentialRPCs(List<? extends RPCMessage> rpcs, OnMultipleRequestListener listener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).sendSequentialRPCs(rpcs, listener);
+ }
+
+ @Override
+ public void addOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).addOnRPCNotificationListener(notificationId, listener);
+ }
+
+ @Override
+ public boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
+ return lifecycleManager.getInternalInterface(SdlManager.this).removeOnRPCNotificationListener(notificationId, listener);
+ }
+
+ @Override
+ public void addOnRPCRequestListener(FunctionID functionID, OnRPCRequestListener listener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).addOnRPCRequestListener(functionID, listener);
+ }
+
+ @Override
+ public boolean removeOnRPCRequestListener(FunctionID functionID, OnRPCRequestListener listener) {
+ return lifecycleManager.getInternalInterface(SdlManager.this).removeOnRPCRequestListener(functionID, listener);
+ }
+
+ @Override
+ public void addOnRPCListener(FunctionID responseId, OnRPCListener listener) {
+ lifecycleManager.getInternalInterface(SdlManager.this).addOnRPCListener(responseId, listener);
+ }
+
+ @Override
+ public boolean removeOnRPCListener(FunctionID responseId, OnRPCListener listener) {
+ return lifecycleManager.getInternalInterface(SdlManager.this).removeOnRPCListener(responseId, listener);
+ }
+
+ @Override
+ public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getRegisterAppInterfaceResponse();
+ }
+
+ @Override
+ public boolean isTransportForServiceAvailable(SessionType serviceType) {
+ return lifecycleManager.getInternalInterface(SdlManager.this).isTransportForServiceAvailable(serviceType);
+ }
+
+ @NonNull
+ @Override
+ public SdlMsgVersion getSdlMsgVersion() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getSdlMsgVersion();
+ }
+
+ @NonNull
+ @Override
+ public Version getProtocolVersion() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getProtocolVersion();
+ }
+
+ @Override
+ public long getMtu(SessionType serviceType) {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getMtu(serviceType);
+ }
+
+ @Override
+ public void startRPCEncryption() {
+ lifecycleManager.getInternalInterface(SdlManager.this).startRPCEncryption();
+ }
+
+ @Override
+ public Taskmaster getTaskmaster() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getTaskmaster();
+ }
+
+ @Override
+ public SystemCapabilityManager getSystemCapabilityManager() {
+ return lifecycleManager.getInternalInterface(SdlManager.this).getSystemCapabilityManager();
+ }
+
+ @Override
+ public PermissionManager getPermissionManager() {
+ return permissionManager;
+ }
+ };
}
diff --git a/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/screen/AlertManager.java b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/screen/AlertManager.java
new file mode 100644
index 000000000..addcee13d
--- /dev/null
+++ b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/screen/AlertManager.java
@@ -0,0 +1,18 @@
+package com.smartdevicelink.managers.screen;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import com.smartdevicelink.managers.ISdl;
+import com.smartdevicelink.managers.file.FileManager;
+/**
+ * <strong>AlertManager</strong> <br>
+ * <p>
+ * Note: This class must be accessed through the SdlManager. Do not instantiate it by itself. <br>
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public class AlertManager extends BaseAlertManager {
+
+ public AlertManager(@NonNull ISdl internalInterface, @NonNull FileManager fileManager) {
+ super(internalInterface, fileManager);
+ }
+}