Cleanup and finalize the new "visibility optimized" menus

Add an option to open the menu with "Menu", Select compat

Don't prevent select mapping, Switch to local context, Anim

Import French Submission @AndroidGX

Fix a merge issue for settings not yet available to the user

faster popup animation, hide rate me menu item on ouya

Update strings.xml

Kill the application properly, Check for Rating, Popup anim

Add a small buffer to the VMU, Fix the configuration menu

This really was a good idea if I could quit inverting the logic

Sound config options are misleading due to inverted function

It is my own fault for wanting it to make sense in GL2JNIView at the cost of not making since anywhere else

Toggle sound independently, Implement Fastforward instead

Add generic boost menu option, Fix sound menu icon state

 Repurpose thread priority as boost option, Disable triggered

Account for when sound is fully disabled and cannot be set

It gets confusing when enabled is false and disabled is true
This commit is contained in:
TwistedUmbrella 2014-02-25 02:12:47 -05:00
parent 7ec35ef3c2
commit 8ce6a9e539
9 changed files with 479 additions and 382 deletions

View File

@ -37,7 +37,7 @@
<string name="report_issue">Tidligere nedbrud detekteret</string>
<string name="platform">Kopierer logcat indhold til clipboardet\nIndsæt venligst i fejlrapporten</string>
<string name="log_saved">Log gemt i %1$s</string>
<string name="log_saved">Log gemt i \"System Path\"</string>
<string name="bios_config">Konfiguration fejlede!</string>
<string name="menu_debug">Indsend fejllogger</string>
@ -57,8 +57,7 @@
<string name="controller_already_in_use">Denne controller er allerede i brug!</string>
<string name="modified_layout">Aktiver brugerdefineret layout</string>
<string name="controller_compat">Aktiver kompatibilitesmode</string>
<string name="dpad_joystick">Joystick bruger DPAD Layout</string>
<string name="mic_in_port_2">Microphone tilsluttet port 2</string>
<string name="mic_in_port_2">Mikrofon tilsluttet port 2</string>
<string name="customize_physical_controls">Tilpas fysiske taster</string>
<string name="map_keycode_title">Tilpas controller</string>
@ -67,6 +66,7 @@
<string name="bios_menu">Tryk på %1$s knappen for en menu</string>
<string name="back_button">tilbage</string>
<string name="menu_button">menu</string>
<string name="right_button">R3</string>
<string name="moga_pro_connect">MOGA Pro tilsluttet!</string>
<string name="moga_connect">MOGA tilsluttet!</string>
@ -114,4 +114,7 @@
<string name="textOn">TIL</string>
<string name="textOff">FRA</string>
<string name="cancel">Afbryd</string>
<string name="manual">Manuel</string>
</resources>

View File

@ -14,6 +14,7 @@
<string name="folder_bios">DEMARRER LE BIOS</string>
<string name="folder_select">SELECTIONNER LE DOSSIER ACTUEL</string>
<string name="optimization_opts">Options d\'optimisations et de débogage</string>
<string name="experimental_opts">Experimental (peut causer des crashs)</string>
<string name="select_dynarec">Dynarec</string>
<string name="select_unstable">Optimisations instables</string>
@ -23,6 +24,11 @@
<string name="select_stretch">Mode portrait (écran large)</string>
<string name="set_frameskip">Valeur de saut des images</string>
<string name="select_render">Rendu PVR (ne fonctionne pas pour le moment)</string>
<string name="select_fps">Montrer les FPS</string>
<string name="select_software">Forcer le rendu logiciel</string>
<string name="select_sound">Activer le son de l\'émulateur</string>
<string name="select_depth">Rendu de profondeur</string>
<string name="select_force_gpu">Forcer la config GPU v6</string>
<string name="default_disk">Réglage du disque par défaut</string>
<string name="games_listing">Liste des jeux disponibles</string>
@ -44,6 +50,7 @@
<string name="modified_layout">Activer la fonction de disposition des touches</string>
<string name="controller_compat">Activer le mode de compatibilité</string>
<string name="dpad_joystick">Le joystick doit utiliser la disposition du pad directionnel</string>
<string name="mic_in_port_2">Microphone branché au port 2</string>
<string name="customize_physical_controls">Customiser les touches physiques</string>
<string name="map_keycode_title">Modifier la manette</string>
@ -79,4 +86,4 @@
<string name="menu_debug">Soumettre le log d\'erreurs</string>
</resources>
</resources>

View File

