17
17
18
18
import com .amrdeveloper .codeview .Code ;
19
19
import 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 ;
24
23
import com .google .android .material .bottomsheet .BottomSheetDialog ;
25
24
26
- import java .util .ArrayList ;
27
25
import java .util .HashMap ;
28
- import java .util .HashSet ;
29
26
import java .util .List ;
30
27
import java .util .Map ;
31
- import java .util .Set ;
32
28
33
29
public class MainActivity extends AppCompatActivity {
34
30
35
31
private CodeView codeView ;
36
- private SyntaxManager syntaxManager ;
32
+ private LanguageManager languageManager ;
37
33
38
- private Language currentLanguage = Language .JAVA ;
39
- private Theme currentTheme = Theme .MONOKAI ;
34
+ private LanguageName currentLanguage = LanguageName .JAVA ;
35
+ private ThemeName currentTheme = ThemeName .MONOKAI ;
40
36
41
37
private final boolean useModernAutoCompleteAdapter = true ;
42
38
@@ -64,17 +60,9 @@ private void configCodeView() {
64
60
codeView .setTabLength (4 );
65
61
codeView .setEnableAutoIndentation (true );
66
62
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
-
75
63
// 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 );
78
66
79
67
// Setup auto pair complete
80
68
final Map <Character , Character > pairCompleteMap = new HashMap <>();
@@ -87,45 +75,41 @@ private void configCodeView() {
87
75
codeView .setPairCompleteMap (pairCompleteMap );
88
76
codeView .enablePairComplete (true );
89
77
90
- // Setup the auto complete for the current language
78
+ // Setup the auto complete and auto indenting for the current language
91
79
configLanguageAutoComplete ();
80
+ configLanguageAutoIndentation ();
92
81
}
93
82
94
83
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
-
108
84
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
114
89
CustomCodeViewAdapter adapter = new CustomCodeViewAdapter (this , codeList );
90
+
91
+ // Add the odeViewAdapter to the CodeView
115
92
codeView .setAdapter (adapter );
116
93
} else {
94
+ String [] languageKeywords = languageManager .getLanguageKeywords (currentLanguage );
95
+
117
96
// Custom list item xml layout
118
97
final int layoutId = R .layout .list_item_suggestion ;
119
98
120
99
// TextView id to put suggestion on it
121
100
final int viewId = R .id .suggestItemTextView ;
122
101
ArrayAdapter <String > adapter = new ArrayAdapter <>(this , layoutId , viewId , languageKeywords );
123
102
124
- // Add Custom Adapter to the CodeView
103
+ // Add the ArrayAdapter to the CodeView
125
104
codeView .setAdapter (adapter );
126
105
}
127
106
}
128
107
108
+ private void configLanguageAutoIndentation () {
109
+ codeView .setIndentationStarts (languageManager .getLanguageIndentationStarts (currentLanguage ));
110
+ codeView .setIndentationEnds (languageManager .getLanguageIndentationEnds (currentLanguage ));
111
+ }
112
+
129
113
@ Override
130
114
public boolean onCreateOptionsMenu (Menu menu ) {
131
115
getMenuInflater ().inflate (R .menu .menu_main , menu );
@@ -146,26 +130,27 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
146
130
}
147
131
148
132
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 ;
153
137
154
138
if (currentLanguage != oldLanguage ) {
155
- syntaxManager .applyTheme (currentLanguage , currentTheme );
139
+ languageManager .applyTheme (currentLanguage , currentTheme );
156
140
configLanguageAutoComplete ();
141
+ configLanguageAutoIndentation ();
157
142
}
158
143
}
159
144
160
145
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 ;
166
151
167
152
if (currentTheme != oldTheme ) {
168
- syntaxManager .applyTheme (currentLanguage , currentTheme );
153
+ languageManager .applyTheme (currentLanguage , currentTheme );
169
154
}
170
155
}
171
156
0 commit comments