Преглед изворни кода

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 пре 10 година
родитељ
комит
5e2184bb82
36 измењених фајлова са 222 додато и 114 уклоњено
  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
      app/src/main/res/drawable/tutorial.png
  12. BIN
      app/src/main/res/drawable/tutorial_point.png
  13. BIN
      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 {
 //    compile 'com.android.support:support-v4:23.4.0'
 //    compile 'com.android.support:appcompat-v7:23.4.0'
+    //noinspection GradleDynamicVersion
     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"?>
 <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:versionName="2.0-alpha04" >
 
@@ -27,7 +28,8 @@
         android:supportsRtl="true"
         android:isGame="false"
         android:fullBackupContent="@xml/backup"
-        android:allowClearUserData="true">
+        android:allowClearUserData="true"
+        tools:ignore="UnusedAttribute">
         
         <meta-data
     		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.FragmentManager;
 import android.app.FragmentTransaction;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 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();
                 }
                 i ++;
-				Log.e("Image idx", "" + i);
-
             }
 
             //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.support.v4.app.ActivityCompat;
 import android.text.Html;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
@@ -36,6 +35,7 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -48,6 +48,7 @@ import android.widget.Toast;
  * @see Fragment
  *
  */
+@SuppressWarnings("UnusedReturnValue")
 public class HomeLayout extends Fragment implements LocationListener {
 
 	//The location manager
@@ -75,12 +76,12 @@ public class HomeLayout extends Fragment implements LocationListener {
 		view = inflater.inflate(R.layout.fragment_layout_home, null);
 
 		//Variable to know if I need a location manager
-		boolean requestLocation = false;
+		//boolean requestLocation = false;
 
 		//Show tutorial if its the first time
 		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.setOnTouchListener(new View.OnTouchListener() {
 				@Override
@@ -108,7 +109,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 		//Set Location manager
 		//TODO: Only do this if location is required
 		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);
 			onLocationChanged(locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER));
 		}
@@ -116,7 +117,6 @@ public class HomeLayout extends Fragment implements LocationListener {
 		//Set the title
 		((MainActivity) getActivity()).setSectionTitle(view.getContext().getString(R.string.menu_home));
 
-		//TODO: This methods is empty
 		setUpLablanca(view);
 
 		//Set up the blog section
@@ -428,6 +428,10 @@ public class HomeLayout extends Fragment implements LocationListener {
 				cursor.moveToFirst();
 				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
 				String text = Html.fromHtml(cursor.getString(0)).toString();
 				String shortText = text.substring(0, 80);
@@ -490,6 +494,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 			} else {
 				text.setText(String.format(getString(R.string.home_section_location_text_long), String.format(Locale.US, "%.02f", distance)));
 			}
+			return true;
 
 		}
 		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);
 		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
 			for (int i = 0; i < 2; i ++){
 				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() {
 			@Override
@@ -341,7 +339,6 @@ public class MainActivity extends Activity{
 					//Set the action button
 					btDialogAction = (Button) dialog.findViewById(R.id.bt_dialog_notification_action);
 					if (action != null){
-						Log.e("Acton", action);
 						switch (action) {
 
 							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.os.Handler;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.animation.Interpolator;
 import android.widget.LinearLayout;
-import android.widget.ScrollView;
 import android.widget.Scroller;
 
 /**
@@ -41,12 +39,11 @@ public class MainLayout extends LinearLayout {
 
 	private int contentXOffset;
 	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 boolean isDragging = false;
-	private int lastDiffX = 0;
 	private int initialX = 0;
 
 	/**
@@ -141,7 +138,7 @@ public class MainLayout extends LinearLayout {
 	 * @see Runnable
 	 *
 	 */
-	protected class MenuRunnable implements Runnable {
+	private class MenuRunnable implements Runnable {
 		@Override
 		public void run() {
 			boolean isScrolling = menuScroller.computeScrollOffset();
@@ -189,7 +186,7 @@ public class MainLayout extends LinearLayout {
 	 * @author Iñigo Valentin
 	 *
 	 */
-	protected class EaseInInterpolator implements Interpolator {
+	private class EaseInInterpolator implements Interpolator {
 		@Override
 		public float getInterpolation(float t) {
 			return (float) Math.pow(t - 1, 5) + 1;
@@ -204,7 +201,7 @@ public class MainLayout extends LinearLayout {
 	 * @param event The MotionEvent triggering it.
 	 * @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)
 			return false;
 		int curX = (int) event.getRawX();
@@ -237,7 +234,6 @@ public class MainLayout extends LinearLayout {
 				this.invalidate();
 
 				prevX = curX;
-				lastDiffX = diffX;
 				//}
 				return true;
 
@@ -255,7 +251,6 @@ public class MainLayout extends LinearLayout {
 				this.invalidate();
 				isDragging = false;
 				prevX = 0;
-				lastDiffX = 0;
 				return true;
 
 			default:

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

@@ -232,7 +232,7 @@ public class PhotoLayout extends Fragment {
 		//Get comments
 		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()));
-		final int commentCount = commentCursor.getCount();
+		//final int commentCount = commentCursor.getCount();
 		cursor.moveToFirst();
 		LinearLayout entry;
 		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 + "&from=app&code=" + userCode;
-            Log.e("PARAMS", urlParams);
             byte[] postData       = urlParams.getBytes("UTF-8");
             int    postDataLength = postData.length;
             String request        = GM.SERVER + "/" + type + "/comment.php";
@@ -141,14 +140,12 @@ class PostComment extends AsyncTask<String, String, Integer> {
                         break;
                 }
                 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();
             }
 
         } catch (Exception e) {
             Log.e("Error posting: ", e.getMessage());
         }
-        //Log.e("DIB", "END");
         return code;
     }
 
@@ -160,8 +157,6 @@ class PostComment extends AsyncTask<String, String, Integer> {
     @SuppressLint("InflateParams") //Throws unknown error when done properly.
     @Override
     protected void onPostExecute(Integer a) {
-        //Log.e("POS", "START");
-        //Log.d("Comment posted", type);
 
         if (code == 200) {
             //Clear form

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

@@ -111,7 +111,7 @@ public class PostLayout extends Fragment {
         //Get comments
         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()));
-        final int commentCount = commentCursor.getCount();
+        //final int commentCount = commentCursor.getCount();
         cursor.moveToFirst();
         LinearLayout entry;
         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);
 		if (dialog != null) {
 			dialog.show();
-			strings = new String[5];
+			strings = new String[9];
 			strings[0] = myContextRef.getString(R.string.dialog_sync_text_0);
 			strings[1] = myContextRef.getString(R.string.dialog_sync_text_1);
 			strings[2] = myContextRef.getString(R.string.dialog_sync_text_2);
 			strings[3] = myContextRef.getString(R.string.dialog_sync_text_3);
 			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);
-			int idx = (int) (Math.random() * ((4) + 1));
+			int idx = (int) (Math.random() * 9);
 			tv.setText(strings[idx]);
 			doProgress = true;
 		}
@@ -162,7 +166,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 	 */
 	protected void onProgressUpdate(Void...progress) {
 		if (doProgress){
-			if (millis + 300 < System.currentTimeMillis()) {
+			if (millis + 500 < System.currentTimeMillis()) {
 				millis = System.currentTimeMillis();
 				int idx = (int) (Math.random() * ((4) + 1));
 				tv.setText(strings[idx]);
@@ -181,7 +185,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 		//Open the database. f its locked, exit.
 		SQLiteDatabase db = myContextRef.openOrCreateDatabase(GM.DB_NAME, Activity.MODE_PRIVATE, null);
 		if (db.isReadOnly()){
-			Log.e("DB LOCK", "L");
+			Log.e("Db ro", "Database is locked and in read only mode. Skipping sync.");
 			return null;
 		}
 
@@ -211,7 +215,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 			String code = preferences.getString(GM.USER_CODE, "");
 			int dbVersion = preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION);
 			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
 			o = fu.getOutput().toString();
 			publishProgress();
@@ -346,7 +350,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 				prefEditor.apply();
 			}
 			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) {
 					prefEditor.putInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION + 1);
 					prefEditor.apply();

BIN
app/src/main/res/drawable/tutorial.png


BIN
app/src/main/res/drawable/tutorial_point.png


BIN
app/src/main/res/drawable/tutorial_slide.png


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

@@ -1,7 +1,9 @@
 <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">
+	android:layout_height="match_parent"
+	tools:ignore="MergeRootFrame">
 
 	<com.ivalentin.margolariak.MainLayout
 		android:id="@+id/main_layout"
@@ -16,7 +18,8 @@
 		<ScrollView
 			android:layout_width="wrap_content"
 			android:layout_height="fill_parent"
-			android:nestedScrollingEnabled="false">
+			android:nestedScrollingEnabled="false"
+			tools:ignore="UnusedAttribute">
 
 			<LinearLayout
 				android:layout_width="match_parent"
@@ -296,20 +299,61 @@
 
 	</com.ivalentin.margolariak.MainLayout>
 
-	<LinearLayout
+	<RelativeLayout
 		android:orientation="vertical"
 		android:layout_width="match_parent"
 		android:layout_height="match_parent"
 		android:background="#003377"
 		android:alpha=".85"
-		android:id="@+id/ll_tutorial"
+		android:id="@+id/rl_tutorial"
 		android:visibility="gone">
 
 		<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_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
 			android:layout_width="wrap_content"
@@ -319,7 +363,13 @@
 			android:layout_gravity="center_horizontal"
 			android:textColor="@color/input_button_color"
 			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>

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

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

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

@@ -1,5 +1,6 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@drawable/section"
@@ -24,7 +25,8 @@
             android:layout_height="match_parent"
             android:orientation="vertical"
             android:background="@drawable/entry"
-            android:padding="7dp">
+            android:padding="7dp"
+            tools:ignore="ScrollViewSize">
 
             <WebView
                 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"
     android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
+    android:layout_height="wrap_content"
     android:background="@drawable/section"
     android:orientation="vertical"
     android:paddingBottom="10dp" >
@@ -9,7 +9,6 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_alignParentTop="true"
         android:orientation="vertical"
         android:padding="7dp">
 
@@ -33,14 +32,13 @@
 
     <Button
         android:id="@+id/bt_dialog_sync_failed_close"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true"
         android:layout_margin="5dp"
         android:text="@string/dialog_sync_failed_close"
         android:background="@drawable/button_selector"
         android:textStyle="bold"
         android:textColor="@color/input_text_color"
         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
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
     <LinearLayout
         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"?>
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
     <LinearLayout
         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"?>
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
     <LinearLayout
         android:orientation="vertical"

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

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

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

@@ -1,6 +1,7 @@
 <com.ivalentin.margolariak.CustomScrollView
 	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_height="wrap_content" >
 
@@ -48,7 +49,8 @@
 					android:layout_height="match_parent"
 					android:gravity="center_horizontal"
 					android:layout_marginTop="10dp"
-					android:layout_marginBottom="10dp">
+					android:layout_marginBottom="10dp"
+					tools:ignore="UseCompoundDrawables">
 
 					<ImageView
 						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"?>
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
     <LinearLayout
         android:orientation="vertical"
@@ -87,7 +89,8 @@
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
                     android:layout_margin="6dp"
-                    android:layout_weight=".5"/>
+                    android:layout_weight=".5"
+                    tools:ignore="ButtonStyle"/>
 
                 <Button
                     android:layout_width="fill_parent"
@@ -98,7 +101,8 @@
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
                     android:layout_margin="6dp"
-                    android:layout_weight=".5"/>
+                    android:layout_weight=".5"
+                    tools:ignore="ButtonStyle"/>
             </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"?>
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:id="@+id/scrollView3"
     android:background="@color/background_app"
-    android:padding="7dp">
+    android:padding="7dp"
+    tools:ignore="Overdraw">
 
     <LinearLayout
         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"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+			  xmlns:tools="http://schemas.android.com/tools"
 			  android:layout_width="fill_parent"
 			  android:orientation="vertical"
 			  android:layout_height="fill_parent"
-			  android:background="@color/background_app">
+			  android:background="@color/background_app"
+			  tools:ignore="Overdraw">
 
 	<LinearLayout
 		android:orientation="vertical"

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

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

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

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

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

@@ -1,9 +1,11 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:background="@color/background_app"
-    android:layout_height="fill_parent">
+    android:layout_height="fill_parent"
+    tools:ignore="Overdraw">
 
     <com.ivalentin.margolariak.CustomScrollView
         android:layout_width="fill_parent"
@@ -31,7 +33,8 @@
                     android:layout_alignParentStart="true"
                     android:layout_alignParentTop="true"
                     android:text="@string/settings_notification"
-                    android:textAppearance="@android:style/TextAppearance.Large" />
+                    android:textAppearance="@android:style/TextAppearance.Large"
+                    tools:ignore="RelativeOverlap"/>
 
                 <TextView
                     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"?>
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:baselineAligned="false"
     android:orientation="horizontal"
     android:layout_width="fill_parent"
@@ -47,7 +48,8 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="end"
-            android:layout_marginTop="5dp">
+            android:layout_marginTop="5dp"
+            tools:ignore="UseCompoundDrawables">
 
             <TextView
                 android:layout_width="wrap_content"
@@ -110,7 +112,8 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="end"
-            android:layout_marginTop="5dp">
+            android:layout_marginTop="5dp"
+            tools:ignore="UseCompoundDrawables">
 
             <TextView
                 android:layout_width="wrap_content"

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

@@ -1,5 +1,6 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
@@ -39,7 +40,8 @@
         android:layout_marginLeft="15dp"
         android:layout_marginStart="15dp"
         android:layout_marginTop="5dp"
-        android:gravity="center_vertical">
+        android:gravity="center_vertical"
+        tools:ignore="UseCompoundDrawables">
 
         <ImageView
             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"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
 
 	<!-- Common strings -->
@@ -19,7 +19,10 @@
 	<string name="menu_blog">Blog</string>
 	<string name="menu_gallery">Gallery</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 -->
 	<string name="schedule_filter">Search&#8230;</string>
@@ -47,7 +50,7 @@
 	<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_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>
 
 
@@ -62,7 +65,7 @@
 	<string name="settings_about">About us</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_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_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_1">Starting up the van&#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_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_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>
 
 </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_gallery">Galeria</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>
 
 	<!-- Schedule strings -->
@@ -149,12 +152,16 @@
 	<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_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_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="settings_notification_off">No 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"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
 
 	<!-- Tag keys -->
@@ -30,6 +30,8 @@
 	<string name="menu_gallery">Galería</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>
 
 	<!-- Schedule strings -->
@@ -118,8 +120,12 @@
 	<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_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_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_upload">Subir fotos</string>
 	<string name="gallery_upload_button">Subir</string>
@@ -130,7 +136,7 @@
 	</plurals>
 	<string name="home_section_activities_future">Proximas actividades</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="lablanca_date_august">%1$s de agosto</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_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_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_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>