Procházet zdrojové kódy

Improved and more pretty tutorial.
Code improvements.
The app now behaves correctly when launched for the first time.
Sync process now shows the device language for statistics.
More jokes for the sync screen.

seavenois před 10 roky
rodič
revize
5e2184bb82
36 změnil soubory, kde provedl 222 přidání a 114 odebrání
  1. 1 0
      app/build.gradle
  2. 4 2
      app/src/main/AndroidManifest.xml
  3. 0 3
      app/src/main/java/com/ivalentin/margolariak/GalleryLayout.java
  4. 11 6
      app/src/main/java/com/ivalentin/margolariak/HomeLayout.java
  5. 13 16
      app/src/main/java/com/ivalentin/margolariak/MainActivity.java
  6. 6 11
      app/src/main/java/com/ivalentin/margolariak/MainLayout.java
  7. 1 1
      app/src/main/java/com/ivalentin/margolariak/PhotoLayout.java
  8. 0 5
      app/src/main/java/com/ivalentin/margolariak/PostComment.java
  9. 1 1
      app/src/main/java/com/ivalentin/margolariak/PostLayout.java
  10. 10 6
      app/src/main/java/com/ivalentin/margolariak/Sync.java
  11. binární
      app/src/main/res/drawable/tutorial.png
  12. binární
      app/src/main/res/drawable/tutorial_point.png
  13. binární
      app/src/main/res/drawable/tutorial_slide.png
  14. 58 8
      app/src/main/res/layout/activity_main.xml
  15. 3 1
      app/src/main/res/layout/dialog_schedule.xml
  16. 3 1
      app/src/main/res/layout/dialog_settings.xml
  17. 5 7
      app/src/main/res/layout/dialog_sync_failed.xml
  18. 3 1
      app/src/main/res/layout/fragment_layout_activities.xml
  19. 3 1
      app/src/main/res/layout/fragment_layout_activity_future.xml
  20. 3 1
      app/src/main/res/layout/fragment_layout_activity_past.xml
  21. 3 1
      app/src/main/res/layout/fragment_layout_album.xml
  22. 7 3
      app/src/main/res/layout/fragment_layout_blog.xml
  23. 3 1
      app/src/main/res/layout/fragment_layout_gallery.xml
  24. 4 2
      app/src/main/res/layout/fragment_layout_home.xml
  25. 7 3
      app/src/main/res/layout/fragment_layout_lablanca.xml
  26. 3 1
      app/src/main/res/layout/fragment_layout_lablanca_nofestivals.xml
  27. 3 1
      app/src/main/res/layout/fragment_layout_location.xml
  28. 7 3
      app/src/main/res/layout/fragment_layout_photo.xml
  29. 3 2
      app/src/main/res/layout/fragment_layout_post.xml
  30. 9 6
      app/src/main/res/layout/fragment_layout_schedule.xml
  31. 5 2
      app/src/main/res/layout/fragment_layout_settings.xml
  32. 5 2
      app/src/main/res/layout/row_album.xml
  33. 3 1
      app/src/main/res/layout/row_home_schedule.xml
  34. 13 6
      app/src/main/res/values-en/strings.xml
  35. 12 5
      app/src/main/res/values-eu-rES/strings.xml
  36. 10 4
      app/src/main/res/values/strings.xml

+ 1 - 0
app/build.gradle

@@ -21,5 +21,6 @@ android {
 dependencies {
 dependencies {
 //    compile 'com.android.support:support-v4:23.4.0'
 //    compile 'com.android.support:support-v4:23.4.0'
 //    compile 'com.android.support:appcompat-v7:23.4.0'
 //    compile 'com.android.support:appcompat-v7:23.4.0'
+    //noinspection GradleDynamicVersion
     compile 'com.google.android.gms:play-services:+'
     compile 'com.google.android.gms:play-services:+'
 }
 }

+ 4 - 2
app/src/main/AndroidManifest.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.ivalentin.margolariak"
+          xmlns:tools="http://schemas.android.com/tools"
+          package="com.ivalentin.margolariak"
     android:versionCode="11"
     android:versionCode="11"
     android:versionName="2.0-alpha04" >
     android:versionName="2.0-alpha04" >
 
 
@@ -27,7 +28,8 @@
         android:supportsRtl="true"
         android:supportsRtl="true"
         android:isGame="false"
         android:isGame="false"
         android:fullBackupContent="@xml/backup"
         android:fullBackupContent="@xml/backup"
-        android:allowClearUserData="true">
+        android:allowClearUserData="true"
+        tools:ignore="UnusedAttribute">
         
         
         <meta-data
         <meta-data
     		android:name="com.google.android.gms.version"
     		android:name="com.google.android.gms.version"

+ 0 - 3
app/src/main/java/com/ivalentin/margolariak/GalleryLayout.java

@@ -11,7 +11,6 @@ import android.os.Bundle;
 import android.app.Fragment;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.app.FragmentTransaction;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
@@ -130,8 +129,6 @@ public class GalleryLayout extends Fragment{
                     new DownloadImage(GM.SERVER + "/img/galeria/miniature/" + image, this.getActivity().getFilesDir().toString() + "/img/galeria/miniature/" + image, preview[i]).execute();
                     new DownloadImage(GM.SERVER + "/img/galeria/miniature/" + image, this.getActivity().getFilesDir().toString() + "/img/galeria/miniature/" + image, preview[i]).execute();
                 }
                 }
                 i ++;
                 i ++;
-				Log.e("Image idx", "" + i);
-
             }
             }
 
 
             //Set photo counter
             //Set photo counter

+ 11 - 6
app/src/main/java/com/ivalentin/margolariak/HomeLayout.java

@@ -27,7 +27,6 @@ import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.app.FragmentTransaction;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.ActivityCompat;
 import android.text.Html;
 import android.text.Html;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View;
@@ -36,6 +35,7 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
@@ -48,6 +48,7 @@ import android.widget.Toast;
  * @see Fragment
  * @see Fragment
  *
  *
  */
  */
