Skip to content

Commit 65478ef

Browse files
author
fdelapena
authored
Merge pull request #3316 from Ghabry/android
Android: Add game label configuration, rename buttons to X/Z
2 parents 39b022f + aa213da commit 65478ef

File tree

14 files changed

+165
-35
lines changed

14 files changed

+165
-35
lines changed

builds/android/app/src/gamebrowser/org_easyrpg_player_game_browser.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,11 @@ Java_org_easyrpg_player_game_1browser_GameScanner_findGames(JNIEnv *env, jclass,
364364
env->CallVoidMethod(jgame_object, jset_title_method, jtitle);
365365
}
366366

367+
// Set folder name
368+
jstring jfolder = env->NewStringUTF(game_dir_name.c_str());
369+
jmethodID jset_folder_name_method = env->GetMethodID(jgame_class, "setGameFolderName", "(Ljava/lang/String;)V");
370+
env->CallVoidMethod(jgame_object, jset_folder_name_method, jfolder);
371+
367372
env->SetObjectArrayElement(jgame_array, i, jgame_object);
368373
}
369374

@@ -397,11 +402,6 @@ Java_org_easyrpg_player_game_1browser_Game_reencodeTitle(JNIEnv *env, jobject th
397402
if (encoding == "auto") {
398403
auto det_encodings = lcf::ReaderUtil::DetectEncodings(title);
399404
for (auto &det_enc: det_encodings) {
400-
if (det_enc == "UTF-16BE" || det_enc == "UTF-16LE") {
401-
// Skip obviously wrong title encodings
402-
continue;
403-
}
404-
405405
if (lcf::Encoder encoder(det_enc); encoder.IsOk()) {
406406
encoder.Encode(title);
407407
break;

builds/android/app/src/main/java/org/easyrpg/player/button_mapping/VirtualButton.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,17 @@ public char getAppropriateChar(int keyCode) {
205205
char charButton;
206206

207207
if (keyCode == ENTER) {
208-
charButton = 'A';
208+
if (SettingsManager.getShowZXasAB()) {
209+
charButton = 'A';
210+
} else {
211+
charButton = 'Z';
212+
}
209213
} else if (keyCode == CANCEL) {
210-
charButton = 'B';
214+
if (SettingsManager.getShowZXasAB()) {
215+
charButton = 'B';
216+
} else {
217+
charButton = 'X';
218+
}
211219
} else if (keyCode == SHIFT) {
212220
charButton = 'S';
213221
} else if (keyCode == KEY_0) {

builds/android/app/src/main/java/org/easyrpg/player/game_browser/Game.java

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616

1717
public class Game implements Comparable<Game> {
1818
final static char escapeCode = '\u0001';
19+
final static String cacheVersion = "1";
1920
/** The title shown in the Game Browser */
2021
private String title;
2122
/** Bytes of the title string in an unspecified encoding */
2223
private byte[] titleRaw = null;
24+
/** Human readable version of the game directory. Shown in the game browser
25+
* when the specific setting is enabled.
26+
*/
27+
private String gameFolderName;
2328
/** Path to the game folder (forwarded via --project-path */
2429
private final String gameFolderPath;
2530
/** Relative path to the save directory, made absolute by launchGame (forwarded via --save-path) */
@@ -46,12 +51,20 @@ public Game(String gameFolderPath, String saveFolder, byte[] titleScreen) {
4651
this.isFavorite = isFavoriteFromSettings();
4752
}
4853

49-
public String getTitle() {
54+
public String getDisplayTitle() {
5055
String customTitle = getCustomTitle();
5156
if (!customTitle.isEmpty()) {
5257
return customTitle;
5358
}
5459

60+
if (SettingsManager.getGameBrowserLabelMode() == 0) {
61+
return getTitle();
62+
} else {
63+
return gameFolderName;
64+
}
65+
}
66+
67+
public String getTitle() {
5568
return title;
5669
}
5770

@@ -81,6 +94,14 @@ public void setSavePath(String path) {
8194
savePath = path;
8295
}
8396

97+
public String getGameFolderName() {
98+
return gameFolderName;
99+
}
100+
101+
public void setGameFolderName(String gameFolderName) {
102+
this.gameFolderName = gameFolderName;
103+
}
104+
84105
public boolean isFavorite() {
85106
return isFavorite;
86107
}
@@ -106,7 +127,7 @@ public int compareTo(Game game) {
106127
if (!this.isFavorite() && game.isFavorite()) {
107128
return 1;
108129
}
109-
return this.getTitle().compareTo(game.getTitle());
130+
return this.getDisplayTitle().compareTo(game.getDisplayTitle());
110131
}
111132

112133
/**
@@ -149,62 +170,70 @@ public void setStandalone(boolean standalone) {
149170
@NonNull
150171
@Override
151172
public String toString() {
152-
return getTitle();
173+
return getDisplayTitle();
153174
}
154175

155176
public static Game fromCacheEntry(Context context, String cache) {
156177
String[] entries = cache.split(String.valueOf(escapeCode));
157178

158-
if (entries.length != 5) {
179+
if (entries.length != 7 || !entries[0].equals(cacheVersion)) {
159180
return null;
160181
}
161182

162-
String savePath = entries[0];
163-
DocumentFile gameFolder = DocumentFile.fromTreeUri(context, Uri.parse(entries[1]));
183+
String savePath = entries[1];
184+
DocumentFile gameFolder = DocumentFile.fromTreeUri(context, Uri.parse(entries[2]));
164185
if (gameFolder == null) {
165186
return null;
166187
}
167188

168-
String title = entries[2];
189+
String gameFolderName = entries[3];
190+
191+
String title = entries[4];
169192

170193
byte[] titleRaw = null;
171-
if (!entries[3].equals("null")) {
172-
titleRaw = Base64.decode(entries[3], 0);
194+
if (!entries[5].equals("null")) {
195+
titleRaw = Base64.decode(entries[5], 0);
173196
}
174197

175198
byte[] titleScreen = null;
176-
if (!entries[4].equals("null")) {
177-
titleScreen = Base64.decode(entries[4], 0);
199+
if (!entries[6].equals("null")) {
200+
titleScreen = Base64.decode(entries[6], 0);
178201
}
179202

180-
Game g = new Game(entries[1], savePath, titleScreen);
203+
Game g = new Game(entries[2], savePath, titleScreen);
181204
g.setTitle(title);
182205
g.titleRaw = titleRaw;
183206

184207
if (g.titleRaw != null) {
185208
g.reencodeTitle();
186209
}
187210

211+
g.setGameFolderName(gameFolderName);
212+
188213
return g;
189214
}
190215

191216
public String toCacheEntry() {
192217
StringBuilder sb = new StringBuilder();
193218

194219
// Cache structure: savePath | gameFolderPath | title | titleRaw | titleScreen
195-
sb.append(savePath);
220+
sb.append(cacheVersion); // 0
196221
sb.append(escapeCode);
197-
sb.append(gameFolderPath);
222+
sb.append(savePath); // 1
198223
sb.append(escapeCode);
199-
sb.append(title);
224+
sb.append(gameFolderPath); // 2
200225
sb.append(escapeCode);
201-
if (titleRaw != null) {
226+
sb.append(gameFolderName); // 3
227+
sb.append(escapeCode);
228+
sb.append(title); // 4
229+
sb.append(escapeCode);
230+
if (titleRaw != null) { // 5
202231
sb.append(Base64.encodeToString(titleRaw, Base64.NO_WRAP));
203232
} else {
204233
sb.append("null");
205234
}
206235
sb.append(escapeCode);
207-
if (titleScreen != null) {
236+
if (titleScreen != null) { // 6
208237
ByteArrayOutputStream baos = new ByteArrayOutputStream();
209238
titleScreen.compress(Bitmap.CompressFormat.PNG, 90, baos);
210239
byte[] b = baos.toByteArray();
@@ -215,4 +244,5 @@ public String toCacheEntry() {
215244

216245
return sb.toString();
217246
}
247+
218248
}

builds/android/app/src/main/java/org/easyrpg/player/game_browser/GameBrowserActivity.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
131131
// as you specify a parent activity in AndroidManifest.xml.
132132
int id = item.getItemId();
133133

134-
if (id == R.id.refresh) {
134+
if (id == R.id.view) {
135+
openView();
136+
return true;
137+
} else if (id == R.id.refresh) {
135138
scanGamesAndDisplayResult(true);
136139
return true;
137140
} else if (id == R.id.menu) {
@@ -161,6 +164,26 @@ public boolean onNavigationItemSelected(MenuItem item) {
161164
return true;
162165
}
163166

167+
public void openView() {
168+
AlertDialog.Builder builder = new AlertDialog.Builder(this);
169+
170+
String[] choices_list = {
171+
this.getResources().getString(R.string.view_show_game_title),
172+
this.getResources().getString(R.string.view_show_game_folder)
173+
};
174+
175+
builder
176+
.setTitle(R.string.view_show_title_desc)
177+
.setSingleChoiceItems(choices_list, SettingsManager.getGameBrowserLabelMode(), null)
178+
.setPositiveButton(R.string.ok, (dialog, id) -> {
179+
int selectedPosition = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
180+
SettingsManager.setGameBrowserLabelMode(selectedPosition);
181+
displayGamesList();
182+
})
183+
.setNegativeButton(R.string.cancel, null);
184+
builder.show();
185+
}
186+
164187
public void scanGamesAndDisplayResult(boolean forceScan) {
165188
// Verify that a scan isn't processing
166189
// TODO : Make the use of isScanProcessing synchronized (not really useful)
@@ -307,7 +330,7 @@ public void onBindViewHolder(final ViewHolder holder, final int position) {
307330
final Game game = gameList.get(position);
308331

309332
// Title
310-
holder.title.setText(game.getTitle());
333+
holder.title.setText(game.getDisplayTitle());
311334
holder.title.setOnClickListener(v -> launchGame(position, false));
312335

313336
// TitleScreen Image
@@ -391,7 +414,7 @@ public void chooseRegion(final Context context, final ViewHolder holder, final G
391414

392415
if (!selectedEncoding.equals(encoding)) {
393416
game.setEncoding(selectedEncoding);
394-
holder.title.setText(game.getTitle());
417+
holder.title.setText(game.getDisplayTitle());
395418
}
396419
})
397420
.setNegativeButton(R.string.cancel, null);
@@ -411,12 +434,12 @@ public void renameGame(final Context context, final ViewHolder holder, final Gam
411434
.setTitle(R.string.game_rename)
412435
.setPositiveButton(R.string.ok, (dialog, id) -> {
413436
game.setCustomTitle(input.getText().toString());
414-
holder.title.setText(game.getTitle());
437+
holder.title.setText(game.getDisplayTitle());
415438
})
416439
.setNegativeButton(R.string.cancel, null)
417440
.setNeutralButton(R.string.revert, (dialog, id) -> {
418441
game.setCustomTitle("");
419-
holder.title.setText(game.getTitle());
442+
holder.title.setText(game.getDisplayTitle());
420443
});
421444
builder.show();
422445
}

builds/android/app/src/main/java/org/easyrpg/player/settings/SettingsEnum.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ enum SettingsEnum {
2727
FONT1_URI("Font1"),
2828
FONT2_URI("Font2"),
2929
FONT1_SIZE("Font1Size"),
30-
FONT2_SIZE("Font2Size")
31-
30+
FONT2_SIZE("Font2Size"),
31+
GAME_BROWSER_LABEL_MODE("GAME_BROWSER_LABEL_MODE"),
32+
SHOW_ZX_AS_AB("SHOW_ZX_AS_AB")
3233
;
3334

3435

builds/android/app/src/main/java/org/easyrpg/player/settings/SettingsInputActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ public void onCreate(Bundle savedInstanceState) {
3737
enableVibrateWhenSlidingCheckbox.setChecked(SettingsManager.isVibrateWhenSlidingDirectionEnabled());
3838
enableVibrateWhenSlidingCheckbox.setOnClickListener(this);
3939

40+
CheckBox showZXasABcheckbox = findViewById(R.id.settings_show_zx_as_ab);
41+
showZXasABcheckbox.setChecked(SettingsManager.getShowZXasAB());
42+
showZXasABcheckbox.setOnClickListener(this);
43+
4044
configureFastForwardButton();
4145
configureLayoutTransparencySystem();
4246
configureLayoutSizeSystem();
@@ -57,6 +61,8 @@ public void onClick(View v) {
5761
enableVibrateWhenSlidingCheckbox.setEnabled(c.isChecked());
5862
} else if (id == R.id.settings_vibrate_when_sliding){
5963
SettingsManager.setVibrateWhenSlidingDirectionEnabled(((CheckBox) v).isChecked());
64+
} else if (id == R.id.settings_show_zx_as_ab) {
65+
SettingsManager.setShowZXasAB(((CheckBox)v).isChecked());
6066
}
6167
}
6268

builds/android/app/src/main/java/org/easyrpg/player/settings/SettingsManager.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public class SettingsManager {
5050
GAMES_FOLDER_NAME = "games", SAVES_FOLDER_NAME = "saves",
5151
FONTS_FOLDER_NAME = "fonts";
5252
public static int FAST_FORWARD_MODE_HOLD = 0, FAST_FORWARD_MODE_TAP = 1;
53+
private static int gameBrowserLabelMode = 0;
54+
private static boolean showZXasAB = false;
5355

5456
private static List<String> imageSizeOption = Arrays.asList("nearest", "integer", "bilinear");
5557
private static List<String> gameResolutionOption = Arrays.asList("original", "widescreen", "ultrawide");
@@ -102,6 +104,10 @@ private static void loadSettings(Context context) {
102104
if (gameResolution == -1) {
103105
gameResolution = 0;
104106
}
107+
108+
gameBrowserLabelMode = sharedPref.getInt(GAME_BROWSER_LABEL_MODE.toString(), 0);
109+
110+
showZXasAB = sharedPref.getBoolean(SHOW_ZX_AS_AB.toString(), false);
105111
}
106112

107113
public static Set<String> getFavoriteGamesList() {
@@ -488,4 +494,24 @@ public static void setSpeedModifierA(int speedModifierA) {
488494
configIni.input.set(SPEED_MODIFIER_A.toString(), speedModifierA);
489495
configIni.save();
490496
}
497+
498+
public static int getGameBrowserLabelMode() {
499+
return gameBrowserLabelMode;
500+
}
501+
502+
public static void setGameBrowserLabelMode(int i) {
503+
gameBrowserLabelMode = i;
504+
editor.putInt(SettingsEnum.GAME_BROWSER_LABEL_MODE.toString(), i);
505+
editor.commit();
506+
}
507+
508+
public static boolean getShowZXasAB() {
509+
return showZXasAB;
510+
}
511+
512+
public static void setShowZXasAB(boolean b) {
513+
showZXasAB = b;
514+
editor.putBoolean(SHOW_ZX_AS_AB.toString(), b);
515+
editor.commit();
516+
}
491517
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960">
6+
<path
7+
android:pathData="M360,800h440q33,0 56.5,-23.5T880,720v-80L360,640v160ZM80,320h200v-160L160,160q-33,0 -56.5,23.5T80,240v80ZM80,560h200v-160L80,400v160ZM160,800h120v-160L80,640v80q0,33 23.5,56.5T160,800ZM360,560h520v-160L360,400v160ZM360,320h520v-80q0,-33 -23.5,-56.5T800,160L360,160v160Z"
8+
android:fillColor="#5f6368"/>
9+
</vector>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960">
6+
<path
7+
android:pathData="M360,800h440q33,0 56.5,-23.5T880,720v-80L360,640v160ZM80,320h200v-160L160,160q-33,0 -56.5,23.5T80,240v80ZM80,560h200v-160L80,400v160ZM160,800h120v-160L80,640v80q0,33 23.5,56.5T160,800ZM360,560h520v-160L360,400v160ZM360,320h520v-80q0,-33 -23.5,-56.5T800,160L360,160v160Z"
8+
android:fillColor="#ffffff"/>
9+
</vector>

builds/android/app/src/main/res/layout/activity_settings_inputs.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@
2525
android:text="@string/vibrate_when_sliding_direction"
2626
android:textSize="20sp"/>
2727

28+
<CheckBox
29+
android:id="@+id/settings_show_zx_as_ab"
30+
android:layout_width="match_parent"
31+
android:layout_height="wrap_content"
32+
android:text="@string/settings_input_show_zx_as_ab"
33+
android:textSize="20sp"/>
34+
2835
<include layout="@layout/separator"/>
2936

3037
<RelativeLayout

0 commit comments

Comments
 (0)