Subclass all popup menus to reduce clutter in GL2JNIView

This commit is contained in:
TwistedUmbrella 2014-02-09 14:37:55 -05:00
parent 7cd08c13ed
commit e70b71828c
3 changed files with 306 additions and 270 deletions

View File

@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
@ -22,10 +23,11 @@ import android.widget.Toast;
public class EditVJoyActivity extends Activity {
GL2JNIView mView;
GL2JNIViewV6 mView6;
OnScreenMenu menu;
PopupWindow popUp;
LayoutParams params;
private static float[][] vjoy_d_cached;
public static float[][] vjoy_d_cached;
View addbut(int x, OnClickListener ocl) {
ImageButton but = new ImageButton(this);
@ -37,54 +39,13 @@ public class EditVJoyActivity extends Activity {
return but;
}
void createPopup() {
popUp = new PopupWindow(this);
int p = GL2JNIActivity.getPixelsFromDp(60, this);
params = new LayoutParams(p, p);
LinearLayout hlay = new LinearLayout(this);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.apply, new OnClickListener() {
public void onClick(View v) {
Intent inte = new Intent(EditVJoyActivity.this, MainActivity.class);
startActivity(inte);
EditVJoyActivity.this.finish();
}
}), params);
hlay.addView(addbut(R.drawable.reset, new OnClickListener() {
public void onClick(View v) {
// Reset VJoy positions and scale
if (MainActivity.force_gpu) {
mView6.resetCustomVjoyValues();
} else {
mView.resetCustomVjoyValues();
}
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
if (MainActivity.force_gpu) {
mView6.restoreCustomVjoyValues(vjoy_d_cached);
} else {
mView.restoreCustomVjoyValues(vjoy_d_cached);
}
popUp.dismiss();
}
}), params);
popUp.setContentView(hlay);
}
@Override
protected void onCreate(Bundle icicle) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
createPopup();
menu = new OnScreenMenu(this);
menu.setGLView(mView, mView6);
popUp = menu.createPopup();
// Call parent onCreate()
super.onCreate(icicle);

View File

