Skip to content

Commit de71cef

Browse files
committed
rewrite SelectFolderDialog to kotlin
1 parent 2e101a1 commit de71cef

File tree

3 files changed

+127
-146
lines changed

3 files changed

+127
-146
lines changed

app/src/main/java/com/simplemobiletools/filemanager/dialogs/SelectFolderDialog.java

Lines changed: 0 additions & 145 deletions
This file was deleted.
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package com.simplemobiletools.filemanager.dialogs
2+
3+
import android.app.Activity
4+
import android.app.Dialog
5+
import android.content.Intent
6+
import android.os.Bundle
7+
import android.support.v4.app.DialogFragment
8+
import android.support.v7.app.AlertDialog
9+
import android.view.View
10+
import com.simplemobiletools.filemanager.Config
11+
import com.simplemobiletools.filemanager.R
12+
import com.simplemobiletools.filemanager.Utils
13+
import com.simplemobiletools.filemanager.adapters.ItemsAdapter
14+
import com.simplemobiletools.filemanager.fragments.ItemsFragment
15+
import com.simplemobiletools.filemanager.models.FileDirItem
16+
import kotlinx.android.synthetic.main.directory_picker.view.*
17+
import java.io.File
18+
import java.util.*
19+
import kotlin.comparisons.compareBy
20+
21+
class SelectFolderDialog : DialogFragment() {
22+
companion object {
23+
lateinit var mPath: String
24+
var mFirstUpdate: Boolean = true
25+
26+
fun newInstance(path: String): SelectFolderDialog {
27+
mPath = path
28+
mFirstUpdate = true
29+
return SelectFolderDialog()
30+
}
31+
}
32+
33+
lateinit var dialog: View
34+
35+
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
36+
dialog = activity.layoutInflater.inflate(R.layout.directory_picker, null)
37+
38+
updateItems()
39+
setupBreadcrumbs()
40+
41+
return AlertDialog.Builder(activity)
42+
.setTitle(resources.getString(R.string.select_destination))
43+
.setView(dialog)
44+
.setPositiveButton(R.string.ok) { dialog, which -> sendResult() }
45+
.setNegativeButton(R.string.cancel, null)
46+
.create()
47+
}
48+
49+
private fun updateItems() {
50+
var items = getItems(mPath)
51+
if (!containsDirectory(items) && !mFirstUpdate) {
52+
sendResult()
53+
return
54+
}
55+
56+
items = items.sortedWith(compareBy({ !it.isDirectory }, { it.name.toLowerCase() }))
57+
58+
val adapter = ItemsAdapter(context, items)
59+
dialog.directory_picker_list.adapter = adapter
60+
dialog.directory_picker_breadcrumbs.setInitialBreadcrumb(mPath)
61+
dialog.directory_picker_list.setOnItemClickListener { adapterView, view, position, id ->
62+
val item = items[position]
63+
if (item.isDirectory) {
64+
mPath = item.path
65+
updateItems()
66+
}
67+
}
68+
69+
mFirstUpdate = false
70+
}
71+
72+
private fun sendResult() {
73+
val intent = Intent()
74+
intent.putExtra(ItemsFragment.SELECT_FOLDER_PATH, mPath)
75+
targetFragment.onActivityResult(ItemsFragment.SELECT_FOLDER_REQUEST, Activity.RESULT_OK, intent)
76+
dismiss()
77+
}
78+
79+
private fun setupBreadcrumbs() {
80+
dialog.directory_picker_breadcrumbs.setListener { id ->
81+
val item = dialog.directory_picker_breadcrumbs.getChildAt(id).tag as FileDirItem
82+
mPath = item.path
83+
updateItems()
84+
}
85+
}
86+
87+
private fun getItems(path: String): List<FileDirItem> {
88+
val showHidden = Config.newInstance(context).showHidden
89+
val items = ArrayList<FileDirItem>()
90+
val base = File(path)
91+
val files = base.listFiles()
92+
if (files != null) {
93+
for (file in files) {
94+
if (!file.isDirectory)
95+
continue
96+
97+
if (!showHidden && file.isHidden)
98+
continue
99+
100+
val curPath = file.absolutePath
101+
val curName = Utils.getFilename(curPath)
102+
val children = getChildren(file)
103+
val size = file.length()
104+
105+
items.add(FileDirItem(curPath, curName, file.isDirectory, children, size))
106+
}
107+
}
108+
return items
109+
}
110+
111+
private fun getChildren(file: File): Int {
112+
if (file.listFiles() == null || !file.isDirectory)
113+
return 0
114+
115+
return file.listFiles().size
116+
}
117+
118+
private fun containsDirectory(items: List<FileDirItem>): Boolean {
119+
for (item in items) {
120+
if (item.isDirectory) {
121+
return true
122+
}
123+
}
124+
return false
125+
}
126+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ private void notifyDeletion(int cnt) {
543543
private View.OnClickListener destinationPicker = new View.OnClickListener() {
544544
@Override
545545
public void onClick(final View view) {
546-
SelectFolderDialog dialog = SelectFolderDialog.newInstance(mCopyDestinationPath);
546+
SelectFolderDialog dialog = SelectFolderDialog.Companion.newInstance(mCopyDestinationPath);
547547
dialog.setTargetFragment(ItemsFragment.this, SELECT_FOLDER_REQUEST);
548548
dialog.show(getFragmentManager(), "selectFolder");
549549
}

0 commit comments

Comments
 (0)