Skip to content

Commit

Permalink
Feat: 添加版本名称设置功能以显示安装器类型 (#835)
Browse files Browse the repository at this point in the history
* Feat: 添加版本名称设置功能以显示安装器类型

* update

* Feat: 添加文本监听器以支持手动修改版本名称

* Update InstallersPage.java

---------

Co-authored-by: ShirosakiMio <852468399@qq.com>
  • Loading branch information
zkitefly and ShirosakiMio authored Feb 7, 2025
1 parent d5e43b1 commit d06da85
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions FCL/src/main/java/com/tungsten/fcl/ui/download/InstallersPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import android.content.Context;
import android.content.res.ColorStateList;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
Expand Down Expand Up @@ -45,6 +47,7 @@
import java.io.File;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
Expand All @@ -61,6 +64,7 @@ public class InstallersPage extends FCLTempPage implements View.OnClickListener

private FCLEditText editText;
private FCLImageButton install;
private boolean nameManuallyModified = false;

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

editText = findViewById(R.id.edit);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String autoGenName = generateVersionName();
if (!s.toString().equals(autoGenName)) {
nameManuallyModified = true;
}
}

@Override
public void afterTextChanged(Editable s) {}
});
install = findViewById(R.id.install);
editText.setText(gameVersion);
install.setOnClickListener(this);
Expand Down Expand Up @@ -103,18 +122,56 @@ public void onCreate(String gameVersion) {
if (library.incompatibleLibraryName.get() == null) {
InstallerVersionPage page = new InstallerVersionPage(getContext(), PageManager.PAGE_ID_TEMP, getParent(), R.layout.page_install_version, gameVersion, libraryId, remoteVersion -> {
map.put(libraryId, remoteVersion);
refreshVersionName();
DownloadPageManager.getInstance().dismissCurrentTempPage();
});
DownloadPageManager.getInstance().showTempPage(page);
}
});
library.removeAction.set(() -> {
map.remove(libraryId);
refreshVersionName();
reload();
});
}
}

private String generateVersionName() {
StringBuilder nameBuilder = new StringBuilder(gameVersion);
Arrays.stream(LibraryAnalyzer.LibraryType.values())
.filter(libraryType -> map.containsKey(libraryType.getPatchId()))
.map(this::getLoaderName)
.filter(name -> !Objects.isNull(name))
.forEach(name -> nameBuilder.append("-").append(name));
return nameBuilder.toString();
}

private void refreshVersionName() {
if (nameManuallyModified) {
return;
}
editText.setText(generateVersionName());
}

private String getLoaderName(LibraryAnalyzer.LibraryType libraryType) {
switch (libraryType) {
case FORGE:
return getContext().getString(R.string.install_installer_forge);
case NEO_FORGE:
return getContext().getString(R.string.install_installer_neoforge);
case FABRIC:
return getContext().getString(R.string.install_installer_fabric);
case LITELOADER:
return getContext().getString(R.string.install_installer_liteloader);
case QUILT:
return getContext().getString(R.string.install_installer_quilt);
case OPTIFINE:
return getContext().getString(R.string.install_installer_optifine);
default:
return null;
}
}

@Override
public Task<?> refresh(Object... param) {
return Task.runAsync(() -> {
Expand Down

0 comments on commit d06da85

Please sign in to comment.