Code Editor + Lua Patchs + Fixes

This commit is contained in:
Gabriel 2024-01-10 11:51:20 -04:00
parent 8603ced00a
commit de027afea8
24 changed files with 265 additions and 103 deletions

View file

@ -37,6 +37,7 @@
</activity>
<activity
android:name=".app.editor.CodeEditorActivity"
android:windowSoftInputMode="adjustResize"
android:configChanges="screenSize|screenLayout|orientation|density|uiMode">
</activity>
<activity android:name=".app.PreferenceActivity"

View file

@ -8,7 +8,7 @@ import com.panda3ds.pandroid.data.config.GlobalConfig;
public class BaseActivity extends AppCompatActivity {
private int currentTheme = GlobalConfig.get(GlobalConfig.KEY_APP_THEME);
private int currentTheme = PandroidApplication.getThemeId();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -20,19 +20,13 @@ public class BaseActivity extends AppCompatActivity {
protected void onResume() {
super.onResume();
if (GlobalConfig.get(GlobalConfig.KEY_APP_THEME) != currentTheme) {
if (PandroidApplication.getThemeId() != currentTheme) {
recreate();
}
}
private void applyTheme() {
switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) {
case GlobalConfig.THEME_ANDROID: setTheme(R.style.Theme_Pandroid); break;
case GlobalConfig.THEME_LIGHT: setTheme(R.style.Theme_Pandroid_Light); break;
case GlobalConfig.THEME_DARK: setTheme(R.style.Theme_Pandroid_Dark); break;
case GlobalConfig.THEME_BLACK: setTheme(R.style.Theme_Pandroid_Black); break;
}
currentTheme = GlobalConfig.get(GlobalConfig.KEY_APP_THEME);
currentTheme = PandroidApplication.getThemeId();
setTheme(currentTheme);
}
}

View file

@ -84,16 +84,23 @@ public class GameActivity extends BaseActivity {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (InputHandler.processKeyEvent(event)) {
if ((!drawerFragment.isOpened()) && InputHandler.processKeyEvent(event)) {
return true;
}
return super.dispatchKeyEvent(event);
}
@Override
public void onBackPressed() {
if (drawerFragment.isOpened()) {
drawerFragment.close();
}
}
@Override
public boolean dispatchGenericMotionEvent(MotionEvent ev) {
if (InputHandler.processMotionEvent(ev)) {
if ((!drawerFragment.isOpened()) && InputHandler.processMotionEvent(ev)) {
return true;
}

View file

@ -2,7 +2,11 @@ package com.panda3ds.pandroid.app;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import com.panda3ds.pandroid.AlberDriver;
import com.panda3ds.pandroid.R;
import com.panda3ds.pandroid.data.config.GlobalConfig;
import com.panda3ds.pandroid.input.InputMap;
import com.panda3ds.pandroid.utils.GameUtils;
@ -22,5 +26,30 @@ public class PandroidApplication extends Application {
AlberDriver.Setup();
}
public static int getThemeId() {
switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) {
case GlobalConfig.THEME_LIGHT:
return R.style.Theme_Pandroid_Light;
case GlobalConfig.THEME_DARK:
return R.style.Theme_Pandroid_Dark;
case GlobalConfig.THEME_BLACK:
return R.style.Theme_Pandroid_Black;
}
return R.style.Theme_Pandroid;
}
public static boolean isDarkMode() {
switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)) {
case GlobalConfig.THEME_DARK:
case GlobalConfig.THEME_BLACK:
return true;
case GlobalConfig.THEME_LIGHT:
return false;
}
Resources res = Resources.getSystem();
int nightFlags = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
return nightFlags == Configuration.UI_MODE_NIGHT_YES;
}
public static Context getAppContext() { return appContext; }
}

View file