@ -183,7 +183,8 @@ public class GL2JNIActivity extends Activity {
fileName = Uri.decode(intent.getData().toString());
// Create the actual GLES view
mView = new GL2JNIView(getApplication(), config, fileName, false, prefs.getInt("depth_render", 24), 0, false);
mView = new GL2JNIView(getApplication(), config, fileName, false,
prefs.getInt("depth_render", 24), 0, false);
setContentView(mView);
String menu_spec;
@ -377,7 +378,7 @@ public class GL2JNIActivity extends Activity {
public boolean handle_key(Integer playerNum, int kc, boolean down) {
if (playerNum == null || playerNum == -1)
return false;
if (kc == KeyEvent.KEYCODE_BUTTON_SELECT) {
if (kc == pad.getSelectButtonCode()) {
return false;
}
if (pad.isActiveMoga[playerNum]) {
@ -436,7 +437,7 @@ public class GL2JNIActivity extends Activity {
parent.removeView(menu.getVmu());
//add to floating window
vmuPop.showVmu();
vmuPop.showAtLocation(mView, Gravity.TOP | Gravity.RIGHT, 20, 20);
vmuPop.showAtLocation(mView, Gravity.TOP | Gravity.RIGHT, 4, 4);
vmuPop.update(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}else{
vmuPop.dismiss();
@ -511,7 +512,7 @@ public class GL2JNIActivity extends Activity {
return true;
}
if (keyCode == KeyEvent.KEYCODE_BUTTON_SELECT) {
if (keyCode == pad.getSelectButtonCode()) {
return showMenu();
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1

View File

@ -2,12 +2,15 @@ package com.reicast.emulator;
import java.io.File;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.AsyncTask;
@ -32,6 +35,7 @@ import com.reicast.emulator.config.InputFragment;
import com.reicast.emulator.config.OptionsFragment;
import com.reicast.emulator.debug.GenerateLogs;
import com.reicast.emulator.emu.JNIdc;
import com.reicast.emulator.periph.Gamepad;
public class MainActivity extends SlidingFragmentActivity implements
FileBrowser.OnItemSelectedListener, OptionsFragment.OnClickListener {
@ -41,11 +45,14 @@ public class MainActivity extends SlidingFragmentActivity implements
public static String home_directory = sdcard + "/dc";
private TextView menuHeading;
private boolean hasAndroidMarket = false;
private SlidingMenu sm;
private UncaughtExceptionHandler mUEHandler;
Gamepad pad = new Gamepad();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -79,20 +86,17 @@ public class MainActivity extends SlidingFragmentActivity implements
String prior_error = mPrefs.getString("prior_error", null);
if (prior_error != null && !prior_error.equals(null)) {
initiateReport(prior_error, savedInstanceState);
initiateReport(prior_error);
mPrefs.edit().remove("prior_error").commit();
} else {
loadInterface(savedInstanceState);
}
}
/**
* Load the GUI interface for display to the user
*
* @param bundle
* The savedInstanceState passed from onCreate
*/
private void loadInterface(Bundle savedInstanceState) {
Intent market = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=dummy"));
PackageManager manager = getPackageManager();
List<ResolveInfo> list = manager.queryIntentActivities(market, 0);
if (list != null && !list.isEmpty()) {
hasAndroidMarket = true;
}
if (!getFilesDir().exists()) {
getFilesDir().mkdir();
}
@ -252,20 +256,25 @@ public class MainActivity extends SlidingFragmentActivity implements
});
findViewById(R.id.rateme_menu).setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
// vib.vibrate(50);
startActivity(new Intent(Intent.ACTION_VIEW, Uri
.parse("market://details?id="
+ getPackageName())));
//setTitle(getString(R.string.rateme));
sm.toggle(true);
return true;
} else
return false;
}
});
View rateMe = findViewById(R.id.rateme_menu);
if (!hasAndroidMarket) {
rateMe.setVisibility(View.GONE);
} else {
rateMe.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
// vib.vibrate(50);
startActivity(new Intent(Intent.ACTION_VIEW, Uri
.parse("market://details?id="
+ getPackageName())));
//setTitle(getString(R.string.rateme));
sm.toggle(true);
return true;
} else
return false;
}
});
}
}
});
findViewById(R.id.header_list).setOnTouchListener(new OnTouchListener() {
@ -287,29 +296,20 @@ public class MainActivity extends SlidingFragmentActivity implements
* @param bundle
* The savedInstanceState passed from onCreate
*/
private void initiateReport(final String error, final Bundle savedInstanceState) {
private void initiateReport(final String error) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(getString(R.string.report_issue));
builder.setMessage(error);
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
loadInterface(savedInstanceState);
dialog.dismiss();
}
});
builder.setPositiveButton("Report",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
GenerateLogs mGenerateLogs = new GenerateLogs(MainActivity.this);
mGenerateLogs.setUnhandled(error);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
mGenerateLogs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
home_directory);
} else {
mGenerateLogs.execute(home_directory);
}
loadInterface(savedInstanceState);
reportIssueUpstream(error);
dialog.dismiss();
}
});
@ -317,6 +317,17 @@ public class MainActivity extends SlidingFragmentActivity implements
builder.show();
}
private void reportIssueUpstream(String error) {
GenerateLogs mGenerateLogs = new GenerateLogs(MainActivity.this);
mGenerateLogs.setUnhandled(error);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
mGenerateLogs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
home_directory);
} else {
mGenerateLogs.execute(home_directory);
}
}
public static boolean isBiosExisting() {
File bios = new File(home_directory, "data/dc_boot.bin");
return bios.exists();
@ -485,6 +496,9 @@ public class MainActivity extends SlidingFragmentActivity implements
}
}
if (keyCode == KeyEvent.KEYCODE_MENU) {
sm.toggle(true);
}
return super.onKeyDown(keyCode, event);
}

