Ver Fonte

Merge branch 'master' into APIv1Sync

Iñigo Valentin há 9 anos atrás
pai
commit
7733c8e3d4
58 ficheiros alterados com 2521 adições e 419 exclusões
  1. 2 0
      .gitignore
  2. 51 0
      README.es-ES.md
  3. 51 0
      README.es-EU.md
  4. 29 9
      README.md
  5. 2 2
      app/build.gradle
  6. 3 3
      app/src/main/AndroidManifest.xml
  7. 0 9
      app/src/main/java/com/ivalentin/margolariak/AboutActivity.java
  8. 4 3
      app/src/main/java/com/ivalentin/margolariak/ActivityFutureLayout.java
  9. 3 3
      app/src/main/java/com/ivalentin/margolariak/ActivityLayout.java
  10. 6 10
      app/src/main/java/com/ivalentin/margolariak/ActivityPastLayout.java
  11. 8 2
      app/src/main/java/com/ivalentin/margolariak/AlbumLayout.java
  12. 1 1
      app/src/main/java/com/ivalentin/margolariak/BlogLayout.java
  13. 90 7
      app/src/main/java/com/ivalentin/margolariak/GM.java
  14. 5 5
      app/src/main/java/com/ivalentin/margolariak/HomeLayout.java
  15. 4 3
      app/src/main/java/com/ivalentin/margolariak/LablancaLayout.java
  16. 2 0
      app/src/main/java/com/ivalentin/margolariak/LablancaNoFestivalsLayout.java
  17. 80 6
      app/src/main/java/com/ivalentin/margolariak/MainActivity.java
  18. 8 4
      app/src/main/java/com/ivalentin/margolariak/PhotoLayout.java
  19. 63 53
      app/src/main/java/com/ivalentin/margolariak/PostComment.java
  20. 4 3
      app/src/main/java/com/ivalentin/margolariak/PostLayout.java
  21. 12 8
      app/src/main/java/com/ivalentin/margolariak/ScheduleLayout.java
  22. 259 1
      app/src/main/java/com/ivalentin/margolariak/SponsorActivity.java
  23. 3 3
      app/src/main/java/com/ivalentin/margolariak/Sync.java
  24. 143 0
      app/src/main/java/com/ivalentin/margolariak/UsActivity.java
  25. 2 2
      app/src/main/res/drawable/button.xml
  26. 2 2
      app/src/main/res/drawable/buttonpressed.xml
  27. 1 1
      app/src/main/res/drawable/input.xml
  28. BIN
      app/src/main/res/drawable/ul.png
  29. BIN
      app/src/main/res/drawable/us_activities.png
  30. BIN
      app/src/main/res/drawable/us_asociacion.png
  31. BIN
      app/src/main/res/drawable/us_cuadrilla.png
  32. BIN
      app/src/main/res/drawable/us_transparency.png
  33. BIN
      app/src/main/res/drawable/web.png
  34. 21 21
      app/src/main/res/layout/activity_main.xml
  35. 119 0
      app/src/main/res/layout/activity_sponsor.xml
  36. 385 0
      app/src/main/res/layout/activity_us.xml
  37. 57 34
      app/src/main/res/layout/dialog_schedule.xml
  38. 128 0
      app/src/main/res/layout/dialog_sponsor.xml
  39. 3 1
      app/src/main/res/layout/dialog_sync_failed.xml
  40. 64 0
      app/src/main/res/layout/dialog_us.xml
  41. 26 24
      app/src/main/res/layout/fragment_layout_home.xml
  42. 79 50
      app/src/main/res/layout/fragment_layout_lablanca.xml
  43. 425 27
      app/src/main/res/layout/fragment_layout_lablanca_nofestivals.xml
  44. 17 17
      app/src/main/res/layout/fragment_layout_location.xml
  45. 91 59
      app/src/main/res/layout/fragment_layout_schedule.xml
  46. 6 3
      app/src/main/res/layout/row_activity_schedule.xml
  47. 13 6
      app/src/main/res/layout/row_festival_price_day.xml
  48. 15 9
      app/src/main/res/layout/row_festival_price_pack.xml
  49. 6 2
      app/src/main/res/layout/row_schedule.xml
  50. 75 0
      app/src/main/res/layout/row_sponsor.xml
  51. 3 0
      app/src/main/res/menu/menu.xml
  52. 44 3
      app/src/main/res/values-en/strings.xml
  53. 45 4
      app/src/main/res/values-eu-rES/strings.xml
  54. 6 5
      app/src/main/res/values/color.xml
  55. 50 9
      app/src/main/res/values/strings.xml
  56. 1 1
      build.gradle
  57. 2 2
      gradle.properties
  58. 2 2
      gradle/wrapper/gradle-wrapper.properties

+ 2 - 0
.gitignore

@@ -1,6 +1,8 @@
  
 # Built application files
 /*/build/
+build/android-profile/
+projectFilesBackup/
 
 # Crashlytics configuations
 com_crashlytics_export_strings.xml

+ 51 - 0
README.es-ES.md

@@ -0,0 +1,51 @@
+---
+[Information in english](README.md) 
+[Informazioa euskaraz](README.es-EU.md)
+---
+
+
+# Aplicación de Gasteizko Margolariak para Android #
+
+Una aplicacion para dispositivos Android para miembros de [Gasteizko Margolariak](https://margolariak.com/) [Vitoria-Gasteiz](http://www.vitoria-gasteiz.org/).
+
+[![Gasteizko Margolariak en Google Play](https://margolariak.com/img/app/android.gif)](https://play.google.com/store/apps/details?id=com.ivalentin.margolariak)
+
+### Durante las Fiestas ###
+
+Hay funciones diseñadas especificamente para las Fiestas de La Blanca, y solo estarán disponibles en esas fechas.
+
+* Consulta en tu teléfono el Programa de Fiestas, encuentra actos alrededor tuyo ydescubre como llegar hasta ellos.
+* Consulta el Programa de Fiestas de Gasteizko Margolariak, detallado y con la ubicación de cada actividad...
+* ... pero, como no somos famosos por nuestra puntualidad, comprueba nuestra ubicación en tiempo real.
+
+
+### Durante el resto del año ###
+
+* Mantente informado de las actividades que organizamos durante el resto del año.
+* Recibe las ultimas noticias sobre la Cuadrilla en nuestro Blog
+* Galería de fotos de todas nuestras actividades.
+
+
+### Compatibilidad ###
+
+Requiere Android 3.0 (Honeycomb, API 11) o superior.
+
+
+### Idiomas ###
+
+* Castellano
+* Inglés
+* Euskera (parcialmente)
+
+
+### Permisos ###
+
+* UBICACION: Permite el uso del GPS para calcular la distancia a lugares y eventos.
+* ALMACENAMIENTO: Para almacenar las imagenes descargadas y no tener que descargarlas continuamente.
+
+
+### Otros dispositivos ###
+
+* ¿Eres de iPhone? [Estamos en ello!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakIOSApp) 
+* ¿Prefieres el sitio web? [No problem!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakWeb)
+

+ 51 - 0
README.es-EU.md

@@ -0,0 +1,51 @@
+---
+[Informacion en castellano](README.es-ES.md) 
+[Information in english](README.md)
+---
+
+
+# Androizko Gasteizko Margolariak aplikazioia #
+
+Una aplicacion para dispositivos Android para miembros de [Gasteizko Margolariak](https://margolariak.com/) [Vitoria-Gasteiz](http://www.vitoria-gasteiz.org/).
+
+[![Gasteizko Margolariak en Google Play](https://margolariak.com/img/app/android.gif)](https://play.google.com/store/apps/details?id=com.ivalentin.margolariak)
+
+### Durante las Fiestas ###
+
+Hay funciones diseñadas especificamente para las Fiestas de La Blanca, y solo estarán disponibles en esas fechas.
+
+* Consulta en tu teléfono el Programa de Fiestas, encuentra actos alrededor tuyo ydescubre como llegar hasta ellos.
+* Consulta el Programa de Fiestas de Gasteizko Margolariak, detallado y con la ubicación de cada actividad...
+* ... pero, como no somos famosos por nuestra puntualidad, comprueba nuestra ubicación en tiempo real.
+
+
+### Durante el resto del año ###
+
+* Mantente informado de las actividades que organizamos durante el resto del año.
+* Recibe las ultimas noticias sobre la Cuadrilla en nuestro Blog
+* Galería de fotos de todas nuestras actividades.
+
+
+### Compatibilidad ###
+
+Requiere Android 3.0 (Honeycomb, API 11) o superior.
+
+
+### Idiomas ###
+
+* Castellano
+* Inglés
+* Euskera (parcialmente)
+
+
+### Permisos ###
+
+* UBICACION: Permite el uso del GPS para calcular la distancia a lugares y eventos.
+* ALMACENAMIENTO: Para almacenar las imagenes descargadas y no tener que descargarlas continuamente.
+
+
+### Otros dispositivos ###
+
+* ¿Eres de iPhone? [Estamos en ello!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakIOSApp) 
+* ¿Prefieres el sitio web? [No problem!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakWeb)
+

+ 29 - 9
README.md

@@ -1,24 +1,30 @@
- 
-Gasteizko Margolariak Android App
-===
+---
+[Información en castellano](README.es-ES.md) 
+[Informazioa euskaraz](README.es-EU.md)
+---
 
-An Android app intended for members of <a href="http://margolariak.com/">Gasteizko Margolariak</a> in <a href="http://www.vitoria-gasteiz.org/">Vitoria-Gasteiz</a>, Spain.
 
+# Gasteizko Margolariak Android App #
+
+An Android app intended for members of [Gasteizko Margolariak](https://margolariak.com/) in [Vitoria-Gasteiz](http://www.vitoria-gasteiz.org/), Spain.
+
+[![Gasteizko Margolariak on Google Play](https://margolariak.com/img/app/android.gif)](https://play.google.com/store/apps/details?id=com.ivalentin.margolariak)
 
 ### Features during the city festivals ###
 
 This features wil be only available during the city festivals.
 
-* Check out the festival schedule, showing events all around the city, and indicating their location.
+* Check out the festival schedule, discover events all around the city, and get their location.
 * Check out the schedule for the members of Gasteizko Margolariak, indicating the location of every event and activity...
 * ... but, since we are not known for our puntuality, check out the location of Gasteizko Margolariak in real time.
+* Approximate distanc eto important event around the city.
 
 
 ### Features for the rest of the year ###
 
-* Check out and be notified of all activities organized by gasteizzko margolariak.
-* View nd comment our blog.
-* View and comment our gallery.
+* Check out and be notified of all activities organized by Gasteizko Margolariak.
+* Stay updated witho our blog.
+* Check out our photo gallery.
 
 
 ### Compatibility ###
@@ -26,7 +32,21 @@ This features wil be only available during the city festivals.
 Required Android 3.0 (Honeycomb, API level 11) or higher.
 
 
+### Languages ###
+
+* Spanish
+* English
+* Basque (mostly)
+
+
 ### Permissions ###
 
-* __ACCESS_FINE_LOCATION__: Allow the use of GPS location to indicate distance to certain events and activities.
+* LOCATION: Allow the use of GPS location to indicate distance to certain events and activities.
+* STORAGE: Required to  cache images, so they are not downloaded avery time the app is opened.
+
+
+### On other devices ###
+
+* Got an iPhone? [We are working on it!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakIOSApp) 
+* Do you prefer web pages? [No problem!](https://github.com/GasteizkoMargolariak/GasteizkoMargolariakWeb)
 

+ 2 - 2
app/build.gradle

@@ -2,11 +2,11 @@ apply plugin: 'com.android.application'
 
 android {
     compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    buildToolsVersion '25.0.0'
 
     defaultConfig {
         applicationId "com.ivalentin.margolariak"
-        minSdkVersion 12
+        minSdkVersion 14
         targetSdkVersion 23
         multiDexEnabled true
     }

+ 3 - 3
app/src/main/AndroidManifest.xml

@@ -2,8 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:tools="http://schemas.android.com/tools"
           package="com.ivalentin.margolariak"
-    android:versionCode="19"
-    android:versionName="2.0.5" >
+    android:versionCode="21"
+    android:versionName="3" >
 
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
@@ -61,8 +61,8 @@
             android:screenOrientation="portrait"
             android:label="@string/app_name">
         </activity>
-        <activity android:name=".AboutActivity"/>
         <activity android:name=".SponsorActivity"/>
+        <activity android:name=".UsActivity"/>
 
         <receiver
             android:process=":remote"

+ 0 - 9
app/src/main/java/com/ivalentin/margolariak/AboutActivity.java

@@ -1,9 +0,0 @@
-package com.ivalentin.margolariak;
-
-import android.app.Activity;
-
-/**
- * Created by seavenois on 26/09/16.
- */
-public class AboutActivity extends Activity{
-}

+ 4 - 3
app/src/main/java/com/ivalentin/margolariak/ActivityFutureLayout.java

@@ -82,7 +82,7 @@ public class ActivityFutureLayout extends Fragment implements OnMapReadyCallback
         final Cursor cursor;
 		String lang = GM.getLang();
 
-        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, date, city, price FROM activity WHERE id = " + id + ";", null);
+        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, date, city, price, permalink FROM activity WHERE id = " + id + ";", null);
         cursor.moveToFirst();
 
         //Get display elements
@@ -102,6 +102,7 @@ public class ActivityFutureLayout extends Fragment implements OnMapReadyCallback
         //Set fields
         tvTitle.setText(cursor.getString(1));
         ((MainActivity) getActivity()).setSectionTitle(cursor.getString(1));
+		((MainActivity) getActivity()).setShareLink(String.format(getString(R.string.share_with_title), cursor.getString(1)), GM.SHARE.ACTIVITIES + cursor.getString(6));
 		if (Build.VERSION.SDK_INT >= 19) {
 			wvText.setLayerType(View.LAYER_TYPE_HARDWARE, null);
 		}
@@ -110,7 +111,7 @@ public class ActivityFutureLayout extends Fragment implements OnMapReadyCallback
 		}
 		wvText.loadDataWithBaseURL(null, cursor.getString(2), "text/html", "utf-8", null);
 		//wvText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-        tvDate.setText(GM.formatDate(cursor.getString(3) + " 00:00:00", lang, false));
+        tvDate.setText(GM.formatDate(cursor.getString(3) + " 00:00:00", lang, true, false, false));
         tvPrice.setText(String.format(getString(R.string.price), cursor.getInt(5)));
         tvCity.setText(cursor.getString(4));
 
@@ -291,7 +292,7 @@ public class ActivityFutureLayout extends Fragment implements OnMapReadyCallback
 
             //Set time
             try{
-                if (cursor.getString(5).length() == 0) {
+                if (cursor.getString(5) == null || cursor.getString(5).length() == 0) {
                     tvTime.setText(timeFormat.format(dateFormat.parse(cursor.getString(4))));
                 }
                 else {

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

@@ -112,7 +112,7 @@ public class ActivityLayout extends Fragment{
 
                 //Set date
                 TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_activity_future_date);
-                tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, false));
+                tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, true, false, false));
 
                 //Set hidden id
                 TextView tvId = (TextView) entry.findViewById(R.id.tv_row_activity_future_hidden);
