diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b75303 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.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 diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..e96cda9 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d86ad61 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..af0bbdd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..aecf84e --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,39 @@ +apply plugin: 'com.android.application' + +apply plugin: 'kotlin-android' + +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "br.com.codigozeroum.androiddeveloperchallenge" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.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" + //noinspection GradleCompatible + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:animated-vector-drawable:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.squareup.retrofit2:retrofit:2.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + implementation 'com.squareup.picasso:picasso:2.71828' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/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 a/app/src/androidTest/java/br/com/codigozeroum/androiddeveloperchallenge/ExampleInstrumentedTest.kt b/app/src/androidTest/java/br/com/codigozeroum/androiddeveloperchallenge/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..861a94d --- /dev/null +++ b/app/src/androidTest/java/br/com/codigozeroum/androiddeveloperchallenge/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package br.com.codigozeroum.androiddeveloperchallenge + +import android.support.test.InstrumentationRegistry +import android.support.test.runner.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.getTargetContext() + assertEquals("br.com.codigozeroum.androiddeveloperchallenge", appContext.packageName) + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..73ba2df --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/ItemDetails.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/ItemDetails.kt new file mode 100644 index 0000000..91c47f4 --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/ItemDetails.kt @@ -0,0 +1,82 @@ +package br.com.codigozeroum.androiddeveloperchallenge + +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import br.com.codigozeroum.androiddeveloperchallenge.models.ResultIMDbId +import br.com.codigozeroum.androiddeveloperchallenge.services.RetrofitInitializer +import com.squareup.picasso.Picasso +import kotlinx.android.synthetic.main.activity_item_details.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class ItemDetails : AppCompatActivity() { + + private val apikey = "7a4c5cac" + private val plot = "full" + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_item_details) + + val actionBar = supportActionBar + actionBar!!.title = "Detalhes" + actionBar.setDisplayHomeAsUpEnabled(true) + + val imdbID = intent.getStringExtra("imdbID") + + val call = RetrofitInitializer().searchMovieIMDbIdService().searchMovieIMDbId(imdbID, plot, apikey) + + call.enqueue(object : Callback { + + override fun onResponse(call: Call?, response: Response?) { + + if (response?.body()?.Response?.toBoolean()!!) { + + val result:ResultIMDbId = response.body().let{ it!! } + this@ItemDetails.setDetailsValues(result) + + } else { + Toast.makeText(this@ItemDetails, response.body()?.Error, Toast.LENGTH_SHORT).show() + } + } + + override fun onFailure(call: Call?, t: Throwable?) { + Log.e("onFailure error", t?.message) + } + }) + + } + + fun setDetailsValues(result: ResultIMDbId){ + + if(result.Poster == "N/A"){ + Picasso.get().load(R.drawable.image_not_found).resize(800, 1000).centerCrop().into(ivPoster) + } else{ + Picasso.get().load(result.Poster).resize(800, 1000).centerCrop().into(ivPoster) + } + rtbRating.rating = (result.imdbRating.toFloat()) / 2 + tvRating.text = "Rating IMDb: ${result.imdbRating}" + tvTotalVotes.text = "Total de Votos: ${result.imdbVotes}" + tvTitle.text = result.Title + tvRuntime.text = result.Runtime + tvProduction.text = result.Production + tvDirector.text = result.Director + tvGenre.text = result.Genre + + tvAnoReleased.text = "${result.Year} / ${result.Released}" + tvLanguageCountry.text = "${result.Language} / ${result.Country}" + tvWriter.text = result.Writer + tvActors.text = result.Actors + tvPlot.text = result.Plot + tvRated.text = result.Rated + + } + + override fun onSupportNavigateUp(): Boolean { + onBackPressed() + return true + } +} diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/MainActivity.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/MainActivity.kt new file mode 100644 index 0000000..9b9a05f --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/MainActivity.kt @@ -0,0 +1,262 @@ +package br.com.codigozeroum.androiddeveloperchallenge + +import android.content.Context +import android.content.Intent +import android.net.ConnectivityManager +import android.net.NetworkInfo +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import android.view.View +import android.view.inputmethod.InputMethodManager +import android.widget.AdapterView +import android.widget.Button +import android.widget.RadioButton +import android.widget.Toast +import br.com.codigozeroum.androiddeveloperchallenge.adapters.PosterAdapter +import br.com.codigozeroum.androiddeveloperchallenge.models.Result +import br.com.codigozeroum.androiddeveloperchallenge.models.SearchObjectResponse +import br.com.codigozeroum.androiddeveloperchallenge.services.RetrofitInitializer +import kotlinx.android.synthetic.main.activity_main.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class MainActivity : AppCompatActivity() { + + private val apikey = "7a4c5cac" + var posterAdapter: PosterAdapter? = null + private var rbSelectedText: String = "Título" + var searchResult: List? = null + var pages = 0 + var pageAtual = 0 + + var tituloPerquisa = "" + var anoPesquisa = "" + var tipoPesquisa = "" + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + val actionBar = supportActionBar + actionBar!!.title = "Home - Pesquisa" + + radioGroup.setOnCheckedChangeListener{ _, checkedId -> + + rbSelectedText = findViewById(checkedId).text.toString() + + when(rbSelectedText){ + "Título" -> { + llTitulo.visibility = View.VISIBLE + llTituloTipo.visibility = View.GONE + llTituloAno.visibility = View.GONE + } + "Título+Tipo" -> { + llTitulo.visibility = View.GONE + llTituloTipo.visibility = View.VISIBLE + llTituloAno.visibility = View.GONE + } + "Título+Ano" -> { + llTitulo.visibility = View.GONE + llTituloTipo.visibility = View.GONE + llTituloAno.visibility = View.VISIBLE + } + } + } + + btn_Buscar.setOnClickListener {v: View -> + + + + if(this.isNetworkAvailable()){ + + this.showOrDismissLoading() + + val imm = this@MainActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(v.windowToken, 0) + + when(rbSelectedText){ + "Título" -> this.searchTitulo(etT_titulo.text.toString(), 1) + "Título+Tipo" -> this.searchTituloTipo(etTT_titulo.text.toString(), spnTT_tipo.selectedItem.toString(), 1) + "Título+Ano" -> this.searchTituloAno(etTA_titulo.text.toString(), etTA_ano.text.toString(), 1) + } + }else{ + Toast.makeText(this@MainActivity, "Favor Verificar sua Conexão de INTERNET", Toast.LENGTH_LONG).show() + } + + } + + btn_next.setOnClickListener { v: View -> + + if(this.isNetworkAvailable()){ + when(rbSelectedText){ + "Título" -> this.searchTitulo(tituloPerquisa, (++ pageAtual) ) + "Título+Tipo" -> this.searchTituloTipo(tituloPerquisa, tipoPesquisa, (++ pageAtual)) + "Título+Ano" -> this.searchTituloAno(tituloPerquisa, anoPesquisa, (++ pageAtual)) + } + }else{ + Toast.makeText(this@MainActivity, "Favor Verificar sua Conexão de INTERNET", Toast.LENGTH_LONG).show() + } + + } + + btn_previous.setOnClickListener { v: View -> + + if(this.isNetworkAvailable()){ + when(rbSelectedText){ + "Título" -> this.searchTitulo(tituloPerquisa, (-- pageAtual) ) + "Título+Tipo" -> this.searchTituloTipo(tituloPerquisa, tipoPesquisa, (-- pageAtual)) + "Título+Ano" -> this.searchTituloAno(tituloPerquisa, anoPesquisa, (-- pageAtual)) + } + }else{ + Toast.makeText(this@MainActivity, "Favor Verificar sua Conexão de INTERNET", Toast.LENGTH_LONG).show() + } + } + + btn_inicio.setOnClickListener { v: View -> + + if(this.isNetworkAvailable()){ + when(rbSelectedText){ + "Título" -> this.searchTitulo(tituloPerquisa, 1) + "Título+Tipo" -> this.searchTituloTipo(tituloPerquisa, tipoPesquisa, 1) + "Título+Ano" -> this.searchTituloAno(tituloPerquisa, anoPesquisa, 1) + } + }else{ + Toast.makeText(this@MainActivity, "Favor Verificar sua Conexão de INTERNET", Toast.LENGTH_LONG).show() + } + } + + gridview.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id -> + + if(this.isNetworkAvailable()){ + val imdbID = posterAdapter!!.getItem(position).imdbID + + val intent = Intent(this, ItemDetails::class.java) + intent.putExtra("imdbID", imdbID) + startActivity(intent) + + }else{ + Toast.makeText(this@MainActivity, "Favor Verificar sua Conexão de INTERNET", Toast.LENGTH_LONG).show() + } + } + + } + + private fun isNetworkAvailable(): Boolean { + val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) + return if (connectivityManager is ConnectivityManager) { + val networkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo + (networkInfo?.isConnected != null) + } else false + } + + fun searchTitulo(titulo: String, page: Int){ + + if(titulo == ""){ + Toast.makeText(this@MainActivity, "Necessário Inserir um Valor para Busca", Toast.LENGTH_LONG).show() + return + } + + tituloPerquisa = titulo + pageAtual = page + val call = RetrofitInitializer().searchTitleService().searchMoviesTitle(titulo, page, apikey) + this.showResults(call, page) + } + + fun searchTituloTipo(titulo: String, tipo: String, page: Int){ + + if(titulo == ""){ + Toast.makeText(this@MainActivity, "Necessário Inserir um Valor para Busca", Toast.LENGTH_LONG).show() + return + } + + tituloPerquisa = titulo + tipoPesquisa = tipo + pageAtual = page + val call = RetrofitInitializer().searchTitleTypeService().searchMoviesTitleType(titulo, tipo, page, apikey) + this.showResults(call, page) + } + + fun searchTituloAno(titulo: String, ano: String, page: Int){ + + if(titulo == "" || ano == ""){ + Toast.makeText(this@MainActivity, "Necessário Inserir um Valor em todos os campos para Busca", Toast.LENGTH_LONG).show() + return + } + + tituloPerquisa = titulo + anoPesquisa = ano + pageAtual = page + val call = RetrofitInitializer().searchTitleYearService().searchMoviesTitleYear(titulo, ano.toInt(), page, apikey) + this.showResults(call, page) + } + + fun showResults(call: Call, page: Int){ + + btn_previous.visibility = if(pageAtual == 1) View.INVISIBLE else View.VISIBLE + btn_inicio.visibility = btn_previous.visibility + + call.enqueue(object : Callback { + + override fun onResponse(call: Call?, response: Response?) { + + if(response?.body()?.Response?.toBoolean()!!){ + + searchResult = response?.body()?.Search + var totalResults = response?.body()?.totalResults?.toInt() + + if(searchResult != null){ + + tvResultsCount.text = "Resultado: $totalResults itens" + + pages = if(totalResults != null && totalResults > 10) totalResults /10 + 1 else 1 + + btn_next.visibility = if(pages > 1 && pageAtual < pages) View.VISIBLE else View.INVISIBLE + + tvPagination.visibility = View.VISIBLE + tvPagination.text = "Página $pageAtual de $pages" + + this@MainActivity.showOrDismissLoading() + + posterAdapter = PosterAdapter(this@MainActivity, searchResult!!) + gridview.adapter = posterAdapter + } + + }else{ + this@MainActivity.showOrDismissLoading() + Toast.makeText(this@MainActivity, response.body()?.Error , Toast.LENGTH_SHORT).show() + } + + } + + override fun onFailure(call: Call?, t: Throwable?) { + tvPagination.visibility = View.GONE + btn_next.visibility = View.GONE + btn_previous.visibility = View.GONE + btn_inicio.visibility = View.GONE + this@MainActivity.showOrDismissLoading() + Log.e("onFailure error", t?.message) + } + }) + } + + fun showOrDismissLoading(){ + val visibility = if (progressBar.visibility == View.GONE) View.VISIBLE else View.GONE + progressBar.visibility = visibility + } +} + + + + + + + + + + + + + + diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/adapters/PosterAdapter.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/adapters/PosterAdapter.kt new file mode 100644 index 0000000..52ef84d --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/adapters/PosterAdapter.kt @@ -0,0 +1,50 @@ +package br.com.codigozeroum.androiddeveloperchallenge.adapters + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.BaseAdapter +import br.com.codigozeroum.androiddeveloperchallenge.R +import br.com.codigozeroum.androiddeveloperchallenge.models.Result +import com.squareup.picasso.Callback +import com.squareup.picasso.Picasso +import kotlinx.android.synthetic.main.item_grid_view.view.* + +class PosterAdapter(context: Context, var posterList: List) : BaseAdapter() { + + var context: Context? = context + + override fun getItem(position: Int): Result { + return posterList[position] + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun getCount(): Int { + return posterList.size + } + + override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { + + val poster = this.posterList[position] + + var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + + var posterCardView = inflator.inflate(R.layout.item_grid_view, null) + + if(poster.Poster == "N/A"){ + Picasso.get().load(R.drawable.image_not_found).resize(800, 1000).centerCrop().into(posterCardView.ivImagePoster) + } else{ + Picasso.get().load(poster.Poster).resize(800, 1000).centerCrop().into(posterCardView.ivImagePoster) + } + + posterCardView.tvYear.text = poster.Year + posterCardView.tvTitle.text = poster.Title + + return posterCardView + } + +} \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/models/SearchObjectResponse.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/models/SearchObjectResponse.kt new file mode 100644 index 0000000..7c66471 --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/models/SearchObjectResponse.kt @@ -0,0 +1,39 @@ +package br.com.codigozeroum.androiddeveloperchallenge.models + +class SearchObjectResponse( + var Search: List, + var totalResults: String, + var Response: String, + var Error: String +) + +class Result( + var Title: String, + var Year: String, + var imdbID: String, + var Type: String, + var Poster: String +) + +class ResultIMDbId( + var Title: String, + var Year: String, + var Rated: String, + var Released: String, + var Runtime: String, + var Genre: String, + var Director: String, + var Writer: String, + var Actors: String, + var Plot: String, + var Language: String, + var Country: String, + var Poster: String, + var imdbRating: String, + var imdbVotes: String, + var imdbID: String, + var Type: String, + var Production: String, + var Response: String, + var Error: String +) \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/RetrofitInitializer.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/RetrofitInitializer.kt new file mode 100644 index 0000000..fc5544f --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/RetrofitInitializer.kt @@ -0,0 +1,19 @@ +package br.com.codigozeroum.androiddeveloperchallenge.services + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class RetrofitInitializer { + + private val retrofit = Retrofit.Builder() + .baseUrl("http://www.omdbapi.com") + .addConverterFactory(GsonConverterFactory.create()) + .build() + + fun searchTitleService() = retrofit.create(SearchTitleService::class.java) + fun searchTitleTypeService() = retrofit.create(SearchTitleTypeService::class.java) + fun searchTitleYearService() = retrofit.create(SearchTitleYearService::class.java) + + fun searchMovieIMDbIdService() = retrofit.create(SearchIMDbIdService::class.java) + +} \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchIMDbIdService.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchIMDbIdService.kt new file mode 100644 index 0000000..5694e81 --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchIMDbIdService.kt @@ -0,0 +1,12 @@ +package br.com.codigozeroum.androiddeveloperchallenge.services + +import br.com.codigozeroum.androiddeveloperchallenge.models.ResultIMDbId +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface SearchIMDbIdService { + + @GET("/") + fun searchMovieIMDbId(@Query("i") i: String, @Query("plot") plot: String, @Query("apikey") apikey: String): Call +} \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleService.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleService.kt new file mode 100644 index 0000000..021a6de --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleService.kt @@ -0,0 +1,12 @@ +package br.com.codigozeroum.androiddeveloperchallenge.services + +import br.com.codigozeroum.androiddeveloperchallenge.models.SearchObjectResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface SearchTitleService { + + @GET("/") + fun searchMoviesTitle(@Query("s") s: String, @Query("page") page: Int, @Query("apikey") apikey: String): Call +} \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleTypeService.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleTypeService.kt new file mode 100644 index 0000000..5f1fed7 --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleTypeService.kt @@ -0,0 +1,12 @@ +package br.com.codigozeroum.androiddeveloperchallenge.services + +import br.com.codigozeroum.androiddeveloperchallenge.models.SearchObjectResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface SearchTitleTypeService { + + @GET("/") + fun searchMoviesTitleType(@Query("s") s: String, @Query("type") type: String, @Query("page") page: Int, @Query("apikey") apikey: String): Call +} \ No newline at end of file diff --git a/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleYearService.kt b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleYearService.kt new file mode 100644 index 0000000..31f59b4 --- /dev/null +++ b/app/src/main/java/br/com/codigozeroum/androiddeveloperchallenge/services/SearchTitleYearService.kt @@ -0,0 +1,12 @@ +package br.com.codigozeroum.androiddeveloperchallenge.services + +import br.com.codigozeroum.androiddeveloperchallenge.models.SearchObjectResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface SearchTitleYearService { + + @GET("/") + fun searchMoviesTitleYear(@Query("s") s: String, @Query("y") y: Int, @Query("page") page: Int, @Query("apikey") apikey: String): Call +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..6348baa --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/card_view_gradient.xml b/app/src/main/res/drawable/card_view_gradient.xml new file mode 100644 index 0000000..73ffc86 --- /dev/null +++ b/app/src/main/res/drawable/card_view_gradient.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/card_view_year_background.xml b/app/src/main/res/drawable/card_view_year_background.xml new file mode 100644 index 0000000..5a485e7 --- /dev/null +++ b/app/src/main/res/drawable/card_view_year_background.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..a0ad202 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/image_not_found.png b/app/src/main/res/drawable/image_not_found.png new file mode 100644 index 0000000..ab16bed Binary files /dev/null and b/app/src/main/res/drawable/image_not_found.png differ diff --git a/app/src/main/res/drawable/spinner_bg.xml b/app/src/main/res/drawable/spinner_bg.xml new file mode 100644 index 0000000..467c5ca --- /dev/null +++ b/app/src/main/res/drawable/spinner_bg.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_item_details.xml b/app/src/main/res/layout/activity_item_details.xml new file mode 100644 index 0000000..652b022 --- /dev/null +++ b/app/src/main/res/layout/activity_item_details.xml @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..48bdcc8 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +