private void prepareCallActions(FcContext fcContext, SapaAppInfo appInfo) { FcActionFactory factory = fcContext.ActionFactory; SparseArray <SapaActionInfo> actions = appInfo.Actions; for (int i = 0; i < actions.size(); ++i) { SapaActionInfo actionInfo = actions.get(i); FcActionItem action = factory.newAppItem(appInfo, actionInfo); string actionName = actionInfo.Id; // Volume buttons needs to be separated from the rest of actions if (FcConstants.ACTION_VOLUME_UP.Equals(actionName)) { mVolumeActions[VOLUME_UP_INDEX] = action; } else if (FcConstants.ACTION_VOLUME_DOWN.Equals(actionName)) { mVolumeActions[VOLUME_DOWN_INDEX] = action; } else { mCallActions.Add(action); } } }
/// <summary> /// @brief Get intent that started application of given instanceId /// /// TODO: Describe catched exceptions /// </summary> /// <param name="instanceId"> unique instance id /// </param> /// <returns> Intent object or null </returns> public virtual Intent getLaunchIntent(string instanceId) { SapaAppInfo appInfo = getAppInfo(instanceId); if (appInfo == null) { Log.w(TAG, "Cannot start activity for application: " + instanceId + ": app not active"); return(null); } SapaAppService sapaAppService = SapaAppService; Intent intent = null; try { intent = sapaAppService.getLaunchIntent(appInfo.App); } catch (SapaConnectionNotSetException) { Log.w(TAG, "Cannot start activity for application " + instanceId + ": sapa connection has not been set"); } catch (IllegalAccessException) { Log.w(TAG, "Cannot start activity for application " + instanceId + ": illegal access"); } return(intent); }
public virtual void callAction(string instanceId, string actionId) { Log.d(TAG, "Calling remote action (id: " + actionId + ", instance: " + instanceId + ")"); SapaAppInfo info = getAppInfo(instanceId); if (null != info) { try { mSapaAppService.callAction(info.App, actionId); } catch (SapaConnectionNotSetException) { Log.d(TAG, "Cannot call action (id: " + actionId + ") for instance " + instanceId + ": Sapa connection not set"); } catch (SapaUndeclaredActionException) { Log.d(TAG, "Cannot call action (id: " + actionId + ") for instance " + instanceId + ": action undeclared"); } } else { Log.w(TAG, "Cannot call action (id: " + actionId + ") for instance " + instanceId + ": SapaApp not found"); } }
private void closeAnInstance(string instanceId) { // Native part of application is being deactivated. if (this.mSapaService != null && this.mProcessorList != null && this.mProcessorList.Count > 0) { SapaProcessor processor = this.mProcessorList[instanceId]; if (processor != null) { processor.deactivate(); mSapaService.unregister(processor); mProcessorList.Remove(instanceId); } } if (this.mAppInfoList != null && this.mAppInfoList.Count > 0) { SapaAppInfo sapaAppInfo = this.mAppInfoList[instanceId]; if (sapaAppInfo != null && sapaAppInfo.App != null) { try { // Application needs to declare that its instance was // successfully deactivated. mSapaAppService.removeFromActiveApps(sapaAppInfo.App); mAppInfoList.Remove(instanceId); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "Instance could not be removed from active list because of connection exception."); } } } mCallerPackageNameList.Remove(instanceId); mActionsList.Remove(instanceId); }
private void prepareReturnActions(FcContext fcContext, SapaAppInfo info) { Bundle config = info.Configuration; if (null != config) { int[] retButtonsIds = config.getIntArray(FcConstants.KEY_RETURN_BUTTONS); int[] retButtonsOpts = config.getIntArray(FcConstants.KEY_RETURN_BUTTONS_OPTS); if (retButtonsIds == null || retButtonsOpts == null) { prepareDefaultReturnActions(fcContext, info); } else if (retButtonsIds.Length == retButtonsOpts.Length) { prepareCustomReturnActions(fcContext, info, retButtonsIds, retButtonsOpts); } else { Log.w(TAG, "Sizes of arrays: " + FcConstants.KEY_RETURN_BUTTONS + " and " + FcConstants.KEY_RETURN_BUTTONS_OPTS + " are not equal"); prepareDefaultReturnActions(fcContext, info); } } else { prepareDefaultReturnActions(fcContext, info); } }
private void handleDeactivationIntent(Intent intent) { lock (this) { SapaApp sapaApp = SapaAppInfo.getApp(intent); this.mActionsList.Remove(sapaApp.InstanceId); foreach (KeyValuePair <string, SapaProcessor> entry in this.mProcessorList.SetOfKeyValuePairs()) { Log.d(TAG, "kakakaka " + entry.Key + " -> " + entry.Value); } SapaProcessor processor = this.mProcessorList[sapaApp.InstanceId]; Log.d(TAG, "kakakaka instanceId " + sapaApp.InstanceId + " processor " + processor); processor.deactivate(); this.mSapaService.unregister(this.mProcessorList[sapaApp.InstanceId]); this.mProcessorList.Remove(sapaApp.InstanceId); try { this.mSapaAppService.removeFromActiveApps(sapaApp); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "Instance could not be removed from active list because of connection exception."); } this.mAppInfoList.Remove(sapaApp.InstanceId); } }
private void prepareActions(FcContext fcContext, SapaAppInfo info) { prepareReturnActions(fcContext, info); prepareCallActions(fcContext, info); if (mDirection == LinearLayout.LAYOUT_DIRECTION_RTL) { reverseActions(); } }
public virtual string getVolumeText(SapaAppInfo info) { // update the volume if (info == null) { return("N/A"); } return("" + getCurrectVolume(info.App) + " dB"); }
/// <summary> /// This method saves current configuration in AppInfo of this application /// /// </summary> private void setConfiguration(SapaApp sapaApp, int volume) { Bundle bundle = new Bundle(); bundle.putInt("CONFIG", volume); SapaAppInfo info = this.mAppInfoList[sapaApp.InstanceId]; Log.d(TAG, "kaka volume[" + volume + "] was set in " + sapaApp.InstanceId); info.Configuration = bundle; }
private void prepareCustomReturnActions(FcContext fcContext, SapaAppInfo info, int[] drawableIds, int[] activityIds) { FcActionFactory factory = fcContext.ActionFactory; for (int i = 0; i < drawableIds.Length; ++i) { int drawableId = drawableIds[i]; int activityId = activityIds[i]; mReturnActions.Add(factory.newCustomReturnItem(info, drawableId, activityId)); } }
public override void onServiceConnected() { Log.d(TAG, "onServiceConnected"); try { if (this.mMyInfo == null) { mMyInfo = mSapaAppService.getInstalledApp(this.PackageName); } if (mMyInfo != null) { //Actions are being set in SapaAppInfo representing this application. mActionArray = new SparseArray <SapaActionInfo>(); mActionArray.put(0, new SapaActionInfo(COMMAND_SHUSH, R.drawable.ctrl_btn_stop_default, PackageName)); mMyInfo.Actions = mActionArray; //Native part is being initialised. Sapa sapa = new Sapa(); sapa.initialize(this); mSapaService = new SapaService(); mSapaProcessor = new SapaProcessor(this, null, new SapaProcessorStateListener(this, mMyInfo.App)); mSapaService.register(mSapaProcessor); mSapaProcessor.activate(); //Information about ports is being set in SapaAppInfo representing this app. //It can not be done before activating SapaProcessor. mMyInfo.PortFromSapaProcessor = mSapaProcessor; //Application needs to declare that it was successfully activated. if (mSapaAppService != null) { this.mSapaAppService.addActiveApp(this.mMyInfo); } } } catch (SapaConnectionNotSetException e) { Log.e(TAG, "App could not be added to active as connection has not been made."); } catch (System.ArgumentException e) { Log.e(TAG, "Initialisation of Sapa is not possible due to invalid context of application"); } catch (SsdkUnsupportedException e) { Log.e(TAG, "Initialisation of Sapa is not possible as Sapa is not available on the device"); } catch (InstantiationException e) { Log.e(TAG, "SapaService can not be instantiate"); } }
private void setSapaAppService(SapaAppService sapaAppService, string mainAppPackageName) { Log.d(TAG, "Setting sapa app service with main: " + mainAppPackageName); // unregister listeners from previous one removeSapaListeners(); mSapaAppService = sapaAppService; mMainAppPackageName = mainAppPackageName; mMainApp = findMainApp(sapaAppService, mainAppPackageName); // register listeners for the new one addSapaListeners(); }
/// <summary> /// @brief TODO! /// </summary> /// <param name="sapaAppService"> </param> /// <param name="mainPackage"> </param> public virtual void setSapaAppService(SapaAppService sapaAppService, string mainPackage) { Log.d(TAG, "setSapaAppService(" + mainPackage + ")"); mFcSapaConnector = new FcSapaServiceConnector(mModel, sapaAppService, mainPackage); mFcContext.SapaServiceConnector = mFcSapaConnector; MainApp = mFcSapaConnector.MainApp; SapaAppInfo sapaAppInfo = SapaAppInfo.getAppInfo(((Activity)Context).Intent); if (sapaAppInfo != null) { SelectedApp = sapaAppInfo; } }
public virtual void updateApp(SapaAppInfo appInfo, int mode) { lock (this) { string instanceId = appInfo.App.InstanceId; Log.d(TAG, "updateApp(" + instanceId + ", mode: " + mode + ")"); FcModelItem item = getItemForInstanceId(appInfo.App.InstanceId); if (null == item) { Log.w(TAG, "Cannot update app " + instanceId + ": unknown app"); return; } int position; if (mode == FcConstants.APP_TYPE_MAIN) { position = 0; } else if (mode == FcConstants.APP_TYPE_ORDINAL) { position = mOrderedApplications.IndexOf(instanceId); if (position < 0) { Log.w(TAG, "Cannot update app " + instanceId + ": not found on ordered list"); return; } if (null != mMainApplication) { position += 1; } } else { throw new InvalidParameterException("Unsupported mode " + mode); } // This needs to be updated after all the logic guards if (FcConstants.OPT_DETAILED_LOGS) { Log.d(TAG, "Updating application in a model: " + instanceId); } item.update(mFcContext, appInfo); if (null != mModelChangedListener) { mModelChangedListener.onFcModelChanged(position); } } }
private Drawable getDrawableFromApp(SapaAppInfo appInfo, int openRe) { Context context = Context; try { return(context.PackageManager.getResourcesForApplication(appInfo.PackageName).getDrawable(openRe)); } catch (NameNotFoundException e) { Log.e(TAG, "Exception:", e); } return(null); }
/* * This method is responsible for handling received intent. It can only be called when * connection is set. */ private void handleIntent(Intent intent) { int state = SapaAppInfo.getState(intent); switch (state) { case SapaAppInfo.STATE_ACTIVATING: this.handleActivationIntent(intent); break; case SapaAppInfo.STATE_DEACTIVATING: this.handleDeactivationIntent(intent); break; } }
private void modifyAction(SapaAppInfo info, string actionKey, int iconResId, bool isEnabled) { // In this example only one action can be active at the same time. // We need to change state of actions every time action is called. if (info != null && mSapaAppService != null) { // Obtaining current ActionInfo. SapaActionInfo action = info.getActionInfo(actionKey); if (action != null) { // Settling state. action.Visible = isEnabled; // Settling icon of action by setting id of the resource. action.Icon = iconResId; } } }
public virtual void insertApp(SapaAppInfo appInfo, int mode) { lock (this) { FcModelItem item = null; string instanceId = null; int position = -1; if (mode == FcConstants.APP_TYPE_ORDINAL) { item = FcModelItem.createOrdinal(mFcContext, appInfo); instanceId = item.InstanceId; mOrderedApplications.Add(instanceId); position = mOrderedApplications.Count - 1; } else if (mode == FcConstants.APP_TYPE_MAIN) { item = FcModelItem.createMain(mFcContext, appInfo); instanceId = item.InstanceId; mMainApplication = instanceId; position = 0; } else { throw new InvalidParameterException("Invalid mode: " + mode); } if (null == instanceId) { throw new System.InvalidOperationException("Model item not created: null reference!"); } if (isActiveApp(instanceId)) { item.Active = true; } item.Direction = mCurrentDirection; mApplicationMap[instanceId] = item; Log.d(TAG, "Inserting application to the model: " + instanceId); if (null != mModelChangedListener && position >= 0) { mModelChangedListener.onFcModelItemInserted(position); } } }
/// <summary> /// @brief Construct model item from SapaAppInfo structure /// </summary> /// <param name="info"> Data structure with information retrieved from SAPA </param> /// <param name="type"> Type of the item (main or ordinal) </param> internal FcModelItem(FcContext fcContext, SapaAppInfo info, int type) { SapaApp app = info.App; try { mIcon = info.getIcon(fcContext.Context); } catch (NameNotFoundException e) { LogUtils.throwable(TAG, "Drawable not set: name not found", e); } mInstanceId = app.InstanceId; mPackageName = app.PackageName; mType = type; prepareActions(fcContext, info); }
/// <param name="appInfo"> </param> public virtual void update(FcContext context, SapaAppInfo appInfo) { lock (this) { Log.d(TAG, "Updating model for " + mInstanceId); try { mIcon = appInfo.getIcon(context.Context); } catch (NameNotFoundException e) { LogUtils.throwable(TAG, "Drawable not set: name not found", e); } clearActions(); prepareActions(context, appInfo); } }
public virtual void reloadView() { Log.d(TAG, "reloadView()"); Context context = Context; if (null == context || !(context is Activity)) { Log.w(TAG, "Cannot reload view: context needs to be an instance of activity"); return; } mBarAlignment = mBarInitialAlignment; SapaAppInfo sapaAppInfo = SapaAppInfo.getAppInfo(((Activity)context).Intent); Log.d(TAG, " sapa app info:" + sapaAppInfo); if (sapaAppInfo != null) { hideNoAnimation(); SelectedApp = sapaAppInfo; } }
internal virtual void play(SapaApp sapaApp) { SapaAppInfo info = this.mAppInfoList[sapaApp.InstanceId]; // Play action is being deactivated. modifyAction(info, MainActivity.ACTION_PLAY, R.drawable.ctrl_btn_play_disabled, false); // Stop action is being activated. modifyAction(info, MainActivity.ACTION_STOP, R.drawable.ctrl_btn_stop_default, true); try { // Notification that AppInfo has been changed is sent. this.mSapaAppService.changeAppInfo(info); } catch (SapaConnectionNotSetException) { Log.w(TAG, "State of application cound not be changed due to connection exception"); } this.mIsPlaying = true; // Play command is sent to native part. Logic.startPlaying(this.mProcessorList[sapaApp.InstanceId]); }
public override void onDestroy() { Log.d(TAG, "onDestroy"); //Native part of application is being deactivated. if (mSapaService != null && mSapaProcessor != null) { mSapaProcessor.deactivate(); mSapaService.unregister(mSapaProcessor); this.mSapaProcessor = null; } if (this.mSapaAppService != null) { try { if (this.mMyInfo != null && this.mMyInfo.App != null) { //Application needs to declare that it was successfully deactivated. this.mSapaAppService.removeFromActiveApps(this.mMyInfo.App); } //Action definer is being removed. this.mSapaAppService.removeActionDefiner(); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "Instance could not be removed from active list because of connection exception."); } //Connection with remote service is finished. this.mSapaAppService.disconnect(); this.mSapaAppService = null; } this.mMyInfo = null; base.onDestroy(); }
/// <summary> /// @brief Find SapaAppInfo structure for a given instanceId from list of active apps /// </summary> /// <param name="instanceId"> unique instance identifier /// </param> /// <returns> SapaAppInfo of a given instanceId or null if not found </returns> private SapaAppInfo getAppInfo(string instanceId) { SapaAppInfo found = null; try { foreach (SapaAppInfo appInfo in mSapaAppService.AllActiveApp) { if (appInfo.App.InstanceId.Equals(instanceId)) { found = appInfo; break; } } } catch (SapaConnectionNotSetException e) { Log.e(TAG, ""); } return(found); }
public override int onStartCommand(Intent intent, int flags, int startId) { if (intent != null) { //When application is activated from ProfessionalAudio system it receives SapaAppInfo object describing it. //To obtain this object static method getSapaAppInfo() is to be used. SapaAppInfo info = SapaAppInfo.getAppInfo(intent); mCallerPackageName = intent.getStringExtra("com.samsung.android.sdk.professionalaudio.key.callerpackagename"); //Toast.makeText(this, mCallerPackageName, Toast.LENGTH_SHORT).show(); if (info != null) { //Received SapaAppInfo is saved to class field. mMyInfo = info; } } //Connection to remote service of ProfessionalAudio system is set. if (mSapaAppService == null) { connectConnectionBridge(); } return base.onStartCommand(intent, flags, startId); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: DeviceActionsLayoutData(com.samsung.android.sdk.professionalaudio.app.SapaAppInfo info, android.content.Context context, boolean isMultiInstance) throws android.content.pm.PackageManager.NameNotFoundException internal DeviceActionsLayoutData(SapaAppInfo info, Context context, bool isMultiInstance) { mAppInfo = info; this.mInstanceIcon = info.getIcon(context); this.mSapaApp = info.App; this.mInstancePackageName = info.PackageName; this.mActionList = info.Actions; if (this.mActionList == null) { this.mActionList = new SparseArray<SapaActionInfo>(); } mActionMap = new Dictionary<string, SapaActionInfo>(); loadActionMap(); this.mIsMultiInstanceEnabled = info.MultiInstanceEnabled; if (this.mIsMultiInstanceEnabled && isMultiInstance) { char c = this.mSapaApp.InstanceId.charAt(this.mSapaApp.InstanceId.length() - 1); number = char.digit(c, 10); if (number > 0) { mInstanceIcon = DrawableTool.getDefaultDrawableWithNumber(mInstanceIcon, number, context); } } }
private void handleDeactivationIntent(Intent intent) { lock (this) { SapaApp sapaApp = SapaAppInfo.getApp(intent); this.mActionsList.Remove(sapaApp.InstanceId); SapaProcessor processor = this.mProcessorList[sapaApp.InstanceId]; if (processor != null) { processor.deactivate(); this.mSapaService.unregister(processor); } this.mProcessorList.Remove(sapaApp.InstanceId); try { this.mSapaAppService.removeFromActiveApps(sapaApp); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "Instance could not be removed from active list because of connection exception."); } this.mAppInfoList.Remove(sapaApp.InstanceId); } }
public override int onStartCommand(Intent intent, int flags, int startId) { if (intent != null) { //When application is activated from ProfessionalAudio system it receives SapaAppInfo object describing it. //To obtain this object static method getSapaAppInfo() is to be used. SapaAppInfo info = SapaAppInfo.getAppInfo(intent); mCallerPackageName = intent.getStringExtra("com.samsung.android.sdk.professionalaudio.key.callerpackagename"); //Toast.makeText(this, mCallerPackageName, Toast.LENGTH_SHORT).show(); if (info != null) { //Received SapaAppInfo is saved to class field. mMyInfo = info; } } //Connection to remote service of ProfessionalAudio system is set. if (mSapaAppService == null) { connectConnectionBridge(); } return(base.onStartCommand(intent, flags, startId)); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: DeviceActionsLayoutData(com.samsung.android.sdk.professionalaudio.app.SapaAppInfo info, android.content.Context context, boolean isMultiInstance) throws android.content.pm.PackageManager.NameNotFoundException internal DeviceActionsLayoutData(SapaAppInfo info, Context context, bool isMultiInstance) { mAppInfo = info; this.mInstanceIcon = info.getIcon(context); this.mSapaApp = info.App; this.mInstancePackageName = info.PackageName; this.mActionList = info.Actions; if (this.mActionList == null) { this.mActionList = new SparseArray <SapaActionInfo>(); } mActionMap = new Dictionary <string, SapaActionInfo>(); loadActionMap(); this.mIsMultiInstanceEnabled = info.MultiInstanceEnabled; if (this.mIsMultiInstanceEnabled && isMultiInstance) { char c = this.mSapaApp.InstanceId.charAt(this.mSapaApp.InstanceId.length() - 1); number = char.digit(c, 10); if (number > 0) { mInstanceIcon = DrawableTool.getDefaultDrawableWithNumber(mInstanceIcon, number, context); } } }
/// <summary> /// @brief Construct model item from SapaAppInfo structure /// </summary> /// <param name="info"> Data structure with information retrieved from SAPA /// </param> /// <returns> Model item representing main application </returns> public static FcModelItem createMain(FcContext fcContext, SapaAppInfo info) { return(new FcModelItem(fcContext, info, FcConstants.APP_TYPE_MAIN)); }
public virtual void reloadView() { Log.d(TAG, "reloadView()"); Context context = Context; if (null == context || !(context is Activity)) { Log.w(TAG, "Cannot reload view: context needs to be an instance of activity"); return; } mBarAlignment = mBarInitialAlignment; SapaAppInfo sapaAppInfo = SapaAppInfo.getAppInfo(((Activity) context).Intent); Log.d(TAG, " sapa app info:" + sapaAppInfo); if (sapaAppInfo != null) { hideNoAnimation(); SelectedApp = sapaAppInfo; } }
/// <summary> /// @brief Construct model item from SapaAppInfo structure /// </summary> /// <param name="info"> Data structure with information retrieved from SAPA /// </param> /// <returns> Model item representing ordinal application </returns> public static FcModelItem createOrdinal(FcContext fcContext, SapaAppInfo info) { return new FcModelItem(fcContext, info, FcConstants.APP_TYPE_ORDINAL); }
private void handleActivationIntent(Intent intent) { // When application is activated from ProfessionalAudio system it // receives SapaAppInfo object describing it. // To obtain this object static method getSapaAppInfo() is to be used. SapaAppInfo info = SapaAppInfo.getAppInfo(intent); if (info != null) { string callerPackageName = intent.getStringExtra("com.samsung.android.sdk.professionalaudio.key.callerpackagename"); if (callerPackageName == null) { callerPackageName = "unknown"; } mCallerPackageNameList[info.App.InstanceId] = callerPackageName; Log.d(TAG, "info.getApp.getInstanceId() " + info.App.InstanceId); if (!this.mAppInfoList.ContainsKey(info.App.InstanceId)) { this.mAppInfoList[info.App.InstanceId] = info; } try { if (info.Configuration == null) { Log.d(TAG, "kaka, not exist configuration, volume[" + Logic.DEFAULT_VOLUME + "] will be set in " + info.App.InstanceId); this.setConfiguration(info.App, Logic.DEFAULT_VOLUME); } else { Log.d(TAG, "kaka volume[" + info.Configuration.getInt("CONFIG") + "] was got from " + info.App.InstanceId); } // Actions are being set in SapaAppInfo representing this // application. mActionArray = new SparseArray <SapaActionInfo>(); mActionArray.put(0, new SapaActionInfo(MainActivity.VOLUME_DOWN, R.drawable.ctrl_btn_volume_down_default, this.PackageName)); mActionArray.put(1, new SapaActionInfo(MainActivity.VOLUME_UP, R.drawable.ctrl_btn_volume_up_default, this.PackageName)); info.Actions = mActionArray; // Native part is being initialised. SapaProcessor sapaProcessor = new SapaProcessor(this, null, new SapaProcessorStateListener(this, info.App)); this.mSapaService.register(sapaProcessor); sapaProcessor.activate(); this.mProcessorList[info.App.InstanceId] = sapaProcessor; Logic.sendVolume(sapaProcessor, this.getCurrectVolume(info.App)); // Information about ports is being set in SapaAppInfo // representing this app. // It can not be done before activating SapaProcessor. info.PortFromSapaProcessor = sapaProcessor; // Application needs to declare that it was successfully // activated. Log.d(TAG, "addactiveapp " + info.App.InstanceId); this.mSapaAppService.addActiveApp(info); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "App could not be added to active as connection has not been made."); } catch (InstantiationException e) { Log.e(TAG, "SapaService can not be instantiate"); } } if (mActionsList != null && info != null && info.App != null) { this.mActionsList[info.App.InstanceId] = new ActionsPack(this, info.App); } }
/// <summary> /// @brief Construct model item from SapaAppInfo structure /// </summary> /// <param name="info"> Data structure with information retrieved from SAPA /// </param> /// <returns> Model item representing main application </returns> public static FcModelItem createMain(FcContext fcContext, SapaAppInfo info) { return new FcModelItem(fcContext, info, FcConstants.APP_TYPE_MAIN); }
private void prepareDefaultReturnActions(FcContext fcContext, SapaAppInfo info) { FcActionFactory factory = fcContext.ActionFactory; mReturnActions.Add(factory.newDefaultReturnItem(info)); }
private void handleActivationIntent(Intent intent) { // When application is activated from ProfessionalAudio system it // receives SapaAppInfo object describing it. // To obtain this object static method getSapaAppInfo() is to be used. SapaAppInfo info = SapaAppInfo.getAppInfo(intent); if (info != null) { string callerPackageName = intent.getStringExtra("com.samsung.android.sdk.professionalaudio.key.callerpackagename"); if (callerPackageName == null) { callerPackageName = "unknown"; } mCallerPackageNameList[info.App.InstanceId] = callerPackageName; Log.d(TAG, "info.getApp.getInstanceId() " + info.App.InstanceId); if (!this.mAppInfoList.ContainsKey(info.App.InstanceId)) { this.mAppInfoList[info.App.InstanceId] = info; } try { // Actions are being set in SapaAppInfo representing this // application. mActionArray = new SparseArray <SapaActionInfo>(); mActionArray.put(0, new SapaActionInfo(MainActivity.ACTION_PLAY, R.drawable.ctrl_btn_play_default, this.PackageName)); mActionArray.put(1, new SapaActionInfo(MainActivity.ACTION_STOP, R.drawable.ctrl_btn_stop_default, this.PackageName, true, false)); info.Actions = mActionArray; // Native part is being initialised. SapaProcessor sapaProcessor = new SapaProcessor(this, null, new SapaProcessorStateListener(this, info.App)); this.mSapaService.register(sapaProcessor); sapaProcessor.activate(); this.mProcessorList[info.App.InstanceId] = sapaProcessor; // Information about ports is being set in SapaAppInfo // representing this app. // It can not be done before activating SapaProcessor. info.PortFromSapaProcessor = sapaProcessor; // Application needs to declare that it was successfully // activated. Log.d(TAG, "addactiveapp " + info.App.InstanceId); this.mSapaAppService.addActiveApp(info); } catch (SapaConnectionNotSetException e) { Log.e(TAG, "App could not be added to active as connection has not been made."); } catch (InstantiationException e) { Log.e(TAG, "SapaService can not be instantiate..."); Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } if (mActionsList != null && info != null && info.App != null) { this.mActionsList[info.App.InstanceId] = new ActionsPack(this, info.App); } }
private void prepareCallActions(FcContext fcContext, SapaAppInfo appInfo) { FcActionFactory factory = fcContext.ActionFactory; SparseArray<SapaActionInfo> actions = appInfo.Actions; for (int i = 0; i < actions.size(); ++i) { SapaActionInfo actionInfo = actions.get(i); FcActionItem action = factory.newAppItem(appInfo, actionInfo); string actionName = actionInfo.Id; // Volume buttons needs to be separated from the rest of actions if (FcConstants.ACTION_VOLUME_UP.Equals(actionName)) { mVolumeActions[VOLUME_UP_INDEX] = action; } else if (FcConstants.ACTION_VOLUME_DOWN.Equals(actionName)) { mVolumeActions[VOLUME_DOWN_INDEX] = action; } else { mCallActions.Add(action); } } }
public override void onServiceConnected() { Log.d(TAG, "onServiceConnected"); try { if (this.mMyInfo == null) { mMyInfo = mSapaAppService.getInstalledApp(this.PackageName); } if (mMyInfo != null) { //Actions are being set in SapaAppInfo representing this application. mActionArray = new SparseArray<SapaActionInfo>(); mActionArray.put(0, new SapaActionInfo(COMMAND_SHUSH, R.drawable.ctrl_btn_stop_default, PackageName)); mMyInfo.Actions = mActionArray; //Native part is being initialised. Sapa sapa = new Sapa(); sapa.initialize(this); mSapaService = new SapaService(); mSapaProcessor = new SapaProcessor(this, null, new SapaProcessorStateListener(this, mMyInfo.App)); mSapaService.register(mSapaProcessor); mSapaProcessor.activate(); //Information about ports is being set in SapaAppInfo representing this app. //It can not be done before activating SapaProcessor. mMyInfo.PortFromSapaProcessor = mSapaProcessor; //Application needs to declare that it was successfully activated. if (mSapaAppService != null) { this.mSapaAppService.addActiveApp(this.mMyInfo); } } } catch (SapaConnectionNotSetException e) { Log.e(TAG, "App could not be added to active as connection has not been made."); } catch (System.ArgumentException e) { Log.e(TAG, "Initialisation of Sapa is not possible due to invalid context of application"); } catch (SsdkUnsupportedException e) { Log.e(TAG, "Initialisation of Sapa is not possible as Sapa is not available on the device"); } catch (InstantiationException e) { Log.e(TAG, "SapaService can not be instantiate"); } }