├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── release │ └── .gitignore └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── nextgis │ │ └── mobile │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── ic_launcher-web.png │ ├── java │ └── com │ │ ├── getbase │ │ └── floatingactionbutton │ │ │ ├── AddFloatingActionButton.java │ │ │ ├── FloatingActionButton.java │ │ │ └── FloatingActionsMenu.java │ │ └── nextgis │ │ └── mobile │ │ ├── MainApplication.java │ │ ├── activity │ │ ├── AboutActivity.java │ │ ├── CreateVectorLayerActivity.java │ │ ├── IntroActivity.java │ │ ├── MainActivity.java │ │ └── SettingsActivity.java │ │ ├── datasource │ │ ├── SyncAdapter.java │ │ └── SyncService.java │ │ ├── dialog │ │ └── NewFieldDialog.java │ │ ├── fragment │ │ ├── AttributesFragment.java │ │ ├── FullCompassFragment.java │ │ ├── LayersFragment.java │ │ ├── MapFragment.java │ │ ├── ReorderedLayerViewAnimated.java │ │ ├── SettingsFragment.java │ │ └── SettingsHeaderFragment.java │ │ └── util │ │ ├── AppConstants.java │ │ ├── AppSettingsConstants.java │ │ ├── AutoFitTextView.java │ │ ├── CustomLogMessageFormat.java │ │ ├── CustomPreference.java │ │ ├── IntEditTextPreference.java │ │ ├── Logger.java │ │ ├── OfflineSyncIntentService.java │ │ ├── SDCardReceiver.java │ │ ├── SDCardUtils.java │ │ └── SelectMapPathPreference.java │ └── res │ ├── drawable-hdpi │ ├── drawer_shadow.9.png │ ├── fab_bg_mini.png │ ├── fab_bg_normal.png │ ├── ic_action_add_layer.png │ ├── ic_action_location_found.png │ ├── ic_action_maps_place.png │ ├── ic_action_sync.png │ ├── ic_drawer.png │ ├── ic_launcher.png │ └── ic_ruler.png │ ├── drawable-mdpi │ ├── drawer_shadow.9.png │ ├── fab_bg_mini.png │ ├── fab_bg_normal.png │ ├── ic_action_add_layer.png │ ├── ic_action_location_found.png │ ├── ic_action_maps_place.png │ ├── ic_action_sync.png │ ├── ic_drawer.png │ ├── ic_launcher.png │ └── ic_ruler.png │ ├── drawable-xhdpi │ ├── drawer_shadow.9.png │ ├── fab_bg_mini.png │ ├── fab_bg_normal.png │ ├── ic_action_add_layer.png │ ├── ic_action_location_found.png │ ├── ic_action_maps_place.png │ ├── ic_action_sync.png │ ├── ic_drawer.png │ ├── ic_launcher.png │ └── ic_ruler.png │ ├── drawable-xxhdpi │ ├── drawer_shadow.9.png │ ├── fab_bg_mini.png │ ├── fab_bg_normal.png │ ├── ic_action_add_layer.png │ ├── ic_action_location_found.png │ ├── ic_action_maps_place.png │ ├── ic_action_sync.png │ ├── ic_drawer.png │ ├── ic_launcher.png │ └── ic_ruler.png │ ├── drawable-xxxhdpi │ ├── fab_bg_mini.png │ ├── fab_bg_normal.png │ ├── ic_launcher.png │ └── ic_ruler.png │ ├── drawable │ ├── intro.jpg │ ├── intro_logo.png │ ├── message_box.xml │ ├── point_blue.xml │ ├── point_indigo.xml │ ├── point_red.xml │ └── point_yellow.xml │ ├── layout-land │ ├── fragment_intro1.xml │ ├── fragment_intro2.xml │ ├── fragment_map.xml │ └── status_panel.xml │ ├── layout │ ├── activity_about.xml │ ├── activity_intro.xml │ ├── activity_main.xml │ ├── activity_new_layer.xml │ ├── copy_uid_preference.xml │ ├── dialog_new_field.xml │ ├── fragment_about.xml │ ├── fragment_attributes.xml │ ├── fragment_attributes_tab.xml │ ├── fragment_compass_full.xml │ ├── fragment_contacts.xml │ ├── fragment_intro1.xml │ ├── fragment_intro2.xml │ ├── fragment_intro_login.xml │ ├── fragment_layers.xml │ ├── fragment_map.xml │ ├── fragment_map_tab.xml │ ├── item_field.xml │ ├── layout_refresh.xml │ ├── status_panel.xml │ └── status_panel_land.xml │ ├── menu │ ├── add_layer.xml │ ├── attributes.xml │ ├── main.xml │ └── select_action.xml │ ├── mipmap-hdpi │ ├── ic_location_moving.png │ └── ic_location_standing.png │ ├── mipmap-mdpi │ ├── ic_location_moving.png │ └── ic_location_standing.png │ ├── mipmap-xhdpi │ ├── ic_location_moving.png │ └── ic_location_standing.png │ ├── mipmap-xxhdpi │ ├── ic_location_moving.png │ └── ic_location_standing.png │ ├── mipmap-xxxhdpi │ ├── ic_location_moving.png │ └── ic_location_standing.png │ ├── raw │ └── mapnik.zip │ ├── values-cs │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-hi │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-large │ └── layout.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-sw600dp │ └── layout.xml │ ├── values-uk │ └── strings.xml │ ├── values-w820dp │ └── dimens.xml │ ├── values │ ├── arrays.xml │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── app_tracker.xml │ ├── preference_headers.xml │ ├── preferences_general.xml │ ├── preferences_location.xml │ ├── preferences_map.xml │ ├── preferences_tracks.xml │ └── syncadapter.xml ├── art ├── NextGIS-Mobile-eng.png ├── accuracy.svg ├── add_hole.svg ├── add_line.svg ├── add_lines.svg ├── add_point.svg ├── add_points.svg ├── add_polygon.svg ├── add_polygons.svg ├── altitude.svg ├── appIcon.svg ├── compas_bezel.svg ├── compas_bezel_2.svg ├── delete_hole.svg ├── delete_line.svg ├── delete_lines.svg ├── delete_point.svg ├── delete_points.svg ├── delete_polygon.svg ├── delete_polygons.svg ├── myplace_cursor.svg ├── nextgis-mobile.png ├── ngw.svg ├── point_selector.svg ├── point_to_center.svg ├── point_to_location.svg └── speed.svg ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── wizardpager ├── build.gradle ├── gradle.properties └── src └── main ├── AndroidManifest.xml ├── java └── com │ └── tech │ └── freak │ └── wizardpager │ ├── model │ ├── AbstractWizardModel.java │ ├── BranchPage.java │ ├── GeoPage.java │ ├── ImagePage.java │ ├── ModelCallbacks.java │ ├── MultipleFixedChoicePage.java │ ├── NumberPage.java │ ├── Page.java │ ├── PageList.java │ ├── PageTreeNode.java │ ├── ReviewItem.java │ ├── SimpleLocationListener.java │ ├── SingleFixedChoicePage.java │ └── TextPage.java │ └── ui │ ├── GeoFragment.java │ ├── ImageFragment.java │ ├── MultipleChoiceFragment.java │ ├── NumberFragment.java │ ├── PageFragmentCallbacks.java │ ├── ReviewFragment.java │ ├── SingleChoiceFragment.java │ ├── StepPagerStrip.java │ └── TextFragment.java └── res ├── drawable-hdpi └── ic_person.png ├── drawable-mdpi └── ic_person.png ├── drawable-xhdpi └── ic_person.png ├── drawable-xxhdpi └── ic_person.png ├── layout ├── fragment_page.xml ├── fragment_page_geo.xml ├── fragment_page_image.xml ├── fragment_page_text.xml └── list_item_review.xml ├── values-v14 └── styles.xml ├── values-v16 └── styles.xml └── values ├── colors.xml ├── dimens.xml ├── strings.xml └── styles.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Android studio 2 | .idea/ 3 | .gradle/ 4 | build/ 5 | local.properties 6 | captures/ 7 | *.iml 8 | *.iws 9 | *.ipr 10 | *.apk 11 | 12 | # Temp files 13 | *~ 14 | 15 | # OSX files 16 | .DS_Store 17 | 18 | # Sentry settings 19 | sentry.properties -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "maplib"] 2 | path = maplib 3 | url = git@github.com:nextgis/android_maplib.git 4 | branch = master 5 | [submodule "maplibui"] 6 | path = maplibui 7 | url = git@github.com:nextgis/android_maplibui.git 8 | branch = master 9 | [submodule "easypicker"] 10 | path = easypicker 11 | url = git@github.com:nextgis/easypicker.git 12 | branch = master 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | NextGIS Mobile 2 | ============== 3 | 4 | ![Screenshot_1](/art/NextGIS-Mobile-eng.png) 5 | 6 | GIS application for Android. Current version 2.4 is available in [Google Play](https://play.google.com/store/apps/details?id=com.nextgis.mobile) and [here](https://github.com/nextgis/android_gisapp/releases/tag/v2.4). 7 | 8 | The v.1.x versions can be found [here](https://github.com/nextgis/nextgismobile_old/releases) 9 | 10 | Official homepage: http://nextgis.com/nextgis-mobile 11 | 12 | Build status 13 | ============ 14 | 15 | ![build status](http://176.9.38.120/buildbot/png?builder=ngmob) 16 | [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/nextgis/android_gisapp.svg)](http://isitmaintained.com/project/nextgis/android_gisapp "Average time to resolve an issue") 17 | [![Percentage of issues still open](http://isitmaintained.com/badge/open/nextgis/android_gisapp.svg)](http://isitmaintained.com/project/nextgis/android_gisapp "Percentage of issues still open") 18 | [![Platform](https://img.shields.io/badge/Platform-Android-green.svg?maxAge=2592000)]() 19 | 20 | License 21 | ======= 22 | 23 | The application is licensed under the terms of GNU GPL v3 or any later version. 24 | 25 | [![License](https://img.shields.io/badge/License-GPL%20v3-blue.svg?maxAge=2592000)]() 26 | 27 | Commercial support 28 | ================== 29 | 30 | Need to fix a bug or add a feature to android_gisapp (NextGIS Mobile)? We provide custom development and support for this software. [Contact us](http://nextgis.ru/en/contact/) to discuss options! 31 | 32 | [![http://nextgis.com](http://nextgis.ru/img/nextgis.png)](http://nextgis.com) 33 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | google-services.json 2 | /build 3 | /*.apk -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /opt/sdk/tools/proguard/proguard-android.txt 4 | # You can edit_point the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/release/.gitignore: -------------------------------------------------------------------------------- 1 | *.json -------------------------------------------------------------------------------- /app/src/androidTest/java/com/nextgis/mobile/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Dmitry Baryshnikov (aka Bishop), bishop.dev@gmail.com 5 | * Author: NikitaFeodonit, nfeodonit@yandex.com 6 | * Author: Stanislav Petriakov, becomeglory@gmail.com 7 | * ***************************************************************************** 8 | * Copyright (c) 2012-2015. NextGIS, info@nextgis.com 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program. If not, see . 22 | */ 23 | 24 | package com.nextgis.mobile; 25 | 26 | import android.app.Application; 27 | import android.test.ApplicationTestCase; 28 | 29 | 30 | /** 31 | * Testing Fundamentals 32 | */ 33 | public class ApplicationTest 34 | extends ApplicationTestCase 35 | { 36 | public ApplicationTest() 37 | { 38 | super(Application.class); 39 | } 40 | } -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/dialog/NewFieldDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Stanislav Petriakov, becomeglory@gmail.com 5 | * ***************************************************************************** 6 | * Copyright (c) 2015-2016 NextGIS, info@nextgis.com 7 | * 8 | * This program is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU Lesser General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU Lesser Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public License 19 | * along with this program. If not, see . 20 | */ 21 | 22 | package com.nextgis.mobile.dialog; 23 | 24 | import android.app.Dialog; 25 | import android.content.DialogInterface; 26 | import android.os.Bundle; 27 | import androidx.annotation.NonNull; 28 | import androidx.appcompat.app.AlertDialog; 29 | import android.view.View; 30 | import android.widget.EditText; 31 | import android.widget.Spinner; 32 | 33 | import com.nextgis.maplibui.dialog.NGDialog; 34 | import com.nextgis.mobile.R; 35 | 36 | public class NewFieldDialog extends NGDialog { 37 | private OnFieldChooseListener mListener; 38 | 39 | public interface OnFieldChooseListener { 40 | void OnFieldChosen(String name, int type); 41 | } 42 | 43 | public NewFieldDialog setOnFieldChooseListener(OnFieldChooseListener listener) { 44 | mListener = listener; 45 | return this; 46 | } 47 | 48 | @NonNull 49 | @Override 50 | public Dialog onCreateDialog(Bundle savedInstanceState) { 51 | super.onCreateDialog(savedInstanceState); 52 | 53 | View view = View.inflate(mContext, R.layout.dialog_new_field, null); 54 | final EditText name = (EditText) view.findViewById(R.id.et_field_name); 55 | final Spinner type = (Spinner) view.findViewById(R.id.sp_field_type); 56 | 57 | AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 58 | builder.setTitle(mTitle).setView(view).setNegativeButton(android.R.string.cancel, null) 59 | .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 60 | @Override 61 | public void onClick(DialogInterface dialog, int which) { 62 | if (mListener != null) { 63 | int fieldType = getResources().getIntArray(com.nextgis.maplibui.R.array.field_types)[type.getSelectedItemPosition()]; 64 | String alias = name.getText().toString().trim(); 65 | mListener.OnFieldChosen(alias, fieldType); 66 | } 67 | } 68 | }); 69 | AlertDialog dialog = builder.create(); 70 | dialog.setCanceledOnTouchOutside(false); 71 | return dialog; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/fragment/FullCompassFragment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Stanislav Petriakov, becomeglory@gmail.com 5 | * ***************************************************************************** 6 | * Copyright (c) 2015-2017 NextGIS, info@nextgis.com 7 | * 8 | * This program is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU Lesser Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program. If not, see . 20 | */ 21 | 22 | package com.nextgis.mobile.fragment; 23 | 24 | import android.content.SharedPreferences; 25 | import android.os.Bundle; 26 | import android.preference.PreferenceManager; 27 | import android.view.LayoutInflater; 28 | import android.view.Menu; 29 | import android.view.MenuItem; 30 | import android.view.View; 31 | import android.view.ViewGroup; 32 | import android.widget.FrameLayout; 33 | 34 | import com.nextgis.maplibui.fragment.CompassFragment; 35 | import com.nextgis.maplibui.util.SettingsConstantsUI; 36 | import com.nextgis.mobile.R; 37 | import com.nextgis.mobile.activity.MainActivity; 38 | import com.nineoldandroids.view.ViewHelper; 39 | 40 | public class FullCompassFragment extends CompassFragment { 41 | protected MainActivity mActivity; 42 | 43 | @Override 44 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 45 | setHasOptionsMenu(true); 46 | mActivity = (MainActivity) getActivity(); 47 | mActivity.hideBottomBar(); 48 | 49 | View view = inflater.inflate(R.layout.fragment_compass_full, container, false); 50 | FrameLayout compassContainer = (FrameLayout) view.findViewById(R.id.compass_container); 51 | compassContainer.addView(super.onCreateView(inflater, container, savedInstanceState)); 52 | view.findViewById(R.id.action_add_point).setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View view) { 55 | 56 | } 57 | }); 58 | return view; 59 | } 60 | 61 | @Override 62 | public void onResume() { 63 | super.onResume(); 64 | 65 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity); 66 | mIsVibrationOn = prefs.getBoolean(SettingsConstantsUI.KEY_PREF_COMPASS_VIBRATE, true); 67 | mParent.setKeepScreenOn(prefs.getBoolean(SettingsConstantsUI.KEY_PREF_COMPASS_KEEP_SCREEN, true)); 68 | mTrueNorth = prefs.getBoolean(SettingsConstantsUI.KEY_PREF_COMPASS_TRUE_NORTH, true); 69 | mShowMagnetic = prefs.getBoolean(SettingsConstantsUI.KEY_PREF_COMPASS_MAGNETIC, true); 70 | 71 | mActivity.setActionBarState(false); 72 | mActivity.setTitle(R.string.compass_title); 73 | } 74 | 75 | @Override 76 | public void onPrepareOptionsMenu(Menu menu) 77 | { 78 | for (int i = 0; i < menu.size(); i++) { 79 | MenuItem item = menu.getItem(i); 80 | if (item.getItemId() == R.id.menu_about || item.getItemId() == R.id.menu_settings) { 81 | continue; 82 | } 83 | item.setVisible(false); 84 | } 85 | super.onPrepareOptionsMenu(menu); 86 | } 87 | 88 | @Override 89 | public void onDestroyView() 90 | { 91 | mActivity.restoreBottomBar(-1); 92 | mActivity.setTitle(mActivity.getAppName()); 93 | super.onDestroyView(); 94 | } 95 | 96 | 97 | @Override 98 | public void updateCompass(float azimuth) { 99 | float alpha = 1f; 100 | if (mShowMagnetic) { 101 | alpha = .3f; 102 | } 103 | 104 | ViewHelper.setAlpha(mCompassNeedleMagnetic, alpha); 105 | ViewHelper.setAlpha(mCompassNeedle, alpha); 106 | 107 | super.updateCompass(azimuth); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/fragment/SettingsHeaderFragment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Dmitry Baryshnikov (aka Bishop), bishop.dev@gmail.com 5 | * Author: NikitaFeodonit, nfeodonit@yandex.com 6 | * Author: Stanislav Petriakov, becomeglory@gmail.com 7 | * ***************************************************************************** 8 | * Copyright (c) 2012-2018 NextGIS, info@nextgis.com 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program. If not, see . 22 | */ 23 | 24 | package com.nextgis.mobile.fragment; 25 | 26 | import androidx.preference.PreferenceScreen; 27 | 28 | import com.nextgis.maplib.util.AccountUtil; 29 | import com.nextgis.maplibui.fragment.NGPreferenceHeaderFragment; 30 | import com.nextgis.maplibui.util.SettingsConstantsUI; 31 | import com.nextgis.mobile.R; 32 | 33 | 34 | public class SettingsHeaderFragment 35 | extends NGPreferenceHeaderFragment 36 | { 37 | @Override 38 | protected void createPreferences(PreferenceScreen screen) 39 | { 40 | addPreferencesFromResource(R.xml.preference_headers); 41 | if (getActivity() != null && !AccountUtil.isUserExists(getActivity())) 42 | screen.findPreference(SettingsConstantsUI.ACTION_PREFS_NGW).setIcon(com.nextgis.maplibui.R.drawable.ic_lock_black_24dp); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/AppConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Dmitry Baryshnikov (aka Bishop), bishop.dev@gmail.com 5 | * Author: NikitaFeodonit, nfeodonit@yandex.com 6 | * Author: Stanislav Petriakov, becomeglory@gmail.com 7 | * ***************************************************************************** 8 | * Copyright (c) 2012-2017 NextGIS, info@nextgis.com 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program. If not, see . 22 | */ 23 | 24 | package com.nextgis.mobile.util; 25 | 26 | public interface AppConstants 27 | { 28 | /** 29 | * Fragments tags 30 | */ 31 | String FRAGMENT_SETTINGS_HEADER_FRAGMENT = "settings_header_fragment"; 32 | String FRAGMENT_SETTINGS_FRAGMENT = "settings_fragment"; 33 | 34 | int DEFAULT_COORDINATES_FRACTION_DIGITS = 6; 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/AppSettingsConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Dmitry Baryshnikov (aka Bishop), bishop.dev@gmail.com 5 | * Author: NikitaFeodonit, nfeodonit@yandex.com 6 | * Author: Stanislav Petriakov, becomeglory@gmail.com 7 | * ***************************************************************************** 8 | * Copyright (c) 2012-2018 NextGIS, info@nextgis.com 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program. If not, see . 22 | */ 23 | 24 | package com.nextgis.mobile.util; 25 | 26 | import com.nextgis.mobile.BuildConfig; 27 | 28 | public interface AppSettingsConstants 29 | { 30 | String AUTHORITY = BuildConfig.providerAuth; //"com.nextgis.mobile.provider"; 31 | 32 | /** 33 | * Preference key - not UI 34 | */ 35 | String KEY_PREF_SHOW_LOCATION = "map_show_loc"; 36 | String KEY_PREF_SHOW_COMPASS = "map_show_compass"; 37 | String KEY_PREF_SHOW_INFO = "map_show_info"; 38 | String KEY_PREF_APP_VERSION = "app_version"; 39 | String KEY_PREF_SHOW_SYNC = "show_sync"; 40 | 41 | /** 42 | * Preference keys - in UI 43 | */ 44 | String KEY_PREF_STORAGE_SITE = "storage_site"; 45 | String KEY_PREF_USER_ID = "user_id"; 46 | String KEY_PREF_MIN_DIST_CHNG_UPD = "min_dist_change_for_update"; 47 | String KEY_PREF_MIN_TIME_UPD = "min_time_beetwen_updates"; 48 | String KEY_PREF_SW_TRACK_SRV = "sw_track_service"; 49 | String KEY_PREF_SW_TRACKGPX_SRV = "sw_trackgpx_service"; 50 | String KEY_PREF_SHOW_LAYES_LIST = "show_layers_list"; 51 | String KEY_PREF_SW_SENDPOS_SRV = "sw_sendpos_service"; 52 | String KEY_PREF_SW_ENERGY_ECO = "sw_energy_economy"; 53 | String KEY_PREF_TIME_DATASEND = "time_between_datasend"; 54 | String KEY_PREF_ACCURATE_LOC = "accurate_coordinates_pick"; 55 | String KEY_PREF_ACCURATE_GPSCOUNT = "accurate_coordinates_pick_count"; 56 | String KEY_PREF_ACCURATE_CE = "accurate_type"; 57 | String KEY_PREF_TILE_SIZE = "map_tile_size"; 58 | String KEY_PREF_COMPASS_VIBRO = "compass_vibration"; 59 | String KEY_PREF_COMPASS_TRUE_NORTH = "compass_true_north"; 60 | String KEY_PREF_COMPASS_SHOW_MAGNET = "compass_show_magnetic"; 61 | String KEY_PREF_COMPASS_WAKE_LOCK = "compass_wake_lock"; 62 | String KEY_PREF_SHOW_ZOOM_CONTROLS = "show_zoom_controls"; 63 | String KEY_PREF_SHOW_SCALE_RULER = "show_scale_ruler"; 64 | String KEY_PREF_SHOW_MEASURING = "show_ruler_measuring"; 65 | String KEY_PREF_GA = "ga_enabled"; 66 | String KEY_PREF_INTRO = "app_intro"; 67 | String KEY_PREF_SHOW_ZOOM = "show_zoom_level"; 68 | 69 | int FIRSTSTART_DOWNLOADZOOM = 5; 70 | 71 | String GA_SCREEN_ABOUT = "About Screen"; 72 | String GA_SCREEN_SUPPORT = "Support Screen"; 73 | 74 | String APK_VERSION_UPDATE = "https://my.nextgis.com/downloads/software/mobile/version"; 75 | } 76 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/CustomLogMessageFormat.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Stanislav Petriakov, becomeglory@gmail.com 5 | * **************************************************************************** 6 | * Copyright (c) 2021 NextGIS, info@nextgis.com 7 | * 8 | * This program is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program. If not, see . 20 | */ 21 | 22 | package com.nextgis.mobile.util; 23 | 24 | import android.content.Context; 25 | 26 | import com.hypertrack.hyperlog.LogFormat; 27 | import com.nextgis.mobile.BuildConfig; 28 | 29 | public class CustomLogMessageFormat extends LogFormat { 30 | public CustomLogMessageFormat(Context context) { 31 | super(context); 32 | } 33 | 34 | @Override 35 | public String getFormattedLogMessage(String logLevelName, String tag, String message, String timeStamp, String senderName, String osVersion, 36 | String deviceUUID) { 37 | String uuid = deviceUUID; 38 | if (uuid == null) { 39 | uuid = "DeviceUUID"; 40 | } 41 | String appTag = BuildConfig.VERSION_NAME; 42 | return timeStamp + " | " + senderName + " : " + osVersion + " | " + uuid + " | [" + logLevelName + "/" + appTag + "]: " + message; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/CustomPreference.java: -------------------------------------------------------------------------------- 1 | package com.nextgis.mobile.util; 2 | 3 | import android.content.ClipData; 4 | import android.content.ClipboardManager; 5 | import android.content.Context; 6 | import android.util.AttributeSet; 7 | import android.view.View; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | import android.widget.Toast; 11 | 12 | import androidx.preference.Preference; 13 | import androidx.preference.PreferenceViewHolder; 14 | 15 | import com.nextgis.mobile.R; 16 | 17 | import java.lang.ref.WeakReference; 18 | 19 | public class CustomPreference extends Preference { 20 | 21 | private WeakReference uidView = new WeakReference<>(null); 22 | String uid = ""; 23 | 24 | public CustomPreference(Context context, AttributeSet attrs) { 25 | super(context, attrs); 26 | setLayoutResource(R.layout.copy_uid_preference); 27 | } 28 | 29 | @Override 30 | public void onBindViewHolder(PreferenceViewHolder holder) { 31 | super.onBindViewHolder(holder); 32 | TextView textViewUID = (TextView) holder.findViewById(R.id.preference_uid); 33 | uidView = new WeakReference<>(textViewUID); 34 | if (uidView.get() != null) 35 | uidView.get().setText(uid); 36 | 37 | ImageView imageView = (ImageView) holder.findViewById(R.id.preference_icon); 38 | imageView.setImageResource(com.nextgis.maplibui.R.drawable.ic_action_content_copy); 39 | 40 | imageView.setOnClickListener(v -> { 41 | final ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); 42 | final ClipData clip = ClipData.newPlainText("uid", uid); 43 | clipboard.setPrimaryClip(clip); 44 | Toast.makeText(getContext(), R.string.copied, Toast.LENGTH_LONG).show(); 45 | }); 46 | } 47 | 48 | @Override 49 | public void setLayoutResource(int layoutResId) { 50 | super.setLayoutResource(layoutResId); 51 | } 52 | 53 | 54 | 55 | public void setUID(final String uid){ 56 | this.uid = uid; 57 | if (uidView.get() != null) 58 | uidView.get().setText(uid); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/IntEditTextPreference.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: NikitaFeodonit, nfeodonit@yandex.com 5 | * Author: Stanislav Petriakov, becomeglory@gmail.com 6 | * ***************************************************************************** 7 | * Copyright (c) 2016-2017, 2019 NextGIS, info@nextgis.com 8 | * 9 | * This program is free software: you can redistribute it and/or modify 10 | * it under the terms of the GNU General Public License as published by 11 | * the Free Software Foundation, either version 3 of the License, or 12 | * (at your option) any later version. 13 | * 14 | * This program is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | * GNU General Public License for more details. 18 | * 19 | * You should have received a copy of the GNU General Public License 20 | * along with this program. If not, see . 21 | */ 22 | 23 | package com.nextgis.mobile.util; 24 | 25 | import android.content.Context; 26 | import androidx.preference.EditTextPreference; 27 | import android.util.AttributeSet; 28 | 29 | public class IntEditTextPreference extends EditTextPreference 30 | { 31 | public IntEditTextPreference(Context context) { 32 | super(context); 33 | } 34 | 35 | public IntEditTextPreference(Context context, AttributeSet attrs) { 36 | super(context, attrs); 37 | } 38 | 39 | public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 40 | super(context, attrs, defStyle); 41 | } 42 | 43 | public IntEditTextPreference( 44 | Context context, 45 | AttributeSet attrs, 46 | int defStyleAttr, 47 | int defStyleRes) 48 | { 49 | super(context, attrs, defStyleAttr, defStyleRes); 50 | } 51 | 52 | @Override 53 | public String getPersistedString(String defaultReturnValue) { 54 | int def = -1; 55 | try { 56 | def = Integer.parseInt(defaultReturnValue); 57 | } catch (Exception ignored) {} 58 | return String.valueOf(getPersistedInt(def)); 59 | } 60 | 61 | @Override 62 | public boolean persistString(String value) { 63 | return persistInt(Integer.valueOf(value)); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/Logger.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Project: NextGIS Mobile 3 | * Purpose: Mobile GIS for Android. 4 | * Author: Stanislav Petriakov, becomeglory@gmail.com 5 | * **************************************************************************** 6 | * Copyright (c) 2021 NextGIS, info@nextgis.com 7 | * 8 | * This program is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program. If not, see . 20 | */ 21 | 22 | package com.nextgis.mobile.util; 23 | 24 | import android.content.Context; 25 | import android.util.Log; 26 | 27 | import com.hypertrack.hyperlog.HyperLog; 28 | 29 | public final class Logger { 30 | public static void initialize(Context context) { 31 | HyperLog.initialize(context); 32 | HyperLog.setLogLevel(Log.VERBOSE); 33 | HyperLog.setLogFormat(new CustomLogMessageFormat(context)); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/OfflineSyncIntentService.java: -------------------------------------------------------------------------------- 1 | package com.nextgis.mobile.util; 2 | 3 | import android.accounts.Account; 4 | import android.accounts.AccountManager; 5 | import android.app.IntentService; 6 | import android.content.Intent; 7 | import android.content.Context; 8 | import android.content.SyncResult; 9 | 10 | import com.nextgis.maplib.api.IGISApplication; 11 | import com.nextgis.maplib.api.INGWLayer; 12 | 13 | import com.nextgis.maplib.map.MapContentProviderHelper; 14 | import com.nextgis.mobile.datasource.SyncAdapter; 15 | 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | /** 20 | * An {@link IntentService} subclass for handling asynchronous task requests in 21 | * a service on a separate handler thread. 22 | *

