Select with external APP #506
This commit is contained in:
parent
c72429aa67
commit
8e86c6d590
|
@ -5,14 +5,17 @@ import static com.tungsten.fclcore.util.Logging.LOG;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.tungsten.fcl.activity.JVMActivity;
|
import com.tungsten.fcl.activity.JVMActivity;
|
||||||
import com.tungsten.fcl.control.MenuType;
|
import com.tungsten.fcl.control.MenuType;
|
||||||
|
import com.tungsten.fcl.util.AndroidUtils;
|
||||||
import com.tungsten.fcl.util.RequestCodes;
|
import com.tungsten.fcl.util.RequestCodes;
|
||||||
import com.tungsten.fclauncher.FCLConfig;
|
import com.tungsten.fclauncher.FCLConfig;
|
||||||
import com.tungsten.fclauncher.bridge.FCLBridge;
|
import com.tungsten.fclauncher.bridge.FCLBridge;
|
||||||
|
import com.tungsten.fclauncher.utils.FCLPath;
|
||||||
import com.tungsten.fclcore.game.JavaVersion;
|
import com.tungsten.fclcore.game.JavaVersion;
|
||||||
import com.tungsten.fclcore.util.io.IOUtils;
|
import com.tungsten.fclcore.util.io.IOUtils;
|
||||||
import com.tungsten.fcllibrary.browser.FileBrowser;
|
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) -> {
|
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) {
|
if (requestCode == RequestCodes.SELECT_MANUAL_INSTALLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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()) {
|
if (new File(path).exists()) {
|
||||||
launchJarExecutor(context, new File(path));
|
launchJarExecutor(context, new File(path));
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,10 @@ public class ControllerUI extends FCLCommonUI implements View.OnClickListener {
|
||||||
builder.create().browse(getActivity(), RequestCodes.SELECT_CONTROLLER_CODE, ((requestCode, resultCode, data) -> {
|
builder.create().browse(getActivity(), RequestCodes.SELECT_CONTROLLER_CODE, ((requestCode, resultCode, data) -> {
|
||||||
if (requestCode == RequestCodes.SELECT_CONTROLLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
if (requestCode == RequestCodes.SELECT_CONTROLLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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 {
|
try {
|
||||||
String content = FileUtils.readText(new File(path));
|
String content = FileUtils.readText(new File(path));
|
||||||
Controller controller = new GsonBuilder().setPrettyPrinting().create().fromJson(content, Controller.class);
|
Controller controller = new GsonBuilder().setPrettyPrinting().create().fromJson(content, Controller.class);
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.download;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
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.PageManager;
|
||||||
import com.tungsten.fcl.ui.TaskDialog;
|
import com.tungsten.fcl.ui.TaskDialog;
|
||||||
import com.tungsten.fcl.ui.manage.ManagePageManager;
|
import com.tungsten.fcl.ui.manage.ManagePageManager;
|
||||||
|
import com.tungsten.fcl.util.AndroidUtils;
|
||||||
import com.tungsten.fcl.util.RequestCodes;
|
import com.tungsten.fcl.util.RequestCodes;
|
||||||
import com.tungsten.fcl.util.TaskCancellationAction;
|
import com.tungsten.fcl.util.TaskCancellationAction;
|
||||||
|
import com.tungsten.fclauncher.utils.FCLPath;
|
||||||
import com.tungsten.fclcore.mod.server.ServerModpackManifest;
|
import com.tungsten.fclcore.mod.server.ServerModpackManifest;
|
||||||
import com.tungsten.fclcore.task.FileDownloadTask;
|
import com.tungsten.fclcore.task.FileDownloadTask;
|
||||||
import com.tungsten.fclcore.task.GetTask;
|
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) -> {
|
builder.create().browse(getActivity(), RequestCodes.SELECT_MODPACK_CODE, ((requestCode, resultCode, data) -> {
|
||||||
if (requestCode == RequestCodes.SELECT_MODPACK_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
if (requestCode == RequestCodes.SELECT_MODPACK_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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)
|
if (path == null)
|
||||||
return;
|
return;
|
||||||
File selectedFile = new File(path);
|
File selectedFile = new File(path);
|
||||||
|
|
|
@ -3,7 +3,9 @@ package com.tungsten.fcl.ui.manage;
|
||||||
import static com.tungsten.fcl.ui.download.InstallersPage.alertFailureMessage;
|
import static com.tungsten.fcl.ui.download.InstallersPage.alertFailureMessage;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ScrollView;
|
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.AndroidUtils;
|
||||||
import com.tungsten.fcl.util.RequestCodes;
|
import com.tungsten.fcl.util.RequestCodes;
|
||||||
import com.tungsten.fcl.util.TaskCancellationAction;
|
import com.tungsten.fcl.util.TaskCancellationAction;
|
||||||
|
import com.tungsten.fclauncher.utils.FCLPath;
|
||||||
import com.tungsten.fclcore.download.LibraryAnalyzer;
|
import com.tungsten.fclcore.download.LibraryAnalyzer;
|
||||||
import com.tungsten.fclcore.download.RemoteVersion;
|
import com.tungsten.fclcore.download.RemoteVersion;
|
||||||
import com.tungsten.fclcore.event.Event;
|
import com.tungsten.fclcore.event.Event;
|
||||||
|
@ -41,6 +44,7 @@ import com.tungsten.fcllibrary.util.ConvertUtils;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.Function;
|
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) -> {
|
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) {
|
if (requestCode == RequestCodes.SELECT_AUTO_INSTALLER_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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()) {
|
if (new File(path).exists()) {
|
||||||
doInstallOffline(new File(path));
|
doInstallOffline(new File(path));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.manage;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ArrayAdapter;
|
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.RequestCodes;
|
||||||
import com.tungsten.fcl.util.WeakListenerHolder;
|
import com.tungsten.fcl.util.WeakListenerHolder;
|
||||||
import com.tungsten.fclauncher.FCLConfig;
|
import com.tungsten.fclauncher.FCLConfig;
|
||||||
|
import com.tungsten.fclauncher.utils.FCLPath;
|
||||||
import com.tungsten.fclcore.event.Event;
|
import com.tungsten.fclcore.event.Event;
|
||||||
import com.tungsten.fclcore.fakefx.beans.InvalidationListener;
|
import com.tungsten.fclcore.fakefx.beans.InvalidationListener;
|
||||||
import com.tungsten.fclcore.fakefx.beans.binding.Bindings;
|
import com.tungsten.fclcore.fakefx.beans.binding.Bindings;
|
||||||
|
@ -342,6 +344,10 @@ public class VersionSettingPage extends FCLCommonPage implements ManageUI.Versio
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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)
|
if (path == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.tungsten.fcl.ui.manage;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
@ -9,6 +10,7 @@ import com.tungsten.fcl.R;
|
||||||
import com.tungsten.fcl.setting.Profile;
|
import com.tungsten.fcl.setting.Profile;
|
||||||
import com.tungsten.fcl.util.AndroidUtils;
|
import com.tungsten.fcl.util.AndroidUtils;
|
||||||
import com.tungsten.fcl.util.RequestCodes;
|
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.BooleanProperty;
|
||||||
import com.tungsten.fclcore.fakefx.beans.property.ListProperty;
|
import com.tungsten.fclcore.fakefx.beans.property.ListProperty;
|
||||||
import com.tungsten.fclcore.fakefx.beans.property.SimpleBooleanProperty;
|
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) -> {
|
builder.create().browse(getActivity(), RequestCodes.SELECT_WORLD_CODE, ((requestCode, resultCode, data) -> {
|
||||||
if (requestCode == RequestCodes.SELECT_WORLD_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
if (requestCode == RequestCodes.SELECT_WORLD_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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);
|
File file = new File(path);
|
||||||
installWorld(file);
|
installWorld(file);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.net.Uri;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.AdapterView;
|
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) -> {
|
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) {
|
if (requestCode == RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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);
|
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) -> {
|
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) {
|
if (requestCode == RequestCodes.SELECT_LAUNCHER_BACKGROUND_CODE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
String path = FileBrowser.getSelectedFiles(data).get(0);
|
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);
|
ThemeEngine.getInstance().applyAndSave(getContext(), ((MainActivity) getActivity()).background, null, path);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
@ -24,8 +25,12 @@ import android.widget.Toast;
|
||||||
import com.tungsten.fcl.R;
|
import com.tungsten.fcl.R;
|
||||||
import com.tungsten.fcl.activity.WebActivity;
|
import com.tungsten.fcl.activity.WebActivity;
|
||||||
import com.tungsten.fclcore.util.io.FileUtils;
|
import com.tungsten.fclcore.util.io.FileUtils;
|
||||||
|
import com.tungsten.fclcore.util.io.IOUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@SuppressLint("DiscouragedApi")
|
@SuppressLint("DiscouragedApi")
|
||||||
|
@ -123,4 +128,26 @@ public class AndroidUtils {
|
||||||
return mime;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,9 +132,21 @@ public class FileBrowserActivity extends FCLActivity implements View.OnClickList
|
||||||
listView = findViewById(R.id.list);
|
listView = findViewById(R.id.list);
|
||||||
refreshList(currentPath != null ? currentPath : new File(fileBrowser.getInitDir()).toPath());
|
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);
|
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() {
|
private String getMode() {
|
||||||
|
|
Loading…
Reference in New Issue