From 3cc25b722adc7e4433ef10d74faa48210613bfa4 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:56:01 +0200 Subject: [PATCH 01/65] Update strings.xml --- catroid/src/main/res/values/strings.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/catroid/src/main/res/values/strings.xml b/catroid/src/main/res/values/strings.xml index e785a2e0f83..3233c50c9d4 100644 --- a/catroid/src/main/res/values/strings.xml +++ b/catroid/src/main/res/values/strings.xml @@ -1199,6 +1199,14 @@ at position with + Post web request to + https://httpbin.org/post + with header + accept: application/json + and data + Test. + and store response in + Send web request to https://catrob.at/joke and store answer in From 791fa9434d00499bfda0f53d36b80f93612c74da Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 15:23:07 +0200 Subject: [PATCH 02/65] Update strings.xml --- catroid/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/res/values/strings.xml b/catroid/src/main/res/values/strings.xml index 3233c50c9d4..02cd83e40b5 100644 --- a/catroid/src/main/res/values/strings.xml +++ b/catroid/src/main/res/values/strings.xml @@ -1201,7 +1201,7 @@ Post web request to https://httpbin.org/post - with header + with header accept: application/json and data Test. From 612ed91797879b2ca01a00d59b674f2690530764 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 15:36:10 +0200 Subject: [PATCH 03/65] Create brick_post_web_request.xml --- .../res/layout/brick_post_web_request.xml | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 catroid/src/main/res/layout/brick_post_web_request.xml diff --git a/catroid/src/main/res/layout/brick_post_web_request.xml b/catroid/src/main/res/layout/brick_post_web_request.xml new file mode 100644 index 00000000000..890e5a6c3de --- /dev/null +++ b/catroid/src/main/res/layout/brick_post_web_request.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3cf3b6107715a3d0f49c446fdf10a89289ad1be8 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 15:46:48 +0200 Subject: [PATCH 04/65] Update Brick.java --- .../java/org/catrobat/catroid/content/bricks/Brick.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java index 420a7dc3515..a4a02db2de9 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java @@ -47,11 +47,10 @@ interface FormulaField extends Serializable { enum BrickField implements FormulaField { COLOR, COLOR_CHANGE, BRIGHTNESS, BRIGHTNESS_CHANGE, X_POSITION, Y_POSITION, X_POSITION_CHANGE, Y_POSITION_CHANGE, TRANSPARENCY, TRANSPARENCY_CHANGE, SIZE, SIZE_CHANGE, VOLUME, VOLUME_CHANGE, X_DESTINATION, Y_DESTINATION, STEPS, - DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, - - VARIABLE_CHANGE, WEB_REQUEST, LOOK_REQUEST, LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, - READ_FILENAME, TEMPO, - TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, + DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, VARIABLE_CHANGE, + WEB_REQUEST, LOOK_REQUEST, POST_REQUEST_URL, POST_REQUEST_HEADER, POST_REQUEST_DATA, + LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, READ_FILENAME, + TEMPO, TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, PEN_SIZE, PEN_COLOR_RED, PEN_COLOR_GREEN, PEN_COLOR_BLUE, From 87c24894893b448cf97f204219263d5e5e0a2cc9 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 16:52:13 +0200 Subject: [PATCH 05/65] Update brick_post_web_request.xml --- catroid/src/main/res/layout/brick_post_web_request.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/res/layout/brick_post_web_request.xml b/catroid/src/main/res/layout/brick_post_web_request.xml index 890e5a6c3de..31283c9ebb3 100644 --- a/catroid/src/main/res/layout/brick_post_web_request.xml +++ b/catroid/src/main/res/layout/brick_post_web_request.xml @@ -78,7 +78,7 @@ android:text="@string/brick_post_web_request_response" /> From 0b77d7686cd35dc32bc6b7a438a63c874c252b39 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 17:06:45 +0200 Subject: [PATCH 06/65] Update ActionFactory.java --- .../org/catrobat/catroid/content/ActionFactory.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java index 905f162ade8..f2ba6eb023f 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java @@ -166,6 +166,7 @@ import org.catrobat.catroid.content.actions.WaitTillIdleAction; import org.catrobat.catroid.content.actions.WaitUntilAction; import org.catrobat.catroid.content.actions.WebRequestAction; +import org.catrobat.catroid.content.actions.PostWebRequestAction; import org.catrobat.catroid.content.actions.WriteEmbroideryToFileAction; import org.catrobat.catroid.content.actions.WriteUserDataOnDeviceAction; import org.catrobat.catroid.content.actions.WriteVariableToFileAction; @@ -1494,6 +1495,18 @@ public Action createWebRequestAction(Sprite sprite, SequenceAction sequence, For return action; } + public Action createPostWebRequestAction(Sprite sprite, SequenceAction sequence, Formula url, + Formula header, Formula data, UserVariable userVariable) { + PostWebRequestAction action = action(PostWebRequestAction.class); + Scope scope = new Scope(ProjectManager.getInstance().getCurrentProject(), sprite, sequence); + action.setScope(scope); + action.setUrl(url); + action.setHeader(header); + action.setData(data); + action.setUserVariable(userVariable); + return action; + } + public Action createLookRequestAction(Sprite sprite, SequenceAction sequence, Formula variableFormula) { LookRequestAction action = action(LookRequestAction.class); From a4c88b732ddb21be3f0e4c03138765c3e99c2546 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 17:28:50 +0200 Subject: [PATCH 07/65] Create PostWebRequestBrick.kt --- .../content/bricks/PostWebRequestBrick.kt | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt b/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt new file mode 100644 index 00000000000..daae416fd08 --- /dev/null +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt @@ -0,0 +1,78 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2021 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.catrobat.catroid.content.bricks + +import org.catrobat.catroid.R +import org.catrobat.catroid.content.Sprite +import org.catrobat.catroid.content.actions.ScriptSequenceAction +import org.catrobat.catroid.content.bricks.Brick.BrickField +import org.catrobat.catroid.content.bricks.Brick.ResourcesSet +import org.catrobat.catroid.formulaeditor.Formula + +class PostWebRequestBrick() : UserVariableBrickWithFormula() { + init { + addAllowedBrickField(BrickField.POST_REQUEST_URL, R.id.brick_post_web_request_edit_url_text) + addAllowedBrickField(BrickField.POST_REQUEST_HEADER, R.id.brick_post_web_request_edit_header_text) + addAllowedBrickField(BrickField.POST_REQUEST_DATA, R.id.brick_post_web_request_edit_data_text) + } + + constructor( + url: String, + header: String, + data: String + ) : this( + Formula(url), + Formula(header), + Formula(data) + ) + + constructor( + url: Formula?, + header: Formula?, + data: Formula? + ) : this() { + setFormulaWithBrickField(BrickField.POST_REQUEST_URL, url) + setFormulaWithBrickField(BrickField.POST_REQUEST_HEADER, header) + setFormulaWithBrickField(BrickField.POST_REQUEST_DATA, data) + } + + override fun getViewResource(): Int = R.layout.brick_post_web_request + + override fun addActionToSequence(sprite: Sprite, sequence: ScriptSequenceAction) { + sequence.addAction(sprite.actionFactory.createPostWebRequestAction( + sprite, sequence, + getFormulaWithBrickField(BrickField.POST_WEB_REQUEST_URL), + getFormulaWithBrickField(BrickField.POST_WEB_REQUEST_HEADER), + getFormulaWithBrickField(BrickField.POST_WEB_REQUEST_DATA), + userVariable + ) + ) + } + + override fun addRequiredResources(requiredResourcesSet: ResourcesSet) { + requiredResourcesSet.add(Brick.NETWORK_CONNECTION) + super.addRequiredResources(requiredResourcesSet) + } + + override fun getSpinnerId(): Int = R.id.post_web_request_spinner +} From 6c0d10b64112e012ef89105f9d041331cfba6b1d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 18:20:16 +0200 Subject: [PATCH 08/65] Update strings.xml --- catroid/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/res/values/strings.xml b/catroid/src/main/res/values/strings.xml index 02cd83e40b5..3f8b626be85 100644 --- a/catroid/src/main/res/values/strings.xml +++ b/catroid/src/main/res/values/strings.xml @@ -1202,7 +1202,7 @@ Post web request to https://httpbin.org/post with header - accept: application/json + User-Agent: Mozilla/5.0 (compatible; Catrobatbot/1.0; +https://catrob.at/bot)\naccept: application/json and data Test. and store response in From 76064d4aa602f990827b8cebf56327ffd39bc3ad Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Thu, 22 Jul 2021 18:22:36 +0200 Subject: [PATCH 09/65] Update strings.xml --- catroid/src/main/res/values/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/catroid/src/main/res/values/strings.xml b/catroid/src/main/res/values/strings.xml index 3f8b626be85..10c253a7565 100644 --- a/catroid/src/main/res/values/strings.xml +++ b/catroid/src/main/res/values/strings.xml @@ -1202,7 +1202,9 @@ Post web request to https://httpbin.org/post with header - User-Agent: Mozilla/5.0 (compatible; Catrobatbot/1.0; +https://catrob.at/bot)\naccept: application/json + User-Agent: Mozilla/5.0 (compatible; + Catrobatbot/1.0; +https://catrob.at/bot)\naccept: application/json + and data Test. and store response in From 7ae202b475d3c43694ada9c65070424800b7ef3d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 08:38:22 +0200 Subject: [PATCH 10/65] Update Brick.java --- .../main/java/org/catrobat/catroid/content/bricks/Brick.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java index a4a02db2de9..4c2f1703847 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java @@ -48,7 +48,7 @@ enum BrickField implements FormulaField { COLOR, COLOR_CHANGE, BRIGHTNESS, BRIGHTNESS_CHANGE, X_POSITION, Y_POSITION, X_POSITION_CHANGE, Y_POSITION_CHANGE, TRANSPARENCY, TRANSPARENCY_CHANGE, SIZE, SIZE_CHANGE, VOLUME, VOLUME_CHANGE, X_DESTINATION, Y_DESTINATION, STEPS, DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, VARIABLE_CHANGE, - WEB_REQUEST, LOOK_REQUEST, POST_REQUEST_URL, POST_REQUEST_HEADER, POST_REQUEST_DATA, + WEB_REQUEST, LOOK_REQUEST, POST_WEB_REQUEST_URL, POST_WEB_REQUEST_HEADER, POST_WEB_REQUEST_DATA, LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, READ_FILENAME, TEMPO, TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, From 246ddbd83f3fa005cd5777f08fadd542bab65708 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 08:39:11 +0200 Subject: [PATCH 11/65] Update PostWebRequestBrick.kt --- .../catroid/content/bricks/PostWebRequestBrick.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt b/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt index daae416fd08..2222ab41ab7 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/PostWebRequestBrick.kt @@ -31,9 +31,9 @@ import org.catrobat.catroid.formulaeditor.Formula class PostWebRequestBrick() : UserVariableBrickWithFormula() { init { - addAllowedBrickField(BrickField.POST_REQUEST_URL, R.id.brick_post_web_request_edit_url_text) - addAllowedBrickField(BrickField.POST_REQUEST_HEADER, R.id.brick_post_web_request_edit_header_text) - addAllowedBrickField(BrickField.POST_REQUEST_DATA, R.id.brick_post_web_request_edit_data_text) + addAllowedBrickField(BrickField.POST_WEB_REQUEST_URL, R.id.brick_post_web_request_edit_url_text) + addAllowedBrickField(BrickField.POST_WEB_REQUEST_HEADER, R.id.brick_post_web_request_edit_header_text) + addAllowedBrickField(BrickField.POST_WEB_REQUEST_DATA, R.id.brick_post_web_request_edit_data_text) } constructor( @@ -51,9 +51,9 @@ class PostWebRequestBrick() : UserVariableBrickWithFormula() { header: Formula?, data: Formula? ) : this() { - setFormulaWithBrickField(BrickField.POST_REQUEST_URL, url) - setFormulaWithBrickField(BrickField.POST_REQUEST_HEADER, header) - setFormulaWithBrickField(BrickField.POST_REQUEST_DATA, data) + setFormulaWithBrickField(BrickField.POST_WEB_REQUEST_URL, url) + setFormulaWithBrickField(BrickField.POST_WEB_REQUEST_HEADER, header) + setFormulaWithBrickField(BrickField.POST_WEB_REQUEST_DATA, data) } override fun getViewResource(): Int = R.layout.brick_post_web_request From 5975e6b301372749258dd3781aec801cbfd851e9 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 08:46:27 +0200 Subject: [PATCH 12/65] Create PostWebRequestAction.kt --- .../content/actions/PostWebRequestAction.kt | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt new file mode 100644 index 00000000000..eb8b21ecac8 --- /dev/null +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt @@ -0,0 +1,73 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2021 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.catrobat.catroid.content.actions + +import android.util.Log +import okhttp3.Response +import org.catrobat.catroid.formulaeditor.UserVariable +import java.io.IOException + +class PostWebRequestAction : PostWebAction() { + var userVariable: UserVariable? = null + var response: String? = null + + override fun act(delta: Float): Boolean { + val scopeInitialized = scope?.sprite != null && scope?.sequence != null + return if (userVariable == null || url == null || !scopeInitialized) { + true + } else super.act(delta) + } + + override fun handleResponse() { + userVariable!!.value = response + } + + override fun handleError(error: String) { + userVariable!!.value = error + } + + override fun restart() { + response = null + super.restart() + } + + override fun onRequestSuccess(httpResponse: Response) { + response = try { + httpResponse.body()?.string() ?: "" + } catch (exception: IOException) { + Log.d(javaClass.simpleName, "HTTP response body is empty", exception) + "" + } + super.onRequestSuccess(httpResponse) + } + + override fun onRequestError(httpError: String) { + response = httpError + super.onRequestError(httpError) + } + + override fun onCancelledCall() { + response = null + super.onCancelledCall() + } +} From ee823fc31191ca0a33cd457e0b48e4c2cff00b84 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 11:11:16 +0200 Subject: [PATCH 13/65] Create PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt new file mode 100644 index 00000000000..9c04a878eb6 --- /dev/null +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -0,0 +1,172 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2021 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.catrobat.catroid.content.actions + +import android.util.Log +import androidx.annotation.CallSuper +import com.badlogic.gdx.scenes.scene2d.Action +import okhttp3.Response +import org.catrobat.catroid.TrustedDomainManager +import org.catrobat.catroid.common.Constants +import org.catrobat.catroid.content.Scope +import org.catrobat.catroid.formulaeditor.Formula +import org.catrobat.catroid.formulaeditor.InterpretationException +import org.catrobat.catroid.stage.BrickDialogManager +import org.catrobat.catroid.stage.StageActivity +import org.catrobat.catroid.stage.StageActivity.stageListener +import org.catrobat.catroid.web.PostWebConnection +import org.catrobat.catroid.web.PostWebConnection.WebRequestListener + +abstract class PostWebAction : Action(), PostWebRequestListener { + private var webConnection: PostWebConnection? = null + var urlFormula: Formula? = null + var headerFormula: Formula? = null + var dataFormula: Formula? = null + var scope: Scope? = null + var url: String? = null + var header: String? = null + var data: String? = null + + enum class RequestStatus { + NOT_SENT, WAITING, FINISHED + } + var requestStatus: RequestStatus = RequestStatus.NOT_SENT + + enum class PermissionStatus { + UNKNOWN, PENDING, DENIED, GRANTED + } + private var permissionStatus: PermissionStatus = PermissionStatus.UNKNOWN + + private fun interpretUrl(): Boolean { + return try { + urlFormula!!.interpretString(scope)!!.let { + url = if (it.startsWith("http://") || it.startsWith("https://")) { + it + } else "https://$it" + } + val newlineIndex = url?.indexOf("\n") + if (newlineIndex != -1) { + url = newlineIndex?.let { url?.subSequence(0, it).toString() } + } + true + } catch (exception: InterpretationException) { + Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + false + } + } + + private fun askForPermission() { + if (StageActivity.messageHandler == null) { + denyPermission() + } else { + permissionStatus = PermissionStatus.PENDING + val params = arrayListOf(BrickDialogManager.DialogType.WEB_ACCESS_DIALOG, this, url!!) + StageActivity.messageHandler.obtainMessage(StageActivity.SHOW_DIALOG, params).sendToTarget() + } + } + + fun grantPermission() { + permissionStatus = PermissionStatus.GRANTED + } + + fun denyPermission() { + permissionStatus = PermissionStatus.DENIED + } + + override fun act(delta: Float): Boolean { + if (url == null && !interpretUrl()) { + return true + } + + when (permissionStatus) { + PermissionStatus.UNKNOWN -> checkPermission() + PermissionStatus.DENIED -> { + handleError(Constants.ERROR_AUTHENTICATION_REQUIRED.toString()) + return true + } + else -> {} + } + + if (permissionStatus == PermissionStatus.PENDING) { + return false + } + + if (requestStatus == RequestStatus.NOT_SENT && !sendRequest()) { + handleError(Constants.ERROR_TOO_MANY_REQUESTS.toString()) + return true + } + if (requestStatus == RequestStatus.WAITING) { + return false + } + + stageListener.webConnectionHolder.removeConnection(webConnection) + handleResponse() + return true + } + + private fun checkPermission() = + if (TrustedDomainManager.isURLTrusted(url!!)) { + grantPermission() + } else { + askForPermission() + } + + private fun sendRequest(): Boolean { + requestStatus = RequestStatus.WAITING + webConnection = PostWebConnection(this, url!!) + + return if (stageListener.webConnectionHolder.addConnection(webConnection!!)) { + webConnection!!.sendWebRequest() + true + } else false + } + + abstract fun handleResponse() + abstract fun handleError(error: String) + + @CallSuper + override fun onRequestSuccess(httpResponse: Response) { + requestStatus = RequestStatus.FINISHED + } + + @CallSuper + override fun onRequestError(httpError: String) { + requestStatus = RequestStatus.FINISHED + } + + @CallSuper + override fun restart() { + stageListener.webConnectionHolder.removeConnection(webConnection) + webConnection = null + url = null + requestStatus = RequestStatus.NOT_SENT + permissionStatus = PermissionStatus.UNKNOWN + } + + @CallSuper + override fun onCancelledCall() { + webConnection = null + url = null + requestStatus = RequestStatus.NOT_SENT + } +} From dec46736d3e7e5ad26a855c45159525bb8b0ace9 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 11:17:55 +0200 Subject: [PATCH 14/65] Update PostWebRequestAction.kt --- .../catrobat/catroid/content/actions/PostWebRequestAction.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt index eb8b21ecac8..da6b5d1c30d 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebRequestAction.kt @@ -33,7 +33,7 @@ class PostWebRequestAction : PostWebAction() { override fun act(delta: Float): Boolean { val scopeInitialized = scope?.sprite != null && scope?.sequence != null - return if (userVariable == null || url == null || !scopeInitialized) { + return if (userVariable == null || urlFormula == null || !scopeInitialized) { true } else super.act(delta) } From 3317e4504f342ea0e0dde36d05cdb3796c11175d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 11:28:21 +0200 Subject: [PATCH 15/65] Update PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 9c04a878eb6..5a9abc9e0ab 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -35,10 +35,10 @@ import org.catrobat.catroid.stage.BrickDialogManager import org.catrobat.catroid.stage.StageActivity import org.catrobat.catroid.stage.StageActivity.stageListener import org.catrobat.catroid.web.PostWebConnection -import org.catrobat.catroid.web.PostWebConnection.WebRequestListener +import org.catrobat.catroid.web.PostWebConnection.PostWebRequestListener abstract class PostWebAction : Action(), PostWebRequestListener { - private var webConnection: PostWebConnection? = null + private var postWebConnection: PostWebConnection? = null var urlFormula: Formula? = null var headerFormula: Formula? = null var dataFormula: Formula? = null @@ -119,7 +119,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { return false } - stageListener.webConnectionHolder.removeConnection(webConnection) + stageListener.webConnectionHolder.removeConnection(postWebConnection) handleResponse() return true } @@ -133,10 +133,10 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun sendRequest(): Boolean { requestStatus = RequestStatus.WAITING - webConnection = PostWebConnection(this, url!!) + postWebConnection = PostWebConnection(this, url!!) - return if (stageListener.webConnectionHolder.addConnection(webConnection!!)) { - webConnection!!.sendWebRequest() + return if (stageListener.webConnectionHolder.addConnection(postWebConnection!!)) { + postWebConnection!!.sendPostWebRequest() true } else false } @@ -156,8 +156,8 @@ abstract class PostWebAction : Action(), PostWebRequestListener { @CallSuper override fun restart() { - stageListener.webConnectionHolder.removeConnection(webConnection) - webConnection = null + stageListener.webConnectionHolder.removeConnection(postWebConnection) + postWebConnection = null url = null requestStatus = RequestStatus.NOT_SENT permissionStatus = PermissionStatus.UNKNOWN @@ -165,7 +165,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { @CallSuper override fun onCancelledCall() { - webConnection = null + postWebConnection = null url = null requestStatus = RequestStatus.NOT_SENT } From 4515dcbd466dd156c3927fe40066b83e57aec12d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 14:53:17 +0200 Subject: [PATCH 16/65] Create PostWebConnection.kt --- .../catrobat/catroid/web/PostWebConnection.kt | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt new file mode 100644 index 00000000000..f8b5dff6339 --- /dev/null +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -0,0 +1,119 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2018 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.catrobat.catroid.web + +import android.util.Log +import okhttp3.Call +import okhttp3.Callback +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Headers +import okhttp3.Response +import org.catrobat.catroid.common.Constants +import org.catrobat.catroid.stage.StageActivity +import java.io.IOException +import java.lang.ref.WeakReference + +class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWebRequestListener, + private val url: String, private val header: String, private val data: String) { + private var weakListenerReference: WeakReference? = WeakReference(listener) + private var call: Call? = null + + constructor(listener: PostWebRequestListener, url: String, header: String, data: String) : + this(StageActivity.stageListener.webConnectionHolder.okHttpClient, listener, url, header, data) + + companion object { + private const val EXCEPTION_MESSAGE_TIMEOUT = "timeout" + private const val EXCEPTION_MESSAGE_CANCELED = "Canceled" + } + + @Synchronized + private fun popListener(): PostWebRequestListener? { + val listener = weakListenerReference?.get() + weakListenerReference = null + return listener + } + + @Synchronized + fun sendPostWebRequest() { + try { + val headers = Headers.Builder() + .add("User-Agent", Constants.USER_AGENT) + val headerLines = header.lines() + headerLines.foreach { + if it.startsWith("user-agent: ", ignoreCase = true) { + headers.set("User-Agent", it.subSequence("user-agent: ".length, it.length)) + } else { + headers.add(it) + } + } + headers.build() + val request = Request.Builder() + .url(url) + .headers(headers) + .post(data) + .build() + call = okHttpClient.newCall(request) + call?.enqueue(createCallback()) + } catch (exception: IllegalArgumentException) { + weakListenerReference?.get()?.onRequestError(Constants.ERROR_BAD_REQUEST.toString()) + Log.e(javaClass.simpleName, "Invalid URL", exception) + } + } + + private fun createCallback(): Callback { + return object : Callback { + override fun onFailure(call: Call, e: IOException) { + popListener()?.apply { + when (e.message) { + EXCEPTION_MESSAGE_TIMEOUT -> onRequestError(Constants.ERROR_TIMEOUT.toString()) + EXCEPTION_MESSAGE_CANCELED -> onCancelledCall() + else -> onRequestError(Constants.ERROR_SERVER_ERROR.toString()) + } + } + } + + override fun onResponse(call: Call, response: Response) { + popListener()?.apply { + if (response.isSuccessful) { + onRequestSuccess(response) + } else { + onRequestError(response.code().toString()) + } + } + } + } + } + + fun cancelCall() { + okHttpClient.dispatcher()?.executorService()?.execute { + call?.cancel() + } + } + + interface PostWebRequestListener { + fun onRequestSuccess(httpResponse: Response) + fun onRequestError(httpError: String) + fun onCancelledCall() + } +} From d8b1a0fe7e64e95e77faf18ba8f5bda66e1e469b Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 14:55:09 +0200 Subject: [PATCH 17/65] Update PostWebConnection.kt --- .../src/main/java/org/catrobat/catroid/web/PostWebConnection.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index f8b5dff6339..2b5913d6755 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2018 The Catrobat Team + * Copyright (C) 2010-2021 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify From 30daccffef8b4e5ce8defb7e4f5ffb93401f18be Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:16:19 +0200 Subject: [PATCH 18/65] Update Constants.java --- .../src/main/java/org/catrobat/catroid/common/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/common/Constants.java b/catroid/src/main/java/org/catrobat/catroid/common/Constants.java index 89974c19c23..c5bc48a93d0 100644 --- a/catroid/src/main/java/org/catrobat/catroid/common/Constants.java +++ b/catroid/src/main/java/org/catrobat/catroid/common/Constants.java @@ -42,7 +42,7 @@ public final class Constants { - public static final double CURRENT_CATROBAT_LANGUAGE_VERSION = 1.05; + public static final double CURRENT_CATROBAT_LANGUAGE_VERSION = 1.06; public static final String REMOTE_DISPLAY_APP_ID = "CEBB9229"; public static final int CAST_CONNECTION_TIMEOUT = 5000; //in milliseconds public static final int CAST_NOT_SEEING_DEVICE_TIMEOUT = 3000; //in milliseconds From f08c6044c755aaf3d8be609fea566651471c75ff Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:34:16 +0200 Subject: [PATCH 19/65] Update strings.xml --- catroid/src/main/res/values/strings.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/catroid/src/main/res/values/strings.xml b/catroid/src/main/res/values/strings.xml index 10c253a7565..223d5237f83 100644 --- a/catroid/src/main/res/values/strings.xml +++ b/catroid/src/main/res/values/strings.xml @@ -1200,13 +1200,9 @@ with Post web request to - https://httpbin.org/post with header - User-Agent: Mozilla/5.0 (compatible; - Catrobatbot/1.0; +https://catrob.at/bot)\naccept: application/json - and data - Test. + Sample text. and store response in Send web request to From bedd8088b33c79abb709ae115ed45f46f9fab36a Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:37:18 +0200 Subject: [PATCH 20/65] Update BrickValues.java --- .../src/main/java/org/catrobat/catroid/common/BrickValues.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/common/BrickValues.java b/catroid/src/main/java/org/catrobat/catroid/common/BrickValues.java index f7219046891..c582b3b2509 100644 --- a/catroid/src/main/java/org/catrobat/catroid/common/BrickValues.java +++ b/catroid/src/main/java/org/catrobat/catroid/common/BrickValues.java @@ -195,6 +195,9 @@ public final class BrickValues { public static final String BACKGROUND_REQUEST = "https://catrob.at/HalloweenPortrait"; public static final String BACKGROUND_REQUEST_LANDSCAPE = "https://catrob.at/HalloweenLandscape"; // Note: No constant default value for the "Send web request" brick, as it is localized in strings.xml + public static final String POST_WEB_REQUEST_URL = "https://httpbin.org/post"; + public static final String POST_WEB_REQUEST_HEADER = "User-Agent: Mozilla/5.0 (compatible; Catrobatbot/1.0; +https://catrob.at/bot)\naccept: application/json"; + // Note: No constant default value for the data content of the "Post web request" brick, as it is localized in strings.xml private BrickValues() { throw new AssertionError("No."); From ab9b85daf52b0b4030dd59f41698bdacecf61eb2 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:47:25 +0200 Subject: [PATCH 21/65] Update CategoryBricksFactory.java --- .../catroid/ui/fragment/CategoryBricksFactory.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java index d3ba2108a22..b5a461667d7 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java @@ -142,6 +142,7 @@ import org.catrobat.catroid.content.bricks.PlaySoundBrick; import org.catrobat.catroid.content.bricks.PointInDirectionBrick; import org.catrobat.catroid.content.bricks.PointToBrick; +import org.catrobat.catroid.content.bricks.PostWebRequestBrick; import org.catrobat.catroid.content.bricks.PreviousLookBrick; import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick; import org.catrobat.catroid.content.bricks.RaspiPwmBrick; @@ -635,6 +636,8 @@ protected List setupDataCategoryList(Context context, boolean isBackgroun } else { dataBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)); } + dataBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))); dataBrickList.add(new AskBrick(context.getString(R.string.brick_ask_default_question))); @@ -673,6 +676,8 @@ protected List setupDeviceCategoryList(Context context, boolean isBackgro } else { deviceBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)); } + deviceBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))); deviceBrickList.add(new OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)); deviceBrickList.add(new VibrationBrick(BrickValues.VIBRATE_SECONDS)); @@ -888,6 +893,8 @@ private List setupAssertionsCategoryList(Context context) { context.getString(R.string.brick_store_csv_into_userlist_data))); assertionsBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); + assertionsBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))); return assertionsBrickList; } @@ -1022,6 +1029,8 @@ public String getBrickCategory(Brick brick, boolean isBackgroundSprite, Context category = res.getString(R.string.category_data); } else if (brick instanceof WebRequestBrick) { category = res.getString(R.string.category_data); + } else if (brick instanceof PostWebRequestBrick) { + category = res.getString(R.string.category_data); } else if (brick instanceof StoreCSVIntoUserListBrick) { category = res.getString(R.string.category_data); } else if (brick instanceof UserDefinedBrick) { From 83c06878edbbc82b18e383f77db59efc466ed058 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:59:49 +0200 Subject: [PATCH 22/65] Update XstreamSerializer.java --- .../main/java/org/catrobat/catroid/io/XstreamSerializer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/io/XstreamSerializer.java b/catroid/src/main/java/org/catrobat/catroid/io/XstreamSerializer.java index da25d12635d..af4dd59b4c2 100644 --- a/catroid/src/main/java/org/catrobat/catroid/io/XstreamSerializer.java +++ b/catroid/src/main/java/org/catrobat/catroid/io/XstreamSerializer.java @@ -174,6 +174,7 @@ import org.catrobat.catroid.content.bricks.PlaySoundBrick; import org.catrobat.catroid.content.bricks.PointInDirectionBrick; import org.catrobat.catroid.content.bricks.PointToBrick; +import org.catrobat.catroid.content.bricks.PostWebRequestBrick; import org.catrobat.catroid.content.bricks.PreviousLookBrick; import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick; import org.catrobat.catroid.content.bricks.RaspiPwmBrick; @@ -527,6 +528,7 @@ private void prepareXstream(Class projectClass, Class sceneClass) { xstream.alias("brick", ReadListFromDeviceBrick.class); xstream.alias("brick", StopScriptBrick.class); xstream.alias("brick", WebRequestBrick.class); + xstream.alias("brick", PostWebRequestBrick.class); xstream.alias("brick", StoreCSVIntoUserListBrick.class); xstream.alias("brick", ResetTimerBrick.class); xstream.alias("brick", EmptyEventBrick.class); From 411367e0571b7fadb02e3fa4fa78bb24448424d5 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 16:03:15 +0200 Subject: [PATCH 23/65] Update BricksHelpUrlTest.java --- .../java/org/catrobat/catroid/test/BricksHelpUrlTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/test/BricksHelpUrlTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/test/BricksHelpUrlTest.java index c23137c178f..929134fbc73 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/test/BricksHelpUrlTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/test/BricksHelpUrlTest.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2018 The Catrobat Team + * Copyright (C) 2010-2021 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -118,6 +118,8 @@ public class BricksHelpUrlTest { "https://wiki.catrobat.org/bin/view/Documentation/BrickDocumentation/LookRequestBrick"); brickToHelpUrlMapping.put("org.catrobat.catroid.content.bricks.BackgroundRequestBrick", "https://wiki.catrobat.org/bin/view/Documentation/BrickDocumentation/BackgroundRequestBrick"); + brickToHelpUrlMapping.put("org.catrobat.catroid.content.bricks.PostWebRequestBrick", + "https://wiki.catrobat.org/bin/view/Documentation/BrickDocumentation/PostWebRequestBrick"); brickToHelpUrlMapping.put("org.catrobat.catroid.content.bricks.LegoEv3MotorMoveBrick", "https://wiki.catrobat.org/bin/view/Documentation/BrickDocumentation/LegoEv3MotorMoveBrick"); brickToHelpUrlMapping.put("org.catrobat.catroid.content.bricks.HideBrick", From 8b04d46da31f721bd7ddb57132c3d4b0d5dac1b1 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 17:21:01 +0200 Subject: [PATCH 24/65] Update PostWebConnection.kt --- .../src/main/java/org/catrobat/catroid/web/PostWebConnection.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 2b5913d6755..3c17ebaf9df 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -61,7 +61,7 @@ class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWe .add("User-Agent", Constants.USER_AGENT) val headerLines = header.lines() headerLines.foreach { - if it.startsWith("user-agent: ", ignoreCase = true) { + if (it.startsWith("user-agent: ", ignoreCase = true)) { headers.set("User-Agent", it.subSequence("user-agent: ".length, it.length)) } else { headers.add(it) From 7839a13ad5a50abbc96414b6f3109eab822d03f0 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 18:02:18 +0200 Subject: [PATCH 25/65] Create PostWebConnectionHolder.kt --- .../catroid/web/PostWebConnectionHolder.kt | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 catroid/src/main/java/org/catrobat/catroid/web/PostWebConnectionHolder.kt diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnectionHolder.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnectionHolder.kt new file mode 100644 index 00000000000..f082beba845 --- /dev/null +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnectionHolder.kt @@ -0,0 +1,72 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2021 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.catrobat.catroid.web + +import okhttp3.ConnectionSpec.CLEARTEXT +import okhttp3.ConnectionSpec.COMPATIBLE_TLS +import okhttp3.ConnectionSpec.MODERN_TLS +import okhttp3.Dispatcher +import okhttp3.OkHttpClient +import java.util.ArrayList +import java.util.concurrent.TimeUnit + +class PostWebConnectionHolder { + var connections: MutableList = ArrayList(MAX_CONNECTIONS) + var okHttpClient: OkHttpClient + + companion object { + private const val MAX_CONNECTIONS = 10 + private const val TIMEOUT_DURATION = 60L + } + + init { + okHttpClient = OkHttpClient.Builder() + .connectTimeout(TIMEOUT_DURATION, TimeUnit.SECONDS) + .readTimeout(TIMEOUT_DURATION, TimeUnit.SECONDS) + .writeTimeout(TIMEOUT_DURATION, TimeUnit.SECONDS) + .connectionSpecs(listOf(MODERN_TLS, COMPATIBLE_TLS, CLEARTEXT)) + .dispatcher(Dispatcher()) + .build() + + okHttpClient.dispatcher().maxRequests = MAX_CONNECTIONS + okHttpClient.dispatcher().maxRequestsPerHost = MAX_CONNECTIONS + } + + @Synchronized + fun onPause() { + connections.forEach { it.cancelCall() } + connections.clear() + } + + @Synchronized + fun addConnection(connection: PostWebConnection): Boolean = + if (connections.size < MAX_CONNECTIONS) { + connections.add(connection) + true + } else false + + @Synchronized + fun removeConnection(connection: PostWebConnection?) { + connections.remove(connection) + } +} From ba5a94eae30b4e6a8a2dced640e931f005f17e37 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 18:06:34 +0200 Subject: [PATCH 26/65] Update StageListener.java --- .../main/java/org/catrobat/catroid/stage/StageListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java b/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java index 16cf8979fe5..e0bed50b51c 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java +++ b/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java @@ -81,6 +81,7 @@ import org.catrobat.catroid.utils.TouchUtil; import org.catrobat.catroid.utils.VibrationUtil; import org.catrobat.catroid.web.WebConnectionHolder; +import org.catrobat.catroid.web.PostWebConnectionHolder; import java.util.ArrayList; import java.util.HashMap; @@ -129,6 +130,7 @@ public class StageListener implements ApplicationListener { private PenActor penActor; public EmbroideryPatternManager embroideryPatternManager; public WebConnectionHolder webConnectionHolder; + public PostWebConnectionHolder postWebConnectionHolder; private List sprites; @@ -170,6 +172,7 @@ public class StageListener implements ApplicationListener { public StageListener() { webConnectionHolder = new WebConnectionHolder(); + postWebConnectionHolder = new PostWebConnectionHolder(); } @Override @@ -381,6 +384,7 @@ void menuPause() { paused = true; webConnectionHolder.onPause(); + postWebConnectionHolder.onPause(); } public void transitionToScene(String sceneName) { From c87ca2cf871ed0e20d7ce8afc9d27547cca5da6a Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 18:08:22 +0200 Subject: [PATCH 27/65] Update PostWebConnection.kt --- .../src/main/java/org/catrobat/catroid/web/PostWebConnection.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 3c17ebaf9df..6da89735479 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -40,7 +40,7 @@ class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWe private var call: Call? = null constructor(listener: PostWebRequestListener, url: String, header: String, data: String) : - this(StageActivity.stageListener.webConnectionHolder.okHttpClient, listener, url, header, data) + this(StageActivity.stageListener.postWebConnectionHolder.okHttpClient, listener, url, header, data) companion object { private const val EXCEPTION_MESSAGE_TIMEOUT = "timeout" From dcfca963a36c1b2809c8a0a5a0f255c4011617e0 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 18:11:13 +0200 Subject: [PATCH 28/65] Update PostWebAction.kt --- .../org/catrobat/catroid/content/actions/PostWebAction.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 5a9abc9e0ab..318558e299b 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -119,7 +119,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { return false } - stageListener.webConnectionHolder.removeConnection(postWebConnection) + stageListener.postWebConnectionHolder.removeConnection(postWebConnection) handleResponse() return true } @@ -135,7 +135,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { requestStatus = RequestStatus.WAITING postWebConnection = PostWebConnection(this, url!!) - return if (stageListener.webConnectionHolder.addConnection(postWebConnection!!)) { + return if (stageListener.postWebConnectionHolder.addConnection(postWebConnection!!)) { postWebConnection!!.sendPostWebRequest() true } else false @@ -156,7 +156,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { @CallSuper override fun restart() { - stageListener.webConnectionHolder.removeConnection(postWebConnection) + stageListener.postWebConnectionHolder.removeConnection(postWebConnection) postWebConnection = null url = null requestStatus = RequestStatus.NOT_SENT From 5c20c459e722c3078ca5082f4eb7a701d25a6d02 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 18:35:55 +0200 Subject: [PATCH 29/65] Update PostWebAction.kt --- .../java/org/catrobat/catroid/content/actions/PostWebAction.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 318558e299b..8a05de2b752 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -133,7 +133,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun sendRequest(): Boolean { requestStatus = RequestStatus.WAITING - postWebConnection = PostWebConnection(this, url!!) + postWebConnection = PostWebConnection(this, url!!, header!!, data!!) return if (stageListener.postWebConnectionHolder.addConnection(postWebConnection!!)) { postWebConnection!!.sendPostWebRequest() From e27653dbba1625e6d80f37f633cb0604a4c6c773 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 19:19:35 +0200 Subject: [PATCH 30/65] Update PostWebConnection.kt --- .../java/org/catrobat/catroid/web/PostWebConnection.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 6da89735479..2a1e3a8d86c 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -60,18 +60,17 @@ class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWe val headers = Headers.Builder() .add("User-Agent", Constants.USER_AGENT) val headerLines = header.lines() - headerLines.foreach { + headerLines.forEach { if (it.startsWith("user-agent: ", ignoreCase = true)) { headers.set("User-Agent", it.subSequence("user-agent: ".length, it.length)) } else { headers.add(it) } } - headers.build() val request = Request.Builder() .url(url) - .headers(headers) - .post(data) + .headers(headers.build()) + .post(RequestBody.create(MediaType.parse("text/plain"), data)) .build() call = okHttpClient.newCall(request) call?.enqueue(createCallback()) From 39c66cdcef39874f39122d67f3d2945e71b3ccef Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 19:39:07 +0200 Subject: [PATCH 31/65] Update PostWebConnection.kt --- .../main/java/org/catrobat/catroid/web/PostWebConnection.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 2a1e3a8d86c..79c47a641bb 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -28,6 +28,8 @@ import okhttp3.Callback import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Headers +import okhttp3.MediaType +import okhttp3.RequestBody import okhttp3.Response import org.catrobat.catroid.common.Constants import org.catrobat.catroid.stage.StageActivity @@ -62,7 +64,7 @@ class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWe val headerLines = header.lines() headerLines.forEach { if (it.startsWith("user-agent: ", ignoreCase = true)) { - headers.set("User-Agent", it.subSequence("user-agent: ".length, it.length)) + headers.set("User-Agent", it.substring("user-agent: ".length)) } else { headers.add(it) } From 57ce77e92f81c521be5a75bf3adf8c9ecd71a65b Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Fri, 23 Jul 2021 20:55:45 +0200 Subject: [PATCH 32/65] Update ActionFactory.java --- .../org/catrobat/catroid/content/ActionFactory.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java index f2ba6eb023f..c0f432f8939 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java @@ -1495,14 +1495,14 @@ public Action createWebRequestAction(Sprite sprite, SequenceAction sequence, For return action; } - public Action createPostWebRequestAction(Sprite sprite, SequenceAction sequence, Formula url, - Formula header, Formula data, UserVariable userVariable) { + public Action createPostWebRequestAction(Sprite sprite, SequenceAction sequence, Formula urlFormula, + Formula headerFormula, Formula dataFormula, UserVariable userVariable) { PostWebRequestAction action = action(PostWebRequestAction.class); Scope scope = new Scope(ProjectManager.getInstance().getCurrentProject(), sprite, sequence); action.setScope(scope); - action.setUrl(url); - action.setHeader(header); - action.setData(data); + action.setUrlFormula(urlFormula); + action.setHeaderFormula(headerFormula); + action.setDataFormula(dataFormula); action.setUserVariable(userVariable); return action; } From 8b3786d1cdc1d58757f0739cecd2c47ad522a9cd Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 03:33:26 +0200 Subject: [PATCH 33/65] Update BrickDialogManager.kt --- .../catroid/stage/BrickDialogManager.kt | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt index 6ebe70033d2..30d27774105 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt +++ b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt @@ -41,6 +41,7 @@ import org.catrobat.catroid.TrustedDomainManager import org.catrobat.catroid.common.Constants import org.catrobat.catroid.content.actions.AskAction import org.catrobat.catroid.content.actions.WebAction +import org.catrobat.catroid.content.actions.PostWebAction import java.net.URI import java.util.ArrayList import java.util.Collections @@ -53,6 +54,7 @@ class BrickDialogManager(val stageActivity: StageActivity) : enum class DialogType { ASK_DIALOG, WEB_ACCESS_DIALOG + POST_WEB_ACCESS_DIALOG } fun dialogIsShowing() = openDialogs.isNotEmpty() @@ -66,6 +68,7 @@ class BrickDialogManager(val stageActivity: StageActivity) : val dialog = when (type) { DialogType.ASK_DIALOG -> createAskDialog(action as AskAction, content) DialogType.WEB_ACCESS_DIALOG -> createWebAccessDialog(action as WebAction, content) + DialogType.POST_WEB_ACCESS_DIALOG -> createPostWebAccessDialog(action as PostWebAction, content) } openDialog(dialog) } @@ -125,6 +128,36 @@ class BrickDialogManager(val stageActivity: StageActivity) : .create() } + private fun createPostWebAccessDialog(postWebAction: PostWebAction, url: String): Dialog { + val view = LayoutInflater.from(stageActivity).inflate(R.layout.dialog_web_access, null) + view.findViewById(R.id.request_url).text = url + + view.findViewById(R.id.request_warning).apply { + text = HtmlCompat.fromHtml( + stageActivity.getString(R.string.web_request_warning_message, Constants.WEB_REQUEST_WIKI_URL), + HtmlCompat.FROM_HTML_MODE_LEGACY + ) + movementMethod = LinkMovementMethod.getInstance() + } + + return AlertDialog.Builder(ContextThemeWrapper(stageActivity, R.style.Theme_AppCompat_Dialog)) + .setTitle(stageActivity.getString(R.string.web_request_warning_title)) + .setCancelable(false) + .setView(view) + .setOnKeyListener(this) + .setOnDismissListener(this) + .setPositiveButton(stageActivity.getString(R.string.once)) { _, _ -> + postWebAction.grantPermission() + } + .setNeutralButton(stageActivity.getString(R.string.always)) { dialog, _ -> + openDialog(createTrustDomainDialog(postWebAction, url, dialog as Dialog)) + } + .setNegativeButton(stageActivity.getString(R.string.deny)) { _, _ -> + postWbAction.denyPermission() + } + .create() + } + private fun createTrustDomainDialog(webAction: WebAction, url: String, webAccessDialog: Dialog): Dialog { val domain = URI(url).host.removePrefix("www.") val view = LayoutInflater.from(stageActivity).inflate(R.layout.dialog_web_access, null) @@ -160,6 +193,41 @@ class BrickDialogManager(val stageActivity: StageActivity) : .create() } + private fun createTrustDomainDialog(postWebAction: PostWebAction, url: String, webAccessDialog: Dialog): Dialog { + val domain = URI(url).host.removePrefix("www.") + val view = LayoutInflater.from(stageActivity).inflate(R.layout.dialog_web_access, null) + view.findViewById(R.id.request_url).text = domain + + val warningMessage = StringBuilder() + .append(stageActivity.getString(R.string.web_request_warning_message, Constants.WEB_REQUEST_WIKI_URL)) + .append("