23 | *

24 | * TODO: Customize class - update intent actions, extra parameters and static 25 | * helper methods. 26 | */ 27 | public class OfflineSyncIntentService extends IntentService { 28 | 29 | private static final String ACTION_OFFSYNC = "com.nextgis.mobile.util.action.OFFSYNC"; 30 | 31 | public OfflineSyncIntentService() { 32 | super("OfflineSyncIntentService"); 33 | } 34 | 35 | public static void startActionFoo(Context context) { 36 | Intent intent = new Intent(context, OfflineSyncIntentService.class); 37 | intent.setAction(ACTION_OFFSYNC); 38 | context.startService(intent); 39 | } 40 | 41 | @Override 42 | protected void onHandleIntent(Intent intent) { 43 | if (intent != null) { 44 | final String action = intent.getAction(); 45 | if (ACTION_OFFSYNC.equals(action)) { 46 | handleActionFoo(); 47 | } 48 | } 49 | } 50 | 51 | private void handleActionFoo() { 52 | 53 | List mAccounts = new ArrayList<>(); 54 | final AccountManager accountManager = AccountManager.get(getApplicationContext()); 55 | final IGISApplication application = (IGISApplication) getApplication(); 56 | List layers = new ArrayList<>(); 57 | 58 | for (Account account : accountManager.getAccountsByType(application.getAccountsType())) { 59 | layers.clear(); 60 | MapContentProviderHelper.getLayersByAccount(application.getMap(), account.name, layers); 61 | 62 | if (layers.size() > 0 ) 63 | mAccounts.add(account); 64 | } 65 | 66 | SyncResult syncResult = new SyncResult(); 67 | 68 | SyncAdapter syncAdapter = new SyncAdapter(getApplicationContext(), true); 69 | 70 | 71 | for (Account account : mAccounts){ 72 | syncAdapter.onPerformSync(account, null, com.nextgis.mobile.util.AppSettingsConstants.AUTHORITY, 73 | null, syncResult); 74 | } 75 | } 76 | 77 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/SDCardReceiver.java: -------------------------------------------------------------------------------- 1 | package com.nextgis.mobile.util; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.BroadcastReceiver; 5 | import android.content.Context; 6 | import android.content.Intent; 7 | import android.content.IntentFilter; 8 | import android.os.Environment; 9 | import android.os.Handler; 10 | 11 | import com.nextgis.mobile.activity.MainActivity; 12 | 13 | public class SDCardReceiver extends BroadcastReceiver { 14 | @Override 15 | public void onReceive(Context context, Intent intent) { 16 | String action = intent.getAction(); 17 | 18 | String nameSD = intent.getData().getPath(); 19 | if (action.equals(Intent.ACTION_MEDIA_EJECT)) { 20 | AlertDialog.Builder builder = new AlertDialog.Builder(context); 21 | builder.setMessage("Карточку вытащили") 22 | .setPositiveButton("ok", null) 23 | .setTitle("SD Card"); 24 | AlertDialog alertDialog=builder.create(); 25 | alertDialog.show(); 26 | // SD card has been removed 27 | } else if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) { 28 | // SD card has been mounted 29 | } 30 | } 31 | 32 | // public void registerReceiver(Context context) { 33 | // IntentFilter filter = new IntentFilter(); 34 | // filter.addAction(Intent.ACTION_MEDIA_EJECT); 35 | // filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 36 | // filter.addDataScheme("file"); 37 | // context.registerReceiver(this, filter ); 38 | // } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/nextgis/mobile/util/SDCardUtils.java: -------------------------------------------------------------------------------- 1 | package com.nextgis.mobile.util; 2 | 3 | import static com.nextgis.maplib.util.SettingsConstants.KEY_PREF_SD_CARD_NAME; 4 | 5 | import android.content.Context; 6 | import android.content.SharedPreferences; 7 | import android.preference.PreferenceManager; 8 | import android.text.TextUtils; 9 | 10 | import androidx.core.content.ContextCompat; 11 | 12 | import java.io.File; 13 | 14 | public class SDCardUtils{ 15 | public static boolean isSDCardUsedAndExtracted(Context context){ 16 | 17 | SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 18 | String sdCardName = mSharedPreferences.getString(KEY_PREF_SD_CARD_NAME, ""); 19 | 20 | if (!TextUtils.isEmpty(sdCardName)){ 21 | // sd card used 22 | boolean sdStillExists = false; 23 | File[] files = ContextCompat.getExternalFilesDirs(context, null); 24 | for (File file : files){ 25 | if (file != null && file.getAbsolutePath().contains(sdCardName)) 26 | sdStillExists = true; 27 | 28 | } 29 | if (!sdStillExists) 30 | return true; 31 | } 32 | return false; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/fab_bg_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/fab_bg_mini.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/fab_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/fab_bg_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_add_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_action_add_layer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_location_found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_action_location_found.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_maps_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_action_maps_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_action_sync.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_drawer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-hdpi/ic_ruler.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/fab_bg_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/fab_bg_mini.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/fab_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/fab_bg_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_add_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_action_add_layer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_location_found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_action_location_found.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_maps_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_action_maps_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_action_sync.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_drawer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-mdpi/ic_ruler.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/fab_bg_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/fab_bg_mini.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/fab_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/fab_bg_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_add_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_action_add_layer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_location_found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_action_location_found.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_maps_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_action_maps_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_action_sync.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_drawer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xhdpi/ic_ruler.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/fab_bg_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/fab_bg_mini.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/fab_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/fab_bg_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_add_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_action_add_layer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_location_found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_maps_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_action_maps_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_action_sync.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_drawer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxhdpi/ic_ruler.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/fab_bg_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxxhdpi/fab_bg_mini.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/fab_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxxhdpi/fab_bg_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable-xxxhdpi/ic_ruler.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable/intro.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/android_gisapp/56891264eb3aaf435b5d030988ec2ee932388b8d/app/src/main/res/drawable/intro_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_box.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/point_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/point_indigo.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/point_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/point_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout-land/fragment_intro1.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 32 | 33 | 37 | 38 | 46 | 47 | 54 | 55 | 56 | 60 | 61 | 66 | 67 | 72 | 77 | 78 | 83 | 84 | 85 | 86 | 91 | 92 | 97 | 98 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /app/src/main/res/layout-land/status_panel.xml: -------------------------------------------------------------------------------- 1 | 2 | 24 | 25 | 31 | 32 | 39 | 40 | 44 | 45 | 49 | 50 | 54 | 55 | 59 | 60 | 66 | 67 | 73 | 74 | 80 | 81 | 82 | 88 | 89 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 28 | 29 | 33 | 34 | 38 | 39 | 48 | 49 | 56 | 57 | 58 | 64 | 65 | 75 | 76 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_intro.xml: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 29 | 30 | 35 | 36 | 41 | 42 | 48 | 49 |