From b7bac19e56df0cd81bc397f994e00364d979dfbb Mon Sep 17 00:00:00 2001 From: MustafaHasria Date: Tue, 29 Jun 2021 20:27:02 +0300 Subject: [PATCH] * finish api section --- app/build.gradle | 13 + .../smoathapplication/api/ApiClient.java | 32 + .../api/ApiStateListener.java | 8 + .../api/endpoints/MovieApis.java | 16 + .../models/addmovie/AddMovieActivity.java | 6 +- .../models/home/caller/MovieCaller.java | 52 + .../models/home/response/CountryResponse.java | 42 + .../home/response/ExternalsResponse.java | 41 + .../models/home/response/ImageResponse.java | 31 + .../models/home/response/LinksResponse.java | 30 + .../models/home/response/MovieResponse.java | 254 +++ .../models/home/response/NetworkResponse.java | 41 + .../response/PreviousepisodeResponse.java | 20 + .../models/home/response/RatingResponse.java | 20 + .../home/response/ScheduleResponse.java | 33 + .../models/home/response/SelfResponse.java | 20 + .../smoathapplication/util/AppConst.java | 5 + app/src/main/res/drawable/ic_no_data.xml | 36 + app/src/main/res/drawable/ic_no_internet.xml | 1921 +++++++++++++++++ app/src/main/res/drawable/ic_server_down.xml | 184 ++ app/src/main/res/layout/activity_home.xml | 34 +- build.gradle | 1 + 22 files changed, 2830 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/example/smoathapplication/api/ApiClient.java create mode 100644 app/src/main/java/com/example/smoathapplication/api/ApiStateListener.java create mode 100644 app/src/main/java/com/example/smoathapplication/api/endpoints/MovieApis.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/caller/MovieCaller.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/CountryResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/ExternalsResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/ImageResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/LinksResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/MovieResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/NetworkResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/PreviousepisodeResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/RatingResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/ScheduleResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/models/home/response/SelfResponse.java create mode 100644 app/src/main/java/com/example/smoathapplication/util/AppConst.java create mode 100644 app/src/main/res/drawable/ic_no_data.xml create mode 100644 app/src/main/res/drawable/ic_no_internet.xml create mode 100644 app/src/main/res/drawable/ic_server_down.xml diff --git a/app/build.gradle b/app/build.gradle index 3b9defd..676fd8a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,17 @@ dependencies { //paper database implementation 'io.github.pilgr:paperdb:2.7.1' + //Retrofit 2 + implementation 'com.squareup.retrofit2:retrofit:2.6.1' + implementation 'com.squareup.retrofit2:converter-gson:2.6.1' + + + //AVI loading + implementation 'com.wang.avi:library:2.1.3' + + //Glide + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/smoathapplication/api/ApiClient.java b/app/src/main/java/com/example/smoathapplication/api/ApiClient.java new file mode 100644 index 0000000..21b2045 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/api/ApiClient.java @@ -0,0 +1,32 @@ +package com.example.smoathapplication.api; + +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class ApiClient { + + public static Retrofit retrofit = null; + + public static Retrofit getAPIClient() { + if (retrofit == null) { + retrofit = new Retrofit.Builder().baseUrl("https://api.tvmaze.com/") + .client(getHttpOkClient()) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + } + return retrofit; + } + + private static OkHttpClient getHttpOkClient() { + OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); + httpClientBuilder.connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .retryOnConnectionFailure(true); + + return httpClientBuilder.build(); + } +} diff --git a/app/src/main/java/com/example/smoathapplication/api/ApiStateListener.java b/app/src/main/java/com/example/smoathapplication/api/ApiStateListener.java new file mode 100644 index 0000000..37352f1 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/api/ApiStateListener.java @@ -0,0 +1,8 @@ +package com.example.smoathapplication.api; + +public interface ApiStateListener { + + void onSuccess(Object... params); + + void onFailure(Object... params); +} diff --git a/app/src/main/java/com/example/smoathapplication/api/endpoints/MovieApis.java b/app/src/main/java/com/example/smoathapplication/api/endpoints/MovieApis.java new file mode 100644 index 0000000..1100d0b --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/api/endpoints/MovieApis.java @@ -0,0 +1,16 @@ +package com.example.smoathapplication.api.endpoints; + +import com.example.smoathapplication.models.home.response.MovieResponse; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.GET; + +public interface MovieApis { + String SHOW_ALL = "shows"; + + + @GET(SHOW_ALL) + Call> getMovies(); +} diff --git a/app/src/main/java/com/example/smoathapplication/models/addmovie/AddMovieActivity.java b/app/src/main/java/com/example/smoathapplication/models/addmovie/AddMovieActivity.java index 603bc11..3bd3771 100644 --- a/app/src/main/java/com/example/smoathapplication/models/addmovie/AddMovieActivity.java +++ b/app/src/main/java/com/example/smoathapplication/models/addmovie/AddMovieActivity.java @@ -30,6 +30,8 @@ import io.paperdb.Paper; +import static com.example.smoathapplication.util.AppConst.PICK_IMAGE; + public class AddMovieActivity extends AppCompatActivity { //region Components @@ -95,13 +97,13 @@ private void checkPermission() { private void chooseImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); - startActivityForResult(intent, 100); + startActivityForResult(intent, PICK_IMAGE); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (requestCode == 100) { + if (requestCode == PICK_IMAGE) { if (resultCode == RESULT_OK) { Uri uri = data.getData(); try { diff --git a/app/src/main/java/com/example/smoathapplication/models/home/caller/MovieCaller.java b/app/src/main/java/com/example/smoathapplication/models/home/caller/MovieCaller.java new file mode 100644 index 0000000..abc2718 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/caller/MovieCaller.java @@ -0,0 +1,52 @@ +package com.example.smoathapplication.models.home.caller; + + +import com.example.smoathapplication.api.ApiClient; +import com.example.smoathapplication.api.ApiStateListener; +import com.example.smoathapplication.api.endpoints.MovieApis; +import com.example.smoathapplication.models.home.response.MovieResponse; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class MovieCaller { + + //region Variables + MovieApis movieApis; + Call> movieResponseCall; + //endregion + + //region Constructor + + public MovieCaller() { + movieApis = ApiClient.getAPIClient().create(MovieApis.class); + } + //endregion + + //region Get all movies + public void connectToGetAllMoviesApi(final ApiStateListener apiStateListener){ + movieResponseCall = movieApis.getMovies(); + movieResponseCall.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() == null){ + apiStateListener.onFailure(700); + } else { + if (response.code() == 200){ + apiStateListener.onSuccess(response.body()); + } else + apiStateListener.onFailure(response.code()); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + apiStateListener.onFailure(null); + } + }); + } + //endregion +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/CountryResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/CountryResponse.java new file mode 100644 index 0000000..766f9d8 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/CountryResponse.java @@ -0,0 +1,42 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class CountryResponse { + + @SerializedName("name") + @Expose + private String name; + @SerializedName("code") + @Expose + private String code; + @SerializedName("timezone") + @Expose + private String timezone; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/ExternalsResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/ExternalsResponse.java new file mode 100644 index 0000000..0a64e61 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/ExternalsResponse.java @@ -0,0 +1,41 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class ExternalsResponse { + + @SerializedName("tvrage") + @Expose + private int tvrage; + @SerializedName("thetvdb") + @Expose + private int thetvdb; + @SerializedName("imdb") + @Expose + private String imdb; + + public int getTvrage() { + return tvrage; + } + + public void setTvrage(int tvrage) { + this.tvrage = tvrage; + } + + public int getThetvdb() { + return thetvdb; + } + + public void setThetvdb(int thetvdb) { + this.thetvdb = thetvdb; + } + + public String getImdb() { + return imdb; + } + + public void setImdb(String imdb) { + this.imdb = imdb; + } +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/ImageResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/ImageResponse.java new file mode 100644 index 0000000..9ba2d5c --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/ImageResponse.java @@ -0,0 +1,31 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class ImageResponse { + + + @SerializedName("medium") + @Expose + private String medium; + @SerializedName("original") + @Expose + private String original; + + public String getMedium() { + return medium; + } + + public void setMedium(String medium) { + this.medium = medium; + } + + public String getOriginal() { + return original; + } + + public void setOriginal(String original) { + this.original = original; + } +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/LinksResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/LinksResponse.java new file mode 100644 index 0000000..45f957a --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/LinksResponse.java @@ -0,0 +1,30 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class LinksResponse { + + @SerializedName("self") + @Expose + private SelfResponse self; + @SerializedName("previousepisode") + @Expose + private PreviousepisodeResponse previousepisode; + + public SelfResponse getSelf() { + return self; + } + + public void setSelf(SelfResponse self) { + this.self = self; + } + + public PreviousepisodeResponse getPreviousepisode() { + return previousepisode; + } + + public void setPreviousepisode(PreviousepisodeResponse previousepisode) { + this.previousepisode = previousepisode; + } +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/MovieResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/MovieResponse.java new file mode 100644 index 0000000..1080d1f --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/MovieResponse.java @@ -0,0 +1,254 @@ +package com.example.smoathapplication.models.home.response; + + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class MovieResponse { + + @SerializedName("id") + @Expose + private int id; + @SerializedName("url") + @Expose + private String url; + @SerializedName("name") + @Expose + private String name; + @SerializedName("type") + @Expose + private String type; + @SerializedName("language") + @Expose + private String language; + @SerializedName("genres") + @Expose + private List genres = null; + @SerializedName("status") + @Expose + private String status; + @SerializedName("runtime") + @Expose + private int runtime; + @SerializedName("averageRuntime") + @Expose + private int averageRuntime; + @SerializedName("premiered") + @Expose + private String premiered; + @SerializedName("officialSite") + @Expose + private String officialSite; + @SerializedName("schedule") + @Expose + private ScheduleResponse schedule; + @SerializedName("rating") + @Expose + private RatingResponse rating; + @SerializedName("weight") + @Expose + private int weight; + @SerializedName("network") + @Expose + private NetworkResponse network; + @SerializedName("webChannel") + @Expose + private Object webChannel; + @SerializedName("dvdCountry") + @Expose + private Object dvdCountry; + @SerializedName("externals") + @Expose + private ExternalsResponse externals; + @SerializedName("image") + @Expose + private ImageResponse image; + @SerializedName("summary") + @Expose + private String summary; + @SerializedName("updated") + @Expose + private int updated; + @SerializedName("_links") + @Expose + private LinksResponse links; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public List getGenres() { + return genres; + } + + public void setGenres(List genres) { + this.genres = genres; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getRuntime() { + return runtime; + } + + public void setRuntime(int runtime) { + this.runtime = runtime; + } + + public int getAverageRuntime() { + return averageRuntime; + } + + public void setAverageRuntime(int averageRuntime) { + this.averageRuntime = averageRuntime; + } + + public String getPremiered() { + return premiered; + } + + public void setPremiered(String premiered) { + this.premiered = premiered; + } + + public String getOfficialSite() { + return officialSite; + } + + public void setOfficialSite(String officialSite) { + this.officialSite = officialSite; + } + + public ScheduleResponse getSchedule() { + return schedule; + } + + public void setSchedule(ScheduleResponse schedule) { + this.schedule = schedule; + } + + public RatingResponse getRating() { + return rating; + } + + public void setRating(RatingResponse rating) { + this.rating = rating; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public NetworkResponse getNetwork() { + return network; + } + + public void setNetwork(NetworkResponse network) { + this.network = network; + } + + public Object getWebChannel() { + return webChannel; + } + + public void setWebChannel(Object webChannel) { + this.webChannel = webChannel; + } + + public Object getDvdCountry() { + return dvdCountry; + } + + public void setDvdCountry(Object dvdCountry) { + this.dvdCountry = dvdCountry; + } + + public ExternalsResponse getExternals() { + return externals; + } + + public void setExternals(ExternalsResponse externals) { + this.externals = externals; + } + + public ImageResponse getImage() { + return image; + } + + public void setImage(ImageResponse image) { + this.image = image; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public int getUpdated() { + return updated; + } + + public void setUpdated(int updated) { + this.updated = updated; + } + + public LinksResponse getLinks() { + return links; + } + + public void setLinks(LinksResponse links) { + this.links = links; + } +} + diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/NetworkResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/NetworkResponse.java new file mode 100644 index 0000000..d71a7e8 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/NetworkResponse.java @@ -0,0 +1,41 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class NetworkResponse { + + @SerializedName("id") + @Expose + private int id; + @SerializedName("name") + @Expose + private String name; + @SerializedName("country") + @Expose + private CountryResponse country; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public CountryResponse getCountry() { + return country; + } + + public void setCountry(CountryResponse country) { + this.country = country; + } +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/PreviousepisodeResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/PreviousepisodeResponse.java new file mode 100644 index 0000000..af7baa6 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/PreviousepisodeResponse.java @@ -0,0 +1,20 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class PreviousepisodeResponse { + + @SerializedName("href") + @Expose + private String href; + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/RatingResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/RatingResponse.java new file mode 100644 index 0000000..717de44 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/RatingResponse.java @@ -0,0 +1,20 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class RatingResponse { + + @SerializedName("average") + @Expose + private Float average; + + public Float getAverage() { + return average; + } + + public void setAverage(Float average) { + this.average = average; + } + +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/ScheduleResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/ScheduleResponse.java new file mode 100644 index 0000000..3219232 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/ScheduleResponse.java @@ -0,0 +1,33 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class ScheduleResponse { + + @SerializedName("time") + @Expose + private String time; + @SerializedName("days") + @Expose + private List days = null; + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public List getDays() { + return days; + } + + public void setDays(List days) { + this.days = days; + } + +} diff --git a/app/src/main/java/com/example/smoathapplication/models/home/response/SelfResponse.java b/app/src/main/java/com/example/smoathapplication/models/home/response/SelfResponse.java new file mode 100644 index 0000000..2389e43 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/models/home/response/SelfResponse.java @@ -0,0 +1,20 @@ +package com.example.smoathapplication.models.home.response; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class SelfResponse { + + @SerializedName("href") + @Expose + private String href; + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + +} diff --git a/app/src/main/java/com/example/smoathapplication/util/AppConst.java b/app/src/main/java/com/example/smoathapplication/util/AppConst.java new file mode 100644 index 0000000..0ab6fe7 --- /dev/null +++ b/app/src/main/java/com/example/smoathapplication/util/AppConst.java @@ -0,0 +1,5 @@ +package com.example.smoathapplication.util; + +public class AppConst { + public static final int PICK_IMAGE = 100; +} diff --git a/app/src/main/res/drawable/ic_no_data.xml b/app/src/main/res/drawable/ic_no_data.xml new file mode 100644 index 0000000..5b008fa --- /dev/null +++ b/app/src/main/res/drawable/ic_no_data.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_no_internet.xml b/app/src/main/res/drawable/ic_no_internet.xml new file mode 100644 index 0000000..2fe9d41 --- /dev/null +++ b/app/src/main/res/drawable/ic_no_internet.xml @@ -0,0 +1,1921 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_server_down.xml b/app/src/main/res/drawable/ic_server_down.xml new file mode 100644 index 0000000..8f87c30 --- /dev/null +++ b/app/src/main/res/drawable/ic_server_down.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 6e8cb9d..b9ab339 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -47,11 +47,11 @@ android:id="@+id/home_image_view_info" android:layout_width="0dp" android:layout_height="35dp" - android:src="@drawable/ic_baseline_info" android:layout_gravity="center" android:layout_marginStart="10dp" android:layout_marginEnd="8dp" android:layout_weight="1" + android:src="@drawable/ic_baseline_info" app:tint="@color/background" /> @@ -60,6 +60,7 @@ android:id="@+id/home_recycler_offer" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="8dp" android:orientation="horizontal" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" @@ -67,11 +68,11 @@ tools:listitem="@layout/offer_list_item" /> + android:src="@drawable/ic_baseline_add" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index ec19a1f..36c2beb 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ buildscript { repositories { google() jcenter() + mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:4.1.3"