") + .append(stageActivity.getString(R.string.web_request_trust_domain_warning_message)) + + if (!BuildConfig.FEATURE_APK_GENERATOR_ENABLED) { + warningMessage.append(" ").append(stageActivity.getString(R.string.trusted_domains_edit_hint)) + } + + view.findViewById(R.id.request_warning).apply { + text = HtmlCompat.fromHtml(warningMessage.toString(), HtmlCompat.FROM_HTML_MODE_LEGACY) + movementMethod = LinkMovementMethod.getInstance() + } + + return AlertDialog.Builder(ContextThemeWrapper(stageActivity, R.style.Theme_AppCompat_Dialog)) + .setTitle(stageActivity.getString(R.string.web_request_trust_domain_warning_title)) + .setCancelable(false) + .setView(view) + .setOnKeyListener(this) + .setOnDismissListener(this) + .setPositiveButton(stageActivity.getString(R.string.always)) { _, _ -> + TrustedDomainManager.addToUserTrustList(domain) + webAction.grantPermission() + } + .setNeutralButton(stageActivity.getString(R.string.cancel)) { _, _ -> + openDialog(webAccessDialog) + } + .create() + } + override fun onKey(dialog: DialogInterface, keyCode: Int, event: KeyEvent) = (keyCode == KeyEvent.KEYCODE_BACK).also { if (it) stageActivity.onBackPressed() From 412f6fae8c8500b78152787055b4c91c7d423aee Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 03:34:08 +0200 Subject: [PATCH 34/65] Update PostWebAction.kt --- .../java/org/catrobat/catroid/content/actions/PostWebAction.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 8a05de2b752..3dcc794a806 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -80,7 +80,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { denyPermission() } else { permissionStatus = PermissionStatus.PENDING - val params = arrayListOf(BrickDialogManager.DialogType.WEB_ACCESS_DIALOG, this, url!!) + val params = arrayListOf(BrickDialogManager.DialogType.POST_WEB_ACCESS_DIALOG, this, url!!) StageActivity.messageHandler.obtainMessage(StageActivity.SHOW_DIALOG, params).sendToTarget() } } From f617929b9a7aa4f330367eb8c49c0529d943a8a5 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 03:52:40 +0200 Subject: [PATCH 35/65] Update BrickDialogManager.kt --- .../java/org/catrobat/catroid/stage/BrickDialogManager.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt index 30d27774105..12b46d6313e 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt +++ b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt @@ -40,8 +40,8 @@ import org.catrobat.catroid.R import org.catrobat.catroid.TrustedDomainManager import org.catrobat.catroid.common.Constants import org.catrobat.catroid.content.actions.AskAction -import org.catrobat.catroid.content.actions.WebAction import org.catrobat.catroid.content.actions.PostWebAction +import org.catrobat.catroid.content.actions.WebAction import java.net.URI import java.util.ArrayList import java.util.Collections @@ -53,7 +53,7 @@ class BrickDialogManager(val stageActivity: StageActivity) : enum class DialogType { ASK_DIALOG, - WEB_ACCESS_DIALOG + WEB_ACCESS_DIALOG, POST_WEB_ACCESS_DIALOG } From f10deef97c052caf7379f11536d7ceeeae6d7207 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 03:55:01 +0200 Subject: [PATCH 36/65] Update ActionFactory.java --- .../main/java/org/catrobat/catroid/content/ActionFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java index c0f432f8939..090c737c6ca 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/ActionFactory.java @@ -101,6 +101,7 @@ import org.catrobat.catroid.content.actions.PlaySoundAction; import org.catrobat.catroid.content.actions.PointInDirectionAction; import org.catrobat.catroid.content.actions.PointToAction; +import org.catrobat.catroid.content.actions.PostWebRequestAction; import org.catrobat.catroid.content.actions.RaspiIfLogicAction; import org.catrobat.catroid.content.actions.RaspiPwmAction; import org.catrobat.catroid.content.actions.RaspiSendDigitalValueAction; @@ -166,7 +167,6 @@ import org.catrobat.catroid.content.actions.WaitTillIdleAction; import org.catrobat.catroid.content.actions.WaitUntilAction; import org.catrobat.catroid.content.actions.WebRequestAction; -import org.catrobat.catroid.content.actions.PostWebRequestAction; import org.catrobat.catroid.content.actions.WriteEmbroideryToFileAction; import org.catrobat.catroid.content.actions.WriteUserDataOnDeviceAction; import org.catrobat.catroid.content.actions.WriteVariableToFileAction; From d7fd3a197352c1a0702c7ecd13fedaa0e80f4050 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 03:55:59 +0200 Subject: [PATCH 37/65] Update StageListener.java --- .../src/main/java/org/catrobat/catroid/stage/StageListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java b/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java index e0bed50b51c..551b3441e27 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java +++ b/catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java @@ -80,8 +80,8 @@ import org.catrobat.catroid.ui.recyclerview.controller.SpriteController; import org.catrobat.catroid.utils.TouchUtil; import org.catrobat.catroid.utils.VibrationUtil; -import org.catrobat.catroid.web.WebConnectionHolder; import org.catrobat.catroid.web.PostWebConnectionHolder; +import org.catrobat.catroid.web.WebConnectionHolder; import java.util.ArrayList; import java.util.HashMap; From a2ea57546be43cd5839617e97fc9879439530819 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 04:03:01 +0200 Subject: [PATCH 38/65] Update PostWebConnection.kt --- .../catrobat/catroid/web/PostWebConnection.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 79c47a641bb..0a0873103d4 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -36,8 +36,13 @@ import org.catrobat.catroid.stage.StageActivity import java.io.IOException import java.lang.ref.WeakReference -class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWebRequestListener, - private val url: String, private val header: String, private val data: String) { +class PostWebConnection( + private val okHttpClient: OkHttpClient, + listener: PostWebRequestListener, + private val url: String, + private val header: String, + private val data: String + ) { private var weakListenerReference: WeakReference? = WeakReference(listener) private var call: Call? = null @@ -63,11 +68,11 @@ class PostWebConnection(private val okHttpClient: OkHttpClient, listener: PostWe .add("User-Agent", Constants.USER_AGENT) val headerLines = header.lines() headerLines.forEach { - if (it.startsWith("user-agent: ", ignoreCase = true)) { - headers.set("User-Agent", it.substring("user-agent: ".length)) - } else { - headers.add(it) - } + if (it.startsWith("user-agent: ", ignoreCase = true)) { + headers.set("User-Agent", it.substring("user-agent: ".length)) + } else { + headers.add(it) + } } val request = Request.Builder() .url(url) From 93e8caa54ae6ab94e52b82de3ed83923f738c104 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 04:15:40 +0200 Subject: [PATCH 39/65] Update BrickDialogManager.kt --- .../java/org/catrobat/catroid/stage/BrickDialogManager.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt index 12b46d6313e..28e3d751586 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt +++ b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt @@ -150,10 +150,10 @@ class BrickDialogManager(val stageActivity: StageActivity) : postWebAction.grantPermission() } .setNeutralButton(stageActivity.getString(R.string.always)) { dialog, _ -> - openDialog(createTrustDomainDialog(postWebAction, url, dialog as Dialog)) + openDialog(createPostTrustDomainDialog(postWebAction, url, dialog as Dialog)) } .setNegativeButton(stageActivity.getString(R.string.deny)) { _, _ -> - postWbAction.denyPermission() + postWebAction.denyPermission() } .create() } @@ -193,7 +193,7 @@ class BrickDialogManager(val stageActivity: StageActivity) : .create() } - private fun createTrustDomainDialog(postWebAction: PostWebAction, url: String, webAccessDialog: Dialog): Dialog { + private fun createPostTrustDomainDialog(postWebAction: PostWebAction, url: String, webAccessDialog: Dialog): Dialog { val domain = URI(url).host.removePrefix("www.") val view = LayoutInflater.from(stageActivity).inflate(R.layout.dialog_web_access, null) view.findViewById(R.id.request_url).text = domain @@ -220,7 +220,7 @@ class BrickDialogManager(val stageActivity: StageActivity) : .setOnDismissListener(this) .setPositiveButton(stageActivity.getString(R.string.always)) { _, _ -> TrustedDomainManager.addToUserTrustList(domain) - webAction.grantPermission() + postWebAction.grantPermission() } .setNeutralButton(stageActivity.getString(R.string.cancel)) { _, _ -> openDialog(webAccessDialog) From 5ca0e815a1e3c41ba1a13030e1e5fd49e8767ce1 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 04:17:26 +0200 Subject: [PATCH 40/65] Update PostWebConnection.kt --- .../org/catrobat/catroid/web/PostWebConnection.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 0a0873103d4..8258a2b548d 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -37,12 +37,12 @@ import java.io.IOException import java.lang.ref.WeakReference class PostWebConnection( - private val okHttpClient: OkHttpClient, - listener: PostWebRequestListener, - private val url: String, - private val header: String, - private val data: String - ) { + private val okHttpClient: OkHttpClient, + listener: PostWebRequestListener, + private val url: String, + private val header: String, + private val data: String + ) { private var weakListenerReference: WeakReference? = WeakReference(listener) private var call: Call? = null From c72e1bdd8caf8d416a581cff4a9d770223db9c33 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 04:52:57 +0200 Subject: [PATCH 41/65] Update PostWebConnection.kt --- .../src/main/java/org/catrobat/catroid/web/PostWebConnection.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 8258a2b548d..8feaf9abeba 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -42,7 +42,7 @@ class PostWebConnection( private val url: String, private val header: String, private val data: String - ) { +) { private var weakListenerReference: WeakReference? = WeakReference(listener) private var call: Call? = null From 52a41cbb736ba954978ee8520af0916b84c87a0f Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 05:09:25 +0200 Subject: [PATCH 42/65] Update BrickCategoryTest.java --- .../catroid/test/content/bricks/BrickCategoryTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/test/content/bricks/BrickCategoryTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/test/content/bricks/BrickCategoryTest.java index f838a03af67..2b6082e856c 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/test/content/bricks/BrickCategoryTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/test/content/bricks/BrickCategoryTest.java @@ -134,6 +134,7 @@ import org.catrobat.catroid.content.bricks.PlaySoundBrick; import org.catrobat.catroid.content.bricks.PointInDirectionBrick; import org.catrobat.catroid.content.bricks.PointToBrick; +import org.catrobat.catroid.content.bricks.PostWebRequestBrick; import org.catrobat.catroid.content.bricks.PreviousLookBrick; import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick; import org.catrobat.catroid.content.bricks.RaspiPwmBrick; @@ -400,6 +401,7 @@ public static Collection data() { StoreCSVIntoUserListBrick.class, WebRequestBrick.class, LookRequestBrick.class, + PostWebRequestBrick.class, AskBrick.class, AskSpeechBrick.class, StartListeningBrick.class)}, @@ -408,6 +410,7 @@ public static Collection data() { WhenTouchDownBrick.class, WebRequestBrick.class, LookRequestBrick.class, + PostWebRequestBrick.class, OpenUrlBrick.class, VibrationBrick.class, SpeakBrick.class, @@ -486,7 +489,8 @@ public static Collection data() { TouchAndSlideBrick.class, FinishStageBrick.class, StoreCSVIntoUserListBrick.class, - WebRequestBrick.class)}, + WebRequestBrick.class, + PostWebRequestBrick.class)}, }); } From e1b851eacb3555a40b376cc66c2259ab0d5d2350 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 05:10:15 +0200 Subject: [PATCH 43/65] Update BrickDialogManager.kt --- .../main/java/org/catrobat/catroid/stage/BrickDialogManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt index 28e3d751586..7518ed7d088 100644 --- a/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt +++ b/catroid/src/main/java/org/catrobat/catroid/stage/BrickDialogManager.kt @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2020 The Catrobat Team + * Copyright (C) 2010-2021 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify From aa7f2198e510e5c6c32ac6053832bc06421da13f Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 10:24:52 +0200 Subject: [PATCH 44/65] Update brick_post_web_request.xml --- catroid/src/main/res/layout/brick_post_web_request.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/catroid/src/main/res/layout/brick_post_web_request.xml b/catroid/src/main/res/layout/brick_post_web_request.xml index 31283c9ebb3..87cb98045f2 100644 --- a/catroid/src/main/res/layout/brick_post_web_request.xml +++ b/catroid/src/main/res/layout/brick_post_web_request.xml @@ -54,6 +54,7 @@ Date: Sun, 25 Jul 2021 10:47:03 +0200 Subject: [PATCH 45/65] Update PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 3dcc794a806..149d5e37a58 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -75,6 +75,30 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } } + private fun interpretHeader(): Boolean { + return try { + headerFormula!!.interpretString(scope)!!.let { + header = it + } + true + } catch (exception: InterpretationException) { + Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + false + } + } + + private fun interpretData(): Boolean { + return try { + dataFormula!!.interpretString(scope)!!.let { + data = it + } + true + } catch (exception: InterpretationException) { + Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + false + } + } + private fun askForPermission() { if (StageActivity.messageHandler == null) { denyPermission() @@ -94,7 +118,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } override fun act(delta: Float): Boolean { - if (url == null && !interpretUrl()) { + if (url == null && !interpretUrl() || header == null && !interpretHeader() || data == null && !interpretData()) { return true } From 1d8a24b077f64a47a2528bfcaa7b9b4abe7fe0f6 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 11:42:53 +0200 Subject: [PATCH 46/65] Update PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index 149d5e37a58..b5b708bb228 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -70,7 +70,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } true } catch (exception: InterpretationException) { - Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + Log.d(javaClass.simpleName, "Couldn't interpret url formula", exception) false } } @@ -82,7 +82,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } true } catch (exception: InterpretationException) { - Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + Log.d(javaClass.simpleName, "Couldn't interpret header formula", exception) false } } @@ -94,7 +94,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } true } catch (exception: InterpretationException) { - Log.d(javaClass.simpleName, "Couldn't interpret formula", exception) + Log.d(javaClass.simpleName, "Couldn't interpret data formula", exception) false } } @@ -118,7 +118,11 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } override fun act(delta: Float): Boolean { - if (url == null && !interpretUrl() || header == null && !interpretHeader() || data == null && !interpretData()) { + if ( + url == null && !interpretUrl() + || header == null && !interpretHeader() + || data == null && !interpretData() + ) { return true } From c39823376462319cff31f7713f846426e08e2f6e Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 12:29:59 +0200 Subject: [PATCH 47/65] Update PostWebConnection.kt --- .../org/catrobat/catroid/web/PostWebConnection.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt index 8feaf9abeba..2082b6f4e7e 100644 --- a/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt +++ b/catroid/src/main/java/org/catrobat/catroid/web/PostWebConnection.kt @@ -64,20 +64,22 @@ class PostWebConnection( @Synchronized fun sendPostWebRequest() { try { - val headers = Headers.Builder() + val headerBuilder = Headers.Builder() .add("User-Agent", Constants.USER_AGENT) val headerLines = header.lines() headerLines.forEach { if (it.startsWith("user-agent: ", ignoreCase = true)) { - headers.set("User-Agent", it.substring("user-agent: ".length)) + headerBuilder.set("User-Agent", it.substring("user-agent: ".length)) } else { - headers.add(it) + headerBuilder.add(it) } } + val headers = headerBuilder.build() + val mediaType = MediaType.parse(headers.get("Content-Type") ?: "text/plain") val request = Request.Builder() .url(url) - .headers(headers.build()) - .post(RequestBody.create(MediaType.parse("text/plain"), data)) + .headers(headers) + .post(RequestBody.create(mediaType, data)) .build() call = okHttpClient.newCall(request) call?.enqueue(createCallback()) From 7a601277f65f35e68eb3404b74f3a0d5701bd083 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 12:52:57 +0200 Subject: [PATCH 48/65] Update PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index b5b708bb228..cb0c45e9321 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -57,16 +57,18 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } private var permissionStatus: PermissionStatus = PermissionStatus.UNKNOWN - private fun interpretUrl(): Boolean { + private fun interpretableUrl(): Boolean { return try { - urlFormula!!.interpretString(scope)!!.let { - url = if (it.startsWith("http://") || it.startsWith("https://")) { - it - } else "https://$it" - } - val newlineIndex = url?.indexOf("\n") - if (newlineIndex != -1) { - url = newlineIndex?.let { url?.subSequence(0, it).toString() } + if url == null { + urlFormula!!.interpretString(scope)!!.let { + url = if (it.startsWith("http://") || it.startsWith("https://")) { + it + } else "https://$it" + } + val newlineIndex = url?.indexOf("\n") + if (newlineIndex != -1) { + url = newlineIndex?.let { url?.subSequence(0, it).toString() } + } } true } catch (exception: InterpretationException) { @@ -75,10 +77,12 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } } - private fun interpretHeader(): Boolean { + private fun interpretableHeader(): Boolean { return try { - headerFormula!!.interpretString(scope)!!.let { - header = it + if header == null { + headerFormula!!.interpretString(scope)!!.let { + header = it + } } true } catch (exception: InterpretationException) { @@ -87,10 +91,12 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } } - private fun interpretData(): Boolean { + private fun interpretableData(): Boolean { return try { - dataFormula!!.interpretString(scope)!!.let { - data = it + if data == null { + dataFormula!!.interpretString(scope)!!.let { + data = it + } } true } catch (exception: InterpretationException) { @@ -118,11 +124,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { } override fun act(delta: Float): Boolean { - if ( - url == null && !interpretUrl() - || header == null && !interpretHeader() - || data == null && !interpretData() - ) { + if (!interpretableUrl() || !interpretableHeader() || !interpretableData()) { return true } From 797c6878f3e7675d1aff0992057f62d82914d01a Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 13:05:19 +0200 Subject: [PATCH 49/65] Update PostWebAction.kt --- .../org/catrobat/catroid/content/actions/PostWebAction.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index cb0c45e9321..d8634c269ee 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -59,7 +59,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableUrl(): Boolean { return try { - if url == null { + if (url == null) { urlFormula!!.interpretString(scope)!!.let { url = if (it.startsWith("http://") || it.startsWith("https://")) { it @@ -79,7 +79,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableHeader(): Boolean { return try { - if header == null { + if (header == null) { headerFormula!!.interpretString(scope)!!.let { header = it } @@ -93,7 +93,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableData(): Boolean { return try { - if data == null { + if (data == null) { dataFormula!!.interpretString(scope)!!.let { data = it } From f38739331c28b80fc77c96dbe1860e63f83122a1 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 25 Jul 2021 14:13:55 +0200 Subject: [PATCH 50/65] Update PostWebAction.kt --- .../catroid/content/actions/PostWebAction.kt | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt index d8634c269ee..6aee5605fe6 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt +++ b/catroid/src/main/java/org/catrobat/catroid/content/actions/PostWebAction.kt @@ -60,15 +60,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableUrl(): Boolean { return try { if (url == null) { - urlFormula!!.interpretString(scope)!!.let { - url = if (it.startsWith("http://") || it.startsWith("https://")) { - it - } else "https://$it" - } - val newlineIndex = url?.indexOf("\n") - if (newlineIndex != -1) { - url = newlineIndex?.let { url?.subSequence(0, it).toString() } - } + url = urlFormula!!.interpretString(scope) } true } catch (exception: InterpretationException) { @@ -80,9 +72,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableHeader(): Boolean { return try { if (header == null) { - headerFormula!!.interpretString(scope)!!.let { - header = it - } + header = headerFormula!!.interpretString(scope) } true } catch (exception: InterpretationException) { @@ -94,9 +84,7 @@ abstract class PostWebAction : Action(), PostWebRequestListener { private fun interpretableData(): Boolean { return try { if (data == null) { - dataFormula!!.interpretString(scope)!!.let { - data = it - } + data = dataFormula!!.interpretString(scope) } true } catch (exception: InterpretationException) { From 98ff17dfba78441eebf57207d04711ddd1f627a7 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Sun, 24 Oct 2021 15:21:38 +0200 Subject: [PATCH 51/65] Do not store catroid APKs two times... Current output in jenkins jobs spuriously contained the debug apk twice. This fixes it. --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 34c0972f630..aeadc7d8a7a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -139,7 +139,7 @@ pipeline { -Pdownload='https://share.catrob.at/pocketcode/download/817.catrobat'""" renameApks("${env.BRANCH_NAME}-${env.BUILD_NUMBER}") - archiveArtifacts '**/*.apk' + archiveArtifacts '**/catroid-standalone*.apk' } } } From d1bd7ff9a1e1429dc44ed8ddcfee339ed6aa2e91 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 01:22:47 +0200 Subject: [PATCH 52/65] Update Constants.java --- .../src/main/java/org/catrobat/catroid/common/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/common/Constants.java b/catroid/src/main/java/org/catrobat/catroid/common/Constants.java index c5bc48a93d0..56330029ed6 100644 --- a/catroid/src/main/java/org/catrobat/catroid/common/Constants.java +++ b/catroid/src/main/java/org/catrobat/catroid/common/Constants.java @@ -42,7 +42,7 @@ public final class Constants { - public static final double CURRENT_CATROBAT_LANGUAGE_VERSION = 1.06; + public static final double CURRENT_CATROBAT_LANGUAGE_VERSION = 1.09; public static final String REMOTE_DISPLAY_APP_ID = "CEBB9229"; public static final int CAST_CONNECTION_TIMEOUT = 5000; //in milliseconds public static final int CAST_NOT_SEEING_DEVICE_TIMEOUT = 3000; //in milliseconds From c32f80e30d753c4a0df0935df9076edf8b4eb914 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 01:43:49 +0200 Subject: [PATCH 53/65] Revert to current develop --- .../ui/fragment/CategoryBricksFactory.java | 311 ++++-------------- 1 file changed, 64 insertions(+), 247 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java index b5a461667d7..50daa43cff1 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2021 The Catrobat Team + * Copyright (C) 2010-2018 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -26,6 +26,8 @@ import android.content.res.Configuration; import android.content.res.Resources; +import com.parrot.freeflight.drone.DroneProxy.ARDRONE_LED_ANIMATION; + import org.catrobat.catroid.BuildConfig; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; @@ -33,6 +35,8 @@ import org.catrobat.catroid.content.BroadcastScript; import org.catrobat.catroid.content.Project; import org.catrobat.catroid.content.RaspiInterruptScript; +import org.catrobat.catroid.content.Scene; +import org.catrobat.catroid.content.Script; import org.catrobat.catroid.content.Sprite; import org.catrobat.catroid.content.WhenBounceOffScript; import org.catrobat.catroid.content.WhenConditionScript; @@ -43,7 +47,6 @@ import org.catrobat.catroid.content.bricks.AskBrick; import org.catrobat.catroid.content.bricks.AskSpeechBrick; import org.catrobat.catroid.content.bricks.AssertEqualsBrick; -import org.catrobat.catroid.content.bricks.AssertUserListsBrick; import org.catrobat.catroid.content.bricks.BackgroundRequestBrick; import org.catrobat.catroid.content.bricks.Brick; import org.catrobat.catroid.content.bricks.BroadcastBrick; @@ -53,7 +56,6 @@ import org.catrobat.catroid.content.bricks.ChangeBrightnessByNBrick; import org.catrobat.catroid.content.bricks.ChangeColorByNBrick; import org.catrobat.catroid.content.bricks.ChangeSizeByNBrick; -import org.catrobat.catroid.content.bricks.ChangeTempoByNBrick; import org.catrobat.catroid.content.bricks.ChangeTransparencyByNBrick; import org.catrobat.catroid.content.bricks.ChangeVariableBrick; import org.catrobat.catroid.content.bricks.ChangeVolumeByNBrick; @@ -65,9 +67,7 @@ import org.catrobat.catroid.content.bricks.ClearUserListBrick; import org.catrobat.catroid.content.bricks.CloneBrick; import org.catrobat.catroid.content.bricks.ComeToFrontBrick; -import org.catrobat.catroid.content.bricks.CopyLookBrick; import org.catrobat.catroid.content.bricks.DeleteItemOfUserListBrick; -import org.catrobat.catroid.content.bricks.DeleteLookBrick; import org.catrobat.catroid.content.bricks.DeleteThisCloneBrick; import org.catrobat.catroid.content.bricks.DroneEmergencyBrick; import org.catrobat.catroid.content.bricks.DroneFlipBrick; @@ -82,12 +82,8 @@ import org.catrobat.catroid.content.bricks.DroneTakeOffLandBrick; import org.catrobat.catroid.content.bricks.DroneTurnLeftBrick; import org.catrobat.catroid.content.bricks.DroneTurnRightBrick; -import org.catrobat.catroid.content.bricks.EditLookBrick; -import org.catrobat.catroid.content.bricks.ExitStageBrick; import org.catrobat.catroid.content.bricks.FinishStageBrick; import org.catrobat.catroid.content.bricks.FlashBrick; -import org.catrobat.catroid.content.bricks.ForItemInUserListBrick; -import org.catrobat.catroid.content.bricks.ForVariableFromToBrick; import org.catrobat.catroid.content.bricks.ForeverBrick; import org.catrobat.catroid.content.bricks.GlideToBrick; import org.catrobat.catroid.content.bricks.GoNStepsBackBrick; @@ -122,11 +118,6 @@ import org.catrobat.catroid.content.bricks.MoveNStepsBrick; import org.catrobat.catroid.content.bricks.NextLookBrick; import org.catrobat.catroid.content.bricks.NoteBrick; -import org.catrobat.catroid.content.bricks.OpenUrlBrick; -import org.catrobat.catroid.content.bricks.PaintNewLookBrick; -import org.catrobat.catroid.content.bricks.ParameterizedBrick; -import org.catrobat.catroid.content.bricks.ParameterizedEndBrick; -import org.catrobat.catroid.content.bricks.PauseForBeatsBrick; import org.catrobat.catroid.content.bricks.PenDownBrick; import org.catrobat.catroid.content.bricks.PenUpBrick; import org.catrobat.catroid.content.bricks.PhiroIfLogicBeginBrick; @@ -136,25 +127,19 @@ import org.catrobat.catroid.content.bricks.PhiroPlayToneBrick; import org.catrobat.catroid.content.bricks.PhiroRGBLightBrick; import org.catrobat.catroid.content.bricks.PlaceAtBrick; -import org.catrobat.catroid.content.bricks.PlayDrumForBeatsBrick; -import org.catrobat.catroid.content.bricks.PlayNoteForBeatsBrick; import org.catrobat.catroid.content.bricks.PlaySoundAndWaitBrick; import org.catrobat.catroid.content.bricks.PlaySoundBrick; import org.catrobat.catroid.content.bricks.PointInDirectionBrick; import org.catrobat.catroid.content.bricks.PointToBrick; -import org.catrobat.catroid.content.bricks.PostWebRequestBrick; import org.catrobat.catroid.content.bricks.PreviousLookBrick; import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick; import org.catrobat.catroid.content.bricks.RaspiPwmBrick; import org.catrobat.catroid.content.bricks.RaspiSendDigitalValueBrick; import org.catrobat.catroid.content.bricks.ReadListFromDeviceBrick; import org.catrobat.catroid.content.bricks.ReadVariableFromDeviceBrick; -import org.catrobat.catroid.content.bricks.ReadVariableFromFileBrick; import org.catrobat.catroid.content.bricks.RepeatBrick; import org.catrobat.catroid.content.bricks.RepeatUntilBrick; import org.catrobat.catroid.content.bricks.ReplaceItemInUserListBrick; -import org.catrobat.catroid.content.bricks.ReportBrick; -import org.catrobat.catroid.content.bricks.ResetTimerBrick; import org.catrobat.catroid.content.bricks.RunningStitchBrick; import org.catrobat.catroid.content.bricks.SayBubbleBrick; import org.catrobat.catroid.content.bricks.SayForBubbleBrick; @@ -169,8 +154,6 @@ import org.catrobat.catroid.content.bricks.SetColorBrick; import org.catrobat.catroid.content.bricks.SetFrictionBrick; import org.catrobat.catroid.content.bricks.SetGravityBrick; -import org.catrobat.catroid.content.bricks.SetInstrumentBrick; -import org.catrobat.catroid.content.bricks.SetListeningLanguageBrick; import org.catrobat.catroid.content.bricks.SetLookBrick; import org.catrobat.catroid.content.bricks.SetLookByIndexBrick; import org.catrobat.catroid.content.bricks.SetMassBrick; @@ -180,40 +163,31 @@ import org.catrobat.catroid.content.bricks.SetPhysicsObjectTypeBrick; import org.catrobat.catroid.content.bricks.SetRotationStyleBrick; import org.catrobat.catroid.content.bricks.SetSizeToBrick; -import org.catrobat.catroid.content.bricks.SetTempoBrick; -import org.catrobat.catroid.content.bricks.SetThreadColorBrick; import org.catrobat.catroid.content.bricks.SetTransparencyBrick; import org.catrobat.catroid.content.bricks.SetVariableBrick; import org.catrobat.catroid.content.bricks.SetVelocityBrick; import org.catrobat.catroid.content.bricks.SetVolumeToBrick; import org.catrobat.catroid.content.bricks.SetXBrick; import org.catrobat.catroid.content.bricks.SetYBrick; -import org.catrobat.catroid.content.bricks.SewUpBrick; import org.catrobat.catroid.content.bricks.ShowBrick; import org.catrobat.catroid.content.bricks.ShowTextBrick; import org.catrobat.catroid.content.bricks.ShowTextColorSizeAlignmentBrick; import org.catrobat.catroid.content.bricks.SpeakAndWaitBrick; import org.catrobat.catroid.content.bricks.SpeakBrick; import org.catrobat.catroid.content.bricks.StampBrick; -import org.catrobat.catroid.content.bricks.StartListeningBrick; import org.catrobat.catroid.content.bricks.StitchBrick; import org.catrobat.catroid.content.bricks.StopAllSoundsBrick; import org.catrobat.catroid.content.bricks.StopRunningStitchBrick; import org.catrobat.catroid.content.bricks.StopScriptBrick; -import org.catrobat.catroid.content.bricks.StopSoundBrick; import org.catrobat.catroid.content.bricks.StoreCSVIntoUserListBrick; import org.catrobat.catroid.content.bricks.TapAtBrick; -import org.catrobat.catroid.content.bricks.TapForBrick; import org.catrobat.catroid.content.bricks.ThinkBubbleBrick; import org.catrobat.catroid.content.bricks.ThinkForBubbleBrick; -import org.catrobat.catroid.content.bricks.TouchAndSlideBrick; import org.catrobat.catroid.content.bricks.TripleStitchBrick; import org.catrobat.catroid.content.bricks.TurnLeftBrick; import org.catrobat.catroid.content.bricks.TurnLeftSpeedBrick; import org.catrobat.catroid.content.bricks.TurnRightBrick; import org.catrobat.catroid.content.bricks.TurnRightSpeedBrick; -import org.catrobat.catroid.content.bricks.UserDefinedBrick; -import org.catrobat.catroid.content.bricks.UserDefinedReceiverBrick; import org.catrobat.catroid.content.bricks.VibrationBrick; import org.catrobat.catroid.content.bricks.WaitBrick; import org.catrobat.catroid.content.bricks.WaitTillIdleBrick; @@ -229,16 +203,13 @@ import org.catrobat.catroid.content.bricks.WhenRaspiPinChangedBrick; import org.catrobat.catroid.content.bricks.WhenStartedBrick; import org.catrobat.catroid.content.bricks.WhenTouchDownBrick; -import org.catrobat.catroid.content.bricks.WriteEmbroideryToFileBrick; import org.catrobat.catroid.content.bricks.WriteListOnDeviceBrick; import org.catrobat.catroid.content.bricks.WriteVariableOnDeviceBrick; -import org.catrobat.catroid.content.bricks.WriteVariableToFileBrick; import org.catrobat.catroid.content.bricks.ZigZagStitchBrick; import org.catrobat.catroid.formulaeditor.Formula; import org.catrobat.catroid.formulaeditor.FormulaElement; import org.catrobat.catroid.formulaeditor.Operators; import org.catrobat.catroid.formulaeditor.Sensors; -import org.catrobat.catroid.ui.controller.RecentBrickListManager; import org.catrobat.catroid.ui.settingsfragments.SettingsFragment; import java.util.ArrayList; @@ -252,9 +223,7 @@ public class CategoryBricksFactory { public List getBricks(String category, boolean isBackgroundSprite, Context context) { - if (category.equals(context.getString(R.string.category_recently_used))) { - return setupRecentBricksCategoryList(isBackgroundSprite); - } + if (category.equals(context.getString(R.string.category_event))) { return setupEventCategoryList(context, isBackgroundSprite); } @@ -279,9 +248,6 @@ public List getBricks(String category, boolean isBackgroundSprite, Contex if (category.equals(context.getString(R.string.category_data))) { return setupDataCategoryList(context, isBackgroundSprite); } - if (category.equals(context.getString(R.string.category_device))) { - return setupDeviceCategoryList(context, isBackgroundSprite); - } if (category.equals(context.getString(R.string.category_lego_nxt))) { return setupLegoNxtCategoryList(); } @@ -307,7 +273,7 @@ public List getBricks(String category, boolean isBackgroundSprite, Contex return setupRaspiCategoryList(); } if (category.equals(context.getString(R.string.category_embroidery))) { - return setupEmbroideryCategoryList(context); + return setupEmbroideryCategoryList(); } if (category.equals(context.getString(R.string.category_assertions))) { return setupAssertionsCategoryList(context); @@ -316,10 +282,6 @@ public List getBricks(String category, boolean isBackgroundSprite, Contex return Collections.emptyList(); } - protected List setupRecentBricksCategoryList(boolean isBackgroundSprite) { - return RecentBrickListManager.getInstance().getRecentBricks(isBackgroundSprite); - } - protected List setupEventCategoryList(Context context, boolean isBackgroundSprite) { FormulaElement defaultIf = new FormulaElement(OPERATOR, Operators.SMALLER_THAN.toString(), null); defaultIf.setLeftChild(new FormulaElement(NUMBER, "1", null)); @@ -345,13 +307,10 @@ protected List setupEventCategoryList(Context context, boolean isBackgrou } eventBrickList.add(new WhenBackgroundChangesBrick()); eventBrickList.add(new WhenClonedBrick()); - eventBrickList.add(new CloneBrick()); - eventBrickList.add(new DeleteThisCloneBrick()); if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { eventBrickList.add(new WhenNfcBrick()); } - return eventBrickList; } @@ -371,9 +330,6 @@ protected List setupControlCategoryList(Context context) { controlBrickList.add(new WaitUntilBrick(ifConditionFormula)); controlBrickList.add(new RepeatBrick(new Formula(BrickValues.REPEAT))); controlBrickList.add(new RepeatUntilBrick(ifConditionFormula)); - controlBrickList.add(new ForVariableFromToBrick(new Formula(BrickValues.FOR_LOOP_FROM), - new Formula(BrickValues.FOR_LOOP_TO))); - controlBrickList.add(new ForItemInUserListBrick()); controlBrickList.add(new SceneTransitionBrick(null)); controlBrickList.add(new SceneStartBrick(null)); @@ -381,50 +337,24 @@ protected List setupControlCategoryList(Context context) { controlBrickList.add(new PhiroIfLogicBeginBrick()); } - controlBrickList.add(new ExitStageBrick()); controlBrickList.add(new StopScriptBrick(BrickValues.STOP_THIS_SCRIPT)); - controlBrickList.add(new WaitTillIdleBrick()); - controlBrickList.add(new WhenClonedBrick()); controlBrickList.add(new CloneBrick()); controlBrickList.add(new DeleteThisCloneBrick()); - + controlBrickList.add(new WhenClonedBrick()); if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { controlBrickList.add(new SetNfcTagBrick(context.getString(R.string.brick_set_nfc_tag_default_value))); } - Project currentProject = ProjectManager.getInstance().getCurrentProject(); - List broadcastMessages = currentProject.getBroadcastMessageContainer().getBroadcastMessages(); - String broadcastMessage = context.getString(R.string.brick_broadcast_default_value); - if (broadcastMessages.size() > 0) { - broadcastMessage = broadcastMessages.get(0); - } - controlBrickList.add(new BroadcastReceiverBrick(new BroadcastScript(broadcastMessage))); - controlBrickList.add(new BroadcastBrick(broadcastMessage)); - controlBrickList.add(new BroadcastWaitBrick(broadcastMessage)); - - controlBrickList.add(new TapAtBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START)); - controlBrickList.add(new TapForBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START, - BrickValues.TOUCH_DURATION)); - controlBrickList.add(new TouchAndSlideBrick(BrickValues.TOUCH_X_START, - BrickValues.TOUCH_Y_START, BrickValues.TOUCH_X_GOAL, BrickValues.TOUCH_Y_GOAL, - BrickValues.TOUCH_DURATION)); - - controlBrickList.add(new OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)); return controlBrickList; } private List setupUserBricksCategoryList() { Sprite currentSprite = ProjectManager.getInstance().getCurrentSprite(); - List userDefinedBricks = new ArrayList<>(); if (currentSprite != null) { - userDefinedBricks = currentSprite.getUserDefinedBrickList(); - } - userDefinedBricks = new ArrayList<>(userDefinedBricks); - if (BuildConfig.FEATURE_USER_REPORTERS_ENABLED) { - userDefinedBricks.add(new ReportBrick()); + return currentSprite.getUserDefinedBrickList(); } - return userDefinedBricks; + return new ArrayList<>(); } private List setupChromecastCategoryList(Context context) { @@ -491,34 +421,19 @@ protected List setupSoundCategoryList(Context context) { List soundBrickList = new ArrayList<>(); soundBrickList.add(new PlaySoundBrick()); soundBrickList.add(new PlaySoundAndWaitBrick()); - soundBrickList.add(new StopSoundBrick()); soundBrickList.add(new StopAllSoundsBrick()); soundBrickList.add(new SetVolumeToBrick(BrickValues.SET_VOLUME_TO)); soundBrickList.add(new ChangeVolumeByNBrick(new Formula(BrickValues.CHANGE_VOLUME_BY))); - if (SettingsFragment.isAISpeechSynthetizationSharedPreferenceEnabled(context)) { - soundBrickList.add(new SpeakBrick(context.getString(R.string.brick_speak_default_value))); - soundBrickList.add(new SpeakAndWaitBrick(context.getString(R.string.brick_speak_default_value))); - } + soundBrickList.add(new SpeakBrick(context.getString(R.string.brick_speak_default_value))); + soundBrickList.add(new SpeakAndWaitBrick(context.getString(R.string.brick_speak_default_value))); if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { soundBrickList.add(new PhiroPlayToneBrick(PhiroPlayToneBrick.Tone.DO, BrickValues.PHIRO_DURATION)); } - - if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { - soundBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); - soundBrickList.add(new StartListeningBrick()); - soundBrickList.add(new SetListeningLanguageBrick()); - } - - soundBrickList.add(new SetInstrumentBrick()); - soundBrickList.add(new PlayNoteForBeatsBrick(70, 1)); - soundBrickList.add(new PlayDrumForBeatsBrick(1)); - soundBrickList.add(new SetTempoBrick(60)); - soundBrickList.add(new ChangeTempoByNBrick(10)); - soundBrickList.add(new PauseForBeatsBrick(1)); + soundBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); return soundBrickList; } @@ -536,9 +451,7 @@ protected List setupLooksCategoryList(Context context, boolean isBackgrou looksBrickList.add(new ChangeSizeByNBrick(BrickValues.CHANGE_SIZE_BY)); looksBrickList.add(new HideBrick()); looksBrickList.add(new ShowBrick()); - looksBrickList.add(new AskBrick(context.getString(R.string.brick_ask_default_question))); - if (!isBackgroundSprite) { looksBrickList.add(new SayBubbleBrick(context.getString(R.string.brick_say_bubble_default_value))); looksBrickList.add(new SayForBubbleBrick(context.getString(R.string.brick_say_bubble_default_value), 1.0f)); @@ -567,12 +480,14 @@ protected List setupLooksCategoryList(Context context, boolean isBackgrou looksBrickList.add(new FlashBrick()); } - if (!isBackgroundSprite) { - looksBrickList.add(new LookRequestBrick(BrickValues.LOOK_REQUEST)); - } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { - looksBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)); - } else { - looksBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)); + if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { + if (!isBackgroundSprite) { + looksBrickList.add(new LookRequestBrick(context.getString(R.string.brick_look_request_default_value))); + } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { + looksBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_landscape))); + } else { + looksBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_portrait))); + } } if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { @@ -580,12 +495,6 @@ protected List setupLooksCategoryList(Context context, boolean isBackgrou BrickValues.PHIRO_VALUE_RED, BrickValues.PHIRO_VALUE_GREEN, BrickValues.PHIRO_VALUE_BLUE)); } - looksBrickList.add(new PaintNewLookBrick(context.getString(R.string.brick_paint_new_look_name))); - looksBrickList.add(new EditLookBrick()); - looksBrickList.add(new CopyLookBrick(context.getString(R.string.brick_copy_look_name))); - looksBrickList.add(new DeleteLookBrick()); - - looksBrickList.add(new OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)); return looksBrickList; } @@ -614,8 +523,6 @@ protected List setupDataCategoryList(Context context, boolean isBackgroun dataBrickList.add(new HideTextBrick()); dataBrickList.add(new WriteVariableOnDeviceBrick()); dataBrickList.add(new ReadVariableFromDeviceBrick()); - dataBrickList.add(new WriteVariableToFileBrick(context.getString(R.string.brick_write_variable_to_file_default_value))); - dataBrickList.add(new ReadVariableFromFileBrick(context.getString(R.string.brick_write_variable_to_file_default_value))); dataBrickList.add(new AddItemToUserListBrick(BrickValues.ADD_ITEM_TO_USERLIST)); dataBrickList.add(new DeleteItemOfUserListBrick(BrickValues.DELETE_ITEM_OF_USERLIST)); dataBrickList.add(new ClearUserListBrick()); @@ -628,116 +535,23 @@ protected List setupDataCategoryList(Context context, boolean isBackgroun dataBrickList.add(new StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, context.getString(R.string.brick_store_csv_into_userlist_data))); - dataBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); - if (!isBackgroundSprite) { - dataBrickList.add(new LookRequestBrick(BrickValues.LOOK_REQUEST)); - } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { - dataBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)); - } else { - dataBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)); + if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { + dataBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); + if (!isBackgroundSprite) { + dataBrickList.add(new LookRequestBrick(context.getString(R.string.brick_look_request_default_value))); + } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { + dataBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_landscape))); + } else { + dataBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_portrait))); + } } - dataBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))); dataBrickList.add(new AskBrick(context.getString(R.string.brick_ask_default_question))); - - if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { - dataBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); - } - if (SettingsFragment.isEmroiderySharedPreferenceEnabled(context)) { - dataBrickList.add(new WriteEmbroideryToFileBrick(context.getString(R.string.brick_default_embroidery_file))); - } - if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { - dataBrickList.add(new StartListeningBrick()); - } - if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { - dataBrickList.add(new SetNfcTagBrick(context.getString(R.string.brick_set_nfc_tag_default_value))); - } + dataBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); return dataBrickList; } - protected List setupDeviceCategoryList(Context context, boolean isBackgroundSprite) { - List deviceBrickList = new ArrayList<>(); - - deviceBrickList.add(new ResetTimerBrick()); - deviceBrickList.add(new WhenBrick()); - deviceBrickList.add(new WhenTouchDownBrick()); - if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { - deviceBrickList.add(new WhenNfcBrick()); - deviceBrickList.add(new SetNfcTagBrick(context.getString(R.string.brick_set_nfc_tag_default_value))); - } - - deviceBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); - if (!isBackgroundSprite) { - deviceBrickList.add(new LookRequestBrick(BrickValues.LOOK_REQUEST)); - } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { - deviceBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)); - } else { - deviceBrickList.add(new BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)); - } - deviceBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))); - - deviceBrickList.add(new OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)); - deviceBrickList.add(new VibrationBrick(BrickValues.VIBRATE_SECONDS)); - - if (SettingsFragment.isAISpeechSynthetizationSharedPreferenceEnabled(context)) { - deviceBrickList.add(new SpeakBrick(context.getString(R.string.brick_speak_default_value))); - deviceBrickList.add(new SpeakAndWaitBrick(context.getString(R.string.brick_speak_default_value))); - } - - if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { - deviceBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); - deviceBrickList.add(new StartListeningBrick()); - } - - if (!ProjectManager.getInstance().getCurrentProject().isCastProject()) { - deviceBrickList.add(new CameraBrick()); - deviceBrickList.add(new ChooseCameraBrick()); - deviceBrickList.add(new FlashBrick()); - } - deviceBrickList.add(new WriteVariableOnDeviceBrick()); - deviceBrickList.add(new ReadVariableFromDeviceBrick()); - deviceBrickList.add(new WriteListOnDeviceBrick()); - deviceBrickList.add(new ReadListFromDeviceBrick()); - deviceBrickList.add(new TapAtBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START)); - deviceBrickList.add(new TapForBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START, - BrickValues.TOUCH_DURATION)); - deviceBrickList.add(new TouchAndSlideBrick(BrickValues.TOUCH_X_START, - BrickValues.TOUCH_Y_START, BrickValues.TOUCH_X_GOAL, BrickValues.TOUCH_Y_GOAL, - BrickValues.TOUCH_DURATION)); - if (SettingsFragment.isCastSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupChromecastCategoryList(context)); - } - if (SettingsFragment.isMindstormsNXTSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupLegoNxtCategoryList()); - } - if (SettingsFragment.isMindstormsEV3SharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupLegoEv3CategoryList()); - } - if (SettingsFragment.isDroneSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupDroneCategoryList()); - } - if (SettingsFragment.isJSSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupJumpingSumoCategoryList()); - } - if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupPhiroProCategoryList()); - } - if (SettingsFragment.isArduinoSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupArduinoCategoryList()); - } - if (SettingsFragment.isRaspiSharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupRaspiCategoryList()); - } - if (SettingsFragment.isEmroiderySharedPreferenceEnabled(context)) { - deviceBrickList.addAll(setupEmbroideryCategoryList(context)); - } - - return deviceBrickList; - } - private List setupLegoNxtCategoryList() { List legoNXTBrickList = new ArrayList<>(); legoNXTBrickList.add(new LegoNxtMotorTurnAngleBrick(LegoNxtMotorTurnAngleBrick.Motor.MOTOR_A, @@ -785,7 +599,7 @@ private List setupDroneCategoryList() { droneBrickList.add(new DroneTurnRightBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); droneBrickList.add(new DroneFlipBrick()); - droneBrickList.add(new DronePlayLedAnimationBrick()); + droneBrickList.add(new DronePlayLedAnimationBrick(ARDRONE_LED_ANIMATION.ARDRONE_LED_ANIMATION_BLINK_GREEN_RED)); droneBrickList.add(new DroneSwitchCameraBrick()); return droneBrickList; @@ -860,41 +674,48 @@ private List setupRaspiCategoryList() { return raspiBrickList; } - private List setupEmbroideryCategoryList(Context context) { + private List setupEmbroideryCategoryList() { List embroideryBrickList = new ArrayList<>(); embroideryBrickList.add(new StitchBrick()); - embroideryBrickList.add(new SetThreadColorBrick(new Formula(BrickValues.THREAD_COLOR))); embroideryBrickList.add(new RunningStitchBrick(new Formula(BrickValues.STITCH_LENGTH))); embroideryBrickList.add(new ZigZagStitchBrick(new Formula(BrickValues.ZIGZAG_STITCH_LENGTH), new Formula(BrickValues.ZIGZAG_STITCH_WIDTH))); embroideryBrickList.add(new TripleStitchBrick(new Formula(BrickValues.STITCH_LENGTH))); - embroideryBrickList.add(new SewUpBrick()); embroideryBrickList.add(new StopRunningStitchBrick()); - embroideryBrickList.add(new WriteEmbroideryToFileBrick( - context.getString(R.string.brick_default_embroidery_file))); return embroideryBrickList; } private List setupAssertionsCategoryList(Context context) { List assertionsBrickList = new ArrayList<>(); - assertionsBrickList.add(new AssertEqualsBrick()); - assertionsBrickList.add(new AssertUserListsBrick()); - assertionsBrickList.add(new ParameterizedBrick()); - assertionsBrickList.add(new WaitTillIdleBrick()); - assertionsBrickList.add(new TapAtBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START)); - assertionsBrickList.add(new TapForBrick(BrickValues.TOUCH_X_START, BrickValues.TOUCH_Y_START, - BrickValues.TOUCH_DURATION)); - assertionsBrickList.add(new TouchAndSlideBrick(BrickValues.TOUCH_X_START, - BrickValues.TOUCH_Y_START, BrickValues.TOUCH_X_GOAL, BrickValues.TOUCH_Y_GOAL, - BrickValues.TOUCH_DURATION)); + AssertEqualsBrick assertEqualsBrick = new AssertEqualsBrick(); + assertionsBrickList.add(assertEqualsBrick); + + WaitTillIdleBrick waitTillIdleBrick = new WaitTillIdleBrick(); + assertionsBrickList.add(waitTillIdleBrick); + + assertionsBrickList.add(new TapAtBrick()); + assertionsBrickList.add(new FinishStageBrick()); + + for (Scene scene : ProjectManager.getInstance().getCurrentProject().getSceneList()) { + for (Sprite sprite : scene.getSpriteList()) { + for (Script script : sprite.getScriptList()) { + for (Brick brick : script.getBrickList()) { + if (brick instanceof AssertEqualsBrick) { + assertionsBrickList.remove(assertEqualsBrick); + } + } + } + } + } + assertionsBrickList.add(new StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, context.getString(R.string.brick_store_csv_into_userlist_data))); - assertionsBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); - assertionsBrickList.add(new PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))); + if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { + assertionsBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); + } return assertionsBrickList; } @@ -945,6 +766,12 @@ public String getBrickCategory(Brick brick, boolean isBackgroundSprite, Context category = res.getString(R.string.category_pen); } } + categoryBricks = setupUserBricksCategoryList(); + for (Brick categoryBrick : categoryBricks) { + if (brick.getClass().equals(categoryBrick.getClass())) { + category = res.getString(R.string.category_user_bricks); + } + } categoryBricks = setupDataCategoryList(context, isBackgroundSprite); for (Brick categoryBrick : categoryBricks) { if (brick.getClass().equals(categoryBrick.getClass())) { @@ -999,7 +826,7 @@ public String getBrickCategory(Brick brick, boolean isBackgroundSprite, Context category = res.getString(R.string.category_cast); } } - categoryBricks = setupEmbroideryCategoryList(context); + categoryBricks = setupEmbroideryCategoryList(); for (Brick categoryBrick : categoryBricks) { if (brick.getClass().equals(categoryBrick.getClass())) { category = res.getString(R.string.category_embroidery); @@ -1029,18 +856,8 @@ public String getBrickCategory(Brick brick, boolean isBackgroundSprite, Context category = res.getString(R.string.category_data); } else if (brick instanceof WebRequestBrick) { category = res.getString(R.string.category_data); - } else if (brick instanceof PostWebRequestBrick) { - category = res.getString(R.string.category_data); } else if (brick instanceof StoreCSVIntoUserListBrick) { category = res.getString(R.string.category_data); - } else if (brick instanceof UserDefinedBrick) { - category = res.getString(R.string.category_user_bricks); - } else if (brick instanceof UserDefinedReceiverBrick) { - category = res.getString(R.string.category_user_bricks); - } else if (brick instanceof ParameterizedEndBrick) { - category = res.getString(R.string.category_assertions); - } else if (brick instanceof WriteEmbroideryToFileBrick) { - category = res.getString(R.string.category_embroidery); } config.locale = savedLocale; From e4dde47132ce30334d59feae232cd037c18e243d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 01:48:56 +0200 Subject: [PATCH 54/65] Refactored to kotlin... --- .../ui/fragment/CategoryBricksFactory.java | 868 ------------------ 1 file changed, 868 deletions(-) delete mode 100644 catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java deleted file mode 100644 index 50daa43cff1..00000000000 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.java +++ /dev/null @@ -1,868 +0,0 @@ -/* - * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2018 The Catrobat Team - * () - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * An additional term exception under section 7 of the GNU Affero - * General Public License, version 3, is available at - * http://developer.catrobat.org/license_additional_term - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package org.catrobat.catroid.ui.fragment; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; - -import com.parrot.freeflight.drone.DroneProxy.ARDRONE_LED_ANIMATION; - -import org.catrobat.catroid.BuildConfig; -import org.catrobat.catroid.ProjectManager; -import org.catrobat.catroid.R; -import org.catrobat.catroid.common.BrickValues; -import org.catrobat.catroid.content.BroadcastScript; -import org.catrobat.catroid.content.Project; -import org.catrobat.catroid.content.RaspiInterruptScript; -import org.catrobat.catroid.content.Scene; -import org.catrobat.catroid.content.Script; -import org.catrobat.catroid.content.Sprite; -import org.catrobat.catroid.content.WhenBounceOffScript; -import org.catrobat.catroid.content.WhenConditionScript; -import org.catrobat.catroid.content.WhenGamepadButtonScript; -import org.catrobat.catroid.content.bricks.AddItemToUserListBrick; -import org.catrobat.catroid.content.bricks.ArduinoSendDigitalValueBrick; -import org.catrobat.catroid.content.bricks.ArduinoSendPWMValueBrick; -import org.catrobat.catroid.content.bricks.AskBrick; -import org.catrobat.catroid.content.bricks.AskSpeechBrick; -import org.catrobat.catroid.content.bricks.AssertEqualsBrick; -import org.catrobat.catroid.content.bricks.BackgroundRequestBrick; -import org.catrobat.catroid.content.bricks.Brick; -import org.catrobat.catroid.content.bricks.BroadcastBrick; -import org.catrobat.catroid.content.bricks.BroadcastReceiverBrick; -import org.catrobat.catroid.content.bricks.BroadcastWaitBrick; -import org.catrobat.catroid.content.bricks.CameraBrick; -import org.catrobat.catroid.content.bricks.ChangeBrightnessByNBrick; -import org.catrobat.catroid.content.bricks.ChangeColorByNBrick; -import org.catrobat.catroid.content.bricks.ChangeSizeByNBrick; -import org.catrobat.catroid.content.bricks.ChangeTransparencyByNBrick; -import org.catrobat.catroid.content.bricks.ChangeVariableBrick; -import org.catrobat.catroid.content.bricks.ChangeVolumeByNBrick; -import org.catrobat.catroid.content.bricks.ChangeXByNBrick; -import org.catrobat.catroid.content.bricks.ChangeYByNBrick; -import org.catrobat.catroid.content.bricks.ChooseCameraBrick; -import org.catrobat.catroid.content.bricks.ClearBackgroundBrick; -import org.catrobat.catroid.content.bricks.ClearGraphicEffectBrick; -import org.catrobat.catroid.content.bricks.ClearUserListBrick; -import org.catrobat.catroid.content.bricks.CloneBrick; -import org.catrobat.catroid.content.bricks.ComeToFrontBrick; -import org.catrobat.catroid.content.bricks.DeleteItemOfUserListBrick; -import org.catrobat.catroid.content.bricks.DeleteThisCloneBrick; -import org.catrobat.catroid.content.bricks.DroneEmergencyBrick; -import org.catrobat.catroid.content.bricks.DroneFlipBrick; -import org.catrobat.catroid.content.bricks.DroneMoveBackwardBrick; -import org.catrobat.catroid.content.bricks.DroneMoveDownBrick; -import org.catrobat.catroid.content.bricks.DroneMoveForwardBrick; -import org.catrobat.catroid.content.bricks.DroneMoveLeftBrick; -import org.catrobat.catroid.content.bricks.DroneMoveRightBrick; -import org.catrobat.catroid.content.bricks.DroneMoveUpBrick; -import org.catrobat.catroid.content.bricks.DronePlayLedAnimationBrick; -import org.catrobat.catroid.content.bricks.DroneSwitchCameraBrick; -import org.catrobat.catroid.content.bricks.DroneTakeOffLandBrick; -import org.catrobat.catroid.content.bricks.DroneTurnLeftBrick; -import org.catrobat.catroid.content.bricks.DroneTurnRightBrick; -import org.catrobat.catroid.content.bricks.FinishStageBrick; -import org.catrobat.catroid.content.bricks.FlashBrick; -import org.catrobat.catroid.content.bricks.ForeverBrick; -import org.catrobat.catroid.content.bricks.GlideToBrick; -import org.catrobat.catroid.content.bricks.GoNStepsBackBrick; -import org.catrobat.catroid.content.bricks.GoToBrick; -import org.catrobat.catroid.content.bricks.HideBrick; -import org.catrobat.catroid.content.bricks.HideTextBrick; -import org.catrobat.catroid.content.bricks.IfLogicBeginBrick; -import org.catrobat.catroid.content.bricks.IfOnEdgeBounceBrick; -import org.catrobat.catroid.content.bricks.IfThenLogicBeginBrick; -import org.catrobat.catroid.content.bricks.InsertItemIntoUserListBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoAnimationsBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoJumpHighBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoJumpLongBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoMoveBackwardBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoMoveForwardBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoNoSoundBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoRotateLeftBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoRotateRightBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoSoundBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoTakingPictureBrick; -import org.catrobat.catroid.content.bricks.JumpingSumoTurnBrick; -import org.catrobat.catroid.content.bricks.LegoEv3MotorMoveBrick; -import org.catrobat.catroid.content.bricks.LegoEv3MotorStopBrick; -import org.catrobat.catroid.content.bricks.LegoEv3MotorTurnAngleBrick; -import org.catrobat.catroid.content.bricks.LegoEv3PlayToneBrick; -import org.catrobat.catroid.content.bricks.LegoEv3SetLedBrick; -import org.catrobat.catroid.content.bricks.LegoNxtMotorMoveBrick; -import org.catrobat.catroid.content.bricks.LegoNxtMotorStopBrick; -import org.catrobat.catroid.content.bricks.LegoNxtMotorTurnAngleBrick; -import org.catrobat.catroid.content.bricks.LegoNxtPlayToneBrick; -import org.catrobat.catroid.content.bricks.LookRequestBrick; -import org.catrobat.catroid.content.bricks.MoveNStepsBrick; -import org.catrobat.catroid.content.bricks.NextLookBrick; -import org.catrobat.catroid.content.bricks.NoteBrick; -import org.catrobat.catroid.content.bricks.PenDownBrick; -import org.catrobat.catroid.content.bricks.PenUpBrick; -import org.catrobat.catroid.content.bricks.PhiroIfLogicBeginBrick; -import org.catrobat.catroid.content.bricks.PhiroMotorMoveBackwardBrick; -import org.catrobat.catroid.content.bricks.PhiroMotorMoveForwardBrick; -import org.catrobat.catroid.content.bricks.PhiroMotorStopBrick; -import org.catrobat.catroid.content.bricks.PhiroPlayToneBrick; -import org.catrobat.catroid.content.bricks.PhiroRGBLightBrick; -import org.catrobat.catroid.content.bricks.PlaceAtBrick; -import org.catrobat.catroid.content.bricks.PlaySoundAndWaitBrick; -import org.catrobat.catroid.content.bricks.PlaySoundBrick; -import org.catrobat.catroid.content.bricks.PointInDirectionBrick; -import org.catrobat.catroid.content.bricks.PointToBrick; -import org.catrobat.catroid.content.bricks.PreviousLookBrick; -import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick; -import org.catrobat.catroid.content.bricks.RaspiPwmBrick; -import org.catrobat.catroid.content.bricks.RaspiSendDigitalValueBrick; -import org.catrobat.catroid.content.bricks.ReadListFromDeviceBrick; -import org.catrobat.catroid.content.bricks.ReadVariableFromDeviceBrick; -import org.catrobat.catroid.content.bricks.RepeatBrick; -import org.catrobat.catroid.content.bricks.RepeatUntilBrick; -import org.catrobat.catroid.content.bricks.ReplaceItemInUserListBrick; -import org.catrobat.catroid.content.bricks.RunningStitchBrick; -import org.catrobat.catroid.content.bricks.SayBubbleBrick; -import org.catrobat.catroid.content.bricks.SayForBubbleBrick; -import org.catrobat.catroid.content.bricks.SceneStartBrick; -import org.catrobat.catroid.content.bricks.SceneTransitionBrick; -import org.catrobat.catroid.content.bricks.SetBackgroundAndWaitBrick; -import org.catrobat.catroid.content.bricks.SetBackgroundBrick; -import org.catrobat.catroid.content.bricks.SetBackgroundByIndexAndWaitBrick; -import org.catrobat.catroid.content.bricks.SetBackgroundByIndexBrick; -import org.catrobat.catroid.content.bricks.SetBounceBrick; -import org.catrobat.catroid.content.bricks.SetBrightnessBrick; -import org.catrobat.catroid.content.bricks.SetColorBrick; -import org.catrobat.catroid.content.bricks.SetFrictionBrick; -import org.catrobat.catroid.content.bricks.SetGravityBrick; -import org.catrobat.catroid.content.bricks.SetLookBrick; -import org.catrobat.catroid.content.bricks.SetLookByIndexBrick; -import org.catrobat.catroid.content.bricks.SetMassBrick; -import org.catrobat.catroid.content.bricks.SetNfcTagBrick; -import org.catrobat.catroid.content.bricks.SetPenColorBrick; -import org.catrobat.catroid.content.bricks.SetPenSizeBrick; -import org.catrobat.catroid.content.bricks.SetPhysicsObjectTypeBrick; -import org.catrobat.catroid.content.bricks.SetRotationStyleBrick; -import org.catrobat.catroid.content.bricks.SetSizeToBrick; -import org.catrobat.catroid.content.bricks.SetTransparencyBrick; -import org.catrobat.catroid.content.bricks.SetVariableBrick; -import org.catrobat.catroid.content.bricks.SetVelocityBrick; -import org.catrobat.catroid.content.bricks.SetVolumeToBrick; -import org.catrobat.catroid.content.bricks.SetXBrick; -import org.catrobat.catroid.content.bricks.SetYBrick; -import org.catrobat.catroid.content.bricks.ShowBrick; -import org.catrobat.catroid.content.bricks.ShowTextBrick; -import org.catrobat.catroid.content.bricks.ShowTextColorSizeAlignmentBrick; -import org.catrobat.catroid.content.bricks.SpeakAndWaitBrick; -import org.catrobat.catroid.content.bricks.SpeakBrick; -import org.catrobat.catroid.content.bricks.StampBrick; -import org.catrobat.catroid.content.bricks.StitchBrick; -import org.catrobat.catroid.content.bricks.StopAllSoundsBrick; -import org.catrobat.catroid.content.bricks.StopRunningStitchBrick; -import org.catrobat.catroid.content.bricks.StopScriptBrick; -import org.catrobat.catroid.content.bricks.StoreCSVIntoUserListBrick; -import org.catrobat.catroid.content.bricks.TapAtBrick; -import org.catrobat.catroid.content.bricks.ThinkBubbleBrick; -import org.catrobat.catroid.content.bricks.ThinkForBubbleBrick; -import org.catrobat.catroid.content.bricks.TripleStitchBrick; -import org.catrobat.catroid.content.bricks.TurnLeftBrick; -import org.catrobat.catroid.content.bricks.TurnLeftSpeedBrick; -import org.catrobat.catroid.content.bricks.TurnRightBrick; -import org.catrobat.catroid.content.bricks.TurnRightSpeedBrick; -import org.catrobat.catroid.content.bricks.VibrationBrick; -import org.catrobat.catroid.content.bricks.WaitBrick; -import org.catrobat.catroid.content.bricks.WaitTillIdleBrick; -import org.catrobat.catroid.content.bricks.WaitUntilBrick; -import org.catrobat.catroid.content.bricks.WebRequestBrick; -import org.catrobat.catroid.content.bricks.WhenBackgroundChangesBrick; -import org.catrobat.catroid.content.bricks.WhenBounceOffBrick; -import org.catrobat.catroid.content.bricks.WhenBrick; -import org.catrobat.catroid.content.bricks.WhenClonedBrick; -import org.catrobat.catroid.content.bricks.WhenConditionBrick; -import org.catrobat.catroid.content.bricks.WhenGamepadButtonBrick; -import org.catrobat.catroid.content.bricks.WhenNfcBrick; -import org.catrobat.catroid.content.bricks.WhenRaspiPinChangedBrick; -import org.catrobat.catroid.content.bricks.WhenStartedBrick; -import org.catrobat.catroid.content.bricks.WhenTouchDownBrick; -import org.catrobat.catroid.content.bricks.WriteListOnDeviceBrick; -import org.catrobat.catroid.content.bricks.WriteVariableOnDeviceBrick; -import org.catrobat.catroid.content.bricks.ZigZagStitchBrick; -import org.catrobat.catroid.formulaeditor.Formula; -import org.catrobat.catroid.formulaeditor.FormulaElement; -import org.catrobat.catroid.formulaeditor.Operators; -import org.catrobat.catroid.formulaeditor.Sensors; -import org.catrobat.catroid.ui.settingsfragments.SettingsFragment; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -import static org.catrobat.catroid.formulaeditor.FormulaElement.ElementType.NUMBER; -import static org.catrobat.catroid.formulaeditor.FormulaElement.ElementType.OPERATOR; - -public class CategoryBricksFactory { - - public List getBricks(String category, boolean isBackgroundSprite, Context context) { - - if (category.equals(context.getString(R.string.category_event))) { - return setupEventCategoryList(context, isBackgroundSprite); - } - if (category.equals(context.getString(R.string.category_control))) { - return setupControlCategoryList(context); - } - if (category.equals(context.getString(R.string.category_motion))) { - return setupMotionCategoryList(context, isBackgroundSprite); - } - if (category.equals(context.getString(R.string.category_sound))) { - return setupSoundCategoryList(context); - } - if (category.equals(context.getString(R.string.category_looks))) { - return setupLooksCategoryList(context, isBackgroundSprite); - } - if (category.equals(context.getString(R.string.category_pen))) { - return setupPenCategoryList(isBackgroundSprite); - } - if (category.equals(context.getString(R.string.category_user_bricks))) { - return setupUserBricksCategoryList(); - } - if (category.equals(context.getString(R.string.category_data))) { - return setupDataCategoryList(context, isBackgroundSprite); - } - if (category.equals(context.getString(R.string.category_lego_nxt))) { - return setupLegoNxtCategoryList(); - } - if (category.equals(context.getString(R.string.category_lego_ev3))) { - return setupLegoEv3CategoryList(); - } - if (category.equals(context.getString(R.string.category_arduino))) { - return setupArduinoCategoryList(); - } - if (category.equals(context.getString(R.string.category_drone))) { - return setupDroneCategoryList(); - } - if (category.equals(context.getString(R.string.category_jumping_sumo))) { - return setupJumpingSumoCategoryList(); - } - if (category.equals(context.getString(R.string.category_phiro))) { - return setupPhiroProCategoryList(); - } - if (category.equals(context.getString(R.string.category_cast))) { - return setupChromecastCategoryList(context); - } - if (category.equals(context.getString(R.string.category_raspi))) { - return setupRaspiCategoryList(); - } - if (category.equals(context.getString(R.string.category_embroidery))) { - return setupEmbroideryCategoryList(); - } - if (category.equals(context.getString(R.string.category_assertions))) { - return setupAssertionsCategoryList(context); - } - - return Collections.emptyList(); - } - - protected List setupEventCategoryList(Context context, boolean isBackgroundSprite) { - FormulaElement defaultIf = new FormulaElement(OPERATOR, Operators.SMALLER_THAN.toString(), null); - defaultIf.setLeftChild(new FormulaElement(NUMBER, "1", null)); - defaultIf.setRightChild(new FormulaElement(NUMBER, "2", null)); - - List eventBrickList = new ArrayList<>(); - eventBrickList.add(new WhenStartedBrick()); - eventBrickList.add(new WhenBrick()); - eventBrickList.add(new WhenTouchDownBrick()); - - Project currentProject = ProjectManager.getInstance().getCurrentProject(); - List broadcastMessages = currentProject.getBroadcastMessageContainer().getBroadcastMessages(); - String broadcastMessage = context.getString(R.string.brick_broadcast_default_value); - if (broadcastMessages.size() > 0) { - broadcastMessage = broadcastMessages.get(0); - } - eventBrickList.add(new BroadcastReceiverBrick(new BroadcastScript(broadcastMessage))); - eventBrickList.add(new BroadcastBrick(broadcastMessage)); - eventBrickList.add(new BroadcastWaitBrick(broadcastMessage)); - eventBrickList.add(new WhenConditionBrick(new WhenConditionScript(new Formula(defaultIf)))); - if (!isBackgroundSprite) { - eventBrickList.add(new WhenBounceOffBrick(new WhenBounceOffScript(null))); - } - eventBrickList.add(new WhenBackgroundChangesBrick()); - eventBrickList.add(new WhenClonedBrick()); - - if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { - eventBrickList.add(new WhenNfcBrick()); - } - return eventBrickList; - } - - protected List setupControlCategoryList(Context context) { - FormulaElement ifConditionFormulaElement = new FormulaElement(OPERATOR, Operators.SMALLER_THAN.toString(), null); - ifConditionFormulaElement.setLeftChild(new FormulaElement(NUMBER, "1", null)); - ifConditionFormulaElement.setRightChild(new FormulaElement(NUMBER, "2", null)); - - Formula ifConditionFormula = new Formula(ifConditionFormulaElement); - - List controlBrickList = new ArrayList<>(); - controlBrickList.add(new WaitBrick(BrickValues.WAIT)); - controlBrickList.add(new NoteBrick(context.getString(R.string.brick_note_default_value))); - controlBrickList.add(new ForeverBrick()); - controlBrickList.add(new IfLogicBeginBrick(ifConditionFormula)); - controlBrickList.add(new IfThenLogicBeginBrick(ifConditionFormula)); - controlBrickList.add(new WaitUntilBrick(ifConditionFormula)); - controlBrickList.add(new RepeatBrick(new Formula(BrickValues.REPEAT))); - controlBrickList.add(new RepeatUntilBrick(ifConditionFormula)); - controlBrickList.add(new SceneTransitionBrick(null)); - controlBrickList.add(new SceneStartBrick(null)); - - if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { - controlBrickList.add(new PhiroIfLogicBeginBrick()); - } - - controlBrickList.add(new StopScriptBrick(BrickValues.STOP_THIS_SCRIPT)); - - controlBrickList.add(new CloneBrick()); - controlBrickList.add(new DeleteThisCloneBrick()); - controlBrickList.add(new WhenClonedBrick()); - if (SettingsFragment.isNfcSharedPreferenceEnabled(context)) { - controlBrickList.add(new SetNfcTagBrick(context.getString(R.string.brick_set_nfc_tag_default_value))); - } - - return controlBrickList; - } - - private List setupUserBricksCategoryList() { - Sprite currentSprite = ProjectManager.getInstance().getCurrentSprite(); - if (currentSprite != null) { - return currentSprite.getUserDefinedBrickList(); - } - return new ArrayList<>(); - } - - private List setupChromecastCategoryList(Context context) { - List chromecastBrickList = new ArrayList(); - chromecastBrickList.add(new WhenGamepadButtonBrick(new WhenGamepadButtonScript( - context.getString(R.string.cast_gamepad_A)))); - - return chromecastBrickList; - } - - protected List setupMotionCategoryList(Context context, boolean isBackgroundSprite) { - List motionBrickList = new ArrayList<>(); - motionBrickList.add(new PlaceAtBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION)); - motionBrickList.add(new SetXBrick(new Formula(BrickValues.X_POSITION))); - motionBrickList.add(new SetYBrick(BrickValues.Y_POSITION)); - motionBrickList.add(new ChangeXByNBrick(BrickValues.CHANGE_X_BY)); - motionBrickList.add(new ChangeYByNBrick(BrickValues.CHANGE_Y_BY)); - motionBrickList.add(new GoToBrick(null)); - - if (!isBackgroundSprite) { - motionBrickList.add(new IfOnEdgeBounceBrick()); - } - - motionBrickList.add(new MoveNStepsBrick(BrickValues.MOVE_STEPS)); - motionBrickList.add(new TurnLeftBrick(BrickValues.TURN_DEGREES)); - motionBrickList.add(new TurnRightBrick(BrickValues.TURN_DEGREES)); - motionBrickList.add(new PointInDirectionBrick(90)); - motionBrickList.add(new PointToBrick(null)); - motionBrickList.add(new SetRotationStyleBrick()); - motionBrickList.add(new GlideToBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION, - BrickValues.GLIDE_SECONDS)); - - if (!isBackgroundSprite) { - motionBrickList.add(new GoNStepsBackBrick(BrickValues.GO_BACK)); - motionBrickList.add(new ComeToFrontBrick()); - } - - motionBrickList.add(new VibrationBrick(BrickValues.VIBRATE_SECONDS)); - - motionBrickList.add(new SetPhysicsObjectTypeBrick(BrickValues.PHYSIC_TYPE)); - if (!isBackgroundSprite) { - motionBrickList.add(new WhenBounceOffBrick(new WhenBounceOffScript(null))); - } - motionBrickList.add(new SetVelocityBrick(BrickValues.PHYSIC_VELOCITY)); - motionBrickList.add(new TurnLeftSpeedBrick(BrickValues.PHYSIC_TURN_DEGREES)); - motionBrickList.add(new TurnRightSpeedBrick(BrickValues.PHYSIC_TURN_DEGREES)); - motionBrickList.add(new SetGravityBrick(BrickValues.PHYSIC_GRAVITY)); - motionBrickList.add(new SetMassBrick(BrickValues.PHYSIC_MASS)); - motionBrickList.add(new SetBounceBrick(BrickValues.PHYSIC_BOUNCE_FACTOR * 100)); - motionBrickList.add(new SetFrictionBrick(BrickValues.PHYSIC_FRICTION * 100)); - - if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { - motionBrickList.add(new PhiroMotorMoveForwardBrick(PhiroMotorMoveForwardBrick.Motor.MOTOR_LEFT, - BrickValues.PHIRO_SPEED)); - motionBrickList.add(new PhiroMotorMoveBackwardBrick(PhiroMotorMoveBackwardBrick.Motor.MOTOR_LEFT, - BrickValues.PHIRO_SPEED)); - motionBrickList.add(new PhiroMotorStopBrick(PhiroMotorStopBrick.Motor.MOTOR_BOTH)); - } - - return motionBrickList; - } - - protected List setupSoundCategoryList(Context context) { - List soundBrickList = new ArrayList<>(); - soundBrickList.add(new PlaySoundBrick()); - soundBrickList.add(new PlaySoundAndWaitBrick()); - soundBrickList.add(new StopAllSoundsBrick()); - soundBrickList.add(new SetVolumeToBrick(BrickValues.SET_VOLUME_TO)); - - soundBrickList.add(new ChangeVolumeByNBrick(new Formula(BrickValues.CHANGE_VOLUME_BY))); - - soundBrickList.add(new SpeakBrick(context.getString(R.string.brick_speak_default_value))); - soundBrickList.add(new SpeakAndWaitBrick(context.getString(R.string.brick_speak_default_value))); - - if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { - soundBrickList.add(new PhiroPlayToneBrick(PhiroPlayToneBrick.Tone.DO, - BrickValues.PHIRO_DURATION)); - } - soundBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); - - return soundBrickList; - } - - protected List setupLooksCategoryList(Context context, boolean isBackgroundSprite) { - List looksBrickList = new ArrayList<>(); - - if (!isBackgroundSprite) { - looksBrickList.add(new SetLookBrick()); - looksBrickList.add(new SetLookByIndexBrick(BrickValues.SET_LOOK_BY_INDEX)); - } - looksBrickList.add(new NextLookBrick()); - looksBrickList.add(new PreviousLookBrick()); - looksBrickList.add(new SetSizeToBrick(BrickValues.SET_SIZE_TO)); - looksBrickList.add(new ChangeSizeByNBrick(BrickValues.CHANGE_SIZE_BY)); - looksBrickList.add(new HideBrick()); - looksBrickList.add(new ShowBrick()); - looksBrickList.add(new AskBrick(context.getString(R.string.brick_ask_default_question))); - if (!isBackgroundSprite) { - looksBrickList.add(new SayBubbleBrick(context.getString(R.string.brick_say_bubble_default_value))); - looksBrickList.add(new SayForBubbleBrick(context.getString(R.string.brick_say_bubble_default_value), 1.0f)); - looksBrickList.add(new ThinkBubbleBrick(context.getString(R.string.brick_think_bubble_default_value))); - looksBrickList.add(new ThinkForBubbleBrick(context.getString(R.string.brick_think_bubble_default_value), 1.0f)); - } - looksBrickList.add(new ShowTextBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION)); - looksBrickList.add(new ShowTextColorSizeAlignmentBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION, - BrickValues.RELATIVE_SIZE_IN_PERCENT, BrickValues.SHOW_VARIABLE_COLOR)); - looksBrickList.add(new SetTransparencyBrick(BrickValues.SET_TRANSPARENCY)); - looksBrickList.add(new ChangeTransparencyByNBrick(BrickValues.CHANGE_TRANSPARENCY_EFFECT)); - looksBrickList.add(new SetBrightnessBrick(BrickValues.SET_BRIGHTNESS_TO)); - looksBrickList.add(new ChangeBrightnessByNBrick(BrickValues.CHANGE_BRITHNESS_BY)); - looksBrickList.add(new SetColorBrick(BrickValues.SET_COLOR_TO)); - looksBrickList.add(new ChangeColorByNBrick(BrickValues.CHANGE_COLOR_BY)); - looksBrickList.add(new ClearGraphicEffectBrick()); - looksBrickList.add(new WhenBackgroundChangesBrick()); - looksBrickList.add(new SetBackgroundBrick()); - looksBrickList.add(new SetBackgroundByIndexBrick(BrickValues.SET_LOOK_BY_INDEX)); - looksBrickList.add(new SetBackgroundAndWaitBrick()); - looksBrickList.add(new SetBackgroundByIndexAndWaitBrick(BrickValues.SET_LOOK_BY_INDEX)); - - if (!ProjectManager.getInstance().getCurrentProject().isCastProject()) { - looksBrickList.add(new CameraBrick()); - looksBrickList.add(new ChooseCameraBrick()); - looksBrickList.add(new FlashBrick()); - } - - if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { - if (!isBackgroundSprite) { - looksBrickList.add(new LookRequestBrick(context.getString(R.string.brick_look_request_default_value))); - } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { - looksBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_landscape))); - } else { - looksBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_portrait))); - } - } - - if (SettingsFragment.isPhiroSharedPreferenceEnabled(context)) { - looksBrickList.add(new PhiroRGBLightBrick(PhiroRGBLightBrick.Eye.BOTH, - BrickValues.PHIRO_VALUE_RED, BrickValues.PHIRO_VALUE_GREEN, BrickValues.PHIRO_VALUE_BLUE)); - } - - return looksBrickList; - } - - private List setupPenCategoryList(boolean isBackgroundSprite) { - List penBrickList = new ArrayList<>(); - - if (!isBackgroundSprite) { - penBrickList.add(new PenDownBrick()); - penBrickList.add(new PenUpBrick()); - penBrickList.add(new SetPenSizeBrick(BrickValues.PEN_SIZE)); - penBrickList.add(new SetPenColorBrick(0, 0, 255)); - penBrickList.add(new StampBrick()); - } - - penBrickList.add(new ClearBackgroundBrick()); - return penBrickList; - } - - protected List setupDataCategoryList(Context context, boolean isBackgroundSprite) { - List dataBrickList = new ArrayList<>(); - dataBrickList.add(new SetVariableBrick(BrickValues.SET_VARIABLE)); - dataBrickList.add(new ChangeVariableBrick(BrickValues.CHANGE_VARIABLE)); - dataBrickList.add(new ShowTextBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION)); - dataBrickList.add(new ShowTextColorSizeAlignmentBrick(BrickValues.X_POSITION, BrickValues.Y_POSITION, - BrickValues.RELATIVE_SIZE_IN_PERCENT, BrickValues.SHOW_VARIABLE_COLOR)); - dataBrickList.add(new HideTextBrick()); - dataBrickList.add(new WriteVariableOnDeviceBrick()); - dataBrickList.add(new ReadVariableFromDeviceBrick()); - dataBrickList.add(new AddItemToUserListBrick(BrickValues.ADD_ITEM_TO_USERLIST)); - dataBrickList.add(new DeleteItemOfUserListBrick(BrickValues.DELETE_ITEM_OF_USERLIST)); - dataBrickList.add(new ClearUserListBrick()); - dataBrickList.add(new InsertItemIntoUserListBrick(BrickValues.INSERT_ITEM_INTO_USERLIST_VALUE, - BrickValues.INSERT_ITEM_INTO_USERLIST_INDEX)); - dataBrickList.add(new ReplaceItemInUserListBrick(BrickValues.REPLACE_ITEM_IN_USERLIST_VALUE, - BrickValues.REPLACE_ITEM_IN_USERLIST_INDEX)); - dataBrickList.add(new WriteListOnDeviceBrick()); - dataBrickList.add(new ReadListFromDeviceBrick()); - dataBrickList.add(new StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, - context.getString(R.string.brick_store_csv_into_userlist_data))); - - if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { - dataBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); - if (!isBackgroundSprite) { - dataBrickList.add(new LookRequestBrick(context.getString(R.string.brick_look_request_default_value))); - } else if (ProjectManager.getInstance().getCurrentProject().getXmlHeader().islandscapeMode()) { - dataBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_landscape))); - } else { - dataBrickList.add(new BackgroundRequestBrick(context.getString(R.string.brick_background_request_default_value_portrait))); - } - } - - dataBrickList.add(new AskBrick(context.getString(R.string.brick_ask_default_question))); - dataBrickList.add(new AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))); - - return dataBrickList; - } - - private List setupLegoNxtCategoryList() { - List legoNXTBrickList = new ArrayList<>(); - legoNXTBrickList.add(new LegoNxtMotorTurnAngleBrick(LegoNxtMotorTurnAngleBrick.Motor.MOTOR_A, - BrickValues.LEGO_ANGLE)); - legoNXTBrickList.add(new LegoNxtMotorStopBrick(LegoNxtMotorStopBrick.Motor.MOTOR_A)); - legoNXTBrickList.add(new LegoNxtMotorMoveBrick(LegoNxtMotorMoveBrick.Motor.MOTOR_A, - BrickValues.LEGO_SPEED)); - legoNXTBrickList.add(new LegoNxtPlayToneBrick(BrickValues.LEGO_FREQUENCY, BrickValues.LEGO_DURATION)); - - return legoNXTBrickList; - } - - private List setupLegoEv3CategoryList() { - List legoEV3BrickList = new ArrayList(); - legoEV3BrickList.add(new LegoEv3MotorTurnAngleBrick(LegoEv3MotorTurnAngleBrick.Motor.MOTOR_A, - BrickValues.LEGO_ANGLE)); - legoEV3BrickList.add(new LegoEv3MotorMoveBrick(LegoEv3MotorMoveBrick.Motor.MOTOR_A, - BrickValues.LEGO_SPEED)); - legoEV3BrickList.add(new LegoEv3MotorStopBrick(LegoEv3MotorStopBrick.Motor.MOTOR_A)); - legoEV3BrickList.add(new LegoEv3PlayToneBrick(BrickValues.LEGO_FREQUENCY, - BrickValues.LEGO_DURATION, BrickValues.LEGO_VOLUME)); - legoEV3BrickList.add(new LegoEv3SetLedBrick(LegoEv3SetLedBrick.LedStatus.LED_GREEN)); - - return legoEV3BrickList; - } - - private List setupDroneCategoryList() { - List droneBrickList = new ArrayList<>(); - droneBrickList.add(new DroneTakeOffLandBrick()); - droneBrickList.add(new DroneEmergencyBrick()); - droneBrickList.add(new DroneMoveUpBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneMoveDownBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneMoveLeftBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneMoveRightBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneMoveForwardBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneMoveBackwardBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneTurnLeftBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneTurnRightBrick(BrickValues.DRONE_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.DRONE_MOVE_BRICK_DEFAULT_POWER_PERCENT)); - droneBrickList.add(new DroneFlipBrick()); - droneBrickList.add(new DronePlayLedAnimationBrick(ARDRONE_LED_ANIMATION.ARDRONE_LED_ANIMATION_BLINK_GREEN_RED)); - droneBrickList.add(new DroneSwitchCameraBrick()); - - return droneBrickList; - } - - private List setupJumpingSumoCategoryList() { - List jumpingSumoBrickList = new ArrayList<>(); - jumpingSumoBrickList.add(new JumpingSumoMoveForwardBrick( - BrickValues.JUMPING_SUMO_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues.JUMPING_SUMO_MOVE_BRICK_DEFAULT_MOVE_POWER_PERCENT)); - jumpingSumoBrickList.add(new JumpingSumoMoveBackwardBrick( - BrickValues.JUMPING_SUMO_MOVE_BRICK_DEFAULT_TIME_MILLISECONDS, - BrickValues - .JUMPING_SUMO_MOVE_BRICK_DEFAULT_MOVE_POWER_PERCENT)); - jumpingSumoBrickList.add(new JumpingSumoAnimationsBrick(JumpingSumoAnimationsBrick.Animation.SPIN)); - jumpingSumoBrickList.add(new JumpingSumoSoundBrick(JumpingSumoSoundBrick.Sounds.DEFAULT, - BrickValues.JUMPING_SUMO_SOUND_BRICK_DEFAULT_VOLUME_PERCENT)); - jumpingSumoBrickList.add(new JumpingSumoNoSoundBrick()); - jumpingSumoBrickList.add(new JumpingSumoJumpLongBrick()); - jumpingSumoBrickList.add(new JumpingSumoJumpHighBrick()); - jumpingSumoBrickList.add(new JumpingSumoRotateLeftBrick(BrickValues.JUMPING_SUMO_ROTATE_DEFAULT_DEGREE)); - jumpingSumoBrickList.add(new JumpingSumoRotateRightBrick(BrickValues.JUMPING_SUMO_ROTATE_DEFAULT_DEGREE)); - jumpingSumoBrickList.add(new JumpingSumoTurnBrick()); - jumpingSumoBrickList.add(new JumpingSumoTakingPictureBrick()); - - return jumpingSumoBrickList; - } - - private List setupPhiroProCategoryList() { - List phiroProBrickList = new ArrayList<>(); - phiroProBrickList.add(new PhiroMotorMoveForwardBrick(PhiroMotorMoveForwardBrick.Motor.MOTOR_LEFT, - BrickValues.PHIRO_SPEED)); - phiroProBrickList.add(new PhiroMotorMoveBackwardBrick(PhiroMotorMoveBackwardBrick.Motor.MOTOR_LEFT, - BrickValues.PHIRO_SPEED)); - phiroProBrickList.add(new PhiroMotorStopBrick(PhiroMotorStopBrick.Motor.MOTOR_BOTH)); - phiroProBrickList.add(new PhiroPlayToneBrick(PhiroPlayToneBrick.Tone.DO, - BrickValues.PHIRO_DURATION)); - phiroProBrickList.add(new PhiroRGBLightBrick(PhiroRGBLightBrick.Eye.BOTH, BrickValues.PHIRO_VALUE_RED, - BrickValues.PHIRO_VALUE_GREEN, BrickValues.PHIRO_VALUE_BLUE)); - phiroProBrickList.add(new PhiroIfLogicBeginBrick()); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_FRONT_LEFT)); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_FRONT_RIGHT)); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_SIDE_LEFT)); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_SIDE_RIGHT)); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_BOTTOM_LEFT)); - phiroProBrickList.add(new SetVariableBrick(Sensors.PHIRO_BOTTOM_RIGHT)); - - return phiroProBrickList; - } - - private List setupArduinoCategoryList() { - List arduinoBrickList = new ArrayList<>(); - arduinoBrickList.add(new ArduinoSendDigitalValueBrick(BrickValues.ARDUINO_DIGITAL_INITIAL_PIN_NUMBER, - BrickValues.ARDUINO_DIGITAL_INITIAL_PIN_VALUE)); - arduinoBrickList.add(new ArduinoSendPWMValueBrick(BrickValues.ARDUINO_PWM_INITIAL_PIN_NUMBER, - BrickValues.ARDUINO_PWM_INITIAL_PIN_VALUE)); - - return arduinoBrickList; - } - - private List setupRaspiCategoryList() { - RaspiInterruptScript defaultScript = new RaspiInterruptScript("3", "pressed"); - - List raspiBrickList = new ArrayList<>(); - raspiBrickList.add(new WhenRaspiPinChangedBrick(defaultScript)); - raspiBrickList.add(new RaspiIfLogicBeginBrick(new Formula(BrickValues.RASPI_DIGITAL_INITIAL_PIN_NUMBER))); - raspiBrickList.add(new RaspiSendDigitalValueBrick(BrickValues.RASPI_DIGITAL_INITIAL_PIN_NUMBER, - BrickValues.RASPI_DIGITAL_INITIAL_PIN_VALUE)); - raspiBrickList.add(new RaspiPwmBrick(BrickValues.RASPI_DIGITAL_INITIAL_PIN_NUMBER, - BrickValues.RASPI_PWM_INITIAL_FREQUENCY, BrickValues.RASPI_PWM_INITIAL_PERCENTAGE)); - - return raspiBrickList; - } - - private List setupEmbroideryCategoryList() { - List embroideryBrickList = new ArrayList<>(); - embroideryBrickList.add(new StitchBrick()); - embroideryBrickList.add(new RunningStitchBrick(new Formula(BrickValues.STITCH_LENGTH))); - embroideryBrickList.add(new ZigZagStitchBrick(new Formula(BrickValues.ZIGZAG_STITCH_LENGTH), - new Formula(BrickValues.ZIGZAG_STITCH_WIDTH))); - embroideryBrickList.add(new TripleStitchBrick(new Formula(BrickValues.STITCH_LENGTH))); - embroideryBrickList.add(new StopRunningStitchBrick()); - return embroideryBrickList; - } - - private List setupAssertionsCategoryList(Context context) { - List assertionsBrickList = new ArrayList<>(); - - AssertEqualsBrick assertEqualsBrick = new AssertEqualsBrick(); - assertionsBrickList.add(assertEqualsBrick); - - WaitTillIdleBrick waitTillIdleBrick = new WaitTillIdleBrick(); - assertionsBrickList.add(waitTillIdleBrick); - - assertionsBrickList.add(new TapAtBrick()); - - assertionsBrickList.add(new FinishStageBrick()); - - for (Scene scene : ProjectManager.getInstance().getCurrentProject().getSceneList()) { - for (Sprite sprite : scene.getSpriteList()) { - for (Script script : sprite.getScriptList()) { - for (Brick brick : script.getBrickList()) { - if (brick instanceof AssertEqualsBrick) { - assertionsBrickList.remove(assertEqualsBrick); - } - } - } - } - } - - assertionsBrickList.add(new StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, - context.getString(R.string.brick_store_csv_into_userlist_data))); - - if (BuildConfig.FEATURE_WEBREQUEST_BRICK_ENABLED) { - assertionsBrickList.add(new WebRequestBrick(context.getString(R.string.brick_web_request_default_value))); - } - - return assertionsBrickList; - } - - public String getBrickCategory(Brick brick, boolean isBackgroundSprite, Context context) { - List categoryBricks; - categoryBricks = setupControlCategoryList(context); - - Resources res = context.getResources(); - Configuration config = res.getConfiguration(); - Locale savedLocale = config.locale; - config.locale = Locale.ENGLISH; - res.updateConfiguration(config, null); - String category = "No match"; - - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_control); - } - } - categoryBricks = setupEventCategoryList(context, isBackgroundSprite); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_event); - } - } - categoryBricks = setupMotionCategoryList(context, isBackgroundSprite); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_motion); - } - } - categoryBricks = setupSoundCategoryList(context); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_sound); - } - } - categoryBricks = setupLooksCategoryList(context, isBackgroundSprite); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_looks); - } - } - categoryBricks = setupPenCategoryList(isBackgroundSprite); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_pen); - } - } - categoryBricks = setupUserBricksCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_user_bricks); - } - } - categoryBricks = setupDataCategoryList(context, isBackgroundSprite); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_data); - } - } - categoryBricks = setupLegoNxtCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_lego_nxt); - } - } - categoryBricks = setupLegoEv3CategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_lego_ev3); - } - } - categoryBricks = setupArduinoCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_arduino); - } - } - categoryBricks = setupDroneCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_drone); - } - } - categoryBricks = setupJumpingSumoCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_jumping_sumo); - } - } - categoryBricks = setupPhiroProCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_phiro); - } - } - categoryBricks = setupRaspiCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_raspi); - } - } - categoryBricks = setupChromecastCategoryList(context); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_cast); - } - } - categoryBricks = setupEmbroideryCategoryList(); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_embroidery); - } - } - - categoryBricks = setupAssertionsCategoryList(context); - for (Brick categoryBrick : categoryBricks) { - if (brick.getClass().equals(categoryBrick.getClass())) { - category = res.getString(R.string.category_assertions); - } - } - - if (brick instanceof AskBrick) { - category = res.getString(R.string.category_looks); - } else if (brick instanceof AskSpeechBrick) { - category = res.getString(R.string.category_sound); - } else if (brick instanceof LookRequestBrick) { - category = res.getString(R.string.category_looks); - } else if (brick instanceof BackgroundRequestBrick) { - category = res.getString(R.string.category_looks); - } else if (brick instanceof WhenClonedBrick) { - category = res.getString(R.string.category_control); - } else if (brick instanceof WhenBackgroundChangesBrick) { - category = res.getString(R.string.category_event); - } else if (brick instanceof SetVariableBrick) { - category = res.getString(R.string.category_data); - } else if (brick instanceof WebRequestBrick) { - category = res.getString(R.string.category_data); - } else if (brick instanceof StoreCSVIntoUserListBrick) { - category = res.getString(R.string.category_data); - } - - config.locale = savedLocale; - res.updateConfiguration(config, null); - - return category; - } -} From 30435dbe1b5c7f570c15641f4ca979fe21b6b312 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 01:52:43 +0200 Subject: [PATCH 55/65] Revert to develop to fix conflicts --- .../org/catrobat/catroid/content/bricks/Brick.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java index 4c2f1703847..25551f56591 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java @@ -47,10 +47,11 @@ interface FormulaField extends Serializable { enum BrickField implements FormulaField { COLOR, COLOR_CHANGE, BRIGHTNESS, BRIGHTNESS_CHANGE, X_POSITION, Y_POSITION, X_POSITION_CHANGE, Y_POSITION_CHANGE, TRANSPARENCY, TRANSPARENCY_CHANGE, SIZE, SIZE_CHANGE, VOLUME, VOLUME_CHANGE, X_DESTINATION, Y_DESTINATION, STEPS, - DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, VARIABLE_CHANGE, - WEB_REQUEST, LOOK_REQUEST, POST_WEB_REQUEST_URL, POST_WEB_REQUEST_HEADER, POST_WEB_REQUEST_DATA, - LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, READ_FILENAME, - TEMPO, TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, + DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, + + VARIABLE_CHANGE, WEB_REQUEST, LOOK_REQUEST, LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, + READ_FILENAME, TEMPO, HORIZONTAL_FLEXIBILITY, VERTICAL_FLEXIBILITY, + TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, PEN_SIZE, PEN_COLOR_RED, PEN_COLOR_GREEN, PEN_COLOR_BLUE, @@ -124,7 +125,7 @@ public static boolean isUserList(BrickData field) { BLUETOOTH_SENSORS_ARDUINO, SOCKET_RASPI, CAMERA_FLASH, VIBRATION, BLUETOOTH_PHIRO, CAMERA_BACK, CAMERA_FRONT, SENSOR_ACCELERATION, SENSOR_INCLINATION, SENSOR_COMPASS, NFC_ADAPTER, VIDEO, SENSOR_GPS, COLLISION, BLUETOOTH_LEGO_EV3, NETWORK_CONNECTION, CAST_REQUIRED, MICROPHONE, STORAGE_WRITE, STORAGE_READ, - SPEECH_RECOGNITION, TEXT_DETECTION}) + SPEECH_RECOGNITION, TEXT_DETECTION, POSE_DETECTION}) @interface Resources { } @@ -154,6 +155,7 @@ public static boolean isUserList(BrickData field) { int MICROPHONE = 24; int STORAGE_READ = 25; int STORAGE_WRITE = 26; + int POSE_DETECTION = 27; class ResourcesSet extends HashSet { @Override From 4d639e70bbe7be3697137fdda5218f654aa660d5 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 02:32:22 +0200 Subject: [PATCH 56/65] Reinserting post-brick --- .../org/catrobat/catroid/content/bricks/Brick.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java index 25551f56591..5c64bd9ec92 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java @@ -47,11 +47,13 @@ interface FormulaField extends Serializable { enum BrickField implements FormulaField { COLOR, COLOR_CHANGE, BRIGHTNESS, BRIGHTNESS_CHANGE, X_POSITION, Y_POSITION, X_POSITION_CHANGE, Y_POSITION_CHANGE, TRANSPARENCY, TRANSPARENCY_CHANGE, SIZE, SIZE_CHANGE, VOLUME, VOLUME_CHANGE, X_DESTINATION, Y_DESTINATION, STEPS, - DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, - VARIABLE_CHANGE, WEB_REQUEST, LOOK_REQUEST, LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, - READ_FILENAME, TEMPO, HORIZONTAL_FLEXIBILITY, VERTICAL_FLEXIBILITY, - TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, + DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, VARIABLE_CHANGE, + WEB_REQUEST, LOOK_REQUEST, POST_REQUEST_URL, POST_REQUEST_HEADER, POST_REQUEST_DATA, + LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, READ_FILENAME, + HORIZONTAL_FLEXIBILITY, VERTICAL_FLEXIBILITY, + + TEMPO, TEMPO_CHANGE, BEATS_TO_PAUSE, NOTE_TO_PLAY, BEATS_TO_PLAY_NOTE, OPEN_URL, PLAY_DRUM, PEN_SIZE, PEN_COLOR_RED, PEN_COLOR_GREEN, PEN_COLOR_BLUE, From f7950772dcad4163e65441671301bb7cb05ae44d Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 03:07:57 +0200 Subject: [PATCH 57/65] Reinserting POST brick changes --- .../catrobat/catroid/ui/fragment/CategoryBricksFactory.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt index 9acdda7c6b4..bd0400bc502 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt @@ -139,6 +139,7 @@ import org.catrobat.catroid.content.bricks.PlaySoundAndWaitBrick import org.catrobat.catroid.content.bricks.PlaySoundBrick import org.catrobat.catroid.content.bricks.PointInDirectionBrick import org.catrobat.catroid.content.bricks.PointToBrick +import org.catrobat.catroid.content.bricks.PostWebRequestBrick import org.catrobat.catroid.content.bricks.PreviousLookBrick import org.catrobat.catroid.content.bricks.RaspiIfLogicBeginBrick import org.catrobat.catroid.content.bricks.RaspiPwmBrick @@ -541,6 +542,8 @@ open class CategoryBricksFactory { projectManager.currentProject.xmlHeader.islandscapeMode() -> dataBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)) else -> dataBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)) } + dataBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) dataBrickList.add(AskBrick(context.getString(R.string.brick_ask_default_question))) if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { dataBrickList.add(AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))) @@ -573,6 +576,8 @@ open class CategoryBricksFactory { projectManager.currentProject.xmlHeader.islandscapeMode() -> deviceBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)) else -> deviceBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)) } + deviceBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) deviceBrickList.add(OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)) deviceBrickList.add(VibrationBrick(BrickValues.VIBRATE_SECONDS)) @@ -721,6 +726,8 @@ open class CategoryBricksFactory { assertionsBrickList.add(FinishStageBrick()) assertionsBrickList.add(StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, context.getString(R.string.brick_store_csv_into_userlist_data))) assertionsBrickList.add(WebRequestBrick(context.getString(R.string.brick_web_request_default_value))) + assertionsBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) return assertionsBrickList } @@ -763,6 +770,7 @@ open class CategoryBricksFactory { is WhenBackgroundChangesBrick -> category = res.getString(R.string.category_event) is SetVariableBrick -> category = res.getString(R.string.category_data) is WebRequestBrick -> category = res.getString(R.string.category_data) + is PostWebRequestBrick -> category = res.getString(R.string.category_data) is StoreCSVIntoUserListBrick -> category = res.getString(R.string.category_data) is UserDefinedBrick -> category = res.getString(R.string.category_user_bricks) is UserDefinedReceiverBrick -> category = res.getString(R.string.category_user_bricks) From becaec644527621186cc202946db7892dc925598 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 03:40:02 +0200 Subject: [PATCH 58/65] Forgot reinserting second previous commit... --- .../main/java/org/catrobat/catroid/content/bricks/Brick.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java index 5c64bd9ec92..de25bd6d901 100644 --- a/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java +++ b/catroid/src/main/java/org/catrobat/catroid/content/bricks/Brick.java @@ -49,7 +49,7 @@ enum BrickField implements FormulaField { TRANSPARENCY, TRANSPARENCY_CHANGE, SIZE, SIZE_CHANGE, VOLUME, VOLUME_CHANGE, X_DESTINATION, Y_DESTINATION, STEPS, DURATION_IN_SECONDS, DEGREES, TURN_RIGHT_DEGREES, TURN_LEFT_DEGREES, TIME_TO_WAIT_IN_SECONDS, VARIABLE, VARIABLE_CHANGE, - WEB_REQUEST, LOOK_REQUEST, POST_REQUEST_URL, POST_REQUEST_HEADER, POST_REQUEST_DATA, + WEB_REQUEST, LOOK_REQUEST, POST_WEB_REQUEST_URL, POST_WEB_REQUEST_HEADER, POST_WEB_REQUEST_DATA, LOOK_NEW, LOOK_COPY, BACKGROUND_REQUEST, WRITE_FILENAME, READ_FILENAME, HORIZONTAL_FLEXIBILITY, VERTICAL_FLEXIBILITY, From 9a9a72f5019932c1eab42fbd5d564b901f55ed42 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 06:11:51 +0200 Subject: [PATCH 59/65] Indentations and white spaces --- .../catroid/ui/fragment/CategoryBricksFactory.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt index bd0400bc502..04b2e02bad1 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt @@ -1,4 +1,4 @@ -/* +/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2021 The Catrobat Team * () @@ -542,8 +542,8 @@ open class CategoryBricksFactory { projectManager.currentProject.xmlHeader.islandscapeMode() -> dataBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)) else -> dataBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)) } - dataBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))) + dataBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) dataBrickList.add(AskBrick(context.getString(R.string.brick_ask_default_question))) if (SettingsFragment.isAISpeechRecognitionSharedPreferenceEnabled(context)) { dataBrickList.add(AskSpeechBrick(context.getString(R.string.brick_ask_speech_default_question))) @@ -576,8 +576,8 @@ open class CategoryBricksFactory { projectManager.currentProject.xmlHeader.islandscapeMode() -> deviceBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST_LANDSCAPE)) else -> deviceBrickList.add(BackgroundRequestBrick(BrickValues.BACKGROUND_REQUEST)) } - deviceBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))) + deviceBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) deviceBrickList.add(OpenUrlBrick(BrickValues.OPEN_IN_BROWSER)) deviceBrickList.add(VibrationBrick(BrickValues.VIBRATE_SECONDS)) @@ -726,8 +726,8 @@ open class CategoryBricksFactory { assertionsBrickList.add(FinishStageBrick()) assertionsBrickList.add(StoreCSVIntoUserListBrick(BrickValues.STORE_CSV_INTO_USERLIST_COLUMN, context.getString(R.string.brick_store_csv_into_userlist_data))) assertionsBrickList.add(WebRequestBrick(context.getString(R.string.brick_web_request_default_value))) - assertionsBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, - context.getString(R.string.brick_post_web_request_data_default_value))) + assertionsBrickList.add(PostWebRequestBrick(BrickValues.POST_WEB_REQUEST_URL, BrickValues.POST_WEB_REQUEST_HEADER, + context.getString(R.string.brick_post_web_request_data_default_value))) return assertionsBrickList } From 7ec6d2d9f21fc23126904982d320d1e640365ef5 Mon Sep 17 00:00:00 2001 From: Wolfgang Slany <1747888+wslany@users.noreply.github.com> Date: Mon, 25 Oct 2021 11:14:21 +0200 Subject: [PATCH 60/65] Whitespace https://jenkins.catrob.at/job/Catroid/job/PR-4366/4/analysis/type.-1715364903/ --- .../org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt index 04b2e02bad1..7e6c29a0611 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/CategoryBricksFactory.kt @@ -1,4 +1,4 @@ -/* +/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2021 The Catrobat Team * () From 213983fbfe3722f873e5cbed3e51399543ff87a6 Mon Sep 17 00:00:00 2001 From: Nayab56 <94985116+Nayab56@users.noreply.github.com> Date: Tue, 25 Jan 2022 12:11:34 +0100 Subject: [PATCH 61/65] CATROID-1311 (CATROID#1311) --- .../catroid/test/web/PostWebConnectionTest.kt | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt diff --git a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt new file mode 100644 index 00000000000..74cdcf36a74 --- /dev/null +++ b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt @@ -0,0 +1,93 @@ +/* + * Catroid: An on-device visual programming system for Android devices + * Copyright (C) 2010-2022 The Catrobat Team + * () + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * An additional term exception under section 7 of the GNU Affero + * General Public License, version 3, is available at + * http://developer.catrobat.org/license_additional_term + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.catrobat.catroid.test.web + +import okhttp3.Call +import okhttp3.Headers +import okhttp3.OkHttpClient +import okhttp3.Request +import org.catrobat.catroid.common.Constants +import org.catrobat.catroid.common.Constants.ERROR_BAD_REQUEST +import org.catrobat.catroid.web.PostWebConnection.PostWebRequestListener +import org.catrobat.catroid.web.PostWebConnection +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.anyString +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.Mockito +import org.powermock.api.mockito.PowerMockito +import org.powermock.api.mockito.PowerMockito.doNothing +import org.powermock.api.mockito.PowerMockito.doReturn +import org.powermock.api.mockito.PowerMockito.mock + +@RunWith(JUnit4::class) +class PostWebConnectionTest { + + private lateinit var listener: PostWebRequestListener + private lateinit var okHttpClient: OkHttpClient + + + companion object { + private const val BASE_URL_TEST_HTTPS = "https://httpbin.org/post" + private const val Headers = "User-Agent:Mozilla/5.0 (compatible; Catrobatbot/1.0; " + + "+https://catrob.at/bot) accept:application/json" + private const val Data = "Sample text" + } + + @Before + fun setUp() { + listener = mock(PostWebConnection.PostWebRequestListener::class.java) + okHttpClient = mock(OkHttpClient::class.java) + doNothing().`when`(listener).onRequestError(anyString()) + } + + @Test + fun testSendPostRequestWithIncompleteURL() { + PostWebConnection(mock(OkHttpClient::class.java), listener, "https/", Headers, Data) + .sendPostWebRequest() + verify(listener, times(1)).onRequestError(Constants.ERROR_BAD_REQUEST.toString()) + } + + @Test + fun testPostRequestWithMalformedUrl() { + PostWebConnection(okHttpClient, listener, "test", Headers, Data).sendPostWebRequest() + verify(listener, times(1)).onRequestError(Constants.ERROR_BAD_REQUEST.toString()) + } + + @Test + fun testPostRequest() { + val call = mock(Call::class.java) + doReturn(call) + .`when`(okHttpClient).newCall(any(Request::class.java)) + + PostWebConnection(okHttpClient, listener, BASE_URL_TEST_HTTPS, Headers, Data) + .sendPostWebRequest() + verify(call, times(1)).enqueue(any()) + } + +} \ No newline at end of file From c7fbec037ebf7733849fbebd79353dfb2129c630 Mon Sep 17 00:00:00 2001 From: Nayab56 <94985116+Nayab56@users.noreply.github.com> Date: Tue, 25 Jan 2022 12:23:36 +0100 Subject: [PATCH 62/65] CATROID#1311 CATROID#1311 #1311 --- .../org/catrobat/catroid/test/web/PostWebConnectionTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt index 74cdcf36a74..56da28497d8 100644 --- a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt +++ b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt @@ -17,7 +17,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Public License + * You should have received a copy of the GNU Affero General Publicc License * along with this program. If not, see . */ @@ -90,4 +90,4 @@ class PostWebConnectionTest { verify(call, times(1)).enqueue(any()) } -} \ No newline at end of file +} From 5df34477efdc7b7a26fa0aa37fd657486ef309dd Mon Sep 17 00:00:00 2001 From: Nayab56 <94985116+Nayab56@users.noreply.github.com> Date: Tue, 25 Jan 2022 12:28:20 +0100 Subject: [PATCH 63/65] Update PostWebConnectionTest.kt --- .../java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt index 56da28497d8..40d1a611dc8 100644 --- a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt +++ b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt @@ -17,7 +17,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Publicc License + * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ From 9f36e712b23136286f1d9b9a628ee9b44eb735a2 Mon Sep 17 00:00:00 2001 From: Nayab56 <94985116+Nayab56@users.noreply.github.com> Date: Tue, 25 Jan 2022 12:29:55 +0100 Subject: [PATCH 64/65] CATROID --- .../java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt index 40d1a611dc8..b65e41e5b7b 100644 --- a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt +++ b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt @@ -17,7 +17,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Public License + * You should have received a copy of the GNU Affero General Publi License * along with this program. If not, see . */ From 935cdbf502c07fe2b4e50cc67d786b4f2d0c797e Mon Sep 17 00:00:00 2001 From: Nayab56 <94985116+Nayab56@users.noreply.github.com> Date: Tue, 25 Jan 2022 12:30:55 +0100 Subject: [PATCH 65/65] CATROID#1311 #CATROID-1311 (CATROID#1311) --- .../java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt index b65e41e5b7b..40d1a611dc8 100644 --- a/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt +++ b/catroid/src/test/java/org/catrobat/catroid/test/web/PostWebConnectionTest.kt @@ -17,7 +17,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Publi License + * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */