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.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
@ -69,10 +69,11 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
private Activity mActivity;
private View mRootView;
private MapView mMapView;
private LinearLayout mOnboardingView;
private IMapController mController;
private ItemizedIconOverlay mTrackOverlay;
private ArrayAdapter<String> mTrackSelectorAdapter;
private DropdownAdapter mDropdownAdapter;
private LinearLayout mTrackManagementLayout;
private Spinner mDropdown;
private TextView mDistanceView;
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)) {
LogHelper.v(LOG_TAG, "Save operation detected. Start loading the new track.");
// load track and display map and statistics
LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper();
loadTrackAsyncHelper.execute();
// update dropdown menu (and load track in onItemSelected)
mDropdownAdapter.refresh();
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
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);
// get map controller
@ -167,6 +169,7 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
}
// get views for track selector
mTrackManagementLayout = (LinearLayout) mRootView.findViewById(R.id.track_management_layout);
mDropdown = (Spinner) mRootView.findViewById(R.id.track_selector);
// get views for statistics sheet
@ -184,7 +187,7 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
mTrack = savedInstanceState.getParcelable(INSTANCE_TRACK_TRACK_MAP);
displayTrack();
} 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.execute();
} else {
@ -249,7 +252,8 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
@Override
public void onResume() {
super.onResume();
// show / hide the onboarding layout
switchOnboardingLayout();
}
@ -284,12 +288,9 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
// update current track
mCurrentTrack = i;
// get track file
File trackFile = mDropdownAdapter.getItem(i).getTrackFile();
// load track and display map and statistics
LoadTrackAsyncHelper loadTrackAsyncHelper = new LoadTrackAsyncHelper();
loadTrackAsyncHelper.execute(trackFile);
loadTrackAsyncHelper.execute(i);
}
@Override
@ -351,33 +352,51 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O
}
/**
* Inner class: Loads track from external storage using AsyncTask
*/
private class LoadTrackAsyncHelper extends AsyncTask<File, Void, Void> {
@Override
protected Void doInBackground(File... files) {
LogHelper.v(LOG_TAG, "Loading track object in background.");
StorageHelper storageHelper = new StorageHelper(mActivity);
if (files.length > 0) {
// load track object from given file
mTrack = storageHelper.loadTrack(files[0]);
/* 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 {
// load track object from most current file
mTrack = storageHelper.loadTrack(FILE_MOST_CURRENT_TRACK);
// 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
*/
private class LoadTrackAsyncHelper extends AsyncTask<Integer, Void, Void> {
@Override
protected Void doInBackground(Integer... ints) {
LogHelper.v(LOG_TAG, "Loading track object in background.");
StorageHelper storageHelper = new StorageHelper(mActivity);
if (ints.length > 0) {
// get track file from dropdown adapter
int item = ints[0];
File trackFile = mDropdownAdapter.getItem(item).getTrackFile();
LogHelper.v(LOG_TAG, "Loading track number " + item);
mTrack = storageHelper.loadTrack(trackFile);
} else {
// 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);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
LogHelper.v(LOG_TAG, "Loading finished. Displaying map and statistics of track.");
// display track on map
displayTrack();

View File

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

View File

@ -1,5 +1,6 @@
<?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_height="match_parent"
android:id="@+id/onboarding" >

View File

@ -19,8 +19,11 @@
android:layout_height="match_parent"
android:contentDescription="@string/descr_map_last_track" />
<include layout="@layout/fragment_main_track_onboarding" />
<!-- TRACK SELECTION -->
<LinearLayout
android:id="@+id/track_management_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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_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 -->
<string name="infosheet_about_h1_about">Über Trackbook</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_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_h2_recorder">Android 用の移動レコーダー</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_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_h2_recorder">Bewegingsbijhouding voor Android</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_save_and_clear">Save and Clear</string>
<!-- toast messages -->
<string name="toast_message_permissions_granted">Permissions granted.</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_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 -->
<string name="infosheet_about_h1_about">About Trackbook</string>
<string name="infosheet_about_h2_recorder">Movement Recorder for Android</string>