diff --git a/map-sample/app/build.gradle b/map-sample/app/build.gradle index d062799..7f05c48 100755 --- a/map-sample/app/build.gradle +++ b/map-sample/app/build.gradle @@ -21,12 +21,12 @@ apply plugin: 'org.jetbrains.kotlin.android' ext { androidxLifecycleVersion = "2.6.2" glideVersion = "4.13.2" - navSdkVersion = "6.3.0" + navSdkVersion = "7.0.0" } android { namespace 'com.example.mapdemo' - compileSdkVersion 34 + compileSdk 36 buildFeatures { buildConfig true @@ -34,11 +34,11 @@ android { defaultConfig { applicationId "com.example.mapdemo" - // Navigation SDK supports a minimum of SDK 23. - minSdkVersion 23 + // Navigation SDK supports a minimum of SDK 24. + minSdkVersion 24 // This example targets SDK 30 so that there's no need to explicitly include permissions // flows in the app. - targetSdkVersion 34 + targetSdkVersion 36 versionCode 1 versionName "1.0" // Set this to the languages you actually use, otherwise you'll include resource strings @@ -93,7 +93,7 @@ dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14' // And dependencies. - api "androidx.appcompat:appcompat:1.6.1" + api "androidx.appcompat:appcompat:1.7.1" api "androidx.cardview:cardview:1.0.0" api "androidx.constraintlayout:constraintlayout:2.1.4" api "androidx.customview:customview:1.1.0" @@ -110,7 +110,10 @@ dependencies { api "com.google.android.datatransport:transport-api:3.0.0" api "com.google.android.datatransport:transport-backend-cct:3.1.4" api "com.google.android.datatransport:transport-runtime:3.1.4" + api "com.google.auto.value:auto-value-annotations:1.6.2" + annotationProcessor "com.google.auto.value:auto-value:1.6.2" api 'com.google.errorprone:error_prone_annotations:2.11.0' + api 'com.google.guava:guava:31.0.1-android' api "joda-time:joda-time:2.10.14" api "com.google.android.material:material:1.12.0" api 'org.jetbrains.kotlin:kotlin-reflect:2.1.10' diff --git a/map-sample/app/src/main/java/com/example/mapdemo/BackgroundColorCustomizationDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/BackgroundColorCustomizationDemoActivity.java index b4ccb9f..966929c 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/BackgroundColorCustomizationDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/BackgroundColorCustomizationDemoActivity.java @@ -21,15 +21,17 @@ import android.widget.CompoundButton; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** - * This shows how to create a simple activity with a custom background color appiled to the map, and + * This shows how to create a simple activity with a custom background color applied to the map, and * add a marker on the map. */ public class BackgroundColorCustomizationDemoActivity extends AppCompatActivity @@ -50,6 +52,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { private void setupNavFragment() { setContentView(R.layout.background_color_customization_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); @@ -57,6 +60,7 @@ private void setupNavFragment() { private void setupMapFragment() { setContentView(R.layout.background_color_customization_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -82,4 +86,13 @@ public void onCheckedChanged(CompoundButton view, boolean isChecked) { map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/BasicMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/BasicMapDemoActivity.java index 5fd61fa..0b07b36 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/BasicMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/BasicMapDemoActivity.java @@ -18,12 +18,14 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to create a simple activity with a map and a marker on the map. */ public class BasicMapDemoActivity extends AppCompatActivity implements OnMapReadyCallback { @@ -36,11 +38,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.basic_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.basic_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -56,4 +60,13 @@ public void onMapReady(GoogleMap map) { map.setOnMapLoadedCallback( () -> map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"))); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/CameraClampingDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/CameraClampingDemoActivity.java index 8be90d4..e61c4a0 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/CameraClampingDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/CameraClampingDemoActivity.java @@ -22,6 +22,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnCameraMoveStartedListener; @@ -31,6 +32,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how the Developer can clamp the camera. */ public class CameraClampingDemoActivity extends AppCompatActivity @@ -73,12 +75,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.camera_clamping_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.camera_clamping_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -189,4 +193,13 @@ public void onMinMaxZoomClampReset(View view) { map.resetMinMaxZoomPreference(); toast("Min/Max zoom preferences reset."); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/CameraDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/CameraDemoActivity.java index b3193f7..3387ee4 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/CameraDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/CameraDemoActivity.java @@ -24,6 +24,7 @@ import android.widget.SeekBar; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; @@ -38,6 +39,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to change the camera position for the map. */ public class CameraDemoActivity extends AppCompatActivity @@ -85,12 +87,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.camera_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.camera_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -366,4 +370,13 @@ private void addCameraTargetToPath() { LatLng target = map.getCameraPosition().target; currPolylineOptions.add(target); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/CircleDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/CircleDemoActivity.java index e7bd64d..b577cf2 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/CircleDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/CircleDemoActivity.java @@ -26,6 +26,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnCircleClickListener; @@ -46,6 +47,7 @@ import com.google.android.gms.maps.model.Polyline; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -180,12 +182,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.circle_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.circle_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -333,4 +337,13 @@ private static List generateRandomStrokePattern() { return null; } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/DayNightCircleDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/DayNightCircleDemoActivity.java index 46fd94b..611caf0 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/DayNightCircleDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/DayNightCircleDemoActivity.java @@ -19,6 +19,7 @@ import android.os.Bundle; import android.os.Handler; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.example.mapdemo.OnMapAndViewReadyListener.OnGlobalLayoutAndMapReadyListener; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; @@ -26,6 +27,7 @@ import com.google.android.gms.maps.model.CircleOptions; import com.google.android.gms.maps.model.LatLng; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * A demo to show the effects of rapidly changing the center of a circle by simulating the day/night @@ -54,11 +56,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.day_night_circle_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.day_night_circle_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(mapFragment, this); @@ -97,4 +101,13 @@ public void run() { }; animationRunner.run(); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/EdgeToEdgeUtil.java b/map-sample/app/src/main/java/com/example/mapdemo/EdgeToEdgeUtil.java new file mode 100755 index 0000000..94c94b8 --- /dev/null +++ b/map-sample/app/src/main/java/com/example/mapdemo/EdgeToEdgeUtil.java @@ -0,0 +1,185 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.mapdemo; + +import android.view.View; +import android.view.ViewGroup.MarginLayoutParams; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; +import java.util.List; + +/** Utility to support Edge-To-Edge mode for devices running Android V+. */ +public final class EdgeToEdgeUtil { + + private EdgeToEdgeUtil() {} + + /** + * Edge-To-Edge mode is enabled by default on devices running Android V and above. As a result, + * margins should be set for devices targeting Android V and higher so that they are not hidden + * behind the system bars and remain accessible. + * + *

Note: The margins are applied when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be applied only for Android V+ devices. + * + * @param edgeToEdgeMarginConfig, the configuration that requires to set margins. + */ + public static void setMarginForEdgeToEdgeSupport(EdgeToEdgeMarginConfig edgeToEdgeMarginConfig) { + + applyMargins(ImmutableList.of(edgeToEdgeMarginConfig)); + } + + /** + * Edge-To-Edge mode is enabled by default on devices running Android V and above. As a result, + * margins should be set for devices targeting Android V and higher so that they are not hidden + * behind the system bars and remain accessible. + * + *

Note: The margins are applied when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be applied only for Android V+ devices. + * + * @param edgeToEdgeMarginConfigs, the list of configurations that requires to set margins. + */ + public static void setMarginForEdgeToEdgeSupport( + List edgeToEdgeMarginConfigs) { + + applyMargins(edgeToEdgeMarginConfigs); + } + + /** + * Applies margins for the provided configs. + * + *

A callback is provided to the window inset listener to adjust margins, ensuring that views + * are not obscured by the system bars. + * + *

Note: The callbacks are only invoked when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be invoked for Android V+ devices. + * + * @param edgeToEdgeMarginConfigs, the list of configurations that requires to set margins. + */ + private static void applyMargins(List edgeToEdgeMarginConfigs) { + for (EdgeToEdgeMarginConfig edgeToEdgeMarginConfig : edgeToEdgeMarginConfigs) { + ViewCompat.setOnApplyWindowInsetsListener( + edgeToEdgeMarginConfig.view(), + (v, windowInsets) -> { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + // Apply the insets as a margin to the view. + MarginLayoutParams mlp = (MarginLayoutParams) v.getLayoutParams(); + if (edgeToEdgeMarginConfig.shouldSetLeftMargin()) { + mlp.leftMargin = insets.left; + } + if (edgeToEdgeMarginConfig.shouldSetRightMargin()) { + mlp.rightMargin = insets.right; + } + if (edgeToEdgeMarginConfig.shouldSetTopMargin()) { + mlp.topMargin = insets.top; + } + if (edgeToEdgeMarginConfig.shouldSetBottomMargin()) { + mlp.bottomMargin = insets.bottom; + } + v.setLayoutParams(mlp); + + // Return the window insets to keep passing down to descendant views. + return windowInsets; + }); + } + } + + /** + * Configuration to set up margins for {@link View}s supporting Edge-To-Edge mode with Android V+. + */ + @AutoValue + public abstract static class EdgeToEdgeMarginConfig { + + /** Returns the {@link View} the margins need to be applied to. */ + public abstract View view(); + + /** Returns {@code true} if the top margin should be applied, {@code false} otherwise. */ + public abstract boolean shouldSetTopMargin(); + + /** Returns {@code true} if the bottom margin should be applied, {@code false} otherwise. */ + public abstract boolean shouldSetBottomMargin(); + + /** Returns {@code true} if the left margin should be applied, {@code false} otherwise. */ + public abstract boolean shouldSetLeftMargin(); + + /** Returns {@code true} if the right margin should be applied, {@code false} otherwise. */ + public abstract boolean shouldSetRightMargin(); + + /** + * Creates and returns {@link Builder} to create an instance of {@link EdgeToEdgeMarginConfig}. + * + *

Default {@code true} is set for property, to avoid supplying values while using the {@link + * Builder}. + */ + public static Builder builder() { + return new AutoValue_EdgeToEdgeUtil_EdgeToEdgeMarginConfig.Builder() + .setShouldSetTopMargin(true) + .setShouldSetBottomMargin(true) + .setShouldSetLeftMargin(true) + .setShouldSetRightMargin(true); + } + + /** Provides a generalized {@code Builder} to create the {@link EdgeToEdgeMarginConfig}. */ + @AutoValue.Builder + public abstract static class Builder { + + /** Sets the view to which the inset margins are applied. */ + public abstract Builder setView(View view); + + /** + * Indicates whether the top margin should be applied to the {@link View} passed to {@link + * #setView(View)}. + * + *

The default is {@code true}, inset changes will be applied by default for the top + * margin. + */ + public abstract Builder setShouldSetTopMargin(boolean shouldSetTopMargin); + + /** + * Indicates whether the bottom margin should be applied to the {@link View} passed to {@link + * #setView(View)}. + * + *

The default is {@code true}, inset changes will be applied by default for the bottom + * margin. + */ + public abstract Builder setShouldSetBottomMargin(boolean shouldSetBottomMargin); + + /** + * Indicates whether the left margin should be applied to the {@link View} passed to {@link + * #setView(View)}. + * + *

The default is {@code true}, inset changes will be applied by default for the left + * margin. + */ + public abstract Builder setShouldSetLeftMargin(boolean shouldSetLeftMargin); + + /** + * Indicates whether the right margin should be applied to the {@link View} passed to {@link + * #setView(View)}. + * + *

The default is {@code true}, inset changes will be applied by default for the right + * margin. + */ + public abstract Builder setShouldSetRightMargin(boolean shouldSetRightMargin); + + /** Creates and returns {@link EdgeToEdgeMarginConfig}. */ + public abstract EdgeToEdgeMarginConfig build(); + } + } +} diff --git a/map-sample/app/src/main/java/com/example/mapdemo/EventsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/EventsDemoActivity.java index a0dc5d7..c54644d 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/EventsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/EventsDemoActivity.java @@ -20,6 +20,7 @@ import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnCameraMoveStartedListener; import com.google.android.gms.maps.GoogleMap.OnMapClickListener; @@ -28,6 +29,7 @@ import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to listen to some map events. */ public class EventsDemoActivity extends AppCompatActivity @@ -48,12 +50,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.events_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.events_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -98,4 +102,13 @@ public void onCameraMoveStarted(int reason) { map.getCameraPosition().toString()); cameraTextView.setText(text); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/GroundOverlayDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/GroundOverlayDemoActivity.java index a3d27ef..6c5766e 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/GroundOverlayDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/GroundOverlayDemoActivity.java @@ -17,11 +17,12 @@ package com.example.mapdemo; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.CheckBox; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; +import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnGroundOverlayClickListener; @@ -33,6 +34,7 @@ import com.google.android.gms.maps.model.GroundOverlayOptions; import com.google.android.gms.maps.model.LatLng; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; @@ -73,12 +75,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.ground_overlay_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.ground_overlay_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -111,6 +115,15 @@ private void performAdditionalSetup() { transparencyBar.setProgress(0); // transparency = 0.0 } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + @Override public void onMapReady(GoogleMap map) { map.moveCamera(CameraUpdateFactory.newLatLngZoom(NEWARK, 11)); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoActivity.java index c684df4..5051993 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoActivity.java @@ -18,6 +18,8 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; +import com.google.common.collect.ImmutableList; /** Demo of indoor maps. */ public class IndoorDemoActivity extends AppCompatActivity { @@ -26,5 +28,11 @@ public class IndoorDemoActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.indoor_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoFragment.java b/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoFragment.java index b81586a..9240060 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoFragment.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/IndoorDemoFragment.java @@ -18,7 +18,6 @@ import android.content.Intent; import android.os.Bundle; -import androidx.fragment.app.Fragment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; @@ -32,6 +31,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnIndoorStateChangeListener; diff --git a/map-sample/app/src/main/java/com/example/mapdemo/IndoorMultiMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/IndoorMultiMapDemoActivity.java index 49231d8..277fb1a 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/IndoorMultiMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/IndoorMultiMapDemoActivity.java @@ -18,6 +18,8 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; +import com.google.common.collect.ImmutableList; /** Demo for indoor multimaps. */ public class IndoorMultiMapDemoActivity extends AppCompatActivity { @@ -26,5 +28,11 @@ public class IndoorMultiMapDemoActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.indoor_multimap_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/LayersDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/LayersDemoActivity.java index 0f32ee9..79bbde6 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/LayersDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/LayersDemoActivity.java @@ -21,11 +21,13 @@ import android.widget.CheckBox; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** Demonstrates the different base layers of a map. */ public class LayersDemoActivity extends AppCompatActivity implements OnMapReadyCallback { @@ -48,12 +50,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.layers_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(savedInstanceState); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.layers_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(savedInstanceState); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -141,4 +145,13 @@ private void updateBuildings() { } map.setBuildingsEnabled(buildingsCheckbox.isChecked()); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MainActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MainActivity.java index ff6391d..43cc158 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MainActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MainActivity.java @@ -22,7 +22,6 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -30,8 +29,11 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ToggleButton; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; +import com.google.common.collect.ImmutableList; /** * The main activity of the API library demo gallery. @@ -81,6 +83,13 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.main_layout)).build())); + ToggleButton shouldUseNavigationFlavorDemoToggleButton = (ToggleButton) findViewById(R.id.view_source_toggle_btn); ListAdapter adapter = new CustomArrayAdapter(this, DemoDetailsList.DEMOS); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MapInPagerDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MapInPagerDemoActivity.java index 547d724..24880a1 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MapInPagerDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MapInPagerDemoActivity.java @@ -25,8 +25,10 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * This shows how to add a map to a ViewPager. Note the use of {@link @@ -42,6 +44,13 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_in_pager_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + boolean useViewsFromNavigationSdk = getIntent() .getBooleanExtra( diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MapStylingDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MapStylingDemoActivity.java index 8a1a4e3..0d54e79 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MapStylingDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MapStylingDemoActivity.java @@ -21,6 +21,7 @@ import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; @@ -28,6 +29,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * This demo shows styling of a mode map, using a static JSON styling string. See use of {@link @@ -51,11 +53,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.map_styling_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.map_styling_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -137,4 +141,13 @@ private void handleStylingError(boolean success) { Toast.makeText(this, STYLING_FAILED_MESSAGE, Toast.LENGTH_SHORT).show(); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MarkerAnchorsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MarkerAnchorsDemoActivity.java index 6b0968e..b45191c 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MarkerAnchorsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MarkerAnchorsDemoActivity.java @@ -21,6 +21,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener; @@ -32,6 +33,7 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how marker and info window anchors work. */ public class MarkerAnchorsDemoActivity extends AppCompatActivity @@ -60,12 +62,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.marker_anchors_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.marker_anchors_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -153,6 +157,15 @@ private boolean checkReady() { return true; } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (!checkReady()) { diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MarkerCloseInfoWindowOnRetapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MarkerCloseInfoWindowOnRetapDemoActivity.java index a3759f0..7a96310 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MarkerCloseInfoWindowOnRetapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MarkerCloseInfoWindowOnRetapDemoActivity.java @@ -18,6 +18,7 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMapClickListener; @@ -28,6 +29,7 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to close the info window when the currently selected marker is retapped. */ public class MarkerCloseInfoWindowOnRetapDemoActivity extends AppCompatActivity @@ -53,11 +55,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.marker_close_info_window_on_retap_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.marker_close_info_window_on_retap_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(mapFragment, this); @@ -97,6 +101,15 @@ public void onMapReady(GoogleMap map) { this.map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50)); } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + private void addMarkersToMap() { map.addMarker( new MarkerOptions().position(BRISBANE).title("Brisbane").snippet("Population: 2,074,200")); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java index b311994..cbdbb15 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MarkerDemoActivity.java @@ -37,6 +37,7 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter; @@ -52,6 +53,7 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -211,12 +213,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.marker_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.marker_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -259,6 +263,15 @@ public void onCheckedChanged(RadioGroup group, int checkedId) { }); } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + @Override public void onMapReady(GoogleMap map) { this.map = map; diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MarkerZIndexDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MarkerZIndexDemoActivity.java index 6a2d034..a7f13b9 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MarkerZIndexDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MarkerZIndexDemoActivity.java @@ -18,6 +18,7 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnGroundOverlayClickListener; import com.google.android.gms.maps.OnMapReadyCallback; @@ -29,6 +30,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to create markes and set their z-index values. */ public class MarkerZIndexDemoActivity extends AppCompatActivity @@ -44,11 +46,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.basic_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.basic_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -100,4 +104,13 @@ public void onGroundOverlayClick(GroundOverlay groundOverlay) { // Toggle transparency value between 0.0f and 0.5f. Initial default value is 0.0f. groundOverlay.setTransparency(0.5f - groundOverlay.getTransparency()); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MultiMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MultiMapDemoActivity.java index ed67e49..4fcbc82 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MultiMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MultiMapDemoActivity.java @@ -18,9 +18,11 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to create a simple activity with multiple maps on screen. */ public class MultiMapDemoActivity extends AppCompatActivity { @@ -32,9 +34,11 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.multimap_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetupForNavFlavor(); } else { setContentView(R.layout.multimap_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetupForMapsFlavor(); } } @@ -86,4 +90,13 @@ private void performAdditionalSetupForMapsFlavor() { map.setMapStyle( new MapStyleOptions(getResources().getString(R.string.desaturated_style)))); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MultiMapWithNavDrawerDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MultiMapWithNavDrawerDemoActivity.java index fb957db..39d55d3 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MultiMapWithNavDrawerDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MultiMapWithNavDrawerDemoActivity.java @@ -19,8 +19,10 @@ import android.os.Bundle; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.MapView; import com.google.android.libraries.navigation.NavigationView; +import com.google.common.collect.ImmutableList; /** * This shows how to create multiple maps in an activity that has a Jetpack navigation drawer. This @@ -40,10 +42,12 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.multimap_with_nav_drawer_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); navigationView = (NavigationView) findViewById(R.id.mapview); navigationView.onCreate(savedInstanceState); } else { setContentView(R.layout.multimap_with_nav_drawer_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); mapView = (MapView) findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); } @@ -108,4 +112,13 @@ public void onSaveInstanceState(Bundle outState) { navigationView.onSaveInstanceState(outState); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.drawer_layout)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity.java index 9b09800..b26b5c7 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity.java @@ -27,6 +27,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener; import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener; @@ -38,6 +39,7 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * This demo shows how to use the My Location Layer to display the current location of the device. @@ -84,12 +86,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.my_location_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.my_location_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -154,6 +158,15 @@ private void updateMyLocation() { } } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + @SuppressWarnings("MissingPermission") // We retrieve location permissions earlier in the flow. private void enableMyLocation(boolean enable) { map.setMyLocationEnabled(enable); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/OnPoiClickDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/OnPoiClickDemoActivity.java index 1b1cdf9..cd13ed3 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/OnPoiClickDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/OnPoiClickDemoActivity.java @@ -17,8 +17,9 @@ package com.example.mapdemo; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; @@ -27,6 +28,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.PointOfInterest; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** Tests the OnPoiClick listener. */ public class OnPoiClickDemoActivity extends AppCompatActivity @@ -47,11 +49,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.basic_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.basic_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -72,4 +76,13 @@ public void onPoiClick(PointOfInterest poi) { Toast.LENGTH_SHORT) .show(); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/OptionsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/OptionsDemoActivity.java index f0b0182..7287e59 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/OptionsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/OptionsDemoActivity.java @@ -18,6 +18,8 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; +import com.google.common.collect.ImmutableList; /** An activity that creates a map with some initial options. */ public final class OptionsDemoActivity extends AppCompatActivity { @@ -33,5 +35,12 @@ protected void onCreate(Bundle savedInstanceState) { } else { setContentView(R.layout.options_demo_maps_flavor); } + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/PolygonDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/PolygonDemoActivity.java index 3d94939..e1f9671 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/PolygonDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/PolygonDemoActivity.java @@ -21,6 +21,7 @@ import android.widget.RadioGroup; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnPolygonClickListener; @@ -34,6 +35,7 @@ import com.google.android.gms.maps.model.Polygon; import com.google.android.gms.maps.model.PolygonOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.List; @@ -63,12 +65,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.polygon_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.polygon_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -234,4 +238,13 @@ private List createWorldWrappedRectangle() { new LatLng(55, 1), new LatLng(61, -60)); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/PolylineDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/PolylineDemoActivity.java index 37bad68..8741e39 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/PolylineDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/PolylineDemoActivity.java @@ -21,6 +21,7 @@ import android.widget.RadioGroup; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnPolylineClickListener; @@ -34,6 +35,7 @@ import com.google.android.gms.maps.model.Polyline; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -76,11 +78,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.polyline_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navigationFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navigationFragment.getMapAsync(this); } else { setContentView(R.layout.polyline_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -213,4 +217,13 @@ public void onPageScrollStateChanged(int state) { public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Don't do anything here. } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/ProgrammaticDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/ProgrammaticDemoActivity.java index 9ef6067..394cf82 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/ProgrammaticDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/ProgrammaticDemoActivity.java @@ -17,15 +17,17 @@ package com.example.mapdemo; import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; -import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * Demonstrates how to instantiate a SupportNavigationFragment programmatically and add a marker to @@ -49,20 +51,28 @@ protected void onCreate(Bundle savedInstanceState) { .getBooleanExtra( ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { + setContentView(R.layout.programmatic_demo); + // To programmatically add the map, we first create a SupportNavigationFragment. SupportNavigationFragment navFragment = new SupportNavigationFragment(); // Then we add it using a FragmentTransaction. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.add(android.R.id.content, navFragment, MAP_FRAGMENT_TAG); + fragmentTransaction.add(R.id.fragment_container, navFragment, MAP_FRAGMENT_TAG); fragmentTransaction.commit(); + + setMarginForEdgeToEdgeSupport(); navFragment.getMapAsync(this); } else { + setContentView(R.layout.programmatic_demo); + // To programmatically add the map, we first create a SupportMapFragment. SupportMapFragment mapFragment = new SupportMapFragment(); // Then we add it using a FragmentTransaction. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.add(android.R.id.content, mapFragment, MAP_FRAGMENT_TAG); + fragmentTransaction.add(R.id.fragment_container, mapFragment, MAP_FRAGMENT_TAG); fragmentTransaction.commit(); + + setMarginForEdgeToEdgeSupport(); mapFragment.getMapAsync(this); } } else if (fragment instanceof SupportMapFragment) { @@ -78,4 +88,15 @@ protected void onCreate(Bundle savedInstanceState) { public void onMapReady(GoogleMap map) { map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder() + .setView(findViewById(R.id.fragment_container)) + .build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/RawViewDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/RawViewDemoActivity.java index 9731f61..04ff327 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/RawViewDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/RawViewDemoActivity.java @@ -18,12 +18,14 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.NavigationView; +import com.google.common.collect.ImmutableList; /** * This shows how to create a simple activity with a raw MapView or NavView and add a marker to it. @@ -43,11 +45,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.raw_view_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); navigationView = (NavigationView) findViewById(R.id.map); navigationView.onCreate(savedInstanceState); navigationView.getMapAsync(this); } else { setContentView(R.layout.raw_view_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState); mapView.getMapAsync(this); @@ -118,4 +122,13 @@ public void onSaveInstanceState(Bundle outState) { navigationView.onSaveInstanceState(outState); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/RetainMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/RetainMapDemoActivity.java index daebf16..6fbefdc 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/RetainMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/RetainMapDemoActivity.java @@ -18,12 +18,14 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * This shows how to retain a map across activity restarts (e.g., from screen rotations), which can @@ -41,6 +43,7 @@ protected void onCreate(Bundle savedInstanceState) { // TODO: This behavior may not be supported presently. Legacy issue with NavigationView // results in a crash on rotation in this demo. setContentView(R.layout.basic_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); if (savedInstanceState == null) { @@ -50,6 +53,7 @@ protected void onCreate(Bundle savedInstanceState) { navFragment.getMapAsync(this); } else { setContentView(R.layout.basic_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); if (savedInstanceState == null) { @@ -64,4 +68,13 @@ protected void onCreate(Bundle savedInstanceState) { public void onMapReady(GoogleMap map) { map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/SaveStateDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/SaveStateDemoActivity.java index ba4e02c..eb5f1fd 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/SaveStateDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/SaveStateDemoActivity.java @@ -21,6 +21,7 @@ import android.os.Parcelable; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener; @@ -32,6 +33,7 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.Random; /** @@ -254,8 +256,19 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.save_state_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); } else { setContentView(R.layout.save_state_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/SnapshotDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/SnapshotDemoActivity.java index 25676f3..dee051a 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/SnapshotDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/SnapshotDemoActivity.java @@ -21,11 +21,13 @@ import android.widget.CheckBox; import android.widget.ImageView; import androidx.fragment.app.FragmentActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.SnapshotReadyCallback; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to take a snapshot of the map. */ public class SnapshotDemoActivity extends FragmentActivity implements OnMapReadyCallback { @@ -44,11 +46,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.snapshot_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.snapshot_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -88,6 +92,15 @@ private void takeSnapshot() { } } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + /** Called when the clear screenshot button is clicked. */ public void onClearScreenshot(View view) { ImageView snapshotHolder = (ImageView) findViewById(R.id.snapshot_holder); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/SplitStreetViewPanoramaAndMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/SplitStreetViewPanoramaAndMapDemoActivity.java index c213eb6..3b3a9fe 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/SplitStreetViewPanoramaAndMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/SplitStreetViewPanoramaAndMapDemoActivity.java @@ -18,6 +18,7 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.StreetViewPanorama; @@ -30,6 +31,7 @@ import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to create a simple activity with streetview and a map */ public class SplitStreetViewPanoramaAndMapDemoActivity extends AppCompatActivity @@ -69,13 +71,13 @@ protected void onCreate(final Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.split_street_view_panorama_and_map_demo_nav_flavor); - + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(callback); } else { setContentView(R.layout.split_street_view_panorama_and_map_demo_maps_flavor); - + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(callback); @@ -120,4 +122,13 @@ public void onMarkerDragEnd(Marker marker) { @Override public void onMarkerDrag(Marker marker) {} + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewLatLngAnywhereDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewLatLngAnywhereDemoActivity.java index ec07669..e552b46 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewLatLngAnywhereDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewLatLngAnywhereDemoActivity.java @@ -31,12 +31,14 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaChangeListener; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; import com.google.android.gms.maps.model.StreetViewSource; +import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.List; @@ -93,6 +95,13 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_latlng_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + EditText panoLatLngText = (EditText) findViewById(R.id.pano_latlng_text); panoLatLngText.setText(DEFAULT_TEXT_FIELD); panoLatLngText.setOnEditorActionListener(this); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewMultiplePanoramaDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewMultiplePanoramaDemoActivity.java index 10a9afe..d08cab7 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewMultiplePanoramaDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewMultiplePanoramaDemoActivity.java @@ -18,8 +18,10 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; +import com.google.common.collect.ImmutableList; /** Demo to show multiple StreetView panoramas in the same Activity. */ public class StreetViewMultiplePanoramaDemoActivity extends AppCompatActivity { @@ -34,6 +36,13 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_multiple_panorama_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.outer_container)).build())); + if (savedInstanceState == null) { setPanoLocation(R.id.panorama1, SYDNEY); setPanoLocation(R.id.panorama2, SAN_FRAN); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaAnywhereDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaAnywhereDemoActivity.java index c28de6c..0e62d99 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaAnywhereDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaAnywhereDemoActivity.java @@ -30,10 +30,12 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaChangeListener; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -109,6 +111,13 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_anywhere_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + EditText panoIdText = (EditText) findViewById(R.id.pano_id_text); panoIdText.setText(BEACH); panoIdText.setOnEditorActionListener(this); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaBasicDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaBasicDemoActivity.java index 20fd96c..6c278bc 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaBasicDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaBasicDemoActivity.java @@ -18,8 +18,10 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; +import com.google.common.collect.ImmutableList; /** This shows how to create a simple activity with streetview */ public class StreetViewPanoramaBasicDemoActivity extends AppCompatActivity { @@ -32,6 +34,13 @@ protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_panorama_basic_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager().findFragmentById(R.id.streetviewpanorama); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java index d8607a1..580aba4 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaCameraChangeListener; @@ -32,6 +33,7 @@ import com.google.android.gms.maps.model.StreetViewPanoramaCamera; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; import com.google.android.gms.maps.model.StreetViewPanoramaOrientation; +import com.google.common.collect.ImmutableList; /** This shows how to listen to some {@link StreetViewPanorama} events. */ public class StreetViewPanoramaEventsDemoActivity extends AppCompatActivity @@ -61,6 +63,14 @@ public class StreetViewPanoramaEventsDemoActivity extends AppCompatActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_panorama_events_demo); + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + createdWithNullBundle = (savedInstanceState == null); panoChangeTimesTextView = (TextView) findViewById(R.id.change_pano); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaNavigationDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaNavigationDemoActivity.java index 039192c..afc7450 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaNavigationDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaNavigationDemoActivity.java @@ -21,6 +21,7 @@ import android.widget.SeekBar; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; @@ -28,6 +29,7 @@ import com.google.android.gms.maps.model.StreetViewPanoramaLink; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; import com.google.android.gms.maps.model.StreetViewSource; +import com.google.common.collect.ImmutableList; /** * This shows how to create an activity with access to all the options in Panorama which can be @@ -58,6 +60,13 @@ protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_panorama_navigation_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager().findFragmentById(R.id.streetviewpanorama); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaOptionsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaOptionsDemoActivity.java index 257526b..3875aee 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaOptionsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaOptionsDemoActivity.java @@ -21,9 +21,11 @@ import android.widget.CheckBox; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.SupportStreetViewPanoramaFragment; import com.google.android.gms.maps.model.LatLng; +import com.google.common.collect.ImmutableList; /** * This shows how to create an activity with static streetview (all options have been switched off) @@ -45,6 +47,13 @@ protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_panorama_options_demo); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + streetNameCheckbox = (CheckBox) findViewById(R.id.streetnames); navigationCheckbox = (CheckBox) findViewById(R.id.navigation); zoomCheckbox = (CheckBox) findViewById(R.id.zoom); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaViewDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaViewDemoActivity.java index 035d2ea..6748c41 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaViewDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/StreetViewPanoramaViewDemoActivity.java @@ -19,9 +19,11 @@ import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.StreetViewPanoramaOptions; import com.google.android.gms.maps.StreetViewPanoramaView; import com.google.android.gms.maps.model.LatLng; +import com.google.common.collect.ImmutableList; /** This shows how to create a simple activity with streetview */ public class StreetViewPanoramaViewDemoActivity extends AppCompatActivity { @@ -45,6 +47,12 @@ protected void onCreate(Bundle savedInstanceState) { streetViewPanoramaView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default forAndroid + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of(EdgeToEdgeMarginConfig.builder().setView(streetViewPanoramaView).build())); + streetViewPanoramaView.onCreate(savedInstanceState); } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/TagsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/TagsDemoActivity.java index 531f59c..e32876f 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/TagsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/TagsDemoActivity.java @@ -20,6 +20,7 @@ import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnCircleClickListener; @@ -43,6 +44,7 @@ import com.google.android.gms.maps.model.Polyline; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to use setTag/getTag on API objects. */ public class TagsDemoActivity extends AppCompatActivity @@ -96,12 +98,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.tags_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); tagText = (TextView) findViewById(R.id.tag_text); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.tags_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); tagText = (TextView) findViewById(R.id.tag_text); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -236,4 +240,13 @@ public void onPolygonClick(Polygon polygon) { public void onPolylineClick(Polyline polyline) { onClick((CustomTag) polyline.getTag()); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/TileCoordinateDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/TileCoordinateDemoActivity.java index b1b4035..7af41de 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/TileCoordinateDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/TileCoordinateDemoActivity.java @@ -20,6 +20,7 @@ import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; @@ -27,6 +28,7 @@ import com.google.android.gms.maps.model.TileOverlayOptions; import com.google.android.gms.maps.model.TileProvider; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This demonstrates tile overlay coordinates. */ public class TileCoordinateDemoActivity extends AppCompatActivity @@ -45,12 +47,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.tile_coordinate_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.tile_coordinate_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -64,6 +68,15 @@ private void performAdditionalSetup() { transparencyBar.setProgress(0); } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } + @Override public void onMapReady(GoogleMap map) { TileProvider coordTileProvider = diff --git a/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayDemoActivity.java index cbb1447..11814a8 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayDemoActivity.java @@ -22,12 +22,14 @@ import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.TileOverlay; import com.google.android.gms.maps.model.TileOverlayOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This demonstrates how to add a tile overlay to a map. */ public class TileOverlayDemoActivity extends AppCompatActivity @@ -47,12 +49,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.tile_overlay_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.tile_overlay_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -66,6 +70,15 @@ private void performAdditionalSetup() { transparencyBar.setProgress(0); } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } + @Override public void onMapReady(GoogleMap map) { map.setMapType(GoogleMap.MAP_TYPE_NONE); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayOnStyledMapDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayOnStyledMapDemoActivity.java index 30235cf..5a8d3e9 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayOnStyledMapDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/TileOverlayOnStyledMapDemoActivity.java @@ -22,6 +22,7 @@ import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; @@ -29,6 +30,7 @@ import com.google.android.gms.maps.model.TileOverlay; import com.google.android.gms.maps.model.TileOverlayOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This demonstrates how to add a tile overlay to a map. */ public class TileOverlayOnStyledMapDemoActivity extends AppCompatActivity @@ -48,12 +50,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.tile_overlay_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.tile_overlay_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -101,4 +105,13 @@ public void clearCache(View view) { moonTiles.clearTileCache(); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/ToolbarDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/ToolbarDemoActivity.java index 7a3a5ce..0c5709f 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/ToolbarDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/ToolbarDemoActivity.java @@ -21,6 +21,7 @@ import android.view.View; import android.widget.CheckBox; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; @@ -34,6 +35,7 @@ import com.google.android.gms.maps.model.PolygonOptions; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how to control the Map Toolbar. */ public class ToolbarDemoActivity extends AppCompatActivity @@ -62,12 +64,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.toolbar_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); OnMapAndViewReadyListener unused = new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.toolbar_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -191,4 +195,13 @@ public void addTenMarkers(View v /* unused */) { 135 - 10 * Math.cos(i * Math.PI / (numMarkers - 1)))); } } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/TopStylesDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/TopStylesDemoActivity.java index e1cb414..9383908 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/TopStylesDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/TopStylesDemoActivity.java @@ -25,11 +25,13 @@ import android.widget.Spinner; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; import java.util.Locale; /** Demonstrates top custom styles from Snazzy Maps on a map. */ @@ -57,12 +59,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.top_styles_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.top_styles_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -151,6 +155,15 @@ private void updateBuildings() { map.setBuildingsEnabled(buildingsCheckbox.isChecked()); } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } + @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { String selectedItem = (String) spinner.getSelectedItem(); diff --git a/map-sample/app/src/main/java/com/example/mapdemo/UiSettingsDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/UiSettingsDemoActivity.java index 2004e80..69d8711 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/UiSettingsDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/UiSettingsDemoActivity.java @@ -25,6 +25,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; @@ -32,6 +33,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how UI settings can be toggled. */ public class UiSettingsDemoActivity extends AppCompatActivity implements OnMapReadyCallback { @@ -60,11 +62,13 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.ui_settings_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); navFragment.getMapAsync(this); } else { setContentView(R.layout.ui_settings_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @@ -252,4 +256,13 @@ private void updateMapLocationFeatures() { map.setMyLocationEnabled(myLocationLayerCheckbox.isChecked()); uiSettings.setMyLocationButtonEnabled(myLocationButtonCheckbox.isChecked()); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.map_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/VisibleRegionDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/VisibleRegionDemoActivity.java index d9b4e0e..1205a10 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/VisibleRegionDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/VisibleRegionDemoActivity.java @@ -26,6 +26,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnCameraMoveStartedListener; @@ -34,6 +35,7 @@ import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** * This shows how to use setPadding to allow overlays that obscure part of the map without obscuring @@ -66,6 +68,7 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.visible_region_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); messageView = (TextView) findViewById(R.id.message_text); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -75,6 +78,7 @@ protected void onCreate(Bundle savedInstanceState) { new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.visible_region_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); messageView = (TextView) findViewById(R.id.message_text); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -199,4 +203,13 @@ public void run() { } }); } + + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } } diff --git a/map-sample/app/src/main/java/com/example/mapdemo/ZIndexDemoActivity.java b/map-sample/app/src/main/java/com/example/mapdemo/ZIndexDemoActivity.java index 716c643..6f56783 100644 --- a/map-sample/app/src/main/java/com/example/mapdemo/ZIndexDemoActivity.java +++ b/map-sample/app/src/main/java/com/example/mapdemo/ZIndexDemoActivity.java @@ -29,6 +29,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.example.mapdemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig; import com.example.mapdemo.OnMapAndViewReadyListener.OnGlobalLayoutAndMapReadyListener; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; @@ -56,6 +57,7 @@ import com.google.android.gms.maps.model.TileOverlay; import com.google.android.gms.maps.model.TileOverlayOptions; import com.google.android.libraries.navigation.SupportNavigationFragment; +import com.google.common.collect.ImmutableList; /** This shows how different z-indices are shown on the map and how click handling is handled. */ public class ZIndexDemoActivity extends AppCompatActivity @@ -116,12 +118,14 @@ protected void onCreate(Bundle savedInstanceState) { ActivityIntents.EXTRA_SHOULD_USE_NAVIGATION_FLAVOR_FOR_DEMO, /* defaultValue= */ false)) { setContentView(R.layout.z_index_demo_nav_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportNavigationFragment navFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.map); new OnMapAndViewReadyListener(navFragment, this); } else { setContentView(R.layout.z_index_demo_maps_flavor); + setMarginForEdgeToEdgeSupport(); performAdditionalSetup(); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); @@ -308,6 +312,15 @@ private boolean checkReady() { return true; } + private void setMarginForEdgeToEdgeSupport() { + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + ImmutableList.of( + EdgeToEdgeMarginConfig.builder().setView(findViewById(R.id.layout_container)).build())); + } + public void onVisibilityCheckboxClicked(View view) { if (!checkReady()) { return; diff --git a/map-sample/app/src/main/res/layout-land/marker_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout-land/marker_demo_nav_flavor.xml index 0862601..518fd44 100644 --- a/map-sample/app/src/main/res/layout-land/marker_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout-land/marker_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/background_color_customization_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/background_color_customization_demo_maps_flavor.xml index d6a0eaf..4fdade7 100644 --- a/map-sample/app/src/main/res/layout/background_color_customization_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/background_color_customization_demo_maps_flavor.xml @@ -17,6 +17,7 @@ - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/basic_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/basic_demo_nav_flavor.xml index 07c7db5..cabf244 100644 --- a/map-sample/app/src/main/res/layout/basic_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/basic_demo_nav_flavor.xml @@ -16,8 +16,13 @@ --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/camera_clamping_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/camera_clamping_demo_maps_flavor.xml index 5b6e1db..aa724bc 100644 --- a/map-sample/app/src/main/res/layout/camera_clamping_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/camera_clamping_demo_maps_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/camera_clamping_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/camera_clamping_demo_nav_flavor.xml index f1fd0ea..797ca99 100644 --- a/map-sample/app/src/main/res/layout/camera_clamping_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/camera_clamping_demo_nav_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/camera_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/camera_demo_maps_flavor.xml index e732dea..9ff8283 100644 --- a/map-sample/app/src/main/res/layout/camera_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/camera_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/camera_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/camera_demo_nav_flavor.xml index 53cca8f..78bcfd5 100644 --- a/map-sample/app/src/main/res/layout/camera_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/camera_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/circle_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/circle_demo_maps_flavor.xml index 5c679a5..2ef16e7 100644 --- a/map-sample/app/src/main/res/layout/circle_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/circle_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/circle_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/circle_demo_nav_flavor.xml index 45f7f87..921c949 100644 --- a/map-sample/app/src/main/res/layout/circle_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/circle_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/day_night_circle_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/day_night_circle_demo_maps_flavor.xml index ceef5cc..2195982 100644 --- a/map-sample/app/src/main/res/layout/day_night_circle_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/day_night_circle_demo_maps_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/ground_overlay_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/ground_overlay_demo_nav_flavor.xml index e946b84..7f1c158 100644 --- a/map-sample/app/src/main/res/layout/ground_overlay_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/ground_overlay_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/indoor_demo.xml b/map-sample/app/src/main/res/layout/indoor_demo.xml index b25dfe9..ec2d6df 100644 --- a/map-sample/app/src/main/res/layout/indoor_demo.xml +++ b/map-sample/app/src/main/res/layout/indoor_demo.xml @@ -15,8 +15,13 @@ limitations under the License. --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/indoor_multimap_demo.xml b/map-sample/app/src/main/res/layout/indoor_multimap_demo.xml index bc65c23..bec2455 100644 --- a/map-sample/app/src/main/res/layout/indoor_multimap_demo.xml +++ b/map-sample/app/src/main/res/layout/indoor_multimap_demo.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/map_in_pager_demo.xml b/map-sample/app/src/main/res/layout/map_in_pager_demo.xml index 3182d81..aecc346 100644 --- a/map-sample/app/src/main/res/layout/map_in_pager_demo.xml +++ b/map-sample/app/src/main/res/layout/map_in_pager_demo.xml @@ -15,8 +15,13 @@ limitations under the License. --> - - + + + \ No newline at end of file diff --git a/map-sample/app/src/main/res/layout/map_styling_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/map_styling_demo_maps_flavor.xml index f5fc7d6..3219089 100644 --- a/map-sample/app/src/main/res/layout/map_styling_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/map_styling_demo_maps_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/map_styling_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/map_styling_demo_nav_flavor.xml index 2231c23..0836abb 100644 --- a/map-sample/app/src/main/res/layout/map_styling_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/map_styling_demo_nav_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/marker_anchors_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/marker_anchors_demo_maps_flavor.xml index 947d069..7e202c3 100644 --- a/map-sample/app/src/main/res/layout/marker_anchors_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_anchors_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/marker_anchors_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/marker_anchors_demo_nav_flavor.xml index 3b63670..a4d13e6 100644 --- a/map-sample/app/src/main/res/layout/marker_anchors_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_anchors_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_maps_flavor.xml index 5fb3eb6..c406633 100644 --- a/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_nav_flavor.xml index e90a030..4d77fba 100644 --- a/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_close_info_window_on_retap_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/marker_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/marker_demo_maps_flavor.xml index 8710be7..9d18f30 100644 --- a/map-sample/app/src/main/res/layout/marker_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/marker_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/marker_demo_nav_flavor.xml index df09f11..8d1c159 100644 --- a/map-sample/app/src/main/res/layout/marker_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/marker_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/my_location_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/my_location_demo_maps_flavor.xml index 73df11a..092e9c8 100644 --- a/map-sample/app/src/main/res/layout/my_location_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/my_location_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/options_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/options_demo_nav_flavor.xml index ea7e9c6..448d7df 100644 --- a/map-sample/app/src/main/res/layout/options_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/options_demo_nav_flavor.xml @@ -15,22 +15,27 @@ limitations under the License. --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/polygon_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/polygon_demo_maps_flavor.xml index 6c7cc23..280172d 100644 --- a/map-sample/app/src/main/res/layout/polygon_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/polygon_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> + + + + diff --git a/map-sample/app/src/main/res/layout/raw_view_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/raw_view_demo_maps_flavor.xml index d4ec81f..9ea71d5 100644 --- a/map-sample/app/src/main/res/layout/raw_view_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/raw_view_demo_maps_flavor.xml @@ -16,7 +16,12 @@ --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/raw_view_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/raw_view_demo_nav_flavor.xml index 3455133..9c3f961 100644 --- a/map-sample/app/src/main/res/layout/raw_view_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/raw_view_demo_nav_flavor.xml @@ -16,7 +16,12 @@ --> - + android:layout_height="match_parent"> + + diff --git a/map-sample/app/src/main/res/layout/save_state_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/save_state_demo_maps_flavor.xml index d77b41a..5cca186 100644 --- a/map-sample/app/src/main/res/layout/save_state_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/save_state_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/save_state_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/save_state_demo_nav_flavor.xml index 75e12a3..65eaa43 100644 --- a/map-sample/app/src/main/res/layout/save_state_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/save_state_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/snapshot_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/snapshot_demo_maps_flavor.xml index fa1202b..bfca57e 100644 --- a/map-sample/app/src/main/res/layout/snapshot_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/snapshot_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/snapshot_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/snapshot_demo_nav_flavor.xml index fb33a56..06cfb8b 100644 --- a/map-sample/app/src/main/res/layout/snapshot_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/snapshot_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/street_view_anywhere_demo.xml b/map-sample/app/src/main/res/layout/street_view_anywhere_demo.xml index a0d9673..54ad0dc 100644 --- a/map-sample/app/src/main/res/layout/street_view_anywhere_demo.xml +++ b/map-sample/app/src/main/res/layout/street_view_anywhere_demo.xml @@ -15,6 +15,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/street_view_latlng_demo.xml b/map-sample/app/src/main/res/layout/street_view_latlng_demo.xml index db9561a..089d5f4 100644 --- a/map-sample/app/src/main/res/layout/street_view_latlng_demo.xml +++ b/map-sample/app/src/main/res/layout/street_view_latlng_demo.xml @@ -15,6 +15,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/street_view_panorama_basic_demo.xml b/map-sample/app/src/main/res/layout/street_view_panorama_basic_demo.xml index 8f81a30..80a83e9 100644 --- a/map-sample/app/src/main/res/layout/street_view_panorama_basic_demo.xml +++ b/map-sample/app/src/main/res/layout/street_view_panorama_basic_demo.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/street_view_panorama_options_demo.xml b/map-sample/app/src/main/res/layout/street_view_panorama_options_demo.xml index 5d34b9c..2883794 100644 --- a/map-sample/app/src/main/res/layout/street_view_panorama_options_demo.xml +++ b/map-sample/app/src/main/res/layout/street_view_panorama_options_demo.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/tags_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/tags_demo_nav_flavor.xml index a48a7ef..6d8952b 100644 --- a/map-sample/app/src/main/res/layout/tags_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/tags_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/toolbar_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/toolbar_demo_maps_flavor.xml index 95409a9..37fa725 100644 --- a/map-sample/app/src/main/res/layout/toolbar_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/toolbar_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/toolbar_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/toolbar_demo_nav_flavor.xml index 71f85fb..195955e 100644 --- a/map-sample/app/src/main/res/layout/toolbar_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/toolbar_demo_nav_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/top_styles_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/top_styles_demo_maps_flavor.xml index b6a7e72..fadbbad 100644 --- a/map-sample/app/src/main/res/layout/top_styles_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/top_styles_demo_maps_flavor.xml @@ -16,6 +16,7 @@ --> diff --git a/map-sample/app/src/main/res/layout/visible_region_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/visible_region_demo_nav_flavor.xml index 1edbfd1..07f72a4 100644 --- a/map-sample/app/src/main/res/layout/visible_region_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/visible_region_demo_nav_flavor.xml @@ -18,6 +18,7 @@ diff --git a/map-sample/app/src/main/res/layout/z_index_demo_maps_flavor.xml b/map-sample/app/src/main/res/layout/z_index_demo_maps_flavor.xml index dedd06b..465bd2b 100644 --- a/map-sample/app/src/main/res/layout/z_index_demo_maps_flavor.xml +++ b/map-sample/app/src/main/res/layout/z_index_demo_maps_flavor.xml @@ -17,6 +17,7 @@ diff --git a/map-sample/app/src/main/res/layout/z_index_demo_nav_flavor.xml b/map-sample/app/src/main/res/layout/z_index_demo_nav_flavor.xml index 97e8b7d..386b254 100644 --- a/map-sample/app/src/main/res/layout/z_index_demo_nav_flavor.xml +++ b/map-sample/app/src/main/res/layout/z_index_demo_nav_flavor.xml @@ -17,6 +17,7 @@ diff --git a/navigation-sample/app/build.gradle b/navigation-sample/app/build.gradle old mode 100755 new mode 100644 index 5453e9a..b017abb --- a/navigation-sample/app/build.gradle +++ b/navigation-sample/app/build.gradle @@ -21,12 +21,12 @@ apply plugin: 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' ext { androidxLifecycleVersion = "2.6.2" glideVersion = "4.13.2" - navSdkVersion = "6.3.0" + navSdkVersion = "7.0.0" } android { namespace 'com.example.navigationapidemo' - compileSdkVersion 34 + compileSdk 36 buildFeatures { buildConfig true @@ -34,9 +34,9 @@ android { defaultConfig { applicationId "com.example.navigationapidemo" - // Navigation SDK supports a minimum of SDK 23. - minSdkVersion 23 - targetSdkVersion 34 + // Navigation SDK supports a minimum of SDK 24. + minSdkVersion 24 + targetSdkVersion 36 versionCode 1 versionName "1.0" // Set this to the languages you actually use, otherwise you'll include resource strings @@ -93,7 +93,7 @@ dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14' // And dependencies. - api "androidx.appcompat:appcompat:1.6.1" + api "androidx.appcompat:appcompat:1.7.1" api "androidx.cardview:cardview:1.0.0" api "androidx.constraintlayout:constraintlayout:2.1.4" api "androidx.customview:customview:1.1.0" @@ -114,7 +114,7 @@ dependencies { api "joda-time:joda-time:2.10.14" // Also include the Google Places SDK, which is used by this example, but // isn't required by the Navigation SDK. - api "com.google.android.libraries.places:places:2.5.0" + api "com.google.android.libraries.places:places:4.0.0" api "com.google.android.material:material:1.12.0" api 'org.jetbrains.kotlin:kotlin-reflect:2.1.10' api 'org.jetbrains.kotlin:kotlin-stdlib:2.1.10' diff --git a/navigation-sample/app/src/main/AndroidManifest.xml b/navigation-sample/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/CustomizationPanelsDelegate.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/CustomizationPanelsDelegate.kt old mode 100755 new mode 100644 index 5e3427e..544a3e1 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/CustomizationPanelsDelegate.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/CustomizationPanelsDelegate.kt @@ -273,15 +273,16 @@ internal object CustomizationPanelsDelegate { } fun Navigator.logDebugInfo() { - if (currentRouteSegment != null) { - val stringifiedCurrentRouteSegment = + currentRouteSegment?.let { + Log.i( + TAG, MoreObjects.toStringHelper("RouteSegment") - .add("Destination LatLng", currentRouteSegment.destinationLatLng) - .add("Destination Waypoint", currentRouteSegment.destinationWaypoint) - .add("Traffic Data", currentRouteSegment.trafficData) - .add("List for segment", currentRouteSegment.latLngs) - .toString() - Log.i(TAG, stringifiedCurrentRouteSegment) + .add("Destination LatLng", it.destinationLatLng) + .add("Destination Waypoint", it.destinationWaypoint) + .add("Traffic Data", it.trafficData) + .add("List for segment", it.latLngs) + .toString(), + ) } val stringifiedTraveledRoute = @@ -290,14 +291,15 @@ internal object CustomizationPanelsDelegate { .toString() Log.i(TAG, stringifiedTraveledRoute) - if (currentTimeAndDistance != null) { - val stringifiedCurrentTimeAndDistance = - MoreObjects.toStringHelper(currentTimeAndDistance) - .add("Delay severity", currentTimeAndDistance.delaySeverity) - .add("Meters", currentTimeAndDistance.meters) - .add("Seconds", currentTimeAndDistance.seconds) - .toString() - Log.i(TAG, stringifiedCurrentTimeAndDistance) + currentTimeAndDistance?.let { + Log.i( + TAG, + MoreObjects.toStringHelper(it) + .add("Delay severity", it.delaySeverity) + .add("Meters", it.meters) + .add("Seconds", it.seconds) + .toString(), + ) } } diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/EdgeToEdgeUtil.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/EdgeToEdgeUtil.kt new file mode 100755 index 0000000..16cfbc7 --- /dev/null +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/EdgeToEdgeUtil.kt @@ -0,0 +1,116 @@ + +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.navigationapidemo + +import android.view.View +import android.view.ViewGroup.MarginLayoutParams +import androidx.core.graphics.Insets +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.google.auto.value.AutoValue + +/** Utility to support Edge-To-Edge mode for devices running Android V+. */ +object EdgeToEdgeUtil { + /** + * Configuration to set up margins for {@link View}s supporting Edge-To-Edge mode with Android V+. + */ + data class EdgeToEdgeMarginConfig( + /** The {@link View} the margins need to be applied to. */ + val view: View, + + /** If the top margin should be applied, {@code false} otherwise. */ + val shouldSetTopMargin: Boolean = true, + + /** If the bottom margin should be applied, {@code false} otherwise. */ + val shouldSetBottomMargin: Boolean = true, + + /** If the left margin should be applied, {@code false} otherwise. */ + val shouldSetLeftMargin: Boolean = true, + + /** If the right margin should be applied, {@code false} otherwise. */ + val shouldSetRightMargin: Boolean = true, + ) + + /** + * Edge-To-Edge mode is enabled by default on devices running Android V and above. As a result, + * margins should be set for devices targeting Android V and higher so that they are not hidden + * behind the system bars and remain accessible. + * + *

Note: The margins are applied when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be applied only for Android V+ devices. + * + * @param edgeToEdgeMarginConfig, the configuration that requires to set margins. + */ + fun setMarginForEdgeToEdgeSupport(edgeToEdgeMarginConfig: EdgeToEdgeMarginConfig): Unit { + applyMargins(listOf(edgeToEdgeMarginConfig)) + } + + /** + * Edge-To-Edge mode is enabled by default on devices running Android V and above. As a result, + * margins should be set for devices targeting Android V and higher so that they are not hidden + * behind the system bars and remain accessible. + * + *

Note: The margins are applied when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be applied only for Android V+ devices. + * + * @param edgeToEdgeMarginConfigs, the list of configurations that requires to set margins. + */ + fun setMarginForEdgeToEdgeSupport(edgeToEdgeMarginConfigs: List): Unit { + applyMargins(edgeToEdgeMarginConfigs) + } + + /** + * Applies margins for the provided configs. + * + *

A callback is provided to the window inset listener to adjust margins, ensuring that views + * are not obscured by the system bars. + * + *

Note: The callbacks are only invoked when the edge-to-edge is enabled and because we are not + * manually enabling it, they'll be invoked for Android V+ devices. + * + * @param edgeToEdgeMarginConfigs, the list of configurations that requires to set margins. + */ + fun applyMargins(edgeToEdgeMarginConfigs: List): Unit { + for (edgeToEdgeMarginConfig in edgeToEdgeMarginConfigs) { + ViewCompat.setOnApplyWindowInsetsListener( + edgeToEdgeMarginConfig.view, + { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + // Apply the insets as a margin to the view. + val mlp = v.layoutParams as MarginLayoutParams + if (edgeToEdgeMarginConfig.shouldSetLeftMargin) { + mlp.leftMargin = insets.left + } + if (edgeToEdgeMarginConfig.shouldSetRightMargin) { + mlp.rightMargin = insets.right + } + if (edgeToEdgeMarginConfig.shouldSetTopMargin) { + mlp.topMargin = insets.top + } + if (edgeToEdgeMarginConfig.shouldSetBottomMargin) { + mlp.bottomMargin = insets.bottom + } + v.layoutParams = mlp + + // Return the window insets to keep passing down to descendant views. + windowInsets + }, + ) + } + } +} diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/MainActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/MainActivity.kt index 15ea259..914549a 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/MainActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/MainActivity.kt @@ -22,12 +22,21 @@ import android.widget.AdapterView.OnItemClickListener import android.widget.ArrayAdapter import android.widget.ListView import androidx.appcompat.app.AppCompatActivity +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig /** Main activity that lets the user choose a demo to launch. */ class MainActivity : AppCompatActivity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.main_layout_container))) + ) + val listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, DEMOS.keys.toList()) val listView = findViewById(R.id.list_view) listView.adapter = listAdapter diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavFragmentActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavFragmentActivity.kt index 5654e56..69a83ca 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavFragmentActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavFragmentActivity.kt @@ -28,6 +28,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.example.navigationapidemo.CustomizationPanelsDelegate.logDebugInfo +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig import com.google.android.libraries.navigation.NavigationApi import com.google.android.libraries.navigation.NavigationApi.NavigatorListener import com.google.android.libraries.navigation.Navigator @@ -37,6 +38,7 @@ import com.google.android.libraries.navigation.SupportNavigationFragment import com.google.android.libraries.navigation.Waypoint import com.google.android.libraries.navigation.Waypoint.UnsupportedPlaceIdException import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.api.model.PlaceTypes import java.lang.Exception /** @@ -58,6 +60,13 @@ class NavFragmentActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_nav_fragment) + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.nav_fragment_layout_container))) + ) + // Obtain a reference to the NavigationFragment navFragment = supportFragmentManager.findFragmentById(R.id.navigation_fragment) as SupportNavigationFragment @@ -144,21 +153,21 @@ class NavFragmentActivity : AppCompatActivity() { ) withMapAsync { - CustomizationPanelsDelegate.setUpCameraPerspectiveSpinner( - this@NavFragmentActivity, - map::followMyLocation, - ) - // The logic below simply helps keep the UI in tune with the underlying SDK - // state. - CustomizationPanelsDelegate.registerOnCameraFollowLocationCallback( - this@NavFragmentActivity, - map, - ) + CustomizationPanelsDelegate.setUpCameraPerspectiveSpinner( + this@NavFragmentActivity, + map::followMyLocation, + ) + // The logic below simply helps keep the UI in tune with the underlying SDK + // state. + CustomizationPanelsDelegate.registerOnCameraFollowLocationCallback( + this@NavFragmentActivity, + map, + ) - CustomizationPanelsDelegate.registerOnNavigationUiChangedListener( - this@NavFragmentActivity, - navFragment::addOnNavigationUiChangedListener, - ) + CustomizationPanelsDelegate.registerOnNavigationUiChangedListener( + this@NavFragmentActivity, + navFragment::addOnNavigationUiChangedListener, + ) } } @@ -196,7 +205,7 @@ class NavFragmentActivity : AppCompatActivity() { */ private fun navigateToPlace(place: Place) { val waypoint: Waypoint? = - if (place.types?.contains(Place.Type.GEOCODE) == true) { + if (place.placeTypes?.contains(PlaceTypes.GEOCODE) == true) { // An example of setting a destination via Lat-Lng. // Note: Setting LatLng destinations can result in poor routing quality/ETA calculation. // Wherever possible you should use a Place ID to describe the destination accurately. diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavInfoDisplayFragment.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavInfoDisplayFragment.kt index 9f03836..8f8e039 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavInfoDisplayFragment.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavInfoDisplayFragment.kt @@ -87,39 +87,39 @@ class NavInfoDisplayFragment : Fragment() { } private fun showNavInfo(navInfo: NavInfo) { - if (navInfo.navState == NavState.REROUTING) { - // Rerouting: Clear the header and indicate that we're rerouting. - clearHeader() - displayHeader.findViewById(R.id.tv_primary_text).text = "Rerouting..." - } else if (navInfo.navState == NavState.STOPPED) { - // Stopped: Nav has stopped, so clear the header and indicate that we're awaiting - // navigation. - clearHeader() - showAwaitingNavigationText() - } else if ( - navInfo.navState == NavState.ENROUTE && - navInfo.currentStep != null && - navInfo.remainingSteps != null - ) { - // Enroute: - // Show the latest current step if - // 1) The last shown step was the current step. - // 2) This is the first step to be shown. - // 3) If the route has changed since the last message. - // Otherwise, continue to show whichever step is currently being shown, which may be - // a step preview. - if ( - navInfo.routeChanged || - selectedStepNumber < 0 || - showingCurrentStep || - !isStepNumberAvailable(navInfo, selectedStepNumber) - ) { - selectedStepNumber = navInfo.currentStep.stepNumber + when (navInfo.navState) { + NavState.REROUTING -> { + // Rerouting: Clear the header and indicate that we're rerouting. + clearHeader() + displayHeader.findViewById(R.id.tv_primary_text).text = "Rerouting..." } - showSelectedStep(navInfo) - } else { - // Error. - showToast("Received unknown NavInfo.") + NavState.STOPPED -> { + // Stopped: Nav has stopped, so clear the header and indicate that we're awaiting + // navigation. + clearHeader() + showAwaitingNavigationText() + } + NavState.ENROUTE -> { + navInfo.currentStep?.let { currentStep -> + // Enroute: + // Show the latest current step if + // 1) The last shown step was the current step. + // 2) This is the first step to be shown. + // 3) If the route has changed since the last message. + // Otherwise, continue to show whichever step is currently being shown, which may be + // a step preview. + if ( + navInfo.routeChanged || + selectedStepNumber < 0 || + showingCurrentStep || + !isStepNumberAvailable(navInfo, selectedStepNumber) + ) { + currentStep.stepNumber?.let { selectedStepNumber = it } + } + showSelectedStep(navInfo) + } + } + else -> showToast("Received unknown NavInfo.") } } @@ -128,31 +128,30 @@ class NavInfoDisplayFragment : Fragment() { * steps. */ private fun isStepNumberAvailable(navInfo: NavInfo?, stepNumber: Int): Boolean { - if (navInfo == null || navInfo.currentStep == null) { - return false - } - val currentStepNumber = navInfo.currentStep.stepNumber + val currentStepNumber = navInfo?.currentStep?.stepNumber ?: return false + if (navInfo.remainingSteps.isEmpty()) { return stepNumber == currentStepNumber } - val lastAvailableStepNumber = navInfo.remainingSteps[navInfo.remainingSteps.size - 1].stepNumber + val lastAvailableStepNumber = + navInfo.remainingSteps[navInfo.remainingSteps.size - 1].stepNumber ?: return false return stepNumber in currentStepNumber..lastAvailableStepNumber } /** Shows the step selected by the user. This could be a current or remaining step. */ private fun showSelectedStep(navInfo: NavInfo) { - if (navInfo.currentStep == null || navInfo.remainingSteps == null) { - return - } + val currentStepNumber = navInfo.currentStep?.stepNumber ?: return + + val selectedStep = + if (selectedStepNumber != currentStepNumber) { + // If the selected step is not the current step, then it must be a step preview. + // Subtract the current step number from the selected step number to get the index + // of the selected step in the array of remaining steps. + navInfo.remainingSteps[selectedStepNumber - currentStepNumber - 1] + } else { + navInfo.currentStep + } ?: return - val currentStepNumber = navInfo.currentStep.stepNumber - var selectedStep = navInfo.currentStep - if (selectedStepNumber != currentStepNumber) { - // If the selected step is not the current step, then it must be a step preview. - // Subtract the current step number from the selected step number to get the index - // of the selected step in the array of remaining steps. - selectedStep = navInfo.remainingSteps[selectedStepNumber - currentStepNumber - 1] - } showingCurrentStep = selectedStep.stepNumber == currentStepNumber // Show the full road name, maneuver icon, time and distance to step, and further details. @@ -167,15 +166,23 @@ class NavInfoDisplayFragment : Fragment() { private fun setTimeAndDistanceToSelectedStepTexts(selectedStep: StepInfo, navInfo: NavInfo) { // Get the estimated remaining time and distance to the current step. - var distanceToStepMeters = navInfo.distanceToCurrentStepMeters - var timeToStepSeconds = navInfo.timeToCurrentStepSeconds - if (!isDisplayedStepCurrentStep) { - // If the displayed step is a future step preview rather than the current step, show - // the entire time and distance for the step maneuver rather than the estimated - // remaining time and distance to the current step. - distanceToStepMeters = selectedStep.distanceFromPrevStepMeters - timeToStepSeconds = selectedStep.timeFromPrevStepSeconds - } + + // If the displayed step is a future step preview rather than the current step, show + // the entire time and distance for the step maneuver rather than the estimated + // remaining time and distance to the current step. + val distanceToStepMeters = + if (isDisplayedStepCurrentStep) { + navInfo.distanceToCurrentStepMeters + } else { + selectedStep.distanceFromPrevStepMeters + } ?: return + + val timeToStepSeconds = + if (isDisplayedStepCurrentStep) { + navInfo.timeToCurrentStepSeconds + } else { + selectedStep.timeFromPrevStepSeconds + } ?: return // Show the time and distance to the selected step. displayHeader.findViewById(R.id.tv_distance_to_step).text = @@ -190,9 +197,11 @@ class NavInfoDisplayFragment : Fragment() { * available. */ private fun setStepButtonsStates(navInfo: NavInfo) { + val currentStepNumber = navInfo.currentStep?.stepNumber ?: return + displayHeader.findViewById(R.id.btn_next_step).isEnabled = canShowNextStep(navInfo) displayHeader.findViewById(R.id.btn_prev_step).isEnabled = - selectedStepNumber > navInfo.currentStep.stepNumber + selectedStepNumber > currentStepNumber displayHeader.findViewById(R.id.btn_current_step).isEnabled = !showingCurrentStep displayHeader.setBackgroundColor( if (showingCurrentStep) CURRENT_STEP_COLOR else STEP_PREVIEW_COLOR @@ -202,11 +211,13 @@ class NavInfoDisplayFragment : Fragment() { /** Displays the current step when the current step button is pressed. */ private fun showCurrentStep(navInfo: NavInfo) { - if (navInfo.currentStep == null || navInfo.remainingSteps.isEmpty()) { + if (navInfo.remainingSteps.isEmpty()) { return } - selectedStepNumber = navInfo.currentStep.stepNumber + val currentStepNumber = navInfo.currentStep?.stepNumber ?: return + + selectedStepNumber = currentStepNumber showSelectedStep(navInfo) } @@ -217,7 +228,7 @@ class NavInfoDisplayFragment : Fragment() { return false } - val lastAvailableStepNumber = nextSteps[nextSteps.size - 1].stepNumber + val lastAvailableStepNumber = nextSteps[nextSteps.size - 1].stepNumber ?: return false return selectedStepNumber < lastAvailableStepNumber } @@ -261,7 +272,9 @@ class NavInfoDisplayFragment : Fragment() { * @param distanceMeters the distance in meters. * @return the distance in the format of "mi" or "ft". */ - private fun getDistanceFormatted(distanceMeters: Int): String { + private fun getDistanceFormatted(distanceMeters: Int?): String { + distanceMeters ?: return "Unknown Distance" + // Distance can be negative so set the min distance to 0. // Only show the tenths place digit if the distance is less than 10 miles. // Only show feet if the distance is less than 0.25 miles. @@ -285,7 +298,9 @@ class NavInfoDisplayFragment : Fragment() { * @param timeSeconds the time in seconds * @return the time in the format of "hr min sec". */ - private fun getTimeFormatted(timeSeconds: Int): StringBuilder { + private fun getTimeFormatted(timeSeconds: Int?): StringBuilder { + timeSeconds ?: return StringBuilder().append("Unknown Time") + val remainingSeconds = timeSeconds.coerceAtLeast(0) val remainingHours = remainingSeconds / 3600 val remainingMinutesRounded = (remainingSeconds % 3600.0 / 60).roundToInt() diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavViewActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavViewActivity.kt index e11acb2..2df6ab0 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavViewActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/NavViewActivity.kt @@ -29,6 +29,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.example.navigationapidemo.CustomizationPanelsDelegate.logDebugInfo +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig import com.google.android.libraries.navigation.NavigationApi import com.google.android.libraries.navigation.NavigationApi.NavigatorListener import com.google.android.libraries.navigation.NavigationView @@ -38,6 +39,7 @@ import com.google.android.libraries.navigation.SimulationOptions import com.google.android.libraries.navigation.Waypoint import com.google.android.libraries.navigation.Waypoint.UnsupportedPlaceIdException import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.api.model.PlaceTypes import java.lang.Exception /** @@ -62,6 +64,13 @@ class NavViewActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_nav_view) + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.nav_view_layout_container))) + ) + navView = findViewById(R.id.navigation_view) navView.onCreate(savedInstanceState) @@ -152,20 +161,17 @@ class NavViewActivity : AppCompatActivity() { ) withMapAsync { - CustomizationPanelsDelegate.setUpCameraPerspectiveSpinner( - this@NavViewActivity, - map::followMyLocation, - ) - // The logic below simply helps keep the UI in tune with the underlying SDK state. - CustomizationPanelsDelegate.registerOnCameraFollowLocationCallback( - this@NavViewActivity, - map, - ) + CustomizationPanelsDelegate.setUpCameraPerspectiveSpinner( + this@NavViewActivity, + map::followMyLocation, + ) + // The logic below simply helps keep the UI in tune with the underlying SDK state. + CustomizationPanelsDelegate.registerOnCameraFollowLocationCallback(this@NavViewActivity, map) - CustomizationPanelsDelegate.registerOnNavigationUiChangedListener( - this@NavViewActivity, - navView::addOnNavigationUiChangedListener, - ) + CustomizationPanelsDelegate.registerOnNavigationUiChangedListener( + this@NavViewActivity, + navView::addOnNavigationUiChangedListener, + ) } } @@ -201,7 +207,7 @@ class NavViewActivity : AppCompatActivity() { */ private fun navigateToPlace(place: Place) { val waypoint: Waypoint? = - if (place.types?.contains(Place.Type.GEOCODE) == true) { + if (place.getPlaceTypes()?.contains(PlaceTypes.GEOCODE) == true) { // An example of setting a destination via Lat-Lng. // Note: Setting LatLng destinations can result in poor routing quality/ETA calculation. // Wherever possible you should use a Place ID to describe the destination accurately. diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/PlacePickerActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/PlacePickerActivity.kt index 757c31c..e8d0f38 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/PlacePickerActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/PlacePickerActivity.kt @@ -19,6 +19,7 @@ package com.example.navigationapidemo import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig import com.google.android.gms.common.api.Status import com.google.android.libraries.places.api.model.Place import com.google.android.libraries.places.widget.AutocompleteSupportFragment @@ -30,6 +31,14 @@ class PlacePickerActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_place_picker) + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.layout_container))) + ) + // Initialize the AutocompleteSupportFragment. val autocompleteFragment = supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/SplashScreenActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/SplashScreenActivity.kt index a2a9888..6e6fafd 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/SplashScreenActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/SplashScreenActivity.kt @@ -29,6 +29,7 @@ import androidx.activity.result.contract.ActivityResultContracts.RequestMultiple import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import com.bumptech.glide.Glide +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig import com.google.android.libraries.places.api.Places import java.util.concurrent.TimeUnit @@ -38,6 +39,14 @@ class SplashScreenActivity : AppCompatActivity() { super.onCreate(bundle) Places.initialize(applicationContext, getApiKeyFromMetaData()) setContentView(R.layout.activity_splash_screen) + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.splash_image_container))) + ) + val imageView = findViewById(R.id.splash_image) Glide.with(this) diff --git a/navigation-sample/app/src/main/java/com/example/navigationapidemo/SwappingMapAndNavActivity.kt b/navigation-sample/app/src/main/java/com/example/navigationapidemo/SwappingMapAndNavActivity.kt index 187a96e..91d50ca 100755 --- a/navigation-sample/app/src/main/java/com/example/navigationapidemo/SwappingMapAndNavActivity.kt +++ b/navigation-sample/app/src/main/java/com/example/navigationapidemo/SwappingMapAndNavActivity.kt @@ -25,6 +25,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import com.example.navigationapidemo.EdgeToEdgeUtil.EdgeToEdgeMarginConfig import com.google.android.gms.maps.SupportMapFragment import com.google.android.libraries.navigation.NavigationApi import com.google.android.libraries.navigation.NavigationApi.NavigatorListener @@ -35,6 +36,7 @@ import com.google.android.libraries.navigation.SupportNavigationFragment import com.google.android.libraries.navigation.Waypoint import com.google.android.libraries.navigation.Waypoint.UnsupportedPlaceIdException import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.api.model.PlaceTypes import java.lang.ref.WeakReference /** @@ -60,6 +62,14 @@ class SwappingMapAndNavActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_swapping_map_and_nav) + + // Margins are only set if the edge-to-edge mode is enabled, it's enabled by default for Android + // V+ devices. + // No margins are set for pre-Android V devices. + EdgeToEdgeUtil.setMarginForEdgeToEdgeSupport( + listOf(EdgeToEdgeMarginConfig(view = findViewById(R.id.container))) + ) + mapFragment = SupportMapFragment() navigationFragment = SupportNavigationFragment() @@ -125,7 +135,7 @@ class SwappingMapAndNavActivity : AppCompatActivity() { */ private fun navigateToPlace(place: Place) { val waypoint: Waypoint? = - if (place.types?.contains(Place.Type.GEOCODE) == true) { + if (place.placeTypes?.contains(PlaceTypes.GEOCODE) == true) { // Show an example of setting a destination Lat-Lng // Note: Setting LatLng destinations can result in poor routing quality/ETA calculation. // Wherever possible you should use a Place ID to describe the destination accurately. diff --git a/navigation-sample/app/src/main/res/layout/activity_nav_fragment.xml b/navigation-sample/app/src/main/res/layout/activity_nav_fragment.xml old mode 100644 new mode 100755 index 110ca33..d8191cf --- a/navigation-sample/app/src/main/res/layout/activity_nav_fragment.xml +++ b/navigation-sample/app/src/main/res/layout/activity_nav_fragment.xml @@ -17,7 +17,8 @@ + android:layout_height="match_parent" + android:id="@+id/nav_fragment_layout_container"> + android:layout_height="match_parent" + android:id="@+id/nav_view_layout_container"> diff --git a/navigation-sample/app/src/main/res/layout/main.xml b/navigation-sample/app/src/main/res/layout/main.xml index acb1fa0..9f49c2b 100644 --- a/navigation-sample/app/src/main/res/layout/main.xml +++ b/navigation-sample/app/src/main/res/layout/main.xml @@ -17,6 +17,7 @@ @@ -28,7 +29,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" - android:layout_marginTop="16dp"/> + android:layout_marginTop="16dp" />