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 @@ + + + + + + + + + + + + + + 主题 亮色模式启动器背景图片 暗色模式启动器背景图片 + 鼠标图片 忽略刘海屏 动画速度 diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml index 7b0ede99..5d5c15a2 100644 --- a/FCL/src/main/res/values/strings.xml +++ b/FCL/src/main/res/values/strings.xml @@ -797,6 +797,7 @@ Theme Light Mode Launcher Background Dark Mode Launcher Background + Cursor Picture Ignore Notch Animation Speed