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 d061956..6febed0 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java +++ b/app/src/main/java/eu/konggdev/strikemaps/app/AppController.java @@ -34,9 +34,6 @@ public class AppController { } public AppCompatActivity getActivity() { return appActivity; } public void init() { - if (getActivity().getSupportActionBar() != null) - getActivity().getSupportActionBar().hide(); - 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/ui/UIComponent.java b/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java index ccaf9a0..95d0acc 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/UIComponent.java @@ -3,6 +3,7 @@ package eu.konggdev.strikemaps.ui; import android.app.AlertDialog; import android.view.View; import androidx.annotation.NonNull; +import androidx.appcompat.widget.Toolbar; import eu.konggdev.strikemaps.Component; import eu.konggdev.strikemaps.R; import eu.konggdev.strikemaps.app.AppController; @@ -41,7 +42,8 @@ public class UIComponent implements Component { 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.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 DefinedScreen.SETTINGS, new Screen( @@ -49,7 +51,8 @@ public class UIComponent implements Component { //Just the settings content fragment Map.of( R.id.mainContentView, new MainContentRegion(new FragmentLayoutContentSettings(), R.id.mainContentView) - ) + ), + new Toolbar(app.getActivity()) ) ); } diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/factory/AlertDialogFactory.java b/app/src/main/java/eu/konggdev/strikemaps/ui/factory/AlertDialogFactory.java index f0f0169..cf325e0 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/factory/AlertDialogFactory.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/factory/AlertDialogFactory.java @@ -38,4 +38,11 @@ public final class AlertDialogFactory { return dialog; } + + public static AlertDialog searchSettings(AppController app) { + return new AlertDialog.Builder(app.getActivity()) + .setTitle("Configure Search") + .setPositiveButton("OK", null) + .create(); + } } 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 4525e80..4b9225a 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 @@ -1,29 +1,24 @@ package eu.konggdev.strikemaps.ui.fragment.layout; -import android.Manifest; import android.app.AlertDialog; -import android.content.pm.PackageManager; import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import android.widget.TextView; -import android.widget.Toast; +import android.widget.PopupMenu; import eu.konggdev.strikemaps.R; import eu.konggdev.strikemaps.app.AppController; -import eu.konggdev.strikemaps.data.helper.UserPrefsHelper; -import eu.konggdev.strikemaps.map.overlay.implementation.LocationOverlay; -import eu.konggdev.strikemaps.ui.fragment.popup.FragmentMapChangePopup; +import eu.konggdev.strikemaps.ui.factory.AlertDialogFactory; import eu.konggdev.strikemaps.ui.screen.definition.DefinedScreen; public class FragmentLayoutSearch extends Fragment implements Layout { AppController app; - View rootView; - private final Integer region; public FragmentLayoutSearch(AppController app, Integer region) { @@ -45,7 +40,50 @@ public class FragmentLayoutSearch extends Fragment implements Layout { @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - //TODO: Make a floating menu instead of going right in settings - setupButton(view, R.id.hamburgerButton, click(() -> app.getUi().swapScreen(DefinedScreen.SETTINGS))); + + setupButton(view, R.id.hamburgerButton, click(() -> { + + View menuView = getLayoutInflater().inflate(R.layout.menu_dropdown, null); + + PopupWindow popupWindow = new PopupWindow( + menuView, + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + true + ); + + popupWindow.setOutsideTouchable(true); + popupWindow.setFocusable(true); + popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + setupButton(menuView, R.id.menuSearchSettings, click(() -> { + app.getUi().alert(AlertDialogFactory.searchSettings(app)); + })); + + setupButton(menuView, R.id.menuSettings, click(() -> { + popupWindow.dismiss(); + app.getUi().swapScreen(DefinedScreen.SETTINGS); + })); + + menuView.findViewById(R.id.menuSearchSettings).setOnClickListener(v -> popupWindow.dismiss()); + menuView.findViewById(R.id.menuAbout).setOnClickListener(v -> popupWindow.dismiss()); + + View anchor = view.findViewById(R.id.searchContainer); + + anchor.post(() -> { + + menuView.measure( + View.MeasureSpec.UNSPECIFIED, + View.MeasureSpec.UNSPECIFIED + ); + + int popupWidth = menuView.getMeasuredWidth(); + int containerWidth = anchor.getWidth(); + + int xOffset = containerWidth - popupWidth; + popupWindow.showAsDropDown(anchor, xOffset, 1); + }); + + })); } } diff --git a/app/src/main/java/eu/konggdev/strikemaps/ui/screen/Screen.java b/app/src/main/java/eu/konggdev/strikemaps/ui/screen/Screen.java index 5d58fce..3c6e37a 100644 --- a/app/src/main/java/eu/konggdev/strikemaps/ui/screen/Screen.java +++ b/app/src/main/java/eu/konggdev/strikemaps/ui/screen/Screen.java @@ -2,25 +2,24 @@ package eu.konggdev.strikemaps.ui.screen; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import androidx.appcompat.widget.Toolbar; import java.util.Map; import eu.konggdev.strikemaps.app.AppController; import eu.konggdev.strikemaps.ui.fragment.ContainerFragment; import eu.konggdev.strikemaps.ui.fragment.FragmentEmptyPlaceholder; -import eu.konggdev.strikemaps.ui.fragment.layout.content.main.MainContentLayout; import eu.konggdev.strikemaps.ui.fragment.popup.Popup; import eu.konggdev.strikemaps.ui.element.region.UIRegion; public class Screen { @NonNull AppController app; - public Screen(AppController app, Map regions) { + Toolbar supportBar; + public Screen(AppController app, Map regions, Toolbar supportBar) { this.app = app; this.uiRegions = regions; + this.supportBar = supportBar; } - - private MainContentLayout mainContent; - Map uiRegions; public Integer popup; diff --git a/app/src/main/res/drawable/ic_hamburger_menu.png b/app/src/main/res/drawable/ic_hamburger_menu.png index c6c049d..2ccf9ea 100644 Binary files a/app/src/main/res/drawable/ic_hamburger_menu.png and b/app/src/main/res/drawable/ic_hamburger_menu.png differ diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 7b22ac9..2651ed8 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -4,13 +4,13 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="24dp"> + android:padding="6dp"> - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_preview.xml b/app/src/main/res/layout/item_preview.xml index 225c5a6..9c09285 100644 --- a/app/src/main/res/layout/item_preview.xml +++ b/app/src/main/res/layout/item_preview.xml @@ -55,4 +55,5 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/choiceName" app:layout_constraintBottom_toBottomOf="parent"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/menu_dropdown.xml b/app/src/main/res/layout/menu_dropdown.xml new file mode 100644 index 0000000..fc522f3 --- /dev/null +++ b/app/src/main/res/layout/menu_dropdown.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 5bf9e18..d0c4d29 100755 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5a8832..e1c7da5 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ Strike Maps + Settings 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 <3 by konggdev \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2ff8ad6..889752f 100755 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,6 +1,6 @@ - + - \ No newline at end of file