Deleted files, added files, fixed for android v6

master
Keith Irwin 2017-02-23 19:48:57 -05:00
parent 8112e672d5
commit d9444a192d
No known key found for this signature in database
GPG Key ID: 378933C743E2BBC0
50 changed files with 4260 additions and 925 deletions

79
.gitignore vendored Normal file
View File

@ -0,0 +1,79 @@
# Created by https://www.gitignore.io/api/android,linux
### Android ###
# Built application files
*.apk
*.ap_
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# Intellij
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/libraries
# Keystore files
*.jks
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# Google Services (e.g. APIs or Firebase)
google-services.json
# Freeline
freeline.py
freeline/
freeline_project_description.json
### Android Patch ###
gen-external-apklibs
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# End of https://www.gitignore.io/api/android,linux

231
.idea/codeStyleSettings.xml Normal file
View File

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="android" withSubpackages="true" static="false" />
<emptyLine />
<package name="com" withSubpackages="true" static="false" />
<emptyLine />
<package name="junit" withSubpackages="true" static="false" />
<emptyLine />
<package name="net" withSubpackages="true" static="false" />
<emptyLine />
<package name="org" withSubpackages="true" static="false" />
<emptyLine />
<package name="java" withSubpackages="true" static="false" />
<emptyLine />
<package name="javax" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="true" />
<emptyLine />
</value>
</option>
<option name="RIGHT_MARGIN" value="100" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<Objective-C-extensions>
<option name="GENERATE_INSTANCE_VARIABLES_FOR_PROPERTIES" value="ASK" />
<option name="RELEASE_STYLE" value="IVAR" />
<option name="TYPE_QUALIFIERS_PLACEMENT" value="BEFORE" />
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" />
<pair source="c" header="h" />
</extensions>
</Objective-C-extensions>
<XML>
<option name="XML_KEEP_LINE_BREAKS" value="false" />
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
<option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
</XML>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_width</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_height</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:width</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:height</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</value>
</option>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default (1)" />
</component>
</project>

22
.idea/compiler.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

View File

@ -0,0 +1,3 @@
<component name="CopyrightManager">
<settings default="" />
</component>

46
.idea/misc.xml Normal file
View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

9
.idea/modules.xml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Tracman.iml" filepath="$PROJECT_DIR$/Tracman.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

1
app/.gitignore vendored
View File

@ -1 +0,0 @@
/build

46
app/build.gradle Normal file
View File

@ -0,0 +1,46 @@
apply plugin: 'com.android.application'
android {
signingConfigs {
config {
keyAlias 'TracmanKey'
keyPassword 'Gyt223qw!'
storeFile file('/home/keith/code/Android/Tracman/app/keystore.jks')
storePassword 'Gyt223qw!'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "us.keithirwin.tracman"
minSdkVersion 14
targetSdkVersion 23
versionCode 9
versionName "0.1.8"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
zipAlignEnabled true
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:support-v4:23.2.0'
compile 'com.android.support:design:23.2.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.android.gms:play-services-auth:9.8.0'
compile ('com.github.nkzawa:socket.io-client:0.4.1'){
exclude group: 'org.json', module: 'json'
}
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
}
apply plugin: 'com.google.gms.google-services'

View File

@ -16,6 +16,7 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".LoginActivity">
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.MAIN"/>
@ -23,21 +24,14 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:parentActivityName=".LoginActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="us.keithirwin.tracman.LoginActivity"/>
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/settings_name"
android:parentActivityName=".MainActivity">
android:parentActivityName=".LoginActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
android:value=".LoginActivity"/>
</activity>
<service

View File

@ -1,5 +1,7 @@
package us.keithirwin.tracman;
import android.Manifest;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
@ -8,13 +10,18 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
//import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
//import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationCompat;
//import android.support.v4.content.ContextCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import com.google.android.gms.common.ConnectionResult;
@ -32,6 +39,7 @@ import org.json.JSONObject;
import java.net.URISyntaxException;
public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, LocationListener {
public LocationService() {}
@ -44,6 +52,7 @@ public class LocationService extends Service implements GoogleApiClient.Connecti
Location mLastLocation;
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
@ -139,14 +148,19 @@ public class LocationService extends Service implements GoogleApiClient.Connecti
private int getPrioritySetting() {
return Integer.parseInt(sharedPref.getString("broadcast_priority", "100"));
}
private int getIntervalSetting() {
return Integer.parseInt(
sharedPref.getString("broadcast_frequency",
getResources().getString(R.string.pref_default_broadcast_frequency)));
}
public static boolean checkLocationPermission(final Context context) {
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
void connectLocationUpdates(Integer interval, Integer priority) {
// Set update parameters
if (mLocationRequest != null) {
mLocationRequest.setPriority(priority);
mLocationRequest.setInterval(interval * 1000); // 1000 = 1 second
@ -155,19 +169,41 @@ public class LocationService extends Service implements GoogleApiClient.Connecti
connectLocationUpdates(getIntervalSetting(), getPrioritySetting());
}
if (mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,
mLocationRequest,
this);
} else {
mGoogleApiClient.connect();
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
// Get permission
if (!checkLocationPermission(this)) {
Log.d(TAG, "Location permission denied");
} else {
Log.d(TAG, "Location permission granted");
// Request location updates
if (mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,
mLocationRequest,
this);
} else {
mGoogleApiClient.connect();
}
// Get last location
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
// if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {
// ActivityCompat.requestPermissions( this, new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION },
// LocationService.MY_FINE_LOCATION_PERMISSION );
// } else {
//
//
//
// }
// Set location if there is one
if (mLastLocation != null) {
onLocationChanged(mLastLocation);
}
}
@Override

View File

@ -56,12 +56,9 @@ public class LoginActivity extends AppCompatActivity implements
// Configure sign-in to request the user's ID and basic profile, included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(GOOGLE_WEB_CLIENT_ID)
.requestEmail()
.build();
// Set up buttons
SignInButton signInButton = (SignInButton) findViewById(R.id.google_sign_in_button);
signInButton.setStyle(SignInButton.SIZE_WIDE, SignInButton.COLOR_DARK, gso.getScopeArray());
// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
@ -69,6 +66,10 @@ public class LoginActivity extends AppCompatActivity implements
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
// Set up buttons
SignInButton signInButton = (SignInButton) findViewById(R.id.google_sign_in_button);
signInButton.setStyle(SignInButton.SIZE_WIDE, SignInButton.COLOR_AUTO);
// Button listeners
findViewById(R.id.google_sign_in_button).setOnClickListener(this);
}
@ -127,6 +128,7 @@ public class LoginActivity extends AppCompatActivity implements
.url(SERVER_ADDRESS+"auth/google/idtoken?id_token="+token)
.build();
Log.d(TAG, "Attempting Tracman signin with token: " + token);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException throwable) {
@ -140,7 +142,7 @@ public class LoginActivity extends AppCompatActivity implements
if (!res.isSuccessful()) {
showError(R.string.login_no_user_error);
res.body().close();
throw new IOException("Unexpected code " + res);
throw new IOException("Unexpected code: " + res);
} else {
Log.d(TAG, "Response code: " + res.code());
String userString = res.body().string();
@ -170,7 +172,7 @@ public class LoginActivity extends AppCompatActivity implements
editor.putString("loggedInUserSk", userSK);
editor.commit();
startActivity(new Intent(getBaseContext(), MainActivity.class));
startActivity(new Intent(getBaseContext(), SettingsActivity.class));
}
}
});
@ -195,7 +197,7 @@ public class LoginActivity extends AppCompatActivity implements
}
}
private void googleSignIn() {
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@ -235,7 +237,7 @@ public class LoginActivity extends AppCompatActivity implements
public void onClick(View v) {
switch (v.getId()) {
case R.id.google_sign_in_button:
googleSignIn();
signIn();
break;
}
}

View File

@ -1,186 +0,0 @@
package us.keithirwin.tracman;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.widget.DrawerLayout;
import values.AboutFragment;
import values.MainFragment;
public class MainActivity extends AppCompatActivity implements
NavigationDrawerFragment.NavigationDrawerCallbacks,
MainFragment.OnMapButtonPressedListener,
AboutFragment.OnBackButtonPressedListener {
private static final String TAG = "MainActivity";
// private CharSequence mTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (BuildConfig.DEBUG){ Log.d(TAG, "Created in debug mode"); }
setContentView(R.layout.activity_main);
NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
// mTitle = getTitle();
// Set up the drawer.
Log.d(TAG, "Setting up drawer");
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout)
);
// Check if gps enabled and start location service
Log.d(TAG, "Checking if gps enabled");
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
if (sharedPref.getBoolean("gps_switch", false)) {
Log.d(TAG, "Starting LocationService");
this.startService(new Intent(this, LocationService.class));
}
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Log.v(TAG, "onNavigationDrawerItemSelected() called");
Fragment fragment;
FragmentManager fragmentManager = getSupportFragmentManager();
switch(position) {
default:
case 0:
Log.d(TAG, "Sending intent to go to main fragment");
// Get user ID and name
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
final String mUserID = sharedPref.getString("loggedInUserId", null);
final String mUserName = sharedPref.getString("loggedInUserName", null);
if (mUserID == null) {
startActivity(new Intent(this, LoginActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));
}
fragment = MainFragment.newInstance(mUserName, mUserID);
break;
case 1:
Log.v(TAG, "Sending intent to go to Settings Activity");
fragment = null;
startActivity(new Intent(this, SettingsActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));
break;
case 2:
Log.v(TAG, "Sending intent to go to about fragment");
fragment = AboutFragment.newInstance();
break;
case 3:
Log.v(TAG, "Sending intent to go to logout fragment");
fragment = null;
Log.d(TAG, "Sending intent to log out");
// Stop LocationService
stopService(new Intent(this, LocationService.class));
// Send back to login screen
startActivity(new Intent(this, LoginActivity.class)
.putExtra("method", "signOut")
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));
break;
}
if (fragment!=null) {
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
}
public void onSectionAttached(int number) {
switch (number) {
case 0:
// mTitle = getString(R.string.main_name);
// Toast.makeText(this, "main", Toast.LENGTH_SHORT).show();
break;
case 1:
// mTitle = getString(R.string.settings_name);
// Log.d(TAG, "Sending intent to go to settings");
// startActivity(new Intent(this, SettingsActivity.class)
// .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));
break;
case 2:
// mTitle = getString(R.string.about_name);
break;
// case 3:
// break;
}
}
public void goBack() {
onNavigationDrawerItemSelected(0);
}
public void showMap(String UserId) {
String url = "https://tracman.org/trac/id/" + UserId;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
// public void restoreActionBar() {
// ActionBar actionBar = getActionBar();
// actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
// actionBar.setDisplayShowTitleEnabled(true);
// actionBar.setTitle(mTitle);
// }
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_SECTION_NUMBER = "section_number";
public PlaceholderFragment() {}
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
((MainActivity) context).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}

