From 8d9812ebe05e2254a7964a4c156346f3559de53a Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:54:55 +0300 Subject: [PATCH] fix #978 --- .../lite/themes/palettes/PalettesManager.java | 29 ++++++++++++++----- .../lite/ui/fragments/ThemesFragment.java | 22 +++++++------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/themes/palettes/PalettesManager.java b/app/src/main/java/ru/vtosters/lite/themes/palettes/PalettesManager.java index 5e6184374..ac1ce8a3d 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/palettes/PalettesManager.java +++ b/app/src/main/java/ru/vtosters/lite/themes/palettes/PalettesManager.java @@ -1,21 +1,25 @@ package ru.vtosters.lite.themes.palettes; +import android.os.Build; import android.os.Environment; - +import android.util.Log; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; - import org.json.JSONException; import org.json.JSONObject; +import ru.vtosters.lite.themes.items.VTLPalette; +import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.IOUtils; +import ru.vtosters.lite.utils.LifecycleUtils; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import ru.vtosters.lite.themes.items.VTLPalette; -import ru.vtosters.lite.utils.AndroidUtils; -import ru.vtosters.lite.utils.IOUtils; +import static android.widget.Toast.makeText; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; public class PalettesManager { @@ -40,6 +44,13 @@ public class PalettesManager { mPalettes.clear(); if (!PALETTES_DIR.exists()) PALETTES_DIR.mkdirs(); + + if (Build.VERSION.SDK_INT >= 23 && !Environment.getExternalStorageDirectory().canWrite()) { + makeText(getGlobalContext(), "Не выдано разрешение на запись и чтение файлов", Toast.LENGTH_LONG).show(); + LifecycleUtils.getCurrentActivity().requestPermissions(new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 228); + return; + } + final var palettes = PALETTES_DIR.listFiles((dir, name) -> name.endsWith(".json")); if (palettes == null || palettes.length == 0) copyPaletteFromAssets(); @@ -67,8 +78,12 @@ public class PalettesManager { private void parsePalettes() { var arr = PALETTES_DIR.listFiles((dir, name) -> name.endsWith(".json")); - if (arr == null || arr.length == 0) - throw new RuntimeException("Can't load palettes"); + + if (arr == null || arr.length == 0) { + Log.d("PalettesManager", "arr.length null"); + return; + } + for (var file : arr) { try { var json = new JSONObject(IOUtils.readAllLines(file)); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java index 8f2ed45d8..3ff00cdd2 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java @@ -141,16 +141,18 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment { void showPalettesDialog() { final var manager = PalettesManager.getInstance(); final var titles = new String[manager.getPalettesCount()]; - for (int i = 0; i < titles.length; ++i) - titles[i] = manager.getPalette(i).name; - new VkAlertDialog.Builder(requireContext()) - .setTitle(AndroidUtils.getString("select_palette")) - .setItems(titles, (dialog, which) -> - PalettesBottomSheetDialog.create(requireActivity(), manager.getPalette(which), - (adapter, vtlcolor) -> setAccentColor(vtlcolor.color)) - ) - .setPositiveButton(R.string.cancel, null) - .show(); + if (titles.length > 0) { + for (int i = 0; i < titles.length; ++i) + titles[i] = manager.getPalette(i).name; + new VkAlertDialog.Builder(requireContext()) + .setTitle(AndroidUtils.getString("select_palette")) + .setItems(titles, (dialog, which) -> + PalettesBottomSheetDialog.create(requireActivity(), manager.getPalette(which), + (adapter, vtlcolor) -> setAccentColor(vtlcolor.color)) + ) + .setPositiveButton(R.string.cancel, null) + .show(); + } } void setAccentColor(int color) {