Skip to content

Commit d06da85

Browse files
Feat: 添加版本名称设置功能以显示安装器类型 (#835)
* Feat: 添加版本名称设置功能以显示安装器类型 * update * Feat: 添加文本监听器以支持手动修改版本名称 * Update InstallersPage.java --------- Co-authored-by: ShirosakiMio <[email protected]>
1 parent d5e43b1 commit d06da85

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

FCL/src/main/java/com/tungsten/fcl/ui/download/InstallersPage.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.content.Context;
44
import android.content.res.ColorStateList;
5+
import android.text.Editable;
6+
import android.text.TextWatcher;
57
import android.view.View;
68
import android.view.ViewGroup;
79
import android.widget.ScrollView;
@@ -45,6 +47,7 @@
4547
import java.io.File;
4648
import java.net.SocketTimeoutException;
4749
import java.net.URL;
50+
import java.util.Arrays;
4851
import java.util.HashMap;
4952
import java.util.Map;
5053
import java.util.Objects;
@@ -61,6 +64,7 @@ public class InstallersPage extends FCLTempPage implements View.OnClickListener
6164

6265
private FCLEditText editText;
6366
private FCLImageButton install;
67+
private boolean nameManuallyModified = false;
6468

6569
public InstallersPage(Context context, int id, FCLUILayout parent, int resId, final String gameVersion) {
6670
super(context, id, parent, resId);
@@ -76,6 +80,21 @@ public void onCreate(String gameVersion) {
7680
ThemeEngine.getInstance().registerEvent(nameBar, () -> nameBar.setBackgroundTintList(colorStateList));
7781

7882
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+
});
7998
install = findViewById(R.id.install);
8099
editText.setText(gameVersion);
81100
install.setOnClickListener(this);
@@ -103,18 +122,56 @@ public void onCreate(String gameVersion) {
103122
if (library.incompatibleLibraryName.get() == null) {
104123
InstallerVersionPage page = new InstallerVersionPage(getContext(), PageManager.PAGE_ID_TEMP, getParent(), R.layout.page_install_version, gameVersion, libraryId, remoteVersion -> {
105124
map.put(libraryId, remoteVersion);
125+
refreshVersionName();
106126
DownloadPageManager.getInstance().dismissCurrentTempPage();
107127
});
108128
DownloadPageManager.getInstance().showTempPage(page);
109129
}
110130
});
111131
library.removeAction.set(() -> {
112132
map.remove(libraryId);
133+
refreshVersionName();
113134
reload();
114135
});
115136
}
116137
}
117138

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+
118175
@Override
119176
public Task<?> refresh(Object... param) {
120177
return Task.runAsync(() -> {

0 commit comments

Comments
 (0)