Trackbook got an About screen

This commit is contained in:
y20k 2016-09-07 12:30:46 +02:00
parent 3789c66f3b
commit 87636e9a64
11 changed files with 273 additions and 25 deletions

View file

@ -43,16 +43,10 @@ Which Permissions does Trackbook need?
### Permission "INTERNET"
Trackbook needs to download map data from Open Street Map servers and therefore needs access to the internet.
### Permission "ACCESS_NETWORK_STATE"
tbd
### Permission "ACCESS_WIFI_STATE"
### Permission "ACCESS_NETWORK_STATE" and "ACCESS_WIFI_STATE"
tbd
### Permission "ACCESS_COARSE_LOCATION"
tbd
### Permission "ACCESS_FINE_LOCATION"
### Permission "ACCESS_COARSE_LOCATION" and "ACCESS_FINE_LOCATION"
tbd
### Permission "WRITE_EXTERNAL_STORAGE"

View file

@ -9,7 +9,7 @@ android {
minSdkVersion 22
targetSdkVersion 24
versionCode 1
versionName "0.1 (The Great Gig in the Sky)"
versionName "0.1.0 (The Great Gig in the Sky)"
vectorDrawables.useSupportLibrary = true
}
buildTypes {

View file

@ -24,13 +24,30 @@
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/TrackbookAppTheme.NoActionBar">
android:theme="@style/TrackbookAppTheme.NoActionBar"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- INFOSHEET ACTIVITY -->
<activity
android:name=".InfosheetActivity"
android:label="@string/title_activity_infosheet"
android:parentActivityName=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.y20k.trackbook.MainActivity" />
</activity>
<!-- PLAYER SERVICE -->
<service
android:name=".TrackerService"

View file

@ -0,0 +1,49 @@
/**
* InfosheetActivity.java
* Implements the app's infosheet activity
* The infosheet activity sets up infosheet screens for "About" and "How to"
*
* This file is part of
* TRANSISTOR - Radio App for Android
*
* Copyright (c) 2015-16 - Y20K.org
* Licensed under the MIT-License
* http://opensource.org/licenses/MIT
*/
package org.y20k.trackbook;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.y20k.trackbook.helpers.TrackbookKeys;
/**
* InfosheetActivity class
*/
public final class InfosheetActivity extends AppCompatActivity implements TrackbookKeys {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get activity title from intent
Intent intent = this.getIntent();
// set activity title
if (intent.hasExtra(EXTRA_INFOSHEET_TITLE)) {
this.setTitle(intent.getStringExtra(EXTRA_INFOSHEET_TITLE));
}
// set activity view
if (intent.hasExtra(EXTRA_INFOSHEET_CONTENT) && intent.getIntExtra(EXTRA_INFOSHEET_CONTENT, -1) == INFOSHEET_CONTENT_ABOUT) {
setContentView(R.layout.fragment_infosheet_about);
}
}
}

View file

