diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000..c5f3f6b9c7
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "java.configuration.updateBuildConfiguration": "interactive"
+}
\ No newline at end of file
diff --git a/Jenkinsfile b/Jenkinsfile
index d0ecd8e85a..ac73c8f271 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -53,7 +53,7 @@ pipeline {
stage('Build Debug-APK') {
steps {
sh "./gradlew -Pindependent='#$env.BUILD_NUMBER $env.BRANCH_NAME' assembleDebug"
- archiveArtifacts 'app/build/outputs/apk/debug/paintroid-debug*.apk'
+ archiveArtifacts artifacts: 'app/build/outputs/apk/debug/paintroid-debug*.apk', allowEmptyArchive: true
plot csvFileName: 'dexcount.csv', csvSeries: [[displayTableFlag: false, exclusionValues: '', file: 'Paintroid/build/outputs/dexcount/*.csv', inclusionFlag: 'OFF', url: '']], group: 'APK Stats', numBuilds: '180', style: 'line', title: 'dexcount'
}
}
@@ -76,9 +76,9 @@ pipeline {
}
renameApks("${env.BRANCH_NAME}-${env.BUILD_NUMBER}")
dir('Catroid') {
- archiveArtifacts "catroid/src/main/libs/*.aar"
+ archiveArtifacts artifacts: "catroid/src/main/libs/*.aar", allowEmptyArchive: true
sh "./gradlew assembleCatroidDebug"
- archiveArtifacts 'catroid/build/outputs/apk/catroid/debug/catroid-catroid-debug.apk'
+ archiveArtifacts artifacts: 'catroid/build/outputs/apk/catroid/debug/catroid-catroid-debug.apk', allowEmptyArchive: true
}
}
}
@@ -123,7 +123,7 @@ pipeline {
sh '/home/user/android/sdk/platform-tools/adb logcat -d > logcat.txt'
sh './gradlew stopEmulator'
junitAndCoverage "$reports/coverage/debug/report.xml", 'device', javaSrc
- archiveArtifacts 'logcat.txt'
+ archiveArtifacts artifacts: 'logcat.txt', allowEmptyArchive: true
}
}
}
diff --git a/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/util/wrappers/ShapeToolOptionsViewInteraction.kt b/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/util/wrappers/ShapeToolOptionsViewInteraction.kt
index 85dd0e3dd1..1763bf38cb 100644
--- a/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/util/wrappers/ShapeToolOptionsViewInteraction.kt
+++ b/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/util/wrappers/ShapeToolOptionsViewInteraction.kt
@@ -47,12 +47,14 @@ class ShapeToolOptionsViewInteraction private constructor() :
fun performSelectShape(shape: DrawableShape): ShapeToolOptionsViewInteraction {
Espresso.onView(ViewMatchers.withId(getButtonIdFromBaseShape(shape)))
+ .check(androidx.test.espresso.assertion.ViewAssertions.matches(ViewMatchers.isDisplayed()))
.perform(ViewActions.click())
return this
}
fun performSelectShapeDrawType(shapeDrawType: DrawableStyle): ShapeToolOptionsViewInteraction {
Espresso.onView(ViewMatchers.withId(getButtonIdFromShapeDrawType(shapeDrawType)))
+ .check(androidx.test.espresso.assertion.ViewAssertions.matches(ViewMatchers.isDisplayed()))
.perform(ViewActions.click())
return this
}
diff --git a/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/junit/tools/ClipboardToolTest.kt b/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/junit/tools/ClipboardToolTest.kt
index bd9d375c1e..d7640572ef 100644
--- a/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/junit/tools/ClipboardToolTest.kt
+++ b/Paintroid/src/androidTest/java/org/catrobat/paintroid/test/junit/tools/ClipboardToolTest.kt
@@ -147,4 +147,41 @@ class ClipboardToolTest {
Assert.assertEquals(tool!!.toolPosition.x, initialToolPositionX + 9, 0f)
Assert.assertEquals(tool!!.toolPosition.y, initialToolPositionY + 9, 0f)
}
+
+ @Test
+ fun testClearButtonEnabledAfterCopy() {
+ Mockito.`when`(workspace!!.bitmapOfCurrentLayer).thenReturn(
+ Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
+ )
+ tool!!.copyBoxContent()
+ Mockito.verify(clipboardToolOptionsView)!!.enableClear(true)
+ }
+
+ @Test
+ fun testClearButtonEnabledAfterCut() {
+ Mockito.`when`(workspace!!.bitmapOfCurrentLayer).thenReturn(
+ Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
+ )
+ tool!!.copyBoxContent()
+ Mockito.verify(clipboardToolOptionsView)!!.enableClear(true)
+ }
+
+ @Test
+ fun testClearDisablesPasteAndClearButtons() {
+ Mockito.`when`(workspace!!.bitmapOfCurrentLayer).thenReturn(
+ Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
+ )
+ // First copy to enable buttons
+ tool!!.copyBoxContent()
+ Mockito.verify(clipboardToolOptionsView)!!.enablePaste(true)
+ Mockito.verify(clipboardToolOptionsView)!!.enableClear(true)
+ // Now clear and verify both buttons are disabled
+ Mockito.clearInvocations(clipboardToolOptionsView)
+ // Simulate clear button click by getting the callback and calling clearClicked
+ val callbackCaptor = org.mockito.ArgumentCaptor.forClass(ClipboardToolOptionsView.Callback::class.java)
+ Mockito.verify(clipboardToolOptionsView, Mockito.atLeastOnce())!!.setCallback(callbackCaptor.capture())
+ callbackCaptor.value.clearClicked()
+ Mockito.verify(clipboardToolOptionsView)!!.enablePaste(false)
+ Mockito.verify(clipboardToolOptionsView)!!.enableClear(false)
+ }
}
diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/tools/implementation/ClipboardTool.kt b/Paintroid/src/main/java/org/catrobat/paintroid/tools/implementation/ClipboardTool.kt
index 8b584f4f7c..1213465cf6 100644
--- a/Paintroid/src/main/java/org/catrobat/paintroid/tools/implementation/ClipboardTool.kt
+++ b/Paintroid/src/main/java/org/catrobat/paintroid/tools/implementation/ClipboardTool.kt
@@ -80,6 +80,7 @@ class ClipboardTool(
highlightBox()
copyBoxContent()
this@ClipboardTool.clipboardToolOptionsView.enablePaste(true)
+ this@ClipboardTool.clipboardToolOptionsView.enableClear(true)
}
override fun cutClicked() {
@@ -87,12 +88,21 @@ class ClipboardTool(
copyBoxContent()
cutBoxContent()
this@ClipboardTool.clipboardToolOptionsView.enablePaste(true)
+ this@ClipboardTool.clipboardToolOptionsView.enableClear(true)
}
override fun pasteClicked() {
highlightBox()
pasteBoxContent()
}
+
+ override fun clearClicked() {
+ highlightBox()
+ drawingBitmap = null
+ readyForPaste = false
+ this@ClipboardTool.clipboardToolOptionsView.enablePaste(false)
+ this@ClipboardTool.clipboardToolOptionsView.enableClear(false)
+ }
}
clipboardToolOptionsView.setCallback(callback)
toolOptionsViewController.showDelayed()
diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/tools/options/ClipboardToolOptionsView.kt b/Paintroid/src/main/java/org/catrobat/paintroid/tools/options/ClipboardToolOptionsView.kt
index 77a6255d26..4bf14fbe72 100644
--- a/Paintroid/src/main/java/org/catrobat/paintroid/tools/options/ClipboardToolOptionsView.kt
+++ b/Paintroid/src/main/java/org/catrobat/paintroid/tools/options/ClipboardToolOptionsView.kt
@@ -25,6 +25,8 @@ interface ClipboardToolOptionsView {
fun enablePaste(enable: Boolean)
+ fun enableClear(enable: Boolean)
+
fun setShapeSizeText(shapeSize: String)
fun toggleShapeSizeVisibility(isVisible: Boolean)
@@ -37,5 +39,7 @@ interface ClipboardToolOptionsView {
fun cutClicked()
fun pasteClicked()
+
+ fun clearClicked()
}
}
diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/ui/tools/DefaultClipboardToolOptionsView.kt b/Paintroid/src/main/java/org/catrobat/paintroid/ui/tools/DefaultClipboardToolOptionsView.kt
index 8a99d22e30..e83c94e3dc 100644
--- a/Paintroid/src/main/java/org/catrobat/paintroid/ui/tools/DefaultClipboardToolOptionsView.kt
+++ b/Paintroid/src/main/java/org/catrobat/paintroid/ui/tools/DefaultClipboardToolOptionsView.kt
@@ -30,6 +30,7 @@ class DefaultClipboardToolOptionsView(rootView: ViewGroup) : ClipboardToolOption
private val pasteChip: Chip
private val copyChip: Chip
private val cutChip: Chip
+ private val clearChip: Chip
private val shapeSizeChip: Chip
private val changeSizeShapeSizeChip: Chip
private val clipboardToolOptionsView: View
@@ -49,6 +50,10 @@ class DefaultClipboardToolOptionsView(rootView: ViewGroup) : ClipboardToolOption
pasteChip.setOnClickListener {
callback?.pasteClicked()
}
+
+ clearChip.setOnClickListener {
+ callback?.clearClicked()
+ }
}
override fun setCallback(callback: ClipboardToolOptionsView.Callback) {
@@ -59,6 +64,10 @@ class DefaultClipboardToolOptionsView(rootView: ViewGroup) : ClipboardToolOption
pasteChip.isEnabled = enable
}
+ override fun enableClear(enable: Boolean) {
+ clearChip.isEnabled = enable
+ }
+
override fun toggleShapeSizeVisibility(isVisible: Boolean) {
if (isVisible && !changeSizeShapeSizeChipVisible && clipboardToolOptionsView.visibility == View.INVISIBLE) {
changeSizeShapeSizeChip.visibility = View.VISIBLE
@@ -83,6 +92,7 @@ class DefaultClipboardToolOptionsView(rootView: ViewGroup) : ClipboardToolOption
copyChip = stampToolOptionsView.findViewById(R.id.action_copy)
pasteChip = stampToolOptionsView.findViewById(R.id.action_paste)
cutChip = stampToolOptionsView.findViewById(R.id.action_cut)
+ clearChip = stampToolOptionsView.findViewById(R.id.action_clear)
enablePaste(false)
initializeListeners()
stampToolOptionsView.run {
diff --git a/Paintroid/src/main/res/layout/dialog_pocketpaint_clipboard_tool.xml b/Paintroid/src/main/res/layout/dialog_pocketpaint_clipboard_tool.xml
index 5baf9ee945..54992c8b2d 100644
--- a/Paintroid/src/main/res/layout/dialog_pocketpaint_clipboard_tool.xml
+++ b/Paintroid/src/main/res/layout/dialog_pocketpaint_clipboard_tool.xml
@@ -64,6 +64,23 @@
app:chipIcon="@drawable/ic_pocketpaint_paste_chip_icon_selector"
app:chipStartPadding="8dp" />
+
+
+
+
Paste
Copy
Cut
+ Clear
Stickers
@string/button_import_image
diff --git a/gradle.properties b/gradle.properties
index 5e9758afa7..3ce859e6c7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
android.enableJetifier=true
android.useAndroidX=true
-org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xmx4096m
-android.disableAutomaticComponentCreation=true
\ No newline at end of file
+org.gradle.jvmargs=-Xmx4096m
+android.disableAutomaticComponentCreation=true