From f58cfdfabfe731c5b188beea48c767d409e26e28 Mon Sep 17 00:00:00 2001 From: konggdev Date: Mon, 14 Sep 2026 03:28:07 +0200 Subject: [PATCH] refactor: define screens inside activity --- .../strikemaps/activity/MainActivity.java | 56 ++++++++++++++++--- .../konggdev/strikemaps/ui/UIComponent.java | 49 ++++++---------- .../fragment/layout/FragmentLayoutSearch.java | 5 +- .../FragmentLayoutContentOfflineMaps.java | 9 ++- .../ui/screen/definition/DefinedScreen.java | 6 -- 5 files changed, 69 insertions(+), 56 deletions(-) delete mode 100644 app/src/main/java/eu/konggdev/strikemaps/ui/screen/definition/DefinedScreen.java diff --git a/app/src/main/java/eu/konggdev/strikemaps/activity/MainActivity.java b/app/src/main/java/eu/konggdev/strikemaps/activity/MainActivity.java index 8829e7c..d520dab 100755 --- a/app/src/main/java/eu/konggdev/strikemaps/activity/MainActivity.java +++ b/app/src/main/java/eu/konggdev/strikemaps/activity/MainActivity.java @@ -1,8 +1,8 @@ package eu.konggdev.strikemaps.activity; -import android.annotation.SuppressLint; import android.content.SharedPreferences; import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; import eu.konggdev.strikemaps.Component; import eu.konggdev.strikemaps.R; import eu.konggdev.strikemaps.app.ComponentHolderActivity; @@ -12,21 +12,60 @@ import android.os.Bundle; 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; - +import eu.konggdev.strikemaps.ui.element.region.UIRegion; +import eu.konggdev.strikemaps.ui.element.region.content.MainContentRegion; +import eu.konggdev.strikemaps.ui.fragment.layout.FragmentLayoutControls; +import eu.konggdev.strikemaps.ui.fragment.layout.FragmentLayoutSearch; +import eu.konggdev.strikemaps.ui.fragment.layout.content.main.FragmentLayoutContentOfflineMaps; +import eu.konggdev.strikemaps.ui.fragment.layout.content.main.FragmentLayoutContentSettings; +import eu.konggdev.strikemaps.ui.screen.Screen; import java.util.List; +import java.util.Map; public class MainActivity extends ComponentHolderActivity { private List components; private UIComponent ui; + private Map initScreens(UIComponent ui, MapComponent map, RegistryStorageComponent registry, SharedPreferences userPrefs) { + return Map.of( + //Main screen + "main", new Screen( + this, + //Main screen init regions definition + Map.of( + R.id.mainContentView, new MainContentRegion(map.toFragment(), R.id.mainContentView), + R.id.bottomUi, new UIRegion(new FragmentLayoutControls(this, ui, map, registry, userPrefs, R.id.bottomUi), R.id.bottomUi), + R.id.topUi, new UIRegion(new FragmentLayoutSearch(this, ui, R.id.topUi), R.id.topUi) + ) //TODO: Probably stop referencing layout 3(!) times everytime + ), + //Settings screen + "settings", new Screen( + this, + //Just the settings content fragment + Map.of( + R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentSettings(this, ui, userPrefs), R.id.mainContentView) + ) + ), + //Offline maps screen + "offline", new Screen( + this, + Map.of( + R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentOfflineMaps(this), R.id.mainContentView) + ) + ) + ); + } + + @NonNull private List initComponents() { SharedPreferences userPrefs = getSharedPreferences("user_prefs", MODE_PRIVATE); RegistryStorageComponent registry = new RegistryStorageComponent(this, userPrefs); - MapComponent mapComponent = new MapComponent(this, registry, userPrefs); - this.ui = new UIComponent(this, mapComponent, registry, userPrefs, DefinedScreen.MAIN); + MapComponent map = new MapComponent(this, registry, userPrefs); + UIComponent ui = new UIComponent(this, map, registry, userPrefs); + ui.defineScreens(initScreens(ui, map, registry, userPrefs)); + this.ui = ui; return List.of( - mapComponent, + map, ui, registry ); @@ -35,12 +74,13 @@ public class MainActivity extends ComponentHolderActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - components = initComponents(); + this.components = initComponents(); + ui.swapScreen("main"); setContentView(R.layout.view_main); getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - if (ui.back()) { + if (!ui.back()) { setEnabled(false); getOnBackPressedDispatcher().onBackPressed(); } diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java b/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java index 23cab8f..646f466 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java @@ -2,6 +2,7 @@ package eu.konggdev.strikemaps.ui; import android.app.AlertDialog; import android.content.SharedPreferences; +import android.util.Log; import android.view.View; import eu.konggdev.strikemaps.Component; import eu.konggdev.strikemaps.R; @@ -15,12 +16,13 @@ import eu.konggdev.strikemaps.ui.fragment.layout.FragmentLayoutSearch; import eu.konggdev.strikemaps.ui.fragment.layout.content.main.FragmentLayoutContentOfflineMaps; import eu.konggdev.strikemaps.ui.fragment.layout.content.main.FragmentLayoutContentSettings; import eu.konggdev.strikemaps.ui.screen.Screen; -import eu.konggdev.strikemaps.ui.screen.definition.DefinedScreen; import java.util.ArrayDeque; import java.util.Map; public class UIComponent implements Component { + private final String TAG = "UIComponent"; + private final ComponentHolderActivity activity; private final MapComponent map; @@ -30,47 +32,28 @@ public class UIComponent implements Component { private final ArrayDeque screenStack = new ArrayDeque<>(); - public UIComponent(ComponentHolderActivity activity, MapComponent map, RegistryStorageComponent registry, SharedPreferences userPrefs, DefinedScreen firstScreen) { + private Map screens; + + public UIComponent(ComponentHolderActivity activity, MapComponent map, RegistryStorageComponent registry, SharedPreferences userPrefs) { this.activity = activity; this.map = map; this.registry = registry; this.userPrefs = userPrefs; - swapScreen(firstScreen); } - public Map getScreens(MapComponent map) { - return Map.of( - //Main screen - DefinedScreen.MAIN, new Screen( - activity, - //Main screen init regions definition - Map.of( - R.id.mainContentView, new MainContentRegion(map.toFragment(), R.id.mainContentView), - R.id.bottomUi, new UIRegion(new FragmentLayoutControls(activity, this, map, registry, userPrefs, R.id.bottomUi), R.id.bottomUi), - R.id.topUi, new UIRegion(new FragmentLayoutSearch(activity, this, R.id.topUi), R.id.topUi) - ) //TODO: Probably stop referencing layout 3(!) times everytime - ), - //Settings screen - DefinedScreen.SETTINGS, new Screen( - activity, - //Just the settings content fragment - Map.of( - R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentSettings(activity, this, userPrefs), R.id.mainContentView) - ) - ), - //Offline maps screen - DefinedScreen.OFFLINE, new Screen( - activity, - Map.of( - R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentOfflineMaps(activity), R.id.mainContentView) - ) - ) - ); + public void defineScreens(Map screens) { + this.screens = screens; } - public void swapScreen(DefinedScreen screenKey) { + public void swapScreen(String screenKey) { + if (screens == null) return; + Screen newScreen = screens.get(screenKey); + if (newScreen == null) { + Log.e(TAG, "Invalid screen " + screenKey + " invoked"); + return; + } if (!screenStack.isEmpty()) getCurrentScreen().detachAll(); - screenStack.add(getScreens(map).get(screenKey)); + screenStack.add(newScreen); getCurrentScreen().attachAll(); } diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/FragmentLayoutSearch.java b/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/FragmentLayoutSearch.java index 39661ce..637b27b 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/FragmentLayoutSearch.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/FragmentLayoutSearch.java @@ -10,12 +10,9 @@ import android.widget.PopupWindow; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; - import eu.konggdev.strikemaps.R; -import eu.konggdev.strikemaps.app.ComponentHolderActivity; import eu.konggdev.strikemaps.ui.UIComponent; import eu.konggdev.strikemaps.ui.factory.AlertDialogFactory; -import eu.konggdev.strikemaps.ui.screen.definition.DefinedScreen; public class FragmentLayoutSearch extends Fragment implements Layout { private final AppCompatActivity activity; @@ -64,7 +61,7 @@ public class FragmentLayoutSearch extends Fragment implements Layout { setupButton(menuView, R.id.menuSettings, click(() -> { popupWindow.dismiss(); - ui.swapScreen(DefinedScreen.SETTINGS); + ui.swapScreen("settings"); })); menuView.findViewById(R.id.menuSearchSettings).setOnClickListener(v -> popupWindow.dismiss()); diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/content/main/FragmentLayoutContentOfflineMaps.java b/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/content/main/FragmentLayoutContentOfflineMaps.java index 49812f3..78753c7 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/content/main/FragmentLayoutContentOfflineMaps.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/fragment/layout/content/main/FragmentLayoutContentOfflineMaps.java @@ -8,12 +8,11 @@ import eu.konggdev.strikemaps.R; import eu.konggdev.strikemaps.app.ComponentHolderActivity; public class FragmentLayoutContentOfflineMaps extends Fragment implements MainContentLayout { - @NonNull - ComponentHolderActivity app; + private final ComponentHolderActivity activity; - public FragmentLayoutContentOfflineMaps(ComponentHolderActivity app) { + public FragmentLayoutContentOfflineMaps(ComponentHolderActivity activity) { super(R.layout.fragment_offline_maps); - this.app = app; + this.activity = activity; } @Override @@ -28,6 +27,6 @@ public class FragmentLayoutContentOfflineMaps extends Fragment implements MainCo // LinearLayout sourcesLayout = view.findViewById(R.id.llDownloadContainer); // for (MapSource source : sources) -// sourcesLayout.addView(new InlineItem(source.name, () -> Toast.makeText(app.getActivity(), "Work in progress", Toast.LENGTH_SHORT).show()).makeView(app.getUi())); +// sourcesLayout.addView(new InlineItem(source.name, () -> Toast.makeText(activity.getActivity(), "Work in progress", Toast.LENGTH_SHORT).show()).makeView(app.getUi())); } } \ No newline at end of file diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/screen/definition/DefinedScreen.java b/app/src/main/java/eu/konggdev/strikemaps/ui/screen/definition/DefinedScreen.java deleted file mode 100644 index 436fd04..0000000 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/screen/definition/DefinedScreen.java +++ /dev/null @@ -1,6 +0,0 @@ -package eu.konggdev.strikemaps.ui.screen.definition; -public enum DefinedScreen { - MAIN, - SETTINGS, - OFFLINE -} \ No newline at end of file