Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
d297ab1059
|
|||
|
371e38dc2f
|
|||
|
1e850a2d1a
|
|||
|
4cd9202609
|
|||
|
6becf2907e
|
10
CHANGELOG.md
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.3] - 2025-03-11
|
||||
|
||||
### Changed
|
||||
- Fix default image dir to be /sdcard/isodroid instead of /sdcard/isodrive
|
||||
|
||||
## [1.2] - 2025-03-10
|
||||
|
||||
### Changed
|
||||
- Fix app name displaying as "ISO Drive" instead of "ISO Droid" in some places
|
||||
|
||||
## [1.1] - 2025-03-10
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -35,7 +35,7 @@ Android app for mounting ISO/IMG files as USB mass storage or CD-ROM devices on
|
||||
1. Download the APK from the links above
|
||||
2. Install the APK on your rooted Android device
|
||||
3. Grant root access when prompted
|
||||
4. Place your ISO/IMG files in `/sdcard/isodrive/` (or configure a different directory in settings)
|
||||
4. Place your ISO/IMG files in `/sdcard/isodroid/` (or configure a different directory in settings)
|
||||
|
||||
> **Note**: The app includes a bundled `isodrive` binary. No additional setup required!
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ android {
|
||||
minSdk = 26
|
||||
targetSdk = 36
|
||||
versionCode = 1
|
||||
versionName = "1.1"
|
||||
versionName = "1.3"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ fun MainScreen(
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
title = { Text("ISO Drive") },
|
||||
title = { Text("ISO Droid") },
|
||||
colors = TopAppBarDefaults.topAppBarColors(
|
||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
||||
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer
|
||||
|
||||
@@ -231,11 +231,11 @@ fun SettingsScreen(
|
||||
Spacer(modifier = Modifier.width(12.dp))
|
||||
Column {
|
||||
Text(
|
||||
text = "ISO Drive",
|
||||
text = "ISO Droid",
|
||||
style = MaterialTheme.typography.titleMedium
|
||||
)
|
||||
Text(
|
||||
text = "Version 1.0",
|
||||
text = "Version 1.2",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
@@ -259,13 +259,13 @@ fun SettingsScreen(
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
Text(
|
||||
text = "git.shihaam.dev/shihaam/ISODrive",
|
||||
text = "git.shihaam.dev/shihaam/ISODroid",
|
||||
style = MaterialTheme.typography.bodySmall.copy(
|
||||
textDecoration = TextDecoration.Underline
|
||||
),
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.clickable {
|
||||
openUrl("https://git.shihaam.dev/shihaam/ISODrive")
|
||||
openUrl("https://git.shihaam.dev/shihaam/ISODroid")
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -306,7 +306,7 @@ fun SettingsScreen(
|
||||
}
|
||||
}
|
||||
Text(
|
||||
text = "The CLI tool that powers ISO Drive. Mounts ISO/IMG files as bootable USB devices using configfs.",
|
||||
text = "The CLI tool that powers ISO Droid. Mounts ISO/IMG files as bootable USB devices using configfs.",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(top = 8.dp)
|
||||
|
||||
@@ -8,6 +8,7 @@ package sh.sar.isodroid.ui.screens
|
||||
import android.Manifest
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Environment
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@@ -97,7 +98,7 @@ private fun WelcomeStep(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
Text(
|
||||
text = "Welcome to ISO Drive",
|
||||
text = "Welcome to ISO Droid",
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
@@ -152,7 +153,7 @@ private fun RootAccessStep(
|
||||
title = "Root Access",
|
||||
description = when (hasRoot) {
|
||||
false -> "Root access was denied. The app requires root to mount ISO files. You can try again or skip and grant access later from your root manager."
|
||||
else -> "ISO Drive needs superuser (root) access to mount ISO files as USB devices. This is required because mounting USB gadgets is a system-level operation."
|
||||
else -> "ISO Droid needs superuser (root) access to mount ISO files as USB devices. This is required because mounting USB gadgets is a system-level operation."
|
||||
},
|
||||
granted = hasRoot
|
||||
)
|
||||
@@ -258,7 +259,7 @@ private fun NotificationStep(
|
||||
description = when {
|
||||
permanentlyDenied -> "Notification permission was denied. You can enable it later in system settings if you change your mind."
|
||||
wasDenied -> "Notification permission was denied. You can try again or continue without notifications."
|
||||
else -> "ISO Drive shows a notification when an ISO is mounted, with a quick unmount button. This helps you keep track of the mount status."
|
||||
else -> "ISO Droid shows a notification when an ISO is mounted, with a quick unmount button. This helps you keep track of the mount status."
|
||||
},
|
||||
granted = if (wasDenied) false else if (hasPermission) true else null
|
||||
)
|
||||
@@ -323,7 +324,7 @@ private fun CompleteStep(
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Text(
|
||||
text = "ISO Drive is ready to use. Place your ISO or IMG files in the isodrive folder and start mounting.",
|
||||
text = "ISO Droid is ready to use. Place your ISO or IMG files in the isodroid folder and start mounting.",
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
@@ -332,7 +333,7 @@ private fun CompleteStep(
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
|
||||
Text(
|
||||
text = "Default directory: /sdcard/isodrive/",
|
||||
text = "Default directory: ${Environment.getExternalStorageDirectory().absolutePath}/isodroid/",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f)
|
||||
@@ -344,7 +345,7 @@ private fun CompleteStep(
|
||||
onClick = onFinish,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text("Start Using ISO Drive")
|
||||
Text("Start Using ISO Droid")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
|
||||
companion object {
|
||||
private val KEY_ISO_DIRECTORY = stringPreferencesKey("iso_directory")
|
||||
private val DEFAULT_ISO_DIRECTORY = "${Environment.getExternalStorageDirectory().absolutePath}/isodrive"
|
||||
private val DEFAULT_ISO_DIRECTORY = "${Environment.getExternalStorageDirectory().absolutePath}/isodroid"
|
||||
}
|
||||
|
||||
private var initialized = false
|
||||
|
||||
@@ -229,13 +229,13 @@ fun toCommandArgs(): List<String> {
|
||||
**Example commands:**
|
||||
```bash
|
||||
# Mount as read-only mass storage
|
||||
isodrive "/sdcard/isodrive/ubuntu.iso" -configfs
|
||||
isodrive "/sdcard/isodroid/ubuntu.iso" -configfs
|
||||
|
||||
# Mount as writable drive
|
||||
isodrive "/sdcard/isodrive/drive.img" -rw -configfs
|
||||
isodrive "/sdcard/isodroid/drive.img" -rw -configfs
|
||||
|
||||
# Mount as CD-ROM
|
||||
isodrive "/sdcard/isodrive/windows.iso" -cdrom -configfs
|
||||
isodrive "/sdcard/isodroid/windows.iso" -cdrom -configfs
|
||||
```
|
||||
|
||||
## Event System
|
||||
@@ -338,7 +338,7 @@ private val KEY_ISO_DIRECTORY = stringPreferencesKey("iso_directory")
|
||||
```
|
||||
|
||||
Stores:
|
||||
- Custom ISO directory path (default: `/sdcard/isodrive/`)
|
||||
- Custom ISO directory path (default: `/sdcard/isodroid/`)
|
||||
|
||||
### SharedPreferences
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 109 KiB |
@@ -16,7 +16,7 @@ Requirements:
|
||||
* Android 8.0+ (API 26)
|
||||
|
||||
Usage:
|
||||
1. Place your ISO/IMG files in /sdcard/isodrive/
|
||||
1. Place your ISO/IMG files in /sdcard/isodroid/
|
||||
2. Select an ISO/IMG file from the list
|
||||
3. Choose mount options (Mass Storage or CD-ROM)
|
||||
4. Tap Mount
|
||||
|
||||
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 124 KiB |