mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-09-29 23:54:53 +00:00
Maintain a menu page stack for simplicity
This commit is contained in:
parent
933ef5533a
commit
fe34a86c35
@ -13,9 +13,7 @@ package org.deadc0de.apple2ix;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
@ -25,23 +23,27 @@ import android.os.StrictMode;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class Apple2Activity extends Activity {
|
public class Apple2Activity extends Activity {
|
||||||
|
|
||||||
private final static String TAG = "Apple2Activity";
|
private final static String TAG = "Apple2Activity";
|
||||||
private final static int BUF_SZ = 4096;
|
private final static int BUF_SZ = 4096;
|
||||||
private final static int SOFTKEYBOARD_THRESHOLD = 50;
|
|
||||||
private final static int MAX_FINGERS = 32;// HACK ...
|
private final static int MAX_FINGERS = 32;// HACK ...
|
||||||
|
|
||||||
private String mDataDir = null;
|
private String mDataDir = null;
|
||||||
|
|
||||||
private Apple2View mView = null;
|
private Apple2View mView = null;
|
||||||
|
private ArrayList<Apple2MenuView> mMenuStack = new ArrayList<Apple2MenuView>();
|
||||||
private AlertDialog mQuitDialog = null;
|
private AlertDialog mQuitDialog = null;
|
||||||
private AlertDialog mRebootDialog = null;
|
private AlertDialog mRebootDialog = null;
|
||||||
|
|
||||||
@ -278,15 +280,14 @@ public class Apple2Activity extends Activity {
|
|||||||
mRebootDialog.dismiss();
|
mRebootDialog.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
// For good measure, get rid of other menus too
|
// Get rid of the menu hierarchy
|
||||||
Apple2SettingsMenu settingsMenu = mView.getSettingsMenu();
|
Apple2MenuView apple2MenuView = null;
|
||||||
if (settingsMenu != null) {
|
do {
|
||||||
settingsMenu.dismissWithoutResume();
|
apple2MenuView = popApple2View();
|
||||||
}
|
if (apple2MenuView != null) {
|
||||||
Apple2DisksMenu disksMenu = mView.getDisksMenu();
|
apple2MenuView.dismiss();
|
||||||
if (disksMenu != null) {
|
}
|
||||||
disksMenu.dismissWithoutResume();
|
} while (apple2MenuView != null);
|
||||||
}
|
|
||||||
|
|
||||||
nativeOnPause();
|
nativeOnPause();
|
||||||
}
|
}
|
||||||
@ -303,21 +304,11 @@ public class Apple2Activity extends Activity {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||||
Apple2SettingsMenu settingsMenu = mView.getSettingsMenu();
|
Apple2MenuView apple2MenuView = popApple2View();
|
||||||
Apple2DisksMenu disksMenu = mView.getDisksMenu();
|
if (apple2MenuView == null) {
|
||||||
if (settingsMenu != null) {
|
mView.showMainMenu();
|
||||||
if (settingsMenu.isShowing()) {
|
} else {
|
||||||
Apple2AudioSettingsMenu audioSubmenu = settingsMenu.getAudioSubmenu();
|
apple2MenuView.dismiss();
|
||||||
if (audioSubmenu.isShowing()) {
|
|
||||||
audioSubmenu.dismiss();
|
|
||||||
} else {
|
|
||||||
settingsMenu.dismiss();
|
|
||||||
}
|
|
||||||
} else if (disksMenu.isShowing()) {
|
|
||||||
disksMenu.dismiss();
|
|
||||||
} else {
|
|
||||||
mView.showMainMenu();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
|
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
|
||||||
@ -421,6 +412,46 @@ public class Apple2Activity extends Activity {
|
|||||||
nativeGraphicsInitialized(w, h);
|
nativeGraphicsInitialized(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void pushApple2View(Apple2MenuView apple2MenuView) {
|
||||||
|
mMenuStack.add(apple2MenuView);
|
||||||
|
View menuView = apple2MenuView.getView();
|
||||||
|
nativeOnPause();
|
||||||
|
addContentView(menuView, new FrameLayout.LayoutParams(getWidth(), getHeight()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Apple2MenuView popApple2View() {
|
||||||
|
int lastIndex = mMenuStack.size()-1;
|
||||||
|
if (lastIndex < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Apple2MenuView apple2MenuView = mMenuStack.remove(lastIndex);
|
||||||
|
_disposeApple2View(apple2MenuView);
|
||||||
|
return apple2MenuView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Apple2MenuView popApple2View(Apple2MenuView apple2MenuView) {
|
||||||
|
boolean wasRemoved = mMenuStack.remove(apple2MenuView);
|
||||||
|
_disposeApple2View(apple2MenuView);
|
||||||
|
return wasRemoved ? apple2MenuView : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _disposeApple2View(Apple2MenuView apple2MenuView) {
|
||||||
|
|
||||||
|
// Actually remove View from view hierarchy
|
||||||
|
{
|
||||||
|
View menuView = apple2MenuView.getView();
|
||||||
|
if (menuView.isShown()) {
|
||||||
|
((ViewGroup) menuView.getParent()).removeView(menuView);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no more views on menu stack, resume emulation
|
||||||
|
if (mMenuStack.size() == 0) {
|
||||||
|
nativeOnResume(/*isSystemResume:*/false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Apple2View getView() {
|
public Apple2View getView() {
|
||||||
return mView;
|
return mView;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ package org.deadc0de.apple2ix;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -28,7 +27,7 @@ import android.widget.ListView;
|
|||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class Apple2AudioSettingsMenu {
|
public class Apple2AudioSettingsMenu implements Apple2MenuView {
|
||||||
|
|
||||||
private final static String TAG = "Apple2AudioSettingsMenu";
|
private final static String TAG = "Apple2AudioSettingsMenu";
|
||||||
|
|
||||||
@ -284,24 +283,18 @@ public class Apple2AudioSettingsMenu {
|
|||||||
if (isShowing()) {
|
if (isShowing()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mActivity.nativeOnPause();
|
mActivity.pushApple2View(this);
|
||||||
mActivity.addContentView(mSettingsView, new FrameLayout.LayoutParams(mActivity.getWidth(), mActivity.getHeight()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
if (isShowing()) {
|
mActivity.popApple2View(this);
|
||||||
dismissWithoutResume();
|
|
||||||
//mActivity.nativeOnResume(/*isSystemResume:*/false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dismissWithoutResume() {
|
|
||||||
if (isShowing()) {
|
|
||||||
((ViewGroup)mSettingsView.getParent()).removeView(mSettingsView);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShowing() {
|
public boolean isShowing() {
|
||||||
return mSettingsView.isShown();
|
return mSettingsView.isShown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public View getView() {
|
||||||
|
return mSettingsView;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,14 +13,12 @@ package org.deadc0de.apple2ix;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
@ -30,7 +28,7 @@ import java.io.File;
|
|||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class Apple2DisksMenu {
|
public class Apple2DisksMenu implements Apple2MenuView {
|
||||||
|
|
||||||
private final static String TAG = "Apple2DisksMenu";
|
private final static String TAG = "Apple2DisksMenu";
|
||||||
|
|
||||||
@ -114,8 +112,8 @@ public class Apple2DisksMenu {
|
|||||||
if (isDirectory[position]) {
|
if (isDirectory[position]) {
|
||||||
// TODO FIXME ...
|
// TODO FIXME ...
|
||||||
} else {
|
} else {
|
||||||
RadioButton diskA = (RadioButton)mDisksView.findViewById(R.id.radioButton_diskA);
|
RadioButton diskA = (RadioButton) mDisksView.findViewById(R.id.radioButton_diskA);
|
||||||
CheckBox readWrite = (CheckBox)mDisksView.findViewById(R.id.checkBox_readWrite);
|
CheckBox readWrite = (CheckBox) mDisksView.findViewById(R.id.checkBox_readWrite);
|
||||||
Apple2DisksMenu.this.dismiss();
|
Apple2DisksMenu.this.dismiss();
|
||||||
mActivity.nativeChooseDisk(files[position].getAbsolutePath(), diskA.isChecked(), !readWrite.isChecked());
|
mActivity.nativeChooseDisk(files[position].getAbsolutePath(), diskA.isChecked(), !readWrite.isChecked());
|
||||||
}
|
}
|
||||||
@ -128,24 +126,18 @@ public class Apple2DisksMenu {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dynamicSetup();
|
dynamicSetup();
|
||||||
mActivity.nativeOnPause();
|
mActivity.pushApple2View(this);
|
||||||
mActivity.addContentView(mDisksView, new FrameLayout.LayoutParams(mActivity.getWidth(), mActivity.getHeight()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
if (isShowing()) {
|
mActivity.popApple2View(this);
|
||||||
dismissWithoutResume();
|
|
||||||
mActivity.nativeOnResume(/*isSystemResume:*/false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dismissWithoutResume() {
|
|
||||||
if (isShowing()) {
|
|
||||||
((ViewGroup)mDisksView.getParent()).removeView(mDisksView);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShowing() {
|
public boolean isShowing() {
|
||||||
return mDisksView.isShown();
|
return mDisksView.isShown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public View getView() {
|
||||||
|
return mDisksView;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Apple // emulator for *nix
|
||||||
|
*
|
||||||
|
* This software package is subject to the GNU General Public License
|
||||||
|
* version 2 or later (your choice) as published by the Free Software
|
||||||
|
* Foundation.
|
||||||
|
*
|
||||||
|
* THERE ARE NO WARRANTIES WHATSOEVER.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.deadc0de.apple2ix;
|
||||||
|
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
public interface Apple2MenuView {
|
||||||
|
|
||||||
|
public void show();
|
||||||
|
|
||||||
|
public boolean isShowing();
|
||||||
|
|
||||||
|
public void dismiss();
|
||||||
|
|
||||||
|
public View getView();
|
||||||
|
}
|
@ -22,13 +22,12 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class Apple2SettingsMenu {
|
public class Apple2SettingsMenu implements Apple2MenuView {
|
||||||
|
|
||||||
private final static String TAG = "Apple2SettingsMenu";
|
private final static String TAG = "Apple2SettingsMenu";
|
||||||
|
|
||||||
@ -210,28 +209,18 @@ public class Apple2SettingsMenu {
|
|||||||
if (isShowing()) {
|
if (isShowing()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mActivity.nativeOnPause();
|
mActivity.pushApple2View(this);
|
||||||
mActivity.addContentView(mSettingsView, new FrameLayout.LayoutParams(mActivity.getWidth(), mActivity.getHeight()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
if (isShowing()) {
|
mActivity.popApple2View(this);
|
||||||
dismissWithoutResume();
|
|
||||||
mActivity.nativeOnResume(/*isSystemResume:*/false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dismissWithoutResume() {
|
|
||||||
if (isShowing()) {
|
|
||||||
((ViewGroup)mSettingsView.getParent()).removeView(mSettingsView);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShowing() {
|
public boolean isShowing() {
|
||||||
return mSettingsView.isShown();
|
return mSettingsView.isShown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Apple2AudioSettingsMenu getAudioSubmenu() {
|
public View getView() {
|
||||||
return mAudioSettings;
|
return mSettingsView;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user