fixed dropdown behavior after new track has been recorded & introduced a simple onboardung (=first start) layout for the LAST TRACKS tab.

master
y20k 2017-02-17 09:58:37 +01:00
parent 22df3abb24
commit b6868298ee
8 changed files with 62 additions and 25 deletions

View File

@ -33,7 +33,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
@ -69,10 +69,11 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
private Activity mActivity; private Activity mActivity;
private View mRootView; private View mRootView;
private MapView mMapView; private MapView mMapView;
private LinearLayout mOnboardingView;
private IMapController mController; private IMapController mController;
private ItemizedIconOverlay mTrackOverlay; private ItemizedIconOverlay mTrackOverlay;
private ArrayAdapter<String> mTrackSelectorAdapter;
private DropdownAdapter mDropdownAdapter; private DropdownAdapter mDropdownAdapter;
private LinearLayout mTrackManagementLayout;
private Spinner mDropdown; private Spinner mDropdown;
private TextView mDistanceView; private TextView mDistanceView;
private TextView mStepsView; private TextView mStepsView;
@ -113,13 +114,11 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
if (intent.hasExtra(EXTRA_SAVE_FINISHED) && intent.getBooleanExtra(EXTRA_SAVE_FINISHED, false)) { if (intent.hasExtra(EXTRA_SAVE_FINISHED) && intent.getBooleanExtra(EXTRA_SAVE_FINISHED, false)) {
LogHelper.v(LOG_TAG, "Save operation detected. Start loading the new track."); LogHelper.v(LOG_TAG, "Save operation detected. Start loading the new track.");
// load track and display map and statistics // update dropdown menu (and load track in onItemSelected)
LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper();
loadTrackAsyncHelper.execute();
mDropdownAdapter.refresh(); mDropdownAdapter.refresh();
mDropdownAdapter.notifyDataSetChanged(); mDropdownAdapter.notifyDataSetChanged();
mDropdown.setSelection(0); mDropdown.setAdapter(mDropdownAdapter);
mDropdown.setSelection(0, true);
} }
} }
}; };
@ -136,7 +135,10 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
// inflate root view from xml // inflate root view from xml
mRootView = inflater.inflate(R.layout.fragment_main_track, container, false); mRootView = inflater.inflate(R.layout.fragment_main_track, container, false);
// create basic map // get reference to onboarding layout
mOnboardingView = (LinearLayout) mRootView.findViewById(R.id.track_tab_onboarding);
// get reference to basic map
mMapView = (MapView) mRootView.findViewById(R.id.track_map); mMapView = (MapView) mRootView.findViewById(R.id.track_map);
// get map controller // get map controller
@ -167,6 +169,7 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
} }
// get views for track selector // get views for track selector
mTrackManagementLayout = (LinearLayout) mRootView.findViewById(R.id.track_management_layout);
mDropdown = (Spinner) mRootView.findViewById(R.id.track_selector); mDropdown = (Spinner) mRootView.findViewById(R.id.track_selector);
// get views for statistics sheet // get views for statistics sheet
@ -184,7 +187,7 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
mTrack = savedInstanceState.getParcelable(INSTANCE_TRACK_TRACK_MAP); mTrack = savedInstanceState.getParcelable(INSTANCE_TRACK_TRACK_MAP);
displayTrack(); displayTrack();
} else if (mTrack == null) { } else if (mTrack == null) {
// load track and display map and statistics // todo get via mCurrentTrack // load track and display map and statistics
LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper(); LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper();
loadTrackAsyncHelper.execute(); loadTrackAsyncHelper.execute();
} else { } else {
@ -249,7 +252,8 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
// show / hide the onboarding layout
switchOnboardingLayout();
} }
@ -284,12 +288,9 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
// update current track // update current track
mCurrentTrack = i; mCurrentTrack = i;
// get track file
File trackFile = mDropdownAdapter.getItem(i).getTrackFile();
// load track and display map and statistics // load track and display map and statistics
LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper(); LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper();
loadTrackAsyncHelper.execute(trackFile); loadTrackAsyncHelper.execute(i);
} }
@Override @Override
@ -351,33 +352,51 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
} }
/* show the onboarding layout, if no track has been recorded yet */
private void switchOnboardingLayout() {
if (mDropdownAdapter.isEmpty()){
// show onboarding layout
mMapView.setVisibility(View.GONE);
mOnboardingView.setVisibility(View.VISIBLE);
mTrackManagementLayout.setVisibility(View.INVISIBLE);
mStatisticsSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
} else {
// show normal layout
mOnboardingView.setVisibility(View.GONE);
mMapView.setVisibility(View.VISIBLE);
mTrackManagementLayout.setVisibility(View.VISIBLE);
mStatisticsSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
/** /**
* Inner class: Loads track from external storage using AsyncTask * Inner class: Loads track from external storage using AsyncTask
*/ */
private class LoadTrackAsyncHelper extends AsyncTask<File, Void, Void> { private class LoadTrackAsyncHelper extends AsyncTask<Integer, Void, Void> {
@Override @Override
protected Void doInBackground(File... files) { protected Void doInBackground(Integer... ints) {
LogHelper.v(LOG_TAG, "Loading track object in background."); LogHelper.v(LOG_TAG, "Loading track object in background.");
StorageHelper storageHelper = new StorageHelper(mActivity); StorageHelper storageHelper = new StorageHelper(mActivity);
if (ints.length > 0) {
if (files.length > 0) { // get track file from dropdown adapter
// load track object from given file int item = ints[0];
mTrack = storageHelper.loadTrack(files[0]); File trackFile = mDropdownAdapter.getItem(item).getTrackFile();
LogHelper.v(LOG_TAG, "Loading track number " + item);
mTrack = storageHelper.loadTrack(trackFile);
} else { } else {
// load track object from most current file // load track object from most current file
LogHelper.v(LOG_TAG, "No specific track specified. Loading most current one.");
mTrack = storageHelper.loadTrack(FILE_MOST_CURRENT_TRACK); mTrack = storageHelper.loadTrack(FILE_MOST_CURRENT_TRACK);
} }
return null; return null;
} }
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
LogHelper.v(LOG_TAG, "Loading finished. Displaying map and statistics of track.");
// display track on map // display track on map
displayTrack(); displayTrack();

View File

@ -92,6 +92,7 @@ public interface TrackbookKeys {
int FAB_STATE_SAVE = 2; int FAB_STATE_SAVE = 2;
int FILE_TEMP_TRACK = 0; int FILE_TEMP_TRACK = 0;
int FILE_MOST_CURRENT_TRACK = 1; int FILE_MOST_CURRENT_TRACK = 1;
int NEW_DROPDOWN_ITEM = -1;
String DIRECTORY_NAME = "tracks"; String DIRECTORY_NAME = "tracks";
String FILE_TYPE_EXTENSION = ".trackbook"; String FILE_TYPE_EXTENSION = ".trackbook";

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/onboarding" > android:id="@+id/onboarding" >

View File

@ -19,8 +19,11 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:contentDescription="@string/descr_map_last_track" /> android:contentDescription="@string/descr_map_last_track" />
<include layout="@layout/fragment_main_track_onboarding" />
<!-- TRACK SELECTION --> <!-- TRACK SELECTION -->
<LinearLayout <LinearLayout
android:id="@+id/track_management_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin"

View File

@ -72,6 +72,10 @@
<string name="layout_onboarding_p_permission_storage">Trackbook nutzt osmdroid; osmdroid speichert Kartendaten im Externen Speicher von Android. Der Karten-Cache befindet sich im Ordner osmdroid auf der obersten Ebene des für Nutzer sichtbaren Dateisystems.</string> <string name="layout_onboarding_p_permission_storage">Trackbook nutzt osmdroid; osmdroid speichert Kartendaten im Externen Speicher von Android. Der Karten-Cache befindet sich im Ordner osmdroid auf der obersten Ebene des für Nutzer sichtbaren Dateisystems.</string>
<string name="layout_onboarding_button_okay">Alles klar!</string> <string name="layout_onboarding_button_okay">Alles klar!</string>
<!-- track tab onboarding -->
<string name="track_tab_onboarding_h1_part_1">Your recorded tracks</string>
<string name="track_tab_onboarding_h1_part_2">… will show up here.</string>
<!-- infosheet about --> <!-- infosheet about -->
<string name="infosheet_about_h1_about">Über Trackbook</string> <string name="infosheet_about_h1_about">Über Trackbook</string>
<string name="infosheet_about_h2_recorder">Bewegungsrekorder für Android</string> <string name="infosheet_about_h2_recorder">Bewegungsrekorder für Android</string>

View File

@ -61,6 +61,9 @@
<string name="layout_onboarding_p_permission_storage">Trackbook は、Android の外部ストレージに地図タイルをキャッシュする osmdroid を使用します。地図キャッシュは、ユーザー向けファイル・システムの最上位レベルの osmdroid フォルダーで見つけることができます。</string> <string name="layout_onboarding_p_permission_storage">Trackbook は、Android の外部ストレージに地図タイルをキャッシュする osmdroid を使用します。地図キャッシュは、ユーザー向けファイル・システムの最上位レベルの osmdroid フォルダーで見つけることができます。</string>
<string name="layout_onboarding_button_okay">完了!</string> <string name="layout_onboarding_button_okay">完了!</string>
<string name="track_tab_onboarding_h1_part_1">Your recorded tracks</string>
<string name="track_tab_onboarding_h1_part_2">… will show up here.</string>
<string name="infosheet_about_h1_about">Trackbook について</string> <string name="infosheet_about_h1_about">Trackbook について</string>
<string name="infosheet_about_h2_recorder">Android 用の移動レコーダー</string> <string name="infosheet_about_h2_recorder">Android 用の移動レコーダー</string>
<string name="infosheet_about_h3_version">Version 1.0 (Astronomy Domine)</string> <string name="infosheet_about_h3_version">Version 1.0 (Astronomy Domine)</string>

View File

@ -60,6 +60,9 @@
<string name="layout_onboarding_p_permission_storage">Trackbook gebruikt osmdroid. osmdroid slaat kaarttegels op in een cache op Android\'s externe opslag. U kunt de kaartcache vinden in de osmdroid-map op het hoogste niveau van het gebruikersbestandssysteem.</string> <string name="layout_onboarding_p_permission_storage">Trackbook gebruikt osmdroid. osmdroid slaat kaarttegels op in een cache op Android\'s externe opslag. U kunt de kaartcache vinden in de osmdroid-map op het hoogste niveau van het gebruikersbestandssysteem.</string>
<string name="layout_onboarding_button_okay">Ik snap het!</string> <string name="layout_onboarding_button_okay">Ik snap het!</string>
<string name="track_tab_onboarding_h1_part_1">Your recorded tracks</string>
<string name="track_tab_onboarding_h1_part_2">… will show up here.</string>
<string name="infosheet_about_h1_about">Over Trackbook</string> <string name="infosheet_about_h1_about">Over Trackbook</string>
<string name="infosheet_about_h2_recorder">Bewegingsbijhouding voor Android</string> <string name="infosheet_about_h2_recorder">Bewegingsbijhouding voor Android</string>
<string name="infosheet_about_h3_version">Versie 1.0 (Astronomy Domine)</string> <string name="infosheet_about_h3_version">Versie 1.0 (Astronomy Domine)</string>

View File

@ -33,7 +33,6 @@
<string name="fab_sub_menu_clear">Clear</string> <string name="fab_sub_menu_clear">Clear</string>
<string name="fab_sub_menu_save_and_clear">Save and Clear</string> <string name="fab_sub_menu_save_and_clear">Save and Clear</string>
<!-- toast messages --> <!-- toast messages -->
<string name="toast_message_permissions_granted">Permissions granted.</string> <string name="toast_message_permissions_granted">Permissions granted.</string>
<string name="toast_message_unable_to_start_app">Unable to start Trackbook.</string> <string name="toast_message_unable_to_start_app">Unable to start Trackbook.</string>
@ -73,6 +72,10 @@
<string name="layout_onboarding_p_permission_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.</string> <string name="layout_onboarding_p_permission_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.</string>
<string name="layout_onboarding_button_okay">Got it!</string> <string name="layout_onboarding_button_okay">Got it!</string>
<!-- track tab onboarding -->
<string name="track_tab_onboarding_h1_part_1">Your recorded tracks</string>
<string name="track_tab_onboarding_h1_part_2">… will show up here.</string>
<!-- infosheet about --> <!-- infosheet about -->
<string name="infosheet_about_h1_about">About Trackbook</string> <string name="infosheet_about_h1_about">About Trackbook</string>
<string name="infosheet_about_h2_recorder">Movement Recorder for Android</string> <string name="infosheet_about_h2_recorder">Movement Recorder for Android</string>