Skip to content

Commit 4845414

Browse files
committed
lets require only a file path, instead of FileDir for getting the properties
1 parent d55df91 commit 4845414

File tree

4 files changed

+93
-70
lines changed

4 files changed

+93
-70
lines changed

app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ private void displayPropertiesDialog() {
392392
return;
393393

394394
final Config config = Config.newInstance(getContext());
395-
new PropertiesDialog(getContext(), item, config.getShowHidden());
395+
new PropertiesDialog(getContext(), item.getPath(), config.getShowHidden());
396396
}
397397

398398
private void displayRenameDialog() {

app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/PropertiesDialog.kt

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,48 +8,45 @@ import android.view.LayoutInflater
88
import android.view.ViewGroup
99
import com.simplemobiletools.filemanager.Config
1010
import com.simplemobiletools.filemanager.R
11-
import com.simplemobiletools.filemanager.extensions.formatSize
12-
import com.simplemobiletools.filepicker.models.FileDirItem
11+
import com.simplemobiletools.filemanager.extensions.*
1312
import kotlinx.android.synthetic.main.item_properties.view.*
1413
import kotlinx.android.synthetic.main.property_item.view.*
1514
import java.io.File
1615
import java.util.*
1716

1817
class PropertiesDialog() {
1918
lateinit var mContext: Context
20-
lateinit var mItem: FileDirItem
2119
lateinit var mInflater: LayoutInflater
2220
lateinit var mPropertyView: ViewGroup
2321
lateinit var mResources: Resources
2422

2523
private var mCountHiddenItems = false
2624
private var mFilesCnt = 0
2725

28-
constructor(context: Context, item: FileDirItem, countHiddenItems: Boolean = false) : this() {
26+
constructor(context: Context, path: String, countHiddenItems: Boolean = false) : this() {
2927
mContext = context
30-
mItem = item
3128
mCountHiddenItems = countHiddenItems
3229
mInflater = LayoutInflater.from(context)
3330
mResources = mContext.resources
3431

35-
val file = File(mItem.path)
36-
val title = if (mItem.isDirectory) R.string.directory_properties else R.string.file_properties
32+
val file = File(path)
33+
val title = if (file.isDirectory) R.string.directory_properties else R.string.file_properties
3734
mPropertyView = mInflater.inflate(R.layout.item_properties, null) as ViewGroup
3835

39-
addProperty(R.string.name, mItem.name)
40-
addProperty(R.string.path, mItem.path)
41-
addProperty(R.string.size, getItemSize())
36+
addProperty(R.string.name, file.name)
37+
addProperty(R.string.path, path)
38+
addProperty(R.string.size, getItemSize(file))
4239
addProperty(R.string.last_modified, formatLastModified(file.lastModified()))
4340

44-
if (mItem.isDirectory) {
41+
if (file.isDirectory) {
4542
addProperty(R.string.files_count, mFilesCnt.toString())
46-
} else if (mItem.isImage()) {
47-
addProperty(R.string.resolution, mItem.getImageResolution())
48-
} else if (mItem.isAudio()) {
49-
addProperty(R.string.duration, mItem.getDuration())
50-
} else if (mItem.isVideo()) {
51-
addProperty(R.string.duration, mItem.getDuration())
52-
addProperty(R.string.resolution, mItem.getVideoResolution())
43+
} else if (file.isImage()) {
44+
addProperty(R.string.resolution, file.getImageResolution())
45+
} else if (file.isAudio()) {
46+
addProperty(R.string.duration, file.getDuration())
47+
} else if (file.isVideo()) {
48+
addProperty(R.string.duration, file.getDuration())
49+
addProperty(R.string.resolution, file.getVideoResolution())
5350
}
5451

5552
AlertDialog.Builder(context)
@@ -67,13 +64,13 @@ class PropertiesDialog() {
6764
mPropertyView.properties_holder.addView(view)
6865
}
6966

70-
private fun getItemSize(): String {
71-
if (mItem.isDirectory) {
67+
private fun getItemSize(file: File): String {
68+
if (file.isDirectory) {
7269
mCountHiddenItems = Config.newInstance(mContext).showHidden
73-
return getDirectorySize(File(mItem.path)).formatSize()
70+
return getDirectorySize(File(file.path)).formatSize()
7471
}
7572

76-
return mItem.size.formatSize()
73+
return file.length().formatSize()
7774
}
7875

7976
private fun formatLastModified(ts: Long): String {
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.simplemobiletools.filemanager.extensions
2+
3+
import android.graphics.Bitmap
4+
import android.graphics.BitmapFactory
5+
import android.media.MediaMetadataRetriever
6+
import java.io.File
7+
import java.util.*
8+
9+
fun File.isGif() = name.toLowerCase().endsWith(".gif")
10+
fun File.isVideo() = getMimeType().startsWith("video")
11+
fun File.isAudio() = getMimeType().startsWith("audio")
12+
13+
fun File.isImage(): Boolean {
14+
val options = BitmapFactory.Options()
15+
options.inJustDecodeBounds = true
16+
BitmapFactory.decodeFile(path, options)
17+
return options.outWidth != -1 && options.outHeight != -1
18+
}
19+
20+
fun File.getMimeType(): String {
21+
try {
22+
val retriever = MediaMetadataRetriever()
23+
retriever.setDataSource(path)
24+
return retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)
25+
} catch (ignored: Exception) {
26+
27+
}
28+
return ""
29+
}
30+
31+
fun File.getDuration(): String {
32+
val retriever = MediaMetadataRetriever()
33+
retriever.setDataSource(path)
34+
val time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
35+
val timeInMillisec = java.lang.Long.parseLong(time)
36+
return getFormattedDuration((timeInMillisec / 1000).toInt())
37+
}
38+
39+
fun File.getVideoResolution(): String {
40+
try {
41+
val retriever = MediaMetadataRetriever()
42+
retriever.setDataSource(path)
43+
val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
44+
val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
45+
return "$width x $height"
46+
} catch (ignored: Exception) {
47+
48+
}
49+
return ""
50+
}
51+
52+
fun File.getImageResolution(): String {
53+
val bitmap: Bitmap? = BitmapFactory.decodeFile(path)
54+
if (bitmap == null)
55+
return ""
56+
57+
return "${bitmap.width} x ${bitmap.height}"
58+
}
59+
60+
private fun getFormattedDuration(duration: Int): String {
61+
val sb = StringBuilder(8)
62+
val hours = duration / (60 * 60)
63+
val minutes = duration % (60 * 60) / 60
64+
val seconds = duration % (60 * 60) % 60
65+
66+
if (duration > 3600) {
67+
sb.append(String.format(Locale.getDefault(), "%02d", hours)).append(":")
68+
}
69+
70+
sb.append(String.format(Locale.getDefault(), "%02d", minutes))
71+
sb.append(":").append(String.format(Locale.getDefault(), "%02d", seconds))
72+
return sb.toString()
73+
}
Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.simplemobiletools.filepicker.models
22

3-
import android.graphics.Bitmap
43
import android.graphics.BitmapFactory
54
import android.media.MediaMetadataRetriever
6-
import java.util.*
75

86
class FileDirItem(val path: String, val name: String, val isDirectory: Boolean, val children: Int, val size: Long) :
97
Comparable<FileDirItem> {
@@ -24,7 +22,6 @@ class FileDirItem(val path: String, val name: String, val isDirectory: Boolean,
2422

2523
fun isGif() = name.toLowerCase().endsWith(".gif")
2624
fun isVideo() = getMimeType().startsWith("video")
27-
fun isAudio() = getMimeType().startsWith("audio")
2825

2926
fun isImage(): Boolean {
3027
val options = BitmapFactory.Options()
@@ -43,48 +40,4 @@ class FileDirItem(val path: String, val name: String, val isDirectory: Boolean,
4340
}
4441
return ""
4542
}
46-
47-
fun getDuration(): String {
48-
val retriever = MediaMetadataRetriever()
49-
retriever.setDataSource(path)
50-
val time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
51-
val timeInMillisec = java.lang.Long.parseLong(time)
52-
return getFormattedDuration((timeInMillisec / 1000).toInt())
53-
}
54-
55-
fun getVideoResolution(): String {
56-
try {
57-
val retriever = MediaMetadataRetriever()
58-
retriever.setDataSource(path)
59-
val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
60-
val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
61-
return "$width x $height"
62-
} catch (ignored: Exception) {
63-
64-
}
65-
return ""
66-
}
67-
68-
fun getImageResolution(): String {
69-
val bitmap: Bitmap? = BitmapFactory.decodeFile(path)
70-
if (bitmap == null)
71-
return ""
72-
73-
return "${bitmap.width} x ${bitmap.height}"
74-
}
75-
76-
private fun getFormattedDuration(duration: Int): String {
77-
val sb = StringBuilder(8)
78-
val hours = duration / (60 * 60)
79-
val minutes = duration % (60 * 60) / 60
80-
val seconds = duration % (60 * 60) % 60
81-
82-
if (duration > 3600) {
83-
sb.append(String.format(Locale.getDefault(), "%02d", hours)).append(":")
84-
}
85-
86-
sb.append(String.format(Locale.getDefault(), "%02d", minutes))
87-
sb.append(":").append(String.format(Locale.getDefault(), "%02d", seconds))
88-
return sb.toString()
89-
}
9043
}

0 commit comments

Comments
 (0)