diff --git a/app/src/main/assets/library/maplibre/gl-js/dist/THIRD_PARTY_NOTICES.md b/app/src/main/assets/library/maplibre/gl-js/dist/THIRD_PARTY_NOTICES.md
index 0887f82..68ff3aa 100644
--- a/app/src/main/assets/library/maplibre/gl-js/dist/THIRD_PARTY_NOTICES.md
+++ b/app/src/main/assets/library/maplibre/gl-js/dist/THIRD_PARTY_NOTICES.md
@@ -3,11 +3,10 @@ Builds included inside /dist correspond to MapLibre GL JS version 5.24.0
The source for these builds is available on https://github.com/maplibre/maplibre-gl-js
#
-All files inside the /dist folder are under the following license
+All files inside the /dist folder are subject to the following license
-------------------------------------------------------------------------------
-
Copyright (c) 2023, MapLibre contributors
All rights reserved.
diff --git a/app/src/main/java/eu/konggdev/strikemaps/MainActivity.java b/app/src/main/java/eu/konggdev/strikemaps/MainActivity.java
index aefacdd..a01c923 100755
--- a/app/src/main/java/eu/konggdev/strikemaps/MainActivity.java
+++ b/app/src/main/java/eu/konggdev/strikemaps/MainActivity.java
@@ -1,8 +1,5 @@
package eu.konggdev.strikemaps;
-import static org.maplibre.android.style.layers.PropertyFactory.lineColor;
-import static org.maplibre.android.style.layers.PropertyFactory.lineWidth;
-
import eu.konggdev.strikemaps.app.AppController;
import android.os.Bundle;
diff --git a/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java b/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java
index 7cc5bb6..7ecbff5 100644
--- a/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java
+++ b/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java
@@ -4,8 +4,8 @@ import android.content.SharedPreferences;
import androidx.appcompat.app.AppCompatActivity;
import eu.konggdev.strikemaps.MainActivity;
-import eu.konggdev.strikemaps.R;
import eu.konggdev.strikemaps.map.MapComponent;
+import eu.konggdev.strikemaps.storage.RegistryStorageComponent;
import eu.konggdev.strikemaps.ui.UIComponent;
import eu.konggdev.strikemaps.ui.screen.definition.DefinedScreen;
@@ -14,28 +14,43 @@ public class AppController {
private final MainActivity appActivity;
private MapComponent map;
+
private UIComponent ui;
- public AppController(MainActivity refActivity) {
- appActivity = refActivity;
- }
+
+ private RegistryStorageComponent registry;
+
+
+ public AppController(MainActivity appActivity) { this.appActivity = appActivity;}
+
public void logcat(String log) {
appActivity.logcat(log);
}
+
public UIComponent getUi() {
if (ui == null) init();
return ui;
}
+
public MapComponent getMap() {
if (map == null) init();
return map;
}
+
+ public RegistryStorageComponent getRegistry() {
+ if (registry == null) init();
+ return registry;
+ }
+
public SharedPreferences getPrefs() {
return getActivity().getSharedPreferences("user_prefs", MODE_PRIVATE);
}
+
public AppCompatActivity getActivity() { return appActivity; }
+
public void init() {
if (getActivity().getSupportActionBar() != null)
getActivity().getSupportActionBar().show();
+ if(registry == null) registry = new RegistryStorageComponent(this);
if(map == null) map = new MapComponent(this);
if(ui == null) {
ui = new UIComponent(this, map);
diff --git a/app/src/main/java/eu/konggdev/strikemaps/data/helper/UserPrefsHelper.java b/app/src/main/java/eu/konggdev/strikemaps/data/helper/UserPrefsHelper.java
deleted file mode 100644
index ee16dd4..0000000
--- a/app/src/main/java/eu/konggdev/strikemaps/data/helper/UserPrefsHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package eu.konggdev.strikemaps.data.helper;
-
-import android.content.SharedPreferences;
-
-public final class UserPrefsHelper {
- private UserPrefsHelper() {} // prevent instantiation
-
- //Keys
- private static final String KEY_STARTUP_MAP_STYLE = "startupMapStyle";
- private static final String KEY_MAP_RENDERER = "mapRenderer";
- private static final String KEY_PERSIST_LOCATION_ENABLED = "persistLocationEnabled";
- private static final String KEY_LAST_LOCATION_ENABLED = "lastLocationEnabled";
-
- //Defaults
- private static final String DEFAULT_MAP_STYLE = "bundled/style/classic.style.json";
- private static final Integer DEFAULT_MAP_RENDERER = 0;
- private static final boolean DEFAULT_PERSIST_LOCATION_ENABLED = true;
- private static final boolean DEFAULT_LAST_LOCATION_ENABLED = false;
-
- public static String startupMapStyle(SharedPreferences prefs) {
- return prefs.getString(KEY_STARTUP_MAP_STYLE, DEFAULT_MAP_STYLE);
- }
-
- public static boolean startupMapStyle(SharedPreferences prefs, String updated) {
- return prefs.edit().putString(KEY_STARTUP_MAP_STYLE, updated).commit();
- }
-
- public static Integer mapRenderer(SharedPreferences prefs) {
- return prefs.getInt(KEY_MAP_RENDERER, DEFAULT_MAP_RENDERER);
- }
-
- public static boolean mapRenderer(SharedPreferences prefs, Integer updated) {
- return prefs.edit().putInt(KEY_MAP_RENDERER, updated).commit();
- }
-
- public static boolean persistLocationEnabled(SharedPreferences prefs) {
- return prefs.getBoolean(KEY_PERSIST_LOCATION_ENABLED, DEFAULT_PERSIST_LOCATION_ENABLED);
- }
-
- public static boolean lastLocationEnabled(SharedPreferences prefs) {
- return prefs.getBoolean(KEY_LAST_LOCATION_ENABLED, DEFAULT_LAST_LOCATION_ENABLED);
- }
-
- public static boolean lastLocationEnabled(SharedPreferences prefs, boolean status) {
- return prefs.edit().putBoolean(KEY_LAST_LOCATION_ENABLED, status).commit();
- }
-}
diff --git a/app/src/main/java/eu/konggdev/strikemaps/data/helper/FileHelper.java b/app/src/main/java/eu/konggdev/strikemaps/helper/FileHelper.java
similarity index 57%
rename from app/src/main/java/eu/konggdev/strikemaps/data/helper/FileHelper.java
rename to app/src/main/java/eu/konggdev/strikemaps/helper/FileHelper.java
index 2ce6cc8..0763fe4 100644
--- a/app/src/main/java/eu/konggdev/strikemaps/data/helper/FileHelper.java
+++ b/app/src/main/java/eu/konggdev/strikemaps/helper/FileHelper.java
@@ -1,17 +1,29 @@
-package eu.konggdev.strikemaps.data.helper;
+package eu.konggdev.strikemaps.helper;
import android.content.res.AssetManager;
-import android.os.Environment;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import eu.konggdev.strikemaps.app.AppController;
//FIXME: Ugly
public final class FileHelper {
+ public static Bitmap getIcon(String iconLocator, AppController app) {
+ switch (iconLocator.split("//")[0]) {
+ //TODO: https
+ case "assets:":
+ return BitmapFactory.decodeStream(FileHelper.openAssetStream("bundled/icon/" + iconLocator.split("//")[1], app));
+ default:
+ app.logcat("Unimplemented icon locator space: " + iconLocator);
+ return null;
+ }
+ }
+
public static String loadStringFromAssetFile(String filePath, AppController app) {
try (InputStream is = app.getActivity().getAssets().open(filePath)) {
int size = is.available();
@@ -24,19 +36,6 @@ public final class FileHelper {
}
}
- public static String loadStringFromUserFile(String filePath) {
- File file = new File(filePath);
- try (FileInputStream fis = new FileInputStream(file)) {
- int size = fis.available();
- byte[] buffer = new byte[size];
- fis.read(buffer);
- return new String(buffer, StandardCharsets.UTF_8);
- } catch (IOException ex) {
- ex.printStackTrace();
- return null;
- }
- }
-
public static void writeUserFile(String path, String fileName, String content, AppController app) throws IOException {
try {
File userDirectory = new File(app.getActivity().getExternalFilesDir(null), path);
@@ -60,16 +59,6 @@ public final class FileHelper {
}
}
- public static boolean deleteFile(String filePath) {
- File file = new File(filePath);
-
- if (!file.exists() || !file.isFile()) {
- return false;
- }
-
- return file.delete();
- }
-
public static String[] getAssetFiles(String path, String fileExt, AppController app) {
AssetManager assetManager = app.getActivity().getAssets();
try {
@@ -109,44 +98,4 @@ public final class FileHelper {
}
}
- public static boolean userFileExists(String path, String fileName, AppController app) {
- File userDirectory = new File(app.getActivity().getExternalFilesDir(null), path);
-
- if (!userDirectory.exists() || !userDirectory.isDirectory()) {
- return false;
- }
-
- File file = new File(userDirectory, fileName);
-
- return file.exists() && file.isFile();
- }
-
- public static String[] getUserFiles(String path, String fileExt, AppController app) {
- File userDirectory = new File(app.getActivity().getExternalFilesDir(null), path);
-
- if (!userDirectory.exists() || !userDirectory.isDirectory())
- return new String[0];
-
- File[] files = userDirectory.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String filename) {
- if (fileExt == null || fileExt.isEmpty()) {
- return true;
- }
-
- return filename.toLowerCase().endsWith(fileExt.toLowerCase());
- }
- });
-
- if (files == null || files.length == 0) {
- return new String[0];
- }
-
- List fileList = new ArrayList<>();
- for (File file : files) {
- fileList.add(file.getAbsolutePath());
- }
-
- return fileList.toArray(new String[0]);
- }
}
diff --git a/app/src/main/java/eu/konggdev/strikemaps/helper/UserPrefsHelper.java b/app/src/main/java/eu/konggdev/strikemaps/helper/UserPrefsHelper.java
new file mode 100644
index 0000000..f6d16ad
--- /dev/null
+++ b/app/src/main/java/eu/konggdev/strikemaps/helper/UserPrefsHelper.java
@@ -0,0 +1,127 @@
+package eu.konggdev.strikemaps.helper;
+
+import android.content.SharedPreferences;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import eu.konggdev.strikemaps.app.AppController;
+import eu.konggdev.strikemaps.map.source.MapSource;
+import eu.konggdev.strikemaps.map.source.MapSource.MapSourceContractType;
+import eu.konggdev.strikemaps.map.source.model.TileSource;
+import eu.konggdev.strikemaps.map.style.MapStyle;
+import eu.konggdev.strikemaps.map.style.document.StyleDocument;
+import eu.konggdev.strikemaps.map.style.management.StyleManagementMetadata;
+import eu.konggdev.strikemaps.map.style.options.StyleOptions;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+public final class UserPrefsHelper {
+ private UserPrefsHelper() {} // prevent instantiation
+
+ //Keys
+ private static final String KEY_STARTUP_MAP_STYLE = "startupMapStyle";
+ private static final String KEY_MAP_RENDERER = "mapRenderer";
+ private static final String KEY_PERSIST_LOCATION_ENABLED = "persistLocationEnabled";
+ private static final String KEY_LAST_LOCATION_ENABLED = "lastLocationEnabled";
+ private static final String KEY_STYLES = "styles";
+ private static final String KEY_SOURCES = "sources";
+
+ //Defaults
+ private static final Integer DEFAULT_MAP_STYLE = 0;
+ private static final Integer DEFAULT_MAP_RENDERER = 0;
+ private static final boolean DEFAULT_PERSIST_LOCATION_ENABLED = true;
+ private static final boolean DEFAULT_LAST_LOCATION_ENABLED = false;
+
+ public static Map DEFAULT_STYLES(AppController app) {
+ Map styles = new HashMap<>();
+ String[] styleAssets = FileHelper.getAssetFiles("bundled/style", ".style.json", app);
+ for (int i = 0; i < styleAssets.length; i++) { styles.put( i,
+ new MapStyle(
+ FileHelper.loadStringFromAssetFile(styleAssets[i], app),
+ new StyleOptions(),
+ new StyleManagementMetadata()
+ ));
+ }
+ return styles;
+ } //Built-in Styles
+
+ private static final Map DEFAULT_SOURCES = Map.of(
+ 0, new MapSource(
+ MapSourceContractType.DEFINITION,
+ "Strike Maps Planet",
+ new TileSource("https://tiles.strikemaps.eu/planet"),
+ "vector",
+ "smts"
+ ),
+ 1, new MapSource(
+ MapSourceContractType.DEFINITION,
+ "ArcGIS Imagery",
+ new TileSource(new String[]{"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"}),
+ "raster",
+ "raster"
+ )
+ ); //Built-in Sources
+
+ public static Integer startupMapStyle(SharedPreferences prefs) {
+ return prefs.getInt(KEY_STARTUP_MAP_STYLE, DEFAULT_MAP_STYLE);
+ }
+
+ public static boolean startupMapStyle(SharedPreferences prefs, Integer updated) {
+ return prefs.edit().putInt(KEY_STARTUP_MAP_STYLE, updated).commit();
+ }
+
+ public static Integer mapRenderer(SharedPreferences prefs) {
+ return prefs.getInt(KEY_MAP_RENDERER, DEFAULT_MAP_RENDERER);
+ }
+
+ public static boolean mapRenderer(SharedPreferences prefs, Integer updated) {
+ return prefs.edit().putInt(KEY_MAP_RENDERER, updated).commit();
+ }
+
+ public static boolean persistLocationEnabled(SharedPreferences prefs) {
+ return prefs.getBoolean(KEY_PERSIST_LOCATION_ENABLED, DEFAULT_PERSIST_LOCATION_ENABLED);
+ }
+
+ public static boolean lastLocationEnabled(SharedPreferences prefs) {
+ return prefs.getBoolean(KEY_LAST_LOCATION_ENABLED, DEFAULT_LAST_LOCATION_ENABLED);
+ }
+
+ public static boolean lastLocationEnabled(SharedPreferences prefs, boolean status) {
+ return prefs.edit().putBoolean(KEY_LAST_LOCATION_ENABLED, status).commit();
+ }
+
+ public static Map styles(SharedPreferences prefs, AppController app) {
+ String json = prefs.getString(KEY_STYLES, null);
+ if (json == null) return DEFAULT_STYLES(app);
+ Type type = new TypeToken