Apricot tart

This commit is contained in:
An Bui 2024-12-01 11:54:36 +07:00
parent 21f7540c28
commit 4e6183580e
14 changed files with 1239 additions and 805 deletions

View file

@ -454,6 +454,7 @@ public class CustomRomActivity extends AppCompatActivity {
modify = getIntent().getBooleanExtra("MODIFY", false);
if (modify) {
created = true;
addRomBtn.setText(R.string.save_changes);
title.setText(current.itemName);
icon.setText(current.itemIcon);

View file

@ -0,0 +1,268 @@
package com.vectras.vm;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.vectras.vm.utils.FileUtils;
import com.vectras.vm.utils.UIUtils;
import org.checkerframework.checker.guieffect.qual.UI;
import org.zeroturnaround.zip.FileSource;
import org.zeroturnaround.zip.ZipEntrySource;
import org.zeroturnaround.zip.ZipUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;
public class ExportRomActivity extends AppCompatActivity {
private LinearLayout linearone;
private LinearLayout linearload;
private LinearLayout lineardone;
private LinearLayout linearerror;
private TextView textviewfilename;
private TextView textviewerrorcontent;
private EditText editauthor;
private EditText editdesc;
public static int pendingPosition = 0;
public static HashMap<String, Object> mapForGetData = new HashMap<>();
public static ArrayList<HashMap<String, Object>> listmapForGetData = new ArrayList<>();
private SharedPreferences data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_export_rom);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
linearone = findViewById(R.id.linearall);
linearload = findViewById(R.id.linearload);
lineardone = findViewById(R.id.lineardone);
linearerror = findViewById(R.id.linearerror);
textviewfilename = findViewById(R.id.textviewfilename);
textviewerrorcontent = findViewById(R.id.textviewerrorcontent);
editauthor = findViewById(R.id.edittext1);
editdesc = findViewById(R.id.edittext2);
Button buttondone;
buttondone = findViewById(R.id.materialbutton1);
buttondone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editauthor.setEnabled(false);
editdesc.setEnabled(false);
editauthor.setEnabled(true);
editdesc.setEnabled(true);
startCreateCVBI();
}
});
Button buttonexit;
buttonexit = findViewById(R.id.buttonexit);
buttonexit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Button buttonexit2;
buttonexit2 = findViewById(R.id.buttonexit2);
buttonexit2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
data= getSharedPreferences("data", Activity.MODE_PRIVATE);
editauthor.setText(data.getString("author", ""));
editdesc.setText(data.getString("desc", ""));
}
@Override
public void onPause() {
super.onPause();
data.edit().putString("author", editauthor.getText().toString()).commit();
data.edit().putString("desc", editdesc.getText().toString()).commit();
}
private void UIControler(int _status, String _content) {
if (_status == 0) {
linearone.setVisibility(View.GONE);
linearload.setVisibility(View.VISIBLE);
} else if (_status == 1) {
linearone.setVisibility(View.GONE);
linearload.setVisibility(View.GONE);
lineardone.setVisibility(View.VISIBLE);
textviewfilename.setText(getResources().getString(R.string.saved_in) + " " +_content);
} else if (_status == 2) {
linearone.setVisibility(View.GONE);
linearload.setVisibility(View.GONE);
lineardone.setVisibility(View.GONE);
linearerror.setVisibility(View.VISIBLE);
textviewerrorcontent.setText(_content);
}
}
private void startCreateCVBI() {
UIControler(0, "");
File vDir = new File(AppConfig.maindirpath + "cvbi");
if (!vDir.exists()) {
vDir.mkdirs();
}
listmapForGetData.clear();
mapForGetData.clear();
listmapForGetData = new Gson().fromJson(VectrasApp.readFile(AppConfig.romsdatajson), new TypeToken<ArrayList<HashMap<String, Object>>>(){}.getType());
if (listmapForGetData.get(pendingPosition).containsKey("imgName")) {
mapForGetData.put("imgName", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgName")).toString());
} else {
mapForGetData.put("imgName", "");
}
if (listmapForGetData.get(pendingPosition).containsKey("imgIcon")) {
mapForGetData.put("imgIcon", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgIcon")).toString());
} else {
mapForGetData.put("imgIcon", "");
}
if (listmapForGetData.get(pendingPosition).containsKey("imgPath")) {
mapForGetData.put("imgPath", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgPath")).toString());
} else {
mapForGetData.put("imgPath", "");
}
if (listmapForGetData.get(pendingPosition).containsKey("imgCdrom")) {
mapForGetData.put("imgCdrom", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgCdrom")).toString());
} else {
mapForGetData.put("imgCdrom", "");
}
if (listmapForGetData.get(pendingPosition).containsKey("imgExtra")) {
mapForGetData.put("imgExtra", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgExtra")).toString());
} else {
mapForGetData.put("imgExtra", "");
}
if (listmapForGetData.get(pendingPosition).containsKey("imgArch")) {
mapForGetData.put("imgArch", Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("imgArch")).toString());
} else {
mapForGetData.put("imgArch", "");
}
if (editauthor.getText().toString().isEmpty()) {
mapForGetData.put("author", "Unknow");
} else {
mapForGetData.put("author", editauthor.getText().toString());
}
if (editdesc.getText().toString().isEmpty()) {
mapForGetData.put("desc", "Empty.");
} else {
mapForGetData.put("desc", editdesc.getText().toString());
}
VectrasApp.writeToFile(new File(String.valueOf(getApplicationContext().getExternalFilesDir("data"))).getPath(), "rom-data.json", new Gson().toJson(mapForGetData));
Thread t = new Thread() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
if ((!Objects.requireNonNull(mapForGetData.get("imgIcon")).toString().isEmpty()) && (!Objects.requireNonNull(mapForGetData.get("imgPath")).toString().isEmpty()) && (!Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString().isEmpty())) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString())),
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString())),
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if ((!Objects.requireNonNull(mapForGetData.get("imgIcon")).toString().isEmpty()) && (!Objects.requireNonNull(mapForGetData.get("imgPath")).toString().isEmpty())) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString())),
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if ((!Objects.requireNonNull(mapForGetData.get("imgIcon")).toString().isEmpty()) && (!Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString().isEmpty())) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString())),
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if ((!Objects.requireNonNull(mapForGetData.get("imgPath")).toString().isEmpty()) && (!Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString().isEmpty())) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString())),
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if (!Objects.requireNonNull(mapForGetData.get("imgIcon")).toString().isEmpty()) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgIcon")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if (!Objects.requireNonNull(mapForGetData.get("imgPath")).toString().isEmpty()) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgPath")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else if (!Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString().isEmpty()) {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString()).getName(), new File(Objects.requireNonNull(mapForGetData.get("imgCdrom")).toString())),
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
} else {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json").getName(), new File(getApplicationContext().getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi"));
}
runOnUiThread(new Runnable() {
@Override
public void run() {
UIControler(1, FileUtils.getExternalFilesDirectory(getApplicationContext()).getPath() + "/cvbi/" + Objects.requireNonNull(mapForGetData.get("imgName")).toString() + ".cvbi");
}
});
} catch (Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
UIControler(2, e.toString());
}
});
}
}
});
}
};
t.start();
return;
}
}

