Skip to content
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.SparklesEditor">
android:theme="@style/Theme.SparklesEditor"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
128 changes: 118 additions & 10 deletions app/src/main/java/com/sparkleseditor/fragments/MainFragment.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,44 @@
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;
import com.sparkleseditor.components.ExpandableLayout;
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,
Expand All @@ -34,34 +54,122 @@ 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);

}

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")
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();
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_menu_rounded_filled_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorOnSurface">
<path
android:fillColor="@android:color/white"
android:pathData="M160,720Q143,720 131.5,708.5Q120,697 120,680Q120,663 131.5,651.5Q143,640 160,640L800,640Q817,640 828.5,651.5Q840,663 840,680Q840,697 828.5,708.5Q817,720 800,720L160,720ZM160,520Q143,520 131.5,508.5Q120,497 120,480Q120,463 131.5,451.5Q143,440 160,440L800,440Q817,440 828.5,451.5Q840,463 840,480Q840,497 828.5,508.5Q817,520 800,520L160,520ZM160,320Q143,320 131.5,308.5Q120,297 120,280Q120,263 131.5,251.5Q143,240 160,240L800,240Q817,240 828.5,251.5Q840,263 840,280Q840,297 828.5,308.5Q817,320 800,320L160,320Z"/>
</vector>
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_play_arrow_rounded_filled_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorOnSurface">
<path
android:fillColor="@android:color/white"
android:pathData="M320,687L320,273Q320,256 332,244.5Q344,233 360,233Q365,233 370.5,234.5Q376,236 381,239L707,446Q716,452 720.5,461Q725,470 725,480Q725,490 720.5,499Q716,508 707,514L381,721Q376,724 370.5,725.5Q365,727 360,727Q344,727 332,715.5Q320,704 320,687Z"/>
</vector>
58 changes: 45 additions & 13 deletions app/src/main/res/layout/fragment_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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">

<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:id="@+id/coordinator">

<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
Expand All @@ -21,12 +23,10 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/app_name"
app:menu="@menu/menu_main" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
app:title="Sparkles"
app:menu="@menu/menu_main"
app:navigationIcon="@drawable/ic_menu_rounded_filled_24dp"/>

</com.google.android.material.appbar.AppBarLayout>

<LinearLayout
Expand Down Expand Up @@ -91,24 +91,56 @@
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="start"
app:tabMode="scrollable"/>

<io.github.rosemoe.sora.widget.CodeEditor
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/editor"
android:layout_weight="1"/>

<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/scroll"
android:scrollbars="none"
android:background="?colorSurface">
<io.github.rosemoe.sora.widget.SymbolInputView
android:id="@+id/inputer"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</HorizontalScrollView>


</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:visibility="invisible"
android:layout_gravity="bottom"
android:id="@+id/view"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:layout_anchor="@id/scroll"
app:layout_anchorGravity="top|end"
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" />



</androidx.coordinatorlayout.widget.CoordinatorLayout>

<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start" />
android:layout_gravity="start"
android:id="@+id/left_drawer_menu"/>

<com.google.android.material.navigation.NavigationView
android:id="@+id/right_drawer_menu"
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/res/menu/menu_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,5 @@
android:title="right"
app:showAsAction="always" />

<item
android:id="@+id/action_settings"
android:orderInCategory="101"
android:title="@string/action_settings"
app:showAsAction="never" />

</menu>
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down