Google Summer of Code 2021 at Catrobat
Hi! I'm Saarthak Seth. My wonderful three month journey as Student Developer in the Google Summer of Code 2021 is about to end. This summer, I worked on an amazing project by Catrobat - Pocket Paint for Android. My project was mainly focussed on refactoring and rewriting the production code to Kotlin, implementing all the modern features designed specifically to streamline mobile development, resulting in safer and more maintainable code for future development. Along the way, I also worked on fixing some of the High frequency Crashes and ANRs to improve the overall app experience for the users.
I'll now be giving the package-wise breakdown of all the files that I refactored, for each of the modules(namely colorpicker, Paintroid) in the app.
Files that were refactored in the above PR:
ColorPickerPresetColorButton
PresetSelectorView
Constants
HSVSelectorView
Files that were refactored:
UserPreferences
PaintroidApplicationFragment
PaintroidApplication
MyProvider
Files that were refactored:
DefaultCommandFactory
CommandFactory
Files that were refactored:
DefaultCommandManager
CommandManager
Files that were refactored:
CommandFactory
Constants
MainActivityConstants
Files that were refactored:
ToolController
DefaultToolController
Files that were refactored:
SaveImageAsync
CreateFileAsync
MainActivityInteractor
MenuFileActivityIntegrationTest
OraFileFormatIntegrationTest
3. Refactor OpenRasterFileFormatConversion
: Ticket
Files that were refactored:
BottomBarScrollListener
PresenterColorPickedListener
BottomBarHorizontalScrollView
Files that were refactored:
Layer
LayerModel
MainActivityModel
Files that were refactored:
CommonBrushChangedListener
CommonBrushPreviewListener
Constants
PointScrollBehavior
ScrollBehavior
Files that were refactored:
DrawableFactory
DrawableShape
DrawableStyle
HeartDrawable
OvalDrawable
RectangleDrawable
ShapeDrawable
StarDrawable
Files that were refactored:
CropAlgorithm
JavaCropAlgorithm
TransformToolIntegrationTest
JavaCropAlgorithmTest
Files that were refactored:
JavaFillAlgorithm
FillAlgorithm
Files that were refactored:
FillAlgorithmFactory
Conversion
DefaultNumberRangeFilter
NumberRangeFilter
JavaFillAlgorithmFactory
Files that were refactored:
BaseTool
BaseToolWithShape
FillTool
FillToolOptionsView
SprayTool
LineTool
Files that were refactored:
DefaultContextCallback
DefaultToolFactory
DefaultToolPaint
DefaultToolReference
DefaultWorkspace
Files that were refactored:
HandTool
PipetteTool
ToolOptionsViewController
ToolOptionsVisibilityController
Files that were refactored:
BrushTool
BrushToolOptionsView
BrushToolPreview
EraseTool
Files that were refactored:
ShapeTool
ImportTool
ShapeToolOptionsView
Files that were refactored:
TextTool
TextToolOptionsView
Files that were refactored:
StampTool
StampToolOptionsView
DefaultStampToolOptionsView
Files that were refactored:
TransformTool
TransformToolOptionsView
Files that were refactored:
ContextCallback
ToolReference
Workspace
Tool
ToolPaint
ToolFactory
SprayTool
LineTool
SprayToolTest
LineToolTest
Files that were refactored:
DragAndDropListView
DragAndDropPresenter
ListItemLongClickHandler
Files that were refactored:
BottomNavigationLandscape
BottomNavigationPortrait
Files that were refactored:
KeyboardListener
LayerNavigator
ToastFactory
During the last 4-5 months of the pre-GSoC and GSoC periods, I've also made some other contributions like fixing some bugs, high frequency crashes and ANRs, implementing static analysis checks for Kotlin on Jenkins, code-reviewing some of the PRs, etc.
2. Fixed crash in ZoomableImageView.kt
file due to kotlin.UninitializedPropertyAccessException
: Ticket, PR[Merged]
4. Fixed crash when using import image tool without file system access permission on Android 6.0: Ticket, PR[Merged]
Also refactored the following files to Kotlin:
DrawingSurface
AsyncCommandManager
DrawingSurfaceListener
6. Added Kotlin Static Analysis and style checks to Jenkins similar to one implemented in Catroid to the project: Ticket, PR[Merged]
8. Fixed the very high frequency crash due to java.util.NoSuchElementException
when calling DefaultCommandManager.undo
and .redo
: Ticket, PR[Merged]
The project is truly fantastic and amazing, I really loved to work on this project, and will love to continue working with the Paintroid team and keep contributing to the project after the GSoC'21 ends. With this project I learned a lot about Kotlin
, Test Driven Development
, and Clean Code
practices which I think will definitely help me in my future as a Software Developer