Select with external APP #506

This commit is contained in:
ShirosakiMio 2024-08-12 13:08:24 +08:00
parent c72429aa67
commit 8e86c6d590
9 changed files with 87 additions and 1 deletions

View File

@ -5,14 +5,17 @@ import static com.tungsten.fclcore.util.Logging.LOG;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import com.tungsten.fcl.activity.JVMActivity;
import com.tungsten.fcl.control.MenuType;
import com.tungsten.fcl.util.AndroidUtils;
import com.tungsten.fcl.util.RequestCodes;
import com.tungsten.fclauncher.FCLConfig;
import com.tungsten.fclauncher.bridge.FCLBridge;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.game.JavaVersion;
import com.tungsten.fclcore.util.io.IOUtils;
import com.tungsten.fcllibrary.browser.FileBrowser;
@ -42,6 +45,10 @@ public class JarExecutorHelper {
builder.create().browse(activity, RequestCodes.SELECT_MANUAL_INSTALLER_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_MANUAL_INSTALLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(activity, uri, new File(FCLPath.CACHE_DIR));
}
if (new File(path).exists()) {
launchJarExecutor(context, new File(path));
}

View File

@ -181,6 +181,10 @@ public class ControllerUI extends FCLCommonUI implements View.OnClickListener {
builder.create().browse(getActivity(), RequestCodes.SELECT_CONTROLLER_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_CONTROLLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
try {
String content = FileUtils.readText(new File(path));
Controller controller = new GsonBuilder().setPrettyPrinting().create().fromJson(content, Controller.class);

View File

@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.download;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.widget.Toast;
@ -12,8 +13,10 @@ import com.tungsten.fcl.setting.Profile;
import com.tungsten.fcl.ui.PageManager;
import com.tungsten.fcl.ui.TaskDialog;
import com.tungsten.fcl.ui.manage.ManagePageManager;
import com.tungsten.fcl.util.AndroidUtils;
import com.tungsten.fcl.util.RequestCodes;
import com.tungsten.fcl.util.TaskCancellationAction;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.mod.server.ServerModpackManifest;
import com.tungsten.fclcore.task.FileDownloadTask;
import com.tungsten.fclcore.task.GetTask;
@ -70,6 +73,10 @@ public class ModpackSelectionPage extends FCLTempPage implements View.OnClickLis
builder.create().browse(getActivity(), RequestCodes.SELECT_MODPACK_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_MODPACK_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
if (path == null)
return;
File selectedFile = new File(path);

View File

@ -3,7 +3,9 @@ package com.tungsten.fcl.ui.manage;
import static com.tungsten.fcl.ui.download.InstallersPage.alertFailureMessage;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
@ -21,6 +23,7 @@ import com.tungsten.fcl.ui.download.InstallerVersionPage;
import com.tungsten.fcl.util.AndroidUtils;
import com.tungsten.fcl.util.RequestCodes;
import com.tungsten.fcl.util.TaskCancellationAction;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.download.LibraryAnalyzer;
import com.tungsten.fclcore.download.RemoteVersion;
import com.tungsten.fclcore.event.Event;
@ -41,6 +44,7 @@ import com.tungsten.fcllibrary.util.ConvertUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
@ -143,6 +147,10 @@ public class InstallerListPage extends FCLCommonPage implements ManageUI.Version
builder.create().browse(getActivity(), RequestCodes.SELECT_AUTO_INSTALLER_CODE, (requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_AUTO_INSTALLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
if (new File(path).exists()) {
doInstallOffline(new File(path));
}

View File

@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.manage;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.widget.ArrayAdapter;
@ -15,6 +16,7 @@ import com.tungsten.fcl.util.FXUtils;
import com.tungsten.fcl.util.RequestCodes;
import com.tungsten.fcl.util.WeakListenerHolder;
import com.tungsten.fclauncher.FCLConfig;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.event.Event;
import com.tungsten.fclcore.fakefx.beans.InvalidationListener;
import com.tungsten.fclcore.fakefx.beans.binding.Bindings;
@ -342,6 +344,10 @@ public class VersionSettingPage extends FCLCommonPage implements ManageUI.Versio
return;
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
if (path == null)
return;

View File

@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.manage;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.widget.ListView;
@ -9,6 +10,7 @@ import com.tungsten.fcl.R;
import com.tungsten.fcl.setting.Profile;
import com.tungsten.fcl.util.AndroidUtils;
import com.tungsten.fcl.util.RequestCodes;
import com.tungsten.fclauncher.utils.FCLPath;
import com.tungsten.fclcore.fakefx.beans.property.BooleanProperty;
import com.tungsten.fclcore.fakefx.beans.property.ListProperty;
import com.tungsten.fclcore.fakefx.beans.property.SimpleBooleanProperty;
@ -153,6 +155,10 @@ public class WorldListPage extends FCLCommonPage implements ManageUI.VersionLoad
builder.create().browse(getActivity(), RequestCodes.SELECT_WORLD_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_WORLD_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
File file = new File(path);
installWorld(file);
}

View File

@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
@ -284,6 +285,10 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi
builder.create().browse(getActivity(), RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
ThemeEngine.getInstance().applyAndSave(getContext(), ((MainActivity) getActivity()).background, path, null);
}
}));
@ -298,6 +303,10 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi
builder.create().browse(getActivity(), RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE, ((requestCode, resultCode, data) -> {
if (requestCode == RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE && resultCode == Activity.RESULT_OK && data != null) {
String path = FileBrowser.getSelectedFiles(data).get(0);
Uri uri = Uri.parse(path);
if (AndroidUtils.isDocUri(uri)) {
path = AndroidUtils.copyFileToDir(getActivity(), uri, new File(FCLPath.CACHE_DIR));
}
ThemeEngine.getInstance().applyAndSave(getContext(), ((MainActivity) getActivity()).background, null, path);
}
}));

View File

@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@ -24,8 +25,12 @@ import android.widget.Toast;
import com.tungsten.fcl.R;
import com.tungsten.fcl.activity.WebActivity;
import com.tungsten.fclcore.util.io.FileUtils;
import com.tungsten.fclcore.util.io.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
@SuppressLint("DiscouragedApi")
@ -123,4 +128,26 @@ public class AndroidUtils {
return mime;
}
public static String copyFileToDir(Activity activity, Uri uri, File destDir) {
String name = new File(uri.getPath()).getName();
File dest = new File(destDir, name);
try {
InputStream inputStream = activity.getContentResolver().openInputStream(uri);
if (inputStream == null) {
throw new IOException("Failed to open content stream");
}
try (FileOutputStream outputStream = new FileOutputStream(dest)) {
IOUtils.copyTo(inputStream, outputStream);
}
inputStream.close();
} catch (Exception e) {
}
return dest.getAbsolutePath();
}
public static boolean isDocUri(Uri uri) {
return Objects.equals(uri.getScheme(), ContentResolver.SCHEME_FILE) || Objects.equals(uri.getScheme(),ContentResolver.SCHEME_CONTENT);
}
}

View File

@ -132,9 +132,21 @@ public class FileBrowserActivity extends FCLActivity implements View.OnClickList
listView = findViewById(R.id.list);
refreshList(currentPath != null ? currentPath : new File(fileBrowser.getInitDir()).toPath());
if (fileBrowser.getLibMode() != LibMode.FILE_CHOOSER || fileBrowser.getCode() != 400) {
if (fileBrowser.getLibMode() != LibMode.FILE_CHOOSER) {
selectExternal.setVisibility(View.GONE);
}
switch (fileBrowser.getCode()) {
case 100:
case 150:
case 200:
case 500:
case 600:
case 700:
case 750:
selectExternal.setVisibility(View.GONE);
break;
default:
}
}
private String getMode() {