@ -38,7 +38,6 @@ import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.y20k.trackbook.helpers.LogHelper;
import org.y20k.trackbook.helpers.TrackbookKeys;
import java.util.ArrayList;
@ -57,7 +56,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
/* Main class variables */
private boolean mTracking;
private boolean mTrackerServiceRunning;
private boolean mPermissionsGranted;
private List<String> mMissingPermissions;
private View mRootView;
@ -71,9 +70,9 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
super.onCreate(savedInstanceState);
// set state of tracking
mTracking = false;
mTrackerServiceRunning = false;
if (savedInstanceState != null) {
mTracking = savedInstanceState.getBoolean(INSTANCE_TRACKING_STATE, false);
mTrackerServiceRunning = savedInstanceState.getBoolean(INSTANCE_TRACKING_STATE, false);
}
// check permissions on Android 6 and higher
@ -116,7 +115,13 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
// CASE ABOUT
case R.id.action_bar_about:
LogHelper.v(LOG_TAG, "About was selected"); // TODO remove
// get title
String aboutTitle = getString(R.string.header_about);
// put title and content into intent and start activity
Intent aboutIntent = new Intent(this, InfosheetActivity.class);
aboutIntent.putExtra(EXTRA_INFOSHEET_TITLE, aboutTitle);
aboutIntent.putExtra(EXTRA_INFOSHEET_CONTENT, INFOSHEET_CONTENT_ABOUT);
startActivity(aboutIntent);
return true;
// CASE DEFAULT
@ -128,7 +133,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean(INSTANCE_TRACKING_STATE, mTracking);
outState.putBoolean(INSTANCE_TRACKING_STATE, mTrackerServiceRunning);
super.onSaveInstanceState(outState);
}
@ -137,6 +142,12 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
protected void onResume() {
super.onResume();
Intent intent = getIntent();
if (intent.hasExtra(EXTRA_TRACKING_STATE)) {
mTrackerServiceRunning = intent.getBooleanExtra(EXTRA_TRACKING_STATE, false);
mMainActivityFragment.setTrackingState(mTrackerServiceRunning);
}
// if not in onboarding mode: set state of FloatingActionButton
if (mFloatingActionButton != null) {
setFloatingActionButtonState();
@ -233,7 +244,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
/* Handles tap on the record button */
private void handleFloatingActionButtonClick(View view) {
if (mTracking) {
if (mTrackerServiceRunning) {
// show snackbar
Snackbar.make(view, R.string.snackbar_message_tracking_stopped, Snackbar.LENGTH_SHORT).setAction("Action", null).show();
@ -250,7 +261,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
Snackbar.make(view, R.string.snackbar_message_tracking_started, Snackbar.LENGTH_SHORT).setAction("Action", null).show();
// change state
mTracking = true;
mTrackerServiceRunning = true;
setFloatingActionButtonState();
// get last location from MainActivity Fragment
@ -264,13 +275,13 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
}
// update tracking state in MainActivityFragment
mMainActivityFragment.setTrackingState(mTracking);
mMainActivityFragment.setTrackingState(mTrackerServiceRunning);
}
/* Set state of FloatingActionButton */
private void setFloatingActionButtonState() {
if (mTracking) {
if (mTrackerServiceRunning) {
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_red_24dp);
} else {
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp);
@ -304,7 +315,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
@Override
public void onReceive(Context context, Intent intent) {
// change state
mTracking = false;
mTrackerServiceRunning = false;
setFloatingActionButtonState();
// pass tracking state to MainActivityFragment

View file

@ -194,6 +194,7 @@ public class MainActivityFragment extends Fragment implements TrackbookKeys {
}
@Override
public void onResume() {
super.onResume();
@ -306,14 +307,22 @@ public class MainActivityFragment extends Fragment implements TrackbookKeys {
public void setTrackingState (boolean trackingState) {
mTrackerServiceRunning = trackingState;
// got a new track (from notification)=
Intent intent = mActivity.getIntent();
if (intent.hasExtra(EXTRA_TRACK)) {
LogHelper.v(LOG_TAG, "ding !!!");
mTrack = intent.getParcelableExtra(EXTRA_TRACK);
}
// turn on/off tracking for MainActivity Fragment - prevent double tracking
if (mTrackerServiceRunning) {
stopPreliminaryTracking();
} else if (!mLocalTrackerRunning){
startPreliminaryTracking();
if (mTrack != null) {
drawTrackOverlay(mTrack);
}
}
if (mTrack != null) {
drawTrackOverlay(mTrack);
}
// update marker

View file

@ -96,6 +96,10 @@ public class NotificationHelper implements TrackbookKeys {
// explicit intent for notification tap
Intent tapActionIntent = new Intent(mService, MainActivity.class);
tapActionIntent.setAction(Intent.ACTION_MAIN);
tapActionIntent.addCategory(Intent.CATEGORY_LAUNCHER);
tapActionIntent.putExtra(EXTRA_TRACK, track);
tapActionIntent.putExtra(EXTRA_TRACKING_STATE, true);
// explicit intent for stopping playback
Intent stopActionIntent = new Intent(mService, TrackerService.class);

View file

@ -31,6 +31,9 @@ public interface TrackbookKeys {
/* EXTRAS */
public static final String EXTRA_TRACK = "TRACK";
public static final String EXTRA_LAST_LOCATION = "LAST_LOCATION";
public static final String EXTRA_TRACKING_STATE = "TRACKING_STATE";
public static final String EXTRA_INFOSHEET_TITLE = "EXTRA_INFOSHEET_TITLE";
public static final String EXTRA_INFOSHEET_CONTENT = "INFOSHEET_CONTENT";
/* ARGS */
public static final String ARG_PERMISSIONS_GRANTED = "ArgPermissionsGranted";
@ -66,5 +69,6 @@ public interface TrackbookKeys {
/* MISC */
public static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
public static final int TRACKER_SERVICE_NOTIFICATION_ID = 1;
public static final int INFOSHEET_CONTENT_ABOUT = 1;
}

View file

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h1_about"
android:textAppearance="@android:style/TextAppearance.Large"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h2_recorder"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h3_version"
android:textAppearance="@android:style/TextAppearance.Small"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_bare"
android:textAppearance="@android:style/TextAppearance.Small"
android:layout_marginTop="4dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_free"
android:textAppearance="@android:style/TextAppearance.Small"
android:layout_marginTop="2dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_github"
android:textAppearance="@android:style/TextAppearance.Small"
android:layout_marginTop="4dp"
android:autoLink="web" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_license"
android:textAppearance="@android:style/TextAppearance.Small"
android:autoLink="web" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_osmdroid"
android:textAppearance="@android:style/TextAppearance.Small"
android:autoLink="web" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h2_permissions"
android:textAppearance="@android:style/TextAppearance.Medium"
android:layout_marginTop="8dp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h3_internet"
android:textAppearance="@android:style/TextAppearance.Small"
android:textStyle="bold"
android:layout_marginTop="2dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_internet"
android:textAppearance="@android:style/TextAppearance.Small" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h3_network"
android:textAppearance="@android:style/TextAppearance.Small"
android:textStyle="bold"
android:layout_marginTop="2dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_network"
android:textAppearance="@android:style/TextAppearance.Small" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h3_location"
android:textAppearance="@android:style/TextAppearance.Small"
android:textStyle="bold"
android:layout_marginEnd="2dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_location"
android:textAppearance="@android:style/TextAppearance.Small" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_h3_external"
android:textAppearance="@android:style/TextAppearance.Small"
android:textStyle="bold"
android:layout_marginTop="2dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/infosheet_about_p_external"
android:textAppearance="@android:style/TextAppearance.Small" />
</LinearLayout>
</ScrollView>

View file

@ -10,6 +10,7 @@
android:visible="true"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_bar_about"
android:orderInCategory="100"

View file

@ -1,11 +1,14 @@
<resources>
<!-- activities -->
<string name="app_name">Trackbook</string>
<string name="title_activity_infosheet">Info Sheet</string>
<!-- menu entries -->
<string name="menu_my_location">My Location</string>
<string name="menu_about">About</string>
<!-- headers -->
<string name="header_about">About</string>
<!-- notification -->
<string name="notification_title_trackbook_running">Trackbook running</string>
@ -23,7 +26,7 @@
<string name="toast_message_unable_to_start_app">Unable to start Trackbook.</string>
<string name="toast_message_location_offline">Location is turned off.</string>
<string name="toast_message_acquiring_location">Acquiring current location.</string>
<string name="toast_message_my_location">My Location.</string>
<string name="toast_message_my_location">Last recorded location:</string>
<!-- map markers -->
<string name="marker_my_location_title">My current location.</string>
@ -41,5 +44,23 @@
<string name="layout_onboading_p_permission_storage">Maxime et commodi modi officiis at deleniti fugit. Magnam atque provident est et nulla incidunt. Beatae excepturi repudiandae aut facilis aperiam. Et totam qui doloremque. Asperiores est ut perspiciatis ducimus ut aut rerum minus. Voluptatem facilis qui minus corporis explicabo eos.</string>
<string name="layout_onboading_button_okay">Got it!</string>
<!-- infosheet about -->
<string name="infosheet_about_h1_about">About Trackbook</string>
<string name="infosheet_about_h2_recorder">Movement recorder for Android</string>
<string name="infosheet_about_h3_version">Version 0.1 ("The Great Gig in the Sky")</string>
<string name="infosheet_about_p_bare">Trackbook is a bare bones app for recording your movements. Trackbook is great for hiking, vacation or workout. Once started it displays your movements on a map. You can save your recorded tracks and share them with friends.</string>
<string name="infosheet_about_p_free">Trackbook is free software. It is published under the MIT open source license. Trackbook uses osmdroid to display the map. osmdroid is also free software. It is published under the Apache License. Want to help? You can find the code on GitHub. GitHub is also a good place to file bugs or even to contribute, if you are interested.</string>
<string name="infosheet_about_p_github">https://github.com/y20k/trackbook</string>
<string name="infosheet_about_p_osmdroid">https://github.com/osmdroid/osmdroid</string>
<string name="infosheet_about_p_license">https://opensource.org/licenses/MIT</string>
<string name="infosheet_about_h2_permissions">Which Permissions does Trackbook need?</string>
<string name="infosheet_about_h3_internet">Permission INTERNET</string>
<string name="infosheet_about_p_internet">Trackbook needs to download map data from Open Street Map servers and therefore needs access to the internet.</string>
<string name="infosheet_about_h3_network">Permission ACCESS_WIFI_STATE and ACCESS_NETWORK_STATE</string>
<string name="infosheet_about_p_network">tbd</string>
<string name="infosheet_about_h3_location">Permission ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION</string>
<string name="infosheet_about_p_location">tbd</string>
<string name="infosheet_about_h3_external">Permission WRITE_EXTERNAL_STORAGE</string>
<string name="infosheet_about_p_external">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>
</resources>