From 1002d59cc94bfcd1ca65ac5b7a9842fea5f3a543 Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Wed, 8 Sep 2021 22:03:12 +0200 Subject: [PATCH] - Import screen W.I.P - Rounded background menu corners --- .../src/main/AndroidManifest.xml | 17 +++ .../pojavlaunch/ImportControlActivity.java | 144 ++++++++++++++++++ .../customcontrols/ControlData.java | 8 +- .../net/kdt/pojavlaunch/utils/FileUtils.java | 8 +- .../src/main/res/drawable/menu_background.xml | 9 ++ .../main/res/layout/import_control_layout.xml | 72 +++++++++ .../src/main/res/layout/launcher_login_v3.xml | 2 +- 7 files changed, 254 insertions(+), 6 deletions(-) create mode 100644 app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/ImportControlActivity.java create mode 100644 app_pojavlauncher/src/main/res/drawable/menu_background.xml create mode 100644 app_pojavlauncher/src/main/res/layout/import_control_layout.xml diff --git a/app_pojavlauncher/src/main/AndroidManifest.xml b/app_pojavlauncher/src/main/AndroidManifest.xml index e2b3cef98..77ff734f2 100644 --- a/app_pojavlauncher/src/main/AndroidManifest.xml +++ b/app_pojavlauncher/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -38,6 +39,22 @@ + + + + + + + + + + + { + importControlFile(fileName); + runOnUiThread(() -> { + Toast.makeText(getApplicationContext(), "Importation finished", Toast.LENGTH_SHORT).show(); + finishAndRemoveTask(); + }); + }).start(); + } + + /** + * Copy a the file from the Intent data with a provided name + * into the controlmap folder. + * @param fileName The file name to use. + * @return whether the file was successfully imported + */ + private boolean importControlFile(String fileName){ + InputStream is; + try { + is = getContentResolver().openInputStream(uriData); + + OutputStream os = new FileOutputStream(Tools.CTRLMAP_PATH + "/" + fileName + ".json"); + byte[] buffer = new byte[1024]; + while(is.read(buffer) != -1) + os.write(buffer); + + os.close(); + is.close(); + return true; + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + + /** + * Tell if the clean version of the filename is valid. + * @param fileName the string to test + * @return whether the filename is valid + */ + private static boolean isFileNameValid(String fileName){ + fileName = trimFileName(fileName); + + if(fileName.isEmpty()) return false; + if (FileUtils.exists(Tools.CTRLMAP_PATH + "/" + fileName + ".json")) return false; + + return true; + } + + /** + * Remove or undesirable chars from the string + * @param fileName The string to trim + * @return The trimmed string + */ + private static String trimFileName(String fileName){ + return fileName + .replace(".json", "") + .replaceAll("%..", "/") + .replace("/", "") + .replace("\\", "") + .trim(); + } + + /** + * Tries to get an Uri from the various sources + */ + private void getUriData(){ + uriData = getIntent().getData(); + if(uriData != null) return; + try { + uriData = getIntent().getClipData().getItemAt(0).getUri(); + }catch (Exception ignored){} + } + +} diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java index 5d6b78cc0..fd4ba4762 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java @@ -259,12 +259,12 @@ public class ControlData { private static void setExpression(String stringExpression){ if(builder.get() == null) bypassExpressionBuilder(); try { - expression.get().set(builder.get(), (String) stringExpression); + expression.get().set(builder.get(), stringExpression); }catch (IllegalAccessException e){} } /** - * Build a shared conversion map without the view dependent values + * Build a shared conversion map without the ControlData dependent values * You need to set the view dependent values before using it. */ private static void buildConversionMap() { @@ -285,7 +285,9 @@ public class ControlData { } /** - * Fill the conversionMap with + * Fill the conversionMap with controlData dependent values. + * The returned valueMap should NOT be kept in memory. + * @return the valueMap to use. */ private Map fillConversionMap(){ ArrayMap valueMap = conversionMap.get(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/FileUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/FileUtils.java index 3467b7ca9..44cc8c5fb 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/FileUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/FileUtils.java @@ -1,5 +1,9 @@ package net.kdt.pojavlaunch.utils; -public class FileUtils -{ +import java.io.File; + +public class FileUtils { + public static boolean exists(String filePath){ + return new File(filePath).exists(); + } } \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/menu_background.xml b/app_pojavlauncher/src/main/res/drawable/menu_background.xml new file mode 100644 index 000000000..1bf066e6d --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/menu_background.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/layout/import_control_layout.xml b/app_pojavlauncher/src/main/res/layout/import_control_layout.xml new file mode 100644 index 000000000..e8a9790dc --- /dev/null +++ b/app_pojavlauncher/src/main/res/layout/import_control_layout.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + diff --git a/app_pojavlauncher/src/main/res/layout/launcher_login_v3.xml b/app_pojavlauncher/src/main/res/layout/launcher_login_v3.xml index cfdea5611..c83224e70 100644 --- a/app_pojavlauncher/src/main/res/layout/launcher_login_v3.xml +++ b/app_pojavlauncher/src/main/res/layout/launcher_login_v3.xml @@ -47,7 +47,7 @@ app:layout_constraintWidth_max="480dp" android:layout_height="300dp" - android:background="#272727" + android:background="@drawable/menu_background" android:translationZ="-1dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"