Icon now has a red background (#54), Trackbook does not need the permission EXTERNAL STORAGE anymore, Night mode has now a dark map
|
@ -61,9 +61,6 @@ Trackbook needs accurate GPS location data to be able to record your movements.
|
||||||
### Permission "VIBRATE"
|
### Permission "VIBRATE"
|
||||||
Tapping and holding some controls will toggle a tiny vibration (force feedback).
|
Tapping and holding some controls will toggle a tiny vibration (force feedback).
|
||||||
|
|
||||||
### Permission "WRITE\_EXTERNAL\_STORAGE"
|
|
||||||
Trackbook uses [osmdroid](https://github.com/osmdroid/osmdroid), which caches map tiles on Android's external storage. You can find the map cache in the `osmdroid` folder on the top level of the user-facing file system.
|
|
||||||
|
|
||||||
Screenshots (v1.1)
|
Screenshots (v1.1)
|
||||||
------------------
|
------------------
|
||||||
[<img src="https://raw.githubusercontent.com/y20k/trackbook/master/fastlane/metadata/en-US/phoneScreenshots/p1.png" width="240">](https://raw.githubusercontent.com/y20k/trackbook/master/fastlane/metadata/en-US/phoneScreenshots/p1.png)
|
[<img src="https://raw.githubusercontent.com/y20k/trackbook/master/fastlane/metadata/en-US/phoneScreenshots/p1.png" width="240">](https://raw.githubusercontent.com/y20k/trackbook/master/fastlane/metadata/en-US/phoneScreenshots/p1.png)
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
<!-- DANGEROUS PERMISSIONS, must request -->
|
<!-- DANGEROUS PERMISSIONS, must request -->
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".Trackbook"
|
android:name=".Trackbook"
|
||||||
|
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 39 KiB |
|
@ -41,6 +41,17 @@ import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.cardview.widget.CardView;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
@ -59,17 +70,6 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.cardview.widget.CardView;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.fragment.app.DialogFragment;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MainActivity class
|
* MainActivity class
|
||||||
|
@ -142,6 +142,8 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
|
|
||||||
// set user agent to prevent getting banned from the osm servers
|
// set user agent to prevent getting banned from the osm servers
|
||||||
Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
|
Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
|
||||||
|
// set the path for osmdroid's files (e.g. tile cache)
|
||||||
|
Configuration.getInstance().setOsmdroidBasePath(this.getExternalFilesDir(null));
|
||||||
|
|
||||||
// set up main layout
|
// set up main layout
|
||||||
setupLayout();
|
setupLayout();
|
||||||
|
@ -220,9 +222,9 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
|
|
||||||
// check for ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE
|
// check for ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE
|
||||||
Boolean location = perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
|
Boolean location = perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
|
||||||
Boolean storage = perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
|
// Boolean storage = perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
|
||||||
|
|
||||||
if (location && storage) {
|
if (location) {
|
||||||
// permissions granted - notify user
|
// permissions granted - notify user
|
||||||
Toast.makeText(this, R.string.toast_message_permissions_granted, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.toast_message_permissions_granted, Toast.LENGTH_SHORT).show();
|
||||||
mPermissionsGranted = true;
|
mPermissionsGranted = true;
|
||||||
|
@ -748,11 +750,11 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
|
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for storage permission
|
// // check for storage permission
|
||||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
// if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||||
// add missing permission
|
// // add missing permission
|
||||||
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
// permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
}
|
// }
|
||||||
|
|
||||||
return permissions;
|
return permissions;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,12 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import org.osmdroid.api.IMapController;
|
import org.osmdroid.api.IMapController;
|
||||||
|
@ -43,6 +49,7 @@ import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
|
||||||
import org.osmdroid.util.GeoPoint;
|
import org.osmdroid.util.GeoPoint;
|
||||||
import org.osmdroid.views.MapView;
|
import org.osmdroid.views.MapView;
|
||||||
import org.osmdroid.views.overlay.ItemizedIconOverlay;
|
import org.osmdroid.views.overlay.ItemizedIconOverlay;
|
||||||
|
import org.osmdroid.views.overlay.TilesOverlay;
|
||||||
import org.osmdroid.views.overlay.compass.CompassOverlay;
|
import org.osmdroid.views.overlay.compass.CompassOverlay;
|
||||||
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
|
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
|
||||||
import org.y20k.trackbook.core.Track;
|
import org.y20k.trackbook.core.Track;
|
||||||
|
@ -50,17 +57,12 @@ import org.y20k.trackbook.helpers.DialogHelper;
|
||||||
import org.y20k.trackbook.helpers.LocationHelper;
|
import org.y20k.trackbook.helpers.LocationHelper;
|
||||||
import org.y20k.trackbook.helpers.LogHelper;
|
import org.y20k.trackbook.helpers.LogHelper;
|
||||||
import org.y20k.trackbook.helpers.MapHelper;
|
import org.y20k.trackbook.helpers.MapHelper;
|
||||||
|
import org.y20k.trackbook.helpers.NightModeHelper;
|
||||||
import org.y20k.trackbook.helpers.StorageHelper;
|
import org.y20k.trackbook.helpers.StorageHelper;
|
||||||
import org.y20k.trackbook.helpers.TrackbookKeys;
|
import org.y20k.trackbook.helpers.TrackbookKeys;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.fragment.app.DialogFragment;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MainActivityMapFragment class
|
* MainActivityMapFragment class
|
||||||
|
@ -173,11 +175,16 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys {
|
||||||
mMapView.setTileSource(TileSourceFactory.MAPNIK);
|
mMapView.setTileSource(TileSourceFactory.MAPNIK);
|
||||||
mMapView.setTilesScaledToDpi(true);
|
mMapView.setTilesScaledToDpi(true);
|
||||||
|
|
||||||
|
// set dark map tiles, if necessary
|
||||||
|
if (NightModeHelper.getNightMode(mActivity)) {
|
||||||
|
mMapView.getOverlayManager().getTilesOverlay().setColorFilter(TilesOverlay.INVERT_COLORS);
|
||||||
|
}
|
||||||
|
|
||||||
// add multi-touch capability
|
// add multi-touch capability
|
||||||
mMapView.setMultiTouchControls(true);
|
mMapView.setMultiTouchControls(true);
|
||||||
|
|
||||||
// disable default zoom controls
|
// disable default zoom controls
|
||||||
mMapView.setBuiltInZoomControls(false);
|
mMapView.getZoomController().setVisibility(org.osmdroid.views.CustomZoomButtonsController.Visibility.NEVER);
|
||||||
|
|
||||||
// add compass to map
|
// add compass to map
|
||||||
CompassOverlay compassOverlay = new CompassOverlay(mActivity, new InternalCompassOrientationProvider(mActivity), mMapView);
|
CompassOverlay compassOverlay = new CompassOverlay(mActivity, new InternalCompassOrientationProvider(mActivity), mMapView);
|
||||||
|
|
|
@ -35,6 +35,16 @@ import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
|
import androidx.constraintlayout.widget.Group;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||||
|
|
||||||
import org.osmdroid.api.IMapController;
|
import org.osmdroid.api.IMapController;
|
||||||
|
@ -42,6 +52,7 @@ import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
|
||||||
import org.osmdroid.util.GeoPoint;
|
import org.osmdroid.util.GeoPoint;
|
||||||
import org.osmdroid.views.MapView;
|
import org.osmdroid.views.MapView;
|
||||||
import org.osmdroid.views.overlay.ItemizedIconOverlay;
|
import org.osmdroid.views.overlay.ItemizedIconOverlay;
|
||||||
|
import org.osmdroid.views.overlay.TilesOverlay;
|
||||||
import org.osmdroid.views.overlay.compass.CompassOverlay;
|
import org.osmdroid.views.overlay.compass.CompassOverlay;
|
||||||
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
|
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
|
||||||
import org.y20k.trackbook.core.Track;
|
import org.y20k.trackbook.core.Track;
|
||||||
|
@ -52,6 +63,7 @@ import org.y20k.trackbook.helpers.LengthUnitHelper;
|
||||||
import org.y20k.trackbook.helpers.LocationHelper;
|
import org.y20k.trackbook.helpers.LocationHelper;
|
||||||
import org.y20k.trackbook.helpers.LogHelper;
|
import org.y20k.trackbook.helpers.LogHelper;
|
||||||
import org.y20k.trackbook.helpers.MapHelper;
|
import org.y20k.trackbook.helpers.MapHelper;
|
||||||
|
import org.y20k.trackbook.helpers.NightModeHelper;
|
||||||
import org.y20k.trackbook.helpers.StorageHelper;
|
import org.y20k.trackbook.helpers.StorageHelper;
|
||||||
import org.y20k.trackbook.helpers.TrackbookKeys;
|
import org.y20k.trackbook.helpers.TrackbookKeys;
|
||||||
|
|
||||||
|
@ -59,16 +71,6 @@ import java.io.File;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
|
||||||
import androidx.constraintlayout.widget.Group;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.fragment.app.DialogFragment;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MainActivityTrackFragment class
|
* MainActivityTrackFragment class
|
||||||
|
@ -179,11 +181,16 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
|
||||||
mMapView.setTileSource(TileSourceFactory.MAPNIK);
|
mMapView.setTileSource(TileSourceFactory.MAPNIK);
|
||||||
mMapView.setTilesScaledToDpi(true);
|
mMapView.setTilesScaledToDpi(true);
|
||||||
|
|
||||||
|
// set dark map tiles, if necessary
|
||||||
|
if (NightModeHelper.getNightMode(mActivity)) {
|
||||||
|
mMapView.getOverlayManager().getTilesOverlay().setColorFilter(TilesOverlay.INVERT_COLORS);
|
||||||
|
}
|
||||||
|
|
||||||
// add multi-touch capability
|
// add multi-touch capability
|
||||||
mMapView.setMultiTouchControls(true);
|
mMapView.setMultiTouchControls(true);
|
||||||
|
|
||||||
// disable default zoom controls
|
// disable default zoom controls
|
||||||
mMapView.setBuiltInZoomControls(false);
|
mMapView.getZoomController().setVisibility(org.osmdroid.views.CustomZoomButtonsController.Visibility.NEVER);
|
||||||
|
|
||||||
// add compass to map
|
// add compass to map
|
||||||
CompassOverlay compassOverlay = new CompassOverlay(mActivity, new InternalCompassOrientationProvider(mActivity), mMapView);
|
CompassOverlay compassOverlay = new CompassOverlay(mActivity, new InternalCompassOrientationProvider(mActivity), mMapView);
|
||||||
|
|
|
@ -25,10 +25,10 @@ import android.preference.PreferenceManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.y20k.trackbook.R;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatDelegate;
|
import androidx.appcompat.app.AppCompatDelegate;
|
||||||
|
|
||||||
|
import org.y20k.trackbook.R;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NightModeHelper class
|
* NightModeHelper class
|
||||||
|
@ -85,6 +85,13 @@ public final class NightModeHelper implements TrackbookKeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return weather Night Mode is on, or not */
|
||||||
|
public static Boolean getNightMode(Context context) {
|
||||||
|
int nightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||||
|
return nightMode == Configuration.UI_MODE_NIGHT_YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Returns state of night mode */
|
/* Returns state of night mode */
|
||||||
private static int getCurrentNightModeState(Context context) {
|
private static int getCurrentNightModeState(Context context) {
|
||||||
return context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
return context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||||
|
|
|
@ -91,23 +91,6 @@
|
||||||
android:text="@string/layout_onboarding_p_permission_location"
|
android:text="@string/layout_onboarding_p_permission_location"
|
||||||
android:id="@+id/p_permission_location" />
|
android:id="@+id/p_permission_location" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
|
||||||
android:textColor="@color/main_onboarding_text"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:text="@string/layout_onboarding_h3_permission_storage"
|
|
||||||
android:id="@+id/h3_permission_storage"
|
|
||||||
android:layout_marginTop="@dimen/activity_vertical_margin" />
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
|
||||||
android:textColor="@color/main_onboarding_text"
|
|
||||||
android:text="@string/layout_onboarding_p_permission_storage"
|
|
||||||
android:id="@+id/p_permission_storage" />
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_background.png
Normal file
After Width: | Height: | Size: 522 B |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_background.png
Normal file
After Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
Normal file
After Width: | Height: | Size: 750 B |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.1 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
@ -82,7 +82,7 @@
|
||||||
<string name="layout_onboarding_description_app_icon">Trackbook App-Symbol</string>
|
<string name="layout_onboarding_description_app_icon">Trackbook App-Symbol</string>
|
||||||
<string name="layout_onboarding_h2_app_name">Trackbook</string>
|
<string name="layout_onboarding_h2_app_name">Trackbook</string>
|
||||||
<string name="layout_onboarding_p_app_claim">Bewegungsrekorder</string>
|
<string name="layout_onboarding_p_app_claim">Bewegungsrekorder</string>
|
||||||
<string name="layout_onboarding_h2_request_permissions">Trackbook kann ohne diese Berechtigungen nicht ausgeführt werden:</string>
|
<string name="layout_onboarding_h2_request_permissions">Trackbook kann ohne diese Berechtigung nicht ausgeführt werden:</string>
|
||||||
<string name="layout_onboarding_h3_permission_location">STANDORT</string>
|
<string name="layout_onboarding_h3_permission_location">STANDORT</string>
|
||||||
<string name="layout_onboarding_p_permission_location">Trackbook benötigt präzise GPS-Informationen, um Bewegungen aufzeichnen zu können. Wenn GPS nicht verfügbar ist, oder wenn die GPS-Daten zu ungenau sind, nutzt Trackbook zur Ortung Mobilfunk- und WLAN-Triangulation.</string>
|
<string name="layout_onboarding_p_permission_location">Trackbook benötigt präzise GPS-Informationen, um Bewegungen aufzeichnen zu können. Wenn GPS nicht verfügbar ist, oder wenn die GPS-Daten zu ungenau sind, nutzt Trackbook zur Ortung Mobilfunk- und WLAN-Triangulation.</string>
|
||||||
<string name="layout_onboarding_h3_permission_storage">SPEICHER</string>
|
<string name="layout_onboarding_h3_permission_storage">SPEICHER</string>
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
<string name="layout_onboarding_description_app_icon">Trackbook App Icon</string>
|
<string name="layout_onboarding_description_app_icon">Trackbook App Icon</string>
|
||||||
<string name="layout_onboarding_h2_app_name">Trackbook</string>
|
<string name="layout_onboarding_h2_app_name">Trackbook</string>
|
||||||
<string name="layout_onboarding_p_app_claim">Movement Recorder</string>
|
<string name="layout_onboarding_p_app_claim">Movement Recorder</string>
|
||||||
<string name="layout_onboarding_h2_request_permissions">Trackbook cannot work without these permissions:</string>
|
<string name="layout_onboarding_h2_request_permissions">Trackbook cannot work without this permission:</string>
|
||||||
<string name="layout_onboarding_h3_permission_location">LOCATION</string>
|
<string name="layout_onboarding_h3_permission_location">LOCATION</string>
|
||||||
<string name="layout_onboarding_p_permission_location">Trackbook needs accurate GPS data to be able to record your movements. If the GPS data is not available or not accurate enough, Trackbook uses location data from cell tower and Wi-Fi triangulation.</string>
|
<string name="layout_onboarding_p_permission_location">Trackbook needs accurate GPS data to be able to record your movements. If the GPS data is not available or not accurate enough, Trackbook uses location data from cell tower and Wi-Fi triangulation.</string>
|
||||||
<string name="layout_onboarding_h3_permission_storage">STORAGE</string>
|
<string name="layout_onboarding_h3_permission_storage">STORAGE</string>
|
||||||
|
|
|
@ -8,8 +8,8 @@ How to create Trackbooks's [Adaptive Icon](https://developer.android.com/guide/p
|
||||||
|
|
||||||
1. Go to `File > New > Image Asset`
|
1. Go to `File > New > Image Asset`
|
||||||
2. Choose `Icon Type > Launcher Icons (Adaptive and Legacy)`
|
2. Choose `Icon Type > Launcher Icons (Adaptive and Legacy)`
|
||||||
3. Foreground Layer: Select the file [trackbook-app-icon-current-without-background.png](https://raw.githubusercontent.com/y20k/trackbook/master/assets/trackbook-app-icon-current-without-background.png)
|
3. Foreground Layer: Select the file [trackbook-app-icon-current-foreground.png](https://raw.githubusercontent.com/y20k/trackbook/master/assets/trackbook-app-icon-current-foreground.png)
|
||||||
4. Background Layer: Select the color `3C98DB`
|
4. Background Layer: Select the file [trackbook-app-icon-current-background.png](https://raw.githubusercontent.com/y20k/trackbook/master/assets/trackbook-app-icon-current-background.png)
|
||||||
5. Foreground Layer: Set Trim to `No`
|
5. Foreground Layer: Set Trim to `No`
|
||||||
6. Foreground Layer: Set Resize to `100%`
|
6. Foreground Layer: Set Resize to `100%`
|
||||||
|
|
||||||
|
|
BIN
assets/trackbook-app-icon-current-background.png
Normal file
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 18 KiB |
|
@ -1,28 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
width="108pt" height="108pt" viewBox="0 0 144.00001 144.00001" sodipodi:docname="trackbook-app-icon-red.svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
inkscape:version="0.92.4 5da689c313, 2019-01-14" inkscape:export-filename="/home/solaris/Desktop/trackbook/assets/trackbook-app-icon-background-current.png"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
inkscape:export-xdpi="1000" inkscape:export-ydpi="1000"><metadata
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.1"
|
|
||||||
id="svg2"
|
|
||||||
xml:space="preserve"
|
|
||||||
width="108pt"
|
|
||||||
height="108pt"
|
|
||||||
viewBox="0 0 144.00001 144.00001"
|
|
||||||
sodipodi:docname="trackbook-app-icon-current.svg"
|
|
||||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
|
||||||
inkscape:export-filename="/home/solaris/Desktop/trackbook/assets/trackbook-app-icon-current.png"
|
|
||||||
inkscape:export-xdpi="1117.09"
|
|
||||||
inkscape:export-ydpi="1117.09"><metadata
|
|
||||||
id="metadata8"><rdf:RDF><cc:Work
|
id="metadata8"><rdf:RDF><cc:Work
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||||
id="defs6"><linearGradient
|
id="defs6"><linearGradient
|
||||||
id="linearGradient4834"
|
id="linearGradient4834"
|
||||||
spreadMethod="pad"
|
spreadMethod="pad"
|
||||||
|
@ -305,12 +292,12 @@
|
||||||
id="g388"><image
|
id="g388"><image
|
||||||
sodipodi:absref="/home/solaris/Desktop/trackbook/assets/app-icon-5_img0.png"
|
sodipodi:absref="/home/solaris/Desktop/trackbook/assets/app-icon-5_img0.png"
|
||||||
xlink:href="app-icon-5_img0.png"
|
xlink:href="app-icon-5_img0.png"
|
||||||
width="1"
|
id="image386"
|
||||||
height="1"
|
|
||||||
style="image-rendering:optimizeSpeed"
|
|
||||||
preserveAspectRatio="none"
|
|
||||||
transform="matrix(1,0,0,-1,0,1)"
|
transform="matrix(1,0,0,-1,0,1)"
|
||||||
id="image386" /></g></g></g></g></g></g></g></mask><clipPath
|
preserveAspectRatio="none"
|
||||||
|
style="image-rendering:optimizeSpeed"
|
||||||
|
height="1"
|
||||||
|
width="1" /></g></g></g></g></g></g></g></mask><clipPath
|
||||||
clipPathUnits="userSpaceOnUse"
|
clipPathUnits="userSpaceOnUse"
|
||||||
id="clipPath408"><path
|
id="clipPath408"><path
|
||||||
d="m 262.198,439.809 h 70.663 V 33 h -70.663 z"
|
d="m 262.198,439.809 h 70.663 V 33 h -70.663 z"
|
||||||
|
@ -365,45 +352,58 @@
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:window-width="2043"
|
inkscape:window-width="2043"
|
||||||
inkscape:window-height="1303"
|
inkscape:window-height="1370"
|
||||||
id="namedview4"
|
id="namedview4"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="11.313708"
|
inkscape:zoom="8"
|
||||||
inkscape:cx="65.112209"
|
inkscape:cx="69.795993"
|
||||||
inkscape:cy="75.672871"
|
inkscape:cy="70.240041"
|
||||||
inkscape:window-x="517"
|
inkscape:window-x="517"
|
||||||
inkscape:window-y="49"
|
inkscape:window-y="27"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer3"
|
||||||
units="pt"
|
units="pt"
|
||||||
showguides="true"
|
showguides="true"
|
||||||
inkscape:guide-bbox="true"
|
inkscape:guide-bbox="true"
|
||||||
fit-margin-top="0"
|
fit-margin-top="0"
|
||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"><sodipodi:guide
|
fit-margin-bottom="0" /><g
|
||||||
position="0,72.000005"
|
|
||||||
orientation="0,1"
|
|
||||||
id="guide4776"
|
|
||||||
inkscape:locked="true"
|
|
||||||
inkscape:label=""
|
|
||||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
|
||||||
position="72.000005,0"
|
|
||||||
orientation="1,0"
|
|
||||||
id="guide4778"
|
|
||||||
inkscape:locked="true"
|
|
||||||
inkscape:label=""
|
|
||||||
inkscape:color="rgb(0,0,255)" /></sodipodi:namedview><g
|
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer3"
|
id="layer3"
|
||||||
inkscape:label="circular background "
|
inkscape:label="background "
|
||||||
style="display:inline"><circle
|
style="display:inline"><rect
|
||||||
style="opacity:1;fill:#3c98db;fill-opacity:1;stroke-width:9.66016388"
|
style="display:inline;opacity:1;fill:#d93025;fill-opacity:1;stroke:none;stroke-width:1.54674852;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.07843137"
|
||||||
id="path4781"
|
id="rect971"
|
||||||
cx="72"
|
width="144"
|
||||||
cy="72"
|
height="144"
|
||||||
r="44"
|
x="0"
|
||||||
inkscape:label="circular background" /></g><g
|
y="6.6613381e-15"
|
||||||
|
inkscape:label="red square" /><path
|
||||||
|
style="display:none;opacity:1;fill:#17181a;fill-opacity:0.0627451;stroke:none;stroke-width:1.54674852;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.07843137"
|
||||||
|
d="M 0,0 144,144 H 0 Z"
|
||||||
|
id="rect973"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:label="diagonal shaddow" /><path
|
||||||
|
inkscape:label="diagonal shaddow"
|
||||||
|
sodipodi:nodetypes="ccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path978"
|
||||||
|
d="M 0,0 26,-1.1396943e-7 144,144 H 0 Z"
|
||||||
|
style="display:none;opacity:1;fill:#17181a;fill-opacity:0.0627451;stroke:none;stroke-width:1.54674852;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.07843137" /><rect
|
||||||
|
inkscape:label="left shaddow"
|
||||||
|
y="6.6613381e-15"
|
||||||
|
x="0"
|
||||||
|
height="144"
|
||||||
|
width="72"
|
||||||
|
id="rect976"
|
||||||
|
style="display:inline;opacity:1;fill:#17181a;fill-opacity:0.0627451;stroke:none;stroke-width:1.09371638;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.07843137" /><path
|
||||||
|
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.13320997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.07843137"
|
||||||
|
d="M 0.06640625,0.06640625 V 143.93359 H 143.93359 V 0.06640625 Z M 72,28 A 44,44 0 0 1 116,72 44,44 0 0 1 72,116 44,44 0 0 1 28,72 44,44 0 0 1 72,28 Z"
|
||||||
|
id="rect957"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:label="cicular stencil" /></g><g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
inkscape:label="shaddow shape"
|
inkscape:label="shaddow shape"
|
||||||
|
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
@ -8,7 +8,7 @@ buildscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.3.2'
|
classpath 'com.android.tools.build:gradle:3.4.0'
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
}
|
}
|
||||||
|
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
#Thu Oct 04 08:52:03 CEST 2018
|
#Wed Apr 24 13:40:20 CEST 2019
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||||
|
|
|
@ -48,6 +48,3 @@ Trackbook needs accurate GPS location data to be able to record your movements.
|
||||||
|
|
||||||
Permission "VIBRATE"
|
Permission "VIBRATE"
|
||||||
Tapping and holding some controls will toggle a tiny vibration (force feedback).
|
Tapping and holding some controls will toggle a tiny vibration (force feedback).
|
||||||
|
|
||||||
Permission "WRITE\_EXTERNAL\_STORAGE"
|
|
||||||
Trackbook uses osmdroid, which caches map tiles on Android's external storage. You can find the map cache in the "osmdroid" folder on the top level of the user-facing file system.
|
|