mirror of
https://github.com/mauiaaron/apple2.git
synced 2025-02-24 10:29:06 +00:00
Add intent-filter and code to handle inserting disk images
- Appears to work from Cyanogenmod's file browser =P
This commit is contained in:
parent
fd0df1274a
commit
446d4817bd
@ -15,6 +15,7 @@
|
|||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@drawable/ic_launcher"
|
android:icon="@drawable/ic_launcher"
|
||||||
android:label="@string/app_name" >
|
android:label="@string/app_name" >
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.deadc0de.apple2ix.Apple2Activity"
|
android:name="org.deadc0de.apple2ix.Apple2Activity"
|
||||||
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation"
|
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation"
|
||||||
@ -23,9 +24,30 @@
|
|||||||
android:windowSoftInputMode="adjustResize" >
|
android:windowSoftInputMode="adjustResize" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/x-gzip" android:pathPattern="/.*\\.nib\\.gz" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/x-gzip" android:pathPattern="/.*\\.dsk\\.gz" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/x-gzip" android:pathPattern="/.*\\.do\\.gz" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/x-gzip" android:pathPattern="/.*\\.po\\.gz" />
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:scheme="file" /> <!-- catch-all since I can't get the following to work because ... Android -->
|
||||||
|
<!--
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/octet-stream" android:pathPattern="/.*\\.nib" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/octet-stream" android:pathPattern="/.*\\.dsk" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/octet-stream" android:pathPattern="/.*\\.do" />
|
||||||
|
<data android:scheme="file" android:host="*" android:mimeType="application/octet-stream" android:pathPattern="/.*\\.po" />
|
||||||
|
-->
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
@ -14,8 +14,10 @@ package org.deadc0de.apple2ix;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.StrictMode;
|
import android.os.StrictMode;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -25,8 +27,11 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.deadc0de.apple2ix.basic.BuildConfig;
|
import org.deadc0de.apple2ix.basic.BuildConfig;
|
||||||
@ -408,6 +413,18 @@ public class Apple2Activity extends Activity {
|
|||||||
nativeGraphicsInitialized(w, h);
|
nativeGraphicsInitialized(w, h);
|
||||||
|
|
||||||
showSplashScreen();
|
showSplashScreen();
|
||||||
|
|
||||||
|
Intent intent = getIntent();
|
||||||
|
String path = null;
|
||||||
|
if (intent != null) {
|
||||||
|
Uri data = intent.getData();
|
||||||
|
if (data != null) {
|
||||||
|
path = data.getPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (path != null && Apple2DisksMenu.hasDiskExtension(path)) {
|
||||||
|
handleInsertDiskIntent(path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showMainMenu() {
|
public void showMainMenu() {
|
||||||
@ -424,6 +441,57 @@ public class Apple2Activity extends Activity {
|
|||||||
return mMainMenu;
|
return mMainMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleInsertDiskIntent(final String path) {
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (Apple2Activity.this) {
|
||||||
|
if (mMainMenu == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String diskPath = path;
|
||||||
|
File diskFile = new File(diskPath);
|
||||||
|
if (!diskFile.canRead()) {
|
||||||
|
Toast.makeText(Apple2Activity.this, Apple2Activity.this.getString(R.string.disk_insert_could_not_read), Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Apple2Preferences.CURRENT_DISK_A_RO.saveBoolean(Apple2Activity.this, true);
|
||||||
|
final int len = diskPath.length();
|
||||||
|
final String suffix = diskPath.substring(len - 3, len);
|
||||||
|
if (suffix.equalsIgnoreCase(".gz")) { // HACK FIXME TODO : small amount of code duplication of Apple2DisksMenu
|
||||||
|
diskPath = diskPath.substring(0, len - 3);
|
||||||
|
}
|
||||||
|
Apple2Preferences.CURRENT_DISK_A.saveString(Apple2Activity.this, diskPath);
|
||||||
|
|
||||||
|
Apple2DisksMenu disksMenu = mMainMenu.getDisksMenu();
|
||||||
|
while (disksMenu.popPathStack() != null) {
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
String storageDir = Apple2DisksMenu.getExternalStorageDirectory().getAbsolutePath();
|
||||||
|
if (diskPath.contains(storageDir)) {
|
||||||
|
diskPath = diskPath.replace(storageDir + File.separator, "");
|
||||||
|
disksMenu.pushPathStack(storageDir);
|
||||||
|
}
|
||||||
|
StringTokenizer tokenizer = new StringTokenizer(diskPath, File.separator);
|
||||||
|
while (tokenizer.hasMoreTokens()) {
|
||||||
|
String token = tokenizer.nextToken();
|
||||||
|
if (token.equals("")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (Apple2DisksMenu.hasDiskExtension(token)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
disksMenu.pushPathStack(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
Toast.makeText(Apple2Activity.this, Apple2Activity.this.getString(R.string.disk_insert_toast), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void showSplashScreen() {
|
private void showSplashScreen() {
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
<string name="diskA">Drive 1</string>
|
<string name="diskA">Drive 1</string>
|
||||||
<string name="diskB">Drive 2</string>
|
<string name="diskB">Drive 2</string>
|
||||||
<string name="disk_eject">Eject</string>
|
<string name="disk_eject">Eject</string>
|
||||||
|
<string name="disk_insert_toast">Inserted disk in drive 1 read-only</string>
|
||||||
|
<string name="disk_insert_could_not_read">OOPS, could not read the disk image!</string>
|
||||||
<string name="disk_read_only">Read only</string>
|
<string name="disk_read_only">Read only</string>
|
||||||
<string name="disk_read_write">Read/write</string>
|
<string name="disk_read_write">Read/write</string>
|
||||||
<string name="emulation_continue">Continue…</string>
|
<string name="emulation_continue">Continue…</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user