From de027afea81db16936e50b2150873adcbecfcd7b Mon Sep 17 00:00:00 2001
From: Gabriel <97042217+GabrielBRDeveloper@users.noreply.github.com>
Date: Wed, 10 Jan 2024 11:51:20 -0400
Subject: [PATCH] Code Editor + Lua Patchs + Fixes
---
src/pandroid/app/src/main/AndroidManifest.xml | 1 +
.../panda3ds/pandroid/app/BaseActivity.java | 14 +-
.../panda3ds/pandroid/app/GameActivity.java | 11 +-
.../pandroid/app/PandroidApplication.java | 29 ++++
.../app/editor/CodeEditorActivity.java | 47 +++++-
.../pandroid/app/game/DrawerFragment.java | 8 +-
.../pandroid/app/game/LuaDialogFragment.java | 4 +-
.../pandroid/view/code/BaseEditor.java | 6 +-
.../pandroid/view/code/BasicTextEditor.java | 3 +-
.../pandroid/view/code/CodeEditor.java | 2 +-
.../pandroid/view/code/EditorColors.java | 31 +++-
.../pandroid/view/code/syntax/CodeSyntax.java | 7 +-
.../pandroid/view/code/syntax/LuaSyntax.java | 1 -
.../view/gamesgrid/GamesGridView.java | 2 +-
.../AutoFitGridLayout.java | 4 +-
.../SimpleListAdapter.java | 14 +-
.../main/res/drawable/ic_keyboard_hide.xml | 5 +
.../app/src/main/res/drawable/ic_tab.xml | 5 +
.../src/main/res/drawable/white_circle.xml | 5 -
.../main/res/layout/activity_code_editor.xml | 154 ++++++++++++------
.../main/res/layout/fragment_game_drawer.xml | 6 +-
...rawer_hacks.xml => game_drawer_others.xml} | 0
.../src/main/res/values-pt-rBR/strings.xml | 5 +-
.../app/src/main/res/values/strings.xml | 4 +-
24 files changed, 265 insertions(+), 103 deletions(-)
rename src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/{recycle => recycler}/AutoFitGridLayout.java (95%)
rename src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/{recycle => recycler}/SimpleListAdapter.java (85%)
create mode 100644 src/pandroid/app/src/main/res/drawable/ic_keyboard_hide.xml
create mode 100644 src/pandroid/app/src/main/res/drawable/ic_tab.xml
delete mode 100644 src/pandroid/app/src/main/res/drawable/white_circle.xml
rename src/pandroid/app/src/main/res/menu/{game_drawer_hacks.xml => game_drawer_others.xml} (100%)
diff --git a/src/pandroid/app/src/main/AndroidManifest.xml b/src/pandroid/app/src/main/AndroidManifest.xml
index 94d6a548..9f767654 100644
--- a/src/pandroid/app/src/main/AndroidManifest.xml
+++ b/src/pandroid/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
{
+ ((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();
}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java
index b4aca3e6..653ffd7c 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/DrawerFragment.java
@@ -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);
}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java
index afab6c40..6cd2efa2 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/game/LuaDialogFragment.java
@@ -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;
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java
index a6323fe5..ef3ec899 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BaseEditor.java
@@ -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();
}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java
index acd8ac92..0bc0c9d9 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/BasicTextEditor.java
@@ -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()));
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java
index ce8ba9d3..6bead30d 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/CodeEditor.java
@@ -33,7 +33,7 @@ public class CodeEditor extends BaseEditor {
@Override
protected void onTextChanged() {
super.onTextChanged();
- if (contentChangeListener != null){
+ if (contentChangeListener != null) {
contentChangeListener.run();
}
}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java
index f4508753..3b12ddf9 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/EditorColors.java
@@ -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;
}
-}
+}
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java
index 3f8f7f1e..15e68b8f 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/CodeSyntax.java
@@ -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:
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java
index ca39f891..93e34134 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/code/syntax/LuaSyntax.java
@@ -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);
}
-
}
}
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java
index efd3a3a5..24e65e2f 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/GamesGridView.java
@@ -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;
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/AutoFitGridLayout.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java
similarity index 95%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/AutoFitGridLayout.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java
index d64c9355..9cb6578d 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/AutoFitGridLayout.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/AutoFitGridLayout.java
@@ -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);
}
-}
+}
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/SimpleListAdapter.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java
similarity index 85%
rename from src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/SimpleListAdapter.java
rename to src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java
index 16c05aa5..88065c3b 100644
--- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycle/SimpleListAdapter.java
+++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/recycler/SimpleListAdapter.java
@@ -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 extends RecyclerView.Adapter items){
+ public void addAll(List 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 comparator){
+ public void sort(Comparator comparator) {
list.sort(comparator);
notifyItemRangeChanged(0, getItemCount());
}
@@ -70,7 +70,7 @@ public class SimpleListAdapter extends RecyclerView.Adapter
+
+
diff --git a/src/pandroid/app/src/main/res/drawable/ic_tab.xml b/src/pandroid/app/src/main/res/drawable/ic_tab.xml
new file mode 100644
index 00000000..3f7efd95
--- /dev/null
+++ b/src/pandroid/app/src/main/res/drawable/ic_tab.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/pandroid/app/src/main/res/drawable/white_circle.xml b/src/pandroid/app/src/main/res/drawable/white_circle.xml
deleted file mode 100644
index e93df20e..00000000
--- a/src/pandroid/app/src/main/res/drawable/white_circle.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/res/layout/activity_code_editor.xml b/src/pandroid/app/src/main/res/layout/activity_code_editor.xml
index 76142367..5cef8609 100644
--- a/src/pandroid/app/src/main/res/layout/activity_code_editor.xml
+++ b/src/pandroid/app/src/main/res/layout/activity_code_editor.xml
@@ -1,5 +1,6 @@
-
-
-
-
-
-
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
-
+ android:layout_height="58dp"
+ android:orientation="horizontal">
+
+
+
+
+
+
+ android:gravity="end|center"
+ android:paddingLeft="14dp"
+ android:paddingRight="14dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml b/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml
index 0ce0df97..fa81a503 100644
--- a/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml
+++ b/src/pandroid/app/src/main/res/layout/fragment_game_drawer.xml
@@ -88,14 +88,14 @@
diff --git a/src/pandroid/app/src/main/res/menu/game_drawer_hacks.xml b/src/pandroid/app/src/main/res/menu/game_drawer_others.xml
similarity index 100%
rename from src/pandroid/app/src/main/res/menu/game_drawer_hacks.xml
rename to src/pandroid/app/src/main/res/menu/game_drawer_others.xml
diff --git a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml
index 5c8ee042..065b9e4f 100644
--- a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml
+++ b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml
@@ -40,8 +40,9 @@
Scripts
Esse arquivo não é suportado
Salvar e sair
- Sair sem salvar
- Salvar \"%s\" antes de sair?
+ Sair sem salvar
+ Salvar \"%s\" antes de sair?
Abrir arquivo
Criar novo
+ Executando \"%s\" ...
\ No newline at end of file
diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml
index 4421cb83..e0de62e1 100644
--- a/src/pandroid/app/src/main/res/values/strings.xml
+++ b/src/pandroid/app/src/main/res/values/strings.xml
@@ -41,8 +41,8 @@
Scripts
File type isn\'t supported
Save and exit
- Exit without save
- Exit without save \"%s\"?
+ Exit without saving
+ Exit without saving \"%s\"?
Open file
Create new
Running \"%s\" ...