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/),
|
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).
|
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
|
## [1.1] - 2025-03-10
|
||||||
|
|
||||||
### Changed
|
### 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
|
1. Download the APK from the links above
|
||||||
2. Install the APK on your rooted Android device
|
2. Install the APK on your rooted Android device
|
||||||
3. Grant root access when prompted
|
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!
|
> **Note**: The app includes a bundled `isodrive` binary. No additional setup required!
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ android {
|
|||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "1.1"
|
versionName = "1.3"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ fun MainScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = { Text("ISO Drive") },
|
title = { Text("ISO Droid") },
|
||||||
colors = TopAppBarDefaults.topAppBarColors(
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
||||||
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer
|
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer
|
||||||
|
|||||||
@@ -231,11 +231,11 @@ fun SettingsScreen(
|
|||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
Column {
|
Column {
|
||||||
Text(
|
Text(
|
||||||
text = "ISO Drive",
|
text = "ISO Droid",
|
||||||
style = MaterialTheme.typography.titleMedium
|
style = MaterialTheme.typography.titleMedium
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = "Version 1.0",
|
text = "Version 1.2",
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
@@ -259,13 +259,13 @@ fun SettingsScreen(
|
|||||||
color = MaterialTheme.colorScheme.primary
|
color = MaterialTheme.colorScheme.primary
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = "git.shihaam.dev/shihaam/ISODrive",
|
text = "git.shihaam.dev/shihaam/ISODroid",
|
||||||
style = MaterialTheme.typography.bodySmall.copy(
|
style = MaterialTheme.typography.bodySmall.copy(
|
||||||
textDecoration = TextDecoration.Underline
|
textDecoration = TextDecoration.Underline
|
||||||
),
|
),
|
||||||
color = MaterialTheme.colorScheme.primary,
|
color = MaterialTheme.colorScheme.primary,
|
||||||
modifier = Modifier.clickable {
|
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(
|
||||||
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,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
modifier = Modifier.padding(top = 8.dp)
|
modifier = Modifier.padding(top = 8.dp)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package sh.sar.isodroid.ui.screens
|
|||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.os.Environment
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
@@ -97,7 +98,7 @@ private fun WelcomeStep(
|
|||||||
Spacer(modifier = Modifier.height(24.dp))
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = "Welcome to ISO Drive",
|
text = "Welcome to ISO Droid",
|
||||||
style = MaterialTheme.typography.headlineMedium,
|
style = MaterialTheme.typography.headlineMedium,
|
||||||
fontWeight = FontWeight.Bold
|
fontWeight = FontWeight.Bold
|
||||||
)
|
)
|
||||||
@@ -152,7 +153,7 @@ private fun RootAccessStep(
|
|||||||
title = "Root Access",
|
title = "Root Access",
|
||||||
description = when (hasRoot) {
|
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."
|
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
|
granted = hasRoot
|
||||||
)
|
)
|
||||||
@@ -258,7 +259,7 @@ private fun NotificationStep(
|
|||||||
description = when {
|
description = when {
|
||||||
permanentlyDenied -> "Notification permission was denied. You can enable it later in system settings if you change your mind."
|
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."
|
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
|
granted = if (wasDenied) false else if (hasPermission) true else null
|
||||||
)
|
)
|
||||||
@@ -323,7 +324,7 @@ private fun CompleteStep(
|
|||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
|
|
||||||
Text(
|
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,
|
style = MaterialTheme.typography.bodyLarge,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
@@ -332,7 +333,7 @@ private fun CompleteStep(
|
|||||||
Spacer(modifier = Modifier.height(8.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = "Default directory: /sdcard/isodrive/",
|
text = "Default directory: ${Environment.getExternalStorageDirectory().absolutePath}/isodroid/",
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f)
|
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f)
|
||||||
@@ -344,7 +345,7 @@ private fun CompleteStep(
|
|||||||
onClick = onFinish,
|
onClick = onFinish,
|
||||||
modifier = Modifier.fillMaxWidth()
|
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 {
|
companion object {
|
||||||
private val KEY_ISO_DIRECTORY = stringPreferencesKey("iso_directory")
|
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
|
private var initialized = false
|
||||||
|
|||||||
@@ -229,13 +229,13 @@ fun toCommandArgs(): List<String> {
|
|||||||
**Example commands:**
|
**Example commands:**
|
||||||
```bash
|
```bash
|
||||||
# Mount as read-only mass storage
|
# Mount as read-only mass storage
|
||||||
isodrive "/sdcard/isodrive/ubuntu.iso" -configfs
|
isodrive "/sdcard/isodroid/ubuntu.iso" -configfs
|
||||||
|
|
||||||
# Mount as writable drive
|
# Mount as writable drive
|
||||||
isodrive "/sdcard/isodrive/drive.img" -rw -configfs
|
isodrive "/sdcard/isodroid/drive.img" -rw -configfs
|
||||||
|
|
||||||
# Mount as CD-ROM
|
# Mount as CD-ROM
|
||||||
isodrive "/sdcard/isodrive/windows.iso" -cdrom -configfs
|
isodrive "/sdcard/isodroid/windows.iso" -cdrom -configfs
|
||||||
```
|
```
|
||||||
|
|
||||||
## Event System
|
## Event System
|
||||||
@@ -338,7 +338,7 @@ private val KEY_ISO_DIRECTORY = stringPreferencesKey("iso_directory")
|
|||||||
```
|
```
|
||||||
|
|
||||||
Stores:
|
Stores:
|
||||||
- Custom ISO directory path (default: `/sdcard/isodrive/`)
|
- Custom ISO directory path (default: `/sdcard/isodroid/`)
|
||||||
|
|
||||||
### SharedPreferences
|
### 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)
|
* Android 8.0+ (API 26)
|
||||||
|
|
||||||
Usage:
|
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
|
2. Select an ISO/IMG file from the list
|
||||||
3. Choose mount options (Mass Storage or CD-ROM)
|
3. Choose mount options (Mass Storage or CD-ROM)
|
||||||
4. Tap Mount
|
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 |