View File

@ -106,8 +106,8 @@ public class ConfigureFragment extends Fragment {
}
unstable_opt.setOnCheckedChangeListener(unstable_option);
String[] regions = ArrayUtils.remove(parentActivity.getResources()
.getStringArray(R.array.region), 4);
String[] regions = parentActivity.getResources().getStringArray(
R.array.region);
Spinner region_spnr = (Spinner) getView().findViewById(
R.id.region_spinner);
ArrayAdapter<String> regionAdapter = new ArrayAdapter<String>(

View File

@ -3,6 +3,7 @@ package com.reicast.emulator.config;
import java.io.IOException;
import java.io.InputStream;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -35,6 +36,7 @@ import android.widget.Spinner;
import android.widget.TextView;
import com.reicast.emulator.R;
import com.reicast.emulator.periph.Gamepad;
import de.ankri.views.Switch;
@ -42,13 +44,30 @@ public class InputModFragment extends Fragment {
private Activity parentActivity;
private SharedPreferences mPrefs;
private Switch switchModifiedLayoutEnabled;
private Switch switchCompatibilityEnabled;
private TextView a_button_text;
private TextView b_button_text;
private TextView x_button_text;
private TextView y_button_text;
private TextView l_button_text;
private TextView r_button_text;
private TextView dpad_up_text;
private TextView dpad_down_text;
private TextView dpad_left_text;
private TextView dpad_right_text;
private TextView start_button_text;
private TextView select_button_text;
private String player = "_A";
private int sS = 2;
private int playerNum = -1;
private mapKeyCode mKey;
Gamepad pad = new Gamepad();
// Container Activity must implement this interface
public interface OnClickListener {
public void onMainBrowseSelected(String path_entry, boolean games);
@ -80,6 +99,249 @@ public class InputModFragment extends Fragment {
playerNum = b.getInt("portNumber", -1);
}
OnCheckedChangeListener modified_layout = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
mPrefs.edit()
.putBoolean("modified_key_layout" + player, isChecked)
.commit();
}
};
switchModifiedLayoutEnabled = (Switch) getView().findViewById(
R.id.switchModifiedLayoutEnabled);
switchModifiedLayoutEnabled.setOnCheckedChangeListener(modified_layout);
OnCheckedChangeListener compat_mode = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
selectController();
} else {
mPrefs.edit().remove("controller" + player).commit();
}
mPrefs.edit()
.putBoolean("controller_compat" + player, isChecked)
.commit();
}
};
switchCompatibilityEnabled = (Switch) getView().findViewById(
R.id.switchCompatibilityEnabled);
switchCompatibilityEnabled.setOnCheckedChangeListener(compat_mode);
mKey = new mapKeyCode(parentActivity);
ImageView a_button_icon = (ImageView) getView().findViewById(
R.id.a_button_icon);
a_button_icon.setImageDrawable(getButtonImage(448 / sS, 0));
a_button_text = (TextView) getView().findViewById(
R.id.a_button_key);
Button a_button = (Button) getView().findViewById(R.id.a_button_edit);
a_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("a_button", a_button_text);
}
});
Button a_remove = (Button) getView().findViewById(R.id.remove_a_button);
a_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("a_button", a_button_text);
}
});
ImageView b_button_icon = (ImageView) getView().findViewById(
R.id.b_button_icon);
b_button_icon.setImageDrawable(getButtonImage(384 / sS, 0));
b_button_text = (TextView) getView().findViewById(
R.id.b_button_key);
Button b_button = (Button) getView().findViewById(R.id.b_button_edit);
b_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("b_button", b_button_text);
}
});
Button b_remove = (Button) getView().findViewById(R.id.remove_b_button);
b_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("b_button", b_button_text);
}
});
ImageView x_button_icon = (ImageView) getView().findViewById(
R.id.x_button_icon);
x_button_icon.setImageDrawable(getButtonImage(256 / sS, 0));
x_button_text = (TextView) getView().findViewById(
R.id.x_button_key);
Button x_button = (Button) getView().findViewById(R.id.x_button_edit);
x_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("x_button", x_button_text);
}
});
Button x_remove = (Button) getView().findViewById(R.id.remove_x_button);
x_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("x_button", x_button_text);
}
});
ImageView y_button_icon = (ImageView) getView().findViewById(
R.id.y_button_icon);
y_button_icon.setImageDrawable(getButtonImage(320 / sS, 0));
y_button_text = (TextView) getView().findViewById(
R.id.y_button_key);
Button y_button = (Button) getView().findViewById(R.id.y_button_edit);
y_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("y_button", y_button_text);
}
});
Button y_remove = (Button) getView().findViewById(R.id.remove_y_button);
y_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("y_button", y_button_text);
}
});
ImageView l_button_icon = (ImageView) getView().findViewById(
R.id.l_button_icon);
l_button_icon.setImageDrawable(getButtonImage(78 / sS, 64 / sS));
l_button_text = (TextView) getView().findViewById(
R.id.l_button_key);
Button l_button = (Button) getView().findViewById(R.id.l_button_edit);
l_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("l_button", l_button_text);
}
});
Button l_remove = (Button) getView().findViewById(R.id.remove_l_button);
l_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("l_button", l_button_text);
}
});
ImageView r_button_icon = (ImageView) getView().findViewById(
R.id.r_button_icon);
r_button_icon.setImageDrawable(getButtonImage(162 / sS, 64 / sS));
r_button_text = (TextView) getView().findViewById(
R.id.r_button_key);
Button r_button = (Button) getView().findViewById(R.id.r_button_edit);
r_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("r_button", r_button_text);
}
});
Button r_remove = (Button) getView().findViewById(R.id.remove_r_button);
r_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("r_button", r_button_text);
}
});
dpad_up_text = (TextView) getView().findViewById(
R.id.dpad_up_key);
Button dpad_up = (Button) getView().findViewById(R.id.dpad_up_edit);
dpad_up.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_up", dpad_up_text);
}
});
Button up_remove = (Button) getView().findViewById(R.id.remove_dpad_up);
up_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_up", dpad_up_text);
}
});
dpad_down_text = (TextView) getView().findViewById(
R.id.dpad_down_key);
Button dpad_down = (Button) getView().findViewById(R.id.dpad_down_edit);
dpad_down.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_down", dpad_down_text);
}
});
Button down_remove = (Button) getView().findViewById(
R.id.remove_dpad_down);
down_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_down", dpad_down_text);
}
});
dpad_left_text = (TextView) getView().findViewById(
R.id.dpad_left_key);
Button dpad_left = (Button) getView().findViewById(R.id.dpad_left_edit);
dpad_left.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_left", dpad_left_text);
}
});
Button left_remove = (Button) getView().findViewById(
R.id.remove_dpad_left);
left_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_left", dpad_left_text);
}
});
dpad_right_text = (TextView) getView().findViewById(
R.id.dpad_right_key);
Button dpad_right = (Button) getView().findViewById(
R.id.dpad_right_edit);
dpad_right.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_right", dpad_right_text);
}
});
Button right_remove = (Button) getView().findViewById(
R.id.remove_dpad_right);
right_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_right", dpad_right_text);
}
});
ImageView start_button_icon = (ImageView) getView().findViewById(
R.id.start_button_icon);
start_button_icon.setImageDrawable(getButtonImage(0, 64 / sS));
start_button_text = (TextView) getView().findViewById(
R.id.start_button_key);
Button start_button = (Button) getView().findViewById(
R.id.start_button_edit);
start_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("start_button", start_button_text);
}
});
Button start_remove = (Button) getView()
.findViewById(R.id.remove_start);
start_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("start_button", start_button_text);
}
});
ImageView select_button_icon = (ImageView) getView().findViewById(
R.id.select_button_icon);
select_button_icon.setImageResource(R.drawable.ic_drawer);
select_button_text = (TextView) getView().findViewById(
R.id.select_button_key);
Button select_button = (Button) getView().findViewById(
R.id.select_button_edit);
select_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("select_button", select_button_text);
}
});
Button select_remove = (Button) getView()
.findViewById(R.id.remove_select);
select_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("select_button", select_button_text);
}
});
Spinner player_spnr = (Spinner) getView().findViewById(
R.id.player_spinner);
ArrayAdapter<String> playerAdapter = new ArrayAdapter<String>(
@ -99,291 +361,23 @@ public class InputModFragment extends Fragment {
player = "_"
+ selection.substring(selection.lastIndexOf(" ") + 1,
selection.length());
playerNum = pos;
updateController(player);
}
public void onNothingSelected(AdapterView<?> arg0) {
if (playerNum != -1) {
player = controllers[playerNum];
}
}
});
OnCheckedChangeListener modified_layout = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
mPrefs.edit()
.putBoolean("modified_key_layout" + player, isChecked)
.commit();
}
};
switchModifiedLayoutEnabled = (Switch) getView().findViewById(
R.id.switchModifiedLayoutEnabled);
boolean layout = mPrefs.getBoolean("modified_key_layout" + player,
false);
if (layout) {
switchModifiedLayoutEnabled.setChecked(true);
} else {
switchModifiedLayoutEnabled.setChecked(false);
}
switchModifiedLayoutEnabled.setOnCheckedChangeListener(modified_layout);
OnCheckedChangeListener compat_mode = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
selectController();
} else {
mPrefs.edit().remove("controller" + player).commit();
}
mPrefs.edit()
.putBoolean("controller_compat" + player, isChecked)
.commit();
}
};
switchCompatibilityEnabled = (Switch) getView().findViewById(
R.id.switchCompatibilityEnabled);
boolean compat = mPrefs.getBoolean("controller_compat" + player, false);
if (compat) {
switchCompatibilityEnabled.setChecked(true);
} else {
switchCompatibilityEnabled.setChecked(false);
}
switchCompatibilityEnabled.setOnCheckedChangeListener(compat_mode);
mKey = new mapKeyCode(parentActivity);
ImageView a_button_icon = (ImageView) getView().findViewById(
R.id.a_button_icon);
a_button_icon.setImageDrawable(getButtonImage(448 / sS, 0));
final TextView a_button_text = (TextView) getView().findViewById(
R.id.a_button_key);
getKeyCode("a_button", a_button_text);
Button a_button = (Button) getView().findViewById(R.id.a_button_edit);
a_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("a_button", a_button_text);
}
});
Button a_remove = (Button) getView().findViewById(R.id.remove_a_button);
a_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("a_button", a_button_text);
}
});
ImageView b_button_icon = (ImageView) getView().findViewById(
R.id.b_button_icon);
b_button_icon.setImageDrawable(getButtonImage(384 / sS, 0));
final TextView b_button_text = (TextView) getView().findViewById(
R.id.b_button_key);
getKeyCode("b_button", b_button_text);
Button b_button = (Button) getView().findViewById(R.id.b_button_edit);
b_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("b_button", b_button_text);
}
});
Button b_remove = (Button) getView().findViewById(R.id.remove_b_button);
b_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("b_button", b_button_text);
}
});
ImageView x_button_icon = (ImageView) getView().findViewById(
R.id.x_button_icon);
x_button_icon.setImageDrawable(getButtonImage(256 / sS, 0));
final TextView x_button_text = (TextView) getView().findViewById(
R.id.x_button_key);
getKeyCode("x_button", x_button_text);
Button x_button = (Button) getView().findViewById(R.id.x_button_edit);
x_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("x_button", x_button_text);
}
});
Button x_remove = (Button) getView().findViewById(R.id.remove_x_button);
x_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("x_button", x_button_text);
}
});
ImageView y_button_icon = (ImageView) getView().findViewById(
R.id.y_button_icon);
y_button_icon.setImageDrawable(getButtonImage(320 / sS, 0));
final TextView y_button_text = (TextView) getView().findViewById(
R.id.y_button_key);
getKeyCode("y_button", y_button_text);
Button y_button = (Button) getView().findViewById(R.id.y_button_edit);
y_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("y_button", y_button_text);
}
});
Button y_remove = (Button) getView().findViewById(R.id.remove_y_button);
y_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("y_button", y_button_text);
}
});
ImageView l_button_icon = (ImageView) getView().findViewById(
R.id.l_button_icon);
l_button_icon.setImageDrawable(getButtonImage(78 / sS, 64 / sS));
final TextView l_button_text = (TextView) getView().findViewById(
R.id.l_button_key);
getKeyCode("l_button", l_button_text);
Button l_button = (Button) getView().findViewById(R.id.l_button_edit);
l_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("l_button", l_button_text);
}
});
Button l_remove = (Button) getView().findViewById(R.id.remove_l_button);
l_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("l_button", l_button_text);
}
});
ImageView r_button_icon = (ImageView) getView().findViewById(
R.id.r_button_icon);
r_button_icon.setImageDrawable(getButtonImage(162 / sS, 64 / sS));
final TextView r_button_text = (TextView) getView().findViewById(
R.id.r_button_key);
getKeyCode("r_button", r_button_text);
Button r_button = (Button) getView().findViewById(R.id.r_button_edit);
r_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("r_button", r_button_text);
}
});
Button r_remove = (Button) getView().findViewById(R.id.remove_r_button);
r_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("r_button", r_button_text);
}
});
final TextView dpad_up_text = (TextView) getView().findViewById(
R.id.dpad_up_key);
getKeyCode("dpad_up", dpad_up_text);
Button dpad_up = (Button) getView().findViewById(R.id.dpad_up_edit);
dpad_up.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_up", dpad_up_text);
}
});
Button up_remove = (Button) getView().findViewById(R.id.remove_dpad_up);
up_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_up", dpad_up_text);
}
});
final TextView dpad_down_text = (TextView) getView().findViewById(
R.id.dpad_down_key);
getKeyCode("dpad_down", dpad_down_text);
Button dpad_down = (Button) getView().findViewById(R.id.dpad_down_edit);
dpad_down.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_down", dpad_down_text);
}
});
Button down_remove = (Button) getView().findViewById(
R.id.remove_dpad_down);
down_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_down", dpad_down_text);
}
});
final TextView dpad_left_text = (TextView) getView().findViewById(
R.id.dpad_left_key);
getKeyCode("dpad_left", dpad_left_text);
Button dpad_left = (Button) getView().findViewById(R.id.dpad_left_edit);
dpad_left.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_left", dpad_left_text);
}
});
Button left_remove = (Button) getView().findViewById(
R.id.remove_dpad_left);
left_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_left", dpad_left_text);
}
});
final TextView dpad_right_text = (TextView) getView().findViewById(
R.id.dpad_right_key);
getKeyCode("dpad_right", dpad_right_text);
Button dpad_right = (Button) getView().findViewById(
R.id.dpad_right_edit);
dpad_right.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("dpad_right", dpad_right_text);
}
});
Button right_remove = (Button) getView().findViewById(
R.id.remove_dpad_right);
right_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("dpad_right", dpad_right_text);
}
});
ImageView start_button_icon = (ImageView) getView().findViewById(
R.id.start_button_icon);
start_button_icon.setImageDrawable(getButtonImage(0, 64 / sS));
final TextView start_button_text = (TextView) getView().findViewById(
R.id.start_button_key);
getKeyCode("start_button", start_button_text);
Button start_button = (Button) getView().findViewById(
R.id.start_button_edit);
start_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("start_button", start_button_text);
}
});
Button start_remove = (Button) getView()
.findViewById(R.id.remove_start);
start_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("start_button", start_button_text);
}
});
ImageView select_button_icon = (ImageView) getView().findViewById(
R.id.select_button_icon);
select_button_icon.setImageResource(R.drawable.ic_drawer);
final TextView select_button_text = (TextView) getView().findViewById(
R.id.select_button_key);
Button select_button = (Button) getView().findViewById(
R.id.select_button_edit);
select_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mKey.intiateSearch("select_button", select_button_text);
}
});
Button select_remove = (Button) getView()
.findViewById(R.id.remove_select);
select_remove.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
remKeyCode("select_button", select_button_text);
}
});
updateController(player);
}
/**
* Retrieve an image to serve as a visual representation
*
* @param int
* The x start value of the image within the atlas
* @param int
* The y start value of the image within the atlas
* @param int The x start value of the image within the atlas
* @param int The y start value of the image within the atlas
*/
private Drawable getButtonImage(int x, int y) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
@ -405,6 +399,7 @@ public class InputModFragment extends Fragment {
matrix.postScale(32, 32);
Bitmap resizedBitmap = Bitmap.createBitmap(image, x, y, 64 / sS,
64 / sS, matrix, true);
@SuppressWarnings("deprecation")
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
image.recycle();
image = null;
@ -426,17 +421,6 @@ public class InputModFragment extends Fragment {
return parentActivity.getResources().getDrawable(R.drawable.input);
}
private void getKeyCode(final String button, final TextView output) {
int keyCode = mPrefs.getInt(button + player, -1);
if (keyCode != -1) {
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
}
output.setText(label + ": " + String.valueOf(keyCode));
}
}
/**
* Prompt the user to specify the controller to modify
*
@ -483,7 +467,7 @@ public class InputModFragment extends Fragment {
* @param textview
* The output display for the assigned button value
*/
public void intiateSearch(String button, final TextView output) {
public void intiateSearch(final String button, final TextView output) {
this.button = button;
this.output = output;
isMapping = true;
@ -498,22 +482,14 @@ public class InputModFragment extends Fragment {
isMapping = false;
dialog.dismiss();
}
});
});
builder.setOnKeyListener(new Dialog.OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
int value = mapButton(keyCode, event);
mapButton(keyCode, event);
isMapping = false;
dialog.dismiss();
if (value != -1) {
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
}
output.setText(label + ": " + String.valueOf(value));
return true;
}
return false;
return getKeyCode(button, output);
}
});
builder.create();
@ -523,8 +499,7 @@ public class InputModFragment extends Fragment {
/**
* Assign the user button to the emulator button
*
* @param int
* The keycode generated by the button being assigned
* @param int The keycode generated by the button being assigned
* @param keyevent
* The keyevent generated by the button being assigned
*/
@ -542,6 +517,7 @@ public class InputModFragment extends Fragment {
return keyCode;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
public boolean dispatchTouchEvent(MotionEvent ev) {
if (isMapping) {
if ((ev.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
@ -581,13 +557,47 @@ public class InputModFragment extends Fragment {
return dispatchTouchEvent(ev);
}
}
private void updateController(String player) {
switchModifiedLayoutEnabled.setChecked(mPrefs.getBoolean(
"modified_key_layout" + player, false));
switchCompatibilityEnabled.setChecked(mPrefs.getBoolean(
"controller_compat" + player, false));
getKeyCode("a_button", a_button_text);
getKeyCode("b_button", b_button_text);
getKeyCode("x_button", x_button_text);
getKeyCode("y_button", y_button_text);
getKeyCode("l_button", l_button_text);
getKeyCode("r_button", r_button_text);
getKeyCode("dpad_up", dpad_up_text);
getKeyCode("dpad_down", dpad_down_text);
getKeyCode("dpad_left", dpad_left_text);
getKeyCode("dpad_right", dpad_right_text);
getKeyCode("start_button", start_button_text);
getKeyCode("select_button", select_button_text);
}
private void remKeyCode(final String button, final TextView output) {
mPrefs.edit().remove(button + player).commit();
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
private boolean getKeyCode(final String button, final TextView output) {
int keyCode = mPrefs.getInt(button + player, -1);
if (keyCode != -1) {
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
}
output.setText(label + ": " + String.valueOf(keyCode));
return true;
} else {
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
}
output.setText(label);
return false;
}
output.setText(label);
}
private void remKeyCode(final String button, TextView output) {
mPrefs.edit().remove(button + player).commit();
getKeyCode(button, output);
}
}

View File

@ -141,10 +141,6 @@ public class GL2JNIView extends GLSurfaceView
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean soundEndabled = prefs.getBoolean("sound_enabled", true);
ethd = new EmuThread(soundEndabled);
if (!soundEndabled) {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
// Ensures priority is not placed on disabled sound thread
}
touchVibrationEnabled = prefs.getBoolean("touch_vibration_enabled", true);
@ -587,6 +583,14 @@ public class GL2JNIView extends GLSurfaceView
}
}
public void fastForward(boolean enabled) {
if (enabled) {
ethd.setPriority(Thread.MIN_PRIORITY);
} else {
ethd.setPriority(Thread.NORM_PRIORITY);
}
}
class EmuThread extends Thread
{
AudioTrack Player;

View File

@ -38,6 +38,13 @@ public class OnScreenMenu {
private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc";
private int frames = Config.frameskip;
private boolean screen = Config.widescreen;
private boolean limit = Config.limitfps;
private boolean audio;
private boolean masteraudio;
private boolean boosted = false;
public OnScreenMenu(Activity context, SharedPreferences prefs) {
if (context instanceof GL2JNIActivity) {
this.mContext = (GL2JNIActivity) context;
@ -46,6 +53,8 @@ public class OnScreenMenu {
if (prefs != null) {
this.prefs = prefs;
home_directory = prefs.getString("home_directory", home_directory);
masteraudio = prefs.getBoolean("sound_enabled", true);
audio = masteraudio;
}
vmuLcd = new VmuLcd(mContext);
vmuLcd.setOnClickListener(new OnClickListener() {
@ -162,12 +171,9 @@ public class OnScreenMenu {
private View fullscreen;
private View framelimit;
private View audiosetting;
private View fastforward;
private View fdown;
private View fup;
private int frames = Config.frameskip;
private boolean screen = Config.widescreen;
private boolean limit = Config.limitfps;
private boolean audio;
public ConfigPopup(Context c) {
super(c);
@ -188,17 +194,16 @@ public class OnScreenMenu {
fullscreen = addbut(R.drawable.widescreen, new OnClickListener() {
public void onClick(View v) {
if (screen) {
JNIdc.widescreen(1);
screen = true;
((ImageButton) fullscreen)
.setImageResource(R.drawable.normal_view);
} else {
JNIdc.widescreen(0);
screen = false;
((ImageButton) fullscreen)
.setImageResource(R.drawable.widescreen);
} else {
JNIdc.widescreen(1);
screen = true;
((ImageButton) fullscreen)
.setImageResource(R.drawable.normal_view);
}
dismiss();
}
});
if (screen) {
@ -233,20 +238,18 @@ public class OnScreenMenu {
if (limit) {
JNIdc.limitfps(0);
limit = false;
((ImageButton) audiosetting)
((ImageButton) framelimit)
.setImageResource(R.drawable.frames_limit_on);
} else {
JNIdc.limitfps(1);
limit = true;
((ImageButton) audiosetting)
((ImageButton) framelimit)
.setImageResource(R.drawable.frames_limit_off);
}
dismiss();
}
});
if (limit) {
((ImageButton) audiosetting)
((ImageButton) framelimit)
.setImageResource(R.drawable.frames_limit_off);
}
hlay.addView(framelimit, params);
@ -255,31 +258,83 @@ public class OnScreenMenu {
new OnClickListener() {
public void onClick(View v) {
if (audio) {
((ImageButton) audiosetting)
.setImageResource(R.drawable.mute_sound);
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.audioDisable(false);
}
} else {
((ImageButton) audiosetting)
.setImageResource(R.drawable.enable_sound);
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.audioDisable(true);
}
((ImageButton) audiosetting)
.setImageResource(R.drawable.enable_sound);
audio = false;
} else {
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.audioDisable(false);
}
((ImageButton) audiosetting)
.setImageResource(R.drawable.mute_sound);
audio = true;
}
dismiss();
audio = true;
}
});
audio = prefs.getBoolean("sound_enabled", true);
if (audio) {
((ImageButton) audiosetting)
.setImageResource(R.drawable.mute_sound);
}
if (!masteraudio) {
audiosetting.setEnabled(false);
}
hlay.addView(audiosetting, params);
fastforward = addbut(R.drawable.star,
new OnClickListener() {
public void onClick(View v) {
if (boosted) {
if (audio) {
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.audioDisable(false);
}
}
audiosetting.setEnabled(true);
if (limit) {
JNIdc.limitfps(1);
}
framelimit.setEnabled(true);
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.fastForward(true);
}
boosted = true;
((ImageButton) fastforward)
.setImageResource(R.drawable.star);
} else {
if (audio) {
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.audioDisable(true);
}
}
if (limit) {
JNIdc.limitfps(0);
}
audiosetting.setEnabled(false);
if (mContext instanceof GL2JNIActivity) {
((GL2JNIActivity) mContext).mView
.fastForward(false);
}
framelimit.setEnabled(false);
boosted = false;
((ImageButton) fastforward)
.setImageResource(R.drawable.reset);
}
}
});
if (boosted) {
((ImageButton) fastforward)
.setImageResource(R.drawable.reset);
}
hlay.addView(fastforward, params);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
popups.remove(ConfigPopup.this);

View File

@ -5,6 +5,7 @@ import java.util.HashMap;
import java.util.List;
import tv.ouya.console.api.OuyaController;
import tv.ouya.console.api.OuyaFacade;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
@ -150,6 +151,8 @@ public class Gamepad {
PackageManager pMan = context.getPackageManager();
if (pMan.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
return true;
} else if (OuyaFacade.getInstance().isRunningOnOUYAHardware()) {
return true;
}
return false;
}