mod version rollback and info dialog
This commit is contained in:
parent
83fcf6423e
commit
6b4306acb4
|
@ -1,14 +1,96 @@
|
|||
package com.tungsten.fcl.ui.manage;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.tungsten.fcl.R;
|
||||
import com.tungsten.fcl.util.AndroidUtils;
|
||||
import com.tungsten.fclcore.task.Schedulers;
|
||||
import com.tungsten.fclcore.task.Task;
|
||||
import com.tungsten.fclcore.util.StringUtils;
|
||||
import com.tungsten.fclcore.util.io.CompressingUtils;
|
||||
import com.tungsten.fclcore.util.io.FileUtils;
|
||||
import com.tungsten.fcllibrary.component.dialog.FCLDialog;
|
||||
import com.tungsten.fcllibrary.component.view.FCLButton;
|
||||
import com.tungsten.fcllibrary.component.view.FCLImageView;
|
||||
import com.tungsten.fcllibrary.component.view.FCLTextView;
|
||||
|
||||
public class ModInfoDialog extends FCLDialog {
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class ModInfoDialog extends FCLDialog implements View.OnClickListener {
|
||||
|
||||
private final ModListPage.ModInfoObject modInfoObject;
|
||||
|
||||
private FCLImageView icon;
|
||||
private FCLTextView name;
|
||||
private FCLTextView version;
|
||||
private FCLTextView fileName;
|
||||
private FCLTextView description;
|
||||
|
||||
private FCLButton website;
|
||||
private FCLButton positive;
|
||||
|
||||
@SuppressLint("UseCompatLoadingForDrawables")
|
||||
public ModInfoDialog(@NonNull Context context, ModListPage.ModInfoObject modInfoObject) {
|
||||
super(context);
|
||||
this.modInfoObject = modInfoObject;
|
||||
setCancelable(false);
|
||||
setContentView(R.layout.dialog_mod_info);
|
||||
|
||||
icon = findViewById(R.id.icon);
|
||||
name = findViewById(R.id.name);
|
||||
version = findViewById(R.id.version);
|
||||
fileName = findViewById(R.id.file_name);
|
||||
description = findViewById(R.id.description);
|
||||
|
||||
website = findViewById(R.id.website);
|
||||
positive = findViewById(R.id.positive);
|
||||
website.setOnClickListener(this);
|
||||
positive.setOnClickListener(this);
|
||||
|
||||
if (StringUtils.isNotBlank(modInfoObject.getModInfo().getLogoPath())) {
|
||||
Task.supplyAsync(() -> {
|
||||
try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(modInfoObject.getModInfo().getFile())) {
|
||||
Path iconPath = fs.getPath(modInfoObject.getModInfo().getLogoPath());
|
||||
if (Files.exists(iconPath)) {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
Files.copy(iconPath, stream);
|
||||
return new ByteArrayInputStream(stream.toByteArray());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}).whenComplete(Schedulers.androidUIThread(), (stream, exception) -> {
|
||||
if (stream != null) {
|
||||
icon.setImageBitmap(BitmapFactory.decodeStream(stream));
|
||||
} else {
|
||||
icon.setImageDrawable(getContext().getDrawable(R.drawable.img_command));
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
name.setText(modInfoObject.getModInfo().getName());
|
||||
version.setText(modInfoObject.getModInfo().getVersion());
|
||||
fileName.setText(FileUtils.getName(modInfoObject.getModInfo().getFile()));
|
||||
description.setText(modInfoObject.getModInfo().getDescription().toString());
|
||||
|
||||
website.setVisibility(StringUtils.isNotBlank(modInfoObject.getModInfo().getUrl()) ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == website && StringUtils.isNotBlank(modInfoObject.getModInfo().getUrl())) {
|
||||
AndroidUtils.openLink(getContext(), modInfoObject.getModInfo().getUrl());
|
||||
}
|
||||
if (v == positive) {
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package com.tungsten.fcl.ui.manage;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.tungsten.fcl.R;
|
||||
import com.tungsten.fclcore.mod.LocalModFile;
|
||||
import com.tungsten.fcllibrary.component.FCLAdapter;
|
||||
import com.tungsten.fcllibrary.component.view.FCLLinearLayout;
|
||||
import com.tungsten.fcllibrary.component.view.FCLTextView;
|
||||
import com.tungsten.fcllibrary.util.ConvertUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ModOldVersionListAdapter extends FCLAdapter {
|
||||
|
||||
private final List<LocalModFile> list;
|
||||
private final ModRollbackDialog.Callback callback;
|
||||
|
||||
public ModOldVersionListAdapter(Context context, List<LocalModFile> list, ModRollbackDialog.Callback callback) {
|
||||
super(context);
|
||||
this.list = list;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
private static class ViewHolder {
|
||||
FCLLinearLayout parent;
|
||||
FCLTextView version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return list.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int i) {
|
||||
return list.get(i);
|
||||
}
|
||||
|
||||
@SuppressLint("UseCompatLoadingForDrawables")
|
||||
@Override
|
||||
public View getView(int i, View view, ViewGroup viewGroup) {
|
||||
final ViewHolder viewHolder;
|
||||
if (view == null) {
|
||||
viewHolder = new ViewHolder();
|
||||
view = new FCLLinearLayout(getContext());
|
||||
viewHolder.parent = new FCLLinearLayout(getContext());
|
||||
viewHolder.version = new FCLTextView(getContext());
|
||||
((FCLLinearLayout) view).addView(viewHolder.parent, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
int padding = ConvertUtils.dip2px(getContext(), 10);
|
||||
viewHolder.parent.setPadding(padding, padding, padding, padding);
|
||||
viewHolder.parent.setBackground(getContext().getDrawable(R.drawable.bg_container_transparent_clickable));
|
||||
viewHolder.parent.addView(viewHolder.version, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
viewHolder.version.setSingleLine(true);
|
||||
view.setTag(viewHolder);
|
||||
} else {
|
||||
viewHolder = (ViewHolder) view.getTag();
|
||||
}
|
||||
LocalModFile localModFile = list.get(i);
|
||||
viewHolder.parent.setOnClickListener(v -> callback.onOldVersionSelect(localModFile));
|
||||
viewHolder.version.setText(localModFile.getVersion());
|
||||
return view;
|
||||
}
|
||||
}
|
|
@ -23,12 +23,19 @@ public class ModRollbackDialog extends FCLDialog implements View.OnClickListener
|
|||
super(context);
|
||||
setCancelable(false);
|
||||
setContentView(R.layout.dialog_rollback_mod);
|
||||
|
||||
listView = findViewById(R.id.list);
|
||||
negative = findViewById(R.id.negative);
|
||||
negative.setOnClickListener(this);
|
||||
|
||||
ModOldVersionListAdapter adapter = new ModOldVersionListAdapter(getContext(), list, callback);
|
||||
listView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == negative) {
|
||||
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,93 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:padding="15dp"
|
||||
android:layout_width="400dp"
|
||||
android:layout_height="240dp">
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLLinearLayout
|
||||
android:id="@+id/top"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLImageView
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_gravity="center"
|
||||
android:id="@+id/icon"/>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLLinearLayout
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLLinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:textStyle="bold"
|
||||
android:singleLine="true"
|
||||
android:id="@+id/name"/>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:textSize="11sp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:singleLine="true"
|
||||
android:id="@+id/version"/>
|
||||
|
||||
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:id="@+id/file_name"/>
|
||||
|
||||
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
|
||||
|
||||
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/top"
|
||||
app:layout_constraintBottom_toTopOf="@+id/positive">
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/description"/>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLButton
|
||||
android:id="@+id/website"
|
||||
android:text="@string/mods_url"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLButton
|
||||
android:id="@+id/positive"
|
||||
android:text="@string/dialog_positive"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -17,13 +17,13 @@
|
|||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<ListView
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:divider="@android:color/transparent"
|
||||
android:dividerHeight="0dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/list"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/title"
|
||||
app:layout_constraintBottom_toTopOf="@+id/negative"/>
|
||||
|
||||
|
|
Loading…
Reference in New Issue