├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── BackPackTrackII.iml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── google-services.json ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── WW15MGH.DAC │ ├── ic_launcher-web.png │ ├── java │ └── eu │ │ └── faircode │ │ └── backpacktrack2 │ │ ├── ActivityDurationAdapter.java │ │ ├── ActivityLogAdapter.java │ │ ├── ActivityTypeAdapter.java │ │ ├── BackgroundService.java │ │ ├── BootReceiver.java │ │ ├── ConnectivityChangedReceiver.java │ │ ├── DarkSky.java │ │ ├── DatabaseHelper.java │ │ ├── ForecastAdapter.java │ │ ├── GPXFileWriter.java │ │ ├── GcmService.java │ │ ├── GeocoderEx.java │ │ ├── GeonameAdapter.java │ │ ├── Geonames.java │ │ ├── GoogleElevationApi.java │ │ ├── GpsStatusService.java │ │ ├── IIDService.java │ │ ├── JobExecutionService.java │ │ ├── KMLFileWriter.java │ │ ├── LocationAdapter.java │ │ ├── MyPackageChangedReceiver.java │ │ ├── PowerSaveModeChangedReceiver.java │ │ ├── PressureService.java │ │ ├── ProvidersChangedReceiver.java │ │ ├── Proximity.java │ │ ├── SettingsActivity.java │ │ ├── SettingsFragment.java │ │ ├── ShutdownReceiver.java │ │ ├── StepCountAdapter.java │ │ ├── StepCountWidget.java │ │ ├── StepCounterService.java │ │ ├── SunMoonCalculator.java │ │ ├── TimezoneChangedReceiver.java │ │ ├── Util.java │ │ ├── WaypointAdapter.java │ │ ├── Weather.java │ │ ├── WeatherAdapter.java │ │ ├── WeatherWidget.java │ │ ├── WikiAdapter.java │ │ └── Wikimedia.java │ └── res │ ├── drawable-mdpi │ ├── degrees_m1.png │ ├── degrees_m10.png │ ├── degrees_m11.png │ ├── degrees_m12.png │ ├── degrees_m13.png │ ├── degrees_m14.png │ ├── degrees_m15.png │ ├── degrees_m16.png │ ├── degrees_m17.png │ ├── degrees_m18.png │ ├── degrees_m19.png │ ├── degrees_m2.png │ ├── degrees_m20.png │ ├── degrees_m21.png │ ├── degrees_m22.png │ ├── degrees_m23.png │ ├── degrees_m24.png │ ├── degrees_m25.png │ ├── degrees_m26.png │ ├── degrees_m27.png │ ├── degrees_m28.png │ ├── degrees_m29.png │ ├── degrees_m3.png │ ├── degrees_m30.png │ ├── degrees_m31.png │ ├── degrees_m32.png │ ├── degrees_m33.png │ ├── degrees_m34.png │ ├── degrees_m35.png │ ├── degrees_m36.png │ ├── degrees_m37.png │ ├── degrees_m38.png │ ├── degrees_m39.png │ ├── degrees_m4.png │ ├── degrees_m40.png │ ├── degrees_m5.png │ ├── degrees_m6.png │ ├── degrees_m7.png │ ├── degrees_m8.png │ ├── degrees_m9.png │ ├── degrees_p0.png │ ├── degrees_p1.png │ ├── degrees_p10.png │ ├── degrees_p100.png │ ├── degrees_p101.png │ ├── degrees_p102.png │ ├── degrees_p103.png │ ├── degrees_p104.png │ ├── degrees_p105.png │ ├── degrees_p106.png │ ├── degrees_p107.png │ ├── degrees_p108.png │ ├── degrees_p109.png │ ├── degrees_p11.png │ ├── degrees_p110.png │ ├── degrees_p111.png │ ├── degrees_p112.png │ ├── degrees_p113.png │ ├── degrees_p114.png │ ├── degrees_p115.png │ ├── degrees_p116.png │ ├── degrees_p117.png │ ├── degrees_p118.png │ ├── degrees_p119.png │ ├── degrees_p12.png │ ├── degrees_p120.png │ ├── degrees_p13.png │ ├── degrees_p14.png │ ├── degrees_p15.png │ ├── degrees_p16.png │ ├── degrees_p17.png │ ├── degrees_p18.png │ ├── degrees_p19.png │ ├── degrees_p2.png │ ├── degrees_p20.png │ ├── degrees_p21.png │ ├── degrees_p22.png │ ├── degrees_p23.png │ ├── degrees_p24.png │ ├── degrees_p25.png │ ├── degrees_p26.png │ ├── degrees_p27.png │ ├── degrees_p28.png │ ├── degrees_p29.png │ ├── degrees_p3.png │ ├── degrees_p30.png │ ├── degrees_p31.png │ ├── degrees_p32.png │ ├── degrees_p33.png │ ├── degrees_p34.png │ ├── degrees_p35.png │ ├── degrees_p36.png │ ├── degrees_p37.png │ ├── degrees_p38.png │ ├── degrees_p39.png │ ├── degrees_p4.png │ ├── degrees_p40.png │ ├── degrees_p41.png │ ├── degrees_p42.png │ ├── degrees_p43.png │ ├── degrees_p44.png │ ├── degrees_p45.png │ ├── degrees_p46.png │ ├── degrees_p47.png │ ├── degrees_p48.png │ ├── degrees_p49.png │ ├── degrees_p5.png │ ├── degrees_p50.png │ ├── degrees_p51.png │ ├── degrees_p52.png │ ├── degrees_p53.png │ ├── degrees_p54.png │ ├── degrees_p55.png │ ├── degrees_p56.png │ ├── degrees_p57.png │ ├── degrees_p58.png │ ├── degrees_p59.png │ ├── degrees_p6.png │ ├── degrees_p60.png │ ├── degrees_p61.png │ ├── degrees_p62.png │ ├── degrees_p63.png │ ├── degrees_p64.png │ ├── degrees_p65.png │ ├── degrees_p66.png │ ├── degrees_p67.png │ ├── degrees_p68.png │ ├── degrees_p69.png │ ├── degrees_p7.png │ ├── degrees_p70.png │ ├── degrees_p71.png │ ├── degrees_p72.png │ ├── degrees_p73.png │ ├── degrees_p74.png │ ├── degrees_p75.png │ ├── degrees_p76.png │ ├── degrees_p77.png │ ├── degrees_p78.png │ ├── degrees_p79.png │ ├── degrees_p8.png │ ├── degrees_p80.png │ ├── degrees_p81.png │ ├── degrees_p82.png │ ├── degrees_p83.png │ ├── degrees_p84.png │ ├── degrees_p85.png │ ├── degrees_p86.png │ ├── degrees_p87.png │ ├── degrees_p88.png │ ├── degrees_p89.png │ ├── degrees_p9.png │ ├── degrees_p90.png │ ├── degrees_p91.png │ ├── degrees_p92.png │ ├── degrees_p93.png │ ├── degrees_p94.png │ ├── degrees_p95.png │ ├── degrees_p96.png │ ├── degrees_p97.png │ ├── degrees_p98.png │ └── degrees_p99.png │ ├── drawable-xhdpi │ ├── backpacker_black.png │ ├── backpacker_white.png │ ├── backup_60.png │ ├── bike.png │ ├── car.png │ ├── clear_day_60.png │ ├── clear_day_black.png │ ├── clear_day_white.png │ ├── clear_night_60.png │ ├── clear_night_black.png │ ├── clear_night_white.png │ ├── cloud_download_black.png │ ├── cloudy_60.png │ ├── cloudy_black.png │ ├── cloudy_white.png │ ├── create_60.png │ ├── explore.png │ ├── feature_htl_60.png │ ├── fog_60.png │ ├── fog_black.png │ ├── fog_white.png │ ├── gpsfixed_60.png │ ├── history_60.png │ ├── language_60.png │ ├── link_60.png │ ├── location_60.png │ ├── navigation_60.png │ ├── partly_cloudy_day_60.png │ ├── partly_cloudy_day_black.png │ ├── partly_cloudy_day_white.png │ ├── partly_cloudy_night_60.png │ ├── partly_cloudy_night_black.png │ ├── partly_cloudy_night_white.png │ ├── pause.png │ ├── person_outline_60.png │ ├── rain_60.png │ ├── rain_black.png │ ├── rain_white.png │ ├── refresh_60.png │ ├── refresh_black.png │ ├── run.png │ ├── send_60.png │ ├── sleet_60.png │ ├── sleet_black.png │ ├── sleet_white.png │ ├── snow_60.png │ ├── snow_black.png │ ├── snow_white.png │ ├── sunny_60.png │ ├── toc.png │ ├── trending_60.png │ ├── trending_up_60.png │ ├── umbrella_black.png │ ├── umbrella_white.png │ ├── walk.png │ ├── walk_60.png │ ├── wind_60.png │ ├── wind_black.png │ └── wind_white.png │ ├── layout │ ├── activity.xml │ ├── activity_history.xml │ ├── activity_list.xml │ ├── activity_log.xml │ ├── duration.xml │ ├── export.xml │ ├── forecast.xml │ ├── geoname.xml │ ├── geoname_search.xml │ ├── location.xml │ ├── location_history.xml │ ├── log.xml │ ├── nopermissions.xml │ ├── proximity.xml │ ├── step.xml │ ├── step_history.xml │ ├── step_widget.xml │ ├── title.xml │ ├── waypoint.xml │ ├── waypoint_add.xml │ ├── waypoint_editor.xml │ ├── weather.xml │ ├── weather_forecast.xml │ ├── weather_history.xml │ ├── weather_widget.xml │ ├── wiki.xml │ └── wiki_search.xml │ ├── menu │ ├── activity.xml │ ├── location.xml │ ├── step.xml │ ├── waypoint.xml │ └── weather.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-de │ ├── api.xml │ ├── precipitation.xml │ ├── pressure.xml │ ├── strings.xml │ ├── temperature.xml │ ├── weather.xml │ └── windspeed.xml │ ├── values-nl │ ├── api.xml │ ├── precipitation.xml │ ├── pressure.xml │ ├── strings.xml │ ├── temperature.xml │ ├── weather.xml │ └── windspeed.xml │ ├── values │ ├── api.xml │ ├── colors.xml │ ├── play.xml │ ├── precipitation.xml │ ├── pressure.xml │ ├── strings.xml │ ├── temperature.xml │ ├── weather.xml │ └── windspeed.xml │ └── xml │ ├── preferences.xml │ ├── provider_paths.xml │ ├── step_widget_info.xml │ └── weather_widget_info.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── play-function.png ├── play-function.xcf ├── screenshot1.png ├── screenshot1_scaled.png ├── screenshot2.png ├── screenshot2_scaled.png ├── screenshot3.png ├── screenshot3_scaled.png ├── screenshot4.png ├── screenshot4_scaled.png ├── screenshot5.png ├── screenshot5_scaled.png ├── screenshot6.png ├── screenshot6_scaled.png ├── screenshot7.png ├── screenshot7_scaled.png ├── settings.gradle └── wordpress ├── bpt.php └── readme.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | BackPackTrackII -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /BackPackTrackII.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.3" 6 | 7 | defaultConfig { 8 | applicationId "eu.faircode.backpacktrack2" 9 | minSdkVersion 16 10 | targetSdkVersion 25 11 | versionCode 2017021901 12 | versionName "1.38" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | applicationVariants.all { variant -> 19 | setOutputFile(variant, defaultConfig) 20 | } 21 | } 22 | } 23 | lintOptions { 24 | abortOnError false 25 | } 26 | } 27 | 28 | def setOutputFile(variant, defaultConfig) { 29 | variant.outputs.each { output -> 30 | def fileName = "BPT2-v" + defaultConfig.versionName + ".apk" 31 | if (output.zipAlign) 32 | output.outputFile = new File(output.outputFile.parent, fileName) 33 | else 34 | output.packageApplication.outputFile = new File(output.packageApplication.outputFile.parent, fileName) 35 | } 36 | } 37 | 38 | dependencies { 39 | compile fileTree(dir: 'libs', include: ['*.jar']) 40 | 41 | // https://mvnrepository.com/artifact/com.google.code.gson/gson 42 | compile 'com.google.code.gson:gson:2.8.+' 43 | 44 | // https://developers.google.com/android/guides/setup 45 | compile 'com.google.android.gms:play-services-location:10.2.+' 46 | compile 'com.google.android.gms:play-services-places:10.2.+' 47 | compile 'com.google.android.gms:play-services-gcm:10.2.+' 48 | 49 | // https://mvnrepository.com/artifact/de.timroes/aXMLRPC 50 | compile 'de.timroes:aXMLRPC:1.8.+' 51 | 52 | // https://mvnrepository.com/artifact/org.jdom/jdom2 53 | compile 'org.jdom:jdom2:2.0.+' 54 | 55 | // https://mvnrepository.com/artifact/com.jjoe64/graphview 56 | compile 'com.jjoe64:graphview:4.2.+' 57 | 58 | // https://mvnrepository.com/artifact/joda-time/joda-time 59 | compile 'joda-time:joda-time:2.9.+' 60 | } 61 | 62 | android { 63 | packagingOptions { 64 | exclude 'META-INF/LICENSE.txt' 65 | exclude 'META-INF/NOTICE.txt' 66 | } 67 | } 68 | 69 | apply plugin: 'com.google.gms.google-services' 70 | -------------------------------------------------------------------------------- /app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "552508033698", 4 | "project_id": "backpacktrack-2" 5 | }, 6 | "client": [ 7 | { 8 | "client_info": { 9 | "mobilesdk_app_id": "1:552508033698:android:612e0f9713a60c29", 10 | "android_client_info": { 11 | "package_name": "eu.faircode.backpacktrack2" 12 | } 13 | }, 14 | "oauth_client": [], 15 | "api_key": [ 16 | { 17 | "current_key": "AIzaSyA6IM3Fq4IjRru2sMM9UVtY_-NAk-W0gVM" 18 | } 19 | ], 20 | "services": { 21 | "analytics_service": { 22 | "status": 1 23 | }, 24 | "appinvite_service": { 25 | "status": 1, 26 | "other_platform_oauth_client": [] 27 | }, 28 | "ads_service": { 29 | "status": 1 30 | } 31 | } 32 | } 33 | ], 34 | "configuration_version": "1" 35 | } -------------------------------------------------------------------------------- /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 /home/marcel/Documents/adt/sdk/tools/proguard/proguard-android.txt 4 | # You can edit 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 | 19 | -dontwarn gov.nasa.worldwind.** 20 | -dontwarn com.zebraimaging.ZebraInputHandler 21 | -------------------------------------------------------------------------------- /app/src/main/assets/WW15MGH.DAC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/assets/WW15MGH.DAC -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ActivityDurationAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.CursorAdapter; 9 | import android.widget.TextView; 10 | 11 | import java.text.SimpleDateFormat; 12 | 13 | public class ActivityDurationAdapter extends CursorAdapter { 14 | private int colTime; 15 | private int colStill; 16 | private int colWalking; 17 | private int colRunning; 18 | private int colOnbicycle; 19 | private int colInvehicle; 20 | private int colUnknown; 21 | 22 | public ActivityDurationAdapter(Context context, Cursor cursor) { 23 | super(context, cursor, 0); 24 | colTime = cursor.getColumnIndex("time"); 25 | colWalking = cursor.getColumnIndex("walking"); 26 | colRunning = cursor.getColumnIndex("running"); 27 | colOnbicycle = cursor.getColumnIndex("onbicycle"); 28 | colInvehicle = cursor.getColumnIndex("invehicle"); 29 | colUnknown = cursor.getColumnIndex("unknown"); 30 | } 31 | 32 | @Override 33 | public View newView(Context context, Cursor cursor, ViewGroup parent) { 34 | return LayoutInflater.from(context).inflate(R.layout.duration, parent, false); 35 | } 36 | 37 | @Override 38 | public void bindView(final View view, final Context context, final Cursor cursor) { 39 | // Get values 40 | long time = cursor.getLong(colTime); 41 | long still = cursor.getInt(cursor.getColumnIndex("still")); 42 | long walking = cursor.getInt(colWalking); 43 | long running = cursor.getInt(colRunning); 44 | long onbicycle = cursor.getInt(colOnbicycle); 45 | long invehicle = cursor.getInt(colInvehicle); 46 | long unknown = cursor.getInt(colUnknown); 47 | 48 | // Get views 49 | TextView tvTime = (TextView) view.findViewById(R.id.tvTime); 50 | TextView tvStill = (TextView) view.findViewById(R.id.tvStill); 51 | TextView tvOnfoot = (TextView) view.findViewById(R.id.tvOnfoot); 52 | TextView tvRunning = (TextView) view.findViewById(R.id.tvRunning); 53 | TextView tvOnbicycle = (TextView) view.findViewById(R.id.tvOnbicycle); 54 | TextView tvInvehicle = (TextView) view.findViewById(R.id.tvInvehicle); 55 | TextView tvUnknown = (TextView) view.findViewById(R.id.tvUnknown); 56 | 57 | // Set values 58 | tvTime.setText(SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT).format(time)); 59 | tvStill.setText(format(still)); 60 | tvOnfoot.setText(format(walking)); 61 | tvRunning.setText(format(running)); 62 | tvOnbicycle.setText(format(onbicycle)); 63 | tvInvehicle.setText(format(invehicle)); 64 | tvUnknown.setText(format(unknown)); 65 | } 66 | 67 | private static String format(long duration) { 68 | long hours = duration / (3600 * 1000); 69 | duration = duration % (3600 * 1000); 70 | long minutes = duration / (60 * 1000); 71 | if (hours == 0 && minutes == 0) 72 | return ""; 73 | else 74 | return hours + ":" + (minutes < 10 ? "0" : "") + minutes; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ActivityLogAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.CursorAdapter; 9 | import android.widget.TextView; 10 | 11 | import java.text.SimpleDateFormat; 12 | 13 | public class ActivityLogAdapter extends CursorAdapter { 14 | private int colStart; 15 | private int colFinish; 16 | private int colActivity; 17 | 18 | public ActivityLogAdapter(Context context, Cursor cursor) { 19 | super(context, cursor, 0); 20 | colStart = cursor.getColumnIndex("start"); 21 | colFinish = cursor.getColumnIndex("finish"); 22 | colActivity = cursor.getColumnIndex("activity"); 23 | } 24 | 25 | @Override 26 | public View newView(Context context, Cursor cursor, ViewGroup parent) { 27 | return LayoutInflater.from(context).inflate(R.layout.log, parent, false); 28 | } 29 | 30 | @Override 31 | public void bindView(final View view, final Context context, final Cursor cursor) { 32 | // Get values 33 | long start = cursor.getLong(colStart); 34 | long finish = cursor.getLong(colFinish); 35 | int activity = cursor.getInt(colActivity); 36 | 37 | // Get views 38 | TextView tvStart = (TextView) view.findViewById(R.id.tvStart); 39 | TextView tvFinish = (TextView) view.findViewById(R.id.tvFinish); 40 | TextView tvActivity = (TextView) view.findViewById(R.id.tvActivity); 41 | 42 | // Set values 43 | tvStart.setText(SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(start)); 44 | tvFinish.setText(SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(finish)); 45 | tvActivity.setText(BackgroundService.getActivityName(activity, context)); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ActivityTypeAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.CursorAdapter; 9 | import android.widget.TextView; 10 | 11 | import java.text.SimpleDateFormat; 12 | 13 | public class ActivityTypeAdapter extends CursorAdapter { 14 | private int colTime; 15 | private int colActivity; 16 | private int colCondidence; 17 | 18 | public ActivityTypeAdapter(Context context, Cursor cursor) { 19 | super(context, cursor, 0); 20 | colTime = cursor.getColumnIndex("time"); 21 | colActivity = cursor.getColumnIndex("activity"); 22 | colCondidence = cursor.getColumnIndex("confidence"); 23 | } 24 | 25 | @Override 26 | public View newView(Context context, Cursor cursor, ViewGroup parent) { 27 | return LayoutInflater.from(context).inflate(R.layout.activity, parent, false); 28 | } 29 | 30 | @Override 31 | public void bindView(final View view, final Context context, final Cursor cursor) { 32 | // Get values 33 | long time = cursor.getLong(colTime); 34 | int activity = cursor.getInt(colActivity); 35 | int confidence = cursor.getInt(colCondidence); 36 | 37 | // Get views 38 | TextView tvTime = (TextView) view.findViewById(R.id.tvTime); 39 | TextView tvActivity = (TextView) view.findViewById(R.id.tvActivity); 40 | TextView tvConfidence = (TextView) view.findViewById(R.id.tvConfidence); 41 | 42 | // Set values 43 | tvTime.setText(SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.MEDIUM).format(time)); 44 | tvActivity.setText(BackgroundService.getActivityName(activity, context)); 45 | tvConfidence.setText(confidence + "%"); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/BootReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.preference.PreferenceManager; 8 | import android.util.Log; 9 | 10 | public class BootReceiver extends BroadcastReceiver { 11 | private static final String TAG = "BPT2.Boot"; 12 | 13 | @Override 14 | public void onReceive(final Context context, Intent intent) { 15 | Log.i(TAG, "Received " + intent); 16 | 17 | // Clear last step count 18 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 19 | prefs.edit().remove(SettingsFragment.PREF_LAST_STEP_COUNT).apply(); 20 | 21 | // Restore proximity alerts 22 | try { 23 | Proximity.restoreAlerts(context); 24 | } catch (Throwable ex) { 25 | Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); 26 | } 27 | 28 | new Thread(new Runnable() { 29 | @Override 30 | public void run() { 31 | synchronized (context.getApplicationContext()) { 32 | SettingsFragment.firstRun(context); 33 | } 34 | } 35 | }).start(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ConnectivityChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.preference.PreferenceManager; 8 | import android.util.Log; 9 | 10 | import java.util.Date; 11 | 12 | public class ConnectivityChangedReceiver extends BroadcastReceiver { 13 | private static final String TAG = "BPT2.Connectivity"; 14 | 15 | @Override 16 | public void onReceive(final Context context, Intent intent) { 17 | Log.i(TAG, "Received " + intent); 18 | 19 | if (Util.isConnected(context)) { 20 | long time = new Date().getTime(); 21 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 22 | long ref_time = prefs.getLong(SettingsFragment.PREF_PRESSURE_REF_TIME, 0); 23 | int interval = Integer.parseInt(prefs.getString(SettingsFragment.PREF_WEATHER_INTERVAL, SettingsFragment.DEFAULT_WEATHER_INTERVAL)); 24 | 25 | if (ref_time + interval * 60 * 1000 < time) { 26 | Intent intentWeather = new Intent(context, BackgroundService.class); 27 | intentWeather.setAction(BackgroundService.ACTION_UPDATE_WEATHER); 28 | context.startService(intentWeather); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/GeocoderEx.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.location.Address; 5 | import android.location.Geocoder; 6 | import android.location.Location; 7 | import android.text.TextUtils; 8 | import android.util.Log; 9 | 10 | import java.io.IOException; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | import java.util.Locale; 14 | 15 | public class GeocoderEx { 16 | private Geocoder geocoder; 17 | 18 | private static final String TAG = "BPT2.Geocoder"; 19 | 20 | public static boolean isPresent() { 21 | return Geocoder.isPresent(); 22 | } 23 | 24 | public GeocoderEx(Context context) { 25 | this.geocoder = new Geocoder(context, Locale.getDefault()); 26 | } 27 | 28 | public String reverseGeocode(Location location) { 29 | if (location == null) 30 | return null; 31 | try { 32 | List listAddress = getFromLocation(location, 1); 33 | return (listAddress.size() == 0 ? null : listAddress.get(0).name); 34 | } catch (IOException ex) { 35 | Log.w(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); 36 | return null; 37 | } 38 | } 39 | 40 | public List getFromLocation(Location location, int results) throws IOException { 41 | return getAddressList(this.geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), results)); 42 | } 43 | 44 | public List getFromLocationName(String name, int results) throws IOException { 45 | return getAddressList(this.geocoder.getFromLocationName(name, results)); 46 | } 47 | 48 | private static List getAddressList(List
listAddress) { 49 | List listAddressEx = new ArrayList<>(); 50 | if (listAddress != null) 51 | for (Address address : listAddress) 52 | if (address.hasLatitude() && address.hasLongitude()) { 53 | List listLine = new ArrayList<>(); 54 | for (int l = 0; l < address.getMaxAddressLineIndex(); l++) 55 | listLine.add(address.getAddressLine(l)); 56 | AddressEx addressEx = new AddressEx(); 57 | addressEx.name = TextUtils.join(", ", listLine); 58 | addressEx.location = new Location("geocoded"); 59 | addressEx.location.setLatitude(address.getLatitude()); 60 | addressEx.location.setLongitude(address.getLongitude()); 61 | addressEx.location.setTime(System.currentTimeMillis()); 62 | listAddressEx.add(addressEx); 63 | } 64 | return listAddressEx; 65 | } 66 | 67 | public static class AddressEx { 68 | public String name; 69 | public Location location; 70 | } 71 | 72 | public static CharSequence[] getNameList(List listAddress) { 73 | List listResult = new ArrayList(); 74 | for (AddressEx address : listAddress) 75 | listResult.add(address.name); 76 | return listResult.toArray(new CharSequence[0]); 77 | } 78 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/GeonameAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.location.Location; 6 | import android.net.Uri; 7 | import android.util.Log; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.ArrayAdapter; 12 | import android.widget.ImageView; 13 | import android.widget.TextView; 14 | import android.widget.Toast; 15 | 16 | import java.util.List; 17 | 18 | public class GeonameAdapter extends ArrayAdapter { 19 | private static final String TAG = "BPT2.Geonames"; 20 | 21 | private Context context; 22 | private Location location; 23 | 24 | public GeonameAdapter(Context context, List names, Location location) { 25 | super(context, 0, names); 26 | this.context = context; 27 | this.location = location; 28 | } 29 | 30 | @Override 31 | public View getView(int position, View convertView, ViewGroup parent) { 32 | final Geonames.Geoname name = getItem(position); 33 | if (convertView == null) 34 | convertView = LayoutInflater.from(getContext()).inflate(R.layout.geoname, parent, false); 35 | 36 | ImageView ivFeature = (ImageView) convertView.findViewById(R.id.ivFeature); 37 | TextView tvTitle = (TextView) convertView.findViewById(R.id.tvTitle); 38 | TextView tvDistance = (TextView) convertView.findViewById(R.id.tvDistance); 39 | TextView tvType = (TextView) convertView.findViewById(R.id.tvType); 40 | TextView tvPopulation = (TextView) convertView.findViewById(R.id.tvPopulation); 41 | 42 | int resId = 0; 43 | if (name.fcode != null) 44 | resId = context.getResources().getIdentifier( 45 | "feature_" + name.fcode.toLowerCase() + "_60", "drawable", context.getPackageName()); 46 | if (resId > 0) 47 | ivFeature.setImageResource(resId); 48 | ivFeature.setVisibility(resId > 0 ? View.VISIBLE : View.INVISIBLE); 49 | 50 | tvTitle.setText(name.name); 51 | tvDistance.setText((name.countryCode == null ? "" : name.countryCode + " ") + Math.round(name.location.distanceTo(location)) + " m"); 52 | tvType.setText((name.fcode == null ? "" : name.fcode) + (name.fcodeName == null ? "" : " " + name.fcodeName)); 53 | tvPopulation.setVisibility(name.population > 0 ? View.VISIBLE : View.GONE); 54 | tvPopulation.setText(Long.toString(name.population)); 55 | 56 | return convertView; 57 | } 58 | } 59 | 60 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/GoogleElevationApi.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.location.Location; 5 | import android.util.Log; 6 | 7 | import org.json.JSONArray; 8 | import org.json.JSONException; 9 | import org.json.JSONObject; 10 | 11 | import java.io.BufferedReader; 12 | import java.io.IOException; 13 | import java.io.InputStreamReader; 14 | import java.net.URL; 15 | 16 | import javax.net.ssl.HttpsURLConnection; 17 | 18 | public class GoogleElevationApi { 19 | private static final String TAG = "BPT2.GoogleElevation"; 20 | 21 | public static final int cTimeOutMs = 30 * 1000; 22 | 23 | public static void getElevation(Location location, Context context) throws IOException, JSONException { 24 | // https://developers.google.com/maps/documentation/elevation/ 25 | URL url = new URL("https://maps.googleapis.com/maps/api/elevation/json?locations=" + 26 | String.valueOf(location.getLatitude()) + "," + 27 | String.valueOf(location.getLongitude()) + 28 | "&key=AIzaSyAp0gtiT6AqaSUSlqwXSyoFCA6SCzMyr6w"); 29 | Log.d(TAG, "url=" + url); 30 | HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); 31 | 32 | urlConnection.setConnectTimeout(cTimeOutMs); 33 | urlConnection.setReadTimeout(cTimeOutMs); 34 | urlConnection.setRequestProperty("Accept", "application/json"); 35 | 36 | // Set request type 37 | urlConnection.setRequestMethod("GET"); 38 | urlConnection.setDoOutput(false); 39 | urlConnection.setDoInput(true); 40 | 41 | try { 42 | // Check for errors 43 | int code = urlConnection.getResponseCode(); 44 | if (code != HttpsURLConnection.HTTP_OK) 45 | throw new IOException("HTTP error " + urlConnection.getResponseCode()); 46 | 47 | // Get response 48 | BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 49 | StringBuilder json = new StringBuilder(); 50 | String line; 51 | while ((line = br.readLine()) != null) 52 | json.append(line); 53 | Log.d(TAG, json.toString()); 54 | 55 | // Decode result 56 | JSONObject jroot = new JSONObject(json.toString()); 57 | String status = jroot.getString("status"); 58 | if ("OK".equals(status)) { 59 | JSONArray results = jroot.getJSONArray("results"); 60 | if (results.length() > 0) { 61 | double elevation = results.getJSONObject(0).getDouble("elevation"); 62 | location.setAltitude(elevation); 63 | Log.i(TAG, "Elevation " + location); 64 | } else 65 | throw new IOException("JSON no results"); 66 | } else 67 | throw new IOException("JSON status " + status); 68 | } finally { 69 | urlConnection.disconnect(); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/GpsStatusService.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.app.Service; 4 | import android.content.Intent; 5 | import android.content.SharedPreferences; 6 | import android.location.GpsSatellite; 7 | import android.location.GpsStatus; 8 | import android.location.LocationManager; 9 | import android.os.IBinder; 10 | import android.preference.PreferenceManager; 11 | import android.util.Log; 12 | 13 | public class GpsStatusService extends Service { 14 | private static final String TAG = "BPT2.GpsStatusService"; 15 | 16 | public GpsStatusService() { 17 | } 18 | 19 | private GpsStatus.Listener mGpsStatusListener = new GpsStatus.Listener() { 20 | @Override 21 | public void onGpsStatusChanged(int event) { 22 | if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) { 23 | // Count fixed/visible satellites 24 | int fixed = 0; 25 | int visible = 0; 26 | LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE); 27 | for (GpsSatellite sat : lm.getGpsStatus(null).getSatellites()) { 28 | visible++; 29 | if (sat.usedInFix()) 30 | fixed++; 31 | } 32 | 33 | // Persist fixed/visible satellites 34 | Log.i(TAG, "Satellites fixed/visible=" + fixed + "/" + visible); 35 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GpsStatusService.this); 36 | SharedPreferences.Editor editor = prefs.edit(); 37 | editor.putInt(SettingsFragment.PREF_SATS_FIXED, fixed); 38 | editor.putInt(SettingsFragment.PREF_SATS_VISIBLE, visible); 39 | editor.apply(); 40 | 41 | // Send state changed intent 42 | Intent intent = new Intent(GpsStatusService.this, BackgroundService.class); 43 | intent.setAction(BackgroundService.ACTION_STATE_CHANGED); 44 | startService(intent); 45 | } 46 | } 47 | }; 48 | 49 | @Override 50 | public void onCreate() { 51 | super.onCreate(); 52 | 53 | Log.i(TAG, "Requesting GPS status updates"); 54 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GpsStatusService.this); 55 | SharedPreferences.Editor editor = prefs.edit(); 56 | editor.remove(SettingsFragment.PREF_SATS_FIXED); 57 | editor.remove(SettingsFragment.PREF_SATS_VISIBLE); 58 | editor.apply(); 59 | LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE); 60 | lm.addGpsStatusListener(mGpsStatusListener); 61 | } 62 | 63 | @Override 64 | public void onDestroy() { 65 | Log.i(TAG, "Stopping GPS status updates"); 66 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GpsStatusService.this); 67 | SharedPreferences.Editor editor = prefs.edit(); 68 | editor.remove(SettingsFragment.PREF_SATS_FIXED); 69 | editor.remove(SettingsFragment.PREF_SATS_VISIBLE); 70 | editor.apply(); 71 | LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE); 72 | lm.removeGpsStatusListener(mGpsStatusListener); 73 | 74 | super.onDestroy(); 75 | } 76 | 77 | @Override 78 | public int onStartCommand(Intent intent, int flags, int startId) { 79 | return START_STICKY; 80 | } 81 | 82 | @Override 83 | public IBinder onBind(Intent intent) { 84 | return null; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/IIDService.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.preference.PreferenceManager; 6 | import android.util.Log; 7 | 8 | import com.google.android.gms.gcm.GoogleCloudMessaging; 9 | import com.google.android.gms.iid.InstanceID; 10 | import com.google.android.gms.iid.InstanceIDListenerService; 11 | 12 | import java.io.IOException; 13 | 14 | public class IIDService extends InstanceIDListenerService { 15 | private static final String TAG = "BPT2.IID"; 16 | 17 | @Override 18 | public void onTokenRefresh() { 19 | Log.i(TAG, "Token refresh"); 20 | getToken(this, true); 21 | } 22 | 23 | public static void getToken(Context context, boolean refresh) { 24 | try { 25 | // Get token 26 | InstanceID instanceID = InstanceID.getInstance(context); 27 | String token = instanceID.getToken( 28 | context.getString(R.string.gcm_defaultSenderId), 29 | GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 30 | Log.i(TAG, "Token=" + token); 31 | 32 | // Store token 33 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 34 | prefs.edit().putString(SettingsFragment.PREF_GCM_TOKEN, token).apply(); 35 | 36 | // Subscribe to topics 37 | GcmService.subscribeBroadcasts(context); 38 | GcmService.subscribeWeatherUpdates(context); 39 | } catch (IOException ex) { 40 | Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/JobExecutionService.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.annotation.TargetApi; 4 | import android.app.job.JobInfo; 5 | import android.app.job.JobParameters; 6 | import android.app.job.JobScheduler; 7 | import android.app.job.JobService; 8 | import android.content.ComponentName; 9 | import android.content.Context; 10 | import android.content.Intent; 11 | import android.content.SharedPreferences; 12 | import android.os.Build; 13 | import android.os.Bundle; 14 | import android.preference.PreferenceManager; 15 | import android.util.Log; 16 | 17 | @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1) 18 | public class JobExecutionService extends JobService { 19 | private static final String TAG = "BPT2.Job"; 20 | 21 | public static int JOB_UPLOAD_GPX = 100; 22 | public static int JOB_CONNECTIVITY = 101; 23 | 24 | public static void schedule(int id, Bundle extras, Context context) { 25 | JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); 26 | js.cancel(id); 27 | 28 | ComponentName component = new ComponentName(context, JobExecutionService.class); 29 | JobInfo.Builder builder = new JobInfo.Builder(id, component); 30 | if (id == JOB_UPLOAD_GPX) { 31 | builder.setExtras(Util.getPersistableBundle(extras)); 32 | builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); 33 | builder.setRequiresCharging(false); 34 | builder.setRequiresDeviceIdle(false); 35 | builder.setMinimumLatency(0); 36 | builder.setBackoffCriteria(10 * 1000L, JobInfo.BACKOFF_POLICY_LINEAR); 37 | builder.setOverrideDeadline(2 * 3600 * 1000L); 38 | builder.setPersisted(false); 39 | JobInfo job = builder.build(); 40 | Log.i(TAG, "Scheduling upload GPX job=" + job); 41 | js.schedule(job); 42 | } else if (id == JOB_CONNECTIVITY) { 43 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 44 | int interval = Integer.parseInt(prefs.getString(SettingsFragment.PREF_CONNECTIVITY_CHECK_INTERVAL, SettingsFragment.DEFAULT_CONNECTIVITY_CHECK_INTERVAL)); 45 | if (interval > 0) { 46 | builder.setRequiredNetworkType(Util.isMeteredNetwork(context) ? JobInfo.NETWORK_TYPE_UNMETERED : JobInfo.NETWORK_TYPE_ANY); 47 | builder.setRequiresCharging(false); 48 | builder.setRequiresDeviceIdle(false); 49 | builder.setMinimumLatency(0); 50 | builder.setBackoffCriteria(interval * 60 * 1000L, JobInfo.BACKOFF_POLICY_LINEAR); 51 | builder.setOverrideDeadline(2 * 3600 * 1000L); 52 | builder.setPersisted(false); 53 | JobInfo job = builder.build(); 54 | Log.i(TAG, "Scheduling connectivity interval=" + interval + " job=" + job); 55 | js.schedule(job); 56 | } 57 | } else 58 | Log.w(TAG, "Unknown job id=" + id); 59 | } 60 | 61 | @Override 62 | public boolean onStartJob(JobParameters jobParameters) { 63 | Log.i(TAG, "Start params=" + jobParameters); 64 | 65 | Intent intent = new Intent(this, BackgroundService.class); 66 | int id = jobParameters.getJobId(); 67 | if (id == JOB_UPLOAD_GPX) { 68 | intent.setAction(BackgroundService.ACTION_UPLOAD_GPX); 69 | intent.putExtras(Util.getBundle(jobParameters.getExtras())); 70 | } else if (id == JOB_CONNECTIVITY) 71 | intent.setAction(BackgroundService.ACTION_CONNECTIVITY); 72 | else 73 | Log.w(TAG, "Unknown job id=" + id); 74 | 75 | Log.i(TAG, "Starting intent=" + intent); 76 | startService(intent); 77 | 78 | return false; 79 | } 80 | 81 | @Override 82 | public boolean onStopJob(JobParameters jobParameters) { 83 | Log.i(TAG, "Stop params=" + jobParameters); 84 | return false; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/MyPackageChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.net.Uri; 7 | import android.util.Log; 8 | 9 | public class MyPackageChangedReceiver extends BroadcastReceiver { 10 | private static final String TAG = "BPT2.MyPackageChanged"; 11 | 12 | @Override 13 | public void onReceive(final Context context, Intent intent) { 14 | Log.i(TAG, "Received " + intent); 15 | 16 | new Thread(new Runnable() { 17 | @Override 18 | public void run() { 19 | synchronized (context.getApplicationContext()) { 20 | SettingsFragment.firstRun(context); 21 | } 22 | } 23 | }).start(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/PowerSaveModeChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.BroadcastReceiver; 5 | import android.content.Context; 6 | import android.content.Intent; 7 | import android.content.SharedPreferences; 8 | import android.os.Build; 9 | import android.os.PowerManager; 10 | import android.preference.PreferenceManager; 11 | import android.util.Log; 12 | 13 | import java.util.Date; 14 | 15 | @TargetApi(Build.VERSION_CODES.M) 16 | public class PowerSaveModeChangedReceiver extends BroadcastReceiver { 17 | private static final String TAG = "BPT2.PowerSave"; 18 | 19 | @Override 20 | public void onReceive(final Context context, Intent intent) { 21 | Log.i(TAG, "Received " + intent); 22 | 23 | PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 24 | if (!pm.isDeviceIdleMode()) { 25 | long time = new Date().getTime(); 26 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 27 | long ref_time = prefs.getLong(SettingsFragment.PREF_PRESSURE_REF_TIME, 0); 28 | int interval = Integer.parseInt(prefs.getString(SettingsFragment.PREF_WEATHER_INTERVAL, SettingsFragment.DEFAULT_WEATHER_INTERVAL)); 29 | 30 | if (ref_time + interval * 60 * 1000 < time) { 31 | Intent intentWeather = new Intent(context, BackgroundService.class); 32 | intentWeather.setAction(BackgroundService.ACTION_UPDATE_WEATHER); 33 | context.startService(intentWeather); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ProvidersChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.util.Log; 7 | 8 | public class ProvidersChangedReceiver extends BroadcastReceiver { 9 | private static final String TAG = "BPT2.ProvidersChanged"; 10 | 11 | @Override 12 | public void onReceive(final Context context, Intent intent) { 13 | Log.i(TAG, "Received " + intent); 14 | new Thread(new Runnable() { 15 | @Override 16 | public void run() { 17 | synchronized (context.getApplicationContext()) { 18 | BackgroundService.stopTracking(context); 19 | BackgroundService.startTracking(context); 20 | } 21 | } 22 | }).start(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/Proximity.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.app.PendingIntent; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.pm.PackageManager; 7 | import android.database.Cursor; 8 | import android.location.LocationManager; 9 | import android.os.Build; 10 | import android.util.Log; 11 | 12 | public class Proximity { 13 | private static final String TAG = "BPT2.Proximity"; 14 | 15 | public static void setAlert(long id, double latitude, double longitude, long radius, Context context) { 16 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 17 | context.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 18 | Intent proximity = new Intent(context, BackgroundService.class); 19 | proximity.setAction(BackgroundService.ACTION_PROXIMITY); 20 | proximity.putExtra(BackgroundService.EXTRA_WAYPOINT, id); 21 | PendingIntent pi = PendingIntent.getService(context, 100 + (int) id, proximity, PendingIntent.FLAG_UPDATE_CURRENT); 22 | LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 23 | Log.i(TAG, "Set proximity waypoint=" + id + " radius=" + radius); 24 | if (radius == 0) { 25 | lm.removeProximityAlert(pi); 26 | 27 | // Send proximity exit 28 | Intent exit = new Intent(context, BackgroundService.class); 29 | exit.setAction(BackgroundService.ACTION_PROXIMITY); 30 | exit.putExtra(LocationManager.KEY_PROXIMITY_ENTERING, false); 31 | exit.putExtra(BackgroundService.EXTRA_WAYPOINT, id); 32 | context.startService(exit); 33 | } else 34 | lm.addProximityAlert(latitude, longitude, radius, -1, pi); 35 | 36 | new DatabaseHelper(context).setProximity(id, radius).close(); 37 | } 38 | } 39 | 40 | public static void restoreAlerts(Context context) { 41 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 42 | context.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 43 | Log.i(TAG, "Restoring proximity alerts"); 44 | LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 45 | DatabaseHelper db = null; 46 | try { 47 | db = new DatabaseHelper(context); 48 | Cursor cursor = null; 49 | try { 50 | cursor = db.getLocations(0, Long.MAX_VALUE, false, true, true, 0); 51 | int colID = cursor.getColumnIndex("ID"); 52 | int colLatitude = cursor.getColumnIndex("latitude"); 53 | int colLongitude = cursor.getColumnIndex("longitude"); 54 | int colProximity = cursor.getColumnIndex("proximity"); 55 | while (cursor.moveToNext()) { 56 | long id = cursor.getLong(colID); 57 | double latitude = cursor.getDouble(colLatitude); 58 | double longitude = cursor.getDouble(colLongitude); 59 | long radius = cursor.getLong(colProximity); 60 | if (radius > 0) { 61 | Intent proximity = new Intent(context, BackgroundService.class); 62 | proximity.setAction(BackgroundService.ACTION_PROXIMITY); 63 | proximity.putExtra(BackgroundService.EXTRA_WAYPOINT, id); 64 | PendingIntent pi = PendingIntent.getService(context, 100 + (int) id, proximity, PendingIntent.FLAG_UPDATE_CURRENT); 65 | Log.i(TAG, "Restoring proximity alert waypoint=" + id); 66 | lm.addProximityAlert(latitude, longitude, radius, -1, pi); 67 | } 68 | } 69 | } finally { 70 | if (cursor != null) 71 | cursor.close(); 72 | } 73 | } finally { 74 | if (db != null) 75 | db.close(); 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/SettingsActivity.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.Manifest; 4 | import android.annotation.TargetApi; 5 | import android.app.Activity; 6 | import android.app.AlarmManager; 7 | import android.app.PendingIntent; 8 | import android.content.Context; 9 | import android.content.Intent; 10 | import android.content.pm.PackageManager; 11 | import android.net.Uri; 12 | import android.os.Build; 13 | import android.os.Bundle; 14 | import android.util.Log; 15 | import android.view.Window; 16 | import android.view.WindowManager; 17 | 18 | import java.util.ArrayList; 19 | import java.util.Arrays; 20 | import java.util.List; 21 | 22 | public class SettingsActivity extends Activity { 23 | private static final String TAG = "BPT2.Settings"; 24 | 25 | public static List cPermission = Arrays.asList( 26 | Manifest.permission.ACCESS_COARSE_LOCATION, 27 | Manifest.permission.ACCESS_FINE_LOCATION, 28 | Manifest.permission.WRITE_EXTERNAL_STORAGE 29 | ); 30 | 31 | @Override 32 | @TargetApi(Build.VERSION_CODES.LOLLIPOP) 33 | protected void onCreate(Bundle savedInstanceState) { 34 | super.onCreate(savedInstanceState); 35 | 36 | setTheme(android.R.style.Theme_Material_NoActionBar); 37 | 38 | // Set status bar color 39 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 40 | Window window = getWindow(); 41 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 42 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 43 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 44 | window.setStatusBarColor(getResources().getColor(R.color.color_teal_600, null)); 45 | else 46 | window.setStatusBarColor(getResources().getColor(R.color.color_teal_600)); 47 | } 48 | 49 | // Remove window title 50 | requestWindowFeature(Window.FEATURE_NO_TITLE); 51 | 52 | // Check runtime permissions 53 | boolean hasPermision = true; 54 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 55 | for (String permission : cPermission) 56 | hasPermision = hasPermision && (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED); 57 | 58 | // Show main activity 59 | if (hasPermision) 60 | getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 61 | else { 62 | setContentView(R.layout.nopermissions); 63 | 64 | // Build list of missing runtime permissions 65 | List listPermission = new ArrayList(); 66 | for (String permission : cPermission) 67 | if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) 68 | listPermission.add(permission); 69 | 70 | // Request runtime permissions 71 | requestPermissions(listPermission.toArray(new String[0]), 1); 72 | } 73 | } 74 | 75 | @Override 76 | public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 77 | // Write external store permission requires a restart 78 | for (int i = 0; i < permissions.length; i++) 79 | if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permissions[i]) && 80 | grantResults[i] == PackageManager.PERMISSION_GRANTED) { 81 | Log.i(TAG, "Restarting application"); 82 | 83 | // Schedule start after 1 second 84 | PendingIntent pi = PendingIntent.getActivity( 85 | this, 86 | BackgroundService.REQUEST_RESTART, 87 | getIntent(), 88 | PendingIntent.FLAG_CANCEL_CURRENT); 89 | AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 90 | am.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, pi); 91 | 92 | // Stop now 93 | System.exit(0); 94 | } 95 | 96 | // Try again 97 | recreate(); 98 | 99 | // Make sure first run has been called 100 | new Thread(new Runnable() { 101 | @Override 102 | public void run() { 103 | synchronized (getApplicationContext()) { 104 | SettingsFragment.firstRun(SettingsActivity.this); 105 | } 106 | } 107 | }).start(); 108 | } 109 | 110 | @Override 111 | protected void onNewIntent(Intent intent) { 112 | setIntent(intent); 113 | 114 | Uri data = intent.getData(); 115 | Bundle extras = intent.getExtras(); 116 | if ((data != null && "geo".equals(data.getScheme())) || 117 | (extras != null && extras.containsKey(SettingsFragment.EXTRA_ACTION))) 118 | recreate(); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/ShutdownReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.preference.PreferenceManager; 8 | import android.util.Log; 9 | 10 | import com.google.android.gms.location.DetectedActivity; 11 | 12 | import java.util.Date; 13 | 14 | public class ShutdownReceiver extends BroadcastReceiver { 15 | private static final String TAG = "BPT2.Shutdown"; 16 | 17 | @Override 18 | public void onReceive(final Context context, Intent intent) { 19 | Log.i(TAG, "Received " + intent); 20 | 21 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 22 | 23 | long time = new Date().getTime(); 24 | int lastActivity = prefs.getInt(SettingsFragment.PREF_LAST_ACTIVITY, DetectedActivity.STILL); 25 | long lastTime = prefs.getLong(SettingsFragment.PREF_LAST_ACTIVITY_TIME, -1); 26 | if (lastTime >= 0) { 27 | new DatabaseHelper(context).updateActivity(lastTime, lastActivity, time - lastTime).close(); 28 | prefs.edit().putLong(SettingsFragment.PREF_LAST_ACTIVITY_TIME, time).apply(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/StepCountAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.database.Cursor; 6 | import android.preference.PreferenceManager; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.CursorAdapter; 11 | import android.widget.TextView; 12 | 13 | import java.text.DateFormat; 14 | import java.text.DecimalFormat; 15 | import java.text.DecimalFormatSymbols; 16 | import java.text.SimpleDateFormat; 17 | import java.util.Locale; 18 | import java.util.TimeZone; 19 | 20 | public class StepCountAdapter extends CursorAdapter { 21 | private int stepsize; 22 | private int weight; 23 | private int colTime; 24 | private int colCount; 25 | private static final DateFormat SDF = SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT); 26 | private static final DecimalFormat ZF = new DecimalFormat("+0.#;-0.#", new DecimalFormatSymbols(Locale.ROOT)); 27 | 28 | public StepCountAdapter(Context context, Cursor cursor) { 29 | super(context, cursor, 0); 30 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 31 | stepsize = Integer.parseInt(prefs.getString(SettingsFragment.PREF_STEP_SIZE, SettingsFragment.DEFAULT_STEP_SIZE)); 32 | weight = Integer.parseInt(prefs.getString(SettingsFragment.PREF_WEIGHT, SettingsFragment.DEFAULT_WEIGHT)); 33 | colTime = cursor.getColumnIndex("time"); 34 | colCount = cursor.getColumnIndex("count"); 35 | SDF.setTimeZone(TimeZone.getTimeZone("UTC")); 36 | } 37 | 38 | @Override 39 | public View newView(Context context, Cursor cursor, ViewGroup parent) { 40 | return LayoutInflater.from(context).inflate(R.layout.step, parent, false); 41 | } 42 | 43 | @Override 44 | public void bindView(final View view, final Context context, final Cursor cursor) { 45 | // Get values 46 | long time = cursor.getLong(colTime); 47 | int count = cursor.getInt(colCount); 48 | 49 | // Get views 50 | TextView tvTime = (TextView) view.findViewById(R.id.tvTime); 51 | TextView tvCount = (TextView) view.findViewById(R.id.tvCount); 52 | TextView tvDistance = (TextView) view.findViewById(R.id.tvDistance); 53 | TextView tvCalories = (TextView) view.findViewById(R.id.tvCalories); 54 | 55 | // Calculations 56 | float distance = count * stepsize / 100f; 57 | float calories = (distance / 1000f / 1.609344f) * (weight / 0.45359237f) * 0.3f; 58 | // http://www.runnersworld.com/weight-loss/how-many-calories-are-you-really-burning 59 | 60 | // Set values 61 | float zone = (time % (24 * 3600 * 1000L)) / (float) (3600 * 1000); 62 | zone = (zone <= 12 ? 0 : 24) - zone; 63 | tvTime.setText(SDF.format(time + 12 * 3600 * 1000L) + ZF.format(zone)); 64 | tvCount.setText(Long.toString(count)); 65 | tvDistance.setText(Long.toString(Math.round(distance))); 66 | tvCalories.setText(Long.toString(Math.round(calories))); 67 | } 68 | } 69 | 70 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/StepCountWidget.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.app.PendingIntent; 4 | import android.appwidget.AppWidgetManager; 5 | import android.appwidget.AppWidgetProvider; 6 | import android.content.ComponentName; 7 | import android.content.Context; 8 | import android.content.Intent; 9 | import android.widget.RemoteViews; 10 | 11 | import java.util.Date; 12 | 13 | public class StepCountWidget extends AppWidgetProvider { 14 | @Override 15 | public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 16 | DatabaseHelper dh = null; 17 | try { 18 | dh = new DatabaseHelper(context); 19 | int count = dh.getSteps(new Date().getTime()); 20 | 21 | Intent riMain = new Intent(context, SettingsActivity.class); 22 | riMain.putExtra(SettingsFragment.EXTRA_ACTION, SettingsFragment.ACTION_STEPS); 23 | PendingIntent piMain = PendingIntent.getActivity(context, BackgroundService.REQUEST_STEPS, riMain, PendingIntent.FLAG_CANCEL_CURRENT); 24 | 25 | for (int id : appWidgetIds) { 26 | RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.step_widget); 27 | views.setOnClickPendingIntent(R.id.llCount, piMain); 28 | views.setTextViewText(R.id.tvCount, Integer.toString(count)); 29 | appWidgetManager.updateAppWidget(id, views); 30 | } 31 | } finally { 32 | if (dh != null) 33 | dh.close(); 34 | } 35 | } 36 | 37 | public static void updateWidgets(Context context) { 38 | Intent intent = new Intent(context, StepCountWidget.class); 39 | intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 40 | int ids[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, StepCountWidget.class)); 41 | intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); 42 | context.sendBroadcast(intent); 43 | } 44 | } 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/StepCounterService.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.annotation.TargetApi; 4 | import android.app.Service; 5 | import android.content.Context; 6 | import android.content.Intent; 7 | import android.content.SharedPreferences; 8 | import android.hardware.Sensor; 9 | import android.hardware.SensorEvent; 10 | import android.hardware.SensorEventListener; 11 | import android.hardware.SensorManager; 12 | import android.os.Build; 13 | import android.os.IBinder; 14 | import android.preference.PreferenceManager; 15 | import android.util.Log; 16 | 17 | import java.util.Date; 18 | 19 | @TargetApi(Build.VERSION_CODES.KITKAT) 20 | public class StepCounterService extends Service { 21 | private static final String TAG = "BPT2.StepCounterService"; 22 | 23 | public StepCounterService() { 24 | } 25 | 26 | private SensorEventListener mStepCounterListener = new SensorEventListener() { 27 | @Override 28 | public void onSensorChanged(SensorEvent sensorEvent) { 29 | int steps = (int) sensorEvent.values[0]; 30 | Log.w(TAG, "Step count=" + steps); 31 | 32 | // Check delta 33 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(StepCounterService.this); 34 | int last = prefs.getInt(SettingsFragment.PREF_LAST_STEP_COUNT, -1); 35 | int delta = Integer.parseInt(prefs.getString(SettingsFragment.PREF_STEP_DELTA, SettingsFragment.DEFAULT_STEP_DELTA)); 36 | if (last < 0 || steps - last >= delta) { 37 | // Update last step count 38 | prefs.edit().putInt(SettingsFragment.PREF_LAST_STEP_COUNT, steps).apply(); 39 | 40 | if (last >= 0) { 41 | // Update total step count 42 | int stepped = steps - last; 43 | new DatabaseHelper(StepCounterService.this).updateSteps(new Date().getTime(), stepped).close(); 44 | 45 | // Update UI 46 | StepCountWidget.updateWidgets(StepCounterService.this); 47 | 48 | // Send state changed intent 49 | Intent intent = new Intent(StepCounterService.this, BackgroundService.class); 50 | intent.setAction(BackgroundService.ACTION_STATE_CHANGED); 51 | startService(intent); 52 | } 53 | } 54 | } 55 | 56 | @Override 57 | public void onAccuracyChanged(Sensor sensor, int i) { 58 | // Do nothing 59 | } 60 | }; 61 | 62 | @Override 63 | public void onCreate() { 64 | super.onCreate(); 65 | 66 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 67 | prefs.edit().remove(SettingsFragment.PREF_LAST_STEP_COUNT).apply(); 68 | 69 | SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 70 | Sensor stepCounter = sm.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); 71 | if (stepCounter == null) 72 | Log.w(TAG, "No hardware stepcounter available"); 73 | else { 74 | Log.w(TAG, "Registering step counter listener"); 75 | sm.registerListener(mStepCounterListener, stepCounter, SensorManager.SENSOR_DELAY_NORMAL); 76 | } 77 | } 78 | 79 | @Override 80 | public void onDestroy() { 81 | Log.w(TAG, "Unregistering step counter listener"); 82 | SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 83 | sm.unregisterListener(mStepCounterListener); 84 | 85 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 86 | prefs.edit().remove(SettingsFragment.PREF_LAST_STEP_COUNT).apply(); 87 | 88 | super.onDestroy(); 89 | } 90 | 91 | @Override 92 | public int onStartCommand(Intent intent, int flags, int startId) { 93 | return START_STICKY; 94 | } 95 | 96 | @Override 97 | public IBinder onBind(Intent intent) { 98 | return null; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/TimezoneChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.preference.PreferenceManager; 8 | import android.util.Log; 9 | 10 | import java.util.Date; 11 | 12 | public class TimezoneChangedReceiver extends BroadcastReceiver { 13 | private static final String TAG = "BPT2.Timezone"; 14 | 15 | @Override 16 | public void onReceive(final Context context, Intent intent) { 17 | Log.i(TAG, "Received " + intent); 18 | 19 | Intent intentDaily = new Intent(context, BackgroundService.class); 20 | intentDaily.setAction(BackgroundService.ACTION_DAILY); 21 | context.startService(intentDaily); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/WeatherWidget.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.app.PendingIntent; 4 | import android.appwidget.AppWidgetManager; 5 | import android.appwidget.AppWidgetProvider; 6 | import android.content.ComponentName; 7 | import android.content.Context; 8 | import android.content.Intent; 9 | import android.content.SharedPreferences; 10 | import android.preference.PreferenceManager; 11 | import android.widget.RemoteViews; 12 | 13 | import java.text.DecimalFormat; 14 | import java.text.DecimalFormatSymbols; 15 | import java.util.Date; 16 | import java.util.Locale; 17 | 18 | public class WeatherWidget extends AppWidgetProvider { 19 | private static final DecimalFormat DF = new DecimalFormat("0", new DecimalFormatSymbols(Locale.ROOT)); 20 | 21 | @Override 22 | public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 23 | DatabaseHelper dh = null; 24 | try { 25 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 26 | String temperature_unit = prefs.getString(SettingsFragment.PREF_TEMPERATURE, SettingsFragment.DEFAULT_TEMPERATURE); 27 | String report = prefs.getString(SettingsFragment.PREF_LAST_WEATHER_REPORT, null); 28 | Weather weather = (report == null ? null : Weather.deserialize(report)); 29 | 30 | Intent riMain = new Intent(context, SettingsActivity.class); 31 | riMain.putExtra(SettingsFragment.EXTRA_ACTION, SettingsFragment.ACTION_WEATHER); 32 | PendingIntent piMain = PendingIntent.getActivity(context, BackgroundService.REQUEST_WAYPOINT, riMain, PendingIntent.FLAG_CANCEL_CURRENT); 33 | 34 | for (int id : appWidgetIds) { 35 | RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weather_widget); 36 | views.setOnClickPendingIntent(R.id.llWeather, piMain); 37 | if (weather != null && weather.isValid(context)) { 38 | // Show icon 39 | views.setImageViewResource(R.id.ivWeather, BackgroundService.getWeatherIcon(weather, false, context)); 40 | 41 | // Show temperature 42 | if (Double.isNaN(weather.temperature)) 43 | views.setTextViewText(R.id.tvDegrees, ""); 44 | else { 45 | double temperature = weather.temperature; 46 | if ("f".equals(temperature_unit)) 47 | temperature = temperature * 9 / 5 + 32; 48 | views.setTextViewText(R.id.tvDegrees, DF.format(temperature) + "°"); 49 | } 50 | } else { 51 | views.setImageViewResource(R.id.ivWeather, android.R.drawable.ic_menu_help); 52 | views.setTextViewText(R.id.tvDegrees, "?"); 53 | } 54 | appWidgetManager.updateAppWidget(id, views); 55 | } 56 | } finally { 57 | if (dh != null) 58 | dh.close(); 59 | } 60 | } 61 | 62 | public static void updateWidgets(Context context) { 63 | Intent intent = new Intent(context, WeatherWidget.class); 64 | intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 65 | int ids[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WeatherWidget.class)); 66 | intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); 67 | context.sendBroadcast(intent); 68 | } 69 | } 70 | 71 | -------------------------------------------------------------------------------- /app/src/main/java/eu/faircode/backpacktrack2/WikiAdapter.java: -------------------------------------------------------------------------------- 1 | package eu.faircode.backpacktrack2; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.location.Location; 6 | import android.net.Uri; 7 | import android.util.Log; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.ArrayAdapter; 12 | import android.widget.ImageView; 13 | import android.widget.TextView; 14 | import android.widget.Toast; 15 | 16 | import java.util.List; 17 | 18 | public class WikiAdapter extends ArrayAdapter { 19 | private static final String TAG = "BPT2.Wiki"; 20 | 21 | private Location location; 22 | 23 | public WikiAdapter(Context context, List pages, Location location) { 24 | super(context, 0, pages); 25 | this.location = location; 26 | } 27 | 28 | @Override 29 | public View getView(int position, View convertView, ViewGroup parent) { 30 | final Wikimedia.Page page = getItem(position); 31 | if (convertView == null) 32 | convertView = LayoutInflater.from(getContext()).inflate(R.layout.wiki, parent, false); 33 | 34 | TextView tvTitle = (TextView) convertView.findViewById(R.id.tvTitle); 35 | TextView tvDistance = (TextView) convertView.findViewById(R.id.tvDistance); 36 | TextView tvSource = (TextView) convertView.findViewById(R.id.tvSource); 37 | ImageView ivShare = (ImageView) convertView.findViewById(R.id.ivShare); 38 | 39 | tvTitle.setText(page.title); 40 | tvDistance.setText(Math.round(page.location.distanceTo(location)) + " m"); 41 | tvSource.setText(Uri.parse(page.baseurl).getHost() + (page.type == null ? "" : "/" + page.type)); 42 | 43 | ivShare.setOnClickListener(new View.OnClickListener() { 44 | @Override 45 | public void onClick(View view) { 46 | Util.geoShare(page.location, page.title, getContext()); 47 | } 48 | }); 49 | 50 | return convertView; 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m10.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m12.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m14.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m15.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m16.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m17.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m18.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m19.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m20.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m21.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m22.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m23.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m25.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m26.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m27.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m28.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m29.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m30.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m31.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m32.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m33.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m34.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m35.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m36.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m37.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m38.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m39.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m40.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m7.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m8.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_m9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_m9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p0.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p10.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p100.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p101.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p102.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p103.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p104.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p105.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p106.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p107.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p108.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p109.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p110.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p111.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p112.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p113.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p114.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p115.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p116.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p117.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p118.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p119.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p12.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p120.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p14.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p15.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p16.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p17.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p18.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p19.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p20.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p21.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p22.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p23.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p25.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p26.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p27.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p28.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p29.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p30.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p31.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p32.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p33.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p34.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p35.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p36.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p37.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p38.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p39.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p40.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p41.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p42.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p43.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p44.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p45.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p46.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p47.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p48.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p49.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p50.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p51.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p52.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p53.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p54.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p55.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p56.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p57.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p58.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p59.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p61.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p62.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p63.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p64.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p65.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p66.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p67.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p68.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p69.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p7.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p70.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p71.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p72.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p73.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p74.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p75.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p76.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p77.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p78.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p79.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p8.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p80.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p81.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p82.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p83.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p84.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p85.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p86.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p87.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p88.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p89.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p90.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p91.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p92.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p93.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p94.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p95.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p96.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p97.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p98.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/degrees_p99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-mdpi/degrees_p99.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/backpacker_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/backpacker_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/backpacker_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/backpacker_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/backup_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/backup_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/bike.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/car.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_day_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_day_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_day_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_day_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_day_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_day_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_night_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_night_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_night_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_night_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/clear_night_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/clear_night_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/cloud_download_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/cloud_download_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/cloudy_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/cloudy_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/cloudy_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/cloudy_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/cloudy_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/cloudy_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/create_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/create_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/explore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/feature_htl_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/feature_htl_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/fog_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/fog_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/fog_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/fog_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/fog_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/fog_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/gpsfixed_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/gpsfixed_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/history_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/history_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/language_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/language_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/link_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/link_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/location_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/location_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/navigation_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/navigation_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_day_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_day_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_day_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_day_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_day_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_day_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_night_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_night_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_night_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_night_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/partly_cloudy_night_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/partly_cloudy_night_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/pause.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/person_outline_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/person_outline_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/rain_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/rain_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/rain_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/rain_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/rain_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/rain_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/refresh_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/refresh_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/refresh_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/refresh_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/run.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/send_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/send_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/sleet_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/sleet_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/sleet_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/sleet_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/sleet_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/sleet_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/snow_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/snow_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/snow_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/snow_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/snow_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/snow_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/sunny_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/sunny_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/toc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/trending_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/trending_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/trending_up_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/trending_up_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/umbrella_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/umbrella_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/umbrella_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/umbrella_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/walk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/walk_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/walk_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/wind_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/wind_60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/wind_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/wind_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/wind_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M66B/BackPackTrackII/24a21bab7c188f666e32e91353fc79c039d750be/app/src/main/res/drawable-xhdpi/wind_white.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 18 | 19 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 19 | 20 | 23 | 24 | 29 | 30 | 36 | 37 | 38 | 44 | 45 | 51 | 52 | 58 | 59 | 65 | 66 | 72 | 73 | 79 | 80 | 81 | 82 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 20 | 21 | 27 | 28 | 29 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_log.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/duration.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 19 | 20 | 26 | 27 | 33 | 34 | 40 | 41 | 47 | 48 | 54 | 55 | -------------------------------------------------------------------------------- /app/src/main/res/layout/export.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 18 | 19 | 25 | 26 | 32 | 33 | 39 | 40 | 44 | 45 | 52 | 53 |