diff --git a/app/build.gradle b/app/build.gradle index dc52337a2..ea28aa7e6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,6 @@ dependencies { implementation 'com.google.vr:sdk-panowidget:1.180.0' implementation 'com.google.vr:sdk-videowidget:1.180.0' implementation 'org.apache.sanselan:sanselan:0.97-incubator' - implementation 'info.androidhive:imagefilters:1.0.7' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.caverock:androidsvg-aar:1.3' implementation 'com.github.tibbi:gestureviews:a2208ce9d9' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt index 8d3532271..3cd9667d0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt @@ -6,7 +6,6 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Bitmap.CompressFormat import android.graphics.Color -import android.graphics.Point import android.media.ExifInterface import android.net.Uri import android.os.Build @@ -15,16 +14,6 @@ import android.provider.MediaStore import android.view.Menu import android.view.MenuItem import android.widget.RelativeLayout -import androidx.recyclerview.widget.LinearLayoutManager -import com.bumptech.glide.Glide -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.DecodeFormat -import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.RequestOptions -import com.bumptech.glide.request.target.Target -import com.simplemobiletools.commons.dialogs.ColorPickerDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE @@ -34,62 +23,29 @@ import com.simplemobiletools.commons.helpers.isNougatPlus import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.gallery.pro.BuildConfig import com.simplemobiletools.gallery.pro.R -import com.simplemobiletools.gallery.pro.adapters.FiltersAdapter import com.simplemobiletools.gallery.pro.dialogs.OtherAspectRatioDialog -import com.simplemobiletools.gallery.pro.dialogs.ResizeDialog -import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog import com.simplemobiletools.gallery.pro.extensions.config import com.simplemobiletools.gallery.pro.extensions.fixDateTaken -import com.simplemobiletools.gallery.pro.extensions.openEditor import com.simplemobiletools.gallery.pro.helpers.* -import com.simplemobiletools.gallery.pro.models.FilterItem import com.theartofdev.edmodo.cropper.CropImageView -import com.zomato.photofilters.FilterPack -import com.zomato.photofilters.imageprocessors.Filter import kotlinx.android.synthetic.main.activity_edit.* import kotlinx.android.synthetic.main.bottom_actions_aspect_ratio.* -import kotlinx.android.synthetic.main.bottom_editor_actions_filter.* import kotlinx.android.synthetic.main.bottom_editor_crop_rotate_actions.* -import kotlinx.android.synthetic.main.bottom_editor_draw_actions.* -import kotlinx.android.synthetic.main.bottom_editor_primary_actions.* import java.io.* class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener { - companion object { - init { - System.loadLibrary("NativeImageProcessor") - } - } - private val TEMP_FOLDER_NAME = "images" private val ASPECT_X = "aspectX" private val ASPECT_Y = "aspectY" - private val CROP = "crop" - - // constants for bottom primary action groups - private val PRIMARY_ACTION_NONE = 0 - private val PRIMARY_ACTION_FILTER = 1 - private val PRIMARY_ACTION_CROP_ROTATE = 2 - private val PRIMARY_ACTION_DRAW = 3 - - private val CROP_ROTATE_NONE = 0 - private val CROP_ROTATE_ASPECT_RATIO = 1 private lateinit var uri: Uri private lateinit var saveUri: Uri private var resizeWidth = 0 private var resizeHeight = 0 - private var drawColor = 0 private var lastOtherAspectRatio: Pair? = null - private var currPrimaryAction = PRIMARY_ACTION_NONE - private var currCropRotateAction = CROP_ROTATE_ASPECT_RATIO private var currAspectRatio = ASPECT_RATIO_FREE - private var isCropIntent = false - private var isEditingWithThirdParty = false private var isSharingBitmap = false - private var wasDrawCanvasPositioned = false private var oldExif: ExifInterface? = null - private var filterInitialBitmap: Bitmap? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -109,19 +65,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } - override fun onResume() { - super.onResume() - isEditingWithThirdParty = false - bottom_draw_width.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) - } - - override fun onStop() { - super.onStop() - if (isEditingWithThirdParty) { - finish() - } - } - override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_editor, menu) updateMenuItemColors(menu) @@ -131,7 +74,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.save_as -> saveImage() - R.id.edit -> editWith() R.id.share -> shareImage() else -> return super.onOptionsItemSelected(item) } @@ -170,14 +112,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener else -> uri } - isCropIntent = intent.extras?.get(CROP) == "true" - if (isCropIntent) { - bottom_editor_primary_actions.beGone() - (bottom_editor_crop_rotate_actions.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1) - } - - loadDefaultImageView() - setupBottomActions() + (bottom_editor_crop_rotate_actions.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1) + loadCropImageView() + setupCropRotateActionButtons() + setupAspectRatioButtons() if (config.lastEditorCropAspectRatio == ASPECT_RATIO_OTHER) { if (config.lastEditorCropOtherAspectRatioX == 0f) { @@ -195,57 +133,14 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener bottom_aspect_ratios.beVisible() } - private fun loadDefaultImageView() { - default_image_view.beVisible() - crop_image_view.beGone() - editor_draw_canvas.beGone() - - val options = RequestOptions() - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - - Glide.with(this) - .asBitmap() - .load(uri) - .apply(options) - .listener(object : RequestListener { - override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean) = false - - override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { - val currentFilter = getFiltersAdapter()?.getCurrentFilter() - if (filterInitialBitmap == null) { - loadCropImageView() - bottomCropRotateClicked() - } - - if (filterInitialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) { - default_image_view.onGlobalLayout { - applyFilter(currentFilter) - } - } else { - filterInitialBitmap = bitmap - } - - if (isCropIntent) { - bottom_primary_filter.beGone() - bottom_primary_draw.beGone() - } - - return false - } - }).into(default_image_view) - } - private fun loadCropImageView() { - default_image_view.beGone() - editor_draw_canvas.beGone() crop_image_view.apply { beVisible() setOnCropImageCompleteListener(this@EditActivity) setImageUriAsync(uri) guidelines = CropImageView.Guidelines.ON - if (isCropIntent && shouldCropSquare()) { + if (shouldCropSquare()) { currAspectRatio = ASPECT_RATIO_ONE_ONE setFixedAspectRatio(true) bottom_aspect_ratio.beGone() @@ -253,52 +148,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } - private fun loadDrawCanvas() { - default_image_view.beGone() - crop_image_view.beGone() - editor_draw_canvas.beVisible() - - if (!wasDrawCanvasPositioned) { - wasDrawCanvasPositioned = true - editor_draw_canvas.onGlobalLayout { - ensureBackgroundThread { - fillCanvasBackground() - } - } - } - } - - private fun fillCanvasBackground() { - val size = Point() - windowManager.defaultDisplay.getSize(size) - val options = RequestOptions() - .format(DecodeFormat.PREFER_ARGB_8888) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .fitCenter() - - try { - val builder = Glide.with(applicationContext) - .asBitmap() - .load(uri) - .apply(options) - .into(editor_draw_canvas.width, editor_draw_canvas.height) - - val bitmap = builder.get() - runOnUiThread { - editor_draw_canvas.apply { - updateBackgroundBitmap(bitmap) - layoutParams.width = bitmap.width - layoutParams.height = bitmap.height - y = (height - bitmap.height) / 2f - requestLayout() - } - } - } catch (e: Exception) { - showErrorToast(e) - } - } - @TargetApi(Build.VERSION_CODES.N) private fun saveImage() { var inputStream: InputStream? = null @@ -312,66 +161,14 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener inputStream?.close() } - if (crop_image_view.isVisible()) { - crop_image_view.getCroppedImageAsync() - } else if (editor_draw_canvas.isVisible()) { - val bitmap = editor_draw_canvas.getBitmap() - if (saveUri.scheme == "file") { - SaveAsDialog(this, saveUri.path!!, true) { - saveBitmapToFile(bitmap, it, true) - } - } else if (saveUri.scheme == "content") { - val filePathGetter = getNewFilePath() - SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { - saveBitmapToFile(bitmap, it, true) - } - } - } else { - val currentFilter = getFiltersAdapter()?.getCurrentFilter() ?: return - val filePathGetter = getNewFilePath() - SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { - toast(R.string.saving) - - // clean up everything to free as much memory as possible - default_image_view.setImageResource(0) - crop_image_view.setImageBitmap(null) - bottom_actions_filter_list.adapter = null - bottom_actions_filter_list.beGone() - - ensureBackgroundThread { - try { - val originalBitmap = Glide.with(applicationContext).asBitmap().load(uri).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get() - currentFilter.filter.processFilter(originalBitmap) - saveBitmapToFile(originalBitmap, it, false) - } catch (e: OutOfMemoryError) { - toast(R.string.out_of_memory_error) - } - } - } - } + crop_image_view.getCroppedImageAsync() } private fun shareImage() { ensureBackgroundThread { - when { - default_image_view.isVisible() -> { - val currentFilter = getFiltersAdapter()?.getCurrentFilter() - if (currentFilter == null) { - toast(R.string.unknown_error_occurred) - return@ensureBackgroundThread - } - - val originalBitmap = Glide.with(applicationContext).asBitmap().load(uri).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get() - currentFilter.filter.processFilter(originalBitmap) - shareBitmap(originalBitmap) - } - crop_image_view.isVisible() -> { - isSharingBitmap = true - runOnUiThread { - crop_image_view.getCroppedImageAsync() - } - } - editor_draw_canvas.isVisible() -> shareBitmap(editor_draw_canvas.getBitmap()) + isSharingBitmap = true + runOnUiThread { + crop_image_view.getCroppedImageAsync() } } } @@ -416,66 +213,11 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } - private fun getFiltersAdapter() = bottom_actions_filter_list.adapter as? FiltersAdapter - - private fun setupBottomActions() { - setupPrimaryActionButtons() - setupCropRotateActionButtons() - setupAspectRatioButtons() - setupDrawButtons() - } - - private fun setupPrimaryActionButtons() { - bottom_primary_filter.setOnClickListener { - bottomFilterClicked() - } - - bottom_primary_crop_rotate.setOnClickListener { - bottomCropRotateClicked() - } - - bottom_primary_draw.setOnClickListener { - bottomDrawClicked() - } - } - - private fun bottomFilterClicked() { - currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_FILTER) { - PRIMARY_ACTION_NONE - } else { - PRIMARY_ACTION_FILTER - } - updatePrimaryActionButtons() - } - - private fun bottomCropRotateClicked() { - currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) { - PRIMARY_ACTION_NONE - } else { - PRIMARY_ACTION_CROP_ROTATE - } - updatePrimaryActionButtons() - } - - private fun bottomDrawClicked() { - currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_DRAW) { - PRIMARY_ACTION_NONE - } else { - PRIMARY_ACTION_DRAW - } - updatePrimaryActionButtons() - } - private fun setupCropRotateActionButtons() { bottom_rotate.setOnClickListener { crop_image_view.rotateImage(90) } - bottom_resize.beGoneIf(isCropIntent) - bottom_resize.setOnClickListener { - resizeImage() - } - bottom_flip_horizontally.setOnClickListener { crop_image_view.flipImageHorizontally() } @@ -483,19 +225,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener bottom_flip_vertically.setOnClickListener { crop_image_view.flipImageVertically() } - - bottom_aspect_ratio.setOnClickListener { - currCropRotateAction = if (currCropRotateAction == CROP_ROTATE_ASPECT_RATIO) { - crop_image_view.guidelines = CropImageView.Guidelines.OFF - bottom_aspect_ratios.beGone() - CROP_ROTATE_NONE - } else { - crop_image_view.guidelines = CropImageView.Guidelines.ON - bottom_aspect_ratios.beVisible() - CROP_ROTATE_ASPECT_RATIO - } - updateCropRotateActionButtons() - } } private fun setupAspectRatioButtons() { @@ -527,126 +256,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener updateAspectRatioButtons() } - private fun setupDrawButtons() { - updateDrawColor(config.lastEditorDrawColor) - bottom_draw_width.progress = config.lastEditorBrushSize - updateBrushSize(config.lastEditorBrushSize) - - bottom_draw_color_clickable.setOnClickListener { - ColorPickerDialog(this, drawColor) { wasPositivePressed, color -> - if (wasPositivePressed) { - updateDrawColor(color) - } - } - } - - bottom_draw_width.onSeekBarChangeListener { - config.lastEditorBrushSize = it - updateBrushSize(it) - } - - bottom_draw_undo.setOnClickListener { - editor_draw_canvas.undo() - } - } - - private fun updateBrushSize(percent: Int) { - editor_draw_canvas.updateBrushSize(percent) - val scale = Math.max(0.03f, percent / 100f) - bottom_draw_color.scaleX = scale - bottom_draw_color.scaleY = scale - } - - private fun updatePrimaryActionButtons() { - if (crop_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) { - loadCropImageView() - } else if (default_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_FILTER) { - loadDefaultImageView() - } else if (editor_draw_canvas.isGone() && currPrimaryAction == PRIMARY_ACTION_DRAW) { - loadDrawCanvas() - } - - arrayOf(bottom_primary_filter, bottom_primary_crop_rotate, bottom_primary_draw).forEach { - it.applyColorFilter(Color.WHITE) - } - - val currentPrimaryActionButton = when (currPrimaryAction) { - PRIMARY_ACTION_FILTER -> bottom_primary_filter - PRIMARY_ACTION_CROP_ROTATE -> bottom_primary_crop_rotate - PRIMARY_ACTION_DRAW -> bottom_primary_draw - else -> null - } - - currentPrimaryActionButton?.applyColorFilter(getAdjustedPrimaryColor()) - bottom_editor_filter_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_FILTER) - bottom_editor_crop_rotate_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) - bottom_editor_draw_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_DRAW) - - if (currPrimaryAction == PRIMARY_ACTION_FILTER && bottom_actions_filter_list.adapter == null) { - ensureBackgroundThread { - val thumbnailSize = resources.getDimension(R.dimen.bottom_filters_thumbnail_size).toInt() - - val bitmap = try { - Glide.with(this) - .asBitmap() - .load(uri).listener(object : RequestListener { - override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { - showErrorToast(e.toString()) - return false - } - - override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean) = false - }) - .submit(thumbnailSize, thumbnailSize) - .get() - } catch (e: GlideException) { - showErrorToast(e) - finish() - return@ensureBackgroundThread - } - - runOnUiThread { - val filterThumbnailsManager = FilterThumbnailsManager() - filterThumbnailsManager.clearThumbs() - - val noFilter = Filter(getString(R.string.none)) - filterThumbnailsManager.addThumb(FilterItem(bitmap, noFilter)) - - FilterPack.getFilterPack(this).forEach { - val filterItem = FilterItem(bitmap, it) - filterThumbnailsManager.addThumb(filterItem) - } - - val filterItems = filterThumbnailsManager.processThumbs() - val adapter = FiltersAdapter(applicationContext, filterItems) { - val layoutManager = bottom_actions_filter_list.layoutManager as LinearLayoutManager - applyFilter(filterItems[it]) - - if (it == layoutManager.findLastCompletelyVisibleItemPosition() || it == layoutManager.findLastVisibleItemPosition()) { - bottom_actions_filter_list.smoothScrollBy(thumbnailSize, 0) - } else if (it == layoutManager.findFirstCompletelyVisibleItemPosition() || it == layoutManager.findFirstVisibleItemPosition()) { - bottom_actions_filter_list.smoothScrollBy(-thumbnailSize, 0) - } - } - - bottom_actions_filter_list.adapter = adapter - adapter.notifyDataSetChanged() - } - } - } - - if (currPrimaryAction != PRIMARY_ACTION_CROP_ROTATE) { - bottom_aspect_ratios.beGone() - currCropRotateAction = CROP_ROTATE_NONE - } - updateCropRotateActionButtons() - } - - private fun applyFilter(filterItem: FilterItem) { - val newBitmap = Bitmap.createBitmap(filterInitialBitmap!!) - default_image_view.setImageBitmap(filterItem.filter.processFilter(newBitmap)) - } - private fun updateAspectRatio(aspectRatio: Int) { currAspectRatio = aspectRatio config.lastEditorCropAspectRatio = aspectRatio @@ -684,40 +293,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener currentAspectRatioButton.setTextColor(getAdjustedPrimaryColor()) } - private fun updateCropRotateActionButtons() { - arrayOf(bottom_aspect_ratio).forEach { - it.applyColorFilter(Color.WHITE) - } - - val primaryActionView = when (currCropRotateAction) { - CROP_ROTATE_ASPECT_RATIO -> bottom_aspect_ratio - else -> null - } - - primaryActionView?.applyColorFilter(getAdjustedPrimaryColor()) - } - - private fun updateDrawColor(color: Int) { - drawColor = color - bottom_draw_color.applyColorFilter(color) - config.lastEditorDrawColor = color - editor_draw_canvas.updateColor(color) - } - - private fun resizeImage() { - val point = getAreaSize() - if (point == null) { - toast(R.string.unknown_error_occurred) - return - } - - ResizeDialog(this, point) { - resizeWidth = it.x - resizeHeight = it.y - crop_image_view.getCroppedImageAsync() - } - } - private fun shouldCropSquare(): Boolean { val extras = intent.extras return if (extras != null && extras.containsKey(ASPECT_X) && extras.containsKey(ASPECT_Y)) { @@ -727,16 +302,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } - private fun getAreaSize(): Point? { - val rect = crop_image_view.cropRect ?: return null - val rotation = crop_image_view.rotatedDegrees - return if (rotation == 0 || rotation == 180) { - Point(rect.width(), rect.height()) - } else { - Point(rect.height(), rect.width()) - } - } - override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) { if (result.error == null) { val bitmap = result.bitmap @@ -746,71 +311,34 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener return } - if (isCropIntent) { - if (saveUri.scheme == "file") { - saveBitmapToFile(bitmap, saveUri.path!!, true) - } else { - var inputStream: InputStream? = null - var outputStream: OutputStream? = null - try { - val stream = ByteArrayOutputStream() - bitmap.compress(CompressFormat.JPEG, 100, stream) - inputStream = ByteArrayInputStream(stream.toByteArray()) - outputStream = contentResolver.openOutputStream(saveUri) - inputStream.copyTo(outputStream!!) - } finally { - inputStream?.close() - outputStream?.close() - } - - Intent().apply { - data = saveUri - addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - setResult(RESULT_OK, this) - } - finish() - } - } else if (saveUri.scheme == "file") { - SaveAsDialog(this, saveUri.path!!, true) { - saveBitmapToFile(bitmap, it, true) - } - } else if (saveUri.scheme == "content") { - val filePathGetter = getNewFilePath() - SaveAsDialog(this, filePathGetter.first, filePathGetter.second) { - saveBitmapToFile(bitmap, it, true) - } + if (saveUri.scheme == "file") { + saveBitmapToFile(bitmap, saveUri.path!!, true) } else { - toast(R.string.unknown_file_location) + var inputStream: InputStream? = null + var outputStream: OutputStream? = null + try { + val stream = ByteArrayOutputStream() + bitmap.compress(CompressFormat.JPEG, 100, stream) + inputStream = ByteArrayInputStream(stream.toByteArray()) + outputStream = contentResolver.openOutputStream(saveUri) + inputStream.copyTo(outputStream!!) + } finally { + inputStream?.close() + outputStream?.close() + } + + Intent().apply { + data = saveUri + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + setResult(RESULT_OK, this) + } + finish() } } else { toast("${getString(R.string.image_editing_failed)}: ${result.error.message}") } } - private fun getNewFilePath(): Pair { - var newPath = applicationContext.getRealPathFromURI(saveUri) ?: "" - if (newPath.startsWith("/mnt/")) { - newPath = "" - } - - var shouldAppendFilename = true - if (newPath.isEmpty()) { - val filename = applicationContext.getFilenameFromContentUri(saveUri) ?: "" - if (filename.isNotEmpty()) { - val path = if (intent.extras?.containsKey(REAL_FILE_PATH) == true) intent.getStringExtra(REAL_FILE_PATH).getParentPath() else internalStoragePath - newPath = "$path/$filename" - shouldAppendFilename = false - } - } - - if (newPath.isEmpty()) { - newPath = "$internalStoragePath/${getCurrentFormattedDateTime()}.${saveUri.toString().getFilenameExtension()}" - shouldAppendFilename = false - } - - return Pair(newPath, shouldAppendFilename) - } - private fun saveBitmapToFile(bitmap: Bitmap, path: String, showSavingToast: Boolean) { if (!packageName.contains("slootelibomelpmis".reversed(), true)) { if (baseConfig.appRunCount > 100) { @@ -869,11 +397,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener out.close() } - private fun editWith() { - openEditor(uri.toString(), true) - isEditingWithThirdParty = true - } - private fun scanFinalPath(path: String) { val paths = arrayListOf(path) rescanPaths(paths) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt deleted file mode 100644 index b614787b8..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/FiltersAdapter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.simplemobiletools.gallery.pro.adapters - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.simplemobiletools.gallery.pro.R -import com.simplemobiletools.gallery.pro.models.FilterItem -import kotlinx.android.synthetic.main.editor_filter_item.view.* -import java.util.* - -class FiltersAdapter(val context: Context, val filterItems: ArrayList, val itemClick: (Int) -> Unit) : RecyclerView.Adapter() { - - private var currentSelection = filterItems.first() - private var strokeBackground = context.resources.getDrawable(R.drawable.stroke_background) - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.bindView(filterItems[position]) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.editor_filter_item, parent, false) - return ViewHolder(view) - } - - override fun getItemCount() = filterItems.size - - fun getCurrentFilter() = currentSelection - - private fun setCurrentFilter(position: Int) { - val filterItem = filterItems.getOrNull(position) ?: return - if (currentSelection != filterItem) { - currentSelection = filterItem - notifyDataSetChanged() - itemClick.invoke(position) - } - } - - inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - fun bindView(filterItem: FilterItem): View { - itemView.apply { - editor_filter_item_label.text = filterItem.filter.name - editor_filter_item_thumbnail.setImageBitmap(filterItem.bitmap) - editor_filter_item_thumbnail.background = if (getCurrentFilter() == filterItem) { - strokeBackground - } else { - null - } - - setOnClickListener { - setCurrentFilter(adapterPosition) - } - } - return itemView - } - } -} diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt index 3ece915e3..bd2788697 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt @@ -80,7 +80,7 @@ fun Activity.launchCamera() { fun SimpleActivity.launchAbout() { val licenses = LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_RTL or LICENSE_SUBSAMPLING or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GIF_DRAWABLE or - LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS or LICENSE_GESTURE_VIEWS + LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_GESTURE_VIEWS val faqItems = arrayListOf( FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons), diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt deleted file mode 100644 index ae043ddde..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/FilterThumbnailsManager.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.simplemobiletools.gallery.pro.helpers - -import android.graphics.Bitmap -import com.simplemobiletools.gallery.pro.models.FilterItem -import java.util.* - -class FilterThumbnailsManager { - private var filterThumbnails = ArrayList(10) - private var processedThumbnails = ArrayList(10) - - fun addThumb(filterItem: FilterItem) { - filterThumbnails.add(filterItem) - } - - fun processThumbs(): ArrayList { - for (filterItem in filterThumbnails) { - filterItem.bitmap = filterItem.filter.processFilter(Bitmap.createBitmap(filterItem.bitmap)) - processedThumbnails.add(filterItem) - } - return processedThumbnails - } - - fun clearThumbs() { - filterThumbnails = ArrayList() - processedThumbnails = ArrayList() - } -} diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt deleted file mode 100644 index ce826e57e..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/FilterItem.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.simplemobiletools.gallery.pro.models - -import android.graphics.Bitmap -import com.zomato.photofilters.imageprocessors.Filter - -data class FilterItem(var bitmap: Bitmap, val filter: Filter) diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index 3dffbf1bf..fbebb78bf 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -1,77 +1,37 @@ - - - - - + app:cropInitialCropWindowPaddingRatio="0" /> - - + android:background="@drawable/gradient_background" /> - - + android:layout_above="@+id/bottom_editor_crop_rotate_actions" /> - - + android:layout_alignParentBottom="true" /> diff --git a/app/src/main/res/layout/bottom_editor_actions_filter.xml b/app/src/main/res/layout/bottom_editor_actions_filter.xml deleted file mode 100644 index 734942343..000000000 --- a/app/src/main/res/layout/bottom_editor_actions_filter.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml b/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml index 93dcbb4e6..24aec2005 100644 --- a/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml +++ b/app/src/main/res/layout/bottom_editor_crop_rotate_actions.xml @@ -1,6 +1,5 @@ - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintStart_toEndOf="@+id/bottom_rotate" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/bottom_editor_draw_actions.xml b/app/src/main/res/layout/bottom_editor_draw_actions.xml deleted file mode 100644 index 07fe2fb2c..000000000 --- a/app/src/main/res/layout/bottom_editor_draw_actions.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/layout/bottom_editor_primary_actions.xml b/app/src/main/res/layout/bottom_editor_primary_actions.xml deleted file mode 100644 index ed600ed0e..000000000 --- a/app/src/main/res/layout/bottom_editor_primary_actions.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/layout/editor_filter_item.xml b/app/src/main/res/layout/editor_filter_item.xml deleted file mode 100644 index dd3913336..000000000 --- a/app/src/main/res/layout/editor_filter_item.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index 16a5f7806..534116c96 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -6,11 +6,6 @@ android:icon="@drawable/ic_check_vector" android:title="@string/save_as" app:showAsAction="ifRoom"/> - 128dp 164dp 48dp - 76dp - 90dp - 98dp 180dp 48dp 86dp