diff --git a/app/src/main/java/org/y20k/trackbook/InfosheetActivity.java b/app/src/main/java/org/y20k/trackbook/InfosheetActivity.java index aeb5386..1beb1e1 100644 --- a/app/src/main/java/org/y20k/trackbook/InfosheetActivity.java +++ b/app/src/main/java/org/y20k/trackbook/InfosheetActivity.java @@ -41,7 +41,7 @@ public final class InfosheetActivity extends AppCompatActivity implements Trackb // set activity view if (intent.hasExtra(EXTRA_INFOSHEET_CONTENT) && intent.getIntExtra(EXTRA_INFOSHEET_CONTENT, -1) == INFOSHEET_CONTENT_ABOUT) { - setContentView(R.layout.fragment_infosheet_about); + setContentView(R.layout.activity_infosheet_about); } } diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.java b/app/src/main/java/org/y20k/trackbook/MainActivity.java index bdbfcdf..d720bc0 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.java @@ -29,8 +29,13 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; +import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; @@ -63,8 +68,10 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { private boolean mPermissionsGranted; private List mMissingPermissions; private FloatingActionButton mFloatingActionButton; - private MainActivityFragment mMainActivityFragment; + private MainActivityMapFragment mMainActivityMapFragment; private BroadcastReceiver mTrackingStoppedReceiver; + private SectionsPagerAdapter mSectionsPagerAdapter; + private ViewPager mViewPager; @Override @@ -92,6 +99,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { // set up main layout setupLayout(); +// setupTestLayout(); // register broadcast receiver for stopped tracking mTrackingStoppedReceiver = createTrackingStoppedReceiver(); @@ -157,6 +165,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { @Override public void onDestroy() { super.onDestroy(); + LogHelper.v(LOG_TAG, "onDestroy called."); // disable broadcast receiver LocalBroadcastManager.getInstance(this).unregisterReceiver(mTrackingStoppedReceiver); @@ -207,7 +216,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { setSupportActionBar(toolbar); // get reference to fragment - mMainActivityFragment = (MainActivityFragment)getSupportFragmentManager().findFragmentById(R.id.content_main); + mMainActivityMapFragment = (MainActivityMapFragment)getSupportFragmentManager().findFragmentById(R.id.content_main); // show the record button and attach listener mFloatingActionButton = (FloatingActionButton) findViewById(R.id.fab); @@ -222,10 +231,10 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { @Override public boolean onLongClick(View view) { // onLongClick: clear map - if (mTrackerServiceRunning || mMainActivityFragment == null) { + if (mTrackerServiceRunning || mMainActivityMapFragment == null) { return false; } else { - mMainActivityFragment.clearMap(); + mMainActivityMapFragment.clearMap(); NotificationHelper.stop(); return true; } @@ -234,7 +243,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } else { // point to the on main onboarding layout - setContentView(R.layout.onboarding_main); + setContentView(R.layout.activity_main_onboarding); // show the okay button and attach listener Button okButton = (Button) findViewById(R.id.button_okay); @@ -255,6 +264,80 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } + /* TEST: Set up main layout */ + private void setupTestLayout() { + if (mPermissionsGranted) { + // point to the main map layout + setContentView(R.layout.activity_main_test); + + // show action bar + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + /* BEGIN NEW STUFF */ + // Create the adapter that will return a fragment for each of the three + // primary sections of the activity. + mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + + // Set up the ViewPager with the sections adapter. + mViewPager = (ViewPager) findViewById(R.id.container); + mViewPager.setAdapter(mSectionsPagerAdapter); + + TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); + tabLayout.setupWithViewPager(mViewPager); + /* END NEW STUFF */ + + // get reference to fragment + mMainActivityMapFragment = (MainActivityMapFragment)getSupportFragmentManager().findFragmentById(R.id.content_main); + + // show the record button and attach listener + mFloatingActionButton = (FloatingActionButton) findViewById(R.id.fab); + mFloatingActionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // onClick: start / stop tracking + handleFloatingActionButtonClick(view); + } + }); + mFloatingActionButton.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + // onLongClick: clear map + if (mTrackerServiceRunning || mMainActivityMapFragment == null) { + return false; + } else { + mMainActivityMapFragment.clearMap(); + NotificationHelper.stop(); + return true; + } + } + }); + + } else { + // point to the on main onboarding layout + setContentView(R.layout.activity_main_onboarding); + + // show the okay button and attach listener + Button okButton = (Button) findViewById(R.id.button_okay); + okButton.setOnClickListener(new View.OnClickListener() { + @TargetApi(Build.VERSION_CODES.M) + @Override + public void onClick(View view) { + if (mMissingPermissions != null && !mMissingPermissions.isEmpty()) { + // request permissions + String[] params = mMissingPermissions.toArray(new String[mMissingPermissions.size()]); + requestPermissions(params, REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); + } + } + }); + + } + + } + + + + /* Handles tap on the record button */ private void handleFloatingActionButtonClick(View view) { if (mTrackerServiceRunning) { @@ -278,7 +361,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { setFloatingActionButtonState(); // get last location from MainActivity Fragment - Location lastLocation = mMainActivityFragment.getCurrentBestLocation(); + Location lastLocation = mMainActivityMapFragment.getCurrentBestLocation(); // start tracker service Intent intent = new Intent(this, TrackerService.class); @@ -287,8 +370,8 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { startService(intent); } - // update tracking state in MainActivityFragment - mMainActivityFragment.setTrackingState(mTrackerServiceRunning); + // update tracking state in MainActivityMapFragment + mMainActivityMapFragment.setTrackingState(mTrackerServiceRunning); } @@ -309,13 +392,13 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { switch (intentAction) { case ACTION_SHOW_MAP: - if (intent.hasExtra(EXTRA_TRACKING_STATE) && mMainActivityFragment != null) { + if (intent.hasExtra(EXTRA_TRACKING_STATE) && mMainActivityMapFragment != null) { mTrackerServiceRunning = intent.getBooleanExtra(EXTRA_TRACKING_STATE, false); - mMainActivityFragment.setTrackingState(mTrackerServiceRunning); + mMainActivityMapFragment.setTrackingState(mTrackerServiceRunning); // prevent multiple reactions to intent intent.setAction(ACTION_DEFAULT); - } else if (intent.hasExtra(EXTRA_CLEAR_MAP) && mMainActivityFragment != null) { - mMainActivityFragment.clearMap(); + } else if (intent.hasExtra(EXTRA_CLEAR_MAP) && mMainActivityMapFragment != null) { + mMainActivityMapFragment.clearMap(); // prevent multiple reactions to intent intent.setAction(ACTION_DEFAULT); } @@ -358,10 +441,63 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { mTrackerServiceRunning = false; setFloatingActionButtonState(); - // pass tracking state to MainActivityFragment - mMainActivityFragment.setTrackingState(false); + // pass tracking state to MainActivityMapFragment + mMainActivityMapFragment.setTrackingState(false); } }; } + + + /** + * Inner class: SectionsPagerAdapter that returns a fragment corresponding to one of the tabs. + * see also: https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html + */ + public class SectionsPagerAdapter extends FragmentPagerAdapter { + + public SectionsPagerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + // getItem is called to instantiate the fragment for the given page. + switch (position) { + case 0: +// if (mMainActivityMapFragment == null) { +// mMainActivityMapFragment = new MainActivityMapFragment(); +// } +// return mMainActivityMapFragment; + return new MainActivityMapFragment(); + case 1: +// if (mMainActivityMapFragment == null) { +// mMainActivityMapFragment = new MainActivityMapFragment(); +// } +// return mMainActivityMapFragment; + return new MainActivityTrackFragment(); + } + return null; + } + + @Override + public int getCount() { + // Show 2 total pages. + return 2; + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case 0: + return getString(R.string.tab_map); + case 1: + return getString(R.string.tab_last_track); + } + return null; + } + } + /** + * End of inner class + */ + } diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java similarity index 98% rename from app/src/main/java/org/y20k/trackbook/MainActivityFragment.java rename to app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java index 92d65cf..60c15ce 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivityFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java @@ -1,5 +1,5 @@ /** - * MainActivityFragment.java + * MainActivityMapFragment.java * Implements the main fragment of the main activity * This fragment displays a map using osmdroid * @@ -53,12 +53,12 @@ import java.util.List; /** - * MainActivityFragment class + * MainActivityMapFragment class */ -public class MainActivityFragment extends Fragment implements TrackbookKeys { +public class MainActivityMapFragment extends Fragment implements TrackbookKeys { /* Define log tag */ - private static final String LOG_TAG = MainActivityFragment.class.getSimpleName(); + private static final String LOG_TAG = MainActivityMapFragment.class.getSimpleName(); /* Main class variables */ @@ -80,7 +80,7 @@ public class MainActivityFragment extends Fragment implements TrackbookKeys { /* Constructor (default) */ - public MainActivityFragment() { + public MainActivityMapFragment() { } @@ -247,6 +247,8 @@ public class MainActivityFragment extends Fragment implements TrackbookKeys { @Override public void onDestroy() { + LogHelper.v(LOG_TAG, "onDestroy called."); + // reset first start state mFirstStart = true; diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java new file mode 100644 index 0000000..da56808 --- /dev/null +++ b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java @@ -0,0 +1,58 @@ +package org.y20k.trackbook; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * Created by solaris on 16/09/16. + */ +public class MainActivityTrackFragment extends Fragment { + + + /* Main class variables */ + private View mRootView; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // action bar has options menu + setHasOptionsMenu(true); + } + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + // inflate root view from xml + mRootView = inflater.inflate(R.layout.fragment_main_track, container, false); + + return mRootView; + } + + + @Override + public void onResume() { + super.onResume(); + } + + + @Override + public void onPause() { + super.onPause(); + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.java b/app/src/main/java/org/y20k/trackbook/TrackerService.java index 8883f4a..2815346 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.java +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.java @@ -275,7 +275,7 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven // remove listeners LocationHelper.removeLocationListeners(mLocationManager, mGPSListener, mNetworkListener); - // notify MainActivityFragment + // notify MainActivityMapFragment Intent i = new Intent(); i.setAction(ACTION_TRACKING_STOPPED); i.putExtra(EXTRA_TRACK, mTrack); diff --git a/app/src/main/res/layout-land/fragment_main_track.xml b/app/src/main/res/layout-land/fragment_main_track.xml new file mode 100644 index 0000000..12910c7 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_main_track.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_infosheet_about.xml b/app/src/main/res/layout/activity_infosheet_about.xml similarity index 100% rename from app/src/main/res/layout/fragment_infosheet_about.xml rename to app/src/main/res/layout/activity_infosheet_about.xml diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7c29c28..3da2216 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -21,7 +21,19 @@ - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml deleted file mode 100644 index ed17590..0000000 --- a/app/src/main/res/layout/content_main.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/app/src/main/res/layout/content_main_track_map.xml b/app/src/main/res/layout/content_main_track_map.xml new file mode 100644 index 0000000..4cd8262 --- /dev/null +++ b/app/src/main/res/layout/content_main_track_map.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main_track_statistics.xml b/app/src/main/res/layout/content_main_track_statistics.xml new file mode 100644 index 0000000..acc3cd7 --- /dev/null +++ b/app/src/main/res/layout/content_main_track_statistics.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml deleted file mode 100644 index 29bf875..0000000 --- a/app/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_main_map.xml b/app/src/main/res/layout/fragment_main_map.xml new file mode 100644 index 0000000..8f59045 --- /dev/null +++ b/app/src/main/res/layout/fragment_main_map.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_main_track.xml b/app/src/main/res/layout/fragment_main_track.xml new file mode 100644 index 0000000..0a84097 --- /dev/null +++ b/app/src/main/res/layout/fragment_main_track.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 0000000..144efd4 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,42 @@ + + + Trackbook + Über + Über Trackbook + Welche Berechtigungen benötigt Trackbook + Bewegungsrekorder für Android + Berechtigung WRITE_EXTERNAL_STORAGE + Berechtigung INTERNET + Berechtigung ACCESS_COARSE_LOCATION und ACCESS_FINE_LOCATION + Berechtigung ACCESS_WIFI_STATE and ACCESS_NETWORK_STATE + Version 0.9 ("The Great Gig in the Sky") + https://github.com/y20k/trackbook + https://opensource.org/licenses/MIT + https://github.com/osmdroid/osmdroid + Alles klar! + Trackbook App Icon + Hallo + Trackbook + Trackbook kann ohne die folgenden Berechtigungen nicht starten: + Bewegungsrekorder für Android + Über + Genauigkeit + Quelle + Mein Standort + Entfernung + Dauer + Stopp + + Trackbook ist aktiv + Trackbook ist inaktiv + Tracking wurde aktiviert + Tracking wurde deaktiviert + Infosheet + Suche aktuelle Position + Kartenansicht wird zurück gesetzt + Letzte Position + über eine Stunde + Standortdienste sind deaktiviert + Berechtigungen erteilt + Trackbook kann nicht starten. + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 812cb7b..cef3abc 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,4 +3,5 @@ 16dp 16dp 16dp + 8dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 09964c7..ea37c00 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - Trackbook + Trackbook Info Sheet @@ -10,6 +10,10 @@ About + + MAP + LAST TRACK + Trackbook running Trackbook not running @@ -50,7 +54,7 @@ About Trackbook Movement Recorder for Android - Version 0.1 ("The Great Gig in the Sky") + Version 0.9 ("The Great Gig in the Sky") Trackbook is a bare bones app for recording your movements. Trackbook is great for hiking, vacation or workout. Once started it traces your movements on a map. The map data is provided by OpenStreetMap (OSM). Trackbook is free software. You can find the code on GitHub. GitHub is also a good place to file bugs or even to contribute, if you are interested. Trackbook is published under the MIT open source license. Trackbook uses osmdroid to display the map, which is also free software published under the Apache License. https://github.com/y20k/trackbook diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3900cdc..5e1871b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -14,7 +14,6 @@