Skip to content

Commit f452cb7

Browse files
PAINTROID-445
Rewrote some parts of switchTool structure in order to highlight(set the color border to orange) the box (of BaseToolWithRectangleShape) for 300 milliseconds before actually switching the tool.
1 parent cf3859b commit f452cb7

File tree

10 files changed

+62
-29
lines changed

10 files changed

+62
-29
lines changed

Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/MainActivityIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void init() {
109109
CountingIdlingResource idlingResource = launchActivityRule.getActivity().getIdlingResource();
110110
presenter = new MainActivityPresenter(launchActivityRule.getActivity(), view, model, workspace, navigator,
111111
interactor, topBarViewHolder, bottomBarViewHolder, drawerLayoutViewHolder, bottomNavigationViewHolder,
112-
commandFactory, commandManager, perspective, toolController, sharedPreferences, idlingResource, context, internalMemoryPath);
112+
commandFactory, commandManager, perspective, toolController, sharedPreferences, idlingResource, context, internalMemoryPath, launchActivityRule.getActivity());
113113
}
114114

115115
@Test

Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/dialog/ColorDialogIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ public void alphaValueIsSetInSliderWhenChangedInSeekBar() {
736736
.onPositiveButton()
737737
.perform(click());
738738
onToolProperties()
739-
.checkMatchesColor(Color.parseColor("#80000000"));
739+
.checkMatchesColor(Color.parseColor("#7F000000"));
740740
IdlingRegistry.getInstance().unregister(idlingResource);
741741
}
742742

Paintroid/src/androidTest/java/org/catrobat/paintroid/test/espresso/tools/ClippingToolIntegrationTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class ClippingToolIntegrationTest {
207207
.performOpen()
208208
.performClose()
209209

210-
val bitmapColor = workspace.bitmapOfCurrentLayer?.getPixel(middle.x.toInt(), middle.y.toInt())
210+
val bitmapColor = workspace.bitmapOfCurrentLayer?.getPixel(middleTop.x.toInt(), middleTop.y.toInt())
211211
assertEquals(bitmapColor, Color.BLACK)
212212
}
213213

Paintroid/src/main/java/org/catrobat/paintroid/MainActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,8 @@ class MainActivity : AppCompatActivity(), MainView, CommandListener {
475475
preferences,
476476
idlingResource,
477477
context,
478-
filesDir
478+
filesDir,
479+
this
479480
)
480481
FileIO.navigator = navigator
481482
defaultToolController.setOnColorPickedListener(PresenterColorPickedListener(presenterMain))

Paintroid/src/main/java/org/catrobat/paintroid/controller/DefaultToolController.kt

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import org.catrobat.paintroid.tools.ToolPaint
3333
import org.catrobat.paintroid.tools.ToolReference
3434
import org.catrobat.paintroid.tools.ToolType
3535
import org.catrobat.paintroid.tools.Workspace
36-
import org.catrobat.paintroid.tools.implementation.BaseToolWithShape
3736
import org.catrobat.paintroid.tools.implementation.ClippingTool
3837
import org.catrobat.paintroid.tools.implementation.ImportTool
3938
import org.catrobat.paintroid.tools.implementation.LineTool
@@ -103,8 +102,8 @@ class DefaultToolController(
103102
this.onColorPickedListener = onColorPickedListener
104103
}
105104

