5 Commits
v1.1 ... v1.3

19 changed files with 31 additions and 20 deletions

View File

@@ -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

View File

@@ -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!

View File

@@ -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"
} }

View File

@@ -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

View File

@@ -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)

View File

@@ -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")
} }
} }

View File

@@ -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

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 124 KiB