1717
1818import com .amrdeveloper .codeview .Code ;
1919import com .amrdeveloper .codeview .CodeView ;
20- import com .amrdeveloper .codeview .Keyword ;
21- import com .amrdeveloper .codeviewlibrary .syntax .Theme ;
22- import com .amrdeveloper .codeviewlibrary .syntax .Language ;
23- import com .amrdeveloper .codeviewlibrary .syntax .SyntaxManager ;
20+ import com .amrdeveloper .codeviewlibrary .syntax .ThemeName ;
21+ import com .amrdeveloper .codeviewlibrary .syntax .LanguageName ;
22+ import com .amrdeveloper .codeviewlibrary .syntax .LanguageManager ;
2423import com .google .android .material .bottomsheet .BottomSheetDialog ;
2524
26- import java .util .ArrayList ;
2725import java .util .HashMap ;
28- import java .util .HashSet ;
2926import java .util .List ;
3027import java .util .Map ;
31- import java .util .Set ;
3228
3329public class MainActivity extends AppCompatActivity {
3430
3531 private CodeView codeView ;
36- private SyntaxManager syntaxManager ;
32+ private LanguageManager languageManager ;
3733
38- private Language currentLanguage = Language .JAVA ;
39- private Theme currentTheme = Theme .MONOKAI ;
34+ private LanguageName currentLanguage = LanguageName .JAVA ;
35+ private ThemeName currentTheme = ThemeName .MONOKAI ;
4036
4137 private final boolean useModernAutoCompleteAdapter = true ;
4238
@@ -64,17 +60,9 @@ private void configCodeView() {
6460 codeView .setTabLength (4 );
6561 codeView .setEnableAutoIndentation (true );
6662
67- Set <Character > indentationStart = new HashSet <>();
68- indentationStart .add ('{' );
69- codeView .setIndentationStarts (indentationStart );
70-
71- Set <Character > indentationEnds = new HashSet <>();
72- indentationEnds .add ('}' );
73- codeView .setIndentationEnds (indentationEnds );
74-
7563 // Setup the language and theme with SyntaxManager helper class
76- syntaxManager = new SyntaxManager (this , codeView );
77- syntaxManager .applyTheme (currentLanguage ,currentTheme );
64+ languageManager = new LanguageManager (this , codeView );
65+ languageManager .applyTheme (currentLanguage , currentTheme );
7866
7967 // Setup auto pair complete
8068 final Map <Character , Character > pairCompleteMap = new HashMap <>();
@@ -87,45 +75,41 @@ private void configCodeView() {
8775 codeView .setPairCompleteMap (pairCompleteMap );
8876 codeView .enablePairComplete (true );
8977
90- // Setup the auto complete for the current language
78+ // Setup the auto complete and auto indenting for the current language
9179 configLanguageAutoComplete ();
80+ configLanguageAutoIndentation ();
9281 }
9382
9483 private void configLanguageAutoComplete () {
95- final String [] languageKeywords ;
96- switch (currentLanguage ) {
97- case JAVA :
98- languageKeywords = getResources ().getStringArray (R .array .java_keywords );
99- break ;
100- case PYTHON :
101- languageKeywords = getResources ().getStringArray (R .array .python_keywords );
102- break ;
103- default :
104- languageKeywords = getResources ().getStringArray (R .array .go_keywords );
105- break ;
106- }
107-
10884 if (useModernAutoCompleteAdapter ) {
109- final List <Code > codeList = new ArrayList <>();
110- for (String keyword : languageKeywords ) {
111- codeList .add (new Keyword (keyword , keyword ));
112- }
113- // Here you can add snippets to the codeList
85+ // Load the code list (keywords and snippets) for the current language
86+ List <Code > codeList = languageManager .getLanguageCodeList (currentLanguage );
87+
88+ // Use CodeViewAdapter or custom one
11489 CustomCodeViewAdapter adapter = new CustomCodeViewAdapter (this , codeList );
90+
91+ // Add the odeViewAdapter to the CodeView
11592 codeView .setAdapter (adapter );
11693 } else {
94+ String [] languageKeywords = languageManager .getLanguageKeywords (currentLanguage );
95+
11796 // Custom list item xml layout
11897 final int layoutId = R .layout .list_item_suggestion ;
11998
12099 // TextView id to put suggestion on it
121100 final int viewId = R .id .suggestItemTextView ;
122101 ArrayAdapter <String > adapter = new ArrayAdapter <>(this , layoutId , viewId , languageKeywords );
123102
124- // Add Custom Adapter to the CodeView
103+ // Add the ArrayAdapter to the CodeView
125104 codeView .setAdapter (adapter );
126105 }
127106 }
128107
108+ private void configLanguageAutoIndentation () {
109+ codeView .setIndentationStarts (languageManager .getLanguageIndentationStarts (currentLanguage ));
110+ codeView .setIndentationEnds (languageManager .getLanguageIndentationEnds (currentLanguage ));
111+ }
112+
129113 @ Override
130114 public boolean onCreateOptionsMenu (Menu menu ) {
131115 getMenuInflater ().inflate (R .menu .menu_main , menu );
@@ -146,26 +130,27 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
146130 }
147131
148132 private void changeTheEditorLanguage (int languageId ) {
149- final Language oldLanguage = currentLanguage ;
150- if (languageId == R .id .language_java ) currentLanguage = Language .JAVA ;
151- else if (languageId == R .id .language_python ) currentLanguage = Language .PYTHON ;
152- else if (languageId == R .id .language_go ) currentLanguage = Language .GO_LANG ;
133+ final LanguageName oldLanguage = currentLanguage ;
134+ if (languageId == R .id .language_java ) currentLanguage = LanguageName .JAVA ;
135+ else if (languageId == R .id .language_python ) currentLanguage = LanguageName .PYTHON ;
136+ else if (languageId == R .id .language_go ) currentLanguage = LanguageName .GO_LANG ;
153137
154138 if (currentLanguage != oldLanguage ) {
155- syntaxManager .applyTheme (currentLanguage , currentTheme );
139+ languageManager .applyTheme (currentLanguage , currentTheme );
156140 configLanguageAutoComplete ();
141+ configLanguageAutoIndentation ();
157142 }
158143 }
159144
160145 private void changeTheEditorTheme (int themeId ) {
161- final Theme oldTheme = currentTheme ;
162- if (themeId == R .id .theme_monokia ) currentTheme = Theme .MONOKAI ;
163- else if (themeId == R .id .theme_noctics ) currentTheme = Theme .NOCTIS_WHITE ;
164- else if (themeId == R .id .theme_five_color ) currentTheme = Theme .FIVE_COLOR ;
165- else if (themeId == R .id .theme_orange_box ) currentTheme = Theme .ORANGE_BOX ;
146+ final ThemeName oldTheme = currentTheme ;
147+ if (themeId == R .id .theme_monokia ) currentTheme = ThemeName .MONOKAI ;
148+ else if (themeId == R .id .theme_noctics ) currentTheme = ThemeName .NOCTIS_WHITE ;
149+ else if (themeId == R .id .theme_five_color ) currentTheme = ThemeName .FIVE_COLOR ;
150+ else if (themeId == R .id .theme_orange_box ) currentTheme = ThemeName .ORANGE_BOX ;
166151
167152 if (currentTheme != oldTheme ) {
168- syntaxManager .applyTheme (currentLanguage , currentTheme );
153+ languageManager .applyTheme (currentLanguage , currentTheme );
169154 }
170155 }
171156
0 commit comments