Loading build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -6,8 +6,8 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.7.5' kotlin_version = '1.2.10' propVersionName = '3.8.11' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading commons/src/main/kotlin/com/simplemobiletools/commons/activities/AboutActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ class AboutActivity : BaseSimpleActivity() { } private fun setupRateUs() { if (baseConfig.appRunCount < 5) { if (baseConfig.appRunCount < 3) { about_rate_us.visibility = View.GONE } else { about_rate_us.setOnClickListener { Loading commons/src/main/kotlin/com/simplemobiletools/commons/activities/BaseSimpleActivity.kt +3 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.simplemobiletools.commons.helpers.APP_LICENSES import com.simplemobiletools.commons.helpers.APP_NAME import com.simplemobiletools.commons.helpers.APP_VERSION_NAME import com.simplemobiletools.commons.helpers.OPEN_DOCUMENT_TREE import com.simplemobiletools.commons.interfaces.CopyMoveListener import java.io.File import java.util.* Loading Loading @@ -127,7 +128,7 @@ open class BaseSimpleActivity : AppCompatActivity() { baseConfig.treeUri = treeUri.toString() val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION contentResolver.takePersistableUriPermission(treeUri, takeFlags) applicationContext.contentResolver.takePersistableUriPermission(treeUri, takeFlags) } private fun isProperFolder(uri: Uri) = isExternalStorageDocument(uri) && isRootUri(uri) && !isInternalStorage(uri) Loading Loading @@ -244,7 +245,7 @@ open class BaseSimpleActivity : AppCompatActivity() { } } val copyMoveListener = object : CopyMoveTask.CopyMoveListener { val copyMoveListener = object : CopyMoveListener { override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) { if (copyOnly) { toast(if (copiedAll) R.string.copying_success else R.string.copying_success_partial) Loading commons/src/main/kotlin/com/simplemobiletools/commons/adapters/FilepickerItemsAdapter.kt +2 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ class FilepickerItemsAdapter(activity: BaseSimpleActivity, val fileDirItems: Lis path } if (context != null) { Glide.with(context).load(itemToLoad).transition(withCrossFade()).apply(options).into(list_item_icon) if (!activity.isActivityDestroyed()) { Glide.with(activity).load(itemToLoad).transition(withCrossFade()).apply(options).into(list_item_icon) } } } Loading commons/src/main/kotlin/com/simplemobiletools/commons/asynctasks/CopyMoveTask.kt +12 −15 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import android.support.v4.util.Pair import com.simplemobiletools.commons.R import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.interfaces.CopyMoveListener import java.io.File import java.io.FileInputStream import java.io.InputStream Loading @@ -16,10 +17,10 @@ import java.lang.ref.WeakReference import java.util.* class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = false, val copyMediaOnly: Boolean, listener: CopyMoveTask.CopyMoveListener) : AsyncTask<Pair<ArrayList<File>, File>, Void, Boolean>() { listener: CopyMoveListener) : AsyncTask<Pair<ArrayList<File>, File>, Void, Boolean>() { private var mListener: WeakReference<CopyMoveListener>? = null private var mMovedFiles: ArrayList<File> = ArrayList() private var mDocument: DocumentFile? = null private var mDocuments = LinkedHashMap<String, DocumentFile?>() lateinit var mFiles: ArrayList<File> init { Loading Loading @@ -72,8 +73,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal val children = source.list() for (child in children) { val newFile = File(destination, child) if (newFile.exists()) if (newFile.exists()) { continue } val oldFile = File(source, child) copy(oldFile, newFile) Loading @@ -82,8 +84,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal } private fun copyFile(source: File, destination: File) { if (copyMediaOnly && !source.absolutePath.isImageVideoGif()) if (copyMediaOnly && !source.absolutePath.isImageVideoGif()) { return } val directory = destination.parentFile if (!activity.createDirectorySync(directory)) { Loading @@ -95,11 +98,11 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal var inputStream: InputStream? = null var out: OutputStream? = null try { if (mDocument == null && activity.needsStupidWritePermissions(destination.absolutePath)) { mDocument = activity.getFileDocument(destination.parent) if (!mDocuments.containsKey(destination.parent) && activity.needsStupidWritePermissions(destination.absolutePath)) { mDocuments[destination.parent] = activity.getFileDocument(destination.parent) } out = activity.getFileOutputStreamSync(destination.absolutePath, source.getMimeType(), mDocument) out = activity.getFileOutputStreamSync(destination.absolutePath, source.getMimeType(), mDocuments[destination.parent]) inputStream = FileInputStream(source) inputStream.copyTo(out!!) Loading Loading @@ -135,7 +138,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal val uri = MediaStore.Files.getContentUri("external") val selection = "${MediaStore.MediaColumns.DATA} = ?" var selectionArgs = arrayOf(source.absolutePath) val cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null) val cursor = activity.applicationContext.contentResolver.query(uri, projection, selection, selectionArgs, null) cursor?.use { if (cursor.moveToFirst()) { Loading @@ -149,15 +152,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal selectionArgs = arrayOf(destination.absolutePath) activity.scanFile(destination) { activity.contentResolver.update(uri, values, selection, selectionArgs) } activity.applicationContext.contentResolver.update(uri, values, selection, selectionArgs) } } } interface CopyMoveListener { fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) fun copyFailed() } } Loading
build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -6,8 +6,8 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.7.5' kotlin_version = '1.2.10' propVersionName = '3.8.11' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/activities/AboutActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ class AboutActivity : BaseSimpleActivity() { } private fun setupRateUs() { if (baseConfig.appRunCount < 5) { if (baseConfig.appRunCount < 3) { about_rate_us.visibility = View.GONE } else { about_rate_us.setOnClickListener { Loading
commons/src/main/kotlin/com/simplemobiletools/commons/activities/BaseSimpleActivity.kt +3 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.simplemobiletools.commons.helpers.APP_LICENSES import com.simplemobiletools.commons.helpers.APP_NAME import com.simplemobiletools.commons.helpers.APP_VERSION_NAME import com.simplemobiletools.commons.helpers.OPEN_DOCUMENT_TREE import com.simplemobiletools.commons.interfaces.CopyMoveListener import java.io.File import java.util.* Loading Loading @@ -127,7 +128,7 @@ open class BaseSimpleActivity : AppCompatActivity() { baseConfig.treeUri = treeUri.toString() val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION contentResolver.takePersistableUriPermission(treeUri, takeFlags) applicationContext.contentResolver.takePersistableUriPermission(treeUri, takeFlags) } private fun isProperFolder(uri: Uri) = isExternalStorageDocument(uri) && isRootUri(uri) && !isInternalStorage(uri) Loading Loading @@ -244,7 +245,7 @@ open class BaseSimpleActivity : AppCompatActivity() { } } val copyMoveListener = object : CopyMoveTask.CopyMoveListener { val copyMoveListener = object : CopyMoveListener { override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) { if (copyOnly) { toast(if (copiedAll) R.string.copying_success else R.string.copying_success_partial) Loading
commons/src/main/kotlin/com/simplemobiletools/commons/adapters/FilepickerItemsAdapter.kt +2 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ class FilepickerItemsAdapter(activity: BaseSimpleActivity, val fileDirItems: Lis path } if (context != null) { Glide.with(context).load(itemToLoad).transition(withCrossFade()).apply(options).into(list_item_icon) if (!activity.isActivityDestroyed()) { Glide.with(activity).load(itemToLoad).transition(withCrossFade()).apply(options).into(list_item_icon) } } } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/asynctasks/CopyMoveTask.kt +12 −15 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import android.support.v4.util.Pair import com.simplemobiletools.commons.R import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.interfaces.CopyMoveListener import java.io.File import java.io.FileInputStream import java.io.InputStream Loading @@ -16,10 +17,10 @@ import java.lang.ref.WeakReference import java.util.* class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = false, val copyMediaOnly: Boolean, listener: CopyMoveTask.CopyMoveListener) : AsyncTask<Pair<ArrayList<File>, File>, Void, Boolean>() { listener: CopyMoveListener) : AsyncTask<Pair<ArrayList<File>, File>, Void, Boolean>() { private var mListener: WeakReference<CopyMoveListener>? = null private var mMovedFiles: ArrayList<File> = ArrayList() private var mDocument: DocumentFile? = null private var mDocuments = LinkedHashMap<String, DocumentFile?>() lateinit var mFiles: ArrayList<File> init { Loading Loading @@ -72,8 +73,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal val children = source.list() for (child in children) { val newFile = File(destination, child) if (newFile.exists()) if (newFile.exists()) { continue } val oldFile = File(source, child) copy(oldFile, newFile) Loading @@ -82,8 +84,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal } private fun copyFile(source: File, destination: File) { if (copyMediaOnly && !source.absolutePath.isImageVideoGif()) if (copyMediaOnly && !source.absolutePath.isImageVideoGif()) { return } val directory = destination.parentFile if (!activity.createDirectorySync(directory)) { Loading @@ -95,11 +98,11 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal var inputStream: InputStream? = null var out: OutputStream? = null try { if (mDocument == null && activity.needsStupidWritePermissions(destination.absolutePath)) { mDocument = activity.getFileDocument(destination.parent) if (!mDocuments.containsKey(destination.parent) && activity.needsStupidWritePermissions(destination.absolutePath)) { mDocuments[destination.parent] = activity.getFileDocument(destination.parent) } out = activity.getFileOutputStreamSync(destination.absolutePath, source.getMimeType(), mDocument) out = activity.getFileOutputStreamSync(destination.absolutePath, source.getMimeType(), mDocuments[destination.parent]) inputStream = FileInputStream(source) inputStream.copyTo(out!!) Loading Loading @@ -135,7 +138,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal val uri = MediaStore.Files.getContentUri("external") val selection = "${MediaStore.MediaColumns.DATA} = ?" var selectionArgs = arrayOf(source.absolutePath) val cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null) val cursor = activity.applicationContext.contentResolver.query(uri, projection, selection, selectionArgs, null) cursor?.use { if (cursor.moveToFirst()) { Loading @@ -149,15 +152,9 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal selectionArgs = arrayOf(destination.absolutePath) activity.scanFile(destination) { activity.contentResolver.update(uri, values, selection, selectionArgs) } activity.applicationContext.contentResolver.update(uri, values, selection, selectionArgs) } } } interface CopyMoveListener { fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) fun copyFailed() } }