diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/FileIO.kt b/Paintroid/src/main/java/org/catrobat/paintroid/FileIO.kt index 432399538f..be449597e0 100644 --- a/Paintroid/src/main/java/org/catrobat/paintroid/FileIO.kt +++ b/Paintroid/src/main/java/org/catrobat/paintroid/FileIO.kt @@ -642,10 +642,14 @@ object FileIO { var workspaceReturnValue: WorkspaceReturnValue? = null if (temporaryFilePath != null) { try { - val stream = FileInputStream(temporaryFilePath) - workspaceReturnValue = commandSerializer.readFromInternalMemory(stream) + FileInputStream(temporaryFilePath).use { stream -> + workspaceReturnValue = commandSerializer.readFromInternalMemory(stream) + } } catch (e: IOException) { Log.e("Cannot read", "Can't read from stream", e) + } catch (e: RuntimeException){ + Log.e("Paintroid", "Temporary file corrupted", e) + deleteTempFile(File(temporaryFilePath)) } } return workspaceReturnValue diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/MainActivity.kt b/Paintroid/src/main/java/org/catrobat/paintroid/MainActivity.kt index dffb83df93..b05c2acd18 100644 --- a/Paintroid/src/main/java/org/catrobat/paintroid/MainActivity.kt +++ b/Paintroid/src/main/java/org/catrobat/paintroid/MainActivity.kt @@ -316,12 +316,18 @@ class MainActivity : AppCompatActivity(), MainView, CommandListener { presenterMain.initializeFromCleanState(picturePath, pictureName) if (!model.isOpenedFromCatroid && presenterMain.checkForTemporaryFile() && (!isRunningEspressoTests || isTemporaryFileSavingTest)) { - val workspaceReturnValue = presenterMain.openTemporaryFile() - commandManager.loadCommandsCatrobatImage(workspaceReturnValue?.commandManagerModel) - model.colorHistory = workspaceReturnValue?.colorHistory ?: ColorHistory() - model.colorHistory.colors.lastOrNull()?.let { - toolReference.tool?.changePaintColor(it) - presenterMain.setBottomNavigationColor(it) + try{ + val workspaceReturnValue = presenterMain.openTemporaryFile() + commandManager.loadCommandsCatrobatImage(workspaceReturnValue?.commandManagerModel) + model.colorHistory = workspaceReturnValue?.colorHistory ?: ColorHistory() + model.colorHistory.colors.lastOrNull()?.let { + toolReference.tool?.changePaintColor(it) + presenterMain.setBottomNavigationColor(it) + } + } + catch(e: Exception){ + Log.e("Paintroid", "Temporary file Corrupted Error: ", e) + presenterMain.initializeFromCleanState(null, null) } } workspace.perspective.setBitmapDimensions(layerModel.width, layerModel.height) @@ -407,12 +413,15 @@ class MainActivity : AppCompatActivity(), MainView, CommandListener { } private fun getAppFragment() { - supportFragmentManager.findFragmentByTag(APP_FRAGMENT_KEY)?.let { fragment -> - appFragment = fragment as PaintroidApplicationFragment - } - if (!this::appFragment.isInitialized) { + val existing = supportFragmentManager.findFragmentByTag(APP_FRAGMENT_KEY) + + if (existing is PaintroidApplicationFragment) { + appFragment = existing + } else { appFragment = PaintroidApplicationFragment() - supportFragmentManager.beginTransaction().add(appFragment, APP_FRAGMENT_KEY).commit() + supportFragmentManager.beginTransaction() + .add(appFragment, APP_FRAGMENT_KEY) + .commitNow() } }