@ -4,8 +4,11 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.annotation.NonNull;
@ -23,6 +26,7 @@ import com.panda3ds.pandroid.view.code.syntax.CodeSyntax;
import java.io.Serializable;
public class CodeEditorActivity extends BaseActivity {
private static final String TAB_CONTENT = " ";
private String path;
private String fileName;
private CodeEditor editor;
@ -38,6 +42,7 @@ public class CodeEditorActivity extends BaseActivity {
Arguments args = (Arguments) getIntent().getSerializableExtra("args");
editor = findViewById(R.id.editor);
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(this::onGlobalLayoutChanged);
path = args.path;
fileName = args.fileName;
@ -66,6 +71,32 @@ public class CodeEditorActivity extends BaseActivity {
setupReadOnlyEditor();
break;
}
onGlobalLayoutChanged();
findViewById(R.id.key_hide).setOnClickListener(v -> {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
});
findViewById(R.id.key_tab).setOnClickListener(v -> {
editor.insert(TAB_CONTENT);
});
}
// Detect virtual keyboard is visible
private void onGlobalLayoutChanged() {
View view = getWindow().getDecorView();
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
int currentHeight = rect.height();
int height = view.getHeight();
if (currentHeight < height * 0.8) {
findViewById(R.id.keybar).setVisibility(View.VISIBLE);
} else {
findViewById(R.id.keybar).setVisibility(View.GONE);
}
System.out.println(height + "/" + currentHeight);
}
private void setupReadOnlyEditor() {
@ -98,6 +129,18 @@ public class CodeEditorActivity extends BaseActivity {
new Task(() -> FileUtils.writeTextFile(path, fileName, String.valueOf(editor.getText()))).runSync();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
System.out.println();
if (event.getKeyCode() == KeyEvent.KEYCODE_TAB) {
if (event.getAction() == KeyEvent.ACTION_UP) {
editor.insert(TAB_CONTENT);
}
return true;
}
return super.dispatchKeyEvent(event);
}
@Override
public void onBackPressed() {
if (changed) {
@ -107,8 +150,8 @@ public class CodeEditorActivity extends BaseActivity {
save();
finish();
})
.setNegativeButton(R.string.exit_without_save, (dialog, which) -> finish())
.setTitle(String.format(getString(R.string.exit_without_save_title_ff), fileName)).show();
.setNegativeButton(R.string.exit_without_saving, (dialog, which) -> finish())
.setTitle(String.format(getString(R.string.exit_without_saving_title_ff), fileName)).show();
} else {
super.onBackPressed();
}

View file

@ -47,12 +47,14 @@ public class DrawerFragment extends Fragment implements DrawerLayout.DrawerListe
((AppCompatTextView)view.findViewById(R.id.game_publisher)).setText(game.getPublisher());
((NavigationView)view.findViewById(R.id.action_navigation)).setNavigationItemSelectedListener(this);
((NavigationView)view.findViewById(R.id.hacks_navigation)).setNavigationItemSelectedListener(this);
((NavigationView)view.findViewById(R.id.others_navigation)).setNavigationItemSelectedListener(this);
}
@Override
public void onDetach() {
drawerContainer.removeDrawerListener(this);
if (drawerContainer != null) {
drawerContainer.removeDrawerListener(this);
}
super.onDetach();
}
@ -100,7 +102,7 @@ public class DrawerFragment extends Fragment implements DrawerLayout.DrawerListe
if (id == R.id.resume) {
close();
} else if (id == R.id.exit) {
requireActivity().onBackPressed();
requireActivity().finish();
} else if (id == R.id.lua_script){
new LuaDialogFragment().show(getParentFragmentManager(),null);
}

View file

@ -20,8 +20,8 @@ import com.panda3ds.pandroid.app.base.BottomDialogFragment;
import com.panda3ds.pandroid.app.editor.CodeEditorActivity;
import com.panda3ds.pandroid.lang.Task;
import com.panda3ds.pandroid.utils.FileUtils;
import com.panda3ds.pandroid.view.recycle.AutoFitGridLayout;
import com.panda3ds.pandroid.view.recycle.SimpleListAdapter;
import com.panda3ds.pandroid.view.recycler.AutoFitGridLayout;
import com.panda3ds.pandroid.view.recycler.SimpleListAdapter;
import java.util.ArrayList;
import java.util.UUID;

View file

@ -151,7 +151,7 @@ public class BaseEditor extends BasicTextEditor {
canvas.translate(x, 0);
canvas.drawRect(0, scrollY, getPaddingLeft() - spaceWidth, visibleHeight + scrollY, paint);
paint.setColor(applyAlphaToColor(colorEnable, 50));
paint.setColor(colors[EditorColors.COLOR_CURRENT_LINE]);
canvas.drawRect(0, currentLine * lineHeight, getPaddingLeft() - spaceWidth, (currentLine * lineHeight) + lineHeight, paint);
for (int i = beginLine; i < Math.min(getLineCount(), endLine); i++) {
@ -173,7 +173,7 @@ public class BaseEditor extends BasicTextEditor {
private void drawCurrentLine(Canvas canvas) {
float y = currentLine * lineHeight;
paint.setColor(applyAlphaToColor(colors[EditorColors.COLOR_TEXT], 50));
paint.setColor(colors[EditorColors.COLOR_CURRENT_LINE]);
canvas.drawRect(0, y, contentWidth, y + lineHeight, paint);
}
@ -280,7 +280,7 @@ public class BaseEditor extends BasicTextEditor {
protected void onRefreshColorScheme(byte[] buffer, int index, int length) {
}
protected void invalidateAll(){
protected void invalidateAll() {
requireUpdate = true;
invalidate();
}

View file

@ -12,6 +12,7 @@ import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.Scroller;
@ -46,7 +47,7 @@ public class BasicTextEditor extends AppCompatEditText {
setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/comic_mono.ttf"));
setGravity(Gravity.START | Gravity.TOP);
setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
setLineSpacing(0, 1.3f);
setScroller(new Scroller(getContext()));

View file

@ -33,7 +33,7 @@ public class CodeEditor extends BaseEditor {
@Override
protected void onTextChanged() {
super.onTextChanged();
if (contentChangeListener != null){
if (contentChangeListener != null) {
contentChangeListener.run();
}
}

View file

@ -2,6 +2,8 @@ package com.panda3ds.pandroid.view.code;
import android.content.Context;
import com.panda3ds.pandroid.app.PandroidApplication;
public class EditorColors {
public static final byte COLOR_TEXT = 0x0;
public static final byte COLOR_KEYWORDS = 0x1;
@ -15,8 +17,34 @@ public class EditorColors {
public static final byte COLOR_BACKGROUND_SECONDARY = 0x2D;
public static final byte COLOR_SELECTION = 0x3D;
public static final byte COLOR_CARET = 0x4D;
public static final byte COLOR_CURRENT_LINE = 0x5D;
public static void obtainColorScheme(int[] colors, Context context) {
if (PandroidApplication.isDarkMode()) {
applyDarkTheme(colors);
} else {
applyLightTheme(colors);
}
}
private static void applyLightTheme(int[] colors) {
colors[EditorColors.COLOR_TEXT] = 0xFF000000;
colors[EditorColors.COLOR_KEYWORDS] = 0xFF3AE666;
colors[EditorColors.COLOR_NUMBERS] = 0xFF3A9EE6;
colors[EditorColors.COLOR_METADATA] = 0xFF806AE6;
colors[EditorColors.COLOR_SYMBOLS] = 0xFF202020;
colors[EditorColors.COLOR_STRING] = 0xFF2EB541;
colors[EditorColors.COLOR_FIELDS] = 0xFF9876AA;
colors[EditorColors.COLOR_COMMENT] = 0xFF808080;
colors[EditorColors.COLOR_BACKGROUND] = 0xFFFFFFFF;
colors[EditorColors.COLOR_BACKGROUND_SECONDARY] = 0xFFF0F0F0;
colors[EditorColors.COLOR_SELECTION] = 0x701F9EDE;
colors[EditorColors.COLOR_CARET] = 0xFF000000;
colors[EditorColors.COLOR_CURRENT_LINE] = 0x05000050;
}
private static void applyDarkTheme(int[] colors) {
colors[EditorColors.COLOR_TEXT] = 0xFFFFFFFF;
colors[EditorColors.COLOR_KEYWORDS] = 0xFFE37F3E;
colors[EditorColors.COLOR_NUMBERS] = 0xFF3A9EE6;
@ -30,5 +58,6 @@ public class EditorColors {
colors[EditorColors.COLOR_BACKGROUND_SECONDARY] = 0xFF313335;
colors[EditorColors.COLOR_SELECTION] = 0x701F9EDE;
colors[EditorColors.COLOR_CARET] = 0x60FFFFFF;
colors[EditorColors.COLOR_CURRENT_LINE] = 0x10FFFFFF;
}
}
}

View file

@ -1,15 +1,14 @@
package com.panda3ds.pandroid.view.code.syntax;
public abstract class CodeSyntax {
public abstract void apply(byte[] syntaxBuffer,final CharSequence text);
public abstract void apply(byte[] syntaxBuffer, final CharSequence text);
public static CodeSyntax obtainByFileName(String name){
public static CodeSyntax obtainByFileName(String name) {
name = name.trim().toLowerCase();
String[] parts = name.split("\\.");
if (parts.length == 0)
return null;
switch (parts[parts.length-1]){
switch (parts[parts.length - 1]) {
case "lua":
return new LuaSyntax();
default:

View file

@ -55,6 +55,5 @@ class LuaSyntax extends CodeSyntax {
for (Matcher matcher = comment.matcher(text); matcher.find(); ) {
Arrays.fill(syntaxBuffer, matcher.start(), matcher.end(), EditorColors.COLOR_COMMENT);
}
}
}

View file

@ -8,7 +8,7 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.panda3ds.pandroid.data.game.GameMetadata;
import com.panda3ds.pandroid.view.recycle.AutoFitGridLayout;
import com.panda3ds.pandroid.view.recycler.AutoFitGridLayout;
import java.util.List;

View file

@ -1,4 +1,4 @@
package com.panda3ds.pandroid.view.recycle;
package com.panda3ds.pandroid.view.recycler;
import android.content.Context;
import android.util.TypedValue;
@ -27,4 +27,4 @@ public final class AutoFitGridLayout extends GridLayoutManager {
if (getSpanCount() != iconCount)
setSpanCount(iconCount);
}
}
}

View file

@ -1,4 +1,4 @@
package com.panda3ds.pandroid.view.recycle;
package com.panda3ds.pandroid.view.recycler;
import android.view.LayoutInflater;
import android.view.View;
@ -35,23 +35,23 @@ public class SimpleListAdapter<T> extends RecyclerView.Adapter<SimpleListAdapter
binder.bind(position, list.get(position), holder.getView());
}
public void addAll(T... items){
public void addAll(T... items) {
addAll(Arrays.asList(items));
}
public void addAll(List<T> items){
public void addAll(List<T> items) {
int index = list.size();
this.list.addAll(items);
notifyItemRangeInserted(index, getItemCount()-index);
notifyItemRangeInserted(index, getItemCount() - index);
}
public void clear(){
public void clear() {
int count = getItemCount();
list.clear();
notifyItemRangeRemoved(0, count);
}
public void sort(Comparator<T> comparator){
public void sort(Comparator<T> comparator) {
list.sort(comparator);
notifyItemRangeChanged(0, getItemCount());
}
@ -70,7 +70,7 @@ public class SimpleListAdapter<T> extends RecyclerView.Adapter<SimpleListAdapter
super(itemView);
}
public View getView(){
public View getView() {
return itemView;
}
}

View file

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,3L4,3c-1.1,0 -1.99,0.9 -1.99,2L2,15c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,5c0,-1.1 -0.9,-2 -2,-2zM11,6h2v2h-2L11,6zM11,9h2v2h-2L11,9zM8,6h2v2L8,8L8,6zM8,9h2v2L8,11L8,9zM7,11L5,11L5,9h2v2zM7,8L5,8L5,6h2v2zM16,15L8,15v-2h8v2zM16,11h-2L14,9h2v2zM16,8h-2L14,6h2v2zM19,11h-2L17,9h2v2zM19,8h-2L17,6h2v2zM12,23l4,-4L8,19l4,4z"/>
</vector>

View file

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:tint="#000000" android:viewportHeight="24"
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M11.59,7.41L15.17,11H1v2h14.17l-3.59,3.59L13,18l6,-6 -6,-6 -1.41,1.41zM20,6v12h2V6h-2z"/>
</vector>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFF"/>
<corners android:radius="99999dp"/>
</shape>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
@ -7,75 +8,126 @@
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="58dp"
android:orientation="horizontal">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="start|center"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="17sp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="end|center"
android:paddingLeft="14dp"
android:paddingRight="14dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/save"
android:layout_width="32dp"
android:layout_height="32dp"
android:padding="5dp"
android:tint="?colorOnSurface"
app:srcCompat="@drawable/ic_save"
android:scaleType="centerInside"
android:background="#0000"/>
android:layout_height="58dp"
android:orientation="horizontal">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/lua_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="start|center"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="17sp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:visibility="gone">
android:gravity="end|center"
android:paddingLeft="14dp"
android:paddingRight="14dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/lua_play"
android:id="@+id/save"
android:layout_width="32dp"
android:layout_height="32dp"
android:padding="5dp"
android:layout_marginHorizontal="5dp"
android:tint="?colorOnSurface"
app:srcCompat="@drawable/ic_play"
app:srcCompat="@drawable/ic_save"
android:scaleType="centerInside"
android:background="#0000"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/lua_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/lua_play"
android:layout_width="32dp"
android:layout_height="32dp"
android:padding="5dp"
android:layout_marginHorizontal="5dp"
android:tint="?colorOnSurface"
app:srcCompat="@drawable/ic_play"
android:scaleType="centerInside"
android:background="#0000"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorOnSurface"
android:alpha="0.1"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.panda3ds.pandroid.view.code.CodeEditor
android:id="@+id/editor"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/keybar"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/keybar"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight="38dp"
android:visibility="visible"
android:orientation="horizontal"
android:background="?colorSurfaceVariant">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/key_tab"
android:layout_width="75dp"
android:layout_height="match_parent"
android:padding="0dp"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_tab"
android:tint="?colorOnSurfaceVariant"
android:background="#0000"/>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/key_hide"
android:layout_width="75dp"
android:layout_height="match_parent"
android:padding="0dp"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_keyboard_hide"
android:tint="?colorOnSurfaceVariant"
android:background="#0000"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.panda3ds.pandroid.view.code.CodeEditor
android:id="@+id/editor"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</FrameLayout>

View file

@ -88,14 +88,14 @@
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hacks"
android:text="@string/others"
style="@style/TextAppearanceGameDrawerSubTitle"/>
<com.google.android.material.navigation.NavigationView
android:id="@+id/hacks_navigation"
android:id="@+id/others_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/game_drawer_hacks"
app:menu="@menu/game_drawer_others"
android:background="?colorSurface"/>
</androidx.appcompat.widget.LinearLayoutCompat>

View file

@ -40,8 +40,9 @@
<string name="scripts">Scripts</string>
<string name="file_not_supported">Esse arquivo não é suportado</string>
<string name="save_and_exit">Salvar e sair</string>
<string name="exit_without_save">Sair sem salvar</string>
<string name="exit_without_save_title_ff">Salvar \"%s\" antes de sair?</string>
<string name="exit_without_saving">Sair sem salvar</string>
<string name="exit_without_saving_title_ff">Salvar \"%s\" antes de sair?</string>
<string name="open_file">Abrir arquivo</string>
<string name="create_new">Criar novo</string>
<string name="running_ff">Executando \"%s\" ...</string>
</resources>

View file

@ -41,8 +41,8 @@
<string name="scripts">Scripts</string>
<string name="file_not_supported">File type isn\'t supported</string>
<string name="save_and_exit">Save and exit</string>
<string name="exit_without_save">Exit without save</string>
<string name="exit_without_save_title_ff">Exit without save \"%s\"?</string>
<string name="exit_without_saving">Exit without saving</string>
<string name="exit_without_saving_title_ff">Exit without saving \"%s\"?</string>
<string name="open_file">Open file</string>
<string name="create_new">Create new</string>
<string name="running_ff">Running \"%s\" ...</string>