View File

@ -1,265 +0,0 @@
package us.keithirwin.tracman;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
/**
* Fragment used for managing interactions for and presentation of a navigation drawer.
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
* design guidelines</a> for a complete explanation of the behaviors implemented here.
*/
public class NavigationDrawerFragment extends Fragment {
private static final String TAG = "NavDrawerFrag";
/**
* Remember the position of the selected item.
*/
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
/**
* A pointer to the current callbacks instance (the Activity).
*/
private NavigationDrawerCallbacks mCallbacks;
/**
* Helper component that ties the action bar to the navigation drawer.
*/
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private ListView mDrawerListView;
private View mFragmentContainerView;
private int mCurrentSelectedPosition = 0;
// public NavigationDrawerFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
}
// Select either the default item (0) or the last selected item.
selectItem(mCurrentSelectedPosition);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Indicate that this fragment would like to influence the set of actions in the action bar.
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mDrawerListView = (ListView) inflater.inflate(
R.layout.drawer, container, false);
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
mDrawerListView.setAdapter(new ArrayAdapter<>(
getActionBar().getThemedContext(),
android.R.layout.simple_list_item_activated_1,
// android.R.id.text1,
new String[]{
getString(R.string.main_name),
getString(R.string.settings_name),
getString(R.string.about_name),
getString(R.string.logout_name)
}));
mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
return mDrawerListView;
}
// public boolean isDrawerOpen() {
// return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
// }
/**
* Users of this fragment must call this method to set up the navigation drawer interactions.
*
* @param fragmentId The android:id of this fragment in its activity's layout.
* @param drawerLayout The DrawerLayout containing this fragment's UI.
*/
public void setUp(int fragmentId, DrawerLayout drawerLayout) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
// set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view with items and click listener
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the navigation drawer and the action bar app icon.
mDrawerToggle = new ActionBarDrawerToggle(
getActivity(), /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) {
return;
}
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) {
return;
}
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
// Defer code dependent on restoration of previous instance state.
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
mDrawerLayout.addDrawerListener(mDrawerToggle);
}
private void selectItem(int position) {
Log.v(TAG, "selectItem() called");
mCurrentSelectedPosition = position;
if (mDrawerListView != null) {
Log.v(TAG, "mDrawerListView != null"); //
mDrawerListView.setItemChecked(position, true);
}
if (mDrawerLayout != null) {
Log.v(TAG, "mDrawerLayout != null"); //
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
if (mCallbacks != null) {
Log.v(TAG, "mCallbacks != null");
mCallbacks.onNavigationDrawerItemSelected(position);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallbacks = (NavigationDrawerCallbacks) context;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
}
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Forward the new configuration the drawer toggle component.
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Show the global app actions in the action bar. See also
// showGlobalContextActionBar, which controls the top-left area of the action bar.
inflater.inflate(R.menu.global, menu);
showGlobalContextActionBar();
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
if (item.getItemId() == R.id.help_action) {
Toast.makeText(getActivity(), "Help is on the way! ", Toast.LENGTH_SHORT).show();
// TODO: help activity
return true;
} else if (item.getItemId() == R.id.suggestions_action) {
String url = "https://tracman.org/suggestion";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
return true;
} else if (item.getItemId() == R.id.bugs_action) {
String url = "https://tracman.org/bug?source=android";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* Per the navigation drawer design guidelines, updates the action bar to show the global app
* 'context', rather than just what's in the current screen.
*/
private void showGlobalContextActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(R.string.app_name);
}
private ActionBar getActionBar() {
return ((AppCompatActivity) getActivity()).getSupportActionBar();
}
/**
* Callbacks interface that all activities using this fragment must implement.
*/
public interface NavigationDrawerCallbacks {
/**
* Called when an item in the navigation drawer is selected.
*/
void onNavigationDrawerItemSelected(int position);
}
}

View File

@ -1,16 +1,20 @@
package us.keithirwin.tracman;
import android.Manifest;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
@ -19,6 +23,7 @@ import android.view.MenuItem;
import java.util.List;
/**
* A {@link PreferenceActivity} that presents a set of application settings. On
* handset devices, settings are presented as a single list. On tablets,
@ -33,6 +38,8 @@ import java.util.List;
public class SettingsActivity extends AppCompatPreferenceActivity {
private static final String TAG = "SettingsActivity";
private static int MY_FINE_LOCATION_PERMISSION = 425;
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
@ -105,16 +112,33 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
}
}
private void showLocationPermissionDialog() {
if (!LocationService.checkLocationPermission(this)) {
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_FINE_LOCATION_PERMISSION);
}
}
@Override
protected void onStop() {
Log.d(TAG, "onStop called");
super.onStop();
// Restart service so settings can take effect
stopService(new Intent(this, LocationService.class));
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
if (sharedPref.getBoolean("gps_switch", false)) {
// Ask for location permissions (can't be done in service, only activity)
showLocationPermissionDialog();
// Start location tracking service
Log.d(TAG, "Starting LocationService");
startService(new Intent(this, LocationService.class));
}
}

View File

@ -1,95 +0,0 @@
package values;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import us.keithirwin.tracman.R;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link AboutFragment.OnBackButtonPressedListener} interface
* to handle interaction events.
* Use the {@link AboutFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class AboutFragment extends Fragment {
private OnBackButtonPressedListener mListener;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment AboutFragment.
*/
public static AboutFragment newInstance() {
AboutFragment fragment = new AboutFragment();
return fragment;
} public AboutFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.about_name);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_about, container, false);
TextView tv = (TextView) view.findViewById(R.id.about_license);
tv.setMovementMethod(LinkMovementMethod.getInstance());
view.findViewById(R.id.about_back_button).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goBack();
}
});
return view;
}
public void goBack() {
if (mListener != null) {
mListener.goBack();
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnBackButtonPressedListener) {
mListener = (OnBackButtonPressedListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p/>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnBackButtonPressedListener {
void goBack();
}
}

View File

@ -1,108 +0,0 @@
package values;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import us.keithirwin.tracman.R;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link MainFragment.OnMapButtonPressedListener} interface
* to handle interaction events.
* Use the {@link MainFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class MainFragment extends Fragment {
private static final String USER_NAME = "UserName";
private static final String USER_ID = "UserId";
private String mUserName, mUserId;
private OnMapButtonPressedListener mButtonPressedListener;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param userName Name of the logged-in user.
* @param userID ID of the logged-in user.
* @return A new instance of fragment MainFragment.
*/
public static MainFragment newInstance(String userName, String userID) {
MainFragment fragment = new MainFragment();
Bundle args = new Bundle();
args.putString(USER_NAME, userName);
args.putString(USER_ID, userID);
fragment.setArguments(args);
return fragment;
} public MainFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mUserName = getArguments().getString(USER_NAME);
mUserId = getArguments().getString(USER_ID);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
if (mUserName!=null) {
TextView tv = (TextView) view.findViewById(R.id.named_welcome);
tv.setText(getString(R.string.named_welcome, " "+mUserName));
}
view.findViewById(R.id.tracpage_button).setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
showMap();
}
});
return view;
}
public void showMap () {
if (mButtonPressedListener != null) {
mButtonPressedListener.showMap(mUserId);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnMapButtonPressedListener) {
mButtonPressedListener = (OnMapButtonPressedListener) context;
} else {
throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mButtonPressedListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p/>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnMapButtonPressedListener {
void showMap(String UserId);
}
}

View File

@ -1,23 +0,0 @@
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="us.keithirwin.tracman.MainActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<fragment
android:id="@+id/navigation_drawer"
android:name="us.keithirwin.tracman.NavigationDrawerFragment"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
tools:layout="@layout/drawer"/>
</android.support.v4.widget.DrawerLayout>

View File

@ -1,9 +0,0 @@
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#333"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
tools:context="us.keithirwin.tracman.NavigationDrawerFragment"/>

View File

@ -1,95 +0,0 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="values.AboutFragment">
<LinearLayout
android:id="@+id/main_layout"
android:orientation="vertical"
android:weightSum="6"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="us.keithirwin.tracman.MainActivity"
android:clickable="true">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/logo_description"
android:padding="5dp"
android:src="@drawable/logo_by"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/about_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginStart="60dp"
android:gravity="center"
android:text="@string/app_name"
android:textSize="46sp"
android:textColor="@color/Yellow"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/about_version"
android:text="@string/version"
android:textSize="24sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_weight="3"
android:layout_height="wrap_content">
<TextView
android:id="@+id/about_license"
android:text="@string/about_license"
android:textSize="24sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content">
<Button
android:id="@+id/about_back_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/about_back_button"
android:textColor="@color/Yellow"
android:textSize="36sp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>

View File

@ -1,108 +0,0 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="us.keithirwin.tracman.MainActivity$PlaceholderFragment">
<LinearLayout android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="5"
tools:context="us.keithirwin.tracman.MainActivity"
android:clickable="true">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<ImageView android:id="@+id/main_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/logo_description"
android:padding="5dp"
android:src="@drawable/logo_by"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView android:id="@+id/main_activity_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginStart="60dp"
android:gravity="center"
android:text="@string/welcome"
android:textSize="46sp"
android:textColor="@color/Yellow"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_weight="2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/named_welcome"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/main_description"
android:text="@string/main_activity_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"/>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_weight="1">
<Button android:id="@+id/tracpage_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/view_trac_button"
android:textColor="@color/Yellow"
android:textSize="28sp" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_weight="1">
<TextView android:id="@+id/main_error"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/Red"
android:textSize="22sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View File

@ -11,7 +11,7 @@
<string name="google_connection_error">FEHLER: Könnte nicht zum Google API Server verbinden. </string>
<string name="help_name">Hilfe</string>
<string name="loading">Ladet…</string>
<string name="login_description">Auf dem Knopf klicken, einzuloggen. Ein Tracman Konto ist erforderlich. Falls Sie keiner haben, dürfen Sie <a href="https://tracman.org/#get">um eine Einladung bitten</a>.</string>
<string name="login_description">Auf dem Knopf klicken, einzuloggen. Ein Tracman Konto ist erforderlich. Falls Sie keiner haben, dürfen Sie <a href="https://tracman.org/login">mit ihrer Googlekonto mitbewerben</a>.</string>
<string name="login_name">Einloggen</string>
<string name="login_no_user_error">FEHLER: Nutzer nicht gefunden. </string>
<string name="logout_name">Ausloggen</string>

View File

@ -20,7 +20,7 @@
<string name="broadcast_disabled">Transmisiónes apagado</string>
<string name="google_connection_error">ERROR: No se puede conectar al Google API servidor. </string>
<string name="help_name">Ayuda</string>
<string name="login_description">Haga clic en el botón abajo para iniciar una sesión. Se necisita una cuenta de Tracman. Si no tiene uno, puede <a href="https://tracman.org/#get"> solicitar una invitación </a>. </string>
<string name="login_description">"Haga clic en el botón abajo para iniciar una sesión. Se necisita una cuenta de Tracman. Si no tiene uno, puede <a href="https://tracman.org/login">participar con sua cuenta Google</a>. "</string>
<string name="login_name">Iniciar sesión</string>
<string name="login_no_user_error">ERROR: Usario no encontrado</string>
<string name="logout_name">Cerrar sesión</string>

View File

@ -12,7 +12,7 @@
<!-- Strings related to login -->
<string name="login_name">Login</string>
<string name="logout_name">Logout</string>
<string name="login_description">Click the button below to log in. You will need a Tracman account. If you don\'t have one, you can <a href="https://tracman.org/#get">request an invite</a>. </string>
<string name="login_description">"Click the button below to log in. You will need a Tracman account. If you don't have one, you can <a href="https://tracman.org/login">join with your google account</a>. "</string>
<string name="server_connection_error">ERROR: Unable to connect to Tracman server. </string>
<!-- Strings related to notifications -->

View File

@ -5,8 +5,8 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.google.gms:google-services:1.5.0-beta2'
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,2 @@
#Tue Sep 27 15:34:22 EDT 2016
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

0
gradlew vendored Executable file → Normal file
View File

File diff suppressed because it is too large Load Diff

BIN
res/feature.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

67
res/logo/black.svg Normal file
View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
fill="#000000"
height="48"
viewBox="0 0 24 24"
width="48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="19.666667"
inkscape:cx="24.660427"
inkscape:cy="23.340792"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="M0 0h24v24H0z"
id="path4"
fill="none" />
<path
d="M 20.94,11 C 20.48,6.83 17.17,3.52 13,3.06 L 13,1 11,1 11,3.06 C 6.83,3.52 3.52,6.83 3.06,11 L 1,11 l 0,2 2.06,0 c 0.46,4.17 3.77,7.48 7.94,7.94 l 0,2.06 2,0 0,-2.06 C 17.17,20.48 20.48,17.17 20.94,13 L 23,13 23,11 Z M 12,19 C 8.13,19 5,15.87 5,12 5,8.13 8.13,5 12,5 c 3.87,0 7,3.13 7,7 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss" />
<path
inkscape:connector-curvature="0"
style="fill:#000000"
d="m 15.988811,13.795153 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

93
res/logo/bw.svg Normal file
View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="48.046875"
viewBox="0 0 24.023438 24.023438"
width="48.046875"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo-bw.svg"
style="fill:#000000"
inkscape:export-filename="/home/keith/Code/node/tracman/static/img/icon/bw/logo-bw-48.png"
inkscape:export-xdpi="89.912193"
inkscape:export-ydpi="89.912193">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="19.666667"
inkscape:cx="16.700814"
inkscape:cy="35.56762"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="3.2822878"
inkscape:original="M 12.021484 8.0039062 A 4.2187634 4 0 1 0 15.988281 13.794922 L 12.21875 12 L 16 10.226562 A 4.2187634 4 0 0 0 12.021484 8.0039062 z "
style="fill:#ffffff"
id="path5769"
d="M 11.876953,4.7246094 C 9.3134474,4.8381543 6.8156954,6.3243567 5.578125,8.6113281 4.3405546,10.8983 4.5056929,13.891624 5.9726562,16.033203 c 1.4669634,2.141579 4.0878638,3.372696 6.6503908,3.238281 2.562527,-0.134415 5.048175,-1.641297 6.265625,-3.939453 a 3.2826161,3.2826161 0 0 0 -0.144531,-3.3125 3.2826161,3.2826161 0 0 0 0.166015,-3.3105466 c -1.32664,-2.543804 -4.205574,-4.1095888 -7.033203,-3.984375 z"
inkscape:export-xdpi="49.549999"
inkscape:export-ydpi="49.549999"
transform="translate(0.01171875,0.01171875)" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="1.0124902"
inkscape:original="M 11 1 L 11 3.0605469 C 6.83 3.5205469 3.5205469 6.83 3.0605469 11 L 1 11 L 1 13 L 3.0605469 13 C 3.5205469 17.17 6.83 20.479453 11 20.939453 L 11 23 L 13 23 L 13 20.939453 C 17.17 20.479453 20.479453 17.17 20.939453 13 L 23 13 L 23 11 L 20.939453 11 C 20.479453 6.83 17.17 3.5205469 13 3.0605469 L 13 1 L 11 1 z M 12 5 C 15.87 5 19 8.13 19 12 C 19 15.87 15.87 19 12 19 C 8.13 19 5 15.87 5 12 C 5 8.13 8.13 5 12 5 z "
id="path5765"
d="M 11,-0.01171875 A 1.0125914,1.0125914 0 0 0 9.9882812,1 l 0,1.3144531 C 6.1119154,3.1236169 3.1236169,6.1119154 2.3144531,9.9882812 L 1,9.9882812 A 1.0125914,1.0125914 0 0 0 -0.01171875,11 l 0,2 A 1.0125914,1.0125914 0 0 0 1,14.011719 l 1.3144531,0 c 0.8091638,3.876366 3.7974623,6.864664 7.6738281,7.673828 l 0,1.314453 A 1.0125914,1.0125914 0 0 0 11,24.011719 l 2,0 A 1.0125914,1.0125914 0 0 0 14.011719,23 l 0,-1.314453 c 3.876366,-0.809164 6.864664,-3.797462 7.673828,-7.673828 l 1.314453,0 A 1.0125914,1.0125914 0 0 0 24.011719,13 l 0,-2 A 1.0125914,1.0125914 0 0 0 23,9.9882812 l -1.314453,0 C 20.876383,6.1119154 17.888085,3.1236169 14.011719,2.3144531 L 14.011719,1 A 1.0125914,1.0125914 0 0 0 13,-0.01171875 l -2,0 z m 1,6.02343755 c 3.324075,0 5.988281,2.6642061 5.988281,5.9882812 0,3.324075 -2.664206,5.988281 -5.988281,5.988281 C 8.6759249,17.988281 6.0117188,15.324075 6.0117188,12 6.0117188,8.6759249 8.6759249,6.0117187 12,6.0117188 Z"
style="fill:#ffffff"
transform="translate(0.01171875,0.01171875)" />
<path
d="m 0.01171875,0.01171875 24.00000025,0 0,24.00000025 -24.00000025,0 z"
id="path4"
inkscape:connector-curvature="0"
style="fill:none" />
<path
d="m 20.951719,11.011719 c -0.46,-4.1700003 -3.77,-7.4800002 -7.94,-7.9400002 l 0,-2.0600001 -2,0 0,2.0600001 c -4.1700003,0.46 -7.4800002,3.7699999 -7.9400002,7.9400002 l -2.0600001,0 0,2 2.0600001,0 c 0.46,4.17 3.7699999,7.48 7.9400002,7.94 l 0,2.06 2,0 0,-2.06 c 4.17,-0.46 7.48,-3.77 7.94,-7.94 l 2.06,0 0,-2 z m -8.94,8 c -3.8700002,0 -7.0000003,-3.13 -7.0000003,-7 0,-3.8700002 3.1300001,-7.0000003 7.0000003,-7.0000003 3.87,0 7,3.13 7,7.0000003 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss" />
<path
inkscape:connector-curvature="0"
style="fill:#000000"
d="m 16.00053,13.806872 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
res/logo/by-512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

166
res/logo/by-shadow.svg Normal file
View File

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="48.046875"
viewBox="0 0 24.023438 24.023438"
width="48.046875"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="by-shadow.svg"
style="fill:#000000"
inkscape:export-filename="/home/keith/Code/node/tracman/static/img/icon/by/16.png"
inkscape:export-xdpi="27.27"
inkscape:export-ydpi="27.27">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10">
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter4310">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood4312" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite4314" />
<feGaussianBlur
in="composite1"
stdDeviation="0.4"
result="blur"
id="feGaussianBlur4316" />
<feOffset
dx="0.4"
dy="0.4"
result="offset"
id="feOffset4318" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite4320" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter4394">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood4396" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite4398" />
<feGaussianBlur
in="composite1"
stdDeviation="0.2"
result="blur"
id="feGaussianBlur4400" />
<feOffset
dx="0.4"
dy="0.4"
result="offset"
id="feOffset4402" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite4404" />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="9.8333335"
inkscape:cx="24.399869"
inkscape:cy="23.448333"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3337" />
</sodipodi:namedview>
<path
sodipodi:type="inkscape:offset"
inkscape:radius="3.2822878"
inkscape:original="M 12.021484 8.0039062 A 4.2187634 4 0 1 0 15.988281 13.794922 L 12.21875 12 L 16 10.226562 A 4.2187634 4 0 0 0 12.021484 8.0039062 z "
style="fill:#fbc93d;fill-opacity:1"
id="path5769"
d="M 11.876953,4.7246094 C 9.3134474,4.8381543 6.8156954,6.3243567 5.578125,8.6113281 4.3405546,10.8983 4.5056929,13.891624 5.9726562,16.033203 c 1.4669634,2.141579 4.0878638,3.372696 6.6503908,3.238281 2.562527,-0.134415 5.048175,-1.641297 6.265625,-3.939453 a 3.2826161,3.2826161 0 0 0 -0.144531,-3.3125 3.2826161,3.2826161 0 0 0 0.166015,-3.3105466 c -1.32664,-2.543804 -4.205574,-4.1095888 -7.033203,-3.984375 z"
inkscape:export-xdpi="49.549999"
inkscape:export-ydpi="49.549999"
transform="translate(0.01171875,0.01171875)" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="1.0124902"
inkscape:original="M 11 1 L 11 3.0605469 C 6.83 3.5205469 3.5205469 6.83 3.0605469 11 L 1 11 L 1 13 L 3.0605469 13 C 3.5205469 17.17 6.83 20.479453 11 20.939453 L 11 23 L 13 23 L 13 20.939453 C 17.17 20.479453 20.479453 17.17 20.939453 13 L 23 13 L 23 11 L 20.939453 11 C 20.479453 6.83 17.17 3.5205469 13 3.0605469 L 13 1 L 11 1 z M 12 5 C 15.87 5 19 8.13 19 12 C 19 15.87 15.87 19 12 19 C 8.13 19 5 15.87 5 12 C 5 8.13 8.13 5 12 5 z "
id="path5765"
d="M 11,-0.01171875 A 1.0125914,1.0125914 0 0 0 9.9882812,1 l 0,1.3144531 C 6.1119154,3.1236169 3.1236169,6.1119154 2.3144531,9.9882812 L 1,9.9882812 A 1.0125914,1.0125914 0 0 0 -0.01171875,11 l 0,2 A 1.0125914,1.0125914 0 0 0 1,14.011719 l 1.3144531,0 c 0.8091638,3.876366 3.7974623,6.864664 7.6738281,7.673828 l 0,1.314453 A 1.0125914,1.0125914 0 0 0 11,24.011719 l 2,0 A 1.0125914,1.0125914 0 0 0 14.011719,23 l 0,-1.314453 c 3.876366,-0.809164 6.864664,-3.797462 7.673828,-7.673828 l 1.314453,0 A 1.0125914,1.0125914 0 0 0 24.011719,13 l 0,-2 A 1.0125914,1.0125914 0 0 0 23,9.9882812 l -1.314453,0 C 20.876383,6.1119154 17.888085,3.1236169 14.011719,2.3144531 L 14.011719,1 A 1.0125914,1.0125914 0 0 0 13,-0.01171875 l -2,0 z m 1,6.02343755 c 3.324075,0 5.988281,2.6642061 5.988281,5.9882812 0,3.324075 -2.664206,5.988281 -5.988281,5.988281 C 8.6759249,17.988281 6.0117188,15.324075 6.0117188,12 6.0117188,8.6759249 8.6759249,6.0117187 12,6.0117188 Z"
style="fill:#fbc93d;fill-opacity:1"
transform="translate(0.01171875,0.01171875)" />
<path
d="m 0.01171875,0.01171875 24.00000025,0 0,24.00000025 -24.00000025,0 z"
id="path4"
inkscape:connector-curvature="0"
style="fill:none" />
<path
d="m 20.951719,11.011719 c -0.46,-4.1700003 -3.77,-7.4800002 -7.94,-7.9400002 l 0,-2.0600001 -2,0 0,2.0600001 c -4.1700003,0.46 -7.4800002,3.7699999 -7.9400002,7.9400002 l -2.0600001,0 0,2 2.0600001,0 c 0.46,4.17 3.7699999,7.48 7.9400002,7.94 l 0,2.06 2,0 0,-2.06 c 4.17,-0.46 7.48,-3.77 7.94,-7.94 l 2.06,0 0,-2 z m -8.94,8 c -3.8700002,0 -7.0000003,-3.13 -7.0000003,-7 0,-3.8700002 3.1300001,-7.0000003 7.0000003,-7.0000003 3.87,0 7,3.13 7,7.0000003 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss"
style="filter:url(#filter4310)"
inkscape:export-filename="/home/keith/Code/Android/Tracman/app/src/main/res/drawable-hdpi/logo_by.png"
inkscape:export-xdpi="122.73"
inkscape:export-ydpi="122.73" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;filter:url(#filter4394)"
d="m 16.00053,13.806872 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

97
res/logo/by.svg Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="48.046875"
viewBox="0 0 24.023438 24.023438"
width="48.046875"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo-by.svg"
style="fill:#000000"
inkscape:export-filename="/home/keith/Code/node/tracman/static/img/icon/bw/logo-bw-48.png"
inkscape:export-xdpi="89.912193"
inkscape:export-ydpi="89.912193">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="19.666667"
inkscape:cx="16.700814"
inkscape:cy="25.296434"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3337" />
</sodipodi:namedview>
<path
sodipodi:type="inkscape:offset"
inkscape:radius="3.2822878"
inkscape:original="M 12.021484 8.0039062 A 4.2187634 4 0 1 0 15.988281 13.794922 L 12.21875 12 L 16 10.226562 A 4.2187634 4 0 0 0 12.021484 8.0039062 z "
style="fill:#fbc93d;fill-opacity:1"
id="path5769"
d="M 11.876953,4.7246094 C 9.3134474,4.8381543 6.8156954,6.3243567 5.578125,8.6113281 4.3405546,10.8983 4.5056929,13.891624 5.9726562,16.033203 c 1.4669634,2.141579 4.0878638,3.372696 6.6503908,3.238281 2.562527,-0.134415 5.048175,-1.641297 6.265625,-3.939453 a 3.2826161,3.2826161 0 0 0 -0.144531,-3.3125 3.2826161,3.2826161 0 0 0 0.166015,-3.3105466 c -1.32664,-2.543804 -4.205574,-4.1095888 -7.033203,-3.984375 z"
inkscape:export-xdpi="49.549999"
inkscape:export-ydpi="49.549999"
transform="translate(0.01171875,0.01171875)" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="1.0124902"
inkscape:original="M 11 1 L 11 3.0605469 C 6.83 3.5205469 3.5205469 6.83 3.0605469 11 L 1 11 L 1 13 L 3.0605469 13 C 3.5205469 17.17 6.83 20.479453 11 20.939453 L 11 23 L 13 23 L 13 20.939453 C 17.17 20.479453 20.479453 17.17 20.939453 13 L 23 13 L 23 11 L 20.939453 11 C 20.479453 6.83 17.17 3.5205469 13 3.0605469 L 13 1 L 11 1 z M 12 5 C 15.87 5 19 8.13 19 12 C 19 15.87 15.87 19 12 19 C 8.13 19 5 15.87 5 12 C 5 8.13 8.13 5 12 5 z "
id="path5765"
d="M 11,-0.01171875 A 1.0125914,1.0125914 0 0 0 9.9882812,1 l 0,1.3144531 C 6.1119154,3.1236169 3.1236169,6.1119154 2.3144531,9.9882812 L 1,9.9882812 A 1.0125914,1.0125914 0 0 0 -0.01171875,11 l 0,2 A 1.0125914,1.0125914 0 0 0 1,14.011719 l 1.3144531,0 c 0.8091638,3.876366 3.7974623,6.864664 7.6738281,7.673828 l 0,1.314453 A 1.0125914,1.0125914 0 0 0 11,24.011719 l 2,0 A 1.0125914,1.0125914 0 0 0 14.011719,23 l 0,-1.314453 c 3.876366,-0.809164 6.864664,-3.797462 7.673828,-7.673828 l 1.314453,0 A 1.0125914,1.0125914 0 0 0 24.011719,13 l 0,-2 A 1.0125914,1.0125914 0 0 0 23,9.9882812 l -1.314453,0 C 20.876383,6.1119154 17.888085,3.1236169 14.011719,2.3144531 L 14.011719,1 A 1.0125914,1.0125914 0 0 0 13,-0.01171875 l -2,0 z m 1,6.02343755 c 3.324075,0 5.988281,2.6642061 5.988281,5.9882812 0,3.324075 -2.664206,5.988281 -5.988281,5.988281 C 8.6759249,17.988281 6.0117188,15.324075 6.0117188,12 6.0117188,8.6759249 8.6759249,6.0117187 12,6.0117188 Z"
style="fill:#fbc93d;fill-opacity:1"
transform="translate(0.01171875,0.01171875)" />
<path
d="m 0.01171875,0.01171875 24.00000025,0 0,24.00000025 -24.00000025,0 z"
id="path4"
inkscape:connector-curvature="0"
style="fill:none" />
<path
d="m 20.951719,11.011719 c -0.46,-4.1700003 -3.77,-7.4800002 -7.94,-7.9400002 l 0,-2.0600001 -2,0 0,2.0600001 c -4.1700003,0.46 -7.4800002,3.7699999 -7.9400002,7.9400002 l -2.0600001,0 0,2 2.0600001,0 c 0.46,4.17 3.7699999,7.48 7.9400002,7.94 l 0,2.06 2,0 0,-2.06 c 4.17,-0.46 7.48,-3.77 7.94,-7.94 l 2.06,0 0,-2 z m -8.94,8 c -3.8700002,0 -7.0000003,-3.13 -7.0000003,-7 0,-3.8700002 3.1300001,-7.0000003 7.0000003,-7.0000003 3.87,0 7,3.13 7,7.0000003 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss" />
<path
inkscape:connector-curvature="0"
style="fill:#000000"
d="m 16.00053,13.806872 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

102
res/logo/white-trans.svg Normal file
View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
fill="#000000"
height="48"
viewBox="0 0 24 24"
width="48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="white-trans.svg"
inkscape:export-filename="/home/keith/Code/Android/Tracman/app/src/main/res/drawable-hdpi/logo_trans.png"
inkscape:export-xdpi="67.5"
inkscape:export-ydpi="67.5">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10">
<filter
inkscape:label="Opacity"
style="color-interpolation-filters:sRGB;"
id="filter3355">
<feColorMatrix
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5 -1 "
result="colormatrix"
id="feColorMatrix3357" />
<feComposite
in2="colormatrix"
operator="arithmetic"
k2="0.5"
result="composite"
id="feComposite3359" />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="9.8333335"
inkscape:cx="20.507251"
inkscape:cy="22.386632"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2">
<inkscape:grid
type="xygrid"
id="grid3337" />
</sodipodi:namedview>
<path
d="M0 0h24v24H0z"
id="path4"
fill="none" />
<path
d="M 20.94,11 C 20.48,6.83 17.17,3.52 13,3.06 L 13,1 11,1 11,3.06 C 6.83,3.52 3.52,6.83 3.06,11 L 1,11 l 0,2 2.06,0 c 0.46,4.17 3.77,7.48 7.94,7.94 l 0,2.06 2,0 0,-2.06 C 17.17,20.48 20.48,17.17 20.94,13 L 23,13 23,11 Z M 12,19 C 8.13,19 5,15.87 5,12 5,8.13 8.13,5 12,5 c 3.87,0 7,3.13 7,7 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss" />
<path
inkscape:connector-curvature="0"
style="fill:#000000"
d="m 15.988811,13.795153 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
<path
style="fill:#ffffff;filter:url(#filter3355)"
d="m 23.490935,31.937791 c -0.09788,-0.01269 -0.453877,-0.07829 -0.791103,-0.145762 -2.300431,-0.460296 -4.337748,-1.81181 -5.524057,-3.664544 -0.44367,-0.692909 -0.880275,-1.846406 -1.037542,-2.741158 -0.12118,-0.689442 -0.122269,-2.10555 -0.0021,-2.757751 0.464315,-2.520417 1.950171,-4.475681 4.278551,-5.630218 0.780811,-0.387168 1.322452,-0.581371 2.114168,-0.758025 3.189914,-0.711761 6.433881,0.314229 8.389304,2.653339 0.380791,0.455508 0.951598,1.303892 0.998847,1.484575 0.01524,0.05827 -0.897762,0.507385 -3.707152,1.823595 -2.050054,0.960458 -3.743662,1.761257 -3.763573,1.779555 -0.01991,0.0183 1.284325,0.661512 2.898305,1.429366 1.613979,0.767854 3.308182,1.574736 3.764895,1.793071 l 0.830387,0.396973 -0.162638,0.291065 c -0.728679,1.304084 -2.000056,2.503451 -3.378348,3.187002 -1.281341,0.635469 -2.159121,0.841509 -3.687585,0.86558 -0.573305,0.009 -1.122457,0.006 -1.220339,-0.0067 z"
id="path3339"
inkscape:connector-curvature="0"
transform="scale(0.5,0.5)" />
<path
style="fill:#ffffff"
d="m 22.016359,43.905089 0,-2.049034 -0.472477,-0.05967 C 18.450732,41.405707 15.37349,40.075058 12.711275,37.977019 12.034625,37.443765 10.432061,35.821611 9.8923288,35.123615 7.8541766,32.48782 6.5570641,29.395497 6.1758234,26.263445 l -0.035588,-0.292373 -2.0534632,0 -2.0534632,0 0,-1.98305 0,-1.983051 2.0487483,0 2.0487482,0 0.1127191,-0.724577 c 0.599214,-3.85184 2.3287028,-7.250446 5.0915727,-10.005414 2.82101,-2.812941 6.436711,-4.5823511 10.439737,-5.1088785 l 0.241525,-0.031768 0,-2.0562064 0,-2.0562065 1.983051,0 1.983051,0 0,2.0562065 0,2.0562064 0.241525,0.031768 c 6.055798,0.7965333 11.243423,4.4983015 13.894993,9.9151405 0.844865,1.72596 1.341475,3.303861 1.636317,5.199152 l 0.112719,0.724577 2.048748,0 2.048748,0 0,1.983051 0,1.98305 -2.049826,0 -2.049828,0 -0.110799,0.75218 c -0.192208,1.304829 -0.63931,2.912391 -1.162568,4.180024 -0.543916,1.317676 -1.521782,2.976479 -2.487188,4.21914 -0.538794,0.693528 -1.785803,1.987976 -2.461824,2.555474 -2.204829,1.850884 -4.683929,3.120243 -7.372882,3.775094 -0.612253,0.149105 -1.917248,0.382495 -2.138709,0.382495 l -0.149426,0 0,2.059322 0,2.059322 -1.983051,0 -1.983051,0 0,-2.049034 z m 4.037633,-6.035108 c 4.972356,-0.752988 9.139502,-4.053473 10.978841,-8.695519 0.676309,-1.706842 0.970201,-3.280364 0.968687,-5.18644 -0.0012,-1.506015 -0.146533,-2.554072 -0.547231,-3.946206 -0.48784,-1.694889 -1.410776,-3.454087 -2.558029,-4.875828 -0.491872,-0.609556 -1.653766,-1.754156 -2.252782,-2.21925 -2.69679,-2.09387 -6.060389,-3.1401596 -9.444915,-2.93796 -3.017545,0.180276 -5.78054,1.254768 -8.082868,3.14332 -0.65663,0.53862 -1.696105,1.594085 -2.15865,2.191856 -1.608249,2.078424 -2.583835,4.467791 -2.896184,7.09322 -0.083554,0.702309 -0.083555,2.480821 -10e-7,3.152542 0.401961,3.231545 1.794606,6.103508 4.044146,8.339988 1.088817,1.082496 2.28325,1.940209 3.635698,2.610767 1.401625,0.69494 2.755494,1.118848 4.241388,1.328015 1.012296,0.142499 1.052732,0.144737 2.271555,0.125676 0.778237,-0.01217 1.29696,-0.04795 1.800345,-0.124181 z"
id="path3341"
inkscape:connector-curvature="0"
transform="scale(0.5,0.5)" />
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

79
res/logo/white.svg Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
fill="#000000"
height="48"
viewBox="0 0 24 24"
width="48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo-white.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="19.666667"
inkscape:cx="16.677376"
inkscape:cy="23.239097"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="M0 0h24v24H0z"
id="path4"
fill="none" />
<path
d="M 20.94,11 C 20.48,6.83 17.17,3.52 13,3.06 L 13,1 11,1 11,3.06 C 6.83,3.52 3.52,6.83 3.06,11 L 1,11 l 0,2 2.06,0 c 0.46,4.17 3.77,7.48 7.94,7.94 l 0,2.06 2,0 0,-2.06 C 17.17,20.48 20.48,17.17 20.94,13 L 23,13 23,11 Z M 12,19 C 8.13,19 5,15.87 5,12 5,8.13 8.13,5 12,5 c 3.87,0 7,3.13 7,7 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss" />
<path
inkscape:connector-curvature="0"
style="fill:#000000"
d="m 15.988811,13.795153 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
<path
style="fill:#ffffff"
d="m 23.490935,31.937791 c -0.09788,-0.01269 -0.453877,-0.07829 -0.791103,-0.145762 -2.300431,-0.460296 -4.337748,-1.81181 -5.524057,-3.664544 -0.44367,-0.692909 -0.880275,-1.846406 -1.037542,-2.741158 -0.12118,-0.689442 -0.122269,-2.10555 -0.0021,-2.757751 0.464315,-2.520417 1.950171,-4.475681 4.278551,-5.630218 0.780811,-0.387168 1.322452,-0.581371 2.114168,-0.758025 3.189914,-0.711761 6.433881,0.314229 8.389304,2.653339 0.380791,0.455508 0.951598,1.303892 0.998847,1.484575 0.01524,0.05827 -0.897762,0.507385 -3.707152,1.823595 -2.050054,0.960458 -3.743662,1.761257 -3.763573,1.779555 -0.01991,0.0183 1.284325,0.661512 2.898305,1.429366 1.613979,0.767854 3.308182,1.574736 3.764895,1.793071 l 0.830387,0.396973 -0.162638,0.291065 c -0.728679,1.304084 -2.000056,2.503451 -3.378348,3.187002 -1.281341,0.635469 -2.159121,0.841509 -3.687585,0.86558 -0.573305,0.009 -1.122457,0.006 -1.220339,-0.0067 z"
id="path3339"
inkscape:connector-curvature="0"
transform="scale(0.5,0.5)" />
<path
style="fill:#ffffff"
d="m 22.016359,43.905089 0,-2.049034 -0.472477,-0.05967 C 18.450732,41.405707 15.37349,40.075058 12.711275,37.977019 12.034625,37.443765 10.432061,35.821611 9.8923288,35.123615 7.8541766,32.48782 6.5570641,29.395497 6.1758234,26.263445 l -0.035588,-0.292373 -2.0534632,0 -2.0534632,0 0,-1.98305 0,-1.983051 2.0487483,0 2.0487482,0 0.1127191,-0.724577 c 0.599214,-3.85184 2.3287028,-7.250446 5.0915727,-10.005414 2.82101,-2.812941 6.436711,-4.5823511 10.439737,-5.1088785 l 0.241525,-0.031768 0,-2.0562064 0,-2.0562065 1.983051,0 1.983051,0 0,2.0562065 0,2.0562064 0.241525,0.031768 c 6.055798,0.7965333 11.243423,4.4983015 13.894993,9.9151405 0.844865,1.72596 1.341475,3.303861 1.636317,5.199152 l 0.112719,0.724577 2.048748,0 2.048748,0 0,1.983051 0,1.98305 -2.049826,0 -2.049828,0 -0.110799,0.75218 c -0.192208,1.304829 -0.63931,2.912391 -1.162568,4.180024 -0.543916,1.317676 -1.521782,2.976479 -2.487188,4.21914 -0.538794,0.693528 -1.785803,1.987976 -2.461824,2.555474 -2.204829,1.850884 -4.683929,3.120243 -7.372882,3.775094 -0.612253,0.149105 -1.917248,0.382495 -2.138709,0.382495 l -0.149426,0 0,2.059322 0,2.059322 -1.983051,0 -1.983051,0 0,-2.049034 z m 4.037633,-6.035108 c 4.972356,-0.752988 9.139502,-4.053473 10.978841,-8.695519 0.676309,-1.706842 0.970201,-3.280364 0.968687,-5.18644 -0.0012,-1.506015 -0.146533,-2.554072 -0.547231,-3.946206 -0.48784,-1.694889 -1.410776,-3.454087 -2.558029,-4.875828 -0.491872,-0.609556 -1.653766,-1.754156 -2.252782,-2.21925 -2.69679,-2.09387 -6.060389,-3.1401596 -9.444915,-2.93796 -3.017545,0.180276 -5.78054,1.254768 -8.082868,3.14332 -0.65663,0.53862 -1.696105,1.594085 -2.15865,2.191856 -1.608249,2.078424 -2.583835,4.467791 -2.896184,7.09322 -0.083554,0.702309 -0.083555,2.480821 -10e-7,3.152542 0.401961,3.231545 1.794606,6.103508 4.044146,8.339988 1.088817,1.082496 2.28325,1.940209 3.635698,2.610767 1.401625,0.69494 2.755494,1.118848 4.241388,1.328015 1.012296,0.142499 1.052732,0.144737 2.271555,0.125676 0.778237,-0.01217 1.29696,-0.04795 1.800345,-0.124181 z"
id="path3341"
inkscape:connector-curvature="0"
transform="scale(0.5,0.5)" />
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

68
res/logo/yellow.svg Normal file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
fill="#000000"
height="48"
viewBox="0 0 24 24"
width="48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo-yellow.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="748"
id="namedview8"
showgrid="false"
inkscape:snap-midpoints="true"
inkscape:zoom="19.666667"
inkscape:cx="17.084156"
inkscape:cy="23.340792"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="M0 0h24v24H0z"
id="path4"
fill="none" />
<path
d="M 20.94,11 C 20.48,6.83 17.17,3.52 13,3.06 L 13,1 11,1 11,3.06 C 6.83,3.52 3.52,6.83 3.06,11 L 1,11 l 0,2 2.06,0 c 0.46,4.17 3.77,7.48 7.94,7.94 l 0,2.06 2,0 0,-2.06 C 17.17,20.48 20.48,17.17 20.94,13 L 23,13 23,11 Z M 12,19 C 8.13,19 5,15.87 5,12 5,8.13 8.13,5 12,5 c 3.87,0 7,3.13 7,7 0,3.87 -3.13,7 -7,7 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccsssss"
style="fill:#fbc93d;fill-opacity:1" />
<path
inkscape:connector-curvature="0"
style="fill:#fbc93d;fill-opacity:1"
d="m 15.988811,13.795153 a 4.2187634,4 0 1 1 0.01119,-3.569022 l -3.780543,1.773886 z"
id="path4-9" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
res/screenshots/de/main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
res/screenshots/en/main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
res/screenshots/es/main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
res/screenshots/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

View File

@ -1 +1 @@
include ':app'
include ':app'