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