2
2
3
3
import android .content .Context ;
4
4
import android .content .res .ColorStateList ;
5
+ import android .text .Editable ;
6
+ import android .text .TextWatcher ;
5
7
import android .view .View ;
6
8
import android .view .ViewGroup ;
7
9
import android .widget .ScrollView ;
45
47
import java .io .File ;
46
48
import java .net .SocketTimeoutException ;
47
49
import java .net .URL ;
50
+ import java .util .Arrays ;
48
51
import java .util .HashMap ;
49
52
import java .util .Map ;
50
53
import java .util .Objects ;
@@ -61,6 +64,7 @@ public class InstallersPage extends FCLTempPage implements View.OnClickListener
61
64
62
65
private FCLEditText editText ;
63
66
private FCLImageButton install ;
67
+ private boolean nameManuallyModified = false ;
64
68
65
69
public InstallersPage (Context context , int id , FCLUILayout parent , int resId , final String gameVersion ) {
66
70
super (context , id , parent , resId );
@@ -76,6 +80,21 @@ public void onCreate(String gameVersion) {
76
80
ThemeEngine .getInstance ().registerEvent (nameBar , () -> nameBar .setBackgroundTintList (colorStateList ));
77
81
78
82
editText = findViewById (R .id .edit );
83
+ editText .addTextChangedListener (new TextWatcher () {
84
+ @ Override
85
+ public void beforeTextChanged (CharSequence s , int start , int count , int after ) {}
86
+
87
+ @ Override
88
+ public void onTextChanged (CharSequence s , int start , int before , int count ) {
89
+ String autoGenName = generateVersionName ();
90
+ if (!s .toString ().equals (autoGenName )) {
91
+ nameManuallyModified = true ;
92
+ }
93
+ }
94
+
95
+ @ Override
96
+ public void afterTextChanged (Editable s ) {}
97
+ });
79
98
install = findViewById (R .id .install );
80
99
editText .setText (gameVersion );
81
100
install .setOnClickListener (this );
@@ -103,18 +122,56 @@ public void onCreate(String gameVersion) {
103
122
if (library .incompatibleLibraryName .get () == null ) {
104
123
InstallerVersionPage page = new InstallerVersionPage (getContext (), PageManager .PAGE_ID_TEMP , getParent (), R .layout .page_install_version , gameVersion , libraryId , remoteVersion -> {
105
124
map .put (libraryId , remoteVersion );
125
+ refreshVersionName ();
106
126
DownloadPageManager .getInstance ().dismissCurrentTempPage ();
107
127
});
108
128
DownloadPageManager .getInstance ().showTempPage (page );
109
129
}
110
130
});
111
131
library .removeAction .set (() -> {
112
132
map .remove (libraryId );
133
+ refreshVersionName ();
113
134
reload ();
114
135
});
115
136
}
116
137
}
117
138
139
+ private String generateVersionName () {
140
+ StringBuilder nameBuilder = new StringBuilder (gameVersion );
141
+ Arrays .stream (LibraryAnalyzer .LibraryType .values ())
142
+ .filter (libraryType -> map .containsKey (libraryType .getPatchId ()))
143
+ .map (this ::getLoaderName )
144
+ .filter (name -> !Objects .isNull (name ))
145
+ .forEach (name -> nameBuilder .append ("-" ).append (name ));
146
+ return nameBuilder .toString ();
147
+ }
148
+
149
+ private void refreshVersionName () {
150
+ if (nameManuallyModified ) {
151
+ return ;
152
+ }
153
+ editText .setText (generateVersionName ());
154
+ }
155
+
156
+ private String getLoaderName (LibraryAnalyzer .LibraryType libraryType ) {
157
+ switch (libraryType ) {
158
+ case FORGE :
159
+ return getContext ().getString (R .string .install_installer_forge );
160
+ case NEO_FORGE :
161
+ return getContext ().getString (R .string .install_installer_neoforge );
162
+ case FABRIC :
163
+ return getContext ().getString (R .string .install_installer_fabric );
164
+ case LITELOADER :
165
+ return getContext ().getString (R .string .install_installer_liteloader );
166
+ case QUILT :
167
+ return getContext ().getString (R .string .install_installer_quilt );
168
+ case OPTIFINE :
169
+ return getContext ().getString (R .string .install_installer_optifine );
170
+ default :
171
+ return null ;
172
+ }
173
+ }
174
+
118
175
@ Override
119
176
public Task <?> refresh (Object ... param ) {
120
177
return Task .runAsync (() -> {
0 commit comments