Basic functional settings screen

This commit is contained in:
2026-06-02 02:13:11 +02:00
parent cc49d4e536
commit 2cd32a7d32
10 changed files with 130 additions and 20 deletions
@@ -32,8 +32,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (!app.getUi().back()) { if (!app.getUi().back())
super.onBackPressed(); // exits app super.onBackPressed();
}
} }
} }
@@ -34,6 +34,8 @@ public class AppController {
} }
public AppCompatActivity getActivity() { return appActivity; } public AppCompatActivity getActivity() { return appActivity; }
public void init() { public void init() {
if (getActivity().getSupportActionBar() != null)
getActivity().getSupportActionBar().show();
if(map == null) map = new MapComponent(this); if(map == null) map = new MapComponent(this);
if(ui == null) { if(ui == null) {
ui = new UIComponent(this, map); ui = new UIComponent(this, map);
@@ -13,17 +13,24 @@ public final class UserPrefsHelper {
//Defaults //Defaults
private static final String DEFAULT_MAP_STYLE = "bundled/style/classic.style.json"; private static final String DEFAULT_MAP_STYLE = "bundled/style/classic.style.json";
private static final String DEFAULT_MAP_RENDERER = "mapLibre"; private static final Integer DEFAULT_MAP_RENDERER = 1;
private static final boolean DEFAULT_PERSIST_LOCATION_ENABLED = true; private static final boolean DEFAULT_PERSIST_LOCATION_ENABLED = true;
private static final boolean DEFAULT_LAST_LOCATION_ENABLED = false; private static final boolean DEFAULT_LAST_LOCATION_ENABLED = false;
public static String startupMapStyle(SharedPreferences prefs) { public static String startupMapStyle(SharedPreferences prefs) {
return prefs.getString(KEY_STARTUP_MAP_STYLE, DEFAULT_MAP_STYLE); return prefs.getString(KEY_STARTUP_MAP_STYLE, DEFAULT_MAP_STYLE);
} }
public static String mapRenderer(SharedPreferences prefs) { public static boolean startupMapStyle(SharedPreferences prefs, String updated) {
return prefs.getString(KEY_MAP_RENDERER, DEFAULT_MAP_RENDERER); 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) { public static boolean persistLocationEnabled(SharedPreferences prefs) {
@@ -1,7 +1,11 @@
package eu.konggdev.strikemaps.map; package eu.konggdev.strikemaps.map;
import java.util.*; import java.util.*;
import android.widget.Toast;
import android.widget.Toolbar;
import eu.konggdev.strikemaps.Component; import eu.konggdev.strikemaps.Component;
import eu.konggdev.strikemaps.map.renderer.implementation.MapLibreGLJSRenderer;
import eu.konggdev.strikemaps.ui.factory.AlertDialogFactory; import eu.konggdev.strikemaps.ui.factory.AlertDialogFactory;
import eu.konggdev.strikemaps.data.helper.UserPrefsHelper; import eu.konggdev.strikemaps.data.helper.UserPrefsHelper;
import eu.konggdev.strikemaps.map.renderer.implementation.VtmRenderer; import eu.konggdev.strikemaps.map.renderer.implementation.VtmRenderer;
@@ -24,11 +28,17 @@ public class MapComponent implements Component {
public MapComponent(AppController ref) { public MapComponent(AppController ref) {
this.app = ref; this.app = ref;
switch(UserPrefsHelper.mapRenderer(app.getPrefs())) { switch(UserPrefsHelper.mapRenderer(app.getPrefs())) {
case "vtm": case 1:
this.mapRenderer = new MapLibreNativeRenderer(app, this);
break;
case 2:
this.mapRenderer = new MapLibreGLJSRenderer(app, this);
break;
case 3:
this.mapRenderer = new VtmRenderer(app, this); this.mapRenderer = new VtmRenderer(app, this);
break; break;
case "mapLibre": default: //This shouldn't happen
default: //This shouldn't happen Toast.makeText(app.getActivity(), "Invalid renderer value in preferences\nFalling back to MapLibre Native", Toast.LENGTH_SHORT).show();
this.mapRenderer = new MapLibreNativeRenderer(app, this); this.mapRenderer = new MapLibreNativeRenderer(app, this);
break; break;
}; };
@@ -0,0 +1,31 @@
package eu.konggdev.strikemaps.map.renderer.implementation;
import android.view.View;
import eu.konggdev.strikemaps.app.AppController;
import eu.konggdev.strikemaps.map.MapComponent;
import eu.konggdev.strikemaps.map.renderer.MapRenderer;
import org.maplibre.android.geometry.LatLng;
import org.maplibre.geojson.Feature;
import java.util.Collections;
import java.util.List;
//Stub for now
public class MapLibreGLJSRenderer implements MapRenderer {
@Override
public void reload() {
}
@Override
public View getView() {
return null;
}
@Override
public List<Feature> featuresAtPoint(LatLng point) {
return Collections.emptyList();
}
public MapLibreGLJSRenderer(AppController app, MapComponent controller) { }
}
@@ -42,17 +42,15 @@ public class UIComponent implements Component {
R.id.mainContentView, new MainContentRegion(map.toFragment(), R.id.mainContentView), R.id.mainContentView, new MainContentRegion(map.toFragment(), R.id.mainContentView),
R.id.bottomUi, new UIRegion(new FragmentLayoutControls(app, R.id.bottomUi), R.id.bottomUi), R.id.bottomUi, new UIRegion(new FragmentLayoutControls(app, R.id.bottomUi), R.id.bottomUi),
R.id.topUi, new UIRegion(new FragmentLayoutSearch(app, R.id.topUi), R.id.topUi) R.id.topUi, new UIRegion(new FragmentLayoutSearch(app, R.id.topUi), R.id.topUi)
), //TODO: Probably stop referencing layout 3(!) times everytime ) //TODO: Probably stop referencing layout 3(!) times everytime
null
), ),
//Settings screen //Settings screen
DefinedScreen.SETTINGS, new Screen( DefinedScreen.SETTINGS, new Screen(
app, app,
//Just the settings content fragment //Just the settings content fragment
Map.of( Map.of(
R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentSettings(), R.id.mainContentView) R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentSettings(app), R.id.mainContentView)
), )
new Toolbar(app.getActivity())
) )
); );
} }
@@ -1,20 +1,58 @@
package eu.konggdev.strikemaps.ui.fragment.layout.content.main; package eu.konggdev.strikemaps.ui.fragment.layout.content.main;
import android.app.ActionBar;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.google.android.material.appbar.MaterialToolbar;
import eu.konggdev.strikemaps.R; import eu.konggdev.strikemaps.R;
import eu.konggdev.strikemaps.data.helper.UserPrefsHelper;
import eu.konggdev.strikemaps.app.AppController;
import java.util.Arrays;
public class FragmentLayoutContentSettings extends Fragment implements MainContentLayout { public class FragmentLayoutContentSettings extends Fragment implements MainContentLayout {
public FragmentLayoutContentSettings() { @NonNull AppController app;
public FragmentLayoutContentSettings(AppController app) {
super(R.layout.fragment_settings); super(R.layout.fragment_settings);
this.app = app;
} }
@Override @Override
public Fragment toFragment() { public Fragment toFragment() {
return this; return this;
} }
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
Spinner mapRendererSelector = view.findViewById(R.id.mapRendererSelector);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
view.getContext(),
R.array.map_renderers,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mapRendererSelector.setAdapter(adapter);
String currentRenderer = UserPrefsHelper.mapRenderer(app.getPrefs());
mapRendererSelector.setSelection(adapter.getPosition(currentRenderer));
mapRendererSelector.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
UserPrefsHelper.mapRenderer(app.getPrefs(), position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
}
);
}
} }
@@ -1,5 +1,6 @@
package eu.konggdev.strikemaps.ui.screen; package eu.konggdev.strikemaps.ui.screen;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@@ -14,11 +15,10 @@ import eu.konggdev.strikemaps.ui.element.region.UIRegion;
public class Screen { public class Screen {
@NonNull AppController app; @NonNull AppController app;
Toolbar supportBar; Toolbar toolbar;
public Screen(AppController app, Map<Integer, UIRegion> regions, Toolbar supportBar) { public Screen(AppController app, Map<Integer, UIRegion> regions) {
this.app = app; this.app = app;
this.uiRegions = regions; this.uiRegions = regions;
this.supportBar = supportBar;
} }
Map<Integer, UIRegion> uiRegions; Map<Integer, UIRegion> uiRegions;
public Integer popup; public Integer popup;
@@ -7,4 +7,24 @@
android:padding="24dp" android:padding="24dp"
android:background="@android:color/background_dark"> android:background="@android:color/background_dark">
<TextView
android:id="@+id/mapRendererLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Map Renderer:"
android:textColor="@android:color/white"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/mapRendererSelector"/>
<Spinner
android:id="@+id/mapRendererSelector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
app:layout_constraintStart_toEndOf="@id/mapRendererLabel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
+5
View File
@@ -3,4 +3,9 @@
<string name="settings_title">Settings</string> <string name="settings_title">Settings</string>
<string name="attribution_title"> Attribution </string> <string name="attribution_title"> Attribution </string>
<string name="shipped_attribution">Earth map data Included;\n - © OpenStreetMap Contributors\nMap Rendering libraries Included;\n - MapLibre developed by MapLibre Organization\n - Vtm developed by Mapsforge\nStrike Maps made with &lt;3 by konggdev</string> <string name="shipped_attribution">Earth map data Included;\n - © OpenStreetMap Contributors\nMap Rendering libraries Included;\n - MapLibre developed by MapLibre Organization\n - Vtm developed by Mapsforge\nStrike Maps made with &lt;3 by konggdev</string>
<string-array name="map_renderers">
<item>MapLibre Native</item>
<item>MapLibre GL JS</item>
<item>VTM</item>
</string-array>
</resources> </resources>