Skip to content

Commit 267fac2

Browse files
author
Andrey
committed
Implement SMB host navigation
Added support to connect to an SMB host, list available shares, and navigate through folders. Users can now browse network drives directly from the app.
1 parent 9a03376 commit 267fac2

File tree

11 files changed

+606
-2
lines changed

11 files changed

+606
-2
lines changed

app/build.gradle.kts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ android {
4646
baselineProfile {
4747
dexLayoutOptimization = true
4848
}
49+
50+
packaging {
51+
resources {
52+
// Ignorar archivos duplicados META-INF que causan conflictos
53+
excludes += listOf(
54+
"META-INF/versions/9/OSGI-INF/MANIFEST.MF",
55+
"META-INF/DEPENDENCIES",
56+
"META-INF/LICENSE",
57+
"META-INF/LICENSE.txt",
58+
"META-INF/NOTICE",
59+
"META-INF/NOTICE.txt",
60+
"META-INF/*.kotlin_module"
61+
)
62+
}
63+
}
4964
}
5065

5166
dependencies {
@@ -106,4 +121,10 @@ dependencies {
106121
implementation(libs.gson)
107122
implementation(libs.storage)
108123
implementation(libs.zip4j)
124+
125+
//SMB Support
126+
implementation(libs.smbj)
127+
implementation(libs.dcerpc) {
128+
exclude(group = "com.google.code.findbugs", module = "jsr305")
129+
}
109130
}

app/src/main/java/com/raival/compose/file/explorer/screen/main/MainActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import com.raival.compose.file.explorer.screen.main.tab.files.holder.LocalFileHo
5050
import com.raival.compose.file.explorer.screen.main.tab.files.ui.FilesTabContentView
5151
import com.raival.compose.file.explorer.screen.main.tab.home.HomeTab
5252
import com.raival.compose.file.explorer.screen.main.tab.home.ui.HomeTabContentView
53+
import com.raival.compose.file.explorer.screen.main.ui.AddSMBDriveDialog
5354
import com.raival.compose.file.explorer.screen.main.ui.AppInfoDialog
5455
import com.raival.compose.file.explorer.screen.main.ui.JumpToPathDialog
5556
import com.raival.compose.file.explorer.screen.main.ui.SaveTextEditorFilesDialog
@@ -127,6 +128,12 @@ class MainActivity : BaseActivity() {
127128
onDismiss = { mainActivityManager.toggleJumpToPathDialog(false) }
128129
)
129130

131+
AddSMBDriveDialog(
132+
show = mainActivityState.showAddSMBDriveDialog,
133+
onDismiss = { mainActivityManager.toggleAddSMBDriveDialog(false) }
134+
)
135+
136+
130137
AppInfoDialog(
131138
show = mainActivityState.showAppInfoDialog,
132139
hasNewUpdate = mainActivityState.hasNewUpdate,

app/src/main/java/com/raival/compose/file/explorer/screen/main/MainActivityManager.kt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.raival.compose.file.explorer.screen.main.tab.Tab
2121
import com.raival.compose.file.explorer.screen.main.tab.apps.AppsTab
2222
import com.raival.compose.file.explorer.screen.main.tab.files.FilesTab
2323
import com.raival.compose.file.explorer.screen.main.tab.files.holder.LocalFileHolder
24+
import com.raival.compose.file.explorer.screen.main.tab.files.holder.SMBFileHolder
2425
import com.raival.compose.file.explorer.screen.main.tab.files.provider.StorageProvider
2526
import com.raival.compose.file.explorer.screen.main.tab.home.HomeTab
2627
import kotlinx.coroutines.CoroutineScope
@@ -223,12 +224,36 @@ class MainActivityManager {
223224
openFile(file, context)
224225
}
225226

227+
228+
fun addSmbDrive(
229+
host: String,
230+
username: String,
231+
password: String,
232+
anonymous: Boolean,
233+
domain: String,
234+
context: Context
235+
): Boolean {
236+
return try {
237+
openSMBFile(SMBFileHolder(host, username, password, anonymous, domain, ""), context)
238+
} catch (e: Exception) {
239+
false
240+
}
241+
}
242+
226243
private fun openFile(file: LocalFileHolder, context: Context) {
227244
if (file.exists()) {
228245
addTabAndSelect(FilesTab(file, context))
229246
}
230247
}
231248

249+
private fun openSMBFile(file: SMBFileHolder, context: Context) : Boolean {
250+
return if (file.exists()) {
251+
addTabAndSelect(FilesTab(file, context))
252+
true
253+
}else
254+
false
255+
}
256+
232257
fun resumeActiveTab() {
233258
getActiveTab()?.onTabResumed()
234259
}
@@ -513,6 +538,14 @@ class MainActivityManager {
513538
}
514539
}
515540

541+
fun toggleAddSMBDriveDialog(show: Boolean) {
542+
_state.update {
543+
it.copy(
544+
showAddSMBDriveDialog = show
545+
)
546+
}
547+
}
548+
516549
fun toggleAppInfoDialog(show: Boolean) {
517550
_state.update {
518551
it.copy(

app/src/main/java/com/raival/compose/file/explorer/screen/main/MainActivityState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class MainActivityState(
1212
val subtitle: String = emptyString,
1313
val showAppInfoDialog: Boolean = false,
1414
val showJumpToPathDialog: Boolean = false,
15+
val showAddSMBDriveDialog: Boolean = false,
1516
val showSaveEditorFilesDialog: Boolean = false,
1617
val showStartupTabsDialog: Boolean = false,
1718
val isSavingFiles: Boolean = false,

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/FilesTab.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.raival.compose.file.explorer.screen.main.MainActivity
2828
import com.raival.compose.file.explorer.screen.main.tab.Tab
2929
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ContentHolder
3030
import com.raival.compose.file.explorer.screen.main.tab.files.holder.LocalFileHolder
31+
import com.raival.compose.file.explorer.screen.main.tab.files.holder.SMBFileHolder
3132
import com.raival.compose.file.explorer.screen.main.tab.files.holder.VirtualFileHolder
3233
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ZipFileHolder
3334
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileListCategory
@@ -774,4 +775,9 @@ class FilesTab(
774775
targetFile = file
775776
_dialogsState.update { it.copy(showImportPrefsDialog = file != null) }
776777
}
778+
779+
fun toggleImportPrefsDialogSMB(file: SMBFileHolder?) {
780+
targetFile = file
781+
_dialogsState.update { it.copy(showImportPrefsDialog = file != null) }
782+
}
777783
}

0 commit comments

Comments
 (0)