From 23ca2a43f048483c22bd96f34822d56064e9cdf7 Mon Sep 17 00:00:00 2001 From: Lucas Martins Date: Wed, 13 Feb 2019 20:01:40 -0200 Subject: [PATCH 1/6] SearchMovies app functional --- .gitignore | 13 ++ .idea/codeStyles/Project.xml | 29 +++ .idea/gradle.xml | 15 ++ .idea/misc.xml | 14 ++ .idea/runConfigurations.xml | 12 ++ app/.gitignore | 1 + app/build.gradle | 33 ++++ app/proguard-rules.pro | 21 +++ .../searchmovies/ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 24 +++ .../searchmovies/GetMovieDataService.java | 15 ++ .../searchmovies/GetMoviePlotService.java | 14 ++ .../searchmovies/activitys/MainActivity.java | 87 +++++++++ .../activitys/Movie_Activity.java | 103 +++++++++++ .../adpters/RecyclerViewAdapter.java | 72 ++++++++ .../searchmovies/api/OmdbInstance.java | 23 +++ .../example/searchmovies/entitys/Movie.java | 22 +++ .../example/searchmovies/entitys/Search.java | 75 ++++++++ .../entitys/SearchMovieEntity.java | 44 +++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++++ app/src/main/res/drawable-v24/loading.jpg | Bin 0 -> 2364 bytes app/src/main/res/drawable-v24/movie_icon.jpg | Bin 0 -> 51085 bytes .../res/drawable/ic_launcher_background.xml | 74 ++++++++ app/src/main/res/layout/activity_main.xml | 60 ++++++ app/src/main/res/layout/activity_movie_.xml | 64 +++++++ app/src/main/res/layout/cardview.xml | 39 ++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/styles.xml | 11 ++ .../example/searchmovies/ExampleUnitTest.java | 17 ++ build.gradle | 27 +++ gradle.properties | 15 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ settings.gradle | 1 + 49 files changed, 1266 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/example/searchmovies/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/example/searchmovies/GetMovieDataService.java create mode 100644 app/src/main/java/com/example/searchmovies/GetMoviePlotService.java create mode 100644 app/src/main/java/com/example/searchmovies/activitys/MainActivity.java create mode 100644 app/src/main/java/com/example/searchmovies/activitys/Movie_Activity.java create mode 100644 app/src/main/java/com/example/searchmovies/adpters/RecyclerViewAdapter.java create mode 100644 app/src/main/java/com/example/searchmovies/api/OmdbInstance.java create mode 100644 app/src/main/java/com/example/searchmovies/entitys/Movie.java create mode 100644 app/src/main/java/com/example/searchmovies/entitys/Search.java create mode 100644 app/src/main/java/com/example/searchmovies/entitys/SearchMovieEntity.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable-v24/loading.jpg create mode 100644 app/src/main/res/drawable-v24/movie_icon.jpg create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_movie_.xml create mode 100644 app/src/main/res/layout/cardview.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/example/searchmovies/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle 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..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..2996d53 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,15 @@ + + + + + + \ 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/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..55a6ce5 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,33 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.example.searchmovies" + minSdkVersion 15 + 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 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.squareup.retrofit2:converter-gson:2.5.0' + implementation 'com.squareup.retrofit2:retrofit:2.5.0' + implementation 'com.squareup.picasso:picasso:2.5.2' + 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/com/example/searchmovies/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/searchmovies/ExampleInstrumentedTest.java new file mode 100644 index 0000000..97aef24 --- /dev/null +++ b/app/src/androidTest/java/com/example/searchmovies/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.searchmovies; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.searchmovies", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e5eb98a --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/searchmovies/GetMovieDataService.java b/app/src/main/java/com/example/searchmovies/GetMovieDataService.java new file mode 100644 index 0000000..cbd8eb9 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/GetMovieDataService.java @@ -0,0 +1,15 @@ +package com.example.searchmovies; + + +import com.example.searchmovies.entitys.SearchMovieEntity; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface GetMovieDataService { + // @GET("?s=batman&apikey=d2e11186") + @GET("/") + Call getMovieData(@Query("s") String s , @Query("apikey") String apikey); + +} diff --git a/app/src/main/java/com/example/searchmovies/GetMoviePlotService.java b/app/src/main/java/com/example/searchmovies/GetMoviePlotService.java new file mode 100644 index 0000000..c52ec48 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/GetMoviePlotService.java @@ -0,0 +1,14 @@ +package com.example.searchmovies; + +import com.example.searchmovies.entitys.Search; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; +// @GET("?i={id}&apikey=d2e11186") +public interface GetMoviePlotService { + @GET("/") + Call getMoviePlot(@Query("i") String i , @Query("apikey") String apikey); + + +} diff --git a/app/src/main/java/com/example/searchmovies/activitys/MainActivity.java b/app/src/main/java/com/example/searchmovies/activitys/MainActivity.java new file mode 100644 index 0000000..bf481eb --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/activitys/MainActivity.java @@ -0,0 +1,87 @@ +package com.example.searchmovies.activitys; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.example.searchmovies.GetMovieDataService; +import com.example.searchmovies.R; +import com.example.searchmovies.adpters.RecyclerViewAdapter; +import com.example.searchmovies.api.OmdbInstance; +import com.example.searchmovies.entitys.Search; +import com.example.searchmovies.entitys.SearchMovieEntity; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class MainActivity extends AppCompatActivity { + + String movieName; + TextView fieldText; + Button buttonSearch; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + buttonSearch = findViewById(R.id.button_search_id); + buttonSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + searchMovie(); + } + }); + + } + //gera array de filmes + private void generateMovieList(List MovieEntityArrayList) { + RecyclerView myrc = findViewById(R.id.recyclerview_id); + RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this,MovieEntityArrayList); + RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,2); + myrc.setLayoutManager(layoutManager); + myrc.setAdapter(myAdapter); + } + + public void searchMovie(){ + fieldText = findViewById(R.id.field_search_id); + movieName = fieldText.getText()+""; + + //esconder teclado + ((InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE)) + .hideSoftInputFromWindow(fieldText.getWindowToken(), 0); + + //API + GetMovieDataService service = OmdbInstance.getOmdbInstance().create(GetMovieDataService.class); + Call call = service.getMovieData(movieName,"d2e11186"); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) + { + if (response.body().getSearch() == null) + Toast.makeText(MainActivity.this, "Movie not found or result list is too long", Toast.LENGTH_SHORT).show(); + else + generateMovieList(response.body().getSearch()); + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(MainActivity.this, "Error: " + t.getMessage(), Toast.LENGTH_SHORT).show(); + } + }); + + + + + } + + + +} diff --git a/app/src/main/java/com/example/searchmovies/activitys/Movie_Activity.java b/app/src/main/java/com/example/searchmovies/activitys/Movie_Activity.java new file mode 100644 index 0000000..4e424d8 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/activitys/Movie_Activity.java @@ -0,0 +1,103 @@ +package com.example.searchmovies.activitys; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.searchmovies.GetMoviePlotService; +import com.example.searchmovies.R; +import com.example.searchmovies.entitys.Search; + +import java.io.InputStream; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class Movie_Activity extends AppCompatActivity { + private TextView movietitle, movietype,movieyear,movieplot; + private Retrofit retrofitPlot; + ImageView movieposter; + + private class DownloadImageWithURLTask extends AsyncTask { + ImageView bmImage; + public DownloadImageWithURLTask(ImageView bmImage) { + this.bmImage = bmImage; + } + + protected Bitmap doInBackground(String... urls) { + String pathToFile = urls[0]; + Bitmap bitmap = null; + try { + InputStream in = new java.net.URL(pathToFile).openStream(); + bitmap = BitmapFactory.decodeStream(in); + } catch (Exception e) { + Log.e("Error", e.getMessage()); + e.printStackTrace(); + } + return bitmap; + } + protected void onPostExecute(Bitmap result) { + bmImage.setImageBitmap(result); + } + } + + // + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_movie_); + Intent intent = getIntent(); + //recuperando a url do poster + String url = intent.getExtras().getString("ImageURL"); + + String Title = intent.getExtras().getString("Title"); + String Year = intent.getExtras().getString("Year"); + String Type = intent.getExtras().getString("Type"); + String ID = intent.getExtras().getString("ID"); + retrofitPlot = new Retrofit.Builder().baseUrl("http://www.omdbapi.com/") + .addConverterFactory(GsonConverterFactory.create()).build(); + GetMoviePlotService getMoviePlotService = retrofitPlot.create(GetMoviePlotService.class); + + Call call = getMoviePlotService.getMoviePlot(ID,"d2e11186"); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() + ) { + Search search = response.body(); + movieplot.setText(search.getPlot()); + + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + movietitle =findViewById(R.id.movie_tittledetail_id); + movietype = findViewById(R.id.movie_typedetail_id); + movieyear = findViewById(R.id.movie_yeardetail_id); + movieplot = findViewById(R.id.movie_plotdetail_id); + movieposter = findViewById(R.id.movie_poster_id); + DownloadImageWithURLTask downloadTask = new DownloadImageWithURLTask(movieposter); + downloadTask.execute(url); + movietitle.setText(Title); + movietype.setText(Type); + movieyear.setText(Year); + } + + + + +} diff --git a/app/src/main/java/com/example/searchmovies/adpters/RecyclerViewAdapter.java b/app/src/main/java/com/example/searchmovies/adpters/RecyclerViewAdapter.java new file mode 100644 index 0000000..3aa24d8 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/adpters/RecyclerViewAdapter.java @@ -0,0 +1,72 @@ +package com.example.searchmovies.adpters; + +import android.content.Context; +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.example.searchmovies.R; +import com.example.searchmovies.activitys.Movie_Activity; +import com.example.searchmovies.entitys.Search; + +import java.util.List; + +public class RecyclerViewAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mData; + public RecyclerViewAdapter(Context mContext, List mData) { + this.mContext = mContext; + this.mData = mData; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view; + LayoutInflater mInflater = LayoutInflater.from(mContext); + view = mInflater.inflate(R.layout.cardview,viewGroup,false); + + return new MyViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) { + myViewHolder.tv_movie_tittle.setText(mData.get(i).getTitle()); + myViewHolder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent intent = new Intent(mContext, Movie_Activity.class); + intent.putExtra("ID",mData.get(i).getImdbID()); + intent.putExtra("Title",mData.get(i).getTitle()); + intent.putExtra("Type",mData.get(i).getType()); + intent.putExtra("Year",mData.get(i).getYear()); + intent.putExtra("ImageURL",mData.get(i).getPoster()); + mContext.startActivity(intent); + } + }); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + public static class MyViewHolder extends RecyclerView.ViewHolder { + TextView tv_movie_tittle; + + CardView cardView; + public MyViewHolder(@NonNull View itemView) { + super(itemView); + tv_movie_tittle = itemView.findViewById(R.id.movie_tittle_id); + cardView = itemView.findViewById(R.id.cardview_id); + } + } + + +} diff --git a/app/src/main/java/com/example/searchmovies/api/OmdbInstance.java b/app/src/main/java/com/example/searchmovies/api/OmdbInstance.java new file mode 100644 index 0000000..70c92c2 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/api/OmdbInstance.java @@ -0,0 +1,23 @@ +package com.example.searchmovies.api; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + + +public class OmdbInstance { + private static Retrofit retrofit; + private static final String BASE_URL = "http://www.omdbapi.com/"; + + + //Criando a instancia do retrofit + + public static Retrofit getOmdbInstance() { + if (retrofit == null) { + retrofit = new retrofit2.Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + } + return retrofit; + } + +} diff --git a/app/src/main/java/com/example/searchmovies/entitys/Movie.java b/app/src/main/java/com/example/searchmovies/entitys/Movie.java new file mode 100644 index 0000000..4c38ab6 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/entitys/Movie.java @@ -0,0 +1,22 @@ +package com.example.searchmovies.entitys; + +public class Movie +{ +private String Title; + + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public Movie() { + } + + public Movie(String title) { + Title = title; + } +} diff --git a/app/src/main/java/com/example/searchmovies/entitys/Search.java b/app/src/main/java/com/example/searchmovies/entitys/Search.java new file mode 100644 index 0000000..5e65066 --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/entitys/Search.java @@ -0,0 +1,75 @@ +package com.example.searchmovies.entitys; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Search { + + @SerializedName("Title") + @Expose + private String title; + @SerializedName("Year") + @Expose + private String year; + @SerializedName("imdbID") + @Expose + private String imdbID; + @SerializedName("Type") + @Expose + private String type; + @SerializedName("Poster") + @Expose + private String poster; + @SerializedName("Plot") + @Expose + private String plot; + + public String getPlot() { + return plot; + } + + public void setPlot(String plot) { + this.plot = plot; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getImdbID() { + return imdbID; + } + + public void setImdbID(String imdbID) { + this.imdbID = imdbID; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPoster() { + return poster; + } + + public void setPoster(String poster) { + this.poster = poster; + } + +} diff --git a/app/src/main/java/com/example/searchmovies/entitys/SearchMovieEntity.java b/app/src/main/java/com/example/searchmovies/entitys/SearchMovieEntity.java new file mode 100644 index 0000000..b74824d --- /dev/null +++ b/app/src/main/java/com/example/searchmovies/entitys/SearchMovieEntity.java @@ -0,0 +1,44 @@ +package com.example.searchmovies.entitys; + +import java.util.List; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class SearchMovieEntity { + + @SerializedName("Search") + @Expose + private List search = null; + @SerializedName("totalResults") + @Expose + private String totalResults; + @SerializedName("Response") + @Expose + private String response; + + public List getSearch() { + return search; + } + + public void setSearch(List search) { + this.search = search; + } + + public String getTotalResults() { + return totalResults; + } + + public void setTotalResults(String totalResults) { + this.totalResults = totalResults; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + +} 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..c7bd21d --- /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-v24/loading.jpg b/app/src/main/res/drawable-v24/loading.jpg new file mode 100644 index 0000000000000000000000000000000000000000..946579f0c8828a87c048a166cb9422a202ae3010 GIT binary patch literal 2364 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 literal 0 HcmV?d00001 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..2408e30 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..05f7d0b --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,60 @@ + + + + + +