From ca17290ec229ed9b5c6cad2e7906801ea934ea2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20P=C3=B3=C5=82grabia?= Date: Sun, 28 Aug 2016 13:14:26 +0200 Subject: [PATCH] Adding better prev/next buttons, better panoramio image shower. --- app/images/nav_left.svg | 1 + app/images/nav_right.svg | 1 + .../urbanexplorer/MainActivity.java | 15 +---- .../callbacks/PanoramioResponseCallback.java | 10 +++ .../callbacks/PanoramioResponseStatus.java | 10 +++ .../urbanexplorer/dto/PanoramioImageInfo.java | 52 ++++++++++++++-- .../dto/PanoramioMapLocation.java | 46 ++++++++++++++ .../urbanexplorer/dto/PanoramioResponse.java | 57 ++++++++++++++++++ .../urbanexplorer/fragments/HomeFragment.java | 29 ++++++--- .../fragments/PanoramioShowerFragment.java | 19 +++++- .../urbanexplorer/utils/ImageLoaderUtils.java | 17 ++++++ .../urbanexplorer/utils/PanoramioUtils.java | 42 +++++++++++-- app/src/main/res/drawable/nav_left.png | Bin 0 -> 14312 bytes app/src/main/res/drawable/nav_right.png | Bin 0 -> 14501 bytes app/src/main/res/layout/fragment_home.xml | 16 ++--- .../res/layout/fragment_panoramio_shower.xml | 46 +++++++++++++- 16 files changed, 322 insertions(+), 39 deletions(-) create mode 100644 app/images/nav_left.svg create mode 100644 app/images/nav_right.svg create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseCallback.java create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseStatus.java create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioMapLocation.java create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioResponse.java create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/ImageLoaderUtils.java create mode 100644 app/src/main/res/drawable/nav_left.png create mode 100644 app/src/main/res/drawable/nav_right.png diff --git a/app/images/nav_left.svg b/app/images/nav_left.svg new file mode 100644 index 0000000..6fab838 --- /dev/null +++ b/app/images/nav_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/images/nav_right.svg b/app/images/nav_right.svg new file mode 100644 index 0000000..346a8a1 --- /dev/null +++ b/app/images/nav_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java index a72565f..5a85ce3 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java @@ -9,15 +9,13 @@ import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; -import com.nostra13.universalimageloader.core.assist.ImageScaleType; -import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import pl.tpolgrabia.urbanexplorer.dto.PanoramioImageInfo; import pl.tpolgrabia.urbanexplorer.fragments.HomeFragment; import pl.tpolgrabia.urbanexplorer.fragments.PanoramioShowerFragment; +import pl.tpolgrabia.urbanexplorer.utils.ImageLoaderUtils; public class MainActivity extends ActionBarActivity { - private static final int LOCATION_SETTINGS_REQUEST_ID = 1; private static final String CLASS_TAG = MainActivity.class.getSimpleName(); private static final String PHOTO_BACKSTACK = "PHOTO_BACKSTACK"; public static DisplayImageOptions options; @@ -30,10 +28,7 @@ public class MainActivity extends ActionBarActivity { // setSupportActionBar(toolbar); // UNIVERSAL IMAGE LOADER SETUP - DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() - .cacheOnDisc(true).cacheInMemory(true) - .imageScaleType(ImageScaleType.EXACTLY) - .displayer(new FadeInBitmapDisplayer(300)).build(); + DisplayImageOptions defaultOptions = ImageLoaderUtils.createDefaultOptions(); options = defaultOptions; @@ -65,18 +60,12 @@ public class MainActivity extends ActionBarActivity { public void switchToPhoto(PanoramioImageInfo photoInfo) { FragmentManager fragmentManager = getSupportFragmentManager(); - //HomeFragment homeFragment = (HomeFragment) fragmentManager.findFragmentById(R.id.home_frag); FragmentTransaction ctx = fragmentManager.beginTransaction(); -// ctx.remove(homeFragment); - - // TODO add inserting photo showing fragment - PanoramioShowerFragment panoramioShower = new PanoramioShowerFragment(); Bundle arguments = new Bundle(); arguments.putSerializable(PanoramioShowerFragment.PANORAMIO_PHOTO_ARG_KEY, photoInfo); panoramioShower.setArguments(arguments); - // ctx.add(R.id.fragments, panoramioShower); ctx.replace(R.id.fragments, panoramioShower); ctx.addToBackStack(PHOTO_BACKSTACK); diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseCallback.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseCallback.java new file mode 100644 index 0000000..0153e8e --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseCallback.java @@ -0,0 +1,10 @@ +package pl.tpolgrabia.urbanexplorer.callbacks; + +import org.json.JSONObject; + +/** + * Created by tpolgrabia on 28.08.16. + */ +public interface PanoramioResponseCallback { + void callback(PanoramioResponseStatus status, JSONObject response); +} diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseStatus.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseStatus.java new file mode 100644 index 0000000..49507b4 --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/callbacks/PanoramioResponseStatus.java @@ -0,0 +1,10 @@ +package pl.tpolgrabia.urbanexplorer.callbacks; + +/** + * Created by tpolgrabia on 28.08.16. + */ +public enum PanoramioResponseStatus { + GENERAL_ERROR, + NETWORK_ERROR, + SUCCESS +} diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioImageInfo.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioImageInfo.java index 19dc586..1fbe599 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioImageInfo.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioImageInfo.java @@ -1,7 +1,6 @@ package pl.tpolgrabia.urbanexplorer.dto; import java.io.Serializable; -import java.util.Date; /** * Created by tpolgrabia on 27.08.16. @@ -13,8 +12,13 @@ public class PanoramioImageInfo implements Serializable{ private Long ownerId; private String photoFileUrl; private String photoTitle; - private Date uploadDate; + private String uploadDate; private Double width; + private Double latitude; + private Double longitude; + private String ownerUrl; + private Long photoId; + private String photoUrl; public Double getHeight() { return height; @@ -56,11 +60,11 @@ public class PanoramioImageInfo implements Serializable{ this.photoTitle = photoTitle; } - public Date getUploadDate() { + public String getUploadDate() { return uploadDate; } - public void setUploadDate(Date uploadDate) { + public void setUploadDate(String uploadDate) { this.uploadDate = uploadDate; } @@ -71,4 +75,44 @@ public class PanoramioImageInfo implements Serializable{ public void setWidth(Double width) { this.width = width; } + + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + + public Double getLatitude() { + return latitude; + } + + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + + public Double getLongitude() { + return longitude; + } + + public void setOwnerUrl(String ownerUrl) { + this.ownerUrl = ownerUrl; + } + + public String getOwnerUrl() { + return ownerUrl; + } + + public void setPhotoId(Long photoId) { + this.photoId = photoId; + } + + public Long getPhotoId() { + return photoId; + } + + public void setPhotoUrl(String photoUrl) { + this.photoUrl = photoUrl; + } + + public String getPhotoUrl() { + return photoUrl; + } } diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioMapLocation.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioMapLocation.java new file mode 100644 index 0000000..bdbd88f --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioMapLocation.java @@ -0,0 +1,46 @@ +package pl.tpolgrabia.urbanexplorer.dto; + +import java.io.Serializable; + +/** + * Created by tpolgrabia on 28.08.16. + */ +public class PanoramioMapLocation implements Serializable{ + private static final long serialVersionUID = -3048527017887972550L; + private Double latitude; + private Double longitude; + private Long zoom; + + public Double getLatitude() { + return latitude; + } + + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + + public Double getLongitude() { + return longitude; + } + + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + + public Long getZoom() { + return zoom; + } + + public void setZoom(Long zoom) { + this.zoom = zoom; + } + + @Override + public String toString() { + return "PanoramioMapLocation{" + + "latitude=" + latitude + + ", longitude=" + longitude + + ", zoom=" + zoom + + '}'; + } +} diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioResponse.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioResponse.java new file mode 100644 index 0000000..ef07cdb --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/dto/PanoramioResponse.java @@ -0,0 +1,57 @@ +package pl.tpolgrabia.urbanexplorer.dto; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by tpolgrabia on 28.08.16. + */ +public class PanoramioResponse implements Serializable{ + private static final long serialVersionUID = 8840731825651350777L; + private List photos; + private Long count; + private Boolean moreAvailable; + private PanoramioMapLocation mapLocation; + + public List getPhotos() { + return photos; + } + + public void setPhotos(List photos) { + this.photos = photos; + } + + public Long getCount() { + return count; + } + + public void setCount(Long count) { + this.count = count; + } + + public Boolean getMoreAvailable() { + return moreAvailable; + } + + public void setMoreAvailable(Boolean moreAvailable) { + this.moreAvailable = moreAvailable; + } + + public PanoramioMapLocation getMapLocation() { + return mapLocation; + } + + public void setMapLocation(PanoramioMapLocation mapLocation) { + this.mapLocation = mapLocation; + } + + @Override + public String toString() { + return "PanoramioResponse{" + + "photos=" + photos + + ", count=" + count + + ", moreAvailable=" + moreAvailable + + ", mapLocation=" + mapLocation + + '}'; + } +} diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java index 268e67e..7fbe69d 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java @@ -26,6 +26,8 @@ import pl.tpolgrabia.urbanexplorer.dto.PanoramioImageInfo; import pl.tpolgrabia.urbanexplorer.utils.NumberUtils; import pl.tpolgrabia.urbanexplorer.utils.PanoramioUtils; +import java.text.ParseException; +import java.util.ArrayList; import java.util.List; import static android.content.Context.LOCATION_SERVICE; @@ -39,6 +41,8 @@ public class HomeFragment extends Fragment implements LocationListener { private static final long MIN_TIME = 60000; private static final float MIN_DISTANCE = 100; private static final int LOCATION_SETTINGS_REQUEST_ID = 1; + private static final String LOCATIONS_LIST_IMAGE_SIZE = "medium"; + private static final String LOCATIONS_ORDER = "popularity"; private boolean gpsLocationEnabled; private boolean networkLocationEnabled; private boolean locationEnabled; @@ -46,13 +50,14 @@ public class HomeFragment extends Fragment implements LocationListener { private String locationProvider; private boolean locationServicesActivated = false; private AQuery aq; + private View inflatedView; private TextView pageSizeWidget; private TextView pageIdWidget; private Long pageId = 1L; private ListView locations; - private Button prevWidget; - private Button nextWidget; + private ImageView prevWidget; + private ImageView nextWidget; private Long photosCount; private TextView locationsResultInfo; @@ -165,8 +170,8 @@ public class HomeFragment extends Fragment implements LocationListener { } }); - prevWidget = (Button)inflatedView.findViewById(R.id.prev); - nextWidget = (Button)inflatedView.findViewById(R.id.next); + prevWidget = (ImageView)inflatedView.findViewById(R.id.prev); + nextWidget = (ImageView)inflatedView.findViewById(R.id.next); prevWidget.setOnClickListener(new View.OnClickListener() { @Override @@ -193,6 +198,10 @@ public class HomeFragment extends Fragment implements LocationListener { private void fetchPanoramioLocations() { + fetchPanoramioPhotos(); + } + + private void fetchPanoramioPhotos() { final Location location = locationService.getLastKnownLocation(locationProvider); Double radiusX = fetchRadiusX(); Double radiusY = fetchRadiusY(); @@ -204,7 +213,8 @@ public class HomeFragment extends Fragment implements LocationListener { "&miny=" + (location.getLatitude() - radiusY) + "&maxx=" + (location.getLongitude() + radiusX) + "&maxy=" + (location.getLatitude() + radiusX) + - "&size=medium" + + "&size=" + LOCATIONS_LIST_IMAGE_SIZE + + "&order=" + LOCATIONS_ORDER + "&mapfilter=true"; Log.d(CLASS_TAG, "Query: " + aqQuery); aq.ajax(aqQuery, @@ -219,8 +229,13 @@ public class HomeFragment extends Fragment implements LocationListener { return; } - List photosInfos = - PanoramioUtils.fetchPanoramioImagesFromResponse(object); + List photosInfos; + try { + photosInfos = PanoramioUtils.fetchPanoramioImagesFromResponse(object.getJSONArray("photos")); + } catch (ParseException e) { + Log.w(CLASS_TAG, "Parse exception", e); + photosInfos = new ArrayList<>(); + } photosCount = PanoramioUtils.fetchPanoramioImagesCountFromResponse(object); locationsResultInfo = (TextView)inflatedView.findViewById(R.id.locations_result_info); diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/PanoramioShowerFragment.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/PanoramioShowerFragment.java index 5978895..ca5887a 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/PanoramioShowerFragment.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/PanoramioShowerFragment.java @@ -22,6 +22,10 @@ public class PanoramioShowerFragment extends Fragment { public static final String PANORAMIO_PHOTO_ARG_KEY = "PANORAMIO_PHOTO_ARG_KEY"; private TextView photoTitle; + private TextView photoUploadDate; + private TextView photoAuthor; + private TextView photoUrl; + private TextView photoLocation; public PanoramioShowerFragment() { // Required empty public constructor @@ -47,8 +51,21 @@ public class PanoramioShowerFragment extends Fragment { (ImageView) inflatedView.findViewById(R.id.photo_container), MainActivity.options); - photoTitle = (TextView)inflatedView.findViewById(R.id.phot_title); + photoTitle = (TextView)inflatedView.findViewById(R.id.photo_title); photoTitle.setText(imageInfo.getPhotoTitle()); + + photoUploadDate = (TextView)inflatedView.findViewById(R.id.photo_upload); + photoUploadDate.setText(imageInfo.getUploadDate()); + + photoAuthor = (TextView)inflatedView.findViewById(R.id.photo_author); + photoAuthor.setText(imageInfo.getOwnerName()); + + photoUrl = (TextView)inflatedView.findViewById(R.id.photo_url); + photoUrl.setText(imageInfo.getPhotoUrl()); + + photoLocation = (TextView)inflatedView.findViewById(R.id.photo_location); + photoLocation.setText(imageInfo.getLatitude() + "," + imageInfo.getLongitude()); + } return inflatedView; diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/ImageLoaderUtils.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/ImageLoaderUtils.java new file mode 100644 index 0000000..f823bc0 --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/ImageLoaderUtils.java @@ -0,0 +1,17 @@ +package pl.tpolgrabia.urbanexplorer.utils; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +/** + * Created by tpolgrabia on 28.08.16. + */ +public class ImageLoaderUtils { + public static DisplayImageOptions createDefaultOptions() { + return new DisplayImageOptions.Builder() + .cacheOnDisc(true).cacheInMemory(true) + .imageScaleType(ImageScaleType.EXACTLY) + .displayer(new FadeInBitmapDisplayer(300)).build(); + } +} diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/PanoramioUtils.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/PanoramioUtils.java index 0357b0c..cae65f0 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/PanoramioUtils.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/utils/PanoramioUtils.java @@ -4,8 +4,12 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import pl.tpolgrabia.urbanexplorer.dto.PanoramioImageInfo; +import pl.tpolgrabia.urbanexplorer.dto.PanoramioMapLocation; +import pl.tpolgrabia.urbanexplorer.dto.PanoramioResponse; import pl.tpolgrabia.urbanexplorer.exceptions.PanoramioResponseNotExpected; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -14,12 +18,22 @@ import java.util.List; */ public class PanoramioUtils { - public static PanoramioImageInfo fetchPanoramioDto(JSONObject photo) throws JSONException { + private static SimpleDateFormat panoramioDateFormatter = new SimpleDateFormat("dd MMMMMMMMMMMMMM yyyy"); + + public static PanoramioImageInfo fetchPanoramioDto(JSONObject photo) throws JSONException, ParseException { PanoramioImageInfo info = new PanoramioImageInfo(); info.setPhotoTitle(photo.getString("photo_title")); info.setPhotoFileUrl(photo.getString("photo_file_url")); info.setWidth(photo.getDouble("width")); info.setHeight(photo.getDouble("height")); + info.setLatitude(photo.getDouble("latitude")); + info.setLongitude(photo.getDouble("longitude")); + info.setOwnerId(photo.getLong("owner_id")); + info.setOwnerName(photo.getString("owner_name")); + info.setOwnerUrl(photo.getString("owner_url")); + info.setPhotoId(photo.getLong("photo_id")); + info.setPhotoUrl(photo.getString("photo_url")); + info.setUploadDate(photo.getString("upload_date")); return info; } @@ -31,14 +45,13 @@ public class PanoramioUtils { } } - public static List fetchPanoramioImagesFromResponse(JSONObject object) throws JSONException { + public static List fetchPanoramioImagesFromResponse(JSONArray photos) throws JSONException, ParseException { - JSONArray photos = object.getJSONArray("photos"); if (photos == null) { - throw new PanoramioResponseNotExpected("Panoramio response doesn't contain phots"); + throw new PanoramioResponseNotExpected("photos arg cannot be null"); } - List photosInfos = new ArrayList(); + List photosInfos = new ArrayList<>(); int n = photos.length(); for (int i = 0; i < n; i++) { photosInfos.add( @@ -48,4 +61,23 @@ public class PanoramioUtils { return photosInfos; } + + public static PanoramioResponse fetchPanoramioResponse(JSONObject panoramioResponse) throws JSONException, ParseException { + PanoramioResponse response = new PanoramioResponse(); + response.setCount(panoramioResponse.getLong("count")); + response.setMoreAvailable(panoramioResponse.getBoolean("has_more")); + response.setPhotos(fetchPanoramioImagesFromResponse(panoramioResponse.getJSONArray("photos"))); + response.setMapLocation(fetchPanoramioLocation(panoramioResponse.getJSONObject("map_location"))); + return response; + } + + private static PanoramioMapLocation fetchPanoramioLocation(JSONObject mapLocation) throws JSONException { + PanoramioMapLocation location = new PanoramioMapLocation(); + location.setLatitude(mapLocation.getDouble("lat")); + location.setLongitude(mapLocation.getDouble("lon")); + location.setZoom(mapLocation.getLong("panoramio_zoom")); + return location; + } + + } diff --git a/app/src/main/res/drawable/nav_left.png b/app/src/main/res/drawable/nav_left.png new file mode 100644 index 0000000000000000000000000000000000000000..249ff2934823a64aeb7ba353ee29c8285432c07c GIT binary patch literal 14312 zcma*ObyQT}7dNb;A|Xf%!k|(P-5nA`cMUP1bl1==B`|cuNDkfIp@4KbbaxCbFf_u$ z_g(Mbzvo%&e%4+0#6Ge2+4r2i&kk2rmU)d$f&Jvklh<;xQtD5hJVpP9SI-|)j8@2= zKE9qAE67Mac?gXe{`vTY6P6>p$`ic?kxWfhW%=3*TrN8wgFXWpWz~qqKa1xTqs`gA(IvlqG4u}B3s#Cm zaJ-CqZGvrmhd{i~{tbJD%?Ns)S87>A>a}xG(;-Gkw63t=Y(6@it~=&`$IsKa^~ED`lbJf+*+_&UQ=}z%aH>IB zQhnK$LWe1a(5#YxfGJ@vTz;^qrU^_sXKGwj5U5T_tQzq$efWeM!4ahxP1*>n$b)4l zC0FQ;rj(iTtZ2xws>;QM`g15#=A=G9w;TqhD>CU7T`;z+^CtPw4P8Yx`-}phz{1}@ zu_Xg>VMPi|g5z)v%QD>#SOve#mBcoCR7e>EX18Gp#zk-%ZBZUKe{aY|{BGbX_*;qA&q|@`CzJb{D zP#UsS3Oy1{G}?4OxDivh2O1fZyW06aOMY}!kd-?`kL5AT$RgpSG}A;N?Eu+z#rGo7 znU~M8V_>>V71=$?Og^G->LDn{v)J;kV#{24GSibpq|E6qNejO=1W`xMc?MIg5%~Va zF<;Kos0g(tp336CRv+fpBoK3`1sQZyo|>&dU}lL##>sp#XVa@0HTI@CGXI8*BGg3x zIxQFOs?9z;p&eit&A{b&p-0T<^+)Gp%wGyEE1_`N_FtWOo*F- zks2c|*VG*v0~%npfqWAG?2O0Sh03Q!W%vP`-zjVQvthW84hS3X$9N`1g{PB->VN(=yvOMtm8~q1z_{Q144F&iWU1aDnXt|`!&24sQ zjj3**z0pf&9xRf>5ri_bSf4>G+Uh%;@74{aofR+2|ClA;`T@%Mas+ zkKC+t0JHKArJ%F*dv{G1<4m7n7t(m8BsR0eRpQK?{Ktu8=w@sV5ddc4C1k^MQPTK= z6STxyP4F$wh|8-~D5FODwQ20gRHU`nZ|m|(#uf}la=M=iyT7O3h9r)|hMM{7oZG-d z+=j*g&jaN(!8=N*2mC3;jFyXja=)3+j~Y{Magy`q)H75fX(-@e%QtOUh*%@7#!U3O zZsUarsXR!`N51Kcv<5srCr`MQ5Qal2d5>>aHRAhMh&V-iqwLxNU9EMaro$wC~GbDV#4L>MeKii5?{MfxA_Zw^P z#GT4T19>^aO3k<-y!4zgI_GsG)M#_;Ez6dYXYiJ$2me%WY_|is{iG|2FSU06we4Tq zr=cIR`1!c_)r)U(bm&!12s!XAfSVJraH|yz1cI8rYva^LUU<)B?7i|kKP87loMi{w ztoQg;$XXHS+Ww6fqu?nmv=V1*2q6E!$r!z3sEmZUshSUn44>Irs|PxJu%60DN~x@i0l)TNZrvL-9V#zF{^mz7;LOlIYo+`UT}113R)0Z=VYTONKiofed@E~H zSo-geexm+6-Ixdd_EnZL0>O*WA=A@W}06bk`bR6nhTBuE8puHX-Y7^ugs z;${{U(Bx(!G`h?q8>y-F?+k2W%uGQYGK@tT> zUQP!#&J3rRmJ(0A5aD5pTzKIpfK!yNg*`2P<9C+Q*#X@)f;4`z@G!%kH{{3bsh+GU zC#m+*D2&q0LS{E7azy|>=Wr3qs?%^ZMa5u3I7^~;T#2UHK{2+IRasy8FVQ`5zzZ3x zhu1$-+&E|GMqW2B{<6-6-wu4PEtvVd2secM*11t|norS#%b>T$lMGnPVS_uCy}NRm zPmN%ZAwY`Y4pbnM+{!OrUoWELvsYDL62UC)`rUUUddb%~xZX`lhS1_5o(PjPNs(Mc zXsqsdiZPg5W&tPN3>i*&Wl_GR4FFg7|6~$H)qMwtF&W%kg5M+^0M`h9vea^VqE^5TYjl< zAVf~)j2YV_BAQ}Ia%6~;b~i^$@gV@a;QAJ?<(_lpwG`IDl>1k;~Nyh^DKr;=X? zb5xcZl~M3b?0VejuLahb$&2Rq$(w`c&}nFeW=IFE1OTb9OPj^u%Kjz&W_Yrg!)h3^ z+XpB~Xp#(!@cgjJLpw=e(4?+SpYI7Mtkx;)&EugODV(Ge3Kt?ip}-G^9epvT*GRAq z*g_`Y(=^2S6I+=lGutXEtCy^d4drNy{4T!b;uHps5TVW5GQB7W+?*Q96s=7~I=x*u z8NFa>jARVO*Pk3Bdbu`kl!s831iO{Dba%USzjj1_OkeeA^C9?qjj z5+gGXgS60z)pnZD34=$e+L(VzCa~USE}eCDu+nq z>PCqc2bM}aH*;_DIeEhEn|(y{o7Ipan>GS0;m$QgxLe{=ketAK&OWDKVNTpkia7;G zhSe#{a-g%UqHXLax@~szar=MwtQ*)>r9hW2*PwGKk5MRK=geXXa!od;$iX0#$pY?W z29T005dq@Jqb+#1kXhBzBH)X1qT?UZ(L2A$oW!VMup_|;)4UDwI7kb-a$(;mF~rMS zKuPFC5LZNVB9%z@se$A;IauCVcgJzclb(Tng|^O+>DH(`y;nJuhe?^QAedGOS1z?x zj#t2k{QLayXCCl{3JuqYQz3+$`V1mFeyJ*j26Fy#nm7DKsb{?b5qRY=XcjHwOz0zB z`)0E8jTCxhq0+I;6Of?gy!9sC;>bDuEXgqkC-ieM>Q#`n;6wdC8WBzBt=PM+yWcr` zQ)L?fHDtmzN195rBiLlGu%Jb`c?S*r623s=3VQg#j2Q29ovYh^It6iJ{=MQo^;_-*qdE5w2-Il2 zAG{V#_(_swc`qsFT+2yuWcQfgwm5}7jFDvN`@5I?`*veyoIHg#W?J!Unp}fw;EJkD z1`LV`j5%_?p0$cYEWb`!rG=zC08}|ZW~k?d+GzW1uxi@@E}qvv`Ul(hbB$x z6K*{q`$RITsh*81nN_@FT!<9)UeOAtvcuy*(vSrmG~x{>imS$6zdqhrjQ1dWZ(OhB z#{|F-i!>KU;t89ohFyYE9t8E1HH&D{YTCCE))h@-z-`u3DhRlDsgxT*9hKtC7sUeJrPd-fw`iJeT`#W43w1Q8^omh@nArv^(?h+rlPNI;P5QG*9;z}cUkHko9 z5&JaiwU9O4>k4d2%@qI|iOwXVnu7JKakrQFaqd@ZYpFZIqhh}-qe*jehpE@Mml z$ISRvO5A&1Q`h&TdM`dAR`%a_4r~igLF7L0r3vCy%y%|@{*8Vjg?8AKk~uu9EUrW_ z0XH!ORysRm&ULB3(Xl=aL%9p-^v16$KUU&cQerqrTI$Am8n)XZgLWNX6c?@>nt$R@ zUYf^Lnx7vuuNQjk6Z2nQC{^9q*)>r~bG#Qk^#h*yKoa}FW$KZ$)QXbtet6~ghT)ky zgOlQ30E19@rFE}-mQC3h!9QU2!+o=G{<+dgxWtirm7^;Lmv8iLhcp^{Z@_K;OF>0j zNHmw;pr%*y!P{#BH|07OoPKop{Wwr z{)~hfZ#zNsq;bb$%HON{PT|jZZ+SpPpAlYzC+V}@e!IK+Nco6#!gxC)Ul=N%lCDAF{#56)Gs%)W>EL_3#c;h)cguI-jcCN8G1Y{MNsfxy zhK7{CmhD5;8t#n{yhj z$fi-3e$zOzTF;0kVxi1EzSLAPQT?(qFY27){euOL&7f#lcgE%4hbG=<4mNx;`dN4S z{n`m6Nn!U4`(N&!9cfJXNWEpr;J@2dijhKSVqX^rvCypirSrV}fJkvpoTWdipG6HF zXFsdT-Ep0`xAz=@>PfvX@MmJs$s(N%pA$`t#3%Uoy855fzy_4Y!|qehv!CNmUo@)#Z#Txt8Fn7-X+F}SZT4AIOMG`@6`E1+%;L64 z(jdw?f;$)sm|s3M-p|yfc3U_|4HlJKef0#9kAcL|;nT&+>H3ob)K^l<@6Nt&l%COO zC^zb|>9H6EzCOZpB7rLXPzed)}@cM&>lHTm=5l7YM8Oy%(}#&-kIiakzh#| zxdY7?iq6cMx)c9l3Q8B$oi@*MDwLZt$1fvd8t;RqAde!FKOCoV?7=kPT^IIybsqn2 zu|={X-7|g~@h}CovW|?Xr(x{@dV@RUZbW~EX%^S>otGtCl1&I8{An66csy}6Zq-w3 zvKYFHWp6~Oni!3BXW55zkCP%*P67sjB);kAB(CW9J&7C&^NS}9IF|yjYE!AQg9>Zw zQad_lT04;cC={r`%2(_Ul%JE4Gq{1jBK0-QJHc+J>`%s znEI@N8O7$Vw%e64eJM8h7OmK8 z6*s~e_xWJo8^!NZluSBYq{B};bgT_)XJvVqfxfF6-M{H$69|zO`m6&?e*o^_xwfVDL|@Sz%L>;wtTmA4lpd(uJ7l45bWRG= zfGHsY==}qJ+#FwnZ{}vYQ$x+VquVgfl$Ie%;G4X)^P|wVL$yVtM|O8te$bEBfkRJa zNPyNLa>>w}PEm;r$v41SI@U*?ecn@__)iq<#%VR?b7R9SR;JmOutnlL4nohF>cf^5 z_9Jk7-j~}bI|I$K%qWVtLkB`Ob$vTh9cWpkvWx`28%n<`*JRB*XrD#N58gKv9B8{V zq*ErR#iwRILl)}O$FQJ3_t0J|w=^f#Wc3)|?2c8Clt(Tx28y(0;UQ9V(o0^)iaV4u z$(?l6ZJ0cY!|wLmsl|9)T%(vL=!2~!`htMrJAgdV(5t>>vkWRy8Q3qR^0kz5XNrUy!bdM|J zwMOHEi(cM=MeF3ya#Rm`I!kB9(rAt800P+yFgIi8R3cPg#t6u;kCli-k_4Hw)Y{Lk!?kIAwo;kCq#&9(L z79tQ)`z~TPzj_fvQ0GE9L=fT6;1+t6G%jz`|H0Ehxn8vI=y9H09z{3;{H zm+uj?_K3(9zeyvxMMaPRLjZwq{no0ULOC_&+VS{z6^PvWkr}+W5bh0IvmE+93IE%G z{8>e@F|tYfSR^~r2+AP@X_~0^`6Wv<@$o#pS38T}EqZ+S5i^^bVD7O^!vgEU%$qR#=BoT*Xe1*$!l3~I zo|4_~{RuQng>)&C9Zh~qn;$yD!7Aky{5{8*L+o3+<&s8JZ+{n2nU|};a(1R8oLAcm z&8ni3TcH@`z2PlYvNfSVKJ=7A+nK6`6TUdb^g^kN$K)ea-hp}FoQR{3%au1r*JR7d z6QQ9B)oo8VcJrzi!3SO$CBjiC!2Rk1)$|WJJEgh&AO(2V*!qW(<`qhl^Ice#v`gzq zs7YK5%4CavXyX$;TAq5!?hUO+MeI%cF<5MCEBOt5F5+aDq;_{iO|Qx#%U9$px)vsC1izchpt@ zS-bFigm-GoBe__hoS{FtLX>r;JwZDKRu-y(K!ib^&wEI&+pNo@U{z6(G0dT&GQG-kfatA zTea^bX&*J1@NrL-q5)~5xkw<0tYuz6ZN-&5v5SZ8b~j16p*5odV+?+@!Vf;=5G^&7 zt5FnV{}CJ5XP7Xbr+mF1(8ubdMc^-Z2x5!SeDRi@cFyqZ++~YHX>EcL0rup#8|Ff8 zB-^1aL1;ad7{?sKrQR1cc8Pn$kb{C>VP-oS(&#sT6($BlTH6M!+%2)QSP4YByBSVY zU0OkxTLh)goR+H=>Cm5ncXPsJKp#CR^e{Wj{zprSOa&pO#kM1iDQOpPG_IUTvvgH0 z=^kMtCC2@Fq|m&G$sH~+^mKx!3{%-T{2Pi$3oV(@ZF%AWexuJsn*uj zB18>+^|`gqOvSXcTg&`uxj{JfB~pXe5`vE_L@V?Uq@q)BO+j;x)#&ZcDCknn$f-egiGkEH(>xv!q-})BQ&l#U+SK&xLX@_?Uc&CKZv5Kn^BMK4w7N9|t)v?mtwS;C2l0jjYxQi2l4P@V_0SzZ*i7wk7oXFbjcBsTVbxbmzQHxA;FS4 zq)L(IM%0vJP_ZBx$9;aV8QyjK+gyP}a(>@0Zwi~&C}}$KVf|Tcm@;erUjx&q-t$Bg z_f2hA9Z;jlOTYZ-NNVICAIl@xEfU|s-M0La!qh13tO{J4J;T15q-H~#UcY%envoR) zxwS?o(e6A*1h?4%%Bt0`wgD?2)u+p|NJ(QT9ltofn*W$k1SN#$U*f&A?yn+mWZS-6<0IZ zChJR1DUGYdFnjmOUMwRLDheGp=^_+nZlUh4w2H-DE5QNAsC~d$zSabfbi`knA7ZL7 zLbtqrBb(C3{E^RWo7{$KQzE2G--Y49V01!R!La68^K`UiY^N;ONKy}eYjb2NXw2y> z+BG?YW>EBVA-hqBl0zW_H{*)QyEq{DvCMAtY3=38gOLO+O6nL7qZe#0%7UV%VVvb zccuTZTgKSrkHhSXYz^fU37EAsw-+{p=7^b0>okp5$}fF`V5mT zUstadxgDo6K<0$d&VuaPTJCYp$!Ed~A-XR7BYP8C!&4N-*BXMuitc90Q-&4m*1++P zu2`)EdCv<&_0e3+w@WEjudBD2Ydws`Qq-^9Y7{qGa1LsO3*RSbuaUMVZAtxOv22VL zk-_s>c|YQesGV!z`1Rr=1*WE?%^le=(Z!-s(F9Ek)xwCx zH3(yCoh((A=Ph38*iI`{B4!McCEvAo2J$J5qXjDSWu-lRER0U#v7lc z9p5A1o23gT(_I~}@yS(^$I(}!ihylATr3tnNfW<=4bcfvOV=9SSD$TQOu#!zcuQi} z7iOU!mT3UdW8G1h&D!8Ix-8IG)qxuE@(g?(+it|dJoZs7DgMyPvV@2!$}_8c>d$t^ z&Sc#FmxVGBNHU=kgze*nMDmU4k17fO5!xNJRGYyMRq3&p709ZckVMy3-L5wePf%=8 zfPd&x9(VZ;z8wYCCnT{H+GnV~K}&IZex30}n{8&}aOuUE*QjwGO8gz>ty=xU zn~^^}bYmn6J=DAQ%?rIRMFu;Ai2XX4-eH5G)MSGfoqCAd9p53Aywlw@QG|Q$ue~#J zL4s)vW!|h*CWGdQA9dth`u?!Xp%oUgBJEb_qV{L0b(!Zfv|#=I z`g;Yu>o}#6g^zzEuln&&@{VHRLuQ($b;b#Eh`UL-Cfy}chSv)6z$V(b4E!kx%VbW5 zi%mQ#m&{^G+f3x*FxL@xb>T#G%(=*6H}Q~wlP4tJ5b?!!PM&RBshlS>Zs_eJ2OV}R zfOn#bRg{usH+iT5MQguUcMX|?3lE23YpTlgL^iWng#{b;9lE{U1*q!KyBb!|Rx%>Y zP?l?miT5OgJ|q(wpJwsB1zL!2Il}F$-^S|3^pdNI-E53hVTzg}?2uyVM9*26J``zA z$n*dG3^>$FJ{o3@>EV^rHN7_*Ggm*CY?B>rVE#U-_*%0gUYyx&OL@s7{3g!VLg>e& zzFA7sPSwP34YUg|0%aF@m^BXr5G7*6)0%rTv`D!4qtYG=CV=Pc&yjH+gPE*mh<9H4 zc-30$$}Ea%*bih}nG$42b#bDRF-3a~;oblY^(&X^$$!NP%%QV`*FOYPIbWuQBx71q zp~?+LFbOn$WyZ$JDt8ky5tm0=_MSbgF779jPHkx>_D*Y}BoHNZLnfSi9Wk*s930pV&(pY4`KW0)71?S3Tx3*5<1Vs#^1eAs z_oA(va>=fjjFnv>exA_CE_l!yrm15X*J-xPa`U2~>jrKyCHTeit9j}IW#L~C0b_9= zi+AR#r82t}i`P>NJwvrYYNT20eQXcS_G@dQmIi54d8^#v2HTt+M}xsE&g4BYj||sS zLy7^cx8iG%+Ems@i!KKz9lFeQ+T?BOJtE5{qwRRj>3l>cnulvRV>+o>K}uf61AE~x zmtuVK(PVUuZoJFw!t_e4sWd$mI>VFE)!I@f(CxX1Ce}BM>thiWwqQQ@ho+vZJ)06n zG+ZlwsqJ5ntXlY2q|@P8=_&)^5!+3=+2QsJ9(;LP{%Bn4;NqF&%_?5!JAD$mY>0TB z1uv6L?3WP0X$=ExNEn`fSUA}Vz1*4RFz}F0a9-38<0UHv@w_%ZQuT=YR(`Bwvgx|^>zX8nW? zK`l_#>dIzMp1@sz8F;fTa`yMBvcYlpUB4w>Zka{X&Z+Yq5U>#=ay&qnJam&y&g6>U z{OfOq@F;)B!{yJ~-4RtU5bE_|L5FLMH>-{NWHHGHWXMg;z@xQud7W8HjqfV=VxS1y5(0?zb%OY*7F`p8liH@DO#^v%^=@* zM{S+rq*aOd^%)h<0~vb!Jheqdd~q~8!VOo_W9-QMap6!KA6t)`PhJWW(_TeJmAx)K?rtZq8vY$ReP6e5&#%;o zKX&~)HNyciX<28&7vldU*gNLyYyJgvY_+HRr8ab}Xcy*h`|dp0Rd{SwJqthi!ZQvj zGQFVs>$0t)fT`nTmFi-OZPY+ito~#s4SR2hcfT~+ENNhxqVVdMpun79=DU`Yjxny! zKG7)MyDo7dUrZHCMX=8r>A~#+(c=EC^Shr>b3N5HGvdg9-8;N7grIF%wtWvg7Ts-c zgL7Y+Sc*mSc0nq}t1soQ^04Asmg@Hjz?GuTsx+Qe7Yn5J-6czV&qZz!Kua=WeA4R{!Q$f6g2G zCYOaO3f6%yu(yc;E)ZqGy{IXxeEKJNob!qj`xN*z|Y{!lig$ANU zp1G15Vooe{8i`K%3`|(JtYbaU(BV}K?(j`^aLKN8KOc%c&P&U!K6$R-!|$vo=e`^- z9=&IRq5YyPg8ysb0>DI?e_ppV_^jxUS8>ze_90jRS7_|{QR=`iDwBUq2|KGL*3-^0 z1;?<6|NMbS;UF#)QPTmZBVy+?FUW}Z)4H6+4XR)dzn(qcEqEwwVv z7f8!pFy_A9PoPe>PT}LUhw}0A@(ml4MPz=20o++xJ z?UZVsR&(%9_fy2PT;dXc{VhutUnazkA5K#6eOkNc153OtZec*Muu{g^S zo_TC8R&|&5%dqWZ7}v#kpW4G4T95c_Yrt3J8kP*ro@y^8Ky`vd#>hC<7CI?7mQ4r7 zY#Mm`6^Y}yymp-cid;9)GN|5udL64S1K$2iD1Jl%d(k{Q#s2op8Q2U+BoLq+$Z*`&W{P(ElCuyOO;TOvl3Xyh~U6Pz)UOu`eAQNU6!PG%`vnI z>4RJR3C5Hl5>@o5nFm6PH=f4w_iJGj!{%baI|?KZ6*y`+ok zp~5XEEdzhx04ui%acu$0?x&I>qWA{>D$KTQyToUa8_9yiTnRQVFMaany60-@=?Pg345v zP=tc=eJMZ# z9C5ZBqLvWs9uIbOun%NO8M%$dILuhJH*ez6nPfJ;%uUw4bs*L5=whx5sr zKco_B{}FG9Qh$o*Oc{?Jk+ZZf>XZp~f9FKB9b&MtB^WRFYlC}}W^WgoQfCo>Hsu?b zJogbTPztk=XCAIR=5+QZl(bXrrO-QRW;IrFUQRrcv(D@r%9$44M0ER_e^xI6*CbuE z@VMx4NwZq0#KRw=&m=N0)2e1put$?Yw0xl=F)~eZL|5EWS4npP?Q+x6?>s)D>$`)+ zQV-W%bW?t3V|@-Ry-HAVYr&r8E6B16Q#(@ySOr)O$ zYP3hW>j%v4{zakxU^ ztm!%izXb(PvyV8)Eak~RkTu8FNT$;d`=W~6c6H?G4KTE87I5!Eee}2ja_enaW6NT3 zt^j;)ID=cJ=Ba_)EQLBP+TWzjKfLaDTT}KyJ$6 zxD+{TkN+W=VwxKeTXvgq{VzWHo1xGJU^__ zYTPZ-@+%>Sz?9>G%bo%!RLQ;z5p{|fdwHy+6+5H>_ne9X{YMQk^7TkQTO zqB)baLrg~8wWGgM*#mkK-;bI=%3DV~WncKmdKbw;--T2EY&=p7o80xL*XstELD&)u z_WQ4Mdi)5-f_-L=S5FHThgr#J1U>`YPfEl7@&7nUk(*9L^;s3vw01$rJE1VAM!)UxSa&Pp zPIux6V>)Xa(X3fK_e+dYL~wE4w(xbRa;8GO=eU;FX>mj@tytagm|2_^@j#X_(UhKU z&mm`TPxU!<|HmNlyYDY4=BQ567Do$-H!jA%O0vdq@z*%?ND16UrtAZI{^{D!nf{6S zVuP7M(xpj0z$x$K|IZ&Uq)l?+)z286#L{Uqa{(47|DQ8Zd5?_Ix;Q>pf?=cNSsZ8^ z?kR1uq^QW1vFw8E!vVYq{99gnkcbt(>0jtG?52zlR_#wXb=}U&?vmB<;c5?&rp>}# zQE_ACkvkw(}&HqA)FT zA$_5luK0%vPq$ol=x_4Q{mgpWSo}AMYJ^9Vp5QvYJV_jwu`WYU<2ekf06+5BjGTQt zYf1-LfkpTRT7}0TH4sBzx7FZw)(y+bYRKblXE&$Tw#4|R`!QL~&*UTIzXj3>Z(w=@ z5YLDKA4ygrbu^#JCVQawxDOln@n)L&VA8>9n^H5IfGJJ-$dl21EoZMQdE2uKe4A(! z#xx*mXEw!0dEIO&0}OJ9k+uGyH1uK1e=35KPI;4l0QC9b>=6?)CufeWw=QOXvx#CA zWAr+GJVFc!8Rp@NMe7aA^yj_y-R&X|_;I5)KzJQiJX`={cDw!iT-Ovzb7`~l19pTL zvFSA?Gm8(XubCS{))i7QOk}o*ey^kw0W0eN3T57SR|8aWYN&NsPLKiL_d8JxYPs-D zOki;)A`%;BFJ;pC^EaV{8J0>W6wZ++URcHg`)038uOn5ivHJ`9H?Y`3={uc-6=aei zAonanKZY1}kna0TdT9W;rmC_X#dsts_d36|hPUxyz`*1KcEbQ~Lrt<)*{V&430bqL zdS(qrn5065_i+gdQ0v+igppam`M%~@f!_0NFm$j#Hx^DQXRsHa{Y{Y*_=NC5)Sw}i z^DCyRG(qd!FY|`#gr&p;N&4@MD%0N?*gPYJnzYF7OHj+TW}OZTqC~0vejZ}a(q7HI z`mUJ$EJ!sVNBA2jbr^*6ZSTV#r5lNes}IdjBW4m!YqdOCXt&bc{Nx{mae;4@Epr+^q$}n4)b8}_LBp*^p zR6n>asmy-E(93ZbIpmsF49m1Hi%s#2Hiij{(0@d2#>y#GtT7%!HINfzMip)SOqw9o zOWPX$c$=m`A}uEp5o}E^1;Y(jUV;cIumK<`{nuyKoDjwegiMSQXA<}-RuMK{Q_C75 zTp|z=@L_368w7^r1PPtMuQ?6!hx?_2$d=wqfWUaYhT8)&ie^}InlH@@8-mn6ljznJvSkP;snCLvB=1Ue zSe;Y*Bs%CLY%iW$6N~=f-!gT2cDO5L0k{5MfnXZ=P!^ZZY=k#7EAcF6Hf6MxUqDks z9%KGb+;qBx$do<^+?E|oQUj|m+f2U3=*koX$-e*lSdLizvz literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/nav_right.png b/app/src/main/res/drawable/nav_right.png new file mode 100644 index 0000000000000000000000000000000000000000..52ecd10d3f53a64e9944f8a2d9e2c7cb6629b784 GIT binary patch literal 14501 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index d7cdf3e..83f5419 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -54,10 +54,10 @@ -