@ -1,33 +1,25 @@
package com.reicast.emulator;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import tv.ouya.console.api.OuyaController;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Gravity;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;
@ -35,8 +27,8 @@ import android.widget.Toast;
public class GL2JNIActivity extends Activity {
GL2JNIView mView;
GL2JNIViewV6 mView6;
OnScreenMenu menu;
PopupWindow popUp;
LayoutParams params;
MOGAInput moga = new MOGAInput();
private SharedPreferences prefs;
static String[] portId = { "_A", "_B", "_C", "_D" };
@ -46,232 +38,23 @@ public class GL2JNIActivity extends Activity {
int[] name = { -1, -1, -1, -1 };
float[] globalLS_X = new float[4], globalLS_Y = new float[4],
previousLS_X = new float[4], previousLS_Y = new float[4];
private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc";
private int frameskip;
private boolean widescreen;
private boolean limitframes;
public static HashMap<Integer, String> deviceId_deviceDescriptor = new HashMap<Integer, String>();
public static HashMap<String, Integer> deviceDescriptor_PlayerNum = new HashMap<String, Integer>();
int map[][];
public static int getPixelsFromDp(float dps, Context context) {
return (int) (dps * context.getResources().getDisplayMetrics().density + 0.5f);
}
View addbut(int x, OnClickListener ocl) {
ImageButton but = new ImageButton(this);
but.setImageResource(x);
but.setScaleType(ScaleType.FIT_CENTER);
but.setOnClickListener(ocl);
return but;
}
static byte[] syms;
void createPopup() {
popUp = new PopupWindow(this);
// LinearLayout layout = new LinearLayout(this);
// tv = new TextView(this);
int p = getPixelsFromDp(60, this);
params = new LayoutParams(p, p);
// layout.setOrientation(LinearLayout.VERTICAL);
// tv.setText("Hi this is a sample text for popup window");
// layout.addView(tv, params);
LinearLayout hlay = new LinearLayout(this);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
Intent inte = new Intent(GL2JNIActivity.this,
MainActivity.class);
startActivity(inte);
GL2JNIActivity.this.finish();
}
}), params);
if(prefs.getBoolean("debug_profling_tools", false)){
hlay.addView(addbut(R.drawable.clear_cache, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(0, 0); //Killing texture cache
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.profiler, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(1, 3000); //sample_Start(param);
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.profiler, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(1, 0); //sample_Start(param);
popUp.dismiss();
}
}), params);
// hlay.addView(addbut(R.drawable.disk_unknown, new OnClickListener() {
// public void onClick(View v) {
// JNIdc.send(0, 1); //settings.pvr.ta_skip
// popUp.dismiss();
// }
// }), params);
hlay.addView(addbut(R.drawable.print_stats, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(0, 2);
popUp.dismiss(); //print_stats=true;
}
}), params);
}
hlay.addView(addbut(R.drawable.vmu_swap, new OnClickListener() {
public void onClick(View v) {
JNIdc.vmuSwap();
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.config, new OnClickListener() {
public void onClick(View v) {
displayConfigPopup();
popUp.dismiss();
}
}), params);
// layout.addView(hlay,params);
popUp.setContentView(hlay);
}
void displayConfigPopup() {
final PopupWindow popUpConfig = new PopupWindow(this);
// LinearLayout layout = new LinearLayout(this);
// tv = new TextView(this);
int p = getPixelsFromDp(60, this);
LayoutParams configParams = new LayoutParams(p, p);
// layout.setOrientation(LinearLayout.VERTICAL);
// tv.setText("Hi this is a sample text for popup window");
// layout.addView(tv, params);
LinearLayout hlay = new LinearLayout(this);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
popUpConfig.dismiss();
}
}), configParams);
View fullscreen;
if (!widescreen) {
fullscreen = addbut(R.drawable.widescreen, new OnClickListener() {
public void onClick(View v) {
JNIdc.widescreen(1);
popUpConfig.dismiss();
widescreen = true;
}
});
} else {
fullscreen = addbut(R.drawable.normal_view, new OnClickListener() {
public void onClick(View v) {
JNIdc.widescreen(0);
popUpConfig.dismiss();
widescreen = false;
}
});
}
hlay.addView(fullscreen, params);
View frames_up = addbut(R.drawable.frames_up, new OnClickListener() {
public void onClick(View v) {
frameskip++;
JNIdc.frameskip(frameskip);
popUpConfig.dismiss();
displayConfigPopup();
}
});
hlay.addView(frames_up, params);
if (frameskip >= 5) {
frames_up.setEnabled(false);
}
View frames_down = addbut(R.drawable.frames_down, new OnClickListener() {
public void onClick(View v) {
frameskip--;
JNIdc.frameskip(frameskip);
popUpConfig.dismiss();
displayConfigPopup();
}
});
hlay.addView(frames_down, params);
if (frameskip <= 0) {
frames_down.setEnabled(false);
}
View framelimit;
if (!limitframes) {
framelimit = addbut(R.drawable.frames_limit_on, new OnClickListener() {
public void onClick(View v) {
JNIdc.limitfps(1);
popUpConfig.dismiss();
limitframes = true;
}
});
} else {
framelimit = addbut(R.drawable.frames_limit_off, new OnClickListener() {
public void onClick(View v) {
JNIdc.limitfps(0);
popUpConfig.dismiss();
limitframes = false;
}
});
}
hlay.addView(framelimit, params);
hlay.addView(addbut(R.drawable.up, new OnClickListener() {
public void onClick(View v) {
popUpConfig.dismiss();
if (MainActivity.force_gpu) {
popUp.showAtLocation(mView6, Gravity.BOTTOM, 0, 0);
} else {
popUp.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
}
popUp.update(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
}), configParams);
// layout.addView(hlay,params);
popUpConfig.setContentView(hlay);
if (popUp.isShowing()) {
popUp.dismiss();
}
if (MainActivity.force_gpu) {
popUpConfig.showAtLocation(mView6, Gravity.BOTTOM, 0, 0);
} else {
popUpConfig.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
}
popUpConfig.update(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
@Override
protected void onCreate(Bundle icicle) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
moga.onCreate(this);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
createPopup();
menu = new OnScreenMenu(this, prefs);
menu.setGLView(mView, mView6);
popUp = menu.createPopup();
/*
* try { //int rID =
* getResources().getIdentifier("fortyonepost.com.lfas:raw/syms.map",
@ -281,10 +64,7 @@ public class GL2JNIActivity extends Activity {
* syms = new byte[(int) is.available()]; is.read(syms); is.close(); }
* catch (IOException e) { e.getMessage(); e.printStackTrace(); }
*/
home_directory = prefs.getString("home_directory", home_directory);
ConfigureFragment.getCurrentConfiguration(home_directory);
widescreen = ConfigureFragment.widescreen;
frameskip = ConfigureFragment.frameskip;
String fileName = null;

View File

@ -0,0 +1,295 @@
package com.reicast.emulator;
import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Environment;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ImageView.ScaleType;
public class OnScreenMenu {
private Context mContext;
private SharedPreferences prefs;
LayoutParams params;
private int frameskip;
private boolean widescreen;
private boolean limitframes;
GL2JNIView mView;
GL2JNIViewV6 mView6;
private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc";
public OnScreenMenu(Context mContext, SharedPreferences prefs) {
this.mContext = mContext;
this.prefs = prefs;
home_directory = prefs.getString("home_directory", home_directory);
ConfigureFragment.getCurrentConfiguration(home_directory);
widescreen = ConfigureFragment.widescreen;
frameskip = ConfigureFragment.frameskip;
}
public OnScreenMenu(Context mContext) {
this.mContext = mContext;
}
public void setGLView(GL2JNIView mView, GL2JNIViewV6 mView6) {
this.mView = mView;
this.mView6 = mView6;
}
PopupWindow createPopup() {
final PopupWindow popUp = new PopupWindow(mContext);
int p = getPixelsFromDp(60, mContext);
params = new LayoutParams(p, p);
LinearLayout hlay = new LinearLayout(mContext);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
Intent inte = new Intent(mContext,
MainActivity.class);
mContext.startActivity(inte);
((Activity) mContext).finish();
}
}), params);
if(prefs.getBoolean("debug_profling_tools", false)){
hlay.addView(addbut(R.drawable.clear_cache, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(0, 0); //Killing texture cache
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.profiler, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(1, 3000); //sample_Start(param);
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.profiler, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(1, 0); //sample_Start(param);
popUp.dismiss();
}
}), params);
// hlay.addView(addbut(R.drawable.disk_unknown, new OnClickListener() {
// public void onClick(View v) {
// JNIdc.send(0, 1); //settings.pvr.ta_skip
// popUp.dismiss();
// }
// }), params);
hlay.addView(addbut(R.drawable.print_stats, new OnClickListener() {
public void onClick(View v) {
JNIdc.send(0, 2);
popUp.dismiss(); //print_stats=true;
}
}), params);
}
hlay.addView(addbut(R.drawable.vmu_swap, new OnClickListener() {
public void onClick(View v) {
JNIdc.vmuSwap();
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.config, new OnClickListener() {
public void onClick(View v) {
displayConfigPopup(popUp);
popUp.dismiss();
}
}), params);
// layout.addView(hlay,params);
popUp.setContentView(hlay);
return popUp;
}
PopupWindow createVjoyPopup() {
final PopupWindow popUp = new PopupWindow(mContext);
int p = getPixelsFromDp(60, mContext);
params = new LayoutParams(p, p);
LinearLayout hlay = new LinearLayout(mContext);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.apply, new OnClickListener() {
public void onClick(View v) {
Intent inte = new Intent(mContext, MainActivity.class);
mContext.startActivity(inte);
((Activity) mContext).finish();
}
}), params);
hlay.addView(addbut(R.drawable.reset, new OnClickListener() {
public void onClick(View v) {
// Reset VJoy positions and scale
if (MainActivity.force_gpu) {
mView6.resetCustomVjoyValues();
} else {
mView.resetCustomVjoyValues();
}
popUp.dismiss();
}
}), params);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
if (MainActivity.force_gpu) {
mView6.restoreCustomVjoyValues(EditVJoyActivity.vjoy_d_cached);
} else {
mView.restoreCustomVjoyValues(EditVJoyActivity.vjoy_d_cached);
}
popUp.dismiss();
}
}), params);
popUp.setContentView(hlay);
return popUp;
}
void displayConfigPopup(final PopupWindow popUp) {
final PopupWindow popUpConfig = new PopupWindow(mContext);
// LinearLayout layout = new LinearLayout(this);
// tv = new TextView(this);
int p = getPixelsFromDp(60, mContext);
LayoutParams configParams = new LayoutParams(p, p);
// layout.setOrientation(LinearLayout.VERTICAL);
// tv.setText("Hi this is a sample text for popup window");
// layout.addView(tv, params);
LinearLayout hlay = new LinearLayout(mContext);
hlay.setOrientation(LinearLayout.HORIZONTAL);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
popUpConfig.dismiss();
}
}), configParams);
View fullscreen;
if (!widescreen) {
fullscreen = addbut(R.drawable.widescreen, new OnClickListener() {
public void onClick(View v) {
JNIdc.widescreen(1);
popUpConfig.dismiss();
widescreen = true;
}
});
} else {
fullscreen = addbut(R.drawable.normal_view, new OnClickListener() {
public void onClick(View v) {
JNIdc.widescreen(0);
popUpConfig.dismiss();
widescreen = false;
}
});
}
hlay.addView(fullscreen, params);
View frames_up = addbut(R.drawable.frames_up, new OnClickListener() {
public void onClick(View v) {
frameskip++;
JNIdc.frameskip(frameskip);
popUpConfig.dismiss();
displayConfigPopup(popUp);
}
});
hlay.addView(frames_up, params);
if (frameskip >= 5) {
frames_up.setEnabled(false);
}
View frames_down = addbut(R.drawable.frames_down, new OnClickListener() {
public void onClick(View v) {
frameskip--;
JNIdc.frameskip(frameskip);
popUpConfig.dismiss();
displayConfigPopup(popUp);
}
});
hlay.addView(frames_down, params);
if (frameskip <= 0) {
frames_down.setEnabled(false);
}
View framelimit;
if (!limitframes) {
framelimit = addbut(R.drawable.frames_limit_on, new OnClickListener() {
public void onClick(View v) {
JNIdc.limitfps(1);
popUpConfig.dismiss();
limitframes = true;
}
});
} else {
framelimit = addbut(R.drawable.frames_limit_off, new OnClickListener() {
public void onClick(View v) {
JNIdc.limitfps(0);
popUpConfig.dismiss();
limitframes = false;
}
});
}
hlay.addView(framelimit, params);
hlay.addView(addbut(R.drawable.up, new OnClickListener() {
public void onClick(View v) {
popUpConfig.dismiss();
if (MainActivity.force_gpu) {
popUp.showAtLocation(mView6, Gravity.BOTTOM, 0, 0);
} else {
popUp.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
}
popUp.update(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
}), configParams);
// layout.addView(hlay,params);
popUpConfig.setContentView(hlay);
if (popUp.isShowing()) {
popUp.dismiss();
}
if (MainActivity.force_gpu) {
popUpConfig.showAtLocation(mView6, Gravity.BOTTOM, 0, 0);
} else {
popUpConfig.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
}
popUpConfig.update(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
public static int getPixelsFromDp(float dps, Context context) {
return (int) (dps * context.getResources().getDisplayMetrics().density + 0.5f);
}
View addbut(int x, OnClickListener ocl) {
ImageButton but = new ImageButton(mContext);
but.setImageResource(x);
but.setScaleType(ScaleType.FIT_CENTER);
but.setOnClickListener(ocl);
return but;
}
}