106-
override fun switchTool(toolType: ToolType, backPressed: Boolean) {
107-
switchTool(createAndSetupTool(toolType), backPressed)
105+
override fun switchTool(toolType: ToolType) {
106+
switchTool(createAndSetupTool(toolType))
108107
}
109108

110109
override fun hideToolOptionsView() {
@@ -125,20 +124,12 @@ class DefaultToolController(
125124
toolReference.tool?.resetInternalState(StateChange.NEW_IMAGE_LOADED)
126125
}
127126

128-
private fun switchTool(tool: Tool, backPressed: Boolean) {
127+
private fun switchTool(tool: Tool) {
129128
val currentTool = toolReference.tool
130129
val currentToolType = currentTool?.toolType
131-
if (toolList.contains(currentToolType)) {
132-
if (!backPressed) {
133-
val toolToApply = currentTool as BaseToolWithShape
134-
toolToApply.onClickOnButton()
135-
}
136-
} else if (currentToolType == ToolType.CLIP) {
137-
adjustClippingTool(backPressed)
138-
}
139130
currentToolType?.let { hidePlusIfShown(it) }
140131

141-
if (currentTool?.toolType == tool.toolType) {
132+
if (currentToolType == tool.toolType) {
142133
val toolBundle = Bundle()
143134
currentTool.onSaveInstanceState(toolBundle)
144135
tool.onRestoreInstanceState(toolBundle)
@@ -147,7 +138,7 @@ class DefaultToolController(
147138
workspace.invalidate()
148139
}
149140

150-
private fun adjustClippingTool(backPressed: Boolean) {
141+
override fun adjustClippingToolOnBackPressed(backPressed: Boolean) {
151142
val clippingTool = currentTool as ClippingTool
152143
if (backPressed) {
153144
if (clippingTool.areaClosed) {

Paintroid/src/main/java/org/catrobat/paintroid/controller/ToolController.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ interface ToolController {
3131

3232
fun setOnColorPickedListener(onColorPickedListener: OnColorPickedListener)
3333

34-
fun switchTool(toolType: ToolType, backPressed: Boolean)
34+
fun switchTool(toolType: ToolType)
3535

3636
fun hideToolOptionsView()
3737

@@ -54,4 +54,6 @@ interface ToolController {
5454
fun hasToolOptionsView(): Boolean
5555

5656
fun setBitmapFromSource(bitmap: Bitmap?)
57+
58+
fun adjustClippingToolOnBackPressed(backPressed: Boolean)
5759
}

Paintroid/src/main/java/org/catrobat/paintroid/presenter/LayerPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class LayerPresenter(
194194
drawingSurface?.refreshDrawingSurface()
195195
getDestinationLayer(position, false)?.let { layer ->
196196
if (model.currentLayer == layer) {
197-
defaultToolController?.switchTool(ToolType.HAND, false)
197+
defaultToolController?.switchTool(ToolType.HAND)
198198
bottomNavigationViewHolder?.showCurrentTool(ToolType.HAND)
199199
}
200200
}
@@ -205,7 +205,7 @@ class LayerPresenter(
205205
getDestinationLayer(position, true)?.let { layer ->
206206
viewHolder.updateImageView(layer.bitmap)
207207
if (model.currentLayer == layer) {
208-
defaultToolController?.switchTool(ToolType.BRUSH, false)
208+
defaultToolController?.switchTool(ToolType.BRUSH)
209209
bottomNavigationViewHolder?.showCurrentTool(ToolType.BRUSH)
210210
}
211211
}

Paintroid/src/main/java/org/catrobat/paintroid/presenter/MainActivityPresenter.kt

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ import android.util.Log
3939
import android.view.Gravity
4040
import android.view.Menu
4141
import android.widget.Toast
42+
import androidx.annotation.ColorRes
43+
import androidx.core.content.ContextCompat
4244
import androidx.core.view.GravityCompat
4345
import androidx.test.espresso.idling.CountingIdlingResource
46+
import kotlinx.coroutines.delay
47+
import kotlinx.coroutines.runBlocking
4448
import org.catrobat.paintroid.FileIO
4549
import org.catrobat.paintroid.MainActivity
4650
import org.catrobat.paintroid.R
@@ -85,12 +89,17 @@ import org.catrobat.paintroid.model.CommandManagerModel
8589
import org.catrobat.paintroid.tools.Tool
8690
import org.catrobat.paintroid.tools.ToolType
8791
import org.catrobat.paintroid.tools.Workspace
92+
import org.catrobat.paintroid.tools.implementation.BaseToolWithRectangleShape
93+
import org.catrobat.paintroid.tools.implementation.BaseToolWithShape
8894
import org.catrobat.paintroid.tools.implementation.ClippingTool
8995
import org.catrobat.paintroid.tools.implementation.LineTool
9096
import org.catrobat.paintroid.ui.LayerAdapter
9197
import org.catrobat.paintroid.ui.Perspective
9298
import java.io.File
9399

100+
private const val HIGHLIGHT_RECTANGLE_SHRINKING = 5
101+
private const val HIGHLIGHT_RECTANGLE_300_MILLISECONDS = 300L
102+
94103
@SuppressWarnings("LongParameterList", "LargeClass", "ThrowingExceptionsWithoutMessageOrCause")
95104
open class MainActivityPresenter(
96105
override val fileActivity: Activity?,
@@ -110,7 +119,8 @@ open class MainActivityPresenter(
110119
private val sharedPreferences: UserPreferences,
111120
private val idlingResource: CountingIdlingResource,
112121
override val context: Context,
113-
private val internalMemoryPath: File
122+
private val internalMemoryPath: File,
123+
private val mainActivity: MainActivity
114124
) : MainActivityContracts.Presenter, SaveImageCallback, LoadImageCallback, CreateFileCallback {
115125
private var layerAdapter: LayerAdapter? = null
116126
private var resetPerspectiveAfterNextCommand = false
@@ -137,6 +147,14 @@ open class MainActivityPresenter(
137147
return sharedPreferences.preferenceImageNumber
138148
}
139149

150+
private val toolList =
151+
hashSetOf(
152+
ToolType.TEXT,
153+
ToolType.TRANSFORM,
154+
ToolType.IMPORTPNG,
155+
ToolType.SHAPE
156+
)
157+
140158
var clippingToolInUseAndUndoRedoClicked = false
141159
var clippingToolPaint = Paint()
142160

@@ -420,7 +438,7 @@ open class MainActivityPresenter(
420438
return
421439
}
422440
setTool(ToolType.IMPORTPNG)
423-
toolController.switchTool(ToolType.IMPORTPNG, false)
441+
toolController.switchTool(ToolType.IMPORTPNG)
424442
interactor.loadFile(
425443
this,
426444
LOAD_IMAGE_IMPORT_PNG,
@@ -532,7 +550,8 @@ open class MainActivityPresenter(
532550
} else if (model.isFullscreen) {
533551
exitFullscreenClicked()
534552
} else if (!toolController.isDefaultTool) {
535-
switchTool(ToolType.BRUSH, true)
553+
if (toolController.currentTool?.toolType == ToolType.CLIP) toolController.adjustClippingToolOnBackPressed(true)
554+
switchTool(ToolType.BRUSH)
536555
} else {
537556
showSecurityQuestionBeforeExit()
538557
}
@@ -757,16 +776,36 @@ open class MainActivityPresenter(
757776
if (toolController.toolType === toolType && toolController.hasToolOptionsView()) {
758777
toolController.toggleToolOptionsView()
759778
} else {
779+
checkForImplicitToolApplication()
760780
switchTool(toolType)
761781
}
762782
idlingResource.decrement()
763783
}
764784

765-
private fun switchTool(type: ToolType, backPressed: Boolean = false) {
785+
private fun checkForImplicitToolApplication() {
786+
val currentTool = toolController.currentTool
787+
val currentToolType = currentTool?.toolType
788+
if (toolList.contains(currentToolType)) {
789+
val toolToApply = currentTool as BaseToolWithShape
790+
val toolToHighlight = currentTool as BaseToolWithRectangleShape
791+
@ColorRes val colorId = R.color.pocketpaint_main_rectangle_tool_highlight_color
792+
toolToHighlight.secondaryShapeColor = ContextCompat.getColor(context, colorId)
793+
toolToHighlight.rectangleShrinkingOnHighlight = HIGHLIGHT_RECTANGLE_SHRINKING
794+
workspace.invalidate()
795+
mainActivity.runOnUiThread {
796+
runBlocking {
797+
delay(HIGHLIGHT_RECTANGLE_300_MILLISECONDS)
798+
}
799+
toolToApply.onClickOnButton()
800+
}
801+
} else if (currentToolType == ToolType.CLIP) (currentTool as ClippingTool).onClickOnButton()
802+
}
803+
804+
private fun switchTool(type: ToolType) {
766805
navigator.setMaskFilterToNull()
767806
view.hideKeyboard()
768807
setTool(type)
769-
toolController.switchTool(type, backPressed)
808+
toolController.switchTool(type)
770809
if (type === ToolType.IMPORTPNG) {
771810
showImportDialog()
772811
} else if (type == ToolType.CLIP) {
@@ -799,7 +838,7 @@ open class MainActivityPresenter(
799838
when (requestCode) {
800839
LOAD_IMAGE_IMPORT_PNG -> {
801840
setTool(ToolType.IMPORTPNG)
802-
toolController.switchTool(ToolType.IMPORTPNG, false)
841+
toolController.switchTool(ToolType.IMPORTPNG)
803842
interactor.loadFile(
804843
this,
805844
LOAD_IMAGE_IMPORT_PNG,

Paintroid/src/main/java/org/catrobat/paintroid/ui/LayerAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class LayerAdapter(val presenter: LayerContracts.Presenter) : BaseAdapter(), Lay
115115

116116
override fun setSelected(position: Int, bottomNavigationViewHolder: BottomNavigationViewHolder?, defaultToolController: DefaultToolController?) {
117117
if (!layerPresenter.getLayerItem(position).isVisible) {
118-
defaultToolController?.switchTool(ToolType.HAND, false)
118+
defaultToolController?.switchTool(ToolType.HAND)
119119
bottomNavigationViewHolder?.showCurrentTool(ToolType.HAND)
120120
}
121121
layerBackground.setBackgroundColor(Color.BLUE)

Paintroid/src/test/java/org/catrobat/paintroid/test/presenter/MainActivityPresenterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void setUp() {
143143
presenter = new MainActivityPresenter(activity, view, model, workspace, navigator,
144144
interactor, topBarViewHolder, bottomBarViewHolder, drawerLayoutViewHolder,
145145
bottomNavigationViewHolder, commandFactory, commandManager, perspective,
146-
toolController, sharedPreferences, idlingResource, context, internalMemoryPath);
146+
toolController, sharedPreferences, idlingResource, context, internalMemoryPath, activity);
147147
}
148148

149149
@Test

0 commit comments

Comments
 (0)