Skip to content

Commit fa07417

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 1735abc commit fa07417

File tree

8 files changed

+56
-23
lines changed

8 files changed

+56
-23
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/main/java/org/catrobat/paintroid/MainActivity.kt

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

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import org.catrobat.paintroid.tools.ToolPaint
3232
import org.catrobat.paintroid.tools.ToolReference
3333
import org.catrobat.paintroid.tools.ToolType
3434
import org.catrobat.paintroid.tools.Workspace
35-
import org.catrobat.paintroid.tools.implementation.BaseToolWithShape
3635
import org.catrobat.paintroid.tools.implementation.ImportTool
3736
import org.catrobat.paintroid.tools.implementation.LineTool
3837
import org.catrobat.paintroid.tools.options.ToolOptionsViewController
@@ -99,8 +98,8 @@ class DefaultToolController(
9998
this.onColorPickedListener = onColorPickedListener
10099
}
101100

102-
override fun switchTool(toolType: ToolType, backPressed: Boolean) {
103-
switchTool(createAndSetupTool(toolType), backPressed)
101+
override fun switchTool(toolType: ToolType) {
102+
switchTool(createAndSetupTool(toolType))
104103
}
105104

106105
override fun hideToolOptionsView() {
@@ -121,17 +120,12 @@ class DefaultToolController(
121120
toolReference.tool?.resetInternalState(StateChange.NEW_IMAGE_LOADED)
122121
}
123122

124-
private fun switchTool(tool: Tool, backPressed: Boolean) {
123+
private fun switchTool(tool: Tool) {
125124
val currentTool = toolReference.tool
126125
val currentToolType = currentTool?.toolType
127-
if (toolList.contains(currentToolType) && !backPressed) {
128-
val toolToApply = currentTool as BaseToolWithShape
129-
toolToApply.onClickOnButton()
130-
}
131-
132126
currentToolType?.let { hidePlusIfShown(it) }
133127

134-
if (currentTool?.toolType == tool.toolType) {
128+
if (currentToolType == tool.toolType) {
135129
val toolBundle = Bundle()
136130
currentTool.onSaveInstanceState(toolBundle)
137131
tool.onRestoreInstanceState(toolBundle)

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

Lines changed: 1 addition & 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

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class LayerPresenter(
171171
drawingSurface?.refreshDrawingSurface()
172172
getDestinationLayer(position, false)?.let { layer ->
173173
if (model.currentLayer == layer) {
174-
defaultToolController?.switchTool(ToolType.HAND, false)
174+
defaultToolController?.switchTool(ToolType.HAND)
175175
bottomNavigationViewHolder?.showCurrentTool(ToolType.HAND)
176176
}
177177
}
@@ -182,7 +182,7 @@ class LayerPresenter(
182182
getDestinationLayer(position, true)?.let { layer ->
183183
viewHolder.updateImageView(layer.bitmap)
184184
if (model.currentLayer == layer) {
185-
defaultToolController?.switchTool(ToolType.BRUSH, false)
185+
defaultToolController?.switchTool(ToolType.BRUSH)
186186
bottomNavigationViewHolder?.showCurrentTool(ToolType.BRUSH)
187187
}
188188
}

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

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ import android.util.Log
3737
import android.view.Gravity
3838
import android.view.Menu
3939
import android.widget.Toast
40+
import androidx.annotation.ColorRes
41+
import androidx.core.content.ContextCompat
4042
import androidx.core.view.GravityCompat
4143
import androidx.test.espresso.idling.CountingIdlingResource
44+
import kotlinx.coroutines.delay
45+
import kotlinx.coroutines.runBlocking
4246
import org.catrobat.paintroid.FileIO
4347
import org.catrobat.paintroid.MainActivity
4448
import org.catrobat.paintroid.R
@@ -82,11 +86,16 @@ import org.catrobat.paintroid.iotasks.SaveImage.SaveImageCallback
8286
import org.catrobat.paintroid.model.CommandManagerModel
8387
import org.catrobat.paintroid.tools.ToolType
8488
import org.catrobat.paintroid.tools.Workspace
89+
import org.catrobat.paintroid.tools.implementation.BaseToolWithRectangleShape
90+
import org.catrobat.paintroid.tools.implementation.BaseToolWithShape
8591
import org.catrobat.paintroid.tools.implementation.LineTool
8692
import org.catrobat.paintroid.ui.LayerAdapter
8793
import org.catrobat.paintroid.ui.Perspective
8894
import java.io.File
8995

96+
private const val HIGHLIGHT_RECTANGLE_SHRINKING = 5
97+
private const val HIGHLIGHT_RECTANGLE_300_MILLISECONDS = 300L
98+
9099
@SuppressWarnings("LongParameterList", "LargeClass", "ThrowingExceptionsWithoutMessageOrCause")
91100
open class MainActivityPresenter(
92101
override val fileActivity: Activity?,
@@ -106,7 +115,8 @@ open class MainActivityPresenter(
106115
private val sharedPreferences: UserPreferences,
107116
private val idlingResource: CountingIdlingResource,
108117
override val context: Context,
109-
private val internalMemoryPath: File
118+
private val internalMemoryPath: File,
119+
private val mainActivity: MainActivity
110120
) : MainActivityContracts.Presenter, SaveImageCallback, LoadImageCallback, CreateFileCallback {
111121
private var layerAdapter: LayerAdapter? = null
112122
private var resetPerspectiveAfterNextCommand = false
@@ -133,6 +143,14 @@ open class MainActivityPresenter(
133143
return sharedPreferences.preferenceImageNumber
134144
}
135145

146+
private val toolList =
147+
hashSetOf(
148+
ToolType.TEXT,
149+
ToolType.TRANSFORM,
150+
ToolType.IMPORTPNG,
151+
ToolType.SHAPE,
152+
)
153+
136154
override fun replaceImageClicked() {
137155
switchBetweenVersions(PERMISSION_REQUEST_CODE_REPLACE_PICTURE, false)
138156
setFirstCheckBoxInLayerMenu()
@@ -405,7 +423,7 @@ open class MainActivityPresenter(
405423
return
406424
}
407425
setTool(ToolType.IMPORTPNG)
408-
toolController.switchTool(ToolType.IMPORTPNG, false)
426+
toolController.switchTool(ToolType.IMPORTPNG)
409427
interactor.loadFile(
410428
this,
411429
LOAD_IMAGE_IMPORT_PNG,
@@ -517,7 +535,7 @@ open class MainActivityPresenter(
517535
} else if (model.isFullscreen) {
518536
exitFullscreenClicked()
519537
} else if (!toolController.isDefaultTool) {
520-
switchTool(ToolType.BRUSH, true)
538+
switchTool(ToolType.BRUSH)
521539
} else {
522540
showSecurityQuestionBeforeExit()
523541
}
@@ -704,15 +722,35 @@ open class MainActivityPresenter(
704722
} else if (view.isKeyboardShown) {
705723
view.hideKeyboard()
706724
} else {
725+
checkForImplicitToolApplication()
707726
switchTool(toolType)
708727
}
709728
idlingResource.decrement()
710729
}
711730

712-
private fun switchTool(type: ToolType, backPressed: Boolean = false) {
731+
private fun checkForImplicitToolApplication() {
732+
val currentTool = toolController.currentTool
733+
val currentToolType = currentTool?.toolType
734+
if (toolList.contains(currentToolType)) {
735+
val toolToApply = currentTool as BaseToolWithShape
736+
val toolToHighlight = currentTool as BaseToolWithRectangleShape
737+
@ColorRes val colorId = R.color.pocketpaint_main_rectangle_tool_highlight_color
738+
toolToHighlight.secondaryShapeColor = ContextCompat.getColor(context, colorId)
739+
toolToHighlight.rectangleShrinkingOnHighlight = HIGHLIGHT_RECTANGLE_SHRINKING
740+
workspace.invalidate()
741+
mainActivity.runOnUiThread {
742+
runBlocking {
743+
delay(HIGHLIGHT_RECTANGLE_300_MILLISECONDS)
744+
}
745+
toolToApply.onClickOnButton()
746+
}
747+
}
748+
}
749+
750+
private fun switchTool(type: ToolType) {
713751
navigator.setMaskFilterToNull()
714752
setTool(type)
715-
toolController.switchTool(type, backPressed)
753+
toolController.switchTool(type)
716754
if (type === ToolType.IMPORTPNG) {
717755
showImportDialog()
718756
}
@@ -743,7 +781,7 @@ open class MainActivityPresenter(
743781
when (requestCode) {
744782
LOAD_IMAGE_IMPORT_PNG -> {
745783
setTool(ToolType.IMPORTPNG)
746-
toolController.switchTool(ToolType.IMPORTPNG, false)
784+
toolController.switchTool(ToolType.IMPORTPNG)
747785
interactor.loadFile(
748786
this,
749787
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)