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\" ...