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 9e48a89..dfe2faa 100644 --- a/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java +++ b/app/src/main/java/com/sparkleseditor/fragments/MainFragment.java @@ -1,13 +1,17 @@ package com.sparkleseditor.fragments; import android.annotation.SuppressLint; +import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; 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; @@ -15,10 +19,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","\n", "{}", "}", "(", ")", + ",", ".", ";", "\"", "?", + "+", "-", "*", "/", "<", + ">", "[", "]", ":" + }; + @Override public View onCreateView( @NonNull LayoutInflater inflater, ViewGroup container, @@ -34,6 +54,84 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setupToolbar(); 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")); + + } + + + private void setupInputView() { + + SymbolInputView inputView = binding.inputer; + inputView.bindEditor(binding.editor); + inputView.addSymbols(SYMBOLS, SYMBOL_INSERT_TEXT); + inputView.setBackgroundColor(Color.TRANSPARENT); } @@ -41,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") @@ -48,20 +154,22 @@ 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; } - 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/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 54c5ca7..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"/> + + + + + + - + + + + + app:srcCompat="@drawable/ic_play_arrow_rounded_filled_24dp" /> + + + android:layout_gravity="start" + android:id="@+id/left_drawer_menu"/> - \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index da1099e..e888bae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,6 +24,7 @@ junit = { group = "junit", name = "junit", version.ref = "junit" } ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +language-java = { module = "io.github.rosemoe:language-java" } language-textmate = { module = "io.github.rosemoe:language-textmate" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }