Skip to content

Commit f69228b

Browse files
committed
allow opening a file as different type with "Open as"
1 parent ba983ff commit f69228b

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,20 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
1313
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
1414
import com.bumptech.glide.request.RequestOptions
1515
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
16-
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
17-
import com.simplemobiletools.commons.dialogs.FilePickerDialog
18-
import com.simplemobiletools.commons.dialogs.PropertiesDialog
19-
import com.simplemobiletools.commons.dialogs.RenameItemDialog
16+
import com.simplemobiletools.commons.dialogs.*
2017
import com.simplemobiletools.commons.extensions.*
2118
import com.simplemobiletools.commons.helpers.CONFLICT_OVERWRITE
2219
import com.simplemobiletools.commons.helpers.CONFLICT_SKIP
2320
import com.simplemobiletools.commons.helpers.OTG_PATH
2421
import com.simplemobiletools.commons.models.FileDirItem
22+
import com.simplemobiletools.commons.models.RadioItem
2523
import com.simplemobiletools.commons.views.FastScroller
2624
import com.simplemobiletools.commons.views.MyRecyclerView
2725
import com.simplemobiletools.filemanager.R
2826
import com.simplemobiletools.filemanager.activities.SimpleActivity
2927
import com.simplemobiletools.filemanager.dialogs.CompressAsDialog
3028
import com.simplemobiletools.filemanager.extensions.*
31-
import com.simplemobiletools.filemanager.helpers.RootHelpers
29+
import com.simplemobiletools.filemanager.helpers.*
3230
import com.simplemobiletools.filemanager.interfaces.ItemOperationsListener
3331
import com.stericson.RootTools.RootTools
3432
import kotlinx.android.synthetic.main.list_item.view.*
@@ -65,6 +63,7 @@ class ItemsAdapter(activity: SimpleActivity, var fileDirItems: MutableList<FileD
6563
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
6664
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
6765
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
66+
findItem(R.id.cab_open_as).isVisible = isOneFileSelected()
6867
findItem(R.id.cab_set_as).isVisible = isOneFileSelected()
6968

7069
checkHideBtnVisibility(this)
@@ -92,7 +91,7 @@ class ItemsAdapter(activity: SimpleActivity, var fileDirItems: MutableList<FileD
9291
R.id.cab_copy_path -> copyPath()
9392
R.id.cab_set_as -> setAs()
9493
R.id.cab_open_with -> openWith()
95-
R.id.cab_open_as -> openAsText()
94+
R.id.cab_open_as -> openAs()
9695
R.id.cab_copy_to -> copyMoveTo(true)
9796
R.id.cab_move_to -> copyMoveTo(false)
9897
R.id.cab_compress -> compressSelection()
@@ -224,8 +223,18 @@ class ItemsAdapter(activity: SimpleActivity, var fileDirItems: MutableList<FileD
224223
activity.tryOpenPathIntent(getSelectedMedia().first().path, true)
225224
}
226225

227-
private fun openAsText() {
228-
activity.tryOpenPathIntent(getSelectedMedia().first().path, false, true)
226+
private fun openAs() {
227+
val res = activity.resources
228+
val items = arrayListOf(
229+
RadioItem(OPEN_AS_TEXT, res.getString(R.string.text_file)),
230+
RadioItem(OPEN_AS_IMAGE, res.getString(R.string.image_file)),
231+
RadioItem(OPEN_AS_AUDIO, res.getString(R.string.audio_file)),
232+
RadioItem(OPEN_AS_VIDEO, res.getString(R.string.video_file)),
233+
RadioItem(OPEN_AS_OTHER, res.getString(R.string.other_file)))
234+
235+
RadioGroupDialog(activity, items) {
236+
activity.tryOpenPathIntent(getSelectedMedia().first().path, false, it as Int)
237+
}
229238
}
230239

231240
private fun copyMoveTo(isCopyOperation: Boolean) {

app/src/main/kotlin/com/simplemobiletools/filemanager/extensions/Activity.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import com.simplemobiletools.commons.activities.BaseSimpleActivity
99
import com.simplemobiletools.commons.extensions.*
1010
import com.simplemobiletools.commons.helpers.isNougatPlus
1111
import com.simplemobiletools.filemanager.BuildConfig
12+
import com.simplemobiletools.filemanager.helpers.*
1213
import java.io.File
1314
import java.util.*
1415

1516
fun Activity.sharePaths(paths: ArrayList<String>) {
1617
sharePathsIntent(paths, BuildConfig.APPLICATION_ID)
1718
}
1819

19-
fun Activity.tryOpenPathIntent(path: String, forceChooser: Boolean, openAsText: Boolean = false) {
20+
fun Activity.tryOpenPathIntent(path: String, forceChooser: Boolean, openAsType: Int = OPEN_AS_DEFAULT) {
2021
if (!forceChooser && path.endsWith(".apk", true)) {
2122
val uri = if (isNougatPlus()) {
2223
FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", File(path))
@@ -35,13 +36,21 @@ fun Activity.tryOpenPathIntent(path: String, forceChooser: Boolean, openAsText:
3536
}
3637
}
3738
} else {
38-
openPath(path, forceChooser, openAsText)
39+
openPath(path, forceChooser, openAsType)
3940
}
4041
}
4142

42-
fun Activity.openPath(path: String, forceChooser: Boolean, openAsText: Boolean = false) {
43-
val mimeType = if (openAsText) "text/plain" else ""
44-
openPathIntent(path, forceChooser, BuildConfig.APPLICATION_ID, mimeType)
43+
fun Activity.openPath(path: String, forceChooser: Boolean, openAsType: Int = OPEN_AS_DEFAULT) {
44+
openPathIntent(path, forceChooser, BuildConfig.APPLICATION_ID, getMimeType(openAsType))
45+
}
46+
47+
private fun getMimeType(type: Int) = when (type) {
48+
OPEN_AS_DEFAULT -> ""
49+
OPEN_AS_TEXT -> "text/*"
50+
OPEN_AS_IMAGE -> "image/*"
51+
OPEN_AS_AUDIO -> "audio/*"
52+
OPEN_AS_VIDEO -> "video/*"
53+
else -> "*/*"
4554
}
4655

4756
fun Activity.setAs(path: String) {

app/src/main/kotlin/com/simplemobiletools/filemanager/helpers/Constants.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,11 @@ const val SORT_FOLDER_PREFIX = "sort_folder_"
1010
const val TEMPORARILY_SHOW_HIDDEN = "temporarily_show_hidden"
1111
const val IS_ROOT_AVAILABLE = "is_root_available"
1212
const val ENABLE_ROOT_ACCESS = "enable_root_access"
13+
14+
// open as
15+
const val OPEN_AS_DEFAULT = 0
16+
const val OPEN_AS_TEXT = 1
17+
const val OPEN_AS_IMAGE = 2
18+
const val OPEN_AS_AUDIO = 3
19+
const val OPEN_AS_VIDEO = 4
20+
const val OPEN_AS_OTHER = 5

0 commit comments

Comments
 (0)