View file

@ -40,6 +40,7 @@ import com.vectras.qemu.MainSettingsManager;
import com.vectras.qemu.MainVNCActivity;
import com.vectras.vm.AppConfig;
import com.vectras.vm.CustomRomActivity;
import com.vectras.vm.ExportRomActivity;
import com.vectras.vm.MainActivity;
import com.vectras.vm.MainService;
import com.vectras.vm.R;
@ -126,84 +127,10 @@ public class AdapterMainRoms extends RecyclerView.Adapter<RecyclerView.ViewHolde
exportRomBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final File jsonFile = new File(MainActivity.activity.getExternalFilesDir("data") + "/rom-data.json");
AlertDialog ad;
ad = new AlertDialog.Builder(MainActivity.activity).create();
ad.setTitle(MainActivity.activity.getString(R.string.export_rom));
ad.setMessage(MainActivity.activity.getString(R.string.are_you_sure));
final TextInputLayout Description = new TextInputLayout(MainActivity.activity);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
Description.setHint(R.string.description_html_supported);
Description.setLayoutParams(lp);
Description.setPadding(10, 10, 10, 10);
final TextInputEditText DescriptionET = new TextInputEditText(MainActivity.activity);
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
DescriptionET.setLayoutParams(lp2);
Description.addView(DescriptionET);
DescriptionET.setText("");
DescriptionET.setInputType(InputType.TYPE_CLASS_TEXT);
DescriptionET.setSelectAllOnFocus(true);
ad.setView(Description);
ad.setButton(Dialog.BUTTON_POSITIVE, "EXPORT", (dialog, which) -> {
RomJson obj = new RomJson();//TODO:UPDATE AUTHOR NAME
JSONObject jsonObject = obj.makeJSONObject(current.itemName, current.itemArch, "UNKNOWN", DescriptionET.getText().toString(), new File(current.itemIcon).getName(), new File(current.itemPath).getName(), current.itemExtra);
try {
Writer output = null;
output = new BufferedWriter(new FileWriter(jsonFile));
output.write(jsonObject.toString().replace("\\", "").replace("//", "/"));
output.close();
} catch (Exception e) {
}
SharedPreferences credentials = MainActivity.activity.getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE);
ProgressDialog progressDialog = new ProgressDialog(MainActivity.activity);
progressDialog.setTitle(MainActivity.activity.getString(R.string.compressing_cvbi));
progressDialog.setMessage(MainActivity.activity.getString(R.string.please_wait_dialog));
progressDialog.setCancelable(false);
progressDialog.show(); // Showing Progress Dialog
Thread t = new Thread() {
public void run() {
try {
ZipEntrySource[] addedEntries = new ZipEntrySource[]{
new FileSource("/" + new File(current.itemPath).getName(), new File(current.itemPath)),
new FileSource("/" + new File(current.itemIcon).getName(), new File(current.itemIcon)),
new FileSource("/" + new File(MainActivity.activity.getExternalFilesDir("data") + "/rom-data.json").getName(), new File(MainActivity.activity.getExternalFilesDir("data") + "/rom-data.json"))
};
ZipUtil.pack(addedEntries, new File(FileUtils.getExternalFilesDirectory(MainActivity.activity).getPath() + "/cvbi/" + current.itemName + ".cvbi"));
} catch (Exception e) {
e.printStackTrace();
Runnable runnable = new Runnable() {
@Override
public void run() {
progressDialog.cancel(); // cancelling Dialog.
UIUtils.UIAlert(MainActivity.activity, MainActivity.activity.getString(R.string.error), e.toString());
}
};
MainActivity.activity.runOnUiThread(runnable);
} finally {
Runnable runnable = new Runnable() {
@Override
public void run() {
progressDialog.cancel(); // cancelling Dialog.}
UIUtils.UIAlert(MainActivity.activity, MainActivity.activity.getString(R.string.done), FileUtils.getExternalFilesDirectory(MainActivity.activity).getPath() + "/cvbi/" + current.itemName + ".cvbi");
}
};
MainActivity.activity.runOnUiThread(runnable);
}
}
};
t.start();
return;
});
ad.setButton(Dialog.BUTTON_NEGATIVE, MainActivity.activity.getString(R.string.close), (dialog, which) -> {
return;
});
ad.show();
ExportRomActivity.pendingPosition = position;
Intent intent = new Intent();
intent.setClass(context.getApplicationContext(), ExportRomActivity.class);
context.startActivity(intent);
bottomSheetDialog.cancel();
}
});

View file

@ -508,7 +508,7 @@ public class VectrasApp extends Application {
}
public static boolean isFileExists(String filePath) {
File file = new File(filePath);
File file = new File(filePath.replaceAll("\n", ""));
return file.exists();
}