+@SuppressWarnings("UnusedReturnValue")
 public class HomeLayout extends Fragment implements LocationListener {
 public class HomeLayout extends Fragment implements LocationListener {
 
 
 	//The location manager
 	//The location manager
@@ -75,12 +76,12 @@ public class HomeLayout extends Fragment implements LocationListener {
 		view = inflater.inflate(R.layout.fragment_layout_home, null);
 		view = inflater.inflate(R.layout.fragment_layout_home, null);
 
 
 		//Variable to know if I need a location manager
 		//Variable to know if I need a location manager
-		boolean requestLocation = false;
+		//boolean requestLocation = false;
 
 
 		//Show tutorial if its the first time
 		//Show tutorial if its the first time
 		final SharedPreferences preferences = view.getContext().getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
 		final SharedPreferences preferences = view.getContext().getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
-		if (preferences.getBoolean(GM.PREF_TUTORIAL, false) == false) {
-			final LinearLayout llTutorial = (LinearLayout) getActivity().findViewById(R.id.ll_tutorial);
+		if (!preferences.getBoolean(GM.PREF_TUTORIAL, false)) {
+			final RelativeLayout llTutorial = (RelativeLayout) getActivity().findViewById(R.id.rl_tutorial);
 			llTutorial.setVisibility(View.VISIBLE);
 			llTutorial.setVisibility(View.VISIBLE);
 			llTutorial.setOnTouchListener(new View.OnTouchListener() {
 			llTutorial.setOnTouchListener(new View.OnTouchListener() {
 				@Override
 				@Override
@@ -108,7 +109,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 		//Set Location manager
 		//Set Location manager
 		//TODO: Only do this if location is required
 		//TODO: Only do this if location is required
 		locationManager = (LocationManager) view.getContext().getSystemService(Context.LOCATION_SERVICE);
 		locationManager = (LocationManager) view.getContext().getSystemService(Context.LOCATION_SERVICE);
-		if ((ActivityCompat.checkSelfPermission(view.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(view.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) == false) {
+		if (!(ActivityCompat.checkSelfPermission(view.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(view.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
 			locationManager.requestLocationUpdates(locationManager.getBestProvider(new Criteria(), true), GM.LOCATION_ACCURACY_TIME, GM.LOCATION_ACCURACY_SPACE, this);
 			locationManager.requestLocationUpdates(locationManager.getBestProvider(new Criteria(), true), GM.LOCATION_ACCURACY_TIME, GM.LOCATION_ACCURACY_SPACE, this);
 			onLocationChanged(locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER));
 			onLocationChanged(locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER));
 		}
 		}
@@ -116,7 +117,6 @@ public class HomeLayout extends Fragment implements LocationListener {
 		//Set the title
 		//Set the title
 		((MainActivity) getActivity()).setSectionTitle(view.getContext().getString(R.string.menu_home));
 		((MainActivity) getActivity()).setSectionTitle(view.getContext().getString(R.string.menu_home));
 
 
-		//TODO: This methods is empty
 		setUpLablanca(view);
 		setUpLablanca(view);
 
 
 		//Set up the blog section
 		//Set up the blog section
@@ -428,6 +428,10 @@ public class HomeLayout extends Fragment implements LocationListener {
 				cursor.moveToFirst();
 				cursor.moveToFirst();
 				llSection.setVisibility(View.VISIBLE);
 				llSection.setVisibility(View.VISIBLE);
 
 
+				//Enable menu entries
+				this.getActivity().findViewById(R.id.menu_lablanca_gm_schedule).setVisibility(View.VISIBLE);
+				this.getActivity().findViewById(R.id.menu_lablanca_schedule).setVisibility(View.VISIBLE);
+
 				//Set text
 				//Set text
 				String text = Html.fromHtml(cursor.getString(0)).toString();
 				String text = Html.fromHtml(cursor.getString(0)).toString();
 				String shortText = text.substring(0, 80);
 				String shortText = text.substring(0, 80);
@@ -490,6 +494,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 			} else {
 			} else {
 				text.setText(String.format(getString(R.string.home_section_location_text_long), String.format(Locale.US, "%.02f", distance)));
 				text.setText(String.format(getString(R.string.home_section_location_text_long), String.format(Locale.US, "%.02f", distance)));
 			}
 			}
+			return true;
 
 
 		}
 		}
 		return false;
 		return false;

+ 13 - 16
app/src/main/java/com/ivalentin/margolariak/MainActivity.java

@@ -241,26 +241,24 @@ public class MainActivity extends Activity{
 
 
 		SharedPreferences preferences = getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
 		SharedPreferences preferences = getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
 		if (preferences.getInt(GM.PREF_DB_FESTIVALS, 0) == 1) {
 		if (preferences.getInt(GM.PREF_DB_FESTIVALS, 0) == 1) {
-
-			menuLablancaItem[0].setOnClickListener(new OnClickListener() {
-				@Override
-				public void onClick(View v) {
-					loadSection(GM.SECTION_LABLANCA_SCHEDULE, true);
-				}
-			});
-
-			menuLablancaItem[1].setOnClickListener(new OnClickListener() {
-				@Override
-				public void onClick(View v) {
-					loadSection(GM.SECTION_LABLANCA_GM_SCHEDULE, true);
-				}
-			});
-
 			//Show the entries
 			//Show the entries
 			for (int i = 0; i < 2; i ++){
 			for (int i = 0; i < 2; i ++){
 				menuLablancaItem[i].setVisibility(View.VISIBLE);
 				menuLablancaItem[i].setVisibility(View.VISIBLE);
 			}
 			}
 		}
 		}
+		menuLablancaItem[0].setOnClickListener(new OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				loadSection(GM.SECTION_LABLANCA_SCHEDULE, true);
+			}
+		});
+
+		menuLablancaItem[1].setOnClickListener(new OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				loadSection(GM.SECTION_LABLANCA_GM_SCHEDULE, true);
+			}
+		});
 
 
 		menuSpacer.setOnClickListener(new OnClickListener() {
 		menuSpacer.setOnClickListener(new OnClickListener() {
 			@Override
 			@Override
@@ -341,7 +339,6 @@ public class MainActivity extends Activity{
 					//Set the action button
 					//Set the action button
 					btDialogAction = (Button) dialog.findViewById(R.id.bt_dialog_notification_action);
 					btDialogAction = (Button) dialog.findViewById(R.id.bt_dialog_notification_action);
 					if (action != null){
 					if (action != null){
-						Log.e("Acton", action);
 						switch (action) {
 						switch (action) {
 
 
 							case GM.EXTRA_ACTION_LABLANCA:
 							case GM.EXTRA_ACTION_LABLANCA:

+ 6 - 11
app/src/main/java/com/ivalentin/margolariak/MainLayout.java

@@ -4,12 +4,10 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Context;
 import android.os.Handler;
 import android.os.Handler;
 import android.util.AttributeSet;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.MotionEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View;
 import android.view.animation.Interpolator;
 import android.view.animation.Interpolator;
 import android.widget.LinearLayout;
 import android.widget.LinearLayout;
-import android.widget.ScrollView;
 import android.widget.Scroller;
 import android.widget.Scroller;
 
 
 /**
 /**
@@ -41,12 +39,11 @@ public class MainLayout extends LinearLayout {
 
 
 	private int contentXOffset;
 	private int contentXOffset;
 	private MenuState currentMenuState = MenuState.HIDDEN;
 	private MenuState currentMenuState = MenuState.HIDDEN;
-	private Scroller menuScroller = new Scroller(this.getContext(), new EaseInInterpolator());
-	private Runnable menuRunnable = new MenuRunnable();
-	private Handler menuHandler = new Handler();
+	private final Scroller menuScroller = new Scroller(this.getContext(), new EaseInInterpolator());
+	private final Runnable menuRunnable = new MenuRunnable();
+	private final Handler menuHandler = new Handler();
 	private int prevX = 0;
 	private int prevX = 0;
 	private boolean isDragging = false;
 	private boolean isDragging = false;
-	private int lastDiffX = 0;
 	private int initialX = 0;
 	private int initialX = 0;
 
 
 	/**
 	/**
@@ -141,7 +138,7 @@ public class MainLayout extends LinearLayout {
 	 * @see Runnable
 	 * @see Runnable
 	 *
 	 *
 	 */
 	 */
-	protected class MenuRunnable implements Runnable {
+	private class MenuRunnable implements Runnable {
 		@Override
 		@Override
 		public void run() {
 		public void run() {
 			boolean isScrolling = menuScroller.computeScrollOffset();
 			boolean isScrolling = menuScroller.computeScrollOffset();
@@ -189,7 +186,7 @@ public class MainLayout extends LinearLayout {
 	 * @author Iñigo Valentin
 	 * @author Iñigo Valentin
 	 *
 	 *
 	 */
 	 */
-	protected class EaseInInterpolator implements Interpolator {
+	private class EaseInInterpolator implements Interpolator {
 		@Override
 		@Override
 		public float getInterpolation(float t) {
 		public float getInterpolation(float t) {
 			return (float) Math.pow(t - 1, 5) + 1;
 			return (float) Math.pow(t - 1, 5) + 1;
@@ -204,7 +201,7 @@ public class MainLayout extends LinearLayout {
 	 * @param event The MotionEvent triggering it.
 	 * @param event The MotionEvent triggering it.
 	 * @return True if the menu is fully opened or closed and a touch event is happening
 	 * @return True if the menu is fully opened or closed and a touch event is happening
 	 */
 	 */
-	public boolean onContentTouch(MotionEvent event) {
+	private boolean onContentTouch(MotionEvent event) {
 		if (currentMenuState == MenuState.HIDING || currentMenuState == MenuState.SHOWING)
 		if (currentMenuState == MenuState.HIDING || currentMenuState == MenuState.SHOWING)
 			return false;
 			return false;
 		int curX = (int) event.getRawX();
 		int curX = (int) event.getRawX();
@@ -237,7 +234,6 @@ public class MainLayout extends LinearLayout {
 				this.invalidate();
 				this.invalidate();
 
 
 				prevX = curX;
 				prevX = curX;
-				lastDiffX = diffX;
 				//}
 				//}
 				return true;
 				return true;
 
 
@@ -255,7 +251,6 @@ public class MainLayout extends LinearLayout {
 				this.invalidate();
 				this.invalidate();
 				isDragging = false;
 				isDragging = false;
 				prevX = 0;
 				prevX = 0;
-				lastDiffX = 0;
 				return true;
 				return true;
 
 
 			default:
 			default:

+ 1 - 1
app/src/main/java/com/ivalentin/margolariak/PhotoLayout.java

@@ -232,7 +232,7 @@ public class PhotoLayout extends Fragment {
 		//Get comments
 		//Get comments
 		Cursor commentCursor = db.rawQuery("SELECT text, dtime, username FROM photo_comment WHERE photo = " + id + ";", null);
 		Cursor commentCursor = db.rawQuery("SELECT text, dtime, username FROM photo_comment WHERE photo = " + id + ";", null);
 		tvComments.setText(String.format(getResources().getQuantityString(R.plurals.comment_comments, commentCursor.getCount()), commentCursor.getCount()));
 		tvComments.setText(String.format(getResources().getQuantityString(R.plurals.comment_comments, commentCursor.getCount()), commentCursor.getCount()));
-		final int commentCount = commentCursor.getCount();
+		//final int commentCount = commentCursor.getCount();
 		cursor.moveToFirst();
 		cursor.moveToFirst();
 		LinearLayout entry;
 		LinearLayout entry;
 		LayoutInflater factory = LayoutInflater.from(getActivity());
 		LayoutInflater factory = LayoutInflater.from(getActivity());

+ 0 - 5
app/src/main/java/com/ivalentin/margolariak/PostComment.java

@@ -101,7 +101,6 @@ class PostComment extends AsyncTask<String, String, Integer> {
                     urlParams = urlParams + "&lang=en";
                     urlParams = urlParams + "&lang=en";
             }
             }
             urlParams = urlParams + "&from=app&code=" + userCode;
             urlParams = urlParams + "&from=app&code=" + userCode;
-            Log.e("PARAMS", urlParams);
             byte[] postData       = urlParams.getBytes("UTF-8");
             byte[] postData       = urlParams.getBytes("UTF-8");
             int    postDataLength = postData.length;
             int    postDataLength = postData.length;
             String request        = GM.SERVER + "/" + type + "/comment.php";
             String request        = GM.SERVER + "/" + type + "/comment.php";
@@ -141,14 +140,12 @@ class PostComment extends AsyncTask<String, String, Integer> {
                         break;
                         break;
                 }
                 }
                 db.execSQL("INSERT INTO " + table + " (" + item + ", text, username, lang, dtime) VALUES (" + id + ", '" + text + "', '" + user + "', '" + language + "', datetime('NOW'));");
                 db.execSQL("INSERT INTO " + table + " (" + item + ", text, username, lang, dtime) VALUES (" + id + ", '" + text + "', '" + user + "', '" + language + "', datetime('NOW'));");
-                //Log.e("Query", "INSERT INTO " + table + " (" + item + ", text, username, lang, dtime) VALUES (" + id + ", '" + text + "', '" + user + "', '" + language + "', datetime('NOW'));");
                 db.close();
                 db.close();
             }
             }
 
 
         } catch (Exception e) {
         } catch (Exception e) {
             Log.e("Error posting: ", e.getMessage());
             Log.e("Error posting: ", e.getMessage());
         }
         }
-        //Log.e("DIB", "END");
         return code;
         return code;
     }
     }
 
 
@@ -160,8 +157,6 @@ class PostComment extends AsyncTask<String, String, Integer> {
     @SuppressLint("InflateParams") //Throws unknown error when done properly.
     @SuppressLint("InflateParams") //Throws unknown error when done properly.
     @Override
     @Override
     protected void onPostExecute(Integer a) {
     protected void onPostExecute(Integer a) {
-        //Log.e("POS", "START");
-        //Log.d("Comment posted", type);
 
 
         if (code == 200) {
         if (code == 200) {
             //Clear form
             //Clear form

+ 1 - 1
app/src/main/java/com/ivalentin/margolariak/PostLayout.java

@@ -111,7 +111,7 @@ public class PostLayout extends Fragment {
         //Get comments
         //Get comments
         Cursor commentCursor = db.rawQuery("SELECT text, dtime, username FROM post_comment WHERE post = " + id + ";", null);
         Cursor commentCursor = db.rawQuery("SELECT text, dtime, username FROM post_comment WHERE post = " + id + ";", null);
         tvComments.setText(String.format(getResources().getQuantityString(R.plurals.comment_comments, commentCursor.getCount()), commentCursor.getCount()));
         tvComments.setText(String.format(getResources().getQuantityString(R.plurals.comment_comments, commentCursor.getCount()), commentCursor.getCount()));
-        final int commentCount = commentCursor.getCount();
+        //final int commentCount = commentCursor.getCount();
         cursor.moveToFirst();
         cursor.moveToFirst();
         LinearLayout entry;
         LinearLayout entry;
         LayoutInflater factory = LayoutInflater.from(getActivity());
         LayoutInflater factory = LayoutInflater.from(getActivity());

+ 10 - 6
app/src/main/java/com/ivalentin/margolariak/Sync.java

@@ -48,14 +48,18 @@ class Sync extends AsyncTask<Void, Void, Void> {
 			pbSync.setVisibility(View.VISIBLE);
 			pbSync.setVisibility(View.VISIBLE);
 		if (dialog != null) {
 		if (dialog != null) {
 			dialog.show();
 			dialog.show();
-			strings = new String[5];
+			strings = new String[9];
 			strings[0] = myContextRef.getString(R.string.dialog_sync_text_0);
 			strings[0] = myContextRef.getString(R.string.dialog_sync_text_0);
 			strings[1] = myContextRef.getString(R.string.dialog_sync_text_1);
 			strings[1] = myContextRef.getString(R.string.dialog_sync_text_1);
 			strings[2] = myContextRef.getString(R.string.dialog_sync_text_2);
 			strings[2] = myContextRef.getString(R.string.dialog_sync_text_2);
 			strings[3] = myContextRef.getString(R.string.dialog_sync_text_3);
 			strings[3] = myContextRef.getString(R.string.dialog_sync_text_3);
 			strings[4] = myContextRef.getString(R.string.dialog_sync_text_4);
 			strings[4] = myContextRef.getString(R.string.dialog_sync_text_4);
+			strings[5] = myContextRef.getString(R.string.dialog_sync_text_5);
+			strings[6] = myContextRef.getString(R.string.dialog_sync_text_6);
+			strings[7] = myContextRef.getString(R.string.dialog_sync_text_7);
+			strings[8] = myContextRef.getString(R.string.dialog_sync_text_8);
 			tv = (TextView) dialog.findViewById(R.id.tv_dialog_sync_text);
 			tv = (TextView) dialog.findViewById(R.id.tv_dialog_sync_text);
-			int idx = (int) (Math.random() * ((4) + 1));
+			int idx = (int) (Math.random() * 9);
 			tv.setText(strings[idx]);
 			tv.setText(strings[idx]);
 			doProgress = true;
 			doProgress = true;
 		}
 		}
@@ -162,7 +166,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 	 */
 	 */
 	protected void onProgressUpdate(Void...progress) {
 	protected void onProgressUpdate(Void...progress) {
 		if (doProgress){
 		if (doProgress){
-			if (millis + 300 < System.currentTimeMillis()) {
+			if (millis + 500 < System.currentTimeMillis()) {
 				millis = System.currentTimeMillis();
 				millis = System.currentTimeMillis();
 				int idx = (int) (Math.random() * ((4) + 1));
 				int idx = (int) (Math.random() * ((4) + 1));
 				tv.setText(strings[idx]);
 				tv.setText(strings[idx]);
@@ -181,7 +185,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 		//Open the database. f its locked, exit.
 		//Open the database. f its locked, exit.
 		SQLiteDatabase db = myContextRef.openOrCreateDatabase(GM.DB_NAME, Activity.MODE_PRIVATE, null);
 		SQLiteDatabase db = myContextRef.openOrCreateDatabase(GM.DB_NAME, Activity.MODE_PRIVATE, null);
 		if (db.isReadOnly()){
 		if (db.isReadOnly()){
-			Log.e("DB LOCK", "L");
+			Log.e("Db ro", "Database is locked and in read only mode. Skipping sync.");
 			return null;
 			return null;
 		}
 		}
 
 
@@ -211,7 +215,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 			String code = preferences.getString(GM.USER_CODE, "");
 			String code = preferences.getString(GM.USER_CODE, "");
 			int dbVersion = preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION);
 			int dbVersion = preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION);
 			fu = new FetchURL();
 			fu = new FetchURL();
-			fu.Run(GM.SERVER + "/app/sync.php?os=android&code=" + code + "&fg=" + fg + "&v=" + dbVersion);
+			fu.Run(GM.SERVER + "/app/sync.php?os=android&code=" + code + "&fg=" + fg + "&v=" + dbVersion + "&lang=" + GM.getLang());
 			//All the info
 			//All the info
 			o = fu.getOutput().toString();
 			o = fu.getOutput().toString();
 			publishProgress();
 			publishProgress();
@@ -346,7 +350,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 				prefEditor.apply();
 				prefEditor.apply();
 			}
 			}
 			else{
 			else{
-				Log.e("DB UPDATE", "Not updating db version because there were errors");
+				Log.e("Db update", "Not updating db version because there were errors");
 				if (preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION) == GM.DEFAULT_PREF_DB_VERSION) {
 				if (preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION) == GM.DEFAULT_PREF_DB_VERSION) {
 					prefEditor.putInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION + 1);
 					prefEditor.putInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION + 1);
 					prefEditor.apply();
 					prefEditor.apply();

binární
app/src/main/res/drawable/tutorial.png


binární
app/src/main/res/drawable/tutorial_point.png


binární
app/src/main/res/drawable/tutorial_slide.png


+ 58 - 8
app/src/main/res/layout/activity_main.xml

@@ -1,7 +1,9 @@
 <FrameLayout
 <FrameLayout
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:android="http://schemas.android.com/apk/res/android"
+	xmlns:tools="http://schemas.android.com/tools"
 	android:layout_width="match_parent"
 	android:layout_width="match_parent"
-	android:layout_height="match_parent">
+	android:layout_height="match_parent"
+	tools:ignore="MergeRootFrame">
 
 
 	<com.ivalentin.margolariak.MainLayout
 	<com.ivalentin.margolariak.MainLayout
 		android:id="@+id/main_layout"
 		android:id="@+id/main_layout"
@@ -16,7 +18,8 @@
 		<ScrollView
 		<ScrollView
 			android:layout_width="wrap_content"
 			android:layout_width="wrap_content"
 			android:layout_height="fill_parent"
 			android:layout_height="fill_parent"
-			android:nestedScrollingEnabled="false">
+			android:nestedScrollingEnabled="false"
+			tools:ignore="UnusedAttribute">
 
 
 			<LinearLayout
 			<LinearLayout
 				android:layout_width="match_parent"
 				android:layout_width="match_parent"
@@ -296,20 +299,61 @@
 
 
 	</com.ivalentin.margolariak.MainLayout>
 	</com.ivalentin.margolariak.MainLayout>
 
 
-	<LinearLayout
+	<RelativeLayout
 		android:orientation="vertical"
 		android:orientation="vertical"
 		android:layout_width="match_parent"
 		android:layout_width="match_parent"
 		android:layout_height="match_parent"
 		android:layout_height="match_parent"
 		android:background="#003377"
 		android:background="#003377"
 		android:alpha=".85"
 		android:alpha=".85"
-		android:id="@+id/ll_tutorial"
+		android:id="@+id/rl_tutorial"
 		android:visibility="gone">
 		android:visibility="gone">
 
 
 		<ImageView
 		<ImageView
+			android:layout_width="90dp"
+			android:layout_height="90dp"
+			android:src="@drawable/tutorial_point"
+			tools:ignore="ContentDescription"/>
+
+		<ImageView
+			android:layout_width="110dp"
+			android:layout_height="110dp"
+			android:src="@drawable/tutorial_slide"
+			android:layout_marginTop="110dp"
+			android:layout_marginLeft="-10dp"
+			android:layout_marginStart="-10dp"
+			tools:ignore="ContentDescription"/>
+
+		<TextView
+			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"
+			android:textAppearance="?android:attr/textAppearanceMedium"
+			android:text="@string/tutorial_menu"
+			android:textColor="#ffffff"
+			android:textStyle="bold"
+			android:layout_marginTop="70dp"
+			android:layout_marginRight="20dp"
+			android:layout_marginEnd="20dp"
+			android:layout_marginLeft="100dp"
+			android:layout_marginStart="100dp"/>
+
+		<ImageView
+			android:layout_width="90dp"
+			android:layout_height="90dp"
+			android:id="@+id/iv_tutorial_content"
+			android:src="@drawable/tutorial_point"
+			android:layout_centerInParent="true"
+			tools:ignore="ContentDescription"/>
+
+		<TextView
 			android:layout_width="wrap_content"
 			android:layout_width="wrap_content"
 			android:layout_height="wrap_content"
 			android:layout_height="wrap_content"
-			android:id="@+id/imageView4"
-			android:src="@drawable/tutorial"/>
+			android:textAppearance="?android:attr/textAppearanceMedium"
+			android:text="@string/tutorial_content"
+			android:textColor="#ffffff"
+			android:textStyle="bold"
+			android:layout_marginLeft="30dp"
+			android:layout_marginRight="30dp"
+			android:layout_below="@+id/iv_tutorial_content"/>
 
 
 		<Button
 		<Button
 			android:layout_width="wrap_content"
 			android:layout_width="wrap_content"
@@ -319,7 +363,13 @@
 			android:layout_gravity="center_horizontal"
 			android:layout_gravity="center_horizontal"
 			android:textColor="@color/input_button_color"
 			android:textColor="@color/input_button_color"
 			android:textStyle="bold"
 			android:textStyle="bold"
-			android:background="@drawable/button_selector"/>
-	</LinearLayout>
+			android:background="@drawable/button_selector"
+			android:layout_centerHorizontal="true"
+			android:layout_alignParentEnd="false"
+			android:layout_alignParentBottom="true"
+			android:layout_marginBottom="50dp"
+			android:paddingLeft="10dp"
+			android:paddingRight="10dp"/>
+	</RelativeLayout>
 
 
 </FrameLayout>
 </FrameLayout>

+ 3 - 1
app/src/main/res/layout/dialog_schedule.xml

@@ -1,5 +1,6 @@
 <RelativeLayout
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_height="fill_parent"
     android:background="@drawable/section"
     android:background="@drawable/section"
@@ -81,7 +82,8 @@
                     android:layout_width="wrap_content"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_height="wrap_content"
                     android:textAppearance="@android:style/TextAppearance.Medium"
                     android:textAppearance="@android:style/TextAppearance.Medium"
-                    android:capitalize="sentences"/>
+                    android:capitalize="sentences"
+                    tools:ignore="Deprecated,TextViewEdits"/>
 
 
                 <TextView
                 <TextView
                     android:id="@+id/tv_dialog_schedule_time"
                     android:id="@+id/tv_dialog_schedule_time"

+ 3 - 1
app/src/main/res/layout/dialog_settings.xml

@@ -1,5 +1,6 @@
 <LinearLayout
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/section"
     android:background="@drawable/section"
@@ -24,7 +25,8 @@
             android:layout_height="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical"
             android:orientation="vertical"
             android:background="@drawable/entry"
             android:background="@drawable/entry"
-            android:padding="7dp">
+            android:padding="7dp"
+            tools:ignore="ScrollViewSize">
 
 
             <WebView
             <WebView
                 android:layout_width="fill_parent"
                 android:layout_width="fill_parent"

+ 5 - 7
app/src/main/res/layout/dialog_sync_failed.xml

@@ -1,7 +1,7 @@
-<RelativeLayout
+<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
+    android:layout_height="wrap_content"
     android:background="@drawable/section"
     android:background="@drawable/section"
     android:orientation="vertical"
     android:orientation="vertical"
     android:paddingBottom="10dp" >
     android:paddingBottom="10dp" >
@@ -9,7 +9,6 @@
     <LinearLayout
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_alignParentTop="true"
         android:orientation="vertical"
         android:orientation="vertical"
         android:padding="7dp">
         android:padding="7dp">
 
 
@@ -33,14 +32,13 @@
 
 
     <Button
     <Button
         android:id="@+id/bt_dialog_sync_failed_close"
         android:id="@+id/bt_dialog_sync_failed_close"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true"
         android:layout_margin="5dp"
         android:layout_margin="5dp"
         android:text="@string/dialog_sync_failed_close"
         android:text="@string/dialog_sync_failed_close"
         android:background="@drawable/button_selector"
         android:background="@drawable/button_selector"
         android:textStyle="bold"
         android:textStyle="bold"
         android:textColor="@color/input_text_color"
         android:textColor="@color/input_text_color"
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"/>
 
 
-</RelativeLayout>
+</LinearLayout>

+ 3 - 1
app/src/main/res/layout/fragment_layout_activities.xml

@@ -2,11 +2,13 @@
 
 
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 3 - 1
app/src/main/res/layout/fragment_layout_activity_future.xml

@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 3 - 1
app/src/main/res/layout/fragment_layout_activity_past.xml

@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 3 - 1
app/src/main/res/layout/fragment_layout_album.xml

@@ -2,11 +2,13 @@
 
 
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 7 - 3
app/src/main/res/layout/fragment_layout_blog.xml

@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"
@@ -47,7 +49,8 @@
                 android:textColor="@color/input_button_color"
                 android:textColor="@color/input_button_color"
                 android:layout_gravity="center_horizontal"
                 android:layout_gravity="center_horizontal"
                 android:visibility="gone"
                 android:visibility="gone"
-                android:layout_margin="5dp" />
+                android:layout_margin="5dp"
+                tools:ignore="ButtonStyle"/>
 
 
             <Button
             <Button
                 android:layout_width="wrap_content"
                 android:layout_width="wrap_content"
@@ -58,7 +61,8 @@
                 android:textStyle="bold"
                 android:textStyle="bold"
                 android:textColor="@color/input_button_color"
                 android:textColor="@color/input_button_color"
                 android:layout_gravity="center_horizontal"
                 android:layout_gravity="center_horizontal"
-                android:layout_margin="5dp" />
+                android:layout_margin="5dp"
+                tools:ignore="ButtonStyle"/>
         </LinearLayout>
         </LinearLayout>
     </LinearLayout>
     </LinearLayout>
 </com.ivalentin.margolariak.CustomScrollView>
 </com.ivalentin.margolariak.CustomScrollView>

+ 3 - 1
app/src/main/res/layout/fragment_layout_gallery.xml

@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 4 - 2
app/src/main/res/layout/fragment_layout_home.xml

@@ -1,6 +1,7 @@
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/sh_home_layout"
+	xmlns:tools="http://schemas.android.com/tools"
+	android:id="@+id/sh_home_layout"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content" >
     android:layout_height="wrap_content" >
 
 
@@ -48,7 +49,8 @@
 					android:layout_height="match_parent"
 					android:layout_height="match_parent"
 					android:gravity="center_horizontal"
 					android:gravity="center_horizontal"
 					android:layout_marginTop="10dp"
 					android:layout_marginTop="10dp"
-					android:layout_marginBottom="10dp">
+					android:layout_marginBottom="10dp"
+					tools:ignore="UseCompoundDrawables">
 
 
 					<ImageView
 					<ImageView
 						android:layout_width="wrap_content"
 						android:layout_width="wrap_content"

+ 7 - 3
app/src/main/res/layout/fragment_layout_lablanca.xml

@@ -1,10 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"
@@ -87,7 +89,8 @@
                     android:textColor="@color/input_button_color"
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
                     android:textStyle="bold"
                     android:layout_margin="6dp"
                     android:layout_margin="6dp"
-                    android:layout_weight=".5"/>
+                    android:layout_weight=".5"
+                    tools:ignore="ButtonStyle"/>
 
 
                 <Button
                 <Button
                     android:layout_width="fill_parent"
                     android:layout_width="fill_parent"
@@ -98,7 +101,8 @@
                     android:textColor="@color/input_button_color"
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
                     android:textStyle="bold"
                     android:layout_margin="6dp"
                     android:layout_margin="6dp"
-                    android:layout_weight=".5"/>
+                    android:layout_weight=".5"
+                    tools:ignore="ButtonStyle"/>
             </LinearLayout>
             </LinearLayout>
 
 
         </LinearLayout>
         </LinearLayout>

+ 3 - 1
app/src/main/res/layout/fragment_layout_lablanca_nofestivals.xml

@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 3 - 1
app/src/main/res/layout/fragment_layout_location.xml

@@ -1,9 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+			  xmlns:tools="http://schemas.android.com/tools"
 			  android:layout_width="fill_parent"
 			  android:layout_width="fill_parent"
 			  android:orientation="vertical"
 			  android:orientation="vertical"
 			  android:layout_height="fill_parent"
 			  android:layout_height="fill_parent"
-			  android:background="@color/background_app">
+			  android:background="@color/background_app"
+			  tools:ignore="Overdraw">
 
 
 	<LinearLayout
 	<LinearLayout
 		android:orientation="vertical"
 		android:orientation="vertical"

+ 7 - 3
app/src/main/res/layout/fragment_layout_photo.xml

@@ -1,9 +1,11 @@
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"
@@ -74,7 +76,8 @@
                     android:textColor="@color/input_button_color"
                     android:textColor="@color/input_button_color"
                     android:layout_gravity="center_horizontal"
                     android:layout_gravity="center_horizontal"
                     android:visibility="visible"
                     android:visibility="visible"
-                    android:layout_margin="5dp"/>
+                    android:layout_margin="5dp"
+                    tools:ignore="ButtonStyle"/>
 
 
                 <Button
                 <Button
                     android:layout_width="wrap_content"
                     android:layout_width="wrap_content"
@@ -85,7 +88,8 @@
                     android:textStyle="bold"
                     android:textStyle="bold"
                     android:textColor="@color/input_button_color"
                     android:textColor="@color/input_button_color"
                     android:layout_gravity="center_horizontal"
                     android:layout_gravity="center_horizontal"
-                    android:layout_margin="5dp"/>
+                    android:layout_margin="5dp"
+                    tools:ignore="ButtonStyle"/>
             </LinearLayout>
             </LinearLayout>
         </LinearLayout>
         </LinearLayout>
 
 

+ 3 - 2
app/src/main/res/layout/fragment_layout_post.xml

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
-    android:id="@+id/scrollView3"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 9 - 6
app/src/main/res/layout/fragment_layout_schedule.xml

@@ -1,10 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:id="@+id/fragment_layout_schedule"
-              android:layout_width="fill_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical"
-              android:background="@color/background_app">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/fragment_layout_schedule"
+    android:layout_width="fill_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="@color/background_app"
+    tools:ignore="Overdraw">
 
 
     <LinearLayout
     <LinearLayout
         android:orientation="vertical"
         android:orientation="vertical"

+ 5 - 2
app/src/main/res/layout/fragment_layout_settings.xml

@@ -1,9 +1,11 @@
 <LinearLayout
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:background="@color/background_app"
     android:background="@color/background_app"
-    android:layout_height="fill_parent">
+    android:layout_height="fill_parent"
+    tools:ignore="Overdraw">
 
 
     <com.ivalentin.margolariak.CustomScrollView
     <com.ivalentin.margolariak.CustomScrollView
         android:layout_width="fill_parent"
         android:layout_width="fill_parent"
@@ -31,7 +33,8 @@
                     android:layout_alignParentStart="true"
                     android:layout_alignParentStart="true"
                     android:layout_alignParentTop="true"
                     android:layout_alignParentTop="true"
                     android:text="@string/settings_notification"
                     android:text="@string/settings_notification"
-                    android:textAppearance="@android:style/TextAppearance.Large" />
+                    android:textAppearance="@android:style/TextAppearance.Large"
+                    tools:ignore="RelativeOverlap"/>
 
 
                 <TextView
                 <TextView
                     android:id="@+id/tv_settings_notifications_summary"
                     android:id="@+id/tv_settings_notifications_summary"

+ 5 - 2
app/src/main/res/layout/row_album.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:baselineAligned="false"
     android:baselineAligned="false"
     android:orientation="horizontal"
     android:orientation="horizontal"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
@@ -47,7 +48,8 @@
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_height="match_parent"
             android:gravity="end"
             android:gravity="end"
-            android:layout_marginTop="5dp">
+            android:layout_marginTop="5dp"
+            tools:ignore="UseCompoundDrawables">
 
 
             <TextView
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_width="wrap_content"
@@ -110,7 +112,8 @@
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_height="match_parent"
             android:gravity="end"
             android:gravity="end"
-            android:layout_marginTop="5dp">
+            android:layout_marginTop="5dp"
+            tools:ignore="UseCompoundDrawables">
 
 
             <TextView
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_width="wrap_content"

+ 3 - 1
app/src/main/res/layout/row_home_schedule.xml

@@ -1,5 +1,6 @@
 <LinearLayout
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:orientation="vertical"
@@ -39,7 +40,8 @@
         android:layout_marginLeft="15dp"
         android:layout_marginLeft="15dp"
         android:layout_marginStart="15dp"
         android:layout_marginStart="15dp"
         android:layout_marginTop="5dp"
         android:layout_marginTop="5dp"
-        android:gravity="center_vertical">
+        android:gravity="center_vertical"
+        tools:ignore="UseCompoundDrawables">
 
 
         <ImageView
         <ImageView
             android:id="@+id/iv_row_home_schedule_pinpoint"
             android:id="@+id/iv_row_home_schedule_pinpoint"

+ 13 - 6
app/src/main/res/values-en/strings.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
 
 
 
 	<!-- Common strings -->
 	<!-- Common strings -->
@@ -19,7 +19,10 @@
 	<string name="menu_blog">Blog</string>
 	<string name="menu_blog">Blog</string>
 	<string name="menu_gallery">Gallery</string>
 	<string name="menu_gallery">Gallery</string>
 	<string name="menu_settings">Settings</string>
 	<string name="menu_settings">Settings</string>
-	<string name="tutorial_button">Entendido</string>
+
+	<string name="tutorial_menu">Touch the Margolariak icon or slide the screen to the right to toggle the menu.</string>
+	<string name="tutorial_content">Toca the content to navigate between sections.</string>
+	<string name="tutorial_button">Understood</string>
 
 
 	<!-- Schedule strings -->
 	<!-- Schedule strings -->
 	<string name="schedule_filter">Search&#8230;</string>
 	<string name="schedule_filter">Search&#8230;</string>
@@ -47,7 +50,7 @@
 	<string name="home_section_social">Follow us</string>
 	<string name="home_section_social">Follow us</string>
 
 
 	<string name="home_section_location_text_0">Gasteizko Margolariak is around!</string>
 	<string name="home_section_location_text_0">Gasteizko Margolariak is around!</string>
-	<string name="home_section_location_text_short">They are just %1$d meters away from you!\n(About %2$d minutes walking)</string>
+	<string name="home_section_location_text_short" tools:ignore="PluralsCandidate">They are just %1$d meters away from you!\n(About %2$d minutes walking)</string>
 	<string name="home_section_location_text_long">They are just %1$s kilometers away from you!</string>
 	<string name="home_section_location_text_long">They are just %1$s kilometers away from you!</string>
 
 
 
 
@@ -62,7 +65,7 @@
 	<string name="settings_about">About us</string>
 	<string name="settings_about">About us</string>
 	<string name="settings_transparency">Transparency</string>
 	<string name="settings_transparency">Transparency</string>
 	<string name="settings_license_content">Copyright 2016 Iñigo Valentin&lt;br/>&lt;br/>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.&lt;br/>&lt;br/>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details at http://www.gnu.org/licenses/.&lt;br/>&lt;br/>The name "Gasteizko Margolariak" and its logotype are property of Gasteizko Margolariak.&lt;br/>&lt;br/>&lt;br/>&lt;div style="background-color:#bbbbbb;padding:6px;border-radius:5px;border-style:solid;border-width:2px;border-color:#333333;text-align:center;">You can get the source code for this project at &lt;a href="https://github.com/Seavenois/GM">Github&lt;/a>&lt;/div></string>
 	<string name="settings_license_content">Copyright 2016 Iñigo Valentin&lt;br/>&lt;br/>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.&lt;br/>&lt;br/>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details at http://www.gnu.org/licenses/.&lt;br/>&lt;br/>The name "Gasteizko Margolariak" and its logotype are property of Gasteizko Margolariak.&lt;br/>&lt;br/>&lt;br/>&lt;div style="background-color:#bbbbbb;padding:6px;border-radius:5px;border-style:solid;border-width:2px;border-color:#333333;text-align:center;">You can get the source code for this project at &lt;a href="https://github.com/Seavenois/GM">Github&lt;/a>&lt;/div></string>
-	<string name="settings_privacy_content">In Gasteizko Margolariak we respect your privacy. We don\'t collect ANY data from our users, including personal information, location, shopping habits, sexual preferences, favourite colour, first love\'s name... ANY.&lt;br/>&lt;br/>In order of making you believe us, we\'ll explain what we DO store:&lt;br/>&lt;br/>&lt;ul>&lt;li>A randomly generated user code, unique to your device. This is necessary to sync content with aur database, so you can get info about our post, activities... But it\'s done in a way that won\'t allow un to identify you as a person with that number.&lt;/li>&lt;li>When commenting on a photo ar an entry, we store your current IP address. This is incredibly useful for us to know how many actual people are posting comments, and it also makes imposible for us to identify you as a person.&lt;/li>&lt;/ul></string>
+	<string name="settings_privacy_content"><![CDATA[In Gasteizko Margolariak we respect your privacy. We don\'t collect ANY data from our users, including personal information, location, shopping habits, sexual preferences, favourite colour, first love\'s name… ANY.<br/><br/>In order of making you believe us, we\'ll explain what we DO store:<br/><br/><ul><li>A randomly generated user code, unique to your device. This is necessary to sync content with aur database, so you can get info about our post, activities... But it\'s done in a way that won\'t allow un to identify you as a person with that number.</li><li>When commenting on a photo ar an entry, we store your current IP address. This is incredibly useful for us to know how many actual people are posting comments, and it also makes imposible for us to identify you as a person.</li></ul>]]></string>
 	<string name="settings_about_content">La Asociación Cultural Gasteizko Margolariak nace en el año 2013 con la idea de estimular la participación ciudadana y fortalecer la cultura y las tradiciones de Vitoria-Gasteiz.&lt;br/>&lt;br/>En nuestro nombre se refleja un barrio en el que las calles nos recuerdan a grandes pintores: el barrio de San Martín. Estamos representados en los barrios, y creemos que son la esencia de esta ciudad.&lt;br/>&lt;br/>Nos convertimos en Cuadrilla de Blusas y Neskas en 2013, y en ese mismo año, miembros de la Comisión de Blusas y Neskas.&lt;br/>&lt;br/>Desde entonces no hemos hecho más que crecer junto con todos los que han decidido, año tras año, apostar por nosotros.</string>
 	<string name="settings_about_content">La Asociación Cultural Gasteizko Margolariak nace en el año 2013 con la idea de estimular la participación ciudadana y fortalecer la cultura y las tradiciones de Vitoria-Gasteiz.&lt;br/>&lt;br/>En nuestro nombre se refleja un barrio en el que las calles nos recuerdan a grandes pintores: el barrio de San Martín. Estamos representados en los barrios, y creemos que son la esencia de esta ciudad.&lt;br/>&lt;br/>Nos convertimos en Cuadrilla de Blusas y Neskas en 2013, y en ese mismo año, miembros de la Comisión de Blusas y Neskas.&lt;br/>&lt;br/>Desde entonces no hemos hecho más que crecer junto con todos los que han decidido, año tras año, apostar por nosotros.</string>
 	<string name="settings_transparency_content">¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.&lt;br/>&lt;br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.&lt;br/>&lt;br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.</string>
 	<string name="settings_transparency_content">¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.&lt;br/>&lt;br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.&lt;br/>&lt;br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.</string>
 
 
@@ -147,11 +150,15 @@
 	<string name="dialog_sync_text_0">Locating Don Margolo&#8230;</string>
 	<string name="dialog_sync_text_0">Locating Don Margolo&#8230;</string>
 	<string name="dialog_sync_text_1">Starting up the van&#8230;</string>
 	<string name="dialog_sync_text_1">Starting up the van&#8230;</string>
 	<string name="dialog_sync_text_2">Serving kalimotxos&#8230;</string>
 	<string name="dialog_sync_text_2">Serving kalimotxos&#8230;</string>
-	<string name="dialog_sync_text_3">\"&#8230;tu eres el piloto&#8230;\"</string>
+	<string name="dialog_sync_text_3">Tú eres el piloto</string>
+	<string name="dialog_sync_text_4">Afinando la tuba&#8230;</string>
+	<string name="dialog_sync_text_5">Margolari camina pa\'lante, margolari camina pa\'trás.</string>
+	<string name="dialog_sync_text_6">Ari ari ari!</string>
+	<string name="dialog_sync_text_7">Llegando tarde...</string>
+	<string name="dialog_sync_text_8">¿Cabe más gente en el Foro Margolari?</string>
 	<string name="dialog_sync_failed_title">Synchronization failed</string>
 	<string name="dialog_sync_failed_title">Synchronization failed</string>
 	<string name="dialog_sync_failed_text">Couldn\'t download content.\n\nMake sure you have a network connection and try again.</string>
 	<string name="dialog_sync_failed_text">Couldn\'t download content.\n\nMake sure you have a network connection and try again.</string>
 	<string name="dialog_sync_failed_close">Close</string>
 	<string name="dialog_sync_failed_close">Close</string>
-	<string name="dialog_sync_text_4">Afinando la tuba…</string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>
 
 
 </resources>
 </resources>

+ 12 - 5
app/src/main/res/values-eu-rES/strings.xml

@@ -25,6 +25,9 @@
 	<string name="menu_blog">Blog</string>
 	<string name="menu_blog">Blog</string>
 	<string name="menu_gallery">Galeria</string>
 	<string name="menu_gallery">Galeria</string>
 	<string name="menu_settings">Ezarpenak</string>
 	<string name="menu_settings">Ezarpenak</string>
+
+	<string name="tutorial_menu">Toca el icono de Margolariak o desliza la pantalla hacia la derecha para ver el menú.</string>
+	<string name="tutorial_content">Toca cualquier entrada para ir a la sección correspondiente.</string>
 	<string name="tutorial_button">Entendido</string>
 	<string name="tutorial_button">Entendido</string>
 
 
 	<!-- Schedule strings -->
 	<!-- Schedule strings -->
@@ -149,12 +152,16 @@
 	<string name="settings_transparency">Transparentzia</string>
 	<string name="settings_transparency">Transparentzia</string>
 	<string name="settings_privacy_content"><![CDATA[En Gasteizko Margolariak respetamos tu privacidad. No guardamos NINGÚN dato de nuestros usuarios, incluyendo información personal, localización, hábitos de compra, preferencias sexuales, color favorito, nombre de su primer amor... NINGUNO.<br/><br/>Para que nos creas, te explicamos lo que sí almacenamos:<br/><br/><ul><li>Un código de usuario, generado aleatoriamente, único para tu dispositivo. Esto es necesario para sincronizar la aplicación con nuestra base de datos y poder descargar los ultimos posts, actividades... Pero esta hecho de tal manera que no podamos identificarte como persona a través de ese código.</li><li>AL publicar un comentario en una entrada o una foto, guardaremos temporalmente (120 minutos, lo justo para procesar información) tu dirección IP. Esto nos es súper util para saber cuantas personas diferentes publican comentarios, y tampoco nos permite identificarte como persona.</li></ul>]]></string>
 	<string name="settings_privacy_content"><![CDATA[En Gasteizko Margolariak respetamos tu privacidad. No guardamos NINGÚN dato de nuestros usuarios, incluyendo información personal, localización, hábitos de compra, preferencias sexuales, color favorito, nombre de su primer amor... NINGUNO.<br/><br/>Para que nos creas, te explicamos lo que sí almacenamos:<br/><br/><ul><li>Un código de usuario, generado aleatoriamente, único para tu dispositivo. Esto es necesario para sincronizar la aplicación con nuestra base de datos y poder descargar los ultimos posts, actividades... Pero esta hecho de tal manera que no podamos identificarte como persona a través de ese código.</li><li>AL publicar un comentario en una entrada o una foto, guardaremos temporalmente (120 minutos, lo justo para procesar información) tu dirección IP. Esto nos es súper util para saber cuantas personas diferentes publican comentarios, y tampoco nos permite identificarte como persona.</li></ul>]]></string>
 	<string name="settings_transparency_content"><![CDATA[¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.<br/><br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.<br/><br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.]]></string>
 	<string name="settings_transparency_content"><![CDATA[¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.<br/><br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.<br/><br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.]]></string>
-	<string name="dialog_sync_text_3">\"…tu eres el piloto…\"</string>
-	<string name="dialog_sync_text_0">Contactando con Don Margolo…</string>
+	<string name="dialog_sync_text_0">Locating Don Margolo&#8230;</string>
+	<string name="dialog_sync_text_1">Starting up the van&#8230;</string>
+	<string name="dialog_sync_text_2">Serving kalimotxos&#8230;</string>
+	<string name="dialog_sync_text_3">Tú eres el piloto</string>
+	<string name="dialog_sync_text_4">Afinando la tuba&#8230;</string>
+	<string name="dialog_sync_text_5">Margolari camina pa\'lante, margolari camina pa\'trás.</string>
+	<string name="dialog_sync_text_6">Ari ari ari!</string>
+	<string name="dialog_sync_text_7">Llegando tarde...</string>
+	<string name="dialog_sync_text_8">¿Cabe más gente en el Foro Margolari?</string>
 	<string name="dialog_sync_failed_text">No se pudierdon descargar los contenidos\n\nAsegúrate de que dispones de conexión a internet e inténtalo de nuevo.</string>
 	<string name="dialog_sync_failed_text">No se pudierdon descargar los contenidos\n\nAsegúrate de que dispones de conexión a internet e inténtalo de nuevo.</string>
-	<string name="dialog_sync_text_2">Preparando kalimotxos…</string>
-	<string name="dialog_sync_text_1">Arrancando la furgo…</string>
-	<string name="dialog_sync_text_4">Afinando la tuba…</string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>
 	<string name="settings_notification_off">No recibir notificaciones</string>
 	<string name="settings_notification_off">No recibir notificaciones</string>
 	<string name="settings_notification_on">Recibir notificaciones</string>
 	<string name="settings_notification_on">Recibir notificaciones</string>

+ 10 - 4
app/src/main/res/values/strings.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
 
 
 
 	<!-- Tag keys -->
 	<!-- Tag keys -->
@@ -30,6 +30,8 @@
 	<string name="menu_gallery">Galería</string>
 	<string name="menu_gallery">Galería</string>
 	<string name="menu_settings">Preferencias</string>
 	<string name="menu_settings">Preferencias</string>
 
 
+	<string name="tutorial_menu">Toca el icono de Margolariak o desliza la pantalla hacia la derecha para ver el menú.</string>
+	<string name="tutorial_content">Toca cualquier entrada para ir a la sección correspondiente.</string>
 	<string name="tutorial_button">Entendido</string>
 	<string name="tutorial_button">Entendido</string>
 
 
 	<!-- Schedule strings -->
 	<!-- Schedule strings -->
@@ -118,8 +120,12 @@
 	<string name="dialog_sync_text_0">Contactando con Don Margolo&#8230;</string>
 	<string name="dialog_sync_text_0">Contactando con Don Margolo&#8230;</string>
 	<string name="dialog_sync_text_1">Arrancando la furgo&#8230;</string>
 	<string name="dialog_sync_text_1">Arrancando la furgo&#8230;</string>
 	<string name="dialog_sync_text_2">Preparando kalimotxos&#8230;</string>
 	<string name="dialog_sync_text_2">Preparando kalimotxos&#8230;</string>
-	<string name="dialog_sync_text_3">\"&#8230;tu eres el piloto&#8230;\"</string>
+	<string name="dialog_sync_text_3">Tú eres el piloto</string>
 	<string name="dialog_sync_text_4">Afinando la tuba&#8230;</string>
 	<string name="dialog_sync_text_4">Afinando la tuba&#8230;</string>
+	<string name="dialog_sync_text_5">Margolari camina pa\'lante, margolari camina pa\'trás.</string>
+	<string name="dialog_sync_text_6">Ari ari ari!</string>
+	<string name="dialog_sync_text_7">Llegando tarde...</string>
+	<string name="dialog_sync_text_8">¿Cabe más gente en el Foro Margolari?</string>
 	<string name="gallery_albums">Albums</string>
 	<string name="gallery_albums">Albums</string>
 	<string name="gallery_upload">Subir fotos</string>
 	<string name="gallery_upload">Subir fotos</string>
 	<string name="gallery_upload_button">Subir</string>
 	<string name="gallery_upload_button">Subir</string>
@@ -130,7 +136,7 @@
 	</plurals>
 	</plurals>
 	<string name="home_section_activities_future">Proximas actividades</string>
 	<string name="home_section_activities_future">Proximas actividades</string>
 	<string name="home_section_gmschedule">Programa Margolari</string>
 	<string name="home_section_gmschedule">Programa Margolari</string>
-	<string name="home_section_location_text_short">¡Están a solo %1$d metros de ti! (Unos %2$d minutos andando)</string>
+	<string name="home_section_location_text_short" tools:ignore="PluralsCandidate">¡Están a solo %1$d metros de ti! (Unos %2$d minutos andando)</string>
 	<string name="home_section_location_text_long">¡Están a solo %1$s kilometros de ti!</string>
 	<string name="home_section_location_text_long">¡Están a solo %1$s kilometros de ti!</string>
 	<string name="lablanca_date_august">%1$s de agosto</string>
 	<string name="lablanca_date_august">%1$s de agosto</string>
 	<string name="lablanca_date_july">%1$s de julio</string>
 	<string name="lablanca_date_july">%1$s de julio</string>
@@ -164,7 +170,7 @@
 	<string name="settings_license">Licencia</string>
 	<string name="settings_license">Licencia</string>
 	<string name="settings_license_content"><![CDATA[Copyright 2016 Iñigo Valentin<br/><br/>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.<br/><br/>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details at http://www.gnu.org/licenses/.<br/><br/>The name "Gasteizko Margolariak" and its logotype are property of Gasteizko Margolariak.<br/><br/><br/><div style="background-color:#bbbbbb;padding:6px;border-radius:5px;border-style:solid;border-width:2px;border-color:#333333;text-align:center;">You can get the source code for this project at <a href="https://github.com/Seavenois/GM">Github</a></div>]]></string>
 	<string name="settings_license_content"><![CDATA[Copyright 2016 Iñigo Valentin<br/><br/>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.<br/><br/>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details at http://www.gnu.org/licenses/.<br/><br/>The name "Gasteizko Margolariak" and its logotype are property of Gasteizko Margolariak.<br/><br/><br/><div style="background-color:#bbbbbb;padding:6px;border-radius:5px;border-style:solid;border-width:2px;border-color:#333333;text-align:center;">You can get the source code for this project at <a href="https://github.com/Seavenois/GM">Github</a></div>]]></string>
 	<string name="settings_privacy">Privacidad</string>
 	<string name="settings_privacy">Privacidad</string>
-	<string name="settings_privacy_content"><![CDATA[En Gasteizko Margolariak respetamos tu privacidad. No guardamos NINGÚN dato de nuestros usuarios, incluyendo información personal, localización, hábitos de compra, preferencias sexuales, color favorito, nombre de su primer amor... NINGUNO.<br/><br/>Para que nos creas, te explicamos lo que sí almacenamos:<br/><br/><ul><li>Un código de usuario, generado aleatoriamente, único para tu dispositivo. Esto es necesario para sincronizar la aplicación con nuestra base de datos y poder descargar los ultimos posts, actividades... Pero esta hecho de tal manera que no podamos identificarte como persona a través de ese código.</li><li>AL publicar un comentario en una entrada o una foto, guardaremos temporalmente (120 minutos, lo justo para procesar información) tu dirección IP. Esto nos es súper util para saber cuantas personas diferentes publican comentarios, y tampoco nos permite identificarte como persona.</li></ul>]]></string>
+	<string name="settings_privacy_content"><![CDATA[En Gasteizko Margolariak respetamos tu privacidad. No guardamos NINGÚN dato de nuestros usuarios, incluyendo información personal, localización, hábitos de compra, preferencias sexuales, color favorito, nombre de su primer amor NINGUNO.<br/><br/>Para que nos creas, te explicamos lo que sí almacenamos:<br/><br/><ul><li>Un código de usuario, generado aleatoriamente, único para tu dispositivo. Esto es necesario para sincronizar la aplicación con nuestra base de datos y poder descargar los ultimos posts, actividades... Pero esta hecho de tal manera que no podamos identificarte como persona a través de ese código.</li><li>AL publicar un comentario en una entrada o una foto, guardaremos temporalmente (120 minutos, lo justo para procesar información) tu dirección IP. Esto nos es súper util para saber cuantas personas diferentes publican comentarios, y tampoco nos permite identificarte como persona.</li></ul>]]></string>
 	<string name="settings_transparency">Transparencia</string>
 	<string name="settings_transparency">Transparencia</string>
 	<string name="settings_transparency_content"><![CDATA[¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.<br/><br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.<br/><br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.]]></string>
 	<string name="settings_transparency_content"><![CDATA[¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.<br/><br/>Muchas de nuestras actividades son gratuitas. Otras, como las fiestas de La Blanca, tienen una cuota de inscripción. Gasteizko Margolariak no es una empresa, es una Asociación Cultural, y como tal, no tenemos beneficios.<br/><br/>Queremos ser transparentes, y por eso, empezando en 2016, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en tí.]]></string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>
 	<string name="lablanca_nofestivals">Las Fiestas de La Blanca. Esos días, del 4 al 9 de agosto, en los que Vitoria-Gasteiz se transforma. Se llena de color y alegría, y en cada esquina puedes encontrar actividades y espectáculos. Todos las estamos esperando.\n\nPor desgracia, aún hay que esperar más.\n\nNosotros ya estamos trabajando en ello. Tan pronto como vayamos sabiendo más, aquí iremos publicando nuestro programa y otra información sobre las fiestas.</string>