diff --git a/OsmAnd/res/layout/main.xml b/OsmAnd/res/layout/main.xml index 49f257c745..965e97a634 100644 --- a/OsmAnd/res/layout/main.xml +++ b/OsmAnd/res/layout/main.xml @@ -48,6 +48,11 @@ + + diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index bf6ee212dc..3b8154e40a 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -11,6 +11,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -18,17 +20,6 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import androidx.activity.OnBackPressedCallback; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.core.content.ContextCompat; -import androidx.core.widget.TextViewCompat; -import androidx.fragment.app.FragmentManager; -import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.RecyclerView; - import com.google.android.material.snackbar.Snackbar; import net.osmand.AndroidUtils; @@ -94,6 +85,17 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import androidx.activity.OnBackPressedCallback; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.core.content.ContextCompat; +import androidx.core.widget.TextViewCompat; +import androidx.fragment.app.FragmentManager; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.RecyclerView; + import static net.osmand.IndexConstants.GPX_FILE_EXT; import static net.osmand.IndexConstants.GPX_INDEX_DIR; import static net.osmand.plus.measurementtool.MeasurementEditingContext.CalculationMode; @@ -126,6 +128,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route private RadioItem pointsBtn; private RadioItem graphBtn; private View mainView; + private View bottomMapControls; private ImageView upDownBtn; private ImageView undoBtn; private ImageView redoBtn; @@ -281,8 +284,9 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route mainView = view.findViewById(R.id.main_view); AndroidUtils.setBackground(mapActivity, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark); detailsMenu = new GraphDetailsMenu(); - cardsContainer = mainView.findViewById(R.id.cards_container); if (portrait) { + cardsContainer = mainView.findViewById(R.id.cards_container); + String pointsBtnTitle = getString(R.string.shared_string_gpx_points); pointsBtn = new RadioItem(pointsBtnTitle); pointsBtn.setOnClickListener(getInfoTypeBtnListener(InfoType.POINTS)); @@ -294,6 +298,15 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route LinearLayout infoButtonsContainer = mainView.findViewById(R.id.custom_radio_buttons); infoTypeBtn = new MultiStateToggleButton(app, infoButtonsContainer, nightMode); infoTypeBtn.setItems(pointsBtn, graphBtn); + } else { + cardsContainer = mapActivity.findViewById(R.id.left_side_menu); + bottomMapControls = mapActivity.findViewById(R.id.bottom_controls_container); + mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + updateCardContainerSize(); + } + }); } pointsCard = new PointsCard(mapActivity, this); graphsCard = new GraphsCard(mapActivity, detailsMenu, this); @@ -328,12 +341,10 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route upDownRow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - if (portrait) { - if (infoExpanded) { - collapseInfoView(); - } else if (setInfoType(InfoType.POINTS)) { - infoTypeBtn.setSelectedItem(pointsBtn); - } + if (infoExpanded) { + collapseInfoView(); + } else if (setInfoType(InfoType.POINTS) && portrait) { + infoTypeBtn.setSelectedItem(pointsBtn); } } }); @@ -608,14 +619,13 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route } private void expandInfoView() { - if (portrait) { - infoExpanded = true; - cardsContainer.setVisibility(View.VISIBLE); - setMapPosition(portrait - ? OsmandSettings.MIDDLE_TOP_CONSTANT - : OsmandSettings.LANDSCAPE_MIDDLE_RIGHT_CONSTANT); - updateUpDownBtn(); - } + infoExpanded = true; + shiftBottomMapControls(false); + cardsContainer.setVisibility(View.VISIBLE); + setMapPosition(portrait + ? OsmandSettings.MIDDLE_TOP_CONSTANT + : OsmandSettings.LANDSCAPE_MIDDLE_RIGHT_CONSTANT); + updateUpDownBtn(); } private void collapseInfoViewIfExpanded() { @@ -625,14 +635,16 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route } private void collapseInfoView() { + cardsContainer.setVisibility(View.GONE); if (portrait) { - infoExpanded = false; - currentInfoType = null; infoTypeBtn.setSelectedItem(null); - cardsContainer.setVisibility(View.GONE); - setDefaultMapPosition(); - updateUpDownBtn(); + } else { + shiftBottomMapControls(true); } + infoExpanded = false; + currentInfoType = null; + setDefaultMapPosition(); + updateUpDownBtn(); } private void collapseInfoIfNotEnoughPoints() { @@ -659,6 +671,22 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route } } + private void updateCardContainerSize() { + View measureModeControls = mainView.findViewById(R.id.measure_mode_controls); + int width = mainView.getWidth() - measureModeControls.getWidth(); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, -1); + int bottomMargin = measureModeControls.getHeight(); + bottomMargin = progressBarVisible ? bottomMargin + mainView.findViewById(R.id.snap_to_road_progress_bar).getHeight() : bottomMargin; + params.setMargins(0, 0, 0, bottomMargin); + cardsContainer.setLayoutParams(params); + } + + private void shiftBottomMapControls(boolean toInitialPosition) { + int leftMargin = toInitialPosition ? 0 : cardsContainer.getWidth(); + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) bottomMapControls.getLayoutParams(); + params.setMargins(leftMargin, 0, 0, 0); + } + public boolean isInEditMode() { return !isPlanRouteMode() && !editingCtx.isNewData() && !isDirectionMode() && !isFollowTrackMode(); } @@ -780,6 +808,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route progressBar.setMinimumHeight(0); progressBar.setProgress(0); progressBarVisible = true; + updateCardContainerSize(); } public boolean isProgressBarVisible() {