From 382b094b92ccbefc334f07581e34dc3e39521fc9 Mon Sep 17 00:00:00 2001 From: y20k Date: Fri, 16 Dec 2016 22:12:43 +0100 Subject: [PATCH] increased number of saved tracks to 25, keep track of button states, added some more accessibility element descriptions (#2) --- app/build.gradle | 6 +- .../java/org/y20k/trackbook/MainActivity.java | 174 +++++++++++------- .../trackbook/MainActivityMapFragment.java | 60 +++--- .../trackbook/helpers/NotificationHelper.java | 10 +- .../y20k/trackbook/helpers/StorageHelper.java | 2 +- .../y20k/trackbook/helpers/TrackbookKeys.java | 5 + app/src/main/res/layout/activity_main_old.xml | 49 ----- .../res/layout/floating_action_button.xml | 13 +- app/src/main/res/layout/fragment_main_map.xml | 3 +- app/src/main/res/values-de/strings.xml | 8 + app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/strings.xml | 8 + 12 files changed, 185 insertions(+), 155 deletions(-) delete mode 100644 app/src/main/res/layout/activity_main_old.xml diff --git a/app/build.gradle b/app/build.gradle index 69bcf37..b308080 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,9 +23,9 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.1' - compile 'com.android.support:design:25.0.1' - compile 'com.android.support:cardview-v7:25.0.1' + compile 'com.android.support:appcompat-v7:25.1.0' + compile 'com.android.support:design:25.1.0' + compile 'com.android.support:cardview-v7:25.1.0' compile 'org.osmdroid:osmdroid-android:5.5:release@aar' compile 'com.google.code.gson:gson:2.8.0' } diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.java b/app/src/main/java/org/y20k/trackbook/MainActivity.java index 84b24f0..716c36f 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.java @@ -69,6 +69,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { /* Main class variables */ + private ViewPager mViewPager; private boolean mTrackerServiceRunning; private boolean mCurrentTrackVisible; private boolean mPermissionsGranted; @@ -81,6 +82,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { private MainActivityMapFragment mMainActivityMapFragment; private MainActivityTrackFragment mMainActivityTrackFragment; private BroadcastReceiver mTrackingStoppedReceiver; + private int mFloatingActionButtonState; private int mSelectedTab; @@ -183,12 +185,17 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { @Override protected void onResume() { super.onResume(); + LogHelper.v(LOG_TAG, "onResume called."); + + // TODO loadAppState? + loadAppState(this); // handle new intents - onNewIntent does not seem to work handleIncomingIntent(); // if not in onboarding mode: set state of FloatingActionButton if (mFloatingActionButton != null) { + LogHelper.v(LOG_TAG, "onResume: setting state of FAB."); setFloatingActionButtonState(); } } @@ -241,21 +248,22 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { protected void onSaveInstanceState(Bundle outState) { LogHelper.v(LOG_TAG, "onSaveInstanceState called."); outState.putBoolean(INSTANCE_TRACKING_STATE, mTrackerServiceRunning); - outState.putBoolean(INSTANCE_TRACK_VISIBLE, mCurrentTrackVisible); - outState.putBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, mFloatingActionButtonSubMenuVisible); outState.putInt(INSTANCE_SELECTED_TAB, mSelectedTab); + outState.putInt(INSTANCE_FAB_STATE, mFloatingActionButtonState); + outState.putBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, mFloatingActionButtonSubMenuVisible); super.onSaveInstanceState(outState); } + @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); LogHelper.v(LOG_TAG, "onRestoreInstanceState called."); mTrackerServiceRunning = savedInstanceState.getBoolean(INSTANCE_TRACKING_STATE, false); - mCurrentTrackVisible = savedInstanceState.getBoolean(INSTANCE_TRACK_VISIBLE, false); - mFloatingActionButtonSubMenuVisible = savedInstanceState.getBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, false); mSelectedTab = savedInstanceState.getInt(INSTANCE_SELECTED_TAB, 0); + mFloatingActionButtonState = savedInstanceState.getInt(INSTANCE_FAB_STATE, FAB_STATE_DEFAULT); + mFloatingActionButtonSubMenuVisible = savedInstanceState.getBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, false); } @@ -263,10 +271,12 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { private void saveAppState(Context context) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = settings.edit(); - editor.putBoolean(INSTANCE_TRACKING_STATE, mTrackerServiceRunning); - editor.putBoolean(INSTANCE_TRACK_VISIBLE, mCurrentTrackVisible); - editor.putBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, mFloatingActionButtonSubMenuVisible); - editor.putInt(INSTANCE_SELECTED_TAB, mSelectedTab); + // mCurrentTrackVisible is handled (= saved) by fragment + +// editor.putBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, mFloatingActionButtonSubMenuVisible); +// editor.putBoolean(INSTANCE_TRACKING_STATE, mTrackerServiceRunning); +// editor.putInt(INSTANCE_SELECTED_TAB, mSelectedTab); + editor.apply(); LogHelper.v(LOG_TAG, "Saving state."); } @@ -275,10 +285,12 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { /* Loads app state from preferences */ private void loadAppState(Context context) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); - mTrackerServiceRunning = settings.getBoolean(INSTANCE_TRACKING_STATE, false); mCurrentTrackVisible = settings.getBoolean(INSTANCE_TRACK_VISIBLE, false); - mFloatingActionButtonSubMenuVisible = settings.getBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, false); - mSelectedTab = settings.getInt(INSTANCE_SELECTED_TAB, 0); + +// mFloatingActionButtonSubMenuVisible = settings.getBoolean(INSTANCE_FAB_SUB_MENU_VISIBLE, false); +// mTrackerServiceRunning = settings.getBoolean(INSTANCE_TRACKING_STATE, false); +// mSelectedTab = settings.getInt(INSTANCE_SELECTED_TAB, 0); + LogHelper.v(LOG_TAG, "Loading state."); } @@ -297,7 +309,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. - ViewPager mViewPager = (ViewPager) findViewById(R.id.container); + mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(sectionsPagerAdapter); mViewPager.setCurrentItem(mSelectedTab); @@ -308,12 +320,16 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { public void onTabSelected(TabLayout.Tab tab) { switch (tab.getPosition()) { case FRAGMENT_ID_MAP: + // show the Floating Action Button mFloatingActionButton.show(); break; case FRAGMENT_ID_TRACK: + // hide the Floating Action Button - and its sub menu mFloatingActionButton.hide(); + showFloatingActionButtonMenu(false); break; default: + // show the Floating Action Button mFloatingActionButton.show(); break; } @@ -375,50 +391,59 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { /* Handles tap on the record button */ private void handleFloatingActionButtonClick(View view) { - if (mTrackerServiceRunning) { - // show snackbar - Snackbar.make(view, R.string.snackbar_message_tracking_stopped, Snackbar.LENGTH_SHORT).setAction("Action", null).show(); - // change state - // --> is handled by broadcast receiver + switch (mFloatingActionButtonState) { + case FAB_STATE_DEFAULT: + // show snackbar + Snackbar.make(view, R.string.snackbar_message_tracking_started, Snackbar.LENGTH_SHORT).setAction("Action", null).show(); - // stop tracker service - Intent intent = new Intent(this, TrackerService.class); - intent.setAction(ACTION_STOP); - startService(intent); - - } else if (mCurrentTrackVisible) { - // toggle floating action button sub menu - if (!mFloatingActionButtonSubMenuVisible) { - showFloatingActionButtonMenu(true); - } else { - showFloatingActionButtonMenu(false); - } - - } else { - // show snackbar - Snackbar.make(view, R.string.snackbar_message_tracking_started, Snackbar.LENGTH_SHORT).setAction("Action", null).show(); - - // change state - mTrackerServiceRunning = true; - mCurrentTrackVisible = true; - setFloatingActionButtonState(); - - // get last location from MainActivity Fragment - Location lastLocation = mMainActivityMapFragment.getCurrentBestLocation(); - - if (lastLocation != null) { - // start tracker service - Intent intent = new Intent(this, TrackerService.class); - intent.setAction(ACTION_START); - intent.putExtra(EXTRA_LAST_LOCATION, lastLocation); - startService(intent); - } else { - Toast.makeText(this, getString(R.string.toast_message_location_services_not_ready), Toast.LENGTH_LONG).show(); - // change state back - mTrackerServiceRunning = false; + // change state + mTrackerServiceRunning = true; + mCurrentTrackVisible = true; + mFloatingActionButtonState = FAB_STATE_RECORDING; setFloatingActionButtonState(); - } + + // get last location from MainActivity Fragment + Location lastLocation = mMainActivityMapFragment.getCurrentBestLocation(); + + if (lastLocation != null) { + // start tracker service + Intent intent = new Intent(this, TrackerService.class); + intent.setAction(ACTION_START); + intent.putExtra(EXTRA_LAST_LOCATION, lastLocation); + startService(intent); + } else { + Toast.makeText(this, getString(R.string.toast_message_location_services_not_ready), Toast.LENGTH_LONG).show(); + // change state back + mTrackerServiceRunning = false; + setFloatingActionButtonState(); + } + + break; + + case FAB_STATE_RECORDING: + // show snackbar + Snackbar.make(view, R.string.snackbar_message_tracking_stopped, Snackbar.LENGTH_SHORT).setAction("Action", null).show(); + + // change state + // --> is handled by broadcast receiver + + // stop tracker service + Intent intent = new Intent(this, TrackerService.class); + intent.setAction(ACTION_STOP); + startService(intent); + + break; + + case FAB_STATE_SAVE: + // toggle floating action button sub menu + if (!mFloatingActionButtonSubMenuVisible) { + showFloatingActionButtonMenu(true); + } else { + showFloatingActionButtonMenu(false); + } + + break; } @@ -432,13 +457,15 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { LogHelper.v(LOG_TAG, "User chose SAVE and CLEAR"); // clear map and save track - mMainActivityMapFragment.clearMap(true); // TODO change to true + mMainActivityMapFragment.clearMap(true); mCurrentTrackVisible = false; -// // reset current track // TODO ist this still necessary +// // reset current track // TODO is this still necessary? // mMainActivityTrackFragment.refreshTrackView(); - // TODO change to track tab + // display track tab + mSelectedTab = FRAGMENT_ID_TRACK; + mViewPager.setCurrentItem(mSelectedTab); // dismiss notification NotificationHelper.stop(); @@ -447,7 +474,10 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { showFloatingActionButtonMenu(false); // update Floating Action Button icon + mFloatingActionButtonState = FAB_STATE_DEFAULT; setFloatingActionButtonState(); + + Toast.makeText(this, getString(R.string.toast_message_track_save), Toast.LENGTH_LONG).show(); } @@ -466,18 +496,29 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { showFloatingActionButtonMenu(false); // update Floating Action Button icon + mFloatingActionButtonState = FAB_STATE_DEFAULT; setFloatingActionButtonState(); + + Toast.makeText(this, getString(R.string.toast_message_track_clear), Toast.LENGTH_LONG).show(); } /* Set state of FloatingActionButton */ private void setFloatingActionButtonState() { - if (mTrackerServiceRunning) { - mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_red_24dp); - } else if (mCurrentTrackVisible) { - mFloatingActionButton.setImageResource(R.drawable.ic_save_white_24dp); - } else { - mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp); + + switch (mFloatingActionButtonState) { + case FAB_STATE_DEFAULT: + mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp); + break; + case FAB_STATE_RECORDING: + mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_red_24dp); + break; + case FAB_STATE_SAVE: + mFloatingActionButton.setImageResource(R.drawable.ic_save_white_24dp); + break; + default: + mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp); + break; } } @@ -501,12 +542,14 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { private void handleIncomingIntent() { Intent intent = getIntent(); String intentAction = intent.getAction(); - switch (intentAction) { case ACTION_SHOW_MAP: - if (intent.hasExtra(EXTRA_TRACKING_STATE) && mMainActivityMapFragment != null) { + if (intent.hasExtra(EXTRA_TRACKING_STATE)) { mTrackerServiceRunning = intent.getBooleanExtra(EXTRA_TRACKING_STATE, false); - mMainActivityMapFragment.setTrackingState(mTrackerServiceRunning); + // mMainActivityMapFragment.setTrackingState(mTrackerServiceRunning); + if (mTrackerServiceRunning) { + mFloatingActionButtonState = FAB_STATE_RECORDING; + } // prevent multiple reactions to intent intent.setAction(ACTION_DEFAULT); } @@ -547,6 +590,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { public void onReceive(Context context, Intent intent) { // change state mTrackerServiceRunning = false; + mFloatingActionButtonState = FAB_STATE_SAVE; setFloatingActionButtonState(); // pass tracking state to MainActivityMapFragment diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java index 01d7621..852748f 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java @@ -102,15 +102,11 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { // action bar has options menu setHasOptionsMenu(true); - // restore first start state + // restore first start state and tracking state mFirstStart = true; - if (savedInstanceState != null) { - mFirstStart = savedInstanceState.getBoolean(INSTANCE_FIRST_START, true); - } - - // restore tracking and map state mTrackerServiceRunning = false; if (savedInstanceState != null) { + mFirstStart = savedInstanceState.getBoolean(INSTANCE_FIRST_START, true); mTrackerServiceRunning = savedInstanceState.getBoolean(INSTANCE_TRACKING_STATE, false); } @@ -140,9 +136,6 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { mCurrentBestLocation.setLongitude(DEFAULT_LONGITUDE); } - LogHelper.v(LOG_TAG, "!!! TRACK:" + mCurrentBestLocation.getExtras()); - - // get state of location system setting mLocationSystemSetting = LocationHelper.checkLocationSystemSetting(mActivity); @@ -222,6 +215,9 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { // set visibility mFragmentVisible = true; + // TODO + handleIncomingIntent(); + // center map on current position - if TrackerService is running if (mTrackerServiceRunning) { mController.setCenter(convertToGeoPoint(mCurrentBestLocation)); @@ -257,6 +253,9 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { // disable content observer for changes in System Settings mActivity.getContentResolver().unregisterContentObserver(mSettingsContentObserver); + + // save state of track visibility + saveTrackVisibilityState(mActivity); } @@ -344,8 +343,8 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(INSTANCE_FIRST_START, mFirstStart); - outState.putParcelable(INSTANCE_CURRENT_LOCATION, mCurrentBestLocation); outState.putBoolean(INSTANCE_TRACKING_STATE, mTrackerServiceRunning); + outState.putParcelable(INSTANCE_CURRENT_LOCATION, mCurrentBestLocation); outState.putDouble(INSTANCE_LATITUDE_MAIN_MAP, mMapView.getMapCenter().getLatitude()); outState.putDouble(INSTANCE_LONGITUDE_MAIN_MAP, mMapView.getMapCenter().getLongitude()); outState.putInt(INSTANCE_ZOOM_LEVEL_MAIN_MAP, mMapView.getZoomLevel()); @@ -393,21 +392,28 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { // clear map if (mTrackOverlay != null) { mMapView.getOverlays().remove(mTrackOverlay); + mTrackOverlay = null; } - // save track object if requested if (saveTrack) { + // save track object if requested SaveTrackAsyncHelper saveTrackAsyncHelper = new SaveTrackAsyncHelper(); saveTrackAsyncHelper.execute(); Toast.makeText(mActivity, mActivity.getString(R.string.toast_message_save_track), Toast.LENGTH_LONG).show(); + } else { + // clear track object + mTrack = null; } + // save track state + saveTrackVisibilityState(mActivity); } - /* Getter for length of current track */ - public String getCurrentTrackLength() { - return mTrack.getTrackDistance(); + /* Handles new incoming intents */ + private void handleIncomingIntent() { + Intent intent = mActivity.getIntent(); + // TODO get track from intent if not present } @@ -544,20 +550,30 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { } - /* Saves state of map */ - private void saveMaoState(Context context) { + /* Saves state of track visibility to SharedPreferences */ + private void saveTrackVisibilityState(Context context) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = settings.edit(); - editor.putInt(PREFS_ZOOM_LEVEL, mMapView.getZoomLevel()); + editor.putBoolean(INSTANCE_TRACK_VISIBLE, (mTrackOverlay != null)); editor.apply(); + LogHelper.v(LOG_TAG, "Saving state: track visibility = " + (mTrackOverlay != null)); } - /* Loads app state from preferences */ - private void loadMapState(Context context) { - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); - int zoom = settings.getInt(PREFS_ZOOM_LEVEL, 16); - } +// /* Saves state of map */ +// private void saveMaoState(Context context) { +// SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); +// SharedPreferences.Editor editor = settings.edit(); +// editor.putInt(PREFS_ZOOM_LEVEL, mMapView.getZoomLevel()); +// editor.apply(); +// } + + +// /* Loads app state from preferences */ +// private void loadMapState(Context context) { +// SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); +// int zoom = settings.getInt(PREFS_ZOOM_LEVEL, 16); +// } /** diff --git a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.java b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.java index 03606b0..0791079 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.java @@ -94,6 +94,7 @@ public class NotificationHelper implements TrackbookKeys { String contentText = mService.getString(R.string.notification_content_distance) + ": " + track.getTrackDistance() + " | " + mService.getString(R.string.notification_content_duration) + " : " + track.getTrackDuration(); + // ACTION: NOTIFICATION TAP Intent tapActionIntent = new Intent(mService, MainActivity.class); tapActionIntent.setAction(ACTION_SHOW_MAP); @@ -106,14 +107,6 @@ public class NotificationHelper implements TrackbookKeys { // pending intent wrapper for notification tap PendingIntent tapActionPendingIntent = tapActionIntentBuilder.getPendingIntent(10, PendingIntent.FLAG_UPDATE_CURRENT); - // ACTION: NOTIFICATION SWIPE - Intent swipeActionIntent = new Intent(mService, MainActivity.class); - swipeActionIntent.setAction(ACTION_SHOW_MAP); - swipeActionIntent.putExtra(EXTRA_CLEAR_MAP, true); // EXTRA_CLEAR_MAP is not (yet) used - map gets cleared by default - // artificial back stack for started Activity (https://developer.android.com/training/notify-user/navigation.html#DirectEntry) - TaskStackBuilder swipeActionIntentBuilder = TaskStackBuilder.create(mService); - swipeActionIntentBuilder.addParentStack(MainActivity.class); - swipeActionIntentBuilder.addNextIntent(swipeActionIntent); // ACTION: NOTIFICATION BUTTON STOP Intent stopActionIntent = new Intent(mService, TrackerService.class); @@ -121,6 +114,7 @@ public class NotificationHelper implements TrackbookKeys { // pending intent wrapper for notification stop action PendingIntent stopActionPendingIntent = PendingIntent.getService(mService, 12, stopActionIntent, 0); + // construct notification in builder NotificationCompat.Builder builder; builder = new NotificationCompat.Builder(mService); diff --git a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java index f99fc81..62b9a21 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java @@ -50,7 +50,7 @@ public class StorageHelper implements TrackbookKeys { private static final String LOG_TAG = StorageHelper.class.getSimpleName(); /* Main class variables */ - private final int mMaxTrackFiles = 10; + private final int mMaxTrackFiles = 25; private final String mDirectoryName = "tracks"; private final String mFileExtension = ".trackbook"; private final Activity mActivity; diff --git a/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java b/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java index 0c029be..77d0540 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java @@ -62,6 +62,7 @@ public interface TrackbookKeys { String INSTANCE_TRACKING_STATE = "trackingState"; String INSTANCE_TRACK_VISIBLE = "trackVisible"; String INSTANCE_SELECTED_TAB = "selectedTab"; + String INSTANCE_FAB_STATE = "fabState"; String INSTANCE_FAB_SUB_MENU_VISIBLE = "fabSubMenuVisible"; String INSTANCE_TRACK_MAIN_MAP = "trackMainMap"; String INSTANCE_LATITUDE_MAIN_MAP = "latitudeMainMap"; @@ -92,6 +93,10 @@ public interface TrackbookKeys { int INFOSHEET_CONTENT_ABOUT = 1; int METRIC = 1; int IMPERIAL = 2; + int FAB_STATE_DEFAULT = 0; + int FAB_STATE_RECORDING = 1; + int FAB_STATE_SAVE = 2; + double DEFAULT_LATITUDE = 49.41667; // latitude Nordkapp, Norway double DEFAULT_LONGITUDE = 8.67201; // longitude Nordkapp, Norway } diff --git a/app/src/main/res/layout/activity_main_old.xml b/app/src/main/res/layout/activity_main_old.xml deleted file mode 100644 index f00794e..0000000 --- a/app/src/main/res/layout/activity_main_old.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/floating_action_button.xml b/app/src/main/res/layout/floating_action_button.xml index dc1e291..09d627b 100644 --- a/app/src/main/res/layout/floating_action_button.xml +++ b/app/src/main/res/layout/floating_action_button.xml @@ -9,6 +9,7 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" + android:gravity="bottom" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" app:layout_behavior="org.y20k.trackbook.layout.DodgeAbleLayoutBehavior"> @@ -16,9 +17,8 @@ @@ -71,6 +72,7 @@ @@ -111,6 +113,7 @@ android:id="@+id/fabMainButton" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:contentDescription="@string/descr_fab_main" app:srcCompat="@drawable/ic_fiber_manual_record_white_24dp" app:fabSize="normal" /> diff --git a/app/src/main/res/layout/fragment_main_map.xml b/app/src/main/res/layout/fragment_main_map.xml index 53c17cb..e1048dc 100644 --- a/app/src/main/res/layout/fragment_main_map.xml +++ b/app/src/main/res/layout/fragment_main_map.xml @@ -6,8 +6,7 @@ android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" - tools:context=".MainActivityMapFragment" - tools:showIn="@layout/activity_main_old"> + tools:context=".MainActivityMapFragment"> Letzte Position: Aufzeichnung wird gespeichert. über eine Stunde + Aufzeichnung zurückgesetzt. + Speichere Aufzeichnung. + Quelle @@ -91,6 +94,11 @@ Karte der aktuellen Aufzeichnung Karte der letzten Aufzeichnung + Haupt-Aktionsbutton + Beschreibung des Speichern-und-Zurücksetzen-Buttons + kleiner Speichern-und-Zurücksetzen-Button + Beschreibung des Zurücksetzen-Buttons + kleiner Zurücksetzen-Button Überschrift der Statistik-Einblendung Icon Balkendiagramm Datenpunkt: Distanz diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5f3b8c4..a85f831 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,6 +10,8 @@ #FF12537F #D92095F2 + #FF4CAF50 + #FFFFFFFF #FF607d8b diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b281e9b..b33dea1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,9 @@ Last location: Saving current track. over one hour + Current track data removed. + Saving current track data. + Source @@ -92,6 +95,11 @@ Map of the current track Map of the last track + Main Action Button + Label of the Save and Clear button + small Save and Clear button + Label of the Clear button + small Clear button Headline of the statistics sheet Icon of a bar chart Data point: distance