diff --git a/MapboxAndroidDemo/build.gradle b/MapboxAndroidDemo/build.gradle index eeed78c1d..9c2e74bc0 100644 --- a/MapboxAndroidDemo/build.gradle +++ b/MapboxAndroidDemo/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.firebase.firebase-perf' apply plugin: 'com.github.triplet.play' apply from: "$project.rootDir/gradle/script-git-version.gradle" diff --git a/MapboxAndroidDemo/src/main/AndroidManifest.xml b/MapboxAndroidDemo/src/main/AndroidManifest.xml index 2ca74d140..5ac270c7e 100644 --- a/MapboxAndroidDemo/src/main/AndroidManifest.xml +++ b/MapboxAndroidDemo/src/main/AndroidManifest.xml @@ -147,6 +147,13 @@ android:name="android.support.PARENT_ACTIVITY" android:value="com.mapbox.mapboxandroiddemo.MainActivity" /> + + + diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java index f673a1fb9..a218a2a3f 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java @@ -15,16 +15,14 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Switch; +import android.widget.TextView; -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; import com.github.javiersantos.materialstyleddialogs.MaterialStyledDialog; import com.google.firebase.perf.metrics.AddTrace; import com.mapbox.mapboxandroiddemo.adapter.ExampleAdapter; @@ -49,6 +47,7 @@ import com.mapbox.mapboxandroiddemo.examples.dds.ChoroplethZoomChangeActivity; import com.mapbox.mapboxandroiddemo.examples.dds.CircleLayerClusteringActivity; import com.mapbox.mapboxandroiddemo.examples.dds.CreateHotspotsActivity; +import com.mapbox.mapboxandroiddemo.examples.dds.ExpressionIntegrationActivity; import com.mapbox.mapboxandroiddemo.examples.dds.HeatmapActivity; import com.mapbox.mapboxandroiddemo.examples.dds.ImageClusteringActivity; import com.mapbox.mapboxandroiddemo.examples.dds.InfoWindowSymbolLayerActivity; @@ -57,7 +56,6 @@ import com.mapbox.mapboxandroiddemo.examples.dds.MultipleHeatmapStylingActivity; import com.mapbox.mapboxandroiddemo.examples.dds.StyleCirclesCategoricallyActivity; import com.mapbox.mapboxandroiddemo.examples.dds.StyleLineIdentityPropertyActivity; -import com.mapbox.mapboxandroiddemo.examples.dds.ExpressionIntegrationActivity; import com.mapbox.mapboxandroiddemo.examples.extrusions.AdjustExtrusionLightActivity; import com.mapbox.mapboxandroiddemo.examples.extrusions.Indoor3DMapActivity; import com.mapbox.mapboxandroiddemo.examples.extrusions.MarathonExtrusionActivity; @@ -71,13 +69,14 @@ import com.mapbox.mapboxandroiddemo.examples.javaservices.SimplifyPolylineActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.StaticImageActivity; import com.mapbox.mapboxandroiddemo.examples.labs.AnimatedImageGifActivity; +import com.mapbox.mapboxandroiddemo.examples.labs.CalendarIntegrationActivity; import com.mapbox.mapboxandroiddemo.examples.labs.DashedLineDirectionsPickerActivity; import com.mapbox.mapboxandroiddemo.examples.labs.IndoorMapActivity; import com.mapbox.mapboxandroiddemo.examples.labs.InsetMapActivity; import com.mapbox.mapboxandroiddemo.examples.labs.LocationPickerActivity; -import com.mapbox.mapboxandroiddemo.examples.labs.PulsingLayerOpacityColorActivity; import com.mapbox.mapboxandroiddemo.examples.labs.MarkerFollowingRouteActivity; import com.mapbox.mapboxandroiddemo.examples.labs.PictureInPictureActivity; +import com.mapbox.mapboxandroiddemo.examples.labs.PulsingLayerOpacityColorActivity; import com.mapbox.mapboxandroiddemo.examples.labs.RecyclerViewOnMapActivity; import com.mapbox.mapboxandroiddemo.examples.labs.SnakingDirectionsRouteActivity; import com.mapbox.mapboxandroiddemo.examples.labs.SpaceStationLocationActivity; @@ -85,6 +84,7 @@ import com.mapbox.mapboxandroiddemo.examples.offline.OfflineManagerActivity; import com.mapbox.mapboxandroiddemo.examples.offline.SimpleOfflineMapActivity; import com.mapbox.mapboxandroiddemo.examples.plugins.BuildingPluginActivity; +import com.mapbox.mapboxandroiddemo.examples.plugins.KotlinLocationPluginActivity; import com.mapbox.mapboxandroiddemo.examples.plugins.LocalizationPluginActivity; import com.mapbox.mapboxandroiddemo.examples.plugins.LocationPluginActivity; import com.mapbox.mapboxandroiddemo.examples.plugins.LocationPluginFragmentActivity; @@ -118,13 +118,14 @@ import com.mapbox.mapboxandroiddemo.examples.styles.TransparentBackgroundActivity; import com.mapbox.mapboxandroiddemo.examples.styles.VectorSourceActivity; import com.mapbox.mapboxandroiddemo.examples.styles.ZoomDependentFillColorActivity; -import com.mapbox.mapboxandroiddemo.examples.labs.CalendarIntegrationActivity; import com.mapbox.mapboxandroiddemo.model.ExampleItemModel; import com.mapbox.mapboxandroiddemo.utils.ItemClickSupport; import com.mapbox.mapboxandroiddemo.utils.SettingsDialogView; import java.util.ArrayList; -import java.util.Iterator; +import java.util.List; + +import timber.log.Timber; import static com.mapbox.mapboxandroiddemo.commons.AnalyticsTracker.CLICKED_ON_INFO_DIALOG_NOT_NOW; import static com.mapbox.mapboxandroiddemo.commons.AnalyticsTracker.CLICKED_ON_INFO_DIALOG_START_LEARNING; @@ -137,46 +138,54 @@ public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { // Used to track internal navigation to the Snapshotter section - public static String EXTRA_NAV = "EXTRA_NAV"; + private static final String EXTRA_NAV = "EXTRA_NAV"; + private static final String STATE_CURRENT_CATEGORY = "STATE_CURRENT_CATEGORY"; + private static final String STATE_TOOLBAR_TITLE = "STATE_TOOLBAR_TITLE"; + private static final String STATE_SHOW_JAVA = "STATE_SHOW_JAVA"; + + private final ArrayList exampleItemModels = new ArrayList<>(); - private ArrayList exampleItemModels; - private ExampleAdapter adapter; - private int currentCategory = R.id.nav_basics; - private RecyclerView recyclerView; - private Switch analyticsOptOutSwitch; - private boolean loggedIn; private Toolbar toolbar; private String categoryTitleForToolbar; + private AnalyticsTracker analytics; + private ExampleAdapter adapter; + private RecyclerView recyclerView; + private TextView noExamplesTv; + + private boolean loggedIn; + private int currentCategory = R.id.nav_basics; + private boolean showJavaExamples = true; + @Override @AddTrace(name = "onCreateMainActivity") protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - toolbar = (Toolbar) findViewById(R.id.toolbar); + toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); - if (savedInstanceState == null) { - setSupportActionBar(toolbar); - } + noExamplesTv = findViewById(R.id.no_examples_tv); analytics = AnalyticsTracker.getInstance(this, false); - exampleItemModels = new ArrayList<>(); + initializeModels(); // Create the adapter to convert the array to views - adapter = new ExampleAdapter(this, exampleItemModels); + adapter = new ExampleAdapter(this); // Attach the adapter to a ListView - recyclerView = (RecyclerView) findViewById(R.id.details_list); + recyclerView = findViewById(R.id.details_list); if (recyclerView != null) { recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); } if (savedInstanceState != null) { - currentCategory = savedInstanceState.getInt("CURRENT_CATEGORY"); - categoryTitleForToolbar = savedInstanceState.getString("CURRENT_CATEGORY_TOOLBAR_TITLE"); + currentCategory = savedInstanceState.getInt(STATE_CURRENT_CATEGORY); + categoryTitleForToolbar = savedInstanceState.getString(STATE_TOOLBAR_TITLE); + showJavaExamples = savedInstanceState.getBoolean(STATE_SHOW_JAVA); toolbar.setTitle(categoryTitleForToolbar); listItems(currentCategory); } else if (getIntent().getIntExtra(EXTRA_NAV, -1) == R.id.nav_snapshot_image_generator) { @@ -186,26 +195,24 @@ protected void onCreate(Bundle savedInstanceState) { listItems(R.id.nav_basics); } - ItemClickSupport.addTo(recyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { - @Override - @AddTrace(name = "onItemClicked") - public void onItemClicked(RecyclerView recyclerView, int position, View view) { - if (currentCategory == R.id.nav_lab && position == 0) { - return; - } else if (currentCategory == R.id.nav_java_services && position == 0) { - return; - } else if (currentCategory == R.id.nav_query_map && position == 0) { - return; + // Item click listener + ItemClickSupport.addTo(recyclerView).setOnItemClickListener((recyclerView, position, view) -> { + ExampleItemModel model = adapter.getItemAt(position); + + // in case it's an info tile + if (model != null) { + if (showJavaExamples) { + startActivity(model.getJavaActivity()); + } else { + startActivity(model.getKotlinActivity()); } - startActivity(exampleItemModels.get(position).getActivity()); - analytics.clickedOnIndividualExample(getString(exampleItemModels.get(position).getTitle()), loggedIn); - analytics.viewedScreen(getString(exampleItemModels.get(position) - .getTitle()), loggedIn); + analytics.clickedOnIndividualExample(getString(model.getTitle()), loggedIn); + analytics.viewedScreen(getString(model.getTitle()), loggedIn); } }); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); if (drawer != null) { @@ -213,7 +220,7 @@ public void onItemClicked(RecyclerView recyclerView, int position, View view) { } toggle.syncState(); - NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + NavigationView navigationView = findViewById(R.id.nav_view); if (navigationView != null) { navigationView.setNavigationItemSelectedListener(this); navigationView.setCheckedItem(R.id.nav_basics); @@ -227,7 +234,7 @@ public void onItemClicked(RecyclerView recyclerView, int position, View view) { analytics.viewedScreen(MainActivity.class.getSimpleName(), loggedIn); checkForFirstTimeOpen(); } else { - analytics.trackEvent(SKIPPED_ACCOUNT_CREATION, loggedIn); + analytics.trackEvent(SKIPPED_ACCOUNT_CREATION, false); PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit() .putBoolean(SKIPPED_KEY, true) .apply(); @@ -237,7 +244,7 @@ public void onItemClicked(RecyclerView recyclerView, int position, View view) { @Override public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer != null) { if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); @@ -261,13 +268,15 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { } if (id != currentCategory && id != R.id.settings_in_nav_drawer) { + currentCategory = id; listItems(id); categoryTitleForToolbar = item.getTitle().toString(); toolbar.setTitle(categoryTitleForToolbar); analytics.clickedOnNavDrawerSection( item.getTitle().toString(), loggedIn); } - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + + DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer != null) { drawer.closeDrawer(GravityCompat.START); } @@ -276,607 +285,27 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { @AddTrace(name = "listItems") private void listItems(int id) { - exampleItemModels.clear(); - switch (id) { - case R.id.nav_styles: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_default_title, - R.string.activity_styles_default_description, - new Intent(MainActivity.this, DefaultStyleActivity.class), - R.string.activity_styles_default_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_basic_symbol_layer_title, - R.string.activity_styles_basic_symbol_layer_description, - new Intent(MainActivity.this, BasicSymbolLayerActivity.class), - R.string.activity_styles_symbol_layer_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_line_layer_title, - R.string.activity_styles_line_layer_description, - new Intent(MainActivity.this, LineLayerActivity.class), - R.string.activity_styles_line_layer_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_color_switcher_title, - R.string.activity_styles_color_switcher_description, - new Intent(MainActivity.this, ColorSwitcherActivity.class), - R.string.activity_styles_color_switcher_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_vector_source_title, - R.string.activity_styles_vector_source_description, - new Intent(MainActivity.this, VectorSourceActivity.class), - R.string.activity_styles_vector_source_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_add_wms_source_title, - R.string.activity_styles_add_wms_source_description, - new Intent(MainActivity.this, AddWmsSourceActivity.class), - R.string.activity_styles_add_wms_source_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_geojson_layer_in_stack_title, - R.string.activity_styles_geojson_layer_in_stack_description, - new Intent(MainActivity.this, GeojsonLayerInStackActivity.class), - R.string.activity_styles_geojson_layer_in_stack_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_adjust_layer_opacity_title, - R.string.activity_styles_adjust_layer_opacity_description, - new Intent(MainActivity.this, AdjustLayerOpacityActivity.class), - R.string.activity_styles_adjust_layer_opacity_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_zoom_dependent_fill_color_title, - R.string.activity_styles_zoom_dependent_fill_color_description, - new Intent(MainActivity.this, ZoomDependentFillColorActivity.class), - R.string.activity_styles_zoom_dependent_fill_color_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_language_switch_title, - R.string.activity_styles_language_switch_description, - new Intent(MainActivity.this, LanguageSwitchActivity.class), - R.string.activity_styles_language_switch_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_show_hide_layer_title, - R.string.activity_styles_show_hide_layer_description, - new Intent(MainActivity.this, ShowHideLayersActivity.class), - R.string.activity_styles_show_hide_layer_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_mapbox_studio_title, - R.string.activity_styles_mapbox_studio_description, - new Intent(MainActivity.this, MapboxStudioStyleActivity.class), - R.string.activity_styles_mapbox_studio_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_local_style_or_raster_source_title, - R.string.activity_styles_local_style_or_raster_source_description, - new Intent(MainActivity.this, LocalStyleSourceActivity.class), - R.string.activity_styles_local_style_or_raster_source_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_style_image_source_title, - R.string.activity_style_image_source_description, - new Intent(MainActivity.this, ImageSourceActivity.class), - R.string.activity_style_image_source_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_style_image_source_time_lapse_title, - R.string.activity_style_image_source_time_lapse_description, - new Intent(MainActivity.this, ImageSourceTimeLapseActivity.class), - R.string.activity_style_image_source_time_lapse_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_hillshade_title, - R.string.activity_style_hillshade_description, - new Intent(MainActivity.this, HillShadeActivity.class), - R.string.activity_style_hillshade_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_fade_switch_title, - R.string.activity_styles_fade_switch_description, - new Intent(MainActivity.this, StyleFadeSwitchActivity.class), - R.string.activity_styles_fade_switch_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_transparent_background_title, - R.string.activity_styles_transparent_background_description, - new Intent(MainActivity.this, TransparentBackgroundActivity.class), - R.string.activity_styles_transparent_background_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_styles; - break; - case R.id.nav_extrusions: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_extrusions_population_density_extrusions_title, - R.string.activity_extrusions_population_density_extrusions_description, - new Intent(MainActivity.this, PopulationDensityExtrusionActivity.class), - R.string.activity_extrusions_population_density_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_extrusions_catalina_marathon_extrusions_title, - R.string.activity_extrusions_catalina_marathon_extrusions_description, - new Intent(MainActivity.this, MarathonExtrusionActivity.class), - R.string.activity_extrusions_catalina_marathon_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_extrusions_adjust_extrusions_title, - R.string.activity_extrusions_adjust_extrusions_description, - new Intent(MainActivity.this, AdjustExtrusionLightActivity.class), - R.string.activity_extrusions_adjust_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_extrusions_indoor_3d_title, - R.string.activity_extrusions_indoor_3d_description, - new Intent(MainActivity.this, Indoor3DMapActivity.class), - R.string.activity_extrusions_indoor_3d_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_extrusions_rotate_extrusions_title, - R.string.activity_extrusions_rotate_extrusions_description, - new Intent(MainActivity.this, RotationExtrusionActivity.class), - R.string.activity_extrusions_rotate_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_extrusions; - break; - - case R.id.nav_plugins: - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_traffic_plugin_title, - R.string.activity_plugins_traffic_plugin_description, - new Intent(MainActivity.this, TrafficPluginActivity.class), - R.string.activity_plugins_traffic_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_building_plugin_title, - R.string.activity_plugins_building_plugin_description, - new Intent(MainActivity.this, BuildingPluginActivity.class), - R.string.activity_plugins_building_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_location_plugin_title, - R.string.activity_plugins_location_plugin_description, - new Intent(MainActivity.this, LocationPluginActivity.class), - R.string.activity_plugins_location_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_places_plugin_title, R.string.activity_plugins_places_plugin_description, - new Intent(MainActivity.this, PlacesPluginActivity.class), - R.string.activity_plugins_places_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_localization_plugin_title, - R.string.activity_plugins_localization_plugin_description, - new Intent(MainActivity.this, LocalizationPluginActivity.class), - R.string.activity_plugins_localization_plugin_url, false, BuildConfig.MIN_SDK_VERSION) - ); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_plugins_place_picker_plugin_title, - R.string.activity_plugins_place_picker_plugin_description, - new Intent(MainActivity.this, PlaceSelectionPluginActivity.class), - R.string.activity_plugins_place_picker_plugin_url, false, BuildConfig.MIN_SDK_VERSION) - ); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_user_location_map_frag_title, - R.string.activity_user_location_map_frag_plugin_description, - new Intent(MainActivity.this, LocationPluginFragmentActivity.class), - R.string.activity_user_location_fragment_plugin_url, false, BuildConfig.MIN_SDK_VERSION) - ); - - currentCategory = R.id.nav_plugins; - break; - - case R.id.nav_annotations: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_marker_title, - R.string.activity_annotation_custom_marker_description, - new Intent(MainActivity.this, DrawMarkerActivity.class), - R.string.activity_annotation_marker_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_custom_marker_title, - R.string.activity_annotation_custom_marker_description, - new Intent(MainActivity.this, DrawCustomMarkerActivity.class), - R.string.activity_annotation_custom_marker_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_geojson_line_title, - R.string.activity_annotation_geojson_line_description, - new Intent(MainActivity.this, DrawGeojsonLineActivity.class), - R.string.activity_annotation_geojson_line_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_polygon_title, - R.string.activity_annotation_polygon_description, - new Intent(MainActivity.this, DrawPolygonActivity.class), - R.string.activity_annotation_polygon_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_polygon_holes_title, - R.string.activity_annotation_polygon_holes_description, - new Intent(MainActivity.this, PolygonHolesActivity.class), - R.string.activity_annotation_polygon_holes_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_annotation_animated_marker_title, - R.string.activity_annotation_animated_marker_description, - new Intent(MainActivity.this, AnimatedMarkerActivity.class), - R.string.activity_annotation_animated_marker_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_annotations; - break; - - case R.id.nav_camera: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_camera_animate_title, - R.string.activity_camera_animate_description, - new Intent(MainActivity.this, AnimateMapCameraActivity.class), - R.string.activity_camera_animate_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_camera_bounding_box_title, - R.string.activity_camera_bounding_box_description, - new Intent(MainActivity.this, BoundingBoxCameraActivity.class), - R.string.activity_camera_bounding_box_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_camera_restrict_title, - R.string.activity_camera_restrict_description, - new Intent(MainActivity.this, RestrictCameraActivity.class), - R.string.activity_camera_restrict_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_camera; - break; - case R.id.nav_offline: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_offline_simple_title, - R.string.activity_offline_simple_description, - new Intent(MainActivity.this, SimpleOfflineMapActivity.class), - R.string.activity_offline_simple_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_offline_manager_title, - R.string.activity_offline_manager_description, - new Intent(MainActivity.this, OfflineManagerActivity.class), - R.string.activity_offline_manager_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_offline; - break; - case R.id.nav_query_map: - exampleItemModels.add(null); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_select_building_title, - R.string.activity_query_select_building_description, - new Intent(MainActivity.this, SelectBuildingActivity.class), - R.string.activity_query_select_building_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_feature_count_title, - R.string.activity_query_feature_count_description, - new Intent(MainActivity.this, FeatureCountActivity.class), - R.string.activity_query_feature_count_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_feature_title, - R.string.activity_query_feature_description, - new Intent(MainActivity.this, QueryFeatureActivity.class), - R.string.activity_query_feature_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_click_on_layer_title, - R.string.activity_query_click_on_layer_description, - new Intent(MainActivity.this, ClickOnLayerActivity.class), - R.string.activity_query_click_on_layer_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_redo_search_in_area_title, - R.string.activity_query_redo_search_in_area_description, - new Intent(MainActivity.this, RedoSearchInAreaActivity.class), - R.string.activity_query_redo_search_in_area_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_building_outline_title, - R.string.activity_query_building_outline_description, - new Intent(MainActivity.this, BuildingOutlineActivity.class), - R.string.activity_query_building_outline_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_query_highlighted_line_title, - R.string.activity_query_highlighted_line_description, - new Intent(MainActivity.this, HighlightedLineActivity.class), - R.string.activity_query_highlighted_line_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_query_map; - break; - case R.id.nav_java_services: - exampleItemModels.add(null); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_simplify_polyline_title, - R.string.activity_java_services_simplify_polyline_description, - new Intent(MainActivity.this, SimplifyPolylineActivity.class), - R.string.activity_java_services_simplify_polyline_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_map_matching_title, - R.string.activity_java_services_map_matching_description, - new Intent(MainActivity.this, MapMatchingActivity.class), - R.string.activity_java_services_map_matching_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_directions_title, - R.string.activity_java_services_directions_description, - new Intent(MainActivity.this, DirectionsActivity.class), - R.string.activity_java_services_directions_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_optimization_title, - R.string.activity_java_services_optimization_description, - new Intent(MainActivity.this, OptimizationActivity.class), - R.string.activity_java_services_optimization_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_static_image_title, - R.string.activity_java_services_static_image_description, - new Intent(MainActivity.this, StaticImageActivity.class), - R.string.activity_java_services_static_image_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_maxtrix_api_title, - R.string.activity_java_services_matrix_api_description, - new Intent(MainActivity.this, MatrixApiActivity.class), - R.string.activity_java_services_matrix_url)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_java_services_geocoding_title, - R.string.activity_java_services_geocoding_description, - new Intent(MainActivity.this, GeocodingActivity.class), - R.string.activity_java_services_geocoding_url)); - - currentCategory = R.id.nav_java_services; - break; - case R.id.nav_snapshot_image_generator: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_image_generator_snapshot_notification_title, - R.string.activity_image_generator_snapshot_notification_description, - new Intent(MainActivity.this, SnapshotNotificationActivity.class), - R.string.activity_image_generator_snapshot_notification_url - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_image_generator_snapshot_share_title, - R.string.activity_image_generator_snapshot_share_description, - new Intent(MainActivity.this, SnapshotShareActivity.class), - R.string.activity_image_generator_snapshot_share_url - )); - currentCategory = R.id.nav_snapshot_image_generator; - break; - case R.id.nav_lab: - exampleItemModels.add(null); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_symbol_layer_and_mapillary_on_map_title, - R.string.activity_lab_symbol_layer_and_mapillary_on_map_description, - new Intent(MainActivity.this, SymbolLayerMapillaryActivity.class), - R.string.activity_lab_symbol_layer_on_map_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_pulsing_layer_opacity_color_title, - R.string.activity_lab_pulsing_layer_opacity_color_description, - new Intent(MainActivity.this, PulsingLayerOpacityColorActivity.class), - R.string.activity_lab_pulsing_layer_opacity_color_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_indoor_map_title, - R.string.activity_lab_indoor_map_description, - new Intent(MainActivity.this, IndoorMapActivity.class), - R.string.activity_lab_indoor_map_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_location_picker_title, - R.string.activity_lab_location_picker_description, - new Intent(MainActivity.this, LocationPickerActivity.class), - R.string.activity_lab_location_picker_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_marker_following_route_title, - R.string.activity_lab_marker_following_route_description, - new Intent(MainActivity.this, MarkerFollowingRouteActivity.class), - R.string.activity_lab_marker_following_route_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_space_station_location_title, - R.string.activity_lab_space_station_location_description, - new Intent(MainActivity.this, SpaceStationLocationActivity.class), - R.string.activity_lab_space_station_location_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_picture_in_picture_title, - R.string.activity_lab_picture_in_picture_description, - new Intent(MainActivity.this, PictureInPictureActivity.class), - R.string.activity_lab_picture_in_picture_url, false, Build.VERSION_CODES.O)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_rv_on_map_title, - R.string.activity_lab_rv_on_map_description, - new Intent(MainActivity.this, RecyclerViewOnMapActivity.class), - R.string.activity_lab_rv_on_map_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_labs_inset_map_title, - R.string.activity_labs_inset_map_description, - new Intent(MainActivity.this, InsetMapActivity.class), - R.string.activity_labs_inset_map_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_labs_gif_on_map_title, - R.string.activity_labs_gif_on_map_description, - new Intent(MainActivity.this, AnimatedImageGifActivity.class), - R.string.activity_labs_gif_on_map_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_labs_snaking_directions_route_title, - R.string.activity_labs_snaking_directions_route_description, - new Intent(MainActivity.this, SnakingDirectionsRouteActivity.class), - R.string.activity_labs_snaking_directions_route_url, false, BuildConfig.MIN_SDK_VERSION - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dashed_line_directions_picker_title, - R.string.activity_dashed_line_directions_picker_description, - new Intent(MainActivity.this, DashedLineDirectionsPickerActivity.class), - R.string.activity_dashed_line_directions_picker_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_lab_calendar_integration_title, - R.string.activity_lab_calendar_integration_description, - new Intent(MainActivity.this, CalendarIntegrationActivity.class), - R.string.activity_lab_calendar_integration_url, false, BuildConfig.MIN_SDK_VERSION)); - currentCategory = R.id.nav_lab; - break; - case R.id.nav_dds: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_heatmap_title, - R.string.activity_dds_heatmap_description, - new Intent(MainActivity.this, HeatmapActivity.class), - R.string.activity_dds_heatmap_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_multiple_heatmap_styling_title, - R.string.activity_dds_multiple_heatmap_styling_description, - new Intent(MainActivity.this, MultipleHeatmapStylingActivity.class), - R.string.activity_dds_multiple_heatmap_styling_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_bathymetry_title, - R.string.activity_dds_bathymetry_description, - new Intent(MainActivity.this, BathymetryActivity.class), - R.string.activity_dds_bathymetry_url, false, BuildConfig.MIN_SDK_VERSION - )); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_styles_dds_geojson_circle_layer_clusters_title, - R.string.activity_styles_dds_geojson_circle_layer_clusters_description, - new Intent(MainActivity.this, CircleLayerClusteringActivity.class), - R.string.activity_styles_dds_geojson_circle_layer_clusters_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_image_clustering_title, - R.string.activity_dds_image_clustering_description, - new Intent(MainActivity.this, ImageClusteringActivity.class), - R.string.activity_dds_image_clustering_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_style_circle_categorically_title, - R.string.activity_dds_style_circle_categorically_description, - new Intent(MainActivity.this, StyleCirclesCategoricallyActivity.class), - R.string.activity_dds_style_circle_categorically_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_choropleth_zoom_change_title, - R.string.activity_dds_choropleth_zoom_change_description, - new Intent(MainActivity.this, ChoroplethZoomChangeActivity.class), - R.string.activity_dds_choropleth_zoom_change_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_style_line_identity_property_title, - R.string.activity_dds_style_line_identity_property_description, - new Intent(MainActivity.this, StyleLineIdentityPropertyActivity.class), - R.string.activity_dds_style_line_identity_property_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_create_hotspots_points_title, - R.string.activity_dds_create_hotspots_points_description, - new Intent(MainActivity.this, CreateHotspotsActivity.class), - R.string.activity_dds_create_hotspots_points_url - )); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_json_vector_mix_title, - R.string.activity_dds_json_vector_mix_description, - new Intent(MainActivity.this, ChoroplethJsonVectorMixActivity.class), - R.string.activity_dds_json_vector_mix_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_multiple_geometries_title, - R.string.activity_dds_multiple_geometries_description, - new Intent(MainActivity.this, MultipleGeometriesActivity.class), - R.string.activity_dds_multiple_geometries_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_info_window_symbol_layer_title, - R.string.activity_dds_info_window_symbol_layer_description, - new Intent(MainActivity.this, InfoWindowSymbolLayerActivity.class), - R.string.activity_dds_info_window_symbol_layer_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_time_lapse_rainfall_points_title, - R.string.activity_dds_time_lapse_rainfall_points_description, - new Intent(MainActivity.this, AddRainFallStyleActivity.class), - R.string.activity_dds_time_lapse_rainfall_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_expression_integration_title, - R.string.activity_dds_expression_integration_description, - new Intent(MainActivity.this, ExpressionIntegrationActivity.class), - R.string.activity_dds_expression_integration_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_dds_style_kotlin_circle_categorically_title, - R.string.activity_dds_kotlin_style_circle_categorically_description, - new Intent(MainActivity.this, KotlinStyleCirclesCategoricallyActivity.class), - R.string.activity_dds_style_circle_categorically_url, false, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_dds; - break; - default: - exampleItemModels.add(new ExampleItemModel( - R.string.activity_basic_simple_mapview_title, - R.string.activity_basic_simple_mapview_description, - new Intent(MainActivity.this, SimpleMapViewActivity.class), - R.string.activity_basic_simple_mapview_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_basic_support_map_frag_title, - R.string.activity_basic_support_map_frag_description, - new Intent(MainActivity.this, SupportMapFragmentActivity.class), - R.string.activity_basic_support_map_frag_url, false, BuildConfig.MIN_SDK_VERSION)); - - exampleItemModels.add(new ExampleItemModel( - R.string.activity_basic_mapbox_options_title, - R.string.activity_basic_mapbox_options_description, - new Intent(MainActivity.this, MapboxMapOptionActivity.class), - R.string.activity_basic_mapbox_options_url, false, BuildConfig.MIN_SDK_VERSION)); - exampleItemModels.add(new ExampleItemModel( - R.string.activity_basic_mapbox_kotlin_title, - R.string.activity_basic_mapbox_kotlin_description, - new Intent(MainActivity.this, SimpleMapViewActivityKotlin.class), - R.string.activity_basic_mapbox_kotlin_url, true, BuildConfig.MIN_SDK_VERSION)); - - currentCategory = R.id.nav_basics; - break; + List models = new ArrayList<>(); + for (ExampleItemModel model : exampleItemModels) { + if (model.getCategoryId() == id && verifySdkVersion(model)) { + if ((showJavaExamples && model.getJavaActivity() != null) + || !showJavaExamples && model.getKotlinActivity() != null) { + models.add(model); + } + } } - verifySdkVersion(); - adapter.notifyDataSetChanged(); + adapter.updateDataSet(models, currentCategory); // Scrolls recycler view back to top. LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); layoutManager.scrollToPositionWithOffset(0, 0); - } - private void verifySdkVersion() { - for (Iterator iterator = exampleItemModels.iterator(); iterator.hasNext(); ) { - ExampleItemModel model = iterator.next(); - if (model != null && Build.VERSION.SDK_INT < model.getMinSdkVersion()) { - iterator.remove(); - } - } + noExamplesTv.setVisibility(models.size() == 0 ? View.VISIBLE : View.GONE); } - public int getCurrentCategory() { - return currentCategory; + private boolean verifySdkVersion(ExampleItemModel model) { + return model == null || Build.VERSION.SDK_INT >= model.getMinSdkVersion(); } @Override @@ -886,6 +315,17 @@ public boolean onCreateOptionsMenu(Menu menu) { return true; } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem item = menu.findItem(R.id.action_show_other_language); + if (showJavaExamples) { + item.setTitle(R.string.examples_language_kotlin); + } else { + item.setTitle(R.string.examples_language_java); + } + return super.onPrepareOptionsMenu(menu); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); @@ -898,33 +338,31 @@ public boolean onOptionsItemSelected(MenuItem item) { .setHeaderColor(R.color.mapboxBlue) .withDivider(true) .setPositiveText(getString(R.string.info_dialog_positive_button_text)) - .onPositive(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - analytics.trackEvent(CLICKED_ON_INFO_DIALOG_START_LEARNING, false); - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://mapbox.com/android-sdk")); - startActivity(intent); - } + .onPositive((dialog, which) -> { + analytics.trackEvent(CLICKED_ON_INFO_DIALOG_START_LEARNING, false); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("https://mapbox.com/android-sdk")); + startActivity(intent); }) .setNegativeText(getString(R.string.info_dialog_negative_button_text)) - .onNegative(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - analytics.trackEvent(CLICKED_ON_INFO_DIALOG_NOT_NOW, loggedIn); - } - }) + .onNegative((dialog, which) -> analytics.trackEvent(CLICKED_ON_INFO_DIALOG_NOT_NOW, loggedIn)) .show(); return true; + } else if (id == R.id.action_show_other_language) { + if (showJavaExamples) { + setExamplesLanguage(false); + item.setTitle(R.string.examples_language_java); + } else { + setExamplesLanguage(true); + item.setTitle(R.string.examples_language_kotlin); + } } return super.onOptionsItemSelected(item); } - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt("CURRENT_CATEGORY", currentCategory); - outState.putString("CURRENT_CATEGORY_TOOLBAR_TITLE", categoryTitleForToolbar); + private void setExamplesLanguage(boolean showJava) { + showJavaExamples = showJava; + listItems(currentCategory); } private void checkForFirstTimeOpen() { @@ -939,7 +377,7 @@ private void buildSettingsDialog() { analytics.trackEvent(CLICKED_ON_SETTINGS_IN_NAV_DRAWER, loggedIn); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View customView = inflater.inflate(R.layout.settings_dialog_layout, null); - analyticsOptOutSwitch = (Switch) customView.findViewById(R.id.analytics_opt_out_switch); + Switch analyticsOptOutSwitch = customView.findViewById(R.id.analytics_opt_out_switch); analyticsOptOutSwitch.setChecked(!analytics.isAnalyticsEnabled()); final SettingsDialogView dialogView = new SettingsDialogView(customView, @@ -947,17 +385,12 @@ private void buildSettingsDialog() { dialogView.buildDialog(); - Button logOutOfMapboxAccountButton = (Button) customView.findViewById(R.id.log_out_of_account_button); + Button logOutOfMapboxAccountButton = customView.findViewById(R.id.log_out_of_account_button); if (!loggedIn) { logOutOfMapboxAccountButton.setVisibility(View.GONE); } else { - logOutOfMapboxAccountButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - dialogView.logOut(loggedIn); - } - }); + logOutOfMapboxAccountButton.setOnClickListener(view -> dialogView.logOut(loggedIn)); } } @@ -969,7 +402,737 @@ private void shareApp() { intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_app_text)); startActivity(Intent.createChooser(intent, getString(R.string.share_app_choose_one_instruction))); } catch (Exception exception) { - Log.d("MainActivity", "shareApp: exception = " + exception); + Timber.d(exception, "shareApp: exception = %s", exception.getMessage()); } } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(STATE_CURRENT_CATEGORY, currentCategory); + outState.putString(STATE_TOOLBAR_TITLE, categoryTitleForToolbar); + outState.putBoolean(STATE_SHOW_JAVA, showJavaExamples); + } + + private void initializeModels() { + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_default_title, + R.string.activity_styles_default_description, + new Intent(MainActivity.this, DefaultStyleActivity.class), + null, + R.string.activity_styles_default_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_basic_symbol_layer_title, + R.string.activity_styles_basic_symbol_layer_description, + new Intent(MainActivity.this, BasicSymbolLayerActivity.class), + null, + R.string.activity_styles_symbol_layer_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_line_layer_title, + R.string.activity_styles_line_layer_description, + new Intent(MainActivity.this, LineLayerActivity.class), + null, + R.string.activity_styles_line_layer_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_color_switcher_title, + R.string.activity_styles_color_switcher_description, + new Intent(MainActivity.this, ColorSwitcherActivity.class), + null, + R.string.activity_styles_color_switcher_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_vector_source_title, + R.string.activity_styles_vector_source_description, + new Intent(MainActivity.this, VectorSourceActivity.class), + null, + R.string.activity_styles_vector_source_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_add_wms_source_title, + R.string.activity_styles_add_wms_source_description, + new Intent(MainActivity.this, AddWmsSourceActivity.class), + null, + R.string.activity_styles_add_wms_source_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_geojson_layer_in_stack_title, + R.string.activity_styles_geojson_layer_in_stack_description, + new Intent(MainActivity.this, GeojsonLayerInStackActivity.class), + null, + R.string.activity_styles_geojson_layer_in_stack_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_adjust_layer_opacity_title, + R.string.activity_styles_adjust_layer_opacity_description, + new Intent(MainActivity.this, AdjustLayerOpacityActivity.class), + null, + R.string.activity_styles_adjust_layer_opacity_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_zoom_dependent_fill_color_title, + R.string.activity_styles_zoom_dependent_fill_color_description, + new Intent(MainActivity.this, ZoomDependentFillColorActivity.class), + null, + R.string.activity_styles_zoom_dependent_fill_color_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_language_switch_title, + R.string.activity_styles_language_switch_description, + new Intent(MainActivity.this, LanguageSwitchActivity.class), + null, + R.string.activity_styles_language_switch_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_show_hide_layer_title, + R.string.activity_styles_show_hide_layer_description, + new Intent(MainActivity.this, ShowHideLayersActivity.class), + null, + R.string.activity_styles_show_hide_layer_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_mapbox_studio_title, + R.string.activity_styles_mapbox_studio_description, + new Intent(MainActivity.this, MapboxStudioStyleActivity.class), + null, + R.string.activity_styles_mapbox_studio_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_local_style_or_raster_source_title, + R.string.activity_styles_local_style_or_raster_source_description, + new Intent(MainActivity.this, LocalStyleSourceActivity.class), + null, + R.string.activity_styles_local_style_or_raster_source_url, false, BuildConfig.MIN_SDK_VERSION + )); + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_style_image_source_title, + R.string.activity_style_image_source_description, + new Intent(MainActivity.this, ImageSourceActivity.class), + null, + R.string.activity_style_image_source_url, false, BuildConfig.MIN_SDK_VERSION + )); + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_style_image_source_time_lapse_title, + R.string.activity_style_image_source_time_lapse_description, + new Intent(MainActivity.this, ImageSourceTimeLapseActivity.class), + null, + R.string.activity_style_image_source_time_lapse_url, false, BuildConfig.MIN_SDK_VERSION + )); + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_hillshade_title, + R.string.activity_style_hillshade_description, + new Intent(MainActivity.this, HillShadeActivity.class), + null, + R.string.activity_style_hillshade_url, false, BuildConfig.MIN_SDK_VERSION + )); + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_fade_switch_title, + R.string.activity_styles_fade_switch_description, + new Intent(MainActivity.this, StyleFadeSwitchActivity.class), + null, + R.string.activity_styles_fade_switch_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_styles, + R.string.activity_styles_transparent_background_title, + R.string.activity_styles_transparent_background_description, + new Intent(MainActivity.this, TransparentBackgroundActivity.class), + null, + R.string.activity_styles_transparent_background_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_extrusions, + R.string.activity_extrusions_population_density_extrusions_title, + R.string.activity_extrusions_population_density_extrusions_description, + new Intent(MainActivity.this, PopulationDensityExtrusionActivity.class), + null, + R.string.activity_extrusions_population_density_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_extrusions, + R.string.activity_extrusions_catalina_marathon_extrusions_title, + R.string.activity_extrusions_catalina_marathon_extrusions_description, + new Intent(MainActivity.this, MarathonExtrusionActivity.class), + null, + R.string.activity_extrusions_catalina_marathon_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_extrusions, + R.string.activity_extrusions_adjust_extrusions_title, + R.string.activity_extrusions_adjust_extrusions_description, + new Intent(MainActivity.this, AdjustExtrusionLightActivity.class), + null, + R.string.activity_extrusions_adjust_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_extrusions, + R.string.activity_extrusions_indoor_3d_title, + R.string.activity_extrusions_indoor_3d_description, + new Intent(MainActivity.this, Indoor3DMapActivity.class), + null, + R.string.activity_extrusions_indoor_3d_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_extrusions, + R.string.activity_extrusions_rotate_extrusions_title, + R.string.activity_extrusions_rotate_extrusions_description, + new Intent(MainActivity.this, RotationExtrusionActivity.class), + null, + R.string.activity_extrusions_rotate_extrusions_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_traffic_plugin_title, + R.string.activity_plugins_traffic_plugin_description, + new Intent(MainActivity.this, TrafficPluginActivity.class), + null, + R.string.activity_plugins_traffic_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_building_plugin_title, + R.string.activity_plugins_building_plugin_description, + new Intent(MainActivity.this, BuildingPluginActivity.class), + null, + R.string.activity_plugins_building_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_location_plugin_title, + R.string.activity_plugins_location_plugin_description, + new Intent(MainActivity.this, LocationPluginActivity.class), + new Intent(MainActivity.this, KotlinLocationPluginActivity.class), + R.string.activity_plugins_location_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_places_plugin_title, R.string.activity_plugins_places_plugin_description, + new Intent(MainActivity.this, PlacesPluginActivity.class), + null, + R.string.activity_plugins_places_plugin_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_localization_plugin_title, + R.string.activity_plugins_localization_plugin_description, + new Intent(MainActivity.this, LocalizationPluginActivity.class), + null, + R.string.activity_plugins_localization_plugin_url, false, BuildConfig.MIN_SDK_VERSION) + ); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_plugins_place_picker_plugin_title, + R.string.activity_plugins_place_picker_plugin_description, + new Intent(MainActivity.this, PlaceSelectionPluginActivity.class), + null, + R.string.activity_plugins_place_picker_plugin_url, false, BuildConfig.MIN_SDK_VERSION) + ); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_plugins, + R.string.activity_user_location_map_frag_title, + R.string.activity_user_location_map_frag_plugin_description, + new Intent(MainActivity.this, LocationPluginFragmentActivity.class), + null, + R.string.activity_user_location_fragment_plugin_url, false, BuildConfig.MIN_SDK_VERSION) + ); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_marker_title, + R.string.activity_annotation_custom_marker_description, + new Intent(MainActivity.this, DrawMarkerActivity.class), + null, + R.string.activity_annotation_marker_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_custom_marker_title, + R.string.activity_annotation_custom_marker_description, + new Intent(MainActivity.this, DrawCustomMarkerActivity.class), + null, + R.string.activity_annotation_custom_marker_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_geojson_line_title, + R.string.activity_annotation_geojson_line_description, + new Intent(MainActivity.this, DrawGeojsonLineActivity.class), + null, + R.string.activity_annotation_geojson_line_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_polygon_title, + R.string.activity_annotation_polygon_description, + new Intent(MainActivity.this, DrawPolygonActivity.class), + null, + R.string.activity_annotation_polygon_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_polygon_holes_title, + R.string.activity_annotation_polygon_holes_description, + new Intent(MainActivity.this, PolygonHolesActivity.class), + null, + R.string.activity_annotation_polygon_holes_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_annotations, + R.string.activity_annotation_animated_marker_title, + R.string.activity_annotation_animated_marker_description, + new Intent(MainActivity.this, AnimatedMarkerActivity.class), + null, + R.string.activity_annotation_animated_marker_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_camera, + R.string.activity_camera_animate_title, + R.string.activity_camera_animate_description, + new Intent(MainActivity.this, AnimateMapCameraActivity.class), + null, + R.string.activity_camera_animate_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_camera, + R.string.activity_camera_bounding_box_title, + R.string.activity_camera_bounding_box_description, + new Intent(MainActivity.this, BoundingBoxCameraActivity.class), + null, + R.string.activity_camera_bounding_box_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_camera, + R.string.activity_camera_restrict_title, + R.string.activity_camera_restrict_description, + new Intent(MainActivity.this, RestrictCameraActivity.class), + null, + R.string.activity_camera_restrict_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_offline, + R.string.activity_offline_simple_title, + R.string.activity_offline_simple_description, + new Intent(MainActivity.this, SimpleOfflineMapActivity.class), + null, + R.string.activity_offline_simple_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_offline, + R.string.activity_offline_manager_title, + R.string.activity_offline_manager_description, + new Intent(MainActivity.this, OfflineManagerActivity.class), + null, + R.string.activity_offline_manager_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_select_building_title, + R.string.activity_query_select_building_description, + new Intent(MainActivity.this, SelectBuildingActivity.class), + null, + R.string.activity_query_select_building_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_feature_count_title, + R.string.activity_query_feature_count_description, + new Intent(MainActivity.this, FeatureCountActivity.class), + null, + R.string.activity_query_feature_count_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_feature_title, + R.string.activity_query_feature_description, + new Intent(MainActivity.this, QueryFeatureActivity.class), + null, + R.string.activity_query_feature_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_click_on_layer_title, + R.string.activity_query_click_on_layer_description, + new Intent(MainActivity.this, ClickOnLayerActivity.class), + null, + R.string.activity_query_click_on_layer_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_redo_search_in_area_title, + R.string.activity_query_redo_search_in_area_description, + new Intent(MainActivity.this, RedoSearchInAreaActivity.class), + null, + R.string.activity_query_redo_search_in_area_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_building_outline_title, + R.string.activity_query_building_outline_description, + new Intent(MainActivity.this, BuildingOutlineActivity.class), + null, + R.string.activity_query_building_outline_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_query_map, + R.string.activity_query_highlighted_line_title, + R.string.activity_query_highlighted_line_description, + new Intent(MainActivity.this, HighlightedLineActivity.class), + null, + R.string.activity_query_highlighted_line_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_simplify_polyline_title, + R.string.activity_java_services_simplify_polyline_description, + new Intent(MainActivity.this, SimplifyPolylineActivity.class), + null, + R.string.activity_java_services_simplify_polyline_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_map_matching_title, + R.string.activity_java_services_map_matching_description, + new Intent(MainActivity.this, MapMatchingActivity.class), + null, + R.string.activity_java_services_map_matching_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_directions_title, + R.string.activity_java_services_directions_description, + new Intent(MainActivity.this, DirectionsActivity.class), + null, + R.string.activity_java_services_directions_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_optimization_title, + R.string.activity_java_services_optimization_description, + new Intent(MainActivity.this, OptimizationActivity.class), + null, + R.string.activity_java_services_optimization_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_static_image_title, + R.string.activity_java_services_static_image_description, + new Intent(MainActivity.this, StaticImageActivity.class), + null, + R.string.activity_java_services_static_image_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_maxtrix_api_title, + R.string.activity_java_services_matrix_api_description, + new Intent(MainActivity.this, MatrixApiActivity.class), + null, + R.string.activity_java_services_matrix_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_java_services, + R.string.activity_java_services_geocoding_title, + R.string.activity_java_services_geocoding_description, + new Intent(MainActivity.this, GeocodingActivity.class), + null, + R.string.activity_java_services_geocoding_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_snapshot_image_generator, + R.string.activity_image_generator_snapshot_notification_title, + R.string.activity_image_generator_snapshot_notification_description, + new Intent(MainActivity.this, SnapshotNotificationActivity.class), + null, + R.string.activity_image_generator_snapshot_notification_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_snapshot_image_generator, + R.string.activity_image_generator_snapshot_share_title, + R.string.activity_image_generator_snapshot_share_description, + new Intent(MainActivity.this, SnapshotShareActivity.class), + null, + R.string.activity_image_generator_snapshot_share_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_symbol_layer_and_mapillary_on_map_title, + R.string.activity_lab_symbol_layer_and_mapillary_on_map_description, + new Intent(MainActivity.this, SymbolLayerMapillaryActivity.class), + null, + R.string.activity_lab_symbol_layer_on_map_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_pulsing_layer_opacity_color_title, + R.string.activity_lab_pulsing_layer_opacity_color_description, + new Intent(MainActivity.this, PulsingLayerOpacityColorActivity.class), + null, + R.string.activity_lab_pulsing_layer_opacity_color_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_indoor_map_title, + R.string.activity_lab_indoor_map_description, + new Intent(MainActivity.this, IndoorMapActivity.class), + null, + R.string.activity_lab_indoor_map_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_location_picker_title, + R.string.activity_lab_location_picker_description, + new Intent(MainActivity.this, LocationPickerActivity.class), + null, + R.string.activity_lab_location_picker_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_marker_following_route_title, + R.string.activity_lab_marker_following_route_description, + new Intent(MainActivity.this, MarkerFollowingRouteActivity.class), + null, + R.string.activity_lab_marker_following_route_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_space_station_location_title, + R.string.activity_lab_space_station_location_description, + new Intent(MainActivity.this, SpaceStationLocationActivity.class), + null, + R.string.activity_lab_space_station_location_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_picture_in_picture_title, + R.string.activity_lab_picture_in_picture_description, + new Intent(MainActivity.this, PictureInPictureActivity.class), + null, + R.string.activity_lab_picture_in_picture_url, false, Build.VERSION_CODES.O)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_rv_on_map_title, + R.string.activity_lab_rv_on_map_description, + new Intent(MainActivity.this, RecyclerViewOnMapActivity.class), + null, + R.string.activity_lab_rv_on_map_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_labs_inset_map_title, + R.string.activity_labs_inset_map_description, + new Intent(MainActivity.this, InsetMapActivity.class), + null, + R.string.activity_labs_inset_map_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_labs_gif_on_map_title, + R.string.activity_labs_gif_on_map_description, + new Intent(MainActivity.this, AnimatedImageGifActivity.class), + null, + R.string.activity_labs_gif_on_map_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_labs_snaking_directions_route_title, + R.string.activity_labs_snaking_directions_route_description, + new Intent(MainActivity.this, SnakingDirectionsRouteActivity.class), + null, + R.string.activity_labs_snaking_directions_route_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_dashed_line_directions_picker_title, + R.string.activity_dashed_line_directions_picker_description, + new Intent(MainActivity.this, DashedLineDirectionsPickerActivity.class), + null, + R.string.activity_dashed_line_directions_picker_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_lab, + R.string.activity_lab_calendar_integration_title, + R.string.activity_lab_calendar_integration_description, + new Intent(MainActivity.this, CalendarIntegrationActivity.class), + null, + R.string.activity_lab_calendar_integration_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_heatmap_title, + R.string.activity_dds_heatmap_description, + new Intent(MainActivity.this, HeatmapActivity.class), + null, + R.string.activity_dds_heatmap_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_multiple_heatmap_styling_title, + R.string.activity_dds_multiple_heatmap_styling_description, + new Intent(MainActivity.this, MultipleHeatmapStylingActivity.class), + null, + R.string.activity_dds_multiple_heatmap_styling_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_bathymetry_title, + R.string.activity_dds_bathymetry_description, + new Intent(MainActivity.this, BathymetryActivity.class), + null, + R.string.activity_dds_bathymetry_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_styles_dds_geojson_circle_layer_clusters_title, + R.string.activity_styles_dds_geojson_circle_layer_clusters_description, + new Intent(MainActivity.this, CircleLayerClusteringActivity.class), + null, + R.string.activity_styles_dds_geojson_circle_layer_clusters_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_image_clustering_title, + R.string.activity_dds_image_clustering_description, + new Intent(MainActivity.this, ImageClusteringActivity.class), + null, + R.string.activity_dds_image_clustering_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_style_circle_categorically_title, + R.string.activity_dds_style_circle_categorically_description, + new Intent(MainActivity.this, StyleCirclesCategoricallyActivity.class), + null, + R.string.activity_dds_style_circle_categorically_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_choropleth_zoom_change_title, + R.string.activity_dds_choropleth_zoom_change_description, + new Intent(MainActivity.this, ChoroplethZoomChangeActivity.class), + null, + R.string.activity_dds_choropleth_zoom_change_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_style_line_identity_property_title, + R.string.activity_dds_style_line_identity_property_description, + new Intent(MainActivity.this, StyleLineIdentityPropertyActivity.class), + null, + R.string.activity_dds_style_line_identity_property_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_create_hotspots_points_title, + R.string.activity_dds_create_hotspots_points_description, + new Intent(MainActivity.this, CreateHotspotsActivity.class), + null, + R.string.activity_dds_create_hotspots_points_url, false, BuildConfig.MIN_SDK_VERSION + )); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_json_vector_mix_title, + R.string.activity_dds_json_vector_mix_description, + new Intent(MainActivity.this, ChoroplethJsonVectorMixActivity.class), + null, + R.string.activity_dds_json_vector_mix_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_multiple_geometries_title, + R.string.activity_dds_multiple_geometries_description, + new Intent(MainActivity.this, MultipleGeometriesActivity.class), + null, + R.string.activity_dds_multiple_geometries_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_info_window_symbol_layer_title, + R.string.activity_dds_info_window_symbol_layer_description, + new Intent(MainActivity.this, InfoWindowSymbolLayerActivity.class), + null, + R.string.activity_dds_info_window_symbol_layer_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_time_lapse_rainfall_points_title, + R.string.activity_dds_time_lapse_rainfall_points_description, + new Intent(MainActivity.this, AddRainFallStyleActivity.class), + null, + R.string.activity_dds_time_lapse_rainfall_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_expression_integration_title, + R.string.activity_dds_expression_integration_description, + new Intent(MainActivity.this, ExpressionIntegrationActivity.class), + null, + R.string.activity_dds_expression_integration_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_dds, + R.string.activity_dds_style_kotlin_circle_categorically_title, + R.string.activity_dds_kotlin_style_circle_categorically_description, + null, + new Intent(MainActivity.this, KotlinStyleCirclesCategoricallyActivity.class), + R.string.activity_dds_style_circle_categorically_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_basics, + R.string.activity_basic_simple_mapview_title, + R.string.activity_basic_simple_mapview_description, + new Intent(MainActivity.this, SimpleMapViewActivity.class), + null, + R.string.activity_basic_simple_mapview_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_basics, + R.string.activity_basic_support_map_frag_title, + R.string.activity_basic_support_map_frag_description, + new Intent(MainActivity.this, SupportMapFragmentActivity.class), + null, + R.string.activity_basic_support_map_frag_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_basics, + R.string.activity_basic_mapbox_options_title, + R.string.activity_basic_mapbox_options_description, + new Intent(MainActivity.this, MapboxMapOptionActivity.class), + null, + R.string.activity_basic_mapbox_options_url, false, BuildConfig.MIN_SDK_VERSION)); + + exampleItemModels.add(new ExampleItemModel( + R.id.nav_basics, + R.string.activity_basic_mapbox_kotlin_title, + R.string.activity_basic_mapbox_kotlin_description, + new Intent(MainActivity.this, SimpleMapViewActivityKotlin.class), + null, + R.string.activity_basic_mapbox_kotlin_url, true, BuildConfig.MIN_SDK_VERSION)); + } } diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/adapter/ExampleAdapter.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/adapter/ExampleAdapter.java index d574a42b0..79b5709bb 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/adapter/ExampleAdapter.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/adapter/ExampleAdapter.java @@ -1,6 +1,8 @@ package com.mapbox.mapboxandroiddemo.adapter; import android.content.Context; +import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -9,61 +11,55 @@ import android.widget.ImageView; import android.widget.TextView; -import com.mapbox.mapboxandroiddemo.MainActivity; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxandroiddemo.model.ExampleItemModel; import com.squareup.picasso.Picasso; +import java.util.ArrayList; import java.util.List; public class ExampleAdapter extends RecyclerView.Adapter { - private List dataSource; - private Context context; + private final List dataSource = new ArrayList<>(); + private final Context context; + private int viewType; - public ExampleAdapter(Context context, List dataSource) { - this.dataSource = dataSource; + public ExampleAdapter(Context context) { this.context = context; } + @NonNull @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // create a new view - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); - View view1 = LayoutInflater.from(parent.getContext()).inflate( - R.layout.layout_description_item, parent, false); - View view2 = LayoutInflater.from(parent.getContext()).inflate( - R.layout.layout_javaservices_description_card, parent, false); - View view3 = LayoutInflater.from(parent.getContext()).inflate( - R.layout.layout_query_description_card, parent, false); - + View view; switch (viewType) { case 1: - return new ViewHolderDescription(view1); + view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.layout_description_item, parent, false); + break; case 2: - return new ViewHolderDescription(view2); + view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.layout_javaservices_description_card, parent, false); + break; case 3: - return new ViewHolderDescription(view3); + view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.layout_query_description_card, parent, false); + break; default: - return new ViewHolder(view); + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); } + + return new ViewHolder(view); } @Override public int getItemViewType(int position) { - if (((MainActivity) context).getCurrentCategory() == R.id.nav_lab && position == 0) { - return 1; - } else if (((MainActivity) context).getCurrentCategory() == R.id.nav_java_services && position == 0) { - return 2; - } else if (((MainActivity) context).getCurrentCategory() == R.id.nav_query_map && position == 0) { - return 3; - } - return 0; + return position == 0 ? viewType : 0; } @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder.getItemViewType() != 0) { return; } @@ -93,30 +89,51 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { @Override public int getItemCount() { - return (null != dataSource ? dataSource.size() : 0); + return dataSource.size(); } - public static class ViewHolder extends RecyclerView.ViewHolder { + public void updateDataSet(List examples, @IdRes int categoryId) { + dataSource.clear(); + dataSource.addAll(examples); - public TextView titleTextView; - public TextView descriptionTextView; - public ImageView imageView; - public ImageView newIconImageView; + viewType = getViewType(categoryId); + if (viewType > 0) { + dataSource.add(0, null); + } - public ViewHolder(final View itemView) { - super(itemView); + notifyDataSetChanged(); + } + + public ExampleItemModel getItemAt(int position) { + return dataSource.get(position); + } - imageView = (ImageView) itemView.findViewById(R.id.example_image); - titleTextView = (TextView) itemView.findViewById(R.id.example_title); - descriptionTextView = (TextView) itemView.findViewById(R.id.example_description); - newIconImageView = (ImageView) itemView.findViewById(R.id.new_icon_image_view); + private int getViewType(@IdRes int categoryId) { + if (categoryId == R.id.nav_lab) { + return 1; + } else if (categoryId == R.id.nav_java_services) { + return 2; + } else if (categoryId == R.id.nav_query_map) { + return 3; } + + return 0; } - public static class ViewHolderDescription extends RecyclerView.ViewHolder { + static class ViewHolder extends RecyclerView.ViewHolder { - public ViewHolderDescription(final View itemView) { + TextView titleTextView; + TextView descriptionTextView; + ImageView imageView; + ImageView newIconImageView; + + ViewHolder(final View itemView) { super(itemView); + + imageView = itemView.findViewById(R.id.example_image); + titleTextView = itemView.findViewById(R.id.example_title); + descriptionTextView = itemView.findViewById(R.id.example_description); + newIconImageView = itemView.findViewById(R.id.new_icon_image_view); } } } \ No newline at end of file diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/KotlinLocationPluginActivity.kt b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/KotlinLocationPluginActivity.kt new file mode 100644 index 000000000..650b3b4b6 --- /dev/null +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/KotlinLocationPluginActivity.kt @@ -0,0 +1,111 @@ +package com.mapbox.mapboxandroiddemo.examples.plugins + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.widget.Toast + +import com.mapbox.android.core.permissions.PermissionsListener +import com.mapbox.android.core.permissions.PermissionsManager +import com.mapbox.mapboxandroiddemo.R +import com.mapbox.mapboxsdk.Mapbox +import com.mapbox.mapboxsdk.maps.MapboxMap +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback +import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin +import com.mapbox.mapboxsdk.plugins.locationlayer.modes.CameraMode +import kotlinx.android.synthetic.main.activity_location_plugin.* + +/** + * Use the Location Layer plugin to easily add a device location "puck" to a Mapbox map. + */ +class KotlinLocationPluginActivity : AppCompatActivity(), OnMapReadyCallback, PermissionsListener { + + private val permissionsManager: PermissionsManager = PermissionsManager(this) + private lateinit var mapboxMap: MapboxMap + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Mapbox access token is configured here. This needs to be called either in your application + // object or in the same activity which contains the mapview. + Mapbox.getInstance(this, getString(R.string.access_token)) + + // This contains the MapView in XML and needs to be called after the access token is configured. + setContentView(R.layout.activity_location_plugin) + + mapView.onCreate(savedInstanceState) + mapView.getMapAsync(this) + } + + override fun onMapReady(mapboxMap: MapboxMap) { + this.mapboxMap = mapboxMap + enableLocationPlugin() + } + + private fun enableLocationPlugin() { + // Check if permissions are enabled and if not request + if (PermissionsManager.areLocationPermissionsGranted(this)) { + + // Create an instance of the plugin. Adding in LocationLayerOptions is also an optional + // parameter + val locationLayerPlugin = LocationLayerPlugin(mapView, mapboxMap) + + // Set the plugin's camera mode + locationLayerPlugin.cameraMode = CameraMode.TRACKING + lifecycle.addObserver(locationLayerPlugin) + } else { + permissionsManager.requestLocationPermissions(this) + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) + } + + override fun onExplanationNeeded(permissionsToExplain: List) { + Toast.makeText(this, R.string.user_location_permission_explanation, Toast.LENGTH_LONG).show() + } + + override fun onPermissionResult(granted: Boolean) { + if (granted) { + enableLocationPlugin() + } else { + Toast.makeText(this, R.string.user_location_permission_not_granted, Toast.LENGTH_LONG).show() + finish() + } + } + + override fun onStart() { + super.onStart() + mapView.onStart() + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onStop() { + super.onStop() + mapView.onStop() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() + } + + override fun onLowMemory() { + super.onLowMemory() + mapView.onLowMemory() + } +} \ No newline at end of file diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.java deleted file mode 100644 index 4815504c1..000000000 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.mapbox.mapboxandroiddemo.model; - -import android.content.Intent; - -import com.mapbox.mapboxandroiddemo.BuildConfig; - -public class ExampleItemModel { - // Just a model for the detailed item recycler - - public int title; - public int description; - public int imageUrl; - public Intent activity; - public boolean showNewIcon; - public int minSdkVersion; - - - public int getTitle() { - return title; - } - - public void setTitle(int title) { - this.title = title; - } - - public int getDescription() { - return description; - } - - public void setDescription(int description) { - this.description = description; - } - - public int getImageUrl() { - return imageUrl; - } - - public void setImageUrl(int imageUrl) { - this.imageUrl = imageUrl; - } - - public Intent getActivity() { - return activity; - } - - public void setActivity(Intent activity) { - this.activity = activity; - } - - public boolean getShowNewIcon() { - return showNewIcon; - } - - public void setShowNewIcon(boolean showNewIcon) { - this.showNewIcon = showNewIcon; - } - - public int getMinSdkVersion() { - return minSdkVersion; - } - - public ExampleItemModel(int title, int description, Intent activity, int imageUrl, - boolean showNewIcon, int minSdkVersion) { - this.title = title; - this.description = description; - this.imageUrl = imageUrl; - this.activity = activity; - this.showNewIcon = showNewIcon; - this.minSdkVersion = minSdkVersion; - } - - public ExampleItemModel(int title, int description, Intent activity, int imageUrl) { - this.title = title; - this.description = description; - this.imageUrl = imageUrl; - this.activity = activity; - this.showNewIcon = false; - this.minSdkVersion = BuildConfig.MIN_SDK_VERSION; - } -} \ No newline at end of file diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.kt b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.kt new file mode 100644 index 000000000..1496cff07 --- /dev/null +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/model/ExampleItemModel.kt @@ -0,0 +1,8 @@ +package com.mapbox.mapboxandroiddemo.model + +import android.content.Intent + +// Just a model for the detailed item recycler +class ExampleItemModel(val categoryId: Int, val title: Int, val description: Int, val javaActivity: Intent?, + val kotlinActivity: Intent?, val imageUrl: Int, val showNewIcon: Boolean, + val minSdkVersion: Int) \ No newline at end of file diff --git a/MapboxAndroidDemo/src/main/res/layout-land/content_main.xml b/MapboxAndroidDemo/src/main/res/layout-land/content_main.xml index b799833ec..24a110bef 100644 --- a/MapboxAndroidDemo/src/main/res/layout-land/content_main.xml +++ b/MapboxAndroidDemo/src/main/res/layout-land/content_main.xml @@ -1,6 +1,5 @@ - + android:paddingTop="6dp" /> - + + + diff --git a/MapboxAndroidDemo/src/main/res/layout/content_main.xml b/MapboxAndroidDemo/src/main/res/layout/content_main.xml index 3ce55da41..9988d1b7f 100644 --- a/MapboxAndroidDemo/src/main/res/layout/content_main.xml +++ b/MapboxAndroidDemo/src/main/res/layout/content_main.xml @@ -1,6 +1,5 @@ - + android:paddingTop="6dp" /> - + + + diff --git a/MapboxAndroidDemo/src/main/res/menu/menu_activity_main.xml b/MapboxAndroidDemo/src/main/res/menu/menu_activity_main.xml index f65a0ff8f..97ec5ed45 100644 --- a/MapboxAndroidDemo/src/main/res/menu/menu_activity_main.xml +++ b/MapboxAndroidDemo/src/main/res/menu/menu_activity_main.xml @@ -1,11 +1,15 @@ - + app:showAsAction="ifRoom" /> + diff --git a/MapboxAndroidDemo/src/main/res/values/strings.xml b/MapboxAndroidDemo/src/main/res/values/strings.xml index 7abc06d3b..76146e01a 100644 --- a/MapboxAndroidDemo/src/main/res/values/strings.xml +++ b/MapboxAndroidDemo/src/main/res/values/strings.xml @@ -1 +1,5 @@ - + + No examples in the\nchosen programming language + To Kotlin + To Java +