From a0c2d6a2b09235fba5b30f22fb4a629300874c0d Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Mon, 16 Feb 2026 13:00:42 +0100
Subject: [PATCH 01/11] feat : editor implemented
---
app/src/main/res/layout/fragment_main.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 54c5ca7..f4a019d 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -92,6 +92,12 @@
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
+
+
+
Date: Mon, 16 Feb 2026 15:33:16 +0100
Subject: [PATCH 02/11] feat : editor implemented
---
app/src/main/res/layout/fragment_main.xml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index f4a019d..8065d15 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -98,8 +98,15 @@
android:layout_height="match_parent"
android:id="@+id/editor"/>
+
+
+
+
Date: Mon, 16 Feb 2026 15:36:19 +0100
Subject: [PATCH 03/11] feat : editor implemented
---
.../com/sparkleseditor/fragments/MainFragment.java | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 9e48a89..15fb7ec 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -48,8 +48,17 @@ private void setupToolbar() {
binding.toolbar.setOnMenuItemClickListener(
item->{
int id = item.getItemId();
- if (id == R.id.undo) return true;
- if (id == R.id.redo) return true;
+ if (id == R.id.undo){
+ if (binding.editor.canUndo()){
+ binding.editor.undo();
+ }
+ return true ;
+ }
+ if (id == R.id.redo) {
+ if (binding.editor.canRedo()) {
+ binding.editor.redo();
+ }
+ }
if (id == R.id.right_drawer) {
binding.drawer.openDrawer(GravityCompat.END);
return true;
From b1d144b2099d01159f91fea9666fdaa5efdf6892 Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Mon, 16 Feb 2026 19:56:11 +0100
Subject: [PATCH 04/11] feat : softinputview implemented
---
app/build.gradle.kts | 1 +
app/src/main/AndroidManifest.xml | 3 ++-
.../fragments/MainFragment.java | 26 +++++++++++++++++++
app/src/main/res/layout/fragment_main.xml | 19 +++++++-------
gradle/libs.versions.toml | 1 +
5 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 4b10e71..b1b2363 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -62,6 +62,7 @@ dependencies {
implementation(platform(libs.editor.bom))
implementation(libs.editor)
implementation(libs.language.textmate)
+ implementation(libs.language.java)
implementation(libs.transition)
implementation(libs.fragment)
implementation(libs.activity)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 16e6ebb..9cc8bfe 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,7 +16,8 @@
+ android:theme="@style/Theme.SparklesEditor"
+ android:windowSoftInputMode="adjustResize">
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 15fb7ec..4774d12 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -15,10 +15,26 @@
import com.sparkleseditor.databinding.FragmentMainBinding;
import com.sparkleseditor.navigation.Navigator;
+import io.github.rosemoe.sora.widget.SymbolInputView;
+
public class MainFragment extends BaseFragment {
private FragmentMainBinding binding;
+ public static final String[] SYMBOLS = {
+ "TAB", "{", "}", "(", ")",
+ ",", ".", ";", "\"", "?",
+ "+", "-", "*", "/", "<",
+ ">", "[", "]", ":"
+ };
+
+ public static final String[] SYMBOL_INSERT_TEXT = {
+ "\t", "{}", "}", "(", ")",
+ ",", ".", ";", "\"", "?",
+ "+", "-", "*", "/", "<",
+ ">", "[", "]", ":"
+ };
+
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
@@ -34,6 +50,16 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setupToolbar();
setupToolbox();
+ setupInputView();
+
+
+ }
+
+ private void setupInputView() {
+
+ SymbolInputView inputView = binding.inputer;
+ inputView.bindEditor(binding.editor);
+ inputView.addSymbols(SYMBOLS, SYMBOL_INSERT_TEXT);
}
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 8065d15..67ff454 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -23,10 +23,7 @@
android:layout_height="?attr/actionBarSize"
app:title="@string/app_name"
app:menu="@menu/menu_main" />
-
+
+ android:layout_height="0dp"
+ android:id="@+id/editor"
+ android:layout_weight="1"/>
-
+ android:layout_height="wrap_content"/>
-
+
+
Date: Mon, 16 Feb 2026 21:11:36 +0100
Subject: [PATCH 05/11] fix : softinputview with FloatingActionButton
---
.../sparkleseditor/fragments/MainFragment.java | 7 +++++++
app/src/main/res/layout/fragment_main.xml | 15 +++++++++++----
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 4774d12..8aba89d 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -2,14 +2,19 @@
import android.annotation.SuppressLint;
import android.os.Bundle;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.core.graphics.Insets;
import androidx.core.view.GravityCompat;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.sparkleseditor.R;
import com.sparkleseditor.components.ExpandableLayout;
import com.sparkleseditor.databinding.FragmentMainBinding;
@@ -55,6 +60,8 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
}
+
+
private void setupInputView() {
SymbolInputView inputView = binding.inputer;
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 67ff454..0095365 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -101,16 +101,23 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
-
+
+
From 07112e75d3d5b6526fbccc8621f2dc6ea583dec6 Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Mon, 16 Feb 2026 21:13:02 +0100
Subject: [PATCH 06/11] fix : coloring of softinputview
---
app/src/main/res/layout/fragment_main.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 0095365..bcd9d8a 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -99,7 +99,8 @@
+ android:layout_height="wrap_content"
+ android:background="?colorSurface"/>
From 15c05fb7ef2b2e301a531f251a29fdc9772d949b Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Tue, 17 Feb 2026 00:35:03 +0100
Subject: [PATCH 07/11] feat : minor ui changes
---
.../drawable/ic_play_arrow_rounded_filled_24dp.xml | 10 ++++++++++
app/src/main/res/layout/fragment_main.xml | 14 ++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_play_arrow_rounded_filled_24dp.xml
diff --git a/app/src/main/res/drawable/ic_play_arrow_rounded_filled_24dp.xml b/app/src/main/res/drawable/ic_play_arrow_rounded_filled_24dp.xml
new file mode 100644
index 0000000..94979f5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_play_arrow_rounded_filled_24dp.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index bcd9d8a..fb700ea 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -96,11 +96,17 @@
android:id="@+id/editor"
android:layout_weight="1"/>
+
+ android:background="@android:color/transparent"/>
+
@@ -114,12 +120,12 @@
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- app:layout_anchor="@id/inputer"
+ app:layout_anchor="@id/scroll"
app:layout_anchorGravity="top|end"
- android:layout_marginBottom="45dp"
+ android:layout_marginBottom="64dp"
android:layout_marginEnd="16dp"
android:contentDescription="Play"
- app:srcCompat="@android:drawable/ic_dialog_email" />
+ app:srcCompat="@drawable/ic_play_arrow_rounded_filled_24dp" />
From 534d75836b3d5649a3410dd6b86668d3f5d89a72 Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Tue, 17 Feb 2026 14:32:22 +0100
Subject: [PATCH 08/11] chore : editor symbolinputview improvements
---
.../java/com/sparkleseditor/fragments/MainFragment.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 8aba89d..c6d19c8 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -1,6 +1,9 @@
package com.sparkleseditor.fragments;
+import static android.R.color.transparent;
+
import android.annotation.SuppressLint;
+import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
@@ -27,14 +30,14 @@ public class MainFragment extends BaseFragment {
private FragmentMainBinding binding;
public static final String[] SYMBOLS = {
- "TAB", "{", "}", "(", ")",
+ "TAB","↵", "{", "}", "(", ")",
",", ".", ";", "\"", "?",
"+", "-", "*", "/", "<",
">", "[", "]", ":"
};
public static final String[] SYMBOL_INSERT_TEXT = {
- "\t", "{}", "}", "(", ")",
+ "\t","\n", "{}", "}", "(", ")",
",", ".", ";", "\"", "?",
"+", "-", "*", "/", "<",
">", "[", "]", ":"
@@ -56,6 +59,7 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
setupToolbar();
setupToolbox();
setupInputView();
+ binding.fab.setTranslationY(-12);
}
@@ -67,6 +71,7 @@ private void setupInputView() {
SymbolInputView inputView = binding.inputer;
inputView.bindEditor(binding.editor);
inputView.addSymbols(SYMBOLS, SYMBOL_INSERT_TEXT);
+ inputView.setBackgroundColor(Color.TRANSPARENT);
}
From b48ece442988d295d2fe1c2423c13b7c960b50cf Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Tue, 17 Feb 2026 15:21:00 +0100
Subject: [PATCH 09/11] chore : editor symbolinputview improvements
---
.../java/com/sparkleseditor/fragments/MainFragment.java | 7 -------
app/src/main/res/layout/fragment_main.xml | 6 +++---
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index c6d19c8..2ba5c32 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -1,23 +1,16 @@
package com.sparkleseditor.fragments;
-import static android.R.color.transparent;
-
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
-import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
-import androidx.core.graphics.Insets;
import androidx.core.view.GravityCompat;
-import androidx.core.view.ViewCompat;
-import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.sparkleseditor.R;
import com.sparkleseditor.components.ExpandableLayout;
import com.sparkleseditor.databinding.FragmentMainBinding;
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index fb700ea..066dc68 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -100,12 +100,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/scroll"
- android:scrollbars="none">
+ android:scrollbars="none"
+ android:background="?colorSurface">
+ android:layout_height="wrap_content" />
From 92d1fbd5a286ff9eed3bf95b4a25273d15a13709 Mon Sep 17 00:00:00 2001
From: SyntaxSpin <86142168+SyntaxSpin@users.noreply.github.com>
Date: Wed, 18 Feb 2026 07:13:28 +0100
Subject: [PATCH 10/11] feat : test TabLayout
---
.../main/java/com/sparkleseditor/fragments/MainFragment.java | 5 +++++
app/src/main/res/layout/fragment_main.xml | 4 +++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 2ba5c32..6105af2 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -52,11 +52,16 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
setupToolbar();
setupToolbox();
setupInputView();
+ setupTabLayoutTemp();
binding.fab.setTranslationY(-12);
}
+ private void setupTabLayoutTemp() {
+ binding.tabLayout.addTab(binding.tabLayout.newTab().setText("My Tab Title"));
+
+ }
private void setupInputView() {
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 066dc68..eb5d0f6 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -88,7 +88,9 @@
+ android:layout_height="wrap_content"
+ app:tabGravity="start"
+ app:tabMode="scrollable"/>
Date: Wed, 18 Feb 2026 12:25:36 +0100
Subject: [PATCH 11/11] feat : SlideX Drawers
---
.../fragments/MainFragment.java | 79 +++++++++++++++++--
.../drawable/ic_menu_rounded_filled_24dp.xml | 10 +++
app/src/main/res/layout/fragment_main.xml | 14 ++--
app/src/main/res/menu/menu_main.xml | 5 --
4 files changed, 90 insertions(+), 18 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_menu_rounded_filled_24dp.xml
diff --git a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
index 6105af2..dfe2faa 100644
--- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
+++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
@@ -8,7 +8,10 @@
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.core.view.GravityCompat;
+import androidx.core.view.ViewCompat;
+import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import com.sparkleseditor.R;
@@ -53,11 +56,70 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
setupToolbox();
setupInputView();
setupTabLayoutTemp();
+ slideXDrawer();
binding.fab.setTranslationY(-12);
}
+ private void slideXDrawer() {
+ /*int statusBarHeight =
+ getResources()
+ .getDimensionPixelSize(
+ getResources().getIdentifier("status_bar_height", "dimen", "android"));*/
+ int navigationBarHeight =
+ getResources()
+ .getDimensionPixelSize(
+ getResources().getIdentifier("navigation_bar_height", "dimen", "android"));
+ ViewGroup.LayoutParams layoutParams = binding.leftDrawerMenu.getLayoutParams();
+ if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
+ ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams;
+ binding.leftDrawerMenu.setLayoutParams(marginLayoutParams);
+ }
+
+ binding.drawer.setScrimColor(Color.TRANSPARENT);
+ binding.drawer.setDrawerElevation(0f);
+ binding.drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
+
+ float slideX;
+ @Override
+ public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
+ int gravity = ((DrawerLayout.LayoutParams) drawerView.getLayoutParams()).gravity;
+ if (gravity == GravityCompat.START) {
+ binding.coordinator.setTranslationX(slideOffset * drawerView.getWidth());
+ binding.drawer.bringChildToFront(drawerView);
+ binding.drawer.requestLayout();
+ } else if (gravity == GravityCompat.END) {
+ binding.coordinator.setTranslationX(-slideOffset * drawerView.getWidth());
+ binding.drawer.bringChildToFront(drawerView);
+ binding.drawer.requestLayout();
+ }
+ }
+
+ @Override
+ public void onDrawerClosed(@NonNull View drawerView) {
+ binding.coordinator.setTranslationX(0f);
+ }
+
+ @Override
+ public void onDrawerStateChanged(int newState) {
+ if (newState == DrawerLayout.STATE_IDLE) {
+ if (!binding.drawer.isDrawerOpen(GravityCompat.START) &&
+ !binding.drawer.isDrawerOpen(GravityCompat.END)) {
+ binding.coordinator.setTranslationX(0f);
+ }
+ }
+
+ }
+
+
+ });
+
+ binding.toolbar.setNavigationOnClickListener(v ->{
+ binding.drawer.openDrawer(GravityCompat.START);
+ });
+ }
+
private void setupTabLayoutTemp() {
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("My Tab Title"));
@@ -77,6 +139,14 @@ private void setupToolbox() {
binding.options.setExpansion(false);
binding.options.setDuration(200);
binding.options.setOrientatin(ExpandableLayout.VERTICAL);
+ binding.settings.setOnClickListener(v->{
+ Fragment frgSettings = new SettingsFragment();
+ Navigator.pushTo(
+ getParentFragmentManager(),
+ R.id.nav_host,
+ frgSettings
+ );
+ });
}
@SuppressLint("NonConstantResourceId")
@@ -99,14 +169,7 @@ private void setupToolbar() {
binding.drawer.openDrawer(GravityCompat.END);
return true;
}
- if (id == R.id.action_settings){
- Fragment frgSettings = new SettingsFragment();
- Navigator.pushTo(
- getParentFragmentManager(),
- R.id.nav_host,
- frgSettings
- );
- }
+
if (id == R.id.toolbar){
if (!binding.options.isExpanded()) {
binding.options.expand();
diff --git a/app/src/main/res/drawable/ic_menu_rounded_filled_24dp.xml b/app/src/main/res/drawable/ic_menu_rounded_filled_24dp.xml
new file mode 100644
index 0000000..254386b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_rounded_filled_24dp.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index eb5d0f6..aa44cb8 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -6,11 +6,13 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:background="?colorSurface">
+ android:layout_height="match_parent"
+ android:id="@+id/coordinator">
+ app:title="Sparkles"
+ app:menu="@menu/menu_main"
+ app:navigationIcon="@drawable/ic_menu_rounded_filled_24dp"/>
@@ -136,7 +139,8 @@
+ android:layout_gravity="start"
+ android:id="@+id/left_drawer_menu"/>
-
\ No newline at end of file