diff --git b/.gitignore a/.gitignore new file mode 100644 index 0000000..603b140 --- /dev/null +++ a/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git b/.idea/codeStyles/Project.xml a/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..88ea3aa --- /dev/null +++ a/.idea/codeStyles/Project.xml @@ -0,0 +1,122 @@ + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+ + +
+
\ No newline at end of file diff --git b/.idea/codeStyles/codeStyleConfig.xml a/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ a/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git b/.idea/gradle.xml a/.idea/gradle.xml new file mode 100644 index 0000000..5cd135a --- /dev/null +++ a/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git b/.idea/misc.xml a/.idea/misc.xml new file mode 100644 index 0000000..37a7509 --- /dev/null +++ a/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git b/.idea/runConfigurations.xml a/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ a/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git b/app/.gitignore a/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ a/app/.gitignore @@ -0,0 +1 @@ +/build diff --git b/app/build.gradle a/app/build.gradle new file mode 100644 index 0000000..b756964 --- /dev/null +++ a/app/build.gradle @@ -0,0 +1,52 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.3" + + defaultConfig { + applicationId "com.example.pruebamaps" + minSdkVersion 16 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.google.android.gms:play-services-maps:17.0.0' + implementation 'com.google.android.gms:play-services-location:17.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + //SliderInicio + implementation 'androidx.viewpager2:viewpager2:1.0.0-rc01' + //Api + implementation 'com.squareup.retrofit2:retrofit:2.4.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + //RecyclerView + implementation 'androidx.recyclerview:recyclerview:1.1.0' + //HTTP + implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' + implementation 'com.google.okhttp:okhttp:20120626' + implementation 'com.squareup.okio:okio:2.6.0' +} diff --git b/app/proguard-rules.pro a/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ a/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git b/app/src/androidTest/java/com/example/pruebamaps/ExampleInstrumentedTest.kt a/app/src/androidTest/java/com/example/pruebamaps/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..ab57bc9 --- /dev/null +++ a/app/src/androidTest/java/com/example/pruebamaps/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.pruebamaps + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.example.pruebamaps", appContext.packageName) + } +} diff --git b/app/src/debug/res/values/google_maps_api.xml a/app/src/debug/res/values/google_maps_api.xml new file mode 100644 index 0000000..5d92725 --- /dev/null +++ a/app/src/debug/res/values/google_maps_api.xml @@ -0,0 +1,24 @@ + + + AIzaSyCDCQFseYL7K7okR_YL7lmh2SCRct9YiiM + diff --git b/app/src/main/AndroidManifest.xml a/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1bc9baf --- /dev/null +++ a/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git b/app/src/main/ic_indicadoractive-playstore.png a/app/src/main/ic_indicadoractive-playstore.png new file mode 100644 index 0000000..004193b Binary files /dev/null and a/app/src/main/ic_indicadoractive-playstore.png differ diff --git b/app/src/main/java/com/example/pruebamaps/Menu/ApiMarker.kt a/app/src/main/java/com/example/pruebamaps/Menu/ApiMarker.kt new file mode 100644 index 0000000..b11fc7a --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Menu/ApiMarker.kt @@ -0,0 +1,28 @@ +package com.example.pruebamaps.Menu +import okhttp3.logging.HttpLoggingInterceptor +import okhttp3.OkHttpClient +import retrofit2.Call +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.http.GET + +interface ApiMarker { + + companion object{ + val instance:MarcadorApi by lazy{ + + val builder_pedido = Retrofit.Builder() + .baseUrl("https://productospy.org/api/vendors") + .addConverterFactory(GsonConverterFactory.create()) + + val client = OkHttpClient.Builder() + + client.addInterceptor(HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BODY + }) + + builder_pedido.client(client.build()) + builder_pedido.build().create(MarcadorApi::class.java) + } + } +} \ No newline at end of file diff --git b/app/src/main/java/com/example/pruebamaps/Menu/Coordenadas.kt a/app/src/main/java/com/example/pruebamaps/Menu/Coordenadas.kt new file mode 100644 index 0000000..65acfeb --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Menu/Coordenadas.kt @@ -0,0 +1,8 @@ +package com.example.pruebamaps.Menu +data class Coordenadas (val type: String, val features: List) +data class Feature (val type: FeatureType, val geometry: Geometry, val properties: Properties) +data class Geometry (val type: GeometryType, val coordinates: List) +enum class GeometryType { Point } +data class Properties (val nombre: String, val contacto: String, val comentarios: String) +data class Productos (val product_name: String, val product_type: String) +enum class FeatureType { Feature } \ No newline at end of file diff --git b/app/src/main/java/com/example/pruebamaps/Menu/MarcadorApi.kt a/app/src/main/java/com/example/pruebamaps/Menu/MarcadorApi.kt new file mode 100644 index 0000000..38cc131 --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Menu/MarcadorApi.kt @@ -0,0 +1,55 @@ +package com.example.pruebamaps.Menu + +import android.icu.util.TimeUnit +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Call +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.http.GET +import retrofit2.http.Path +import retrofit2.http.Query +import javax.xml.datatype.DatatypeConstants.MINUTES + +interface MarcadorApi { + + + @GET("?in_bbox") + fun getMarker( + @Query("limit") limit : Int, + @Query("offset") offset : Int + ): Call + + + companion object { + + val stackClient by lazy { MarcadorApi.invoke("https://productospy.org/api/vendors/") } + + + private val loggingInterceptor = HttpLoggingInterceptor().apply { + this.level = HttpLoggingInterceptor.Level.BODY + } + + operator fun invoke(baseUrl: String): MarcadorApi { + val client = OkHttpClient.Builder().apply { + /**addNetworkInterceptor(StethoInterceptor()) */ + addNetworkInterceptor(loggingInterceptor) + connectTimeout(10, java.util.concurrent.TimeUnit.MINUTES) + readTimeout(10, java.util.concurrent.TimeUnit.MINUTES) + writeTimeout(10, java.util.concurrent.TimeUnit.MINUTES) + }.build() + + return Retrofit.Builder() + .client(client) + .baseUrl(baseUrl) +// .addCallAdapterFactory(CoroutineCallAdapterFactory()) + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(MarcadorApi::class.java) + } + } + + + + +} \ No newline at end of file diff --git b/app/src/main/java/com/example/pruebamaps/Menu/Principal.kt a/app/src/main/java/com/example/pruebamaps/Menu/Principal.kt new file mode 100644 index 0000000..0917956 --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Menu/Principal.kt @@ -0,0 +1,138 @@ +package com.example.pruebamaps.Menu + +import android.content.pm.PackageManager +import android.location.Location +import android.os.Build +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.widget.Toast +import androidx.annotation.RequiresApi +import androidx.core.app.ActivityCompat +import com.example.pruebamaps.R +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationServices + +import com.google.android.gms.maps.CameraUpdateFactory +import com.google.android.gms.maps.GoogleMap +import com.google.android.gms.maps.OnMapReadyCallback +import com.google.android.gms.maps.SupportMapFragment +import com.google.android.gms.maps.model.BitmapDescriptorFactory +import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.maps.model.Marker +import com.google.android.gms.maps.model.MarkerOptions +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +class Principal : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener { + + private lateinit var fusedLocationClient : FusedLocationProviderClient + + private lateinit var lastLocation : Location + + companion object { + private const val LOCATION_PERMISSION_REQUEST_CODE = 1 + } + + + override fun onMarkerClick(p0: Marker?) = false + private lateinit var map: GoogleMap + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_principal) + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + val mapFragment = supportFragmentManager + .findFragmentById(R.id.map) as SupportMapFragment + mapFragment.getMapAsync(this) + fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) + } + + /** + * Manipulates the map once available. + * This callback is triggered when the map is ready to be used. + * This is where we can add markers or lines, add listeners or move the camera. In this case, + * we just add a marker near Sydney, Australia. + * If Google Play services is not installed on the device, the user will be prompted to install + * it inside the SupportMapFragment. This method will only be triggered once the user has + * installed Google Play services and returned to the app. + */ + override fun onMapReady(googleMap: GoogleMap) { + map = googleMap + + + + + map.setOnMarkerClickListener(this) + map.uiSettings.isZoomControlsEnabled = true + MarcadorApi.stackClient.getMarker(15, 0).enqueue( + object: Callback { + override fun onFailure(call: Call, t: Throwable) { + t.printStackTrace() + } + + @RequiresApi(Build.VERSION_CODES.O) + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val listaobjetos = response.body() + val objetosmarkers = listaobjetos!!.features + + for( item in objetosmarkers.indices ){ + + var name=listaobjetos.features[item].properties.nombre + var contacto=listaobjetos.features[item].properties.contacto + var comentarios=listaobjetos.features[item].properties.comentarios + var lat =listaobjetos.features[item].geometry.coordinates + map.addMarker( + MarkerOptions() + .position(LatLng(lat[1],lat[0])) + .title(name) + .snippet(contacto) + + .icon( + BitmapDescriptorFactory.fromResource(R.drawable.imgmarkernormal) + ) + ) + + map.setOnMarkerClickListener { marker -> + var marcador = marker.snippet + Toast.makeText(this@Principal, "Este es el marker $marcador", Toast.LENGTH_SHORT).show() + true + } + + } + + }else{ + + Toast.makeText(this@Principal, "Fallo", Toast.LENGTH_SHORT).show() + } + } + } + ) + setUpMap() + + } + private fun setUpMap() { + if (ActivityCompat.checkSelfPermission(this, + android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), LOCATION_PERMISSION_REQUEST_CODE) + return + } + + map.isMyLocationEnabled = true + + fusedLocationClient.lastLocation.addOnSuccessListener(this) { location -> + + if (location != null) { + + lastLocation = location + val currentLatLng = LatLng(location.latitude, location.longitude) + + map.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 6f)) + } + } + } +} diff --git b/app/src/main/java/com/example/pruebamaps/Slider/IntroSlide.kt a/app/src/main/java/com/example/pruebamaps/Slider/IntroSlide.kt new file mode 100644 index 0000000..774e9ac --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Slider/IntroSlide.kt @@ -0,0 +1,8 @@ +package com.example.pruebamaps.Slider + +data class IntroSlide ( + val title: String, + val description: String, + val icon: Int + +) \ No newline at end of file diff --git b/app/src/main/java/com/example/pruebamaps/Slider/IntroSlider.kt a/app/src/main/java/com/example/pruebamaps/Slider/IntroSlider.kt new file mode 100644 index 0000000..ee852ce --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Slider/IntroSlider.kt @@ -0,0 +1,125 @@ +package com.example.pruebamaps + +import android.content.Context +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.system.Os.close +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.core.content.ContextCompat +import androidx.core.view.get +import androidx.viewpager2.widget.ViewPager2 +import com.example.pruebamaps.Menu.Principal +import com.example.pruebamaps.Slider.IntroSlide +import kotlinx.android.synthetic.main.activity_intro_slider.* +import kotlinx.android.synthetic.main.slide_item_container.* + + +class IntroSlider : AppCompatActivity() { + private val SKIP = "PREFERENCE_NAME" + private val IntroSliderAdapter = com.example.pruebamaps.Slider.IntroSliderAdapter( + listOf( + IntroSlide( + "ENCUENTRA", + "¿Tapabocas, alimentos, alementos de limpieza, alcohol en gel? PorductosPY facilita conectarte con los vendedores de los productos que necesitas!", + R.drawable.imgslider1 + ), + IntroSlide( + "OFRECE", + "¿Estás vendiendo algún producto, ofreciendo algún servicio y necesitas darte a conocer?", + R.drawable.imgslider2 + ), + IntroSlide( + "CONÉCTATE", + "Encúentranos en FACEBOOK, TWITTER e INSTAGRAM como ProductosPY", + R.drawable.imgslider3 + + ) + ) + ) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_intro_slider) + val sharedPreference = getSharedPreferences(SKIP,Context.MODE_PRIVATE) + var editor = sharedPreference.edit() + + if (sharedPreference.getBoolean(SKIP, false)){ + goToLogin(this) + } + introSliderViewPager.adapter = IntroSliderAdapter + setupIndicator() + setCurrentIndicator(0) + introSliderViewPager.registerOnPageChangeCallback(object : + ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + setCurrentIndicator(position) + } + + }) + btn_empezar.setOnClickListener { + editor.putBoolean(SKIP, true) + editor.apply() + goToLogin(this) + } + } + private fun setupIndicator(){ + val indicators = arrayOfNulls(IntroSliderAdapter.itemCount) + val layoutsParams : LinearLayout.LayoutParams = + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + layoutsParams.setMargins(8,0, 8, 0) + for (i in indicators.indices) + { + indicators[i] = ImageView(applicationContext) + indicators[i].apply{ + this?.setImageDrawable( + ContextCompat.getDrawable( + applicationContext, + R.drawable.indicator_inactive + ) + ) + this?.layoutParams = layoutsParams + } + Indicadores.addView(indicators[i]) + } + } + private fun setCurrentIndicator(index: Int) { + val childCount = Indicadores.childCount + for (i in 0 until childCount) { + val ImageView = Indicadores[i] as ImageView + if (i==index) { + ImageView.setImageDrawable( + ContextCompat.getDrawable( + applicationContext, + R.drawable.indicator_active + ) + ) + }else { + ImageView.setImageDrawable( + ContextCompat.getDrawable( + applicationContext, + R.drawable.indicator_inactive + ) + ) + } + + + } + + } + private fun goToLogin(context : Context){ + val intent = Intent(this, Principal::class.java) + startActivity(intent) + + } + private fun close (){ + btn_empezar.visibility = View.VISIBLE + } + +} diff --git b/app/src/main/java/com/example/pruebamaps/Slider/IntroSliderAdapter.kt a/app/src/main/java/com/example/pruebamaps/Slider/IntroSliderAdapter.kt new file mode 100644 index 0000000..c1a5e0f --- /dev/null +++ a/app/src/main/java/com/example/pruebamaps/Slider/IntroSliderAdapter.kt @@ -0,0 +1,47 @@ +package com.example.pruebamaps.Slider + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.example.pruebamaps.R +import com.example.pruebamaps.Slider.IntroSlide + + +class IntroSliderAdapter(private val IntroSlides: List): + RecyclerView.Adapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IntroSliderViewHolder { + return IntroSliderViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.slide_item_container, + parent, + false + ) + ) + + } + + override fun getItemCount(): Int { + return IntroSlides.size + } + + override fun onBindViewHolder(holder: IntroSliderViewHolder, position: Int) { + holder.bind(IntroSlides[position]) + } + + inner class IntroSliderViewHolder(view: View) : RecyclerView.ViewHolder(view){ + private val textTitle = view.findViewById(R.id.textTittle) + private val textDescription = view.findViewById(R.id.textDescription) + private val imageIcon = view.findViewById(R.id.imageSliderIcon) + fun bind(IntroSlide: IntroSlide) { + textTitle.text = IntroSlide.title + textDescription.text= IntroSlide.description + imageIcon.setImageResource(IntroSlide.icon) + + } + + } + +} \ No newline at end of file diff --git b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git b/app/src/main/res/drawable/btnfav.png a/app/src/main/res/drawable/btnfav.png new file mode 100644 index 0000000..78d5cd4 Binary files /dev/null and a/app/src/main/res/drawable/btnfav.png differ diff --git b/app/src/main/res/drawable/btninfo.png a/app/src/main/res/drawable/btninfo.png new file mode 100644 index 0000000..9c7fdc8 Binary files /dev/null and a/app/src/main/res/drawable/btninfo.png differ diff --git b/app/src/main/res/drawable/button.xml a/app/src/main/res/drawable/button.xml new file mode 100644 index 0000000..36f644c --- /dev/null +++ a/app/src/main/res/drawable/button.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git b/app/src/main/res/drawable/ic_launcher_background.xml a/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ a/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git b/app/src/main/res/drawable/imgcerrar.png a/app/src/main/res/drawable/imgcerrar.png new file mode 100644 index 0000000..07e0077 Binary files /dev/null and a/app/src/main/res/drawable/imgcerrar.png differ diff --git b/app/src/main/res/drawable/imgfavdetalle.png a/app/src/main/res/drawable/imgfavdetalle.png new file mode 100644 index 0000000..8df3f2a Binary files /dev/null and a/app/src/main/res/drawable/imgfavdetalle.png differ diff --git b/app/src/main/res/drawable/imgfavselecteddetalle.png a/app/src/main/res/drawable/imgfavselecteddetalle.png new file mode 100644 index 0000000..31598fa Binary files /dev/null and a/app/src/main/res/drawable/imgfavselecteddetalle.png differ diff --git b/app/src/main/res/drawable/imgfiltro.png a/app/src/main/res/drawable/imgfiltro.png new file mode 100644 index 0000000..fc57611 Binary files /dev/null and a/app/src/main/res/drawable/imgfiltro.png differ diff --git b/app/src/main/res/drawable/imglogogrande.png a/app/src/main/res/drawable/imglogogrande.png new file mode 100644 index 0000000..806aeae Binary files /dev/null and a/app/src/main/res/drawable/imglogogrande.png differ diff --git b/app/src/main/res/drawable/imglogomini.png a/app/src/main/res/drawable/imglogomini.png new file mode 100644 index 0000000..10be01c Binary files /dev/null and a/app/src/main/res/drawable/imglogomini.png differ diff --git b/app/src/main/res/drawable/imgmarkernormal.png a/app/src/main/res/drawable/imgmarkernormal.png new file mode 100644 index 0000000..6590395 Binary files /dev/null and a/app/src/main/res/drawable/imgmarkernormal.png differ diff --git b/app/src/main/res/drawable/imgmarkerselected.png a/app/src/main/res/drawable/imgmarkerselected.png new file mode 100644 index 0000000..4289dd8 Binary files /dev/null and a/app/src/main/res/drawable/imgmarkerselected.png differ diff --git b/app/src/main/res/drawable/imgslider1.png a/app/src/main/res/drawable/imgslider1.png new file mode 100644 index 0000000..be9e0bb Binary files /dev/null and a/app/src/main/res/drawable/imgslider1.png differ diff --git b/app/src/main/res/drawable/imgslider2.png a/app/src/main/res/drawable/imgslider2.png new file mode 100644 index 0000000..e27063e Binary files /dev/null and a/app/src/main/res/drawable/imgslider2.png differ diff --git b/app/src/main/res/drawable/imgslider3.png a/app/src/main/res/drawable/imgslider3.png new file mode 100644 index 0000000..fd19fec Binary files /dev/null and a/app/src/main/res/drawable/imgslider3.png differ diff --git b/app/src/main/res/drawable/indicator_active.xml a/app/src/main/res/drawable/indicator_active.xml new file mode 100644 index 0000000..c201d14 --- /dev/null +++ a/app/src/main/res/drawable/indicator_active.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git b/app/src/main/res/drawable/indicator_inactive.xml a/app/src/main/res/drawable/indicator_inactive.xml new file mode 100644 index 0000000..0cf11c0 --- /dev/null +++ a/app/src/main/res/drawable/indicator_inactive.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git b/app/src/main/res/layout/activity_intro_slider.xml a/app/src/main/res/layout/activity_intro_slider.xml new file mode 100644 index 0000000..0a7b117 --- /dev/null +++ a/app/src/main/res/layout/activity_intro_slider.xml @@ -0,0 +1,54 @@ + + + +