diff --git a/FCL/build.gradle b/FCL/build.gradle index f5776d1e..f522b534 100644 --- a/FCL/build.gradle +++ b/FCL/build.gradle @@ -44,8 +44,8 @@ android { applicationId "com.tungsten.fcl" minSdk 26 targetSdk 34 - versionCode 1176 - versionName "1.1.7.6" + versionCode 1177 + versionName "1.1.7.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt b/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt index 240caeea..6a5e5fed 100644 --- a/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt +++ b/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt @@ -230,7 +230,9 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener { } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { - _uiManager?.onBackPressed() + if (event?.keyCode == KeyEvent.KEYCODE_BACK) { + _uiManager?.onBackPressed() + } return true } diff --git a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java index 02fde7a0..b1f7f13e 100644 --- a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java +++ b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java @@ -1,5 +1,8 @@ package com.tungsten.fcl.control; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -555,6 +558,12 @@ public class GameMenu implements MenuCallback, View.OnClickListener { initRightMenu(); viewManager.setup(); + + if (new File(FCLPath.FILES_DIR, "cursor.png").exists()) { + Bitmap bitmap = BitmapFactory.decodeFile(new File(FCLPath.FILES_DIR, "cursor.png").getAbsolutePath()); + BitmapDrawable drawable = new BitmapDrawable(getActivity().getResources(), bitmap); + getCursor().setImageDrawable(drawable); + } } @Override diff --git a/FCL/src/main/java/com/tungsten/fcl/ui/setting/LauncherSettingPage.java b/FCL/src/main/java/com/tungsten/fcl/ui/setting/LauncherSettingPage.java index 78e7446c..115e6de0 100644 --- a/FCL/src/main/java/com/tungsten/fcl/ui/setting/LauncherSettingPage.java +++ b/FCL/src/main/java/com/tungsten/fcl/ui/setting/LauncherSettingPage.java @@ -67,9 +67,11 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi private FCLButton theme; private FCLButton ltBackground; private FCLButton dkBackground; + private FCLButton cursor; private FCLButton resetTheme; private FCLButton resetLtBackground; private FCLButton resetDkBackground; + private FCLButton resetCursor; private FCLSwitch ignoreNotch; private FCLSeekBar animationSpeed; private FCLTextView animationSpeedText; @@ -94,9 +96,11 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi theme = findViewById(R.id.theme); ltBackground = findViewById(R.id.background_lt); dkBackground = findViewById(R.id.background_dk); + cursor = findViewById(R.id.cursor); resetTheme = findViewById(R.id.reset_theme); resetLtBackground = findViewById(R.id.reset_background_lt); resetDkBackground = findViewById(R.id.reset_background_dk); + resetCursor = findViewById(R.id.reset_cursor); ignoreNotch = findViewById(R.id.ignore_notch); animationSpeed = findViewById(R.id.animation_speed); animationSpeedText = findViewById(R.id.animation_speed_text); @@ -113,9 +117,11 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi theme.setOnClickListener(this); ltBackground.setOnClickListener(this); dkBackground.setOnClickListener(this); + cursor.setOnClickListener(this); resetTheme.setOnClickListener(this); resetLtBackground.setOnClickListener(this); resetDkBackground.setOnClickListener(this); + resetCursor.setOnClickListener(this); ArrayList languageList = new ArrayList<>(); languageList.add(getContext().getString(R.string.settings_launcher_language_system)); @@ -311,6 +317,28 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi } })); } + if(v == cursor) { + FileBrowser.Builder builder = new FileBrowser.Builder(getContext()); + builder.setLibMode(LibMode.FILE_CHOOSER); + builder.setSelectionMode(SelectionMode.SINGLE_SELECTION); + ArrayList suffix = new ArrayList<>(); + suffix.add(".png"); + builder.setSuffix(suffix); + builder.create().browse(getActivity(), RequestCodes.SELECT_CURSOR_CODE, ((requestCode, resultCode, data) -> { + if (requestCode == RequestCodes.SELECT_CURSOR_CODE && resultCode == Activity.RESULT_OK && data != null) { + String path = FileBrowser.getSelectedFiles(data).get(0); + Uri uri = Uri.parse(path); + if (AndroidUtils.isDocUri(uri)) { + AndroidUtils.copyFile(getActivity(), uri, new File(FCLPath.FILES_DIR, "cursor.png")); + } else { + try { + FileUtils.copyFile(new File(path), new File(FCLPath.FILES_DIR, "cursor.png")); + } catch (IOException ignore) { + } + } + } + })); + } if (v == resetTheme) { ThemeEngine.getInstance().applyAndSave(getContext(), ThemeEngine.getWallpaperColor(getContext()), false); } @@ -330,6 +358,9 @@ public class LauncherSettingPage extends FCLCommonPage implements View.OnClickLi Schedulers.androidUIThread().execute(() -> ThemeEngine.getInstance().applyAndSave(getContext(), ((MainActivity) getActivity()).bind.background, null, null)); }).start(); } + if (v == resetCursor) { + new File(FCLPath.FILES_DIR, "cursor.png").delete(); + } } @Override diff --git a/FCL/src/main/java/com/tungsten/fcl/util/AndroidUtils.java b/FCL/src/main/java/com/tungsten/fcl/util/AndroidUtils.java index eff66ca9..44e9c76a 100644 --- a/FCL/src/main/java/com/tungsten/fcl/util/AndroidUtils.java +++ b/FCL/src/main/java/com/tungsten/fcl/util/AndroidUtils.java @@ -146,6 +146,22 @@ public class AndroidUtils { return dest.getAbsolutePath(); } + public static String copyFile(Activity activity, Uri uri, File dest) { + 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); } diff --git a/FCL/src/main/java/com/tungsten/fcl/util/RequestCodes.java b/FCL/src/main/java/com/tungsten/fcl/util/RequestCodes.java index 8e247cd3..9f6708c3 100644 --- a/FCL/src/main/java/com/tungsten/fcl/util/RequestCodes.java +++ b/FCL/src/main/java/com/tungsten/fcl/util/RequestCodes.java @@ -35,4 +35,6 @@ public class RequestCodes { public static final int SELECT_DATAPACK_CODE = 750; public static final int SELECT_LAUNCHER_BACKGROUND_CODE = 800; + + public static final int SELECT_CURSOR_CODE = 850; } diff --git a/FCL/src/main/res/layout/page_launcher_setting.xml b/FCL/src/main/res/layout/page_launcher_setting.xml index 7fa84c3f..61b416d9 100644 --- a/FCL/src/main/res/layout/page_launcher_setting.xml +++ b/FCL/src/main/res/layout/page_launcher_setting.xml @@ -313,6 +313,53 @@ + + + + + + + + + + + + + + Fold Craft Launcher - null - بدون مجوز ذخیره سازی، لطفاً به Fold Craft Launcher اجازه دهید. اعطا کردن مجوز ذخیره مورد نیاز است diff --git a/FCL/src/main/res/values-pt-rBR/strings.xml b/FCL/src/main/res/values-pt-rBR/strings.xml index d88615ba..480a84a8 100644 --- a/FCL/src/main/res/values-pt-rBR/strings.xml +++ b/FCL/src/main/res/values-pt-rBR/strings.xml @@ -1,8 +1,6 @@ Fold Craft Launcher - null - Sem permissão de armazenamento, por favor conceda a permissão ao Fold Craft Launcher. Grant Permission to store needed diff --git a/FCL/src/main/res/values-ru/strings.xml b/FCL/src/main/res/values-ru/strings.xml index 0c436a43..07d08ab5 100644 --- a/FCL/src/main/res/values-ru/strings.xml +++ b/FCL/src/main/res/values-ru/strings.xml @@ -1,8 +1,6 @@ Fold Craft Launcher - null - Нет доступа к хранилищу, предоствьте разрешение приложению Fold Craft Launcher в настройках. Grant Permission to store needed diff --git a/FCL/src/main/res/values-zh/strings.xml b/FCL/src/main/res/values-zh/strings.xml index c5d8bddc..a7bb83e3 100644 --- a/FCL/src/main/res/values-zh/strings.xml +++ b/FCL/src/main/res/values-zh/strings.xml @@ -751,6 +751,7 @@ 主题 亮色模式启动器背景图片 暗色模式启动器背景图片 + 鼠标图片 忽略刘海屏 动画速度 diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml index 7b0ede99..4cd7f4fa 100644 --- a/FCL/src/main/res/values/strings.xml +++ b/FCL/src/main/res/values/strings.xml @@ -1,8 +1,6 @@ Fold Craft Launcher - null - No storage permission, please grant Fold Craft Launcher the permission. Grant Permission to store needed @@ -797,6 +795,7 @@ Theme Light Mode Launcher Background Dark Mode Launcher Background + Cursor Picture Ignore Notch Animation Speed diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java index b78750e5..8d909735 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java @@ -18,10 +18,16 @@ public class LibFilter { "{\n" + " \"name\": \"net.java.dev.jna:jna:5.13.0\"\n" + "}"; - private static final String OSHI_6_3_STRING = - "{\n" + - " \"name\": \"com.github.oshi:oshi-core:6.3.0\"\n" + - "}"; + private static final String OSHI_6_3_STRING = "{\n" + + " \"name\": \"com.github.oshi:oshi-core:6.3.0\",\n" + + " \"downloads\": {\n" + + " \"artifact\": {\n" + + " \"path\": \"com/github/oshi/oshi-core/6.3.0/oshi-core-6.3.0.jar\",\n" + + " \"sha1\": \"9e98cf55be371cafdb9c70c35d04ec2a8c2b42ac\",\n" + + " \"url\": \"https://repo1.maven.org/maven2/com/github/oshi/oshi-core/6.3.0/oshi-core-6.3.0.jar\"\n" + + " }\n" + + " }\n" + + " }"; private static final Library ASM_ALL_5_2 = GSON.fromJson(ASM_ALL_5_2_STRING, Library.class); private static final Library JNA_5_13 = GSON.fromJson(JNA_5_13_STRING, Library.class); diff --git a/version_map.json b/version_map.json index 6a083614..8c17a334 100644 --- a/version_map.json +++ b/version_map.json @@ -1,20 +1,20 @@ [ { "type": "release", - "versionCode": 1176, - "versionName": "1.1.7.6", - "date": "2024.08.23", + "versionCode": 1177, + "versionName": "1.1.7.7", + "date": "2024.08.27", "description": [ { "lang": "en", - "text": "Fix some fatal error.\nAdd some features. \nSee github for details." + "text": "1.Fix oshi core.\n2.Fix windows scale.\n3.Add custom cursor.\n4.Fix some bug.\nSee github for more details." }, { "lang": "zh_CN", - "text": "FCL 1.1.7.6更新内容(若启动器内下载缓慢请使用网盘下载,64位的请下载arm64,不知道该下哪个的请下载all)\n1.修复微软登录时的错误提示\n2.修复neoforge整合包版本错误\n3.修复手动选择整合包时的整合包为非正常格式时无法安装的bug\n4.可手动选择执行jar文件使用的java\n5.同步部分HMCL Core,修复些许bug" + "text": "FCL 1.1.7.7更新内容(若启动器内下载缓慢请使用网盘下载,64位的请下载arm64,不知道该下哪个的请下载all)\n1.修复oshi core\n2.修复窗口缩放\n3.添加自定义光标\n4.添加更多动画效果" } ], - "netdiskUrl": "https://pan.quark.cn/s/04bc07022a7d", - "url": "https://github.com/FCL-Team/FoldCraftLauncher/releases/download/1.1.7.6/FCL-release-1.1.7.6-all.apk" + "netdiskUrl": "https://pan.quark.cn/s/5fac965e464b", + "url": "https://github.com/FCL-Team/FoldCraftLauncher/releases/download/1.1.7.7/FCL-release-1.1.7.7-all.apk" } ]