@@ -195,7 +195,7 @@ public class ActivityLayout extends Fragment{
                 text = Html.fromHtml(cursorPast.getString(4)).toString();
             }
             else {
-                if (cursorPast.getString(5).length() < 1) {
+                if (cursorPast.getString(5) == null || cursorPast.getString(5).length() < 1) {
                     text = Html.fromHtml(cursorPast.getString(4)).toString();
                 } else {
                     text = Html.fromHtml(cursorPast.getString(5)).toString();
@@ -206,7 +206,7 @@ public class ActivityLayout extends Fragment{
 
             //Set date
             TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_activity_past_date);
-            tvDate.setText(GM.formatDate(cursorPast.getString(1) + " 00:00:00", lang, false));
+            tvDate.setText(GM.formatDate(cursorPast.getString(1) + " 00:00:00", lang, true, true, false));
 
             //Set hidden id
             TextView tvId = (TextView) entry.findViewById(R.id.tv_row_activity_past_hidden);

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

@@ -50,7 +50,7 @@ public class ActivityPastLayout extends Fragment {
         SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
         final Cursor cursor;
         String lang = GM.getLang();
-        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, date, city, after_" + lang + " AS after FROM activity WHERE id = " + id + ";", null);
+        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, date, city, after_" + lang + " AS after, permalink FROM activity WHERE id = " + id + ";", null);
         cursor.moveToFirst();
 
         //Get display elements
@@ -75,17 +75,13 @@ public class ActivityPastLayout extends Fragment {
         //Set fields
         tvTitle.setText(cursor.getString(1));
         ((MainActivity) getActivity()).setSectionTitle(cursor.getString(1));
-        if (cursor.getString(5) != null) {
-            if (cursor.getString(5).length() < 1) {
-                wvText.loadDataWithBaseURL(null, cursor.getString(2), "text/html", "utf-8", null);
-            } else {
-                wvText.loadDataWithBaseURL(null, cursor.getString(5), "text/html", "utf-8", null);
-            }
-        }
-        else{
+        ((MainActivity) getActivity()).setShareLink(String.format(getString(R.string.share_with_title), cursor.getString(1)), GM.SHARE.ACTIVITIES + cursor.getString(6));
+        if (cursor.getString(5) == null || cursor.getString(5).length() < 1) {
             wvText.loadDataWithBaseURL(null, cursor.getString(2), "text/html", "utf-8", null);
+        } else {
+            wvText.loadDataWithBaseURL(null, cursor.getString(5), "text/html", "utf-8", null);
         }
-        tvDate.setText(GM.formatDate(cursor.getString(3) + " 00:00:00", lang, false));
+        tvDate.setText(GM.formatDate(cursor.getString(3) + " 00:00:00", lang, true, true, false));
         tvCity.setText(cursor.getString(4));
 
         //Get images

+ 8 - 2
app/src/main/java/com/ivalentin/margolariak/AlbumLayout.java

@@ -52,7 +52,7 @@ public class AlbumLayout extends Fragment {
         SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
         final Cursor cursor;
 		String lang = GM.getLang();
-        cursor = db.rawQuery("SELECT id, title_" + lang + " AS title, description_" + lang + " AS description FROM album WHERE id = " + id + ";", null);
+        cursor = db.rawQuery("SELECT id, title_" + lang + " AS title, description_" + lang + " AS description, permalink FROM album WHERE id = " + id + ";", null);
         cursor.moveToFirst();
 
         //Set album elements
@@ -67,8 +67,12 @@ public class AlbumLayout extends Fragment {
 		}
 
         tvTitle.setText(cursor.getString(1));
+		((MainActivity) getActivity()).setSectionTitle(cursor.getString(1));
+		((MainActivity) getActivity()).setShareLink(String.format(getString(R.string.share_with_title), cursor.getString(1)), GM.SHARE.GALLERY + cursor.getString(3));
+
 		final String albumName = cursor.getString(1);
-        if (cursor.getString(2).length() < 1){
+		final String albumPerm = cursor.getString(3);
+        if (cursor.getString(2) == null || cursor.getString(2).length() < 1){
             tvDescription.setVisibility(View.GONE);
         }
         else {
@@ -95,6 +99,7 @@ public class AlbumLayout extends Fragment {
 
             //Set title
             TextView tvTitleLeft = (TextView) entry.findViewById(R.id.tv_row_album_title_left);
+
 			if (imageCursor.getString(1) != null && imageCursor.getString(1).length() > 0) {
 				tvTitleLeft.setText(imageCursor.getString(1));
 			}
@@ -148,6 +153,7 @@ public class AlbumLayout extends Fragment {
 				int id = Integer.parseInt(((TextView) v.findViewById(R.id.tv_row_album_hidden_left)).getText().toString());
 				bundle.putInt("photo", id);
 				bundle.putString("albumName", albumName);
+				bundle.putString("albumPerm", albumPerm);
 				fragment.setArguments(bundle);
 
 				FragmentManager fm = AlbumLayout.this.getActivity().getFragmentManager();

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

@@ -175,7 +175,7 @@ public class BlogLayout extends Fragment{
 
             //Set date
             TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_blog_date);
-            tvDate.setText(GM.formatDate(cursor.getString(3), lang, false));
+            tvDate.setText(GM.formatDate(cursor.getString(3), lang, true, true, false));
 
             //Set hidden id
             TextView tvId = (TextView) entry.findViewById(R.id.tv_row_blog_hidden);

+ 90 - 7
app/src/main/java/com/ivalentin/margolariak/GM.java

@@ -893,6 +893,55 @@ final class GM {
 				static final String FORMAT = "json";
 			}
 		}
+
+		/**
+		 * Utilities for the COMMENT V1 API.
+		 */
+		static final class COMMENT {
+
+			/**
+			 * Path to the API.
+			 */
+			static final String PATH = "/API/v1/comment.php";
+
+			/**
+			 * Keys fotr the API parameters.
+			 */
+			static final class KEY {
+
+				/**
+				 * Key for the client identifier.
+				 */
+				static final String CLIENT = "client";
+
+				/**
+				 * Key for the user identifier.
+				 */
+				static final String USER = "user";
+
+				/**
+				 * Key for the action to perform with the API ("sync" or "version").
+				 */
+				static final String TARGET = "target";
+
+				/**
+				 * Key to indicate the format of the data for the API to send.
+				 */
+				static final String ID = "id";
+
+				/**
+				 * Key to indicate the comment's username.
+				 */
+				static final String USERNAME = "username";
+
+				/**
+				 * Key to indicate the text.
+				 */
+				static final String TEXT = "text";
+
+			}
+		}
+
 	}
 
 	/**
@@ -1124,6 +1173,17 @@ final class GM {
 		static final int ENTRY_MARGIN = 8;
 	}
 
+	/**
+	 * URLs to be shared.
+	 */
+	static final class SHARE {
+		static final String HOME = "https://www.margolariak.com";
+		static final String LABLANCA = HOME + "/lablanca/";
+		static final String ACTIVITIES = HOME + "/actividades/";
+		static final String BLOG = HOME + "/blog/";
+		static final String GALLERY = HOME + "/galeria/";
+	}
+
 	/**
 	 * Gets the language code for sql queries.
 	 * Only three values can be returned: es, eu, en.
@@ -1149,15 +1209,17 @@ final class GM {
 	/**
 	 * Formats a datetime format strings and returns a human readable date, depending on the language
 	 *
-	 * @param dateString String in a datetime format
-	 * @param lang Language (es, en, eu)
-	 * @param includeTime Also returns the hour and minutes
+	 * @param dateString String in a datetime format.
+	 * @param lang Language (es, en, eu).
+	 * @param includeDay Also returns the weekday.
+	 * @param includeYear Also returns the year.
+	 * @param includeTime Also returns the hour and minute.
 	 *
 	 * @return The fragment view
 	 *
 	 * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
 	 */
-	static String formatDate(String dateString, String lang, boolean includeTime){
+	static String formatDate(String dateString, String lang, boolean includeDay, boolean includeYear, boolean includeTime){
 
 		String output = "";
 
@@ -1192,7 +1254,14 @@ final class GM {
 				case "es":
 					dayName = dayNameEs[dayNumber];
 					monthName = monthNameEs[monthNumber];
-					output = dayName + ", " + day + " de " + monthName + " de " + year;
+					output = "";
+					if (includeDay){
+						output = dayName + ", ";
+					}
+					output = output + day + " de " + monthName;
+					if (includeYear){
+						output = output + " de " + year;
+					}
 					if (includeTime){
 						output = output + " a las " + time;
 					}
@@ -1200,7 +1269,14 @@ final class GM {
 				case "eu":
 					dayName = dayNameEu[dayNumber];
 					monthName = monthNameEu[monthNumber];
-					output = year + "ko" + monthName + " " + day + "an, " + dayName;
+					output = "";
+					if (includeYear){
+						output = year + "ko";
+					}
+					output = output + monthName + " " + day + "an";
+					if (includeDay){
+						output = output + ", " + dayName;
+					}
 					if (includeTime){
 						output = output + " " + time + "etan";
 					}
@@ -1208,7 +1284,14 @@ final class GM {
 				default:
 					dayName = dayNameEn[dayNumber];
 					monthName = monthNameEn[monthNumber];
-					output = dayName + ", " + monthName + " " + day + ", " + year;
+					output = "";
+					if (includeDay){
+						output = dayName + ", ";
+					}
+					output = output + monthName + " " + day;
+					if (includeYear){
+						output = output + ", " + year;
+					}
 					if (includeTime){
 						output = output + " " + time;
 					}

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

@@ -433,7 +433,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 
 				//Set image
 				String image = cursor.getString(1);
-				if (image.length() > 0){
+				if (image != null && image.length() > 0){
 
 					//Check if image exists
 					File f;
@@ -655,7 +655,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 
 			//Set text
 			String text;
-			if (cursor.getString(6).length() < 1) {
+			if (cursor.getString(6) == null || cursor.getString(6).length() < 1) {
 				text = Html.fromHtml(cursor.getString(4)).toString();
 			} else {
 				text = Html.fromHtml(cursor.getString(6)).toString();
@@ -666,7 +666,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 
 			//Set date
 			TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_home_activity_date);
-			tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, false));
+			tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, true, true, false));
 
 			//Set hidden id
 			TextView tvId = (TextView) entry.findViewById(R.id.tv_row_home_activity_hidden);
@@ -797,7 +797,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 
 				//Set date
 				TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_home_activity_date);
-				tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, false));
+				tvDate.setText(GM.formatDate(cursor.getString(1) + " 00:00:00", lang, true, false, false));
 
 				//Set hidden id
 				TextView tvId = (TextView) entry.findViewById(R.id.tv_row_home_activity_hidden);
@@ -916,7 +916,7 @@ public class HomeLayout extends Fragment implements LocationListener {
 
 			//Set date
 			TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_home_blog_date);
-			tvDate.setText(GM.formatDate(cursor.getString(3), lang, false));
+			tvDate.setText(GM.formatDate(cursor.getString(3), lang, true, true, false));
 
 			//Set hidden id
 			TextView tvId = (TextView) entry.findViewById(R.id.tv_row_home_blog_hidden);

+ 4 - 3
app/src/main/java/com/ivalentin/margolariak/LablancaLayout.java

@@ -77,7 +77,7 @@ public class LablancaLayout extends Fragment {
 		//Set image
 		ImageView headerImage = (ImageView) view.findViewById(R.id.iv_lablanca_header);
 		String image = cursor.getString(1);
-		if (image.length() > 0){
+		if (image != null && image.length() > 0){
 
 			//Check if image exists
 			File f;
@@ -124,7 +124,8 @@ public class LablancaLayout extends Fragment {
 
 			//Set date
 			TextView tvDate = (TextView) entry.findViewById(R.id.tv_row_festival_price_day_date);
-			DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH);
+			tvDate.setText(GM.formatDate(cursorDays.getString(0) + " 00:00:00", lang, false, false, false));
+			/*DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
 			Date date;
 			try {
 				date = format.parse(cursorDays.getString(0));
@@ -143,7 +144,7 @@ public class LablancaLayout extends Fragment {
 			}
 			catch(Exception ex){
 				Log.e("Date format error", ex.toString());
-			}
+			}*/
 
 			list.addView(entry);
 		}

+ 2 - 0
app/src/main/java/com/ivalentin/margolariak/LablancaNoFestivalsLayout.java

@@ -3,9 +3,11 @@ package com.ivalentin.margolariak;
 import android.annotation.SuppressLint;
 import android.app.Fragment;
 import android.os.Bundle;
+import android.text.Html;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.TextView;
 
 /**
  * Fragment openen for La Blanca sections while the festivals are not close.

+ 80 - 6
app/src/main/java/com/ivalentin/margolariak/MainActivity.java

@@ -77,6 +77,34 @@ public class MainActivity extends Activity {
 	 */
 	private GoogleApiClient client;
 
+	// Shareable URL
+	private String shareURL = GM.SHARE.HOME;
+	private String shareTitle = "";
+
+	/**
+	 * Sets the displayed section url and localized title.
+	 * Thy can be retrieved later with getShareLink() to share the URL.
+	 *
+	 * @param title The title of the displayed section.
+	 * @param url The URL of the current section.
+	 *
+	 * @see MainActivity#getShareLink();
+	 */
+	public void setShareLink(String title, String url){
+		shareTitle = title;
+		shareURL = url;
+	}
+
+	/**
+	 * Returns the url of the current sections and a title.
+	 * To be used with the share option.
+	 *
+	 * @return String array. Index 0 has the title of the section. Index 1 has the URL.
+	 */
+	public String[] getShareLink(){
+		return(new String[]{shareTitle, shareURL});
+	}
+
 	/**
 	 * Enables o disables the location section.
 	 *
@@ -99,7 +127,12 @@ public class MainActivity extends Activity {
 		}
 	}
 
-	//Not referenced in code.
+	/**
+	 * Opens and closes the app menu.
+	 * Not referenced in code.
+	 *
+	 * @param v Menu view.
+	 */
 	public void showMenu(View v) {
 		PopupMenu popup = new PopupMenu(this, v);
 		MenuInflater inflater = popup.getMenuInflater();
@@ -108,8 +141,11 @@ public class MainActivity extends Activity {
 		popup.getMenu().getItem(0).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
 			@Override
 			public boolean onMenuItemClick(MenuItem item) {
-				Intent intent = new Intent(MainActivity.this, AboutActivity.class);
-				startActivity(intent);
+				Intent sendIntent = new Intent();
+				sendIntent.setAction(Intent.ACTION_SEND);
+				sendIntent.putExtra(Intent.EXTRA_TEXT, getShareLink()[0] + "\n\n" + getShareLink()[1] + "\n\n");
+				sendIntent.setType("text/plain");
+				startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.share_with)));
 				return true;
 			}
 		});
@@ -117,13 +153,22 @@ public class MainActivity extends Activity {
 		popup.getMenu().getItem(1).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
 			@Override
 			public boolean onMenuItemClick(MenuItem item) {
-				Intent intent = new Intent(MainActivity.this, SponsorActivity.class);
+				Intent intent = new Intent(MainActivity.this, UsActivity.class);
 				startActivity(intent);
 				return true;
 			}
 		});
 
 		popup.getMenu().getItem(2).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+			@Override
+			public boolean onMenuItemClick(MenuItem item) {
+				Intent intent = new Intent(MainActivity.this, SponsorActivity.class);
+				startActivity(intent);
+				return true;
+			}
+		});
+
+		popup.getMenu().getItem(3).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
 			@Override
 			public boolean onMenuItemClick(MenuItem item) {
 				Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
@@ -146,6 +191,8 @@ public class MainActivity extends Activity {
 		FragmentTransaction ft = fm.beginTransaction();
 		Fragment fragment = null;
 		String title = "";
+		String shareURL = GM.SHARE.HOME;
+		String shareTitle = getString(R.string.share_home);
 		Bundle bundle = new Bundle();
 
 		//Get measures in dp
@@ -164,6 +211,8 @@ public class MainActivity extends Activity {
 			case GM.SECTION.HOME:
 				fragment = new HomeLayout();
 				title = getString(R.string.menu_home);
+				shareURL = GM.SHARE.HOME;
+				shareTitle = getString(R.string.share_home);
 				menuText[0].setTypeface(null, Typeface.BOLD);
 				menuImage[0].getLayoutParams().height = dp7;
 				break;
@@ -171,6 +220,8 @@ public class MainActivity extends Activity {
 			case GM.SECTION.LOCATION:
 				fragment = new LocationLayout();
 				title = getString(R.string.menu_location);
+				shareURL = GM.SHARE.HOME;
+				shareTitle = getString(R.string.share_home);
 				menuText[1].setTypeface(null, Typeface.BOLD);
 				menuImage[1].getLayoutParams().height = dp7;
 				break;
@@ -184,15 +235,19 @@ public class MainActivity extends Activity {
 					fragment = new LablancaNoFestivalsLayout();
 				}
 				title = getString(R.string.menu_lablanca);
+				shareURL = GM.SHARE.LABLANCA;
+				shareTitle = getString(R.string.share_lablanca);
 				menuText[2].setTypeface(null, Typeface.BOLD);
 				menuImage[2].getLayoutParams().height = dp7;
 				break;
 
 			case GM.SECTION.SCHEDULE:
 				fragment = new ScheduleLayout();
-				bundle.putInt(GM.SCHEDULE.KEY, GM.SCHEDULE.MARGOLARIAK);
+				bundle.putInt(GM.SCHEDULE.KEY, GM.SCHEDULE.CITY);
 				fragment.setArguments(bundle);
 				title = getString(R.string.menu_lablanca_schedule);
+				shareURL = GM.SHARE.LABLANCA;
+				shareTitle = getString(R.string.share_lablanca);
 				menuText[2].setTypeface(null, Typeface.BOLD);
 				menuImage[2].getLayoutParams().height = dp7;
 				break;
@@ -202,6 +257,8 @@ public class MainActivity extends Activity {
 				bundle.putInt(GM.SCHEDULE.KEY, GM.SCHEDULE.MARGOLARIAK);
 				fragment.setArguments(bundle);
 				title = getString(R.string.menu_lablanca_gm_schedule);
+				shareURL = GM.SHARE.LABLANCA;
+				shareTitle = getString(R.string.share_lablanca);
 				menuText[2].setTypeface(null, Typeface.BOLD);
 				menuImage[2].getLayoutParams().height = dp7;
 				break;
@@ -209,6 +266,8 @@ public class MainActivity extends Activity {
 			case GM.SECTION.ACTIVITIES:
 				fragment = new ActivityLayout();
 				title = getString(R.string.menu_activities);
+				shareURL = GM.SHARE.ACTIVITIES;
+				shareTitle = getString(R.string.share_activities);
 				menuText[3].setTypeface(null, Typeface.BOLD);
 				menuImage[3].getLayoutParams().height = dp7;
 				break;
@@ -216,6 +275,8 @@ public class MainActivity extends Activity {
 			case GM.SECTION.BLOG:
 				fragment = new BlogLayout();
 				title = getString(R.string.menu_blog);
+				shareURL = GM.SHARE.BLOG;
+				shareTitle = getString(R.string.share_blog);
 				menuText[4].setTypeface(null, Typeface.BOLD);
 				menuImage[4].getLayoutParams().height = dp7;
 				break;
@@ -223,6 +284,8 @@ public class MainActivity extends Activity {
 			case GM.SECTION.GALLERY:
 				fragment = new GalleryLayout();
 				title = getString(R.string.menu_blog);
+				shareURL = GM.SHARE.GALLERY;
+				shareTitle = getString(R.string.share_gallery);
 				menuText[5].setTypeface(null, Typeface.BOLD);
 				menuImage[5].getLayoutParams().height = dp7;
 				break;
@@ -230,9 +293,11 @@ public class MainActivity extends Activity {
 
 		//Replace the fragment.
 		ft.replace(R.id.activity_main_content_fragment, fragment);
-		//ft.addToBackStack(title);
+		ft.addToBackStack(title);
 		ft.commit();
 		setSectionTitle(title);
+		//Set the shareable url
+		setShareLink(shareTitle, shareURL);
 	}
 
 	/**
@@ -632,6 +697,14 @@ public class MainActivity extends Activity {
 		new Sync(this, pbSync, ivSync).execute();
 	}
 
+	/**
+	 * Asks the activity to performa a sync.
+	 * Intended to be called from any screen.
+	 */
+	public void bgSync(){
+		new Sync(this).execute();
+	}
+
 	/**
 	 * Perform an initial sync before the app can be used.
 	 * A dialog will block the UI.
@@ -672,6 +745,7 @@ public class MainActivity extends Activity {
 	public void onBackPressed() {
 		try {
 			FragmentManager fm = getFragmentManager();
+			Log.d("BACK", "StackEntryCount " + fm.getBackStackEntryCount());
 			if (fm.getBackStackEntryCount() > 1) {
 				fm.popBackStack();
 			} else {

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

@@ -37,6 +37,7 @@ public class PhotoLayout extends Fragment {
 	private View view;
 
 	private String albumName;
+	private String albumPerm;
 
 	private Integer photos[];
 	private int position;
@@ -54,6 +55,7 @@ public class PhotoLayout extends Fragment {
 		//Get bundled id
 		Bundle bundle = this.getArguments();
 		albumName = bundle.getString("albumName", "");
+		albumPerm = bundle.getString("albumPerm", "");
 		int id = bundle.getInt("photo", -1);
 		if (id == -1) {
 			Log.e("Photo error", "No such photo: " + id);
@@ -85,6 +87,9 @@ public class PhotoLayout extends Fragment {
 			}
 		});
 
+		//Set title and share link
+		((MainActivity) getActivity()).setShareLink(String.format(getString(R.string.share_with_title), albumName), GM.SHARE.GALLERY + albumPerm);
+
 		populate(id, view);
 
 		return view;
@@ -123,9 +128,8 @@ public class PhotoLayout extends Fragment {
 	 */
 	private Integer[] loadPhotos(int id){
 
-		SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
-
 		//Get album id for the photo
+		SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
 		Cursor cAlbum = db.rawQuery("SELECT album FROM photo_album WHERE photo = " + id + ";", null);
 		cAlbum.moveToFirst();
 		int album = cAlbum.getInt(0);
@@ -189,7 +193,7 @@ public class PhotoLayout extends Fragment {
 		else{
 			tvDescription.setVisibility(View.GONE);
 		}
-		tvDate.setText(GM.formatDate(cursor.getString(4), lang, true));
+		tvDate.setText(GM.formatDate(cursor.getString(4), lang, true, true, false));
 
 		//Get image
 		String image = cursor.getString(1);
@@ -244,7 +248,7 @@ public class PhotoLayout extends Fragment {
 			TextView tvUser = (TextView) entry.findViewById(R.id.tv_row_comment_user);
 			tvUser.setText(commentCursor.getString(2));
 			TextView tvCDate = (TextView) entry.findViewById(R.id.tv_row_comment_date);
-			tvCDate.setText(GM.formatDate(commentCursor.getString(1), lang, true));
+			tvCDate.setText(GM.formatDate(commentCursor.getString(1), lang, true, true, true));
 			TextView tvText = (TextView) entry.findViewById(R.id.tv_row_comment_text);
 			tvText.setText(commentCursor.getString(0));
 

+ 63 - 53
app/src/main/java/com/ivalentin/margolariak/PostComment.java

@@ -1,6 +1,7 @@
 package com.ivalentin.margolariak;
 
 import android.annotation.SuppressLint;
+import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.database.sqlite.SQLiteDatabase;
@@ -15,8 +16,11 @@ import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
-import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.util.Date;
@@ -36,7 +40,7 @@ class PostComment extends AsyncTask<String, String, Integer> {
 
     private int code = 404;
 
-    public PostComment(String type, String user, String text, String language, int id, LinearLayout form, LinearLayout list, Context context) {
+    PostComment(String type, String user, String text, String language, int id, LinearLayout form, LinearLayout list, Context context) {
         super();
         this.type = type;
         this.user = user;
@@ -75,22 +79,23 @@ class PostComment extends AsyncTask<String, String, Integer> {
         String urlParams;
         try {
 
-            urlParams = "user=" + URLEncoder.encode(user) + "&text=" + URLEncoder.encode(text);
-            switch (type){
+            urlParams = "username=" + URLEncoder.encode(user) + "&text=" + URLEncoder.encode(text);
+            urlParams = urlParams + "&id=" + id;
+            switch (type) {
                 case "blog":
-                    urlParams = urlParams + "&post=" + id;
+                    urlParams = urlParams + "&target=post";
                     break;
                 case "galeria":
-                    urlParams = urlParams + "&photo=" + id;
+                    urlParams = urlParams + "&target=photo";
                     break;
                 case "actividades":
-                    urlParams = urlParams + "&activity=" + id;
+                    urlParams = urlParams + "&target=activity";
                     break;
                 default:
                     Log.e("Comment error", "Unknown section: " + type);
                     return -1;
             }
-            switch (language){
+            switch (language) {
                 case "es":
                     urlParams = urlParams + "&lang=es";
                     break;
@@ -100,53 +105,54 @@ class PostComment extends AsyncTask<String, String, Integer> {
                 default:
                     urlParams = urlParams + "&lang=en";
             }
-            urlParams = urlParams + "&from=app&code=" + userCode;
-            byte[] postData       = urlParams.getBytes("UTF-8");
-            int    postDataLength = postData.length;
-            String request        = GM.API.SERVER + "/" + type + "/comment.php";
-            url            = new URL( request );
-            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
-            conn.setDoOutput( true );
-            conn.setInstanceFollowRedirects( false );
-            conn.setRequestMethod( "POST" );
-            conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
-            conn.setRequestProperty( "charset", "utf-8");
-            conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
-            conn.setUseCaches( false );
-            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
-            wr.write(postData);
-            conn.connect();
-
-            code = conn.getResponseCode();
-            Log.d("Comment status", "" + code);
-
-            if (code == 200){
-                //Insert into local db
-                SQLiteDatabase db = SQLiteDatabase.openDatabase(context.getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
-                String table = "";
-                String item = "";
-                switch (type){
-                    case "blog":
-                        table = "post_comment";
-                        item = "post";
-                        break;
-                    case "galeria":
-                        table = "photo_comment";
-                        item = "photo";
-                        break;
-                    case "actividades":
-                        table = "activity_comment";
-                        item = "activity";
-                        break;
-                }
-                db.execSQL("INSERT INTO " + table + " (" + item + ", text, username, lang, dtime) VALUES (" + id + ", '" + text + "', '" + user + "', '" + language + "', datetime('NOW'));");
-                db.close();
+            urlParams = urlParams + "&client=" + GM.API.CLIENT + "&user=" + userCode;
+
+            String uri = GM.API.SERVER + GM.API.COMMENT.PATH + "?" + urlParams;
+            url = new URL(uri);
+			Log.e("URI", uri);
+
+            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
+
+            code = urlConnection.getResponseCode();
+
+            switch (code) {
+                case 400:    //Client error: Bad request
+                    Log.e("COMMENT", "The server returned a 400 code (Client Error: Bad request) for the url \"" + uri + "\"");
+					return(-400);
+                case 403:    //Client error: Forbidden
+                    Log.e("COMMENT", "The server returned a 403 code (Client Error: Forbidden) for the url \"" + uri + "\"");
+					return(-403);
+                case 200:    //Success: OK
+                    Log.d("COMMENT", "The server returned a 200 code (Success: OK) for the url \"" + uri + "\".");
+					break;
+				default:
+					Log.e("COMMENT", "The server returned a " + code + " code for the url \"" + uri + "\".");
+					return(-6);
             }
 
-        } catch (Exception e) {
-            Log.e("Error posting: ", e.getMessage());
         }
-        return code;
+		catch (UnsupportedEncodingException e) {
+            Log.e("COMMENT", "Unable to post comment (UnsupportedEncodingException): " + e.toString());
+			return -2;
+        }
+		catch (ProtocolException e) {
+            Log.e("COMMENT", "Unable to post comment (ProtocolException): " + e.toString());
+			return -3;
+        }
+		catch (MalformedURLException e) {
+            Log.e("COMMENT", "Unable to post comment (MalformedURLException): " + e.toString());
+			return -4;
+        }
+		catch (IOException e) {
+            Log.e("COMMENT", "Unable to post comment (IOException): " + e.toString());
+			return -5;
+        }
+		catch (Exception e) {
+            Log.e("COMMENT", "Unable to post comment: " + e.toString());
+			return -1;
+        }
+
+		return 0;
     }
 
 
@@ -167,6 +173,10 @@ class PostComment extends AsyncTask<String, String, Integer> {
 
             //TODO: Update counter
 
+			//Perform a sync
+			((MainActivity) context).bgSync();
+
+
             //Insert comment in list
             LayoutInflater factory = LayoutInflater.from(context);
             LinearLayout entry = (LinearLayout) factory.inflate(R.layout.row_comment, null);
@@ -177,7 +187,7 @@ class PostComment extends AsyncTask<String, String, Integer> {
             Date d = new Date();
             String date = DateFormat.format("yyyy-MM-dd hh:mm:ss", d.getTime()).toString();
             TextView tvCDate = (TextView) entry.findViewById(R.id.tv_row_comment_date);
-            tvCDate.setText(GM.formatDate(date, language, true));
+            tvCDate.setText(GM.formatDate(date, language, true, true, true));
             TextView tvText = (TextView) entry.findViewById(R.id.tv_row_comment_text);
             tvText.setText(text);
 

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

@@ -60,7 +60,7 @@ public class PostLayout extends Fragment {
         SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
         final Cursor cursor;
         String lang = GM.getLang();
-        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, dtime FROM post WHERE id = " + id + ";", null);
+        cursor = db.rawQuery("SELECT id, title_" + lang+ " AS title, text_" + lang + " AS text, dtime, permalink FROM post WHERE id = " + id + ";", null);
         cursor.moveToFirst();
 
         //Get display elements
@@ -88,8 +88,9 @@ public class PostLayout extends Fragment {
         //Set fields
         tvTitle.setText(cursor.getString(1));
         ((MainActivity) getActivity()).setSectionTitle(cursor.getString(1));
+        ((MainActivity) getActivity()).setShareLink(String.format(getString(R.string.share_with_title), cursor.getString(1)), GM.SHARE.BLOG + cursor.getString(4));
         wvText.loadDataWithBaseURL(null, cursor.getString(2), "text/html", "utf-8", null);
-        tvDate.setText(GM.formatDate(cursor.getString(3), lang, true));
+        tvDate.setText(GM.formatDate(cursor.getString(3), lang, true, true, true));
 
         //Get images
         Cursor imageCursor = db.rawQuery("SELECT image, idx FROM post_image WHERE post = " + id + " ORDER BY idx LIMIT 5;", null);
@@ -131,7 +132,7 @@ public class PostLayout extends Fragment {
             TextView tvUser = (TextView) entry.findViewById(R.id.tv_row_comment_user);
             tvUser.setText(commentCursor.getString(2));
             TextView tvCDate = (TextView) entry.findViewById(R.id.tv_row_comment_date);
-            tvCDate.setText(GM.formatDate(commentCursor.getString(1), lang, true));
+            tvCDate.setText(GM.formatDate(commentCursor.getString(1), lang, true, true, true));
             TextView tvText = (TextView) entry.findViewById(R.id.tv_row_comment_text);
             tvText.setText(commentCursor.getString(0));
 

+ 12 - 8
app/src/main/java/com/ivalentin/margolariak/ScheduleLayout.java

@@ -87,8 +87,6 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 		String year = Integer.toString(calendar.get(Calendar.YEAR));
 
 
-
-
 		//Set bundle for the map
 		bund = savedInstanceState;
 		
@@ -104,14 +102,20 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 		});
 
 		//Get schedule type
+		TextView title = (TextView) view.findViewById(R.id.tv_schedule_type);
 		Bundle bundle = this.getArguments();
 		schedule = bundle.getInt(GM.SCHEDULE.KEY, GM.SCHEDULE.CITY);
 		
 		//Set the title
-		if (schedule == GM.SCHEDULE.CITY)
+		if (schedule == GM.SCHEDULE.CITY) {
 			((MainActivity) getActivity()).setSectionTitle(view.getContext().getString(R.string.menu_lablanca_schedule));
-		else
+			title.setText(R.string.menu_lablanca_schedule);
+		}
+		else{
 			((MainActivity) getActivity()).setSectionTitle(view.getContext().getString(R.string.menu_lablanca_gm_schedule));
+			title.setText(R.string.menu_lablanca_gm_schedule);
+		}
+		((MainActivity) getActivity()).setShareLink(getString(R.string.share_lablanca), GM.SHARE.LABLANCA);
 
 		//Populate the dates array
 		SQLiteDatabase db = SQLiteDatabase.openDatabase(getActivity().getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
@@ -308,7 +312,7 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 
 			//Set description
 			tvRowDesc = (TextView) entry.findViewById(R.id.tv_row_schedule_description);
-			if (cursor.getString(2).length() <= 0 || cursor.getString(2).equals(cursor.getString(1))) {
+			if (cursor.getString(2) == null || cursor.getString(2).length() <= 0 || cursor.getString(2).equals(cursor.getString(1))) {
 				tvRowDesc.setVisibility(View.GONE);
 			} else {
 				tvRowDesc.setText(cursor.getString(2));
@@ -320,7 +324,7 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 
 			//Set address
 			tvRowAddress = (TextView) entry.findViewById(R.id.tv_row_schedule_address);
-			if (cursor.getString(7).length() <= 0 || cursor.getString(7).equals(cursor.getString(6))) {
+			if (cursor.getString(7) == null || cursor.getString(7).length() <= 0 || cursor.getString(7).equals(cursor.getString(6))) {
 				tvRowAddress.setVisibility(View.GONE);
 			} else {
 				tvRowAddress.setText(cursor.getString(7));
@@ -410,7 +414,7 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 			markerName = cursor.getString(1);
 			
 			//Set description
-			if (cursor.getString(2).length() > 0) {
+			if (cursor.getString(2) != null && cursor.getString(2).length() > 0) {
 				tvDescription.setText(cursor.getString(2));
 			}
 			else{
@@ -477,7 +481,7 @@ public class ScheduleLayout extends Fragment implements OnMapReadyCallback{
 			
 			//Set time
 			try{
-				if (cursor.getString(5).length() == 0) {
+				if (cursor.getString(5) == null || cursor.getString(5).length() == 0) {
 					tvTime.setText(timeFormat.format(dateFormat.parse(cursor.getString(4))));
 				}
 				else {

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

@@ -1,9 +1,267 @@
 package com.ivalentin.margolariak;
 
+import android.annotation.SuppressLint;
 import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+
+import java.io.File;
 
 /**
- * Created by seavenois on 26/09/16.
+ * Activity that lists sponsors.
+ *
+ * @author Iñigo Valentin
+ *
+ * @see Activity
+ *
  */
 public class SponsorActivity extends Activity {
+
+	/**
+	 * Runs when the activity is created.
+	 *
+	 * @param savedInstanceState Saved state of the activity.
+	 * @see Activity#onCreate(Bundle)
+	 */
+	@SuppressLint("InflateParams")
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+
+		//Remove title bar.
+		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+		super.onCreate(savedInstanceState);
+
+		//Set layout.
+		setContentView(R.layout.activity_sponsor);
+
+		//Assign menu items
+		LinearLayout llList = (LinearLayout) findViewById(R.id.ll_sponsor_list);
+		LinearLayout entry;
+		LayoutInflater factory = LayoutInflater.from(this);
+
+		//Get data from database
+		SQLiteDatabase db = SQLiteDatabase.openDatabase(getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
+		final Cursor cursor;
+		String lang = GM.getLang();
+		cursor = db.rawQuery("SELECT id, name_" + lang + " AS name, text_" + lang + " AS text, image, address_" + lang + " AS address, link, lat, lon FROM sponsor ORDER BY RANDOM();", null);
+		cursor.moveToFirst();
+
+		while (cursor.moveToNext()) {
+			//Create a new row
+			entry = (LinearLayout) factory.inflate(R.layout.row_sponsor, null);
+
+			//Set margins TODO: I don't know why it doesnt read margins from the xml
+			LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+			int margin = (int) (9 * getResources().getDisplayMetrics().density);
+			layoutParams.setMargins(margin, margin, margin, margin);
+			entry.setLayoutParams(layoutParams);
+
+			//Set id (hidden)
+			TextView tvId = (TextView) entry.findViewById(R.id.tv_row_sponsor_id);
+			tvId.setText(cursor.getString(0));
+
+			//Set title
+			TextView tvTitle = (TextView) entry.findViewById(R.id.tv_row_sponsor_name);
+			tvTitle.setText(cursor.getString(1));
+
+			//Set text
+			TextView tvText = (TextView) entry.findViewById(R.id.tv_row_sponsor_text);
+			tvText.setText(cursor.getString(2));
+
+			//Set image
+			ImageView ivImage = (ImageView) entry.findViewById(R.id.iv_row_sponsor_image);
+			//Check if image exists
+			if (cursor.getString(3) != null && !"".equals(cursor.getString(3))) {
+				String image = cursor.getString(3);
+				File f;
+				f = new File(getFilesDir().toString() + "/img/spo/preview/" + image);
+				if (f.exists()) {
+					//If the image exists, set it.
+					Bitmap myBitmap = BitmapFactory.decodeFile(getFilesDir().toString() + "/img/spo/preview/" + image);
+					ivImage.setImageBitmap(myBitmap);
+				} else {
+					//If not, create directories and download asynchronously
+					File fpath;
+					fpath = new File(getFilesDir().toString() + "/img/spo/preview/");
+					//noinspection ResultOfMethodCallIgnored
+					fpath.mkdirs();
+					new DownloadImage(GM.API.SERVER + "/img/spo/preview/" + image, getFilesDir().toString() + "/img/spo/preview/" + image, ivImage, GM.IMG.SIZE.PREVIEW).execute();
+				}
+			}
+			else{
+				ivImage.setVisibility(View.GONE);
+			}
+
+			//Set onClick listener
+			entry.setOnClickListener(new View.OnClickListener() {
+				@Override
+				public void onClick(View v) {
+					TextView tvId = (TextView) v.findViewById(R.id.tv_row_sponsor_id);
+					int id = Integer.parseInt(tvId.getText().toString());
+					openDialog(id);
+				}
+			});
+
+
+			llList.addView(entry);
+		}
+		cursor.close();
+		db.close();
+
+	}
+
+	/**
+	 * Shows a dialog with info about the selected event.
+	 *
+	 * @param id The event id
+	 */
+	@SuppressWarnings("ConstantConditions")
+	private void openDialog(final int id){
+
+		//Create the dialog
+		final Dialog dialog = new Dialog(this);
+
+		//Set up dialog window
+		dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+		dialog.setContentView(R.layout.dialog_sponsor);
+
+		//Set the custom dialog components - text, image and button
+		TextView tvTitle = (TextView) dialog.findViewById(R.id.tv_dialog_sponsor_title);
+		TextView tvText = (TextView) dialog.findViewById(R.id.tv_dialog_sponsor_text);
+		ImageView ivImage = (ImageView) dialog.findViewById(R.id.iv_dialog_sponsor_image);
+		TextView tvUrl = (TextView) dialog.findViewById(R.id.tv_dialog_sponsor_url);
+		TextView tvAddress = (TextView) dialog.findViewById(R.id.tv_dialog_sponsor_address);
+		Button btClose = (Button) dialog.findViewById(R.id.bt_dialog_sponsor_close);
+		LinearLayout llUrl = (LinearLayout) dialog.findViewById(R.id.ll_dialog_sponsor_url);
+		LinearLayout llAddress = (LinearLayout) dialog.findViewById(R.id.ll_dialog_sponsor_address);
+
+		//Get info about the event
+		SQLiteDatabase db = SQLiteDatabase.openDatabase(getDatabasePath(GM.DB.NAME).getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
+		String lang = GM.getLang();
+		Cursor cursor = db.rawQuery("SELECT id, name_" + lang + " AS name, text_" + lang + " AS text, image, address_" + lang + " AS address, link, lat, lon FROM sponsor WHERE id = " + id + ";", null);
+		if (cursor.getCount() > 0){
+			cursor.moveToNext();
+
+			//Set title
+			tvTitle.setText(cursor.getString(1));
+
+			//Set description
+			tvText.setText(cursor.getString(2));
+
+			//Set image (if any)
+			if (cursor.getString(3) != null && !"".equals(cursor.getString(3))){
+				File f;
+				f = new File(getFilesDir().toString() + "/img/spo/preview/" + cursor.getString(3));
+				if (f.exists()){
+					//If the image exists, set it.
+					Bitmap myBitmap = BitmapFactory.decodeFile(getFilesDir().toString() + "/img/spo/preview/" + cursor.getString(3));
+					ivImage.setImageBitmap(myBitmap);
+				}
+				else {
+					//If not, create directories and download asynchronously
+					File fpath;
+					fpath = new File(getFilesDir().toString() + "/img/spo/preview/");
+					//noinspection ResultOfMethodCallIgnored
+					fpath.mkdirs();
+					new DownloadImage(GM.API.SERVER + "/img/spo/preview/" + cursor.getString(3), getFilesDir().toString() + "/img/spo/preview/" + cursor.getString(3), ivImage, GM.IMG.SIZE.PREVIEW).execute();
+				}
+				ivImage.setVisibility(View.VISIBLE);
+			}
+			else{
+				ivImage.setVisibility(View.GONE);
+			}
+
+			//Set address (if any)
+			if (cursor.getString(4) != null && !"".equals(cursor.getString(4))){
+				final String lat = cursor.getString(6);
+				final String lon = cursor.getString(7);
+				tvAddress.setText(cursor.getString(4));
+				tvAddress.setOnClickListener(new View.OnClickListener() {
+					@Override
+					public void onClick(View v) {
+						String url = "https://www.google.com/maps/preview/@" + lat + "," + lon + ",8z";
+						Intent i = new Intent(Intent.ACTION_VIEW);
+						i.setData(Uri.parse(url));
+						startActivity(i);
+					}
+				});
+			}
+			else{
+				llAddress.setVisibility(View.GONE);
+			}
+
+			//Set url (if any)
+			if (cursor.getString(5) != null && !"".equals(cursor.getString(3))){
+				final String url = cursor.getString(5);
+				tvUrl.setOnClickListener(new View.OnClickListener() {
+					@Override
+					public void onClick(View v) {
+						Intent i = new Intent(Intent.ACTION_VIEW);
+						i.setData(Uri.parse(url));
+						startActivity(i);
+					}
+				});
+			}
+			else{
+				llUrl.setVisibility(View.GONE);
+			}
+
+			//Close the db connection
+			cursor.close();
+			db.close();
+
+			//Set close button
+			btClose.setOnClickListener(new View.OnClickListener() {
+				@Override
+				public void onClick(View v) {
+					dialog.dismiss();
+				}
+			});
+
+
+
+			//Show the dialog
+			WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
+			lp.copyFrom(dialog.getWindow().getAttributes());
+			lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+			lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+			lp.gravity = Gravity.CENTER;
+			dialog.getWindow().setAttributes(lp);
+
+			//Show dialog
+			dialog.show();
+
+
+		}
+	}
+
+
+	/**
+	 * Not called from code, but referenced from activity_sponsor.xml.
+	 * Finishes the activity.
+	 *
+	 * @param v Ignored
+	 *
+	 * @see Activity#finish()
+	 */
+	public void finish(View v){
+		finish();
+	}
+
 }

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

@@ -636,11 +636,11 @@ class Sync extends AsyncTask<Void, Void, Void> {
 
 			}
 			catch (JSONException e) {
-				Log.e("SYNC", "Error parsing table '" + table + "': " + e.toString());
+				Log.e("SYNC", "Error parsing table '" + table + "' (JSONException): " + e.toString());
 				return false;
 			}
 			catch (Exception ex) {
-				Log.e("SYNC", "Error inserting data from remote table " + table + " into the local db: " + ex.toString());
+				Log.e("SYNC", "Error parsing table '" + table + "': " + ex.toString());
 				return false;
 			}
 
@@ -655,7 +655,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 				db.execSQL(queries.get(i));
 			}
 		} catch (Exception ex) {
-			Log.e("SYNC", "Error inserting data from remote table " + table + " into the local db: " + ex.toString().substring(18 * ex.toString().length() / 20));
+			Log.e("SYNC", "Error inserting data from remote table " + table + " into the local db: " + ex.toString());
 
 			//I don't put a 'return false;' here because I dont want to loose the whole table for just one row.
 		}

+ 143 - 0
app/src/main/java/com/ivalentin/margolariak/UsActivity.java

@@ -0,0 +1,143 @@
+package com.ivalentin.margolariak;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.Dialog;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.io.File;
+
+/**
+ * Activity with info about Gasteizko margolariak.
+ *
+ * @author Iñigo Valentin
+ *
+ * @see Activity
+ *
+ */
+public class UsActivity extends Activity {
+
+	/**
+	 * Runs when the activity is created.
+	 *
+	 * @param savedInstanceState Saved state of the activity.
+	 * @see Activity#onCreate(Bundle)
+	 */
+	@SuppressLint("InflateParams")
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+
+		//Remove title bar.
+		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+		super.onCreate(savedInstanceState);
+
+		//Set layout.
+		setContentView(R.layout.activity_us);
+
+		//Assign layout items
+		LinearLayout llCuadrilla = (LinearLayout) findViewById(R.id.ll_us_cuadrilla);
+		LinearLayout llAssociation = (LinearLayout) findViewById(R.id.ll_us_asociacion);
+		LinearLayout llActivities = (LinearLayout) findViewById(R.id.ll_us_activities);
+		LinearLayout llTransparency = (LinearLayout) findViewById(R.id.ll_us_transparency);
+
+		//Set onClick listeners.
+		llCuadrilla.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				openDialog(getString(R.string.us_cuadrilla), getString(R.string.us_cuadrilla_content), getResources().getDrawable(R.drawable.us_cuadrilla));
+			}
+		});
+		llAssociation.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				openDialog(getString(R.string.us_association), getString(R.string.us_association_content), getResources().getDrawable(R.drawable.us_asociacion));
+			}
+		});
+		llActivities.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				openDialog(getString(R.string.us_activities), getString(R.string.us_activities_content), getResources().getDrawable(R.drawable.us_activities));
+			}
+		});
+		llTransparency.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				openDialog(getString(R.string.us_transparency), getString(R.string.us_transparency_content), getResources().getDrawable(R.drawable.us_transparency));
+			}
+		});
+
+	}
+
+	/**
+	 * Shows a dialog with expanded info.
+	 *
+	 * @param title The event id.
+	 * @param text The dialog text.
+	 * @param img The dialog image.
+	 */
+	@SuppressWarnings("ConstantConditions")
+	private void openDialog(final String title, final String text, final Drawable img){
+
+		//Create the dialog
+		final Dialog dialog = new Dialog(this);
+
+		//Set up dialog window
+		dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+		dialog.setContentView(R.layout.dialog_us);
+
+		//Set the custom dialog components - text, image and button
+		TextView tvTitle = (TextView) dialog.findViewById(R.id.tv_dialog_us_title);
+		TextView tvText = (TextView) dialog.findViewById(R.id.tv_dialog_us_text);
+		ImageView ivImage = (ImageView) dialog.findViewById(R.id.iv_dialog_us_image);
+		Button btClose = (Button) dialog.findViewById(R.id.bt_dialog_us_close);
+
+		//Set text fields
+		tvTitle.setText(title);
+		tvText.setText(text);
+
+		//Set image
+		ivImage.setImageDrawable(img);
+
+		//Set close button
+		btClose.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				dialog.dismiss();
+			}
+		});
+
+		//Show the dialog
+		WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
+		lp.copyFrom(dialog.getWindow().getAttributes());
+		lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+		lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+		lp.gravity = Gravity.CENTER;
+		dialog.getWindow().setAttributes(lp);
+
+		//Show dialog
+		dialog.show();
+	}
+
+
+	/**
+	 * Not called from code, but referenced from activity_sponsor.xml.
+	 * Finishes the activity.
+	 *
+	 * @param v Ignored
+	 *
+	 * @see Activity#finish()
+	 */
+	public void finish(View v){
+		finish();
+	}
+
+}

+ 2 - 2
app/src/main/res/drawable/button.xml

@@ -2,9 +2,9 @@
     android:shape="rectangle" >
 
     <stroke
-        android:width="5dp"
+        android:width="3dp"
         android:color="@color/input_border" />
-    <solid android:color="@color/input_background" />
+    <solid android:color="@color/input_button_background" />
     <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp"
         android:topLeftRadius="7dp" android:topRightRadius="7dp"/>
     <padding android:left="5dp"

+ 2 - 2
app/src/main/res/drawable/buttonpressed.xml

@@ -2,9 +2,9 @@
     android:shape="rectangle" >
 
     <stroke
-        android:width="5dp"
+        android:width="3dp"
         android:color="@color/input_border" />
-    <solid android:color="@color/input_background_pressed" />
+    <solid android:color="@color/input_button_background_pressed" />
     <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp"
         android:topLeftRadius="7dp" android:topRightRadius="7dp"/>
     <padding android:left="5dp"

+ 1 - 1
app/src/main/res/drawable/input.xml

@@ -2,7 +2,7 @@
     android:shape="rectangle" >
 
     <stroke
-        android:width="5dp"
+        android:width="3dp"
         android:color="@color/input_border" />
     <solid android:color="@color/input_background" />
     <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp"

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


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


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


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


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


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


+ 21 - 21
app/src/main/res/layout/activity_main.xml

@@ -17,17 +17,17 @@
 		<!-- Button to open slider menu -->
 
 		<ImageView
-			android:contentDescription="@string/app_name"
 			android:id="@+id/iv_logo"
-			android:src="@drawable/ic_launcher"
-			android:adjustViewBounds="true"
-			android:layout_weight=".2"
-			android:padding="1dp"
-			android:layout_height="wrap_content"
 			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"
+			android:layout_gravity="center_vertical"
+			android:layout_weight=".2"
+			android:adjustViewBounds="true"
+			android:contentDescription="@string/app_name"
 			android:maxHeight="45dp"
 			android:maxWidth="45dp"
-			android:layout_gravity="center_vertical"/>
+			android:padding="1dp"
+			android:src="@drawable/ic_launcher"/>
 
 		<!-- Layout with the app title and current section -->
 
@@ -37,7 +37,7 @@
 			android:layout_gravity="center_vertical|center"
 			android:layout_weight=".8"
 			android:gravity="center"
-			android:orientation="vertical" >
+			android:orientation="vertical">
 
 			<!-- App name. Remains unchanged -->
 
@@ -46,9 +46,9 @@
 				android:layout_height="wrap_content"
 				android:gravity="center"
 				android:text="@string/app_name"
+				android:textColor="@color/menu_entry"
 				android:textSize="18sp"
-				android:textStyle="bold"
-				android:textColor="@color/menu_entry"/>
+				android:textStyle="bold"/>
 
 			<!-- Section title -->
 
@@ -58,32 +58,32 @@
 				android:layout_height="wrap_content"
 				android:gravity="center"
 				android:text="@string/menu_home"
-				android:textSize="20sp"
-				android:textColor="@color/menu_entry"/>
+				android:textColor="@color/menu_entry"
+				android:textSize="20sp"/>
 
 		</LinearLayout>
 
 		<ImageButton
+			android:id="@+id/bt_menu"
 			android:layout_width="wrap_content"
 			android:layout_height="match_parent"
-			android:src="@drawable/ic_expand"
-			android:contentDescription="@string/tutorial_menu"
-			android:onClick="showMenu"
 			android:layout_weight=".2"
-			android:id="@+id/bt_menu"
-			app:srcCompat="@drawable/ic_expand"
-			android:background="#00000000"
 			android:adjustViewBounds="false"
-			android:cropToPadding="false"/>
+			android:background="#00000000"
+			android:contentDescription="@string/tutorial_menu"
+			android:cropToPadding="false"
+			android:onClick="showMenu"
+			android:src="@drawable/ic_expand"
+			app:srcCompat="@drawable/ic_expand"/>
 
 		<ProgressBar
 			android:id="@+id/pb_sync"
 			android:layout_width="40dp"
 			android:layout_height="40dp"
 			android:layout_weight=".2"
-			android:visibility="gone"
 			android:maxHeight="40dp"
-			android:maxWidth="40dp"/>
+			android:maxWidth="40dp"
+			android:visibility="gone"/>
 
 	</LinearLayout>
 

+ 119 - 0
app/src/main/res/layout/activity_sponsor.xml

@@ -0,0 +1,119 @@
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@color/background_app">
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/background_menu"
+        android:gravity="center_vertical"
+        android:orientation="horizontal"
+        android:padding="2dp">
+
+        <ImageView
+            android:contentDescription="@string/app_name"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:id="@+id/iv_logo"
+            android:src="@drawable/ic_launcher"
+            android:adjustViewBounds="true"
+            android:layout_weight=".2"
+            android:maxHeight="45dp"
+            android:maxWidth="45dp"
+            android:padding="1dp"
+            android:layout_gravity="center_vertical"/>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical|center"
+            android:layout_weight=".8"
+            android:gravity="center"
+            android:orientation="vertical" >
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:text="@string/app_name"
+                android:contentDescription="@string/app_name"
+                android:textSize="18sp"
+                android:textStyle="bold"
+                android:textColor="@color/menu_entry"/>
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:text="@string/pop_menu_sponsors"
+                android:textSize="20sp"
+                android:textColor="@color/menu_entry"/>
+
+        </LinearLayout>
+
+        <ImageButton
+            android:layout_width="40dp"
+            android:layout_height="match_parent"
+            android:src="@android:drawable/ic_menu_revert"
+            android:onClick="finish"
+            android:contentDescription="@string/accept"
+            android:layout_weight=".2"
+            android:id="@+id/bt_back"
+            app:srcCompat="@android:drawable/ic_menu_revert"
+            android:background="#00000000"/>
+
+    </LinearLayout>
+
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/background_app"
+        >
+
+        <LinearLayout
+            android:id="@+id/ll_sponsors_section"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:background="@drawable/section"
+            android:layout_marginBottom="40dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginTop="10dp">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/pop_menu_sponsors"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
+                android:textColor="@color/section_title"/>
+
+            <LinearLayout
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:id="@+id/ll_sponsor_list"
+                android:layout_marginBottom="20dp">
+            </LinearLayout>
+
+        </LinearLayout>
+    </ScrollView>
+
+</LinearLayout>
+

+ 385 - 0
app/src/main/res/layout/activity_us.xml

@@ -0,0 +1,385 @@
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@color/background_app">
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/background_menu"
+        android:gravity="center_vertical"
+        android:orientation="horizontal"
+        android:padding="2dp">
+
+        <ImageView
+            android:contentDescription="@string/app_name"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:src="@drawable/ic_launcher"
+            android:adjustViewBounds="true"
+            android:layout_weight=".2"
+            android:maxHeight="45dp"
+            android:maxWidth="45dp"
+            android:padding="1dp"
+            android:layout_gravity="center_vertical"/>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical|center"
+            android:layout_weight=".8"
+            android:gravity="center"
+            android:orientation="vertical" >
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:text="@string/app_name"
+                android:contentDescription="@string/app_name"
+                android:textSize="18sp"
+                android:textStyle="bold"
+                android:textColor="@color/menu_entry"/>
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:text="@string/pop_menu_sponsors"
+                android:textSize="20sp"
+                android:textColor="@color/menu_entry"/>
+
+        </LinearLayout>
+
+        <ImageButton
+            android:layout_width="40dp"
+            android:layout_height="match_parent"
+            android:src="@android:drawable/ic_menu_revert"
+            android:onClick="finish"
+            android:contentDescription="@string/accept"
+            android:layout_weight=".2"
+            android:id="@+id/bt_back"
+            app:srcCompat="@android:drawable/ic_menu_revert"
+            android:background="#00000000"/>
+
+    </LinearLayout>
+
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/background_app"
+        >
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:background="@drawable/section"
+            android:layout_marginBottom="40dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginTop="10dp">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/pop_menu_sponsors"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
+                android:textColor="@color/section_title"/>
+
+            <LinearLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:tools="http://schemas.android.com/tools"
+                android:id="@+id/ll_us_cuadrilla"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/entry"
+                android:padding="7dp"
+                android:layout_margin="8dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"
+                    android:text="@string/us_cuadrilla"/>
+
+                <LinearLayout
+                    android:orientation="horizontal"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:maxWidth="110dp"
+                        android:contentDescription="@string/app_cdesc"
+                        android:minHeight="30dp"
+                        android:minWidth="30dp"
+                        android:layout_gravity="top|center_vertical"
+                        android:padding="0.5dp"
+                        android:layout_margin="3dp"
+                        android:adjustViewBounds="true"
+                        android:maxHeight="100dp"
+                        android:src="@drawable/us_cuadrilla"/>
+
+                    <LinearLayout
+                        android:orientation="vertical"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="top">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textAppearance="@android:style/TextAppearance.Medium"
+                            android:layout_margin="5dp"
+                            android:maxLines="4"
+                            android:minHeight="30dp"
+                            android:text="@string/us_cuadrilla_content"/>
+
+                        <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_weight="1"
+                            android:layout_height="40dp"
+                            android:layout_marginTop="-40dp"
+                            android:background="@drawable/gradient_v_white"
+                            android:adjustViewBounds="true"
+                            android:contentDescription="@string/empty"
+                            tools:ignore="InefficientWeight"/>
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+            <LinearLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:tools="http://schemas.android.com/tools"
+                android:id="@+id/ll_us_asociacion"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/entry"
+                android:padding="7dp"
+                android:layout_margin="8dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"
+                    android:text="@string/us_association"/>
+
+                <LinearLayout
+                    android:orientation="horizontal"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:maxWidth="110dp"
+                        android:contentDescription="@string/app_cdesc"
+                        android:minHeight="30dp"
+                        android:minWidth="30dp"
+                        android:layout_gravity="top|center_vertical"
+                        android:padding="0.5dp"
+                        android:layout_margin="3dp"
+                        android:adjustViewBounds="true"
+                        android:maxHeight="100dp"
+                        android:src="@drawable/us_asociacion"/>
+
+                    <LinearLayout
+                        android:orientation="vertical"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="top">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textAppearance="@android:style/TextAppearance.Medium"
+                            android:layout_margin="5dp"
+                            android:maxLines="4"
+                            android:minHeight="30dp"
+                            android:text="@string/us_association_content"/>
+
+                        <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_weight="1"
+                            android:layout_height="40dp"
+                            android:layout_marginTop="-40dp"
+                            android:background="@drawable/gradient_v_white"
+                            android:adjustViewBounds="true"
+                            android:contentDescription="@string/empty"
+                            tools:ignore="InefficientWeight"/>
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+            <LinearLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:tools="http://schemas.android.com/tools"
+                android:id="@+id/ll_us_activities"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/entry"
+                android:padding="7dp"
+                android:layout_margin="8dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"
+                    android:text="@string/us_activities"/>
+
+                <LinearLayout
+                    android:orientation="horizontal"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:maxWidth="110dp"
+                        android:contentDescription="@string/app_cdesc"
+                        android:minHeight="30dp"
+                        android:minWidth="30dp"
+                        android:layout_gravity="top|center_vertical"
+                        android:padding="0.5dp"
+                        android:layout_margin="3dp"
+                        android:adjustViewBounds="true"
+                        android:maxHeight="100dp"
+                        android:src="@drawable/us_activities"/>
+
+                    <LinearLayout
+                        android:orientation="vertical"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="top">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textAppearance="@android:style/TextAppearance.Medium"
+                            android:layout_margin="5dp"
+                            android:maxLines="4"
+                            android:minHeight="30dp"
+                            android:text="@string/us_activities_content"/>
+
+                        <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_weight="1"
+                            android:layout_height="40dp"
+                            android:layout_marginTop="-40dp"
+                            android:background="@drawable/gradient_v_white"
+                            android:adjustViewBounds="true"
+                            android:contentDescription="@string/empty"
+                            tools:ignore="InefficientWeight"/>
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+            <LinearLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:tools="http://schemas.android.com/tools"
+                android:id="@+id/ll_us_transparency"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/entry"
+                android:padding="7dp"
+                android:layout_margin="8dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"
+                    android:text="@string/us_transparency"/>
+
+                <LinearLayout
+                    android:orientation="horizontal"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:maxWidth="110dp"
+                        android:contentDescription="@string/app_cdesc"
+                        android:minHeight="30dp"
+                        android:minWidth="30dp"
+                        android:layout_gravity="top|center_vertical"
+                        android:padding="0.5dp"
+                        android:layout_margin="3dp"
+                        android:adjustViewBounds="true"
+                        android:maxHeight="100dp"
+                        android:src="@drawable/us_transparency"/>
+
+                    <LinearLayout
+                        android:orientation="vertical"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="top">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:textAppearance="@android:style/TextAppearance.Medium"
+                            android:layout_margin="5dp"
+                            android:maxLines="4"
+                            android:minHeight="30dp"
+                            android:text="@string/us_transparency_content"/>
+
+                        <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_weight="1"
+                            android:layout_height="40dp"
+                            android:layout_marginTop="-40dp"
+                            android:background="@drawable/gradient_v_white"
+                            android:adjustViewBounds="true"
+                            android:contentDescription="@string/empty"
+                            tools:ignore="InefficientWeight"/>
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </LinearLayout>
+    </ScrollView>
+
+</LinearLayout>
+

+ 57 - 34
app/src/main/res/layout/dialog_schedule.xml

@@ -3,16 +3,22 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
+    android:layout_marginBottom="0dp"
+    android:layout_marginEnd="0dp"
+    android:layout_marginLeft="0dp"
+    android:layout_marginRight="0dp"
+    android:layout_marginStart="0dp"
+    android:layout_marginTop="0dp"
     android:background="@drawable/section"
     android:orientation="vertical"
-    android:padding="7dp">
+    >
 
     <LinearLayout
         android:id="@+id/ll_dialog_schedule_buttons"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
-        android:orientation="horizontal" >
+        android:orientation="horizontal">
 
         <Button
             android:id="@+id/bt_schedule_close"
@@ -39,50 +45,44 @@
         android:layout_above="@id/ll_dialog_schedule_buttons"
         android:layout_alignParentTop="true"
         android:orientation="vertical"
-        android:padding="10dp" >
+        android:paddingBottom="15dp">
 
         <TextView
             android:id="@+id/tv_dialog_schedule_title"
-            android:layout_width="wrap_content"
+            android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Large"
+            android:background="@drawable/section_title"
+            android:paddingBottom="4dp"
+            android:paddingEnd="10dp"
+            android:paddingLeft="20dp"
+            android:paddingRight="10dp"
+            android:paddingStart="20dp"
+            android:paddingTop="4dp"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textColor="@color/section_title"
             android:textStyle="bold"/>
 
         <LinearLayout
-            android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
+            android:layout_margin="8dp"
             android:background="@drawable/entry"
+            android:orientation="vertical"
             android:padding="7dp">
 
-            <TextView
-                android:id="@+id/tv_dialog_schedule_description"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_margin="10dp"
-                android:textAppearance="@android:style/TextAppearance.Medium"/>
-
-            <TextView
-                android:id="@+id/tv_dialog_schedule_host"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="10dp"
-                android:layout_marginStart="5dp"
-                android:textStyle="italic"
-                android:visibility="gone"
-                android:textAppearance="@android:style/TextAppearance.Small"/>
-
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="10dp" >
+                android:layout_margin="10dp">
 
                 <TextView
                     android:id="@+id/tv_dialog_schedule_date"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textAppearance="@android:style/TextAppearance.Medium"
                     android:capitalize="sentences"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"
                     tools:ignore="Deprecated,TextViewEdits"/>
 
                 <TextView
@@ -91,15 +91,34 @@
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="10dp"
                     android:layout_marginStart="10dp"
-                    android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"/>
 
             </LinearLayout>
 
+            <TextView
+                android:id="@+id/tv_dialog_schedule_description"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:textAppearance="@android:style/TextAppearance.Medium"/>
+
+            <TextView
+                android:id="@+id/tv_dialog_schedule_host"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="15dp"
+                android:layout_marginStart="15dp"
+                android:textAppearance="@android:style/TextAppearance.Small"
+                android:textStyle="italic"
+                android:visibility="gone"/>
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_margin="10dp"
-                android:orientation="horizontal" >
+                android:layout_margin="15dp"
+                android:orientation="horizontal">
 
                 <ImageView
                     android:id="@+id/imageView1"
@@ -110,12 +129,14 @@
                     android:maxHeight="50dp"
                     android:maxWidth="50dp"
                     android:scaleType="centerInside"
-                    android:src="@drawable/pinpoint" />
+                    android:src="@drawable/pinpoint"/>
 
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:orientation="vertical" >
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginStart="10dp"
+                    android:orientation="vertical">
 
                     <TextView
                         android:id="@+id/tv_dialog_schedule_place"
@@ -127,8 +148,8 @@
                         android:id="@+id/tv_dialog_schedule_address"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:textStyle="italic"
-                        android:textAppearance="@android:style/TextAppearance.Small"/>
+                        android:textAppearance="@android:style/TextAppearance.Small"
+                        android:textStyle="italic"/>
 
                 </LinearLayout>
             </LinearLayout>
@@ -137,12 +158,14 @@
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:layout_margin="20dp"
-                android:padding="3dp" >
+                android:padding="3dp">
 
                 <com.google.android.gms.maps.MapView
                     android:id="@+id/mv_dialog_schedule_map"
                     android:layout_width="fill_parent"
-                    android:layout_height="fill_parent" >
+                    android:layout_height="fill_parent"
+                    android:background="@android:color/black"
+                    android:padding="1dp">
                 </com.google.android.gms.maps.MapView>
             </LinearLayout>
         </LinearLayout>

+ 128 - 0
app/src/main/res/layout/dialog_sponsor.xml

@@ -0,0 +1,128 @@
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/section"
+    android:paddingBottom="15dp">
+
+    <TextView
+        android:id="@+id/tv_dialog_sponsor_title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textStyle="bold"
+        android:background="@drawable/section_title"
+        android:paddingBottom="4dp"
+        android:paddingEnd="10dp"
+        android:paddingLeft="20dp"
+        android:paddingRight="10dp"
+        android:paddingStart="20dp"
+        android:paddingTop="4dp"
+        android:textColor="@color/section_title"
+        android:layout_alignParentTop="true"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="fill_parent"
+        android:orientation="vertical"
+        android:background="@drawable/entry"
+        android:layout_margin="8dp"
+        android:padding="7dp"
+        >
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:srcCompat="@drawable/photo_placeholder_thumb"
+            android:id="@+id/iv_dialog_sponsor_image"
+            android:maxHeight="140dp"
+            android:adjustViewBounds="true"/>
+
+        <TextView
+            android:id="@+id/tv_dialog_sponsor_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="7dp"
+            android:textAppearance="@android:style/TextAppearance.Medium"/>
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <LinearLayout
+                android:orientation="horizontal"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:id="@+id/ll_dialog_sponsor_url">
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:layout_marginBottom="20dp"
+                    android:layout_marginStart="15dp"
+                    android:layout_marginRight="15dp"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginEnd="15dp"
+                    android:layout_marginTop="20dp"
+                    android:adjustViewBounds="true"
+                    android:src="@drawable/web"/>
+
+                <TextView
+                    android:text="@string/sponsors_url"
+                    android:layout_height="match_parent"
+                    android:id="@+id/tv_dialog_sponsor_url"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical"
+                    android:layout_width="match_parent"
+                    android:textColor="@color/background_menu"
+                    android:textSize="16sp"
+                    android:textStyle="normal|bold"/>
+            </LinearLayout>
+
+            <LinearLayout
+                android:orientation="horizontal"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:id="@+id/ll_dialog_sponsor_address">
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:adjustViewBounds="false"
+                    android:layout_marginBottom="20dp"
+                    android:layout_marginStart="15dp"
+                    android:layout_marginRight="15dp"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginEnd="15dp"
+                    android:layout_marginTop="20dp"
+                    android:src="@drawable/pinpoint"/>
+
+                <TextView
+                    android:layout_height="match_parent"
+                    android:id="@+id/tv_dialog_sponsor_address"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical"
+                    android:layout_width="match_parent"
+                    android:textStyle="normal|bold"
+                    android:textSize="16sp"
+                    android:textColor="@color/background_menu"/>
+            </LinearLayout>
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <Button
+        android:id="@+id/bt_dialog_sponsor_close"
+        android:layout_width="match_parent"
+        android:layout_margin="5dp"
+        android:background="@drawable/button_selector"
+        android:text="@string/notification_close"
+        android:textColor="@color/input_text_color"
+        android:textStyle="bold"
+        android:layout_alignParentBottom="true"
+        android:layout_height="50dp"/>
+
+</LinearLayout>

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

@@ -4,7 +4,9 @@
     android:layout_height="wrap_content"
     android:background="@drawable/section"
     android:orientation="vertical"
-    android:layout_margin="20dp">
+    android:layout_margin="20dp"
+    android:minHeight="250dp"
+    android:minWidth="200dp">
 
     <TextView
         android:layout_width="match_parent"

+ 64 - 0
app/src/main/res/layout/dialog_us.xml

@@ -0,0 +1,64 @@
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/section"
+    android:paddingBottom="15dp">
+
+    <TextView
+        android:id="@+id/tv_dialog_us_title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textStyle="bold"
+        android:background="@drawable/section_title"
+        android:paddingBottom="4dp"
+        android:paddingEnd="10dp"
+        android:paddingLeft="20dp"
+        android:paddingRight="10dp"
+        android:paddingStart="20dp"
+        android:paddingTop="4dp"
+        android:textColor="@color/section_title"
+        android:layout_alignParentTop="true"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="fill_parent"
+        android:orientation="vertical"
+        android:background="@drawable/entry"
+        android:layout_margin="8dp"
+        android:padding="7dp"
+        >
+
+        <ImageView
+            android:id="@+id/iv_dialog_us_image"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:adjustViewBounds="true"
+            android:maxHeight="140dp"
+            android:minHeight="100dp"
+            app:srcCompat="@drawable/photo_placeholder_thumb"/>
+
+        <TextView
+            android:id="@+id/tv_dialog_us_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="7dp"
+            android:textAppearance="@android:style/TextAppearance.Medium"/>
+
+    </LinearLayout>
+
+    <Button
+        android:id="@+id/bt_dialog_us_close"
+        android:layout_width="match_parent"
+        android:layout_margin="5dp"
+        android:background="@drawable/button_selector"
+        android:text="@string/notification_close"
+        android:textColor="@color/input_text_color"
+        android:textStyle="bold"
+        android:layout_alignParentBottom="true"
+        android:layout_height="50dp"/>
+
+</LinearLayout>

+ 26 - 24
app/src/main/res/layout/fragment_layout_home.xml

@@ -85,61 +85,62 @@
 		</LinearLayout>
 
 		<LinearLayout
-			android:orientation="vertical"
+			android:id="@+id/ll_home_section_lablanca"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:background="@drawable/section"
-			android:id="@+id/ll_home_section_lablanca"
 			android:layout_margin="10dp"
+			android:background="@drawable/section"
+			android:orientation="vertical"
 			android:visibility="gone">
 
 			<TextView
 				android:layout_width="match_parent"
 				android:layout_height="wrap_content"
-				android:textAppearance="?android:attr/textAppearanceLarge"
-				android:text="@string/lablanca_title"
-				android:textStyle="bold"
-				android:textColor="@color/section_title"
+				android:background="@drawable/section_title"
 				android:paddingBottom="4dp"
 				android:paddingEnd="10dp"
 				android:paddingLeft="20dp"
 				android:paddingRight="10dp"
 				android:paddingStart="20dp"
 				android:paddingTop="4dp"
-				android:background="@drawable/section_title"/>
+				android:text="@string/lablanca_title"
+				android:textAppearance="?android:attr/textAppearanceLarge"
+				android:textColor="@color/section_title"
+				android:textStyle="bold"/>
 
 			<LinearLayout
-				android:orientation="horizontal"
 				android:layout_width="match_parent"
 				android:layout_height="match_parent"
+				android:layout_margin="8dp"
 				android:background="@drawable/entry"
-				android:padding="7dp"
-				android:layout_margin="8dp">
+				android:orientation="horizontal"
+				android:padding="7dp">
 
 				<ImageView
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
 					android:id="@+id/iv_home_section_lablanca_image"
-					android:contentDescription="@string/app_cdesc"
-					android:layout_weight=".4"
+					android:layout_width="match_parent"
+					android:layout_height="wrap_content"
 					android:layout_margin="3dp"
+					android:layout_weight=".7"
 					android:adjustViewBounds="true"
-					android:maxWidth="130dp"/>
+					android:contentDescription="@string/app_cdesc"
+					android:maxWidth="130dp"
+					android:minHeight="95dp"/>
 
 				<TextView
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
-					android:textAppearance="@android:style/TextAppearance.Medium"
 					android:id="@+id/tv_home_section_lablanca_text"
-					android:layout_weight=".6"
+					android:layout_width="match_parent"
+					android:layout_height="wrap_content"
+					android:layout_weight=".3"
+					android:maxLines="4"
 					android:padding="7dp"
-					android:maxLines="4"/>
+					android:textAppearance="@android:style/TextAppearance.Medium"/>
 
 				<ImageView
 					android:layout_width="match_parent"
-					android:layout_weight="1"
 					android:layout_height="40dp"
 					android:layout_marginTop="-40dp"
+					android:layout_weight="1"
 					android:background="@drawable/gradient_v_white"/>
 
 			</LinearLayout>
@@ -448,7 +449,7 @@
 				android:id="@+id/ll_home_section_gallery_content"
 				android:layout_width="match_parent"
 				android:layout_height="wrap_content"
-				android:layout_margin="8dp"
+				android:layout_margin="10dp"
 				android:orientation="vertical"
 				android:background="@drawable/entry"
 				android:padding="7dp">
@@ -606,7 +607,8 @@
 				android:id="@+id/ll_home_section_activities_past_content"
 				android:layout_width="match_parent"
 				android:layout_height="wrap_content"
-				android:orientation="vertical">
+				android:orientation="vertical"
+				android:layout_margin="8dp">
 
 			</LinearLayout>
 

+ 79 - 50
app/src/main/res/layout/fragment_layout_lablanca.xml

@@ -5,103 +5,120 @@
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@color/background_app"
-    android:padding="7dp"
     tools:ignore="Overdraw">
 
     <LinearLayout
-        android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingBottom="5dp">
+        android:layout_margin="10dp"
+        android:orientation="vertical"
+        >
 
         <LinearLayout
-            android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@drawable/section"
-            android:padding="7dp">
+            android:orientation="vertical">
 
             <TextView
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
                 android:text="@string/lablanca_title"
-                android:id="@+id/textView10"
-                android:textStyle="bold"/>
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textColor="@color/section_title"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"/>
 
             <LinearLayout
-                android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_margin="10dp"
                 android:background="@drawable/entry"
+                android:orientation="vertical"
                 android:padding="7dp">
 
                 <ImageView
+                    android:id="@+id/iv_lablanca_header"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:id="@+id/iv_lablanca_header"
-                    android:contentDescription="@string/app_cdesc"
+                    android:layout_gravity="center_horizontal"
                     android:layout_margin="3dp"
                     android:adjustViewBounds="true"
-                    android:layout_gravity="center_horizontal"
+                    android:contentDescription="@string/app_cdesc"
                     android:maxHeight="130dp"/>
 
                 <WebView
+                    android:id="@+id/wv_lablanca_header"
                     android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:id="@+id/wv_lablanca_header"
-                    android:padding="7dp"
                     android:layout_marginBottom="7dp"
+                    android:padding="7dp"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
                     />
             </LinearLayout>
 
         </LinearLayout>
 
         <LinearLayout
-            android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
+            android:layout_marginTop="15dp"
             android:background="@drawable/section"
-            android:padding="7dp"
-            android:layout_marginTop="15dp">
+            android:orientation="vertical">
 
             <TextView
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
                 android:text="@string/lablanca_schedule"
-                android:textStyle="bold"/>
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textColor="@color/section_title"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"/>
 
             <LinearLayout
-                android:orientation="horizontal"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_margin="10dp"
                 android:background="@drawable/entry"
+                android:orientation="horizontal"
                 android:padding="7dp">
 
                 <Button
+                    android:id="@+id/bt_lablanca_schedule_city"
                     android:layout_width="fill_parent"
                     android:layout_height="fill_parent"
-                    android:text="@string/lablanca_schedule_city"
-                    android:id="@+id/bt_lablanca_schedule_city"
+                    android:layout_margin="6dp"
+                    android:layout_weight=".5"
                     android:background="@drawable/button_selector"
+                    android:text="@string/lablanca_schedule_city"
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
-                    android:layout_margin="6dp"
-                    android:layout_weight=".5"
                     tools:ignore="ButtonStyle"/>
 
                 <Button
+                    android:id="@+id/bt_lablanca_schedule_gm"
                     android:layout_width="fill_parent"
                     android:layout_height="fill_parent"
-                    android:text="@string/lablanca_schedule_gm"
-                    android:id="@+id/bt_lablanca_schedule_gm"
+                    android:layout_margin="6dp"
+                    android:layout_weight=".5"
                     android:background="@drawable/button_selector"
+                    android:text="@string/lablanca_schedule_gm"
                     android:textColor="@color/input_button_color"
                     android:textStyle="bold"
-                    android:layout_margin="6dp"
-                    android:layout_weight=".5"
                     tools:ignore="ButtonStyle"/>
             </LinearLayout>
 
@@ -109,63 +126,75 @@
 
 
         <LinearLayout
-            android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="@drawable/section"
+            android:layout_marginBottom="20dp"
             android:layout_marginTop="12dp"
-            android:padding="7dp">
+            android:background="@drawable/section"
+            android:orientation="vertical">
 
             <TextView
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
                 android:text="@string/lablanca_prices"
-                android:textStyle="bold"/>
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textColor="@color/section_title"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"/>
 
             <LinearLayout
-                android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_margin="10dp"
                 android:background="@drawable/entry"
+                android:orientation="vertical"
                 android:padding="7dp">
 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceLarge"
+                    android:layout_marginBottom="15dp"
                     android:text="@string/lablanca_prices_days"
-                    android:layout_marginBottom="15dp"/>
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"/>
 
                 <LinearLayout
-                    android:orientation="vertical"
+                    android:id="@+id/ll_lablanca_prices_days_list"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:id="@+id/ll_lablanca_prices_days_list">
+                    android:orientation="vertical">
                 </LinearLayout>
             </LinearLayout>
 
             <LinearLayout
-                android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_margin="10dp"
                 android:background="@drawable/entry"
-                android:padding="7dp"
-                android:layout_marginTop="10dp"
-                android:layout_marginBottom="10dp">
+                android:orientation="vertical"
+                android:padding="7dp">
 
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceLarge"
                     android:text="@string/lablanca_prices_pack"
-                    android:layout_marginBottom="15dp"/>
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/entry_title"
+                    android:textStyle="bold"/>
 
                 <LinearLayout
-                    android:orientation="vertical"
+                    android:id="@+id/ll_lablanca_prices_packs_list"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:id="@+id/ll_lablanca_prices_packs_list"
+                    android:orientation="vertical"
                     />
             </LinearLayout>
 

+ 425 - 27
app/src/main/res/layout/fragment_layout_lablanca_nofestivals.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <com.ivalentin.margolariak.CustomScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
@@ -8,38 +9,435 @@
     tools:ignore="Overdraw">
 
     <LinearLayout
-        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@drawable/section"
-        android:layout_margin="10dp">
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="10dp">
 
-        <TextView
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:text="@string/lablanca_title"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:textStyle="bold"
-            tools:layout_width="match_parent"
-            android:background="@drawable/section_title"
-            android:paddingBottom="4dp"
-            android:paddingEnd="10dp"
-            android:paddingLeft="20dp"
-            android:paddingRight="10dp"
-            android:paddingStart="20dp"
-            android:paddingTop="4dp"
-            android:textColor="@color/section_title"/>
-
-        <TextView
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Medium"
-            android:text="@string/lablanca_nofestivals"
-            android:id="@+id/textView11"
-            android:background="@drawable/entry"
-            android:padding="7dp"
-            android:layout_margin="8dp"/>
+            android:background="@drawable/section"
+            android:orientation="vertical"
+            >
+
+            <TextView
+                android:id="@+id/textView4"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/section_title"
+                android:paddingBottom="4dp"
+                android:paddingEnd="10dp"
+                android:paddingLeft="20dp"
+                android:paddingRight="10dp"
+                android:paddingStart="20dp"
+                android:paddingTop="4dp"
+                android:text="@string/lablanca_title"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textColor="@color/section_title"
+                android:textStyle="bold"
+                tools:layout_width="match_parent"/>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="8dp"
+                android:background="@drawable/entry"
+                android:orientation="vertical"
+                android:padding="7dp">
+
+                <TextView
+                    android:id="@+id/tv_lablanca_nofestivals"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginBottom="15dp"
+                    android:text="@string/lablanca_nofestivals"
+                    android:textAppearance="@android:style/TextAppearance.Medium"/>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="true"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_1_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_1"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_2_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_2"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_3_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_3"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_4_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_4"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_5_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_5"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_6_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_6"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_7_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_7"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="15dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/imageView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="10dp"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginTop="5dp"
+                        android:adjustViewBounds="false"
+                        android:baselineAlignBottom="false"
+                        android:minHeight="15dp"
+                        android:minWidth="15dp"
+                        android:src="@drawable/ul"
+                        app:srcCompat="@drawable/ul"/>
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="@string/lablanca_nofestivals_8_title"
+                            android:textColor="#001133"
+                            android:textSize="20sp"
+                            android:textStyle="bold"/>
+
+                        <TextView
+                            android:id="@+id/textView3"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginStart="10dp"
+                            android:text="@string/lablanca_nofestivals_8"
+                            android:textAppearance="@android:style/TextAppearance.Medium"/>
+                    </LinearLayout>
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </LinearLayout>
+
     </LinearLayout>
 
 
+
+
 </com.ivalentin.margolariak.CustomScrollView>

+ 17 - 17
app/src/main/res/layout/fragment_layout_location.xml

@@ -2,25 +2,21 @@
 <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:orientation="vertical"
 			  tools:ignore="Overdraw">
 
 	<LinearLayout
-		android:orientation="vertical"
 		android:layout_width="match_parent"
 		android:layout_height="match_parent"
+		android:layout_margin="10dp"
 		android:background="@drawable/section"
-		android:layout_margin="10dp">
+		android:orientation="vertical">
 
 		<TextView
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:text="@string/menu_location"
-			android:textAppearance="?android:attr/textAppearanceLarge"
-			android:textStyle="bold"
-			tools:layout_width="match_parent"
 			android:background="@drawable/section_title"
 			android:paddingBottom="4dp"
 			android:paddingEnd="10dp"
@@ -28,38 +24,42 @@
 			android:paddingRight="10dp"
 			android:paddingStart="20dp"
 			android:paddingTop="4dp"
-			android:textColor="@color/section_title"/>
+			android:text="@string/menu_location"
+			android:textAppearance="?android:attr/textAppearanceLarge"
+			android:textColor="@color/section_title"
+			android:textStyle="bold"
+			tools:layout_width="match_parent"/>
 
 		<LinearLayout
-			android:orientation="vertical"
 			android:layout_width="match_parent"
 			android:layout_height="match_parent"
+			android:layout_margin="8dp"
 			android:background="@drawable/entry"
-			android:padding="7dp"
-			android:layout_margin="8dp">
+			android:orientation="vertical"
+			android:padding="7dp">
 
 			<TextView
-                android:text="@string/home_section_location_text_0"
 				android:layout_width="wrap_content"
 				android:layout_height="wrap_content"
+				android:text="@string/home_section_location_text_0"
 				android:textAppearance="?android:attr/textAppearanceMedium"
 				android:textColor="@color/entry_title"
 				android:textStyle="bold"/>
 
 			<TextView
+				android:id="@+id/tv_location_distance"
 				android:layout_width="wrap_content"
 				android:layout_height="wrap_content"
-				android:textAppearance="?android:attr/textAppearanceSmall"
-				android:id="@+id/tv_location_distance"
+				android:layout_margin="10dp"
 				android:text="@string/home_section_location_text_calculating"
-				android:layout_margin="10dp"/>
+				android:textAppearance="?android:attr/textAppearanceSmall"/>
 
 			<com.google.android.gms.maps.MapView
 				android:id="@+id/mapview"
 				android:layout_width="fill_parent"
 				android:layout_height="fill_parent"
-				android:minHeight="150dp"
-				android:layout_margin="7dp"/>
+				android:layout_margin="7dp"
+				android:minHeight="150dp"/>
 		</LinearLayout>
 
 	</LinearLayout>

+ 91 - 59
app/src/main/res/layout/fragment_layout_schedule.xml

@@ -16,84 +16,116 @@
         android:background="@drawable/section"
         android:layout_margin="7dp">
 
-        <LinearLayout
-            android:id="@+id/ll_schedule_date"
-            android:layout_width="fill_parent"
+        <TextView
+            android:id="@+id/tv_schedule_type"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="8dp" >
+            android:background="@drawable/section_title"
+            android:paddingBottom="4dp"
+            android:paddingEnd="10dp"
+            android:paddingLeft="20dp"
+            android:paddingRight="10dp"
+            android:paddingStart="20dp"
+            android:paddingTop="4dp"
+            android:text="@string/lablanca_schedule_gm"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textColor="@color/section_title"
+            android:textStyle="bold"
+            tools:layout_width="match_parent"/>
 
-            <Button
-                android:id="@+id/bt_schedule_l"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-                android:layout_weight=".8"
-                android:background="@drawable/button_selector"
-                android:text="@string/arrow_left"
-                android:textColor="@color/input_button_color"
-                android:textStyle="bold"/>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_margin="7dp"
+            android:background="@drawable/entry"
+            android:orientation="vertical"
+            android:padding="7dp">
 
             <LinearLayout
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight=".3"
-                android:gravity="center"
-                android:orientation="horizontal" >
-
-                <TextView
-                    android:id="@+id/tv_schedule_day_number"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceLarge"
-                    android:textSize="40sp" />
+                android:id="@+id/ll_schedule_date"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <Button
+                    android:id="@+id/bt_schedule_l"
+                    android:layout_width="fill_parent"
+                    android:layout_height="fill_parent"
+                    android:layout_weight=".8"
+                    android:background="@drawable/button_selector"
+                    android:text="@string/arrow_left"
+                    android:textColor="@color/input_button_color"
+                    android:textStyle="bold"/>
 
                 <LinearLayout
-                    android:layout_width="wrap_content"
+                    android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
-                    android:orientation="vertical" >
+                    android:layout_weight=".3"
+                    android:gravity="center"
+                    android:orientation="horizontal">
 
                     <TextView
-                        android:id="@+id/tv_schedule_day_title"
+                        android:id="@+id/tv_schedule_day_number"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:paddingEnd="0dp"
-                        android:paddingLeft="13dp"
-                        android:paddingRight="0dp"
-                        android:paddingStart="13dp"
-                        android:textSize="20sp"
-                        android:textStyle="italic" />
+                        android:textAppearance="?android:attr/textAppearanceLarge"
+                        android:textSize="40sp"/>
 
-                    <TextView
-                        android:id="@+id/tv_schedule_day_month"
+                    <LinearLayout
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:textAppearance="?android:attr/textAppearanceSmall" />
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/tv_schedule_day_title"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:paddingEnd="0dp"
+                            android:paddingLeft="13dp"
+                            android:paddingRight="0dp"
+                            android:paddingStart="13dp"
+                            android:textSize="20sp"
+                            android:textStyle="italic"/>
+
+                        <TextView
+                            android:id="@+id/tv_schedule_day_month"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:textAppearance="?android:attr/textAppearanceSmall"/>
+                    </LinearLayout>
                 </LinearLayout>
+
+                <Button
+                    android:id="@+id/bt_schedule_r"
+                    android:layout_width="fill_parent"
+                    android:layout_height="fill_parent"
+                    android:layout_gravity="end"
+                    android:layout_weight=".8"
+                    android:background="@drawable/button_selector"
+                    android:text="@string/arrow_right"
+                    android:textColor="@color/input_button_color"
+                    android:textStyle="bold"/>
             </LinearLayout>
 
-            <Button
-                android:id="@+id/bt_schedule_r"
+            <EditText
+                android:id="@+id/et_schedule_filter"
                 android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-                android:layout_gravity="end"
-                android:layout_weight=".8"
-                android:background="@drawable/button_selector"
-                android:text="@string/arrow_right"
-                android:textStyle="bold"
-                android:textColor="@color/input_button_color"/>
-        </LinearLayout>
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="10dp"
+                android:layout_marginLeft="10dp"
+                android:layout_marginRight="10dp"
+                android:layout_marginStart="10dp"
+                android:layout_marginTop="15dp"
+                android:layout_weight="1"
+                android:background="@drawable/input"
+                android:ems="10"
+                android:hint="@string/schedule_filter"
+                android:textColor="@color/input_text_color"
+                android:textColorHint="@color/input_hint_color">
+
+                <requestFocus/>
+            </EditText>
 
-        <EditText
-            android:id="@+id/et_schedule_filter"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:ems="10"
-            android:hint="@string/schedule_filter"
-            android:background="@drawable/input"
-            android:textColor="@color/input_text_color"
-            android:textColorHint="@color/input_hint_color">
-
-            <requestFocus />
-        </EditText>
+        </LinearLayout>
 
         <com.ivalentin.margolariak.CustomScrollView
             android:id="@+id/sv_schedule"

+ 6 - 3
app/src/main/res/layout/row_activity_schedule.xml

@@ -9,10 +9,11 @@
     <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:textAppearance="@android:style/TextAppearance.Medium"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="@color/entry_title"
+        android:textStyle="bold"
         android:id="@+id/tv_row_activity_itinerary_time"
         android:layout_weight=".8"
-        android:textStyle="bold"
         android:gravity="end" />
 
     <TextView
@@ -56,7 +57,9 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Large"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/entry_title"
+            android:textStyle="bold"
             android:id="@+id/tv_row_activity_itinerary_title" />
 
         <TextView

+ 13 - 6
app/src/main/res/layout/row_festival_price_day.xml

@@ -18,26 +18,33 @@
             android:layout_height="wrap_content">
 
             <TextView
+                android:id="@+id/tv_row_festival_price_day_date"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textAppearance="@android:style/TextAppearance.Small"
-                android:id="@+id/tv_row_festival_price_day_date"/>
+                android:textAppearance="@android:style/TextAppearance.Large"
+                android:textStyle="bold"/>
 
             <TextView
+                android:id="@+id/tv_row_festival_price_day_name"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:layout_marginLeft="5dp"
+                android:layout_marginStart="5dp"
                 android:textAppearance="@android:style/TextAppearance.Medium"
-                android:id="@+id/tv_row_festival_price_day_name"/>
+                android:textStyle="italic"/>
 
         </LinearLayout>
 
         <TextView
+            android:id="@+id/tv_row_festival_price_day_price"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Medium"
-            android:id="@+id/tv_row_festival_price_day_price"
+            android:layout_gravity="bottom"
             android:gravity="end"
-            android:layout_gravity="bottom"/>
+            android:textAppearance="@android:style/TextAppearance.Large"
+            android:textColor="@color/background_menu"
+            android:textSize="24sp"
+            android:textStyle="bold"/>
     </LinearLayout>
 
     <LinearLayout

+ 15 - 9
app/src/main/res/layout/row_festival_price_pack.xml

@@ -19,29 +19,35 @@
             android:layout_weight=".3">
 
             <TextView
+                android:id="@+id/tv_row_festival_price_pack_name"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textAppearance="@android:style/TextAppearance.Medium"
-                android:id="@+id/tv_row_festival_price_pack_name"/>
+                android:textAppearance="@android:style/TextAppearance.Large"
+                android:textStyle="bold"/>
 
             <TextView
+                android:id="@+id/tv_row_festival_price_pack_text"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textAppearance="@android:style/TextAppearance.Small"
-                android:id="@+id/tv_row_festival_price_pack_text"
-                android:layout_marginStart="10dp"/>
+                android:layout_marginLeft="5dp"
+                android:layout_marginStart="5dp"
+                android:textAppearance="@android:style/TextAppearance.Medium"
+                android:textStyle="italic"/>
 
         </LinearLayout>
 
         <TextView
+            android:id="@+id/tv_row_festival_price_pack_price"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Medium"
-            android:id="@+id/tv_row_festival_price_pack_price"
-            android:gravity="end"
             android:layout_gravity="bottom"
+            android:layout_weight=".7"
+            android:gravity="end"
             android:minWidth="70dp"
-            android:layout_weight=".7"/>
+            android:textAppearance="@android:style/TextAppearance.Large"
+            android:textColor="@color/background_menu"
+            android:textSize="24sp"
+            android:textStyle="bold"/>
     </LinearLayout>
 
     <LinearLayout

+ 6 - 2
app/src/main/res/layout/row_schedule.xml

@@ -49,7 +49,9 @@
             android:layout_alignParentTop="true"
             android:layout_toLeftOf="@id/schedule_timeline"
             android:layout_toStartOf="@id/schedule_timeline"
-            android:textAppearance="@android:style/TextAppearance.Medium"/>
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/entry_title"
+            android:textStyle="bold"/>
 
     </RelativeLayout>
 
@@ -65,7 +67,9 @@
             android:id="@+id/tv_row_schedule_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="@android:style/TextAppearance.Large" />
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/entry_title"
+            android:textStyle="bold" />
 
         <TextView
             android:id="@+id/tv_row_schedule_description"

+ 75 - 0
app/src/main/res/layout/row_sponsor.xml

@@ -0,0 +1,75 @@
+<?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:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@drawable/entry"
+    android:padding="7dp"
+    android:layout_margin="8dp">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="@color/entry_title"
+        android:textStyle="bold"
+        android:id="@+id/tv_row_sponsor_name" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_row_sponsor_id"
+        android:visibility="gone" />
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/iv_row_sponsor_image"
+            android:maxWidth="110dp"
+            android:contentDescription="@string/app_cdesc"
+            android:minHeight="30dp"
+            android:minWidth="30dp"
+            android:layout_gravity="top|center_vertical"
+            android:background="@color/image_border"
+            android:padding="0.5dp"
+            android:layout_margin="3dp"
+            android:adjustViewBounds="true"
+            android:maxHeight="100dp"/>
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/tv_row_sponsor_text"
+                android:textAppearance="@android:style/TextAppearance.Medium"
+                android:layout_margin="5dp"
+                android:maxLines="4"
+                android:minHeight="30dp"/>
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:layout_height="40dp"
+                android:layout_marginTop="-40dp"
+                android:background="@drawable/gradient_v_white"
+                android:adjustViewBounds="true"
+                android:contentDescription="@string/empty"
+                tools:ignore="InefficientWeight"/>
+
+        </LinearLayout>
+
+    </LinearLayout>
+
+</LinearLayout>

+ 3 - 0
app/src/main/res/menu/menu.xml

@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/pop_menu_share"
+        android:title="@string/pop_menu_share" />
     <item
         android:id="@+id/pop_menu_about"
         android:title="@string/pop_menu_about" />

+ 44 - 3
app/src/main/res/values-en/strings.xml

@@ -65,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"><![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_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>
 
@@ -159,11 +159,42 @@
 	<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="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"><![CDATA[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. Para ir abriendo boca, dejanos contarte algunas de las claves del plan Margolari de fiestas:]]></string>
+	<string name="lablanca_nofestivals_1_title">Planes que se adaptan a tí:</string>
+	<string name="lablanca_nofestivals_1"><![CDATA[Puedes apuntarte días sueltos, o elegir entre las varias ofertas por varios días para conseguir descuentos.]]></string>
+	<string name="lablanca_nofestivals_2_title">Dormir es de cobardes:</string>
+	<string name="lablanca_nofestivals_2"><![CDATA[Casi todos los días organizamos actividades desde la mañana, ya sean almuerzos, actividades para el público general o competiciones en los Herri Kirolak. Después solemos ir a comer juntos, antes de los paseillos, y después, siempre cenamos juntos. Y por la noche, hasta que el cuerpo aguante!]]></string>
+	<string name="lablanca_nofestivals_3_title">Especialistas en paseillos:</string>
+	<string name="lablanca_nofestivals_3"><![CDATA[A la hora de hacer paseillos, no hay quien nos gane. Con nuestra furgoneta siempre abierta a la cabeza, y la txaranga El Postín animando desde atrás, es imposible aburrirse. Y entre paseillos tampoco descansamos, siempre estamos organizando cosas: juegos, carreras, bingos, música, ida a las barracas...]]></string>
+	<string name="lablanca_nofestivals_4_title">Nos gusta comer:</string>
+	<string name="lablanca_nofestivals_4"><![CDATA[No queremos que un Margolari pase hambre. Las comidas en Gasteizko Margolariak son en restaurante, con un buen men&ú, que nos den fuerzas para aguantar el resto del día. Las cenas las hacemos bien en la calle o bien en restaurante, pero siempre con comida buena y caliente. Los mismo que los almuerzos.]]></string>
+	<string name="lablanca_nofestivals_5_title">Y beber:</string>
+	<string name="lablanca_nofestivals_5"><![CDATA[Sea cual sea tu veneno, lo tenemos: Ron, vodka, kalimotxo, cerveza, whiskey, agua, refrescos Durante los paseillos (y varias veces m&aacute;s a lo largo del d&iacute;a) en la furgoneta tendr&aacute;s barra libre de todo lo que quieras.]]></string>
+	<string name="lablanca_nofestivals_6_title">Nos apuntamos a un bombardeo:</string>
+	<string name="lablanca_nofestivals_6"><![CDATA[Carrera de Barricas, Herri Kirolak... Nunca hemos faltado a nada. Ganar, lo que es ganar, aún lo tenemos pendiente, pero lo pasamos bien. Así que ya sabes, si quieres representar a Gasteizko Margolariak, avísanos!]]></string>
+	<string name="lablanca_nofestivals_7_title">Por la ciudad, para la ciudad:</string>
+	<string name="lablanca_nofestivals_7"><![CDATA[No nos gusta mirarnos el ombligo. Aunque la mayor parte de actividades que organizamos son para los miembros de Gasteizko Margolariak, hay otras que son para todo el público. Hasta ahora hemos organizado talleres de Cesta Punta para txikis, Margotxef (un concurso de cocina infantil), visitas a residencias de ancianos...]]></string>
+	<string name="lablanca_nofestivals_8_title">Margolaris:</string>
+	<string name="lablanca_nofestivals_8"><![CDATA[Todo lo demás no sirve de nada si en una cuadrilla no hay buen ambiente. En Gasteizko Margolariak podemos presumir de gente cercana, participativa, capaz de hacer que desde el primer día ya te sientas como en casa. Además, los organizadores son gente cercana, que escucha y está siempre abierta a nuevas propuestas. Por esto, quien prueba, repite.]]></string>
 	<string name="home_section_location_text_calculating">Calculating distance…</string>
+	<string name="pop_menu_share">Share</string>
 	<string name="pop_menu_about">About us</string>
 	<string name="pop_menu_settings">Settings</string>
-	<string name="pop_menu_sponsors">-</string>
+	<string name="pop_menu_sponsors">Sponsors</string>
+	<string name="sponsors_url">Open web site</string>
+
+	<!-- Us -->
+	<string name="us_title">Nosotros</string>
+	<string name="us_association">La asociación</string>
+	<string name="us_association_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.\n\nEn 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.</string>
+	<string name="us_cuadrilla">La cuadrilla</string>
+	<string name="us_cuadrilla_content">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.\n\nDesde entonces no hemos hecho mas que crecer junto con todos los que han decidido, año tras año, apostar por nosotros.</string>
+	<string name="us_activities">Lo que hacemos</string>
+	<string name="us_activities_content">Excursiones, partidos, causas benéficas... No solo se nos ve en fiestas.\n\nCreemos que, como Cuadrilla de Blusas y Neskas, existimos por y para la ciudad, y por eso organizamos actividades durante todo el año, para todo aquel que quiera acompañarnos.</string>
+	<string name="us_transparency">Transparencia</string>
+	<string name="us_transparency_content">¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.\n\nMuchas 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.\n\nQueremos ser transparentes, y por eso, empezando en 2017, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en ti.</string>
+
+
 	<string name="preferences">Preferences</string>
 	<string name="preferences_info">Information</string>
 	<string name="preferences_info_feedback">Feedback</string>
@@ -182,4 +213,14 @@
 	<string name="preferences_sync_sync_off">Background sync is disabled</string>
 	<string name="changelog">Changelog</string>
 
+	<!-- Share menu -->
+	<string name="share">Share</string>
+	<string name="share_with">Share using…</string>
+	<string name="share_home">Gasteizko Margolariak</string>
+	<string name="share_lablanca">La Blanca - Gasteizko Margolariak</string>
+	<string name="share_activities">Activities - Gasteizko Margolariak</string>
+	<string name="share_blog">Blog - Gasteizko Margolariak</string>
+	<string name="share_gallery">Gallery - Gasteizko Margolariak</string>
+	<string name="share_with_title">%s - Gasteizko Margolariak</string>
+
 </resources>

+ 45 - 4
app/src/main/res/values-eu-rES/strings.xml

@@ -150,7 +150,7 @@
 	<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">Pribazitatea</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 últimos 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 útil para saber cuántas 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 últimos 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 útil para saber cuántas 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_0">Locating Don Margolo&#8230;</string>
 	<string name="dialog_sync_text_1">Starting up the van&#8230;</string>
@@ -162,13 +162,44 @@
 	<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="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"><![CDATA[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. Para ir abriendo boca, dejanos contarte algunas de las claves del plan Margolari de fiestas:]]></string>
+	<string name="lablanca_nofestivals_1_title">Planes que se adaptan a tí:</string>
+	<string name="lablanca_nofestivals_1"><![CDATA[Puedes apuntarte días sueltos, o elegir entre las varias ofertas por varios días para conseguir descuentos.]]></string>
+	<string name="lablanca_nofestivals_2_title">Dormir es de cobardes:</string>
+	<string name="lablanca_nofestivals_2"><![CDATA[Casi todos los días organizamos actividades desde la mañana, ya sean almuerzos, actividades para el público general o competiciones en los Herri Kirolak. Después solemos ir a comer juntos, antes de los paseillos, y después, siempre cenamos juntos. Y por la noche, hasta que el cuerpo aguante!]]></string>
+	<string name="lablanca_nofestivals_3_title">Especialistas en paseillos:</string>
+	<string name="lablanca_nofestivals_3"><![CDATA[A la hora de hacer paseillos, no hay quien nos gane. Con nuestra furgoneta siempre abierta a la cabeza, y la txaranga El Postín animando desde atrás, es imposible aburrirse. Y entre paseillos tampoco descansamos, siempre estamos organizando cosas: juegos, carreras, bingos, música, ida a las barracas...]]></string>
+	<string name="lablanca_nofestivals_4_title">Nos gusta comer:</string>
+	<string name="lablanca_nofestivals_4"><![CDATA[No queremos que un Margolari pase hambre. Las comidas en Gasteizko Margolariak son en restaurante, con un buen men&ú, que nos den fuerzas para aguantar el resto del día. Las cenas las hacemos bien en la calle o bien en restaurante, pero siempre con comida buena y caliente. Los mismo que los almuerzos.]]></string>
+	<string name="lablanca_nofestivals_5_title">Y beber:</string>
+	<string name="lablanca_nofestivals_5"><![CDATA[Sea cual sea tu veneno, lo tenemos: Ron, vodka, kalimotxo, cerveza, whiskey, agua, refrescos Durante los paseillos (y varias veces m&aacute;s a lo largo del d&iacute;a) en la furgoneta tendr&aacute;s barra libre de todo lo que quieras.]]></string>
+	<string name="lablanca_nofestivals_6_title">Nos apuntamos a un bombardeo:</string>
+	<string name="lablanca_nofestivals_6"><![CDATA[Carrera de Barricas, Herri Kirolak... Nunca hemos faltado a nada. Ganar, lo que es ganar, aún lo tenemos pendiente, pero lo pasamos bien. Así que ya sabes, si quieres representar a Gasteizko Margolariak, avísanos!]]></string>
+	<string name="lablanca_nofestivals_7_title">Por la ciudad, para la ciudad:</string>
+	<string name="lablanca_nofestivals_7"><![CDATA[No nos gusta mirarnos el ombligo. Aunque la mayor parte de actividades que organizamos son para los miembros de Gasteizko Margolariak, hay otras que son para todo el público. Hasta ahora hemos organizado talleres de Cesta Punta para txikis, Margotxef (un concurso de cocina infantil), visitas a residencias de ancianos...]]></string>
+	<string name="lablanca_nofestivals_8_title">Margolaris:</string>
+	<string name="lablanca_nofestivals_8"><![CDATA[Todo lo demás no sirve de nada si en una cuadrilla no hay buen ambiente. En Gasteizko Margolariak podemos presumir de gente cercana, participativa, capaz de hacer que desde el primer día ya te sientas como en casa. Además, los organizadores son gente cercana, que escucha y está siempre abierta a nuevas propuestas. Por esto, quien prueba, repite.]]></string>
 	<string name="settings_notification_off">No recibir notificaciones</string>
 	<string name="settings_notification_on">Recibir notificaciones</string>
 	<string name="home_section_location_text_calculating">Calculando distancia…</string>
-	<string name="pop_menu_about">About us</string>
+	<string name="pop_menu_share">Bitarte</string>
+	<string name="pop_menu_about">Gu</string>
 	<string name="pop_menu_settings">Ajustes</string>
-	<string name="pop_menu_sponsors">-</string>
+	<string name="pop_menu_sponsors">Patrocinadores</string>
+	<string name="sponsors_url">Web horria</string>
+
+	<!-- Us -->
+	<string name="us_title">Nosotros</string>
+	<string name="us_association">La asociación</string>
+	<string name="us_association_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.\n\nEn 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.</string>
+	<string name="us_cuadrilla">La cuadrilla</string>
+	<string name="us_cuadrilla_content">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.\n\nDesde entonces no hemos hecho mas que crecer junto con todos los que han decidido, año tras año, apostar por nosotros.</string>
+	<string name="us_activities">Lo que hacemos</string>
+	<string name="us_activities_content">Excursiones, partidos, causas benéficas... No solo se nos ve en fiestas.\n\nCreemos que, como Cuadrilla de Blusas y Neskas, existimos por y para la ciudad, y por eso organizamos actividades durante todo el año, para todo aquel que quiera acompañarnos.</string>
+	<string name="us_transparency">Transparencia</string>
+	<string name="us_transparency_content">¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.\n\nMuchas 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.\n\nQueremos ser transparentes, y por eso, empezando en 2017, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en ti.</string>
+
+
 	<string name="preferences_info">Informazioa</string>
 	<string name="preferences_info_feedback_summary">Send anonymous feedback to the developer</string>
 	<string name="preferences_info_source">Codigo fuente</string>
@@ -187,4 +218,14 @@
 	<string name="preferences_sync_sync_off">Sincronización desactivada</string>
 	<string name="changelog">Changelog</string>
 
+	<!-- Share menu -->
+	<string name="share">Compartir</string>
+	<string name="share_with">Enviar con…</string>
+	<string name="share_home">Gasteizko Margolariak</string>
+	<string name="share_lablanca">Andre Zuria - Gasteizko Margolariak</string>
+	<string name="share_activities">Aktibitateak - Gasteizko Margolariak</string>
+	<string name="share_blog">La Blanca - Gasteizko Margolariak</string>
+	<string name="share_gallery">Galeria - Gasteizko Margolariak</string>
+	<string name="share_with_title">%s - Gasteizko Margolariak</string>
+
 </resources>

+ 6 - 5
app/src/main/res/values/color.xml

@@ -30,12 +30,13 @@
     <color name="menu_selected">#ccccff</color>
 
     <!--Color for input fields-->
-    <color name="input_background">#223344</color>
-    <color name="input_background_pressed">#446688</color>
-    <color name="input_border">#9cd3d9</color>
-    <color name="input_text_color">#cccccc</color>
-    <color name="input_hint_color">#999999</color>
+    <color name="input_background">#ccddff</color>
+    <color name="input_border">#0078ff</color>
+    <color name="input_text_color">#0078ff</color>
+    <color name="input_hint_color">#888888</color>
+    <color name="input_button_background">#124567</color>
     <color name="input_button_color">#cccccc</color>
+    <color name="input_button_background_pressed">#446688</color>
 
 
     <color name="album_border">#111111</color>

+ 50 - 9
app/src/main/res/values/strings.xml

@@ -44,7 +44,7 @@
 	<!-- Day strings -->
 	<string name="today">Hoy</string>
 	<string name="tomorrow">Mañana</string>
-	
+
 	<!-- Blog section strings -->
 	<string name="blog_pager_previous" translatable="false">&lt;</string>
 	<string name="blog_pager_next" translatable="false">&gt;</string>
@@ -57,7 +57,7 @@
 	<string name="home_section_location_text_0">¡Gasteizko Margolariak está cerca!</string>
 	<string name="home_section_social">Síguenos</string>
 
-	
+
 	<!-- Prices dialog strings -->
 
 
@@ -67,7 +67,7 @@
 	<string name="settings_notification_on">Recibir notificaciones</string>
 	<string name="settings_notification_off">No recibir notificaciones</string>
 
-	
+
 	<!-- Social networks strings -->
 
 	<string name="social_phone" translatable="false">Phone</string>
@@ -92,11 +92,11 @@
 
 
 	<!-- Notification dialog strings -->
-	
+
 	<string name="notification_close">Cerrar</string>
 
 	<!-- Sync dialog strings -->
-	
+
 	<string name="dialog_sync_title">Sincronizando</string>
 	<string name="dialog_sync_failed_title">Error de sincronización</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>
@@ -174,7 +174,23 @@
 	<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 últimos 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 útil para saber cuántas 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>
+	<string name="lablanca_nofestivals"><![CDATA[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. Para ir abriendo boca, dejanos contarte algunas de las claves del plan Margolari de fiestas:]]></string>
+	<string name="lablanca_nofestivals_1_title">Planes que se adaptan a tí:</string>
+	<string name="lablanca_nofestivals_1"><![CDATA[Puedes apuntarte días sueltos, o elegir entre las varias ofertas por varios días para conseguir descuentos.]]></string>
+	<string name="lablanca_nofestivals_2_title">Dormir es de cobardes:</string>
+	<string name="lablanca_nofestivals_2"><![CDATA[Casi todos los días organizamos actividades desde la mañana, ya sean almuerzos, actividades para el público general o competiciones en los Herri Kirolak. Después solemos ir a comer juntos, antes de los paseillos, y después, siempre cenamos juntos. Y por la noche, hasta que el cuerpo aguante!]]></string>
+	<string name="lablanca_nofestivals_3_title">Especialistas en paseillos:</string>
+	<string name="lablanca_nofestivals_3"><![CDATA[A la hora de hacer paseillos, no hay quien nos gane. Con nuestra furgoneta siempre abierta a la cabeza, y la txaranga El Postín animando desde atrás, es imposible aburrirse. Y entre paseillos tampoco descansamos, siempre estamos organizando cosas: juegos, carreras, bingos, música, ida a las barracas...]]></string>
+	<string name="lablanca_nofestivals_4_title">Nos gusta comer:</string>
+	<string name="lablanca_nofestivals_4"><![CDATA[No queremos que un Margolari pase hambre. Las comidas en Gasteizko Margolariak son en restaurante, con un buen men&ú, que nos den fuerzas para aguantar el resto del día. Las cenas las hacemos bien en la calle o bien en restaurante, pero siempre con comida buena y caliente. Los mismo que los almuerzos.]]></string>
+	<string name="lablanca_nofestivals_5_title">Y beber:</string>
+	<string name="lablanca_nofestivals_5"><![CDATA[Sea cual sea tu veneno, lo tenemos: Ron, vodka, kalimotxo, cerveza, whiskey, agua, refrescos Durante los paseillos (y varias veces m&aacute;s a lo largo del d&iacute;a) en la furgoneta tendr&aacute;s barra libre de todo lo que quieras.]]></string>
+	<string name="lablanca_nofestivals_6_title">Nos apuntamos a un bombardeo:</string>
+	<string name="lablanca_nofestivals_6"><![CDATA[Carrera de Barricas, Herri Kirolak... Nunca hemos faltado a nada. Ganar, lo que es ganar, aún lo tenemos pendiente, pero lo pasamos bien. Así que ya sabes, si quieres representar a Gasteizko Margolariak, avísanos!]]></string>
+	<string name="lablanca_nofestivals_7_title">Por la ciudad, para la ciudad:</string>
+	<string name="lablanca_nofestivals_7"><![CDATA[No nos gusta mirarnos el ombligo. Aunque la mayor parte de actividades que organizamos son para los miembros de Gasteizko Margolariak, hay otras que son para todo el público. Hasta ahora hemos organizado talleres de Cesta Punta para txikis, Margotxef (un concurso de cocina infantil), visitas a residencias de ancianos...]]></string>
+	<string name="lablanca_nofestivals_8_title">Margolaris:</string>
+	<string name="lablanca_nofestivals_8"><![CDATA[Todo lo demás no sirve de nada si en una cuadrilla no hay buen ambiente. En Gasteizko Margolariak podemos presumir de gente cercana, participativa, capaz de hacer que desde el primer día ya te sientas como en casa. Además, los organizadores son gente cercana, que escucha y está siempre abierta a nuevas propuestas. Por esto, quien prueba, repite.]]></string>
 	<string name="settings_about_content"><![CDATA[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.<br/><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.<br/><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.<br/><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>
 
 	<!-- Misc strings -->
@@ -182,7 +198,23 @@
 
 	<!-- Pop-up menu entry strings -->
 	<string name="pop_menu_settings">Ajustes</string>
-	<string name="pop_menu_sponsors">Sponsors</string>
+	<string name="pop_menu_share">Compartir</string>
+	<string name="pop_menu_sponsors">Patrocinadores</string>
+	<string name="pop_menu_about">Sobre nosotros</string>
+
+	<!-- Sponsors -->
+	<string name="sponsors_url">Sitio web</string>
+
+	<!-- Us -->
+	<string name="us_title">Nosotros</string>
+	<string name="us_association">La asociación</string>
+	<string name="us_association_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.\n\nEn 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.</string>
+	<string name="us_cuadrilla">La cuadrilla</string>
+	<string name="us_cuadrilla_content">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.\n\nDesde entonces no hemos hecho mas que crecer junto con todos los que han decidido, año tras año, apostar por nosotros.</string>
+	<string name="us_activities">Lo que hacemos</string>
+	<string name="us_activities_content">Excursiones, partidos, causas benéficas... No solo se nos ve en fiestas.\n\nCreemos que, como Cuadrilla de Blusas y Neskas, existimos por y para la ciudad, y por eso organizamos actividades durante todo el año, para todo aquel que quiera acompañarnos.</string>
+	<string name="us_transparency">Transparencia</string>
+	<string name="us_transparency_content">¿Te preocupa saber dónde va tu dinero? En Gasteizko Margolariak queremos que estés tranquilo.\n\nMuchas 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.\n\nQueremos ser transparentes, y por eso, empezando en 2017, pondremos a tu disposición nuestras cuentas de manera online, para que sepas que cada euro se reinvierte en ti.</string>
 
 	<!--Preferences screen-->
 	<string name="preferences">Preferencias</string>
@@ -201,12 +233,21 @@
 	<string name="preferences_info_feedback">Feedback</string>
 	<string name="preferences_info_feedback_summary">Enviar información anónima al desarrollador</string>
 
+	<!-- Share menu -->
+	<string name="share">Comartir</string>
+	<string name="share_with">Enviar con…</string>
+	<string name="share_home">Gasteizko Margolariak</string>
+	<string name="share_lablanca">La Blanca - Gasteizko Margolariak</string>
+	<string name="share_activities">Actividades - Gasteizko Margolariak</string>
+	<string name="share_blog">Blog - Gasteizko Margolariak</string>
+	<string name="share_gallery">Galería - Gasteizko Margolariak</string>
+	<string name="share_with_title">%s - Gasteizko Margolariak</string>
+
 	<string name="eur" translatable="false">€</string>
 	<string name="Kb" translatable="false"> Kb</string>
 	<string name="Mb" translatable="false"> Mb</string>
-	<string name="pop_menu_about">Sobre nosotros</string>
 	<string name="preferences_info_source">Código fuente</string>
 	<string name="changelog">Changelog</string>
-	<string name="empty" translatable="false"></string>
+	<string name="empty" translatable="false"> </string>
 
 </resources>

+ 1 - 1
build.gradle

@@ -4,7 +4,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.2.2'
+        classpath 'com.android.tools.build:gradle:2.3.0'
     }
 }
 

+ 2 - 2
gradle.properties

@@ -1,4 +1,4 @@
 org.gradle.daemon=true
-org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx2560m -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
 org.gradle.parallel=true
-org.gradle.configureondemand=true
+org.gradle.configureondemand=true

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Sun Oct 09 00:49:43 CEST 2016
+#Sat Apr 01 22:26:43 CEST 2017
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip