From 18d99a30a50962590915b305d41064c1980bfaf8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tam=C3=A1s=20Szab=C3=B3?= <tamas@szaboo.com>
Date: Wed, 2 May 2018 20:27:51 +0200
Subject: [PATCH] favorites list implement

---
 .idea/caches/build_file_checksums.ser         | Bin 534 -> 534 bytes
 app/build.gradle                              |   3 +
 .../adapter/FavoriteListAdapter.java          |  96 ++++++++++++++++
 .../ui/favorites/FavoritesActivity.java       | 107 ++++++++++++++++--
 .../ui/favorites/FavoritesPresenter.java      |  27 +++--
 .../ui/favorites/FavoritesScreen.java         |   7 ++
 .../xkcdbrowser/ui/main/MainActivity.java     |   7 +-
 app/src/main/res/drawable-hdpi/ic_delete.png  | Bin 0 -> 656 bytes
 app/src/main/res/drawable-mdpi/ic_delete.png  | Bin 0 -> 410 bytes
 app/src/main/res/drawable-xhdpi/ic_delete.png | Bin 0 -> 590 bytes
 .../main/res/drawable-xxhdpi/ic_delete.png    | Bin 0 -> 1108 bytes
 .../main/res/drawable-xxxhdpi/ic_delete.png   | Bin 0 -> 1256 bytes
 app/src/main/res/layout/app_bar_favorites.xml |   7 --
 app/src/main/res/layout/comic_strip.xml       |  56 +++++++++
 app/src/main/res/layout/content_favorites.xml |   9 ++
 15 files changed, 292 insertions(+), 27 deletions(-)
 create mode 100644 app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java
 create mode 100755 app/src/main/res/drawable-hdpi/ic_delete.png
 create mode 100755 app/src/main/res/drawable-mdpi/ic_delete.png
 create mode 100755 app/src/main/res/drawable-xhdpi/ic_delete.png
 create mode 100755 app/src/main/res/drawable-xxhdpi/ic_delete.png
 create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_delete.png
 create mode 100644 app/src/main/res/layout/comic_strip.xml

diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 8d8f6686a49d2b8ab802f0688ece582bb0079619..8a943cfe099d025c03643a051f15eaa3488d2e6a 100644
GIT binary patch
delta 32
ocmbQnGL2=zOy;lZN*m{7G71_`Jid1~6TePLyg}XjcW*>10M9ZFegFUf

delta 32
ocmbQnGL2=zOlB|n>Wy<U83j3l?*v+v8!{a>vN4^ZcIamX0JVz?&;S4c

diff --git a/app/build.gradle b/app/build.gradle
index d8973c9..87c3acc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -83,4 +83,7 @@ dependencies {
     // Room
     implementation 'android.arch.persistence.room:runtime:1.0.0'
     annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
+
+    // AndroidSwipeLayout
+    implementation 'com.daimajia.swipelayout:library:1.2.0@aar'
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java
new file mode 100644
index 0000000..8ba4187
--- /dev/null
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java
@@ -0,0 +1,96 @@
+package me.szaki.xkcd.xkcdbrowser.adapter;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import me.szaki.xkcd.xkcdbrowser.R;
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
+
+public class FavoriteListAdapter extends RecyclerView.Adapter<FavoriteListAdapter.ViewHolder> {
+    private List<ComicStrip> comicStrips;
+    private static ClickListener clickListener;
+
+    public FavoriteListAdapter() {
+        super();
+        this.comicStrips = new ArrayList<>();
+    }
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        public TextView title;
+        public TextView date;
+
+
+        public ViewHolder(View itemView) {
+            super(itemView);
+
+            title = itemView.findViewById(R.id.title_text);
+            date = itemView.findViewById(R.id.date_text);
+
+            itemView.findViewById(R.id.delete_button).setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    if (FavoriteListAdapter.clickListener != null)
+                        FavoriteListAdapter.clickListener.onDeleteClick(getAdapterPosition(), view);
+                }
+            });
+
+
+            itemView.setOnLongClickListener(new View.OnLongClickListener() {
+                @Override
+                public boolean onLongClick(View view) {
+                    if (FavoriteListAdapter.clickListener != null)
+                        FavoriteListAdapter.clickListener.onClick(getAdapterPosition(), view);
+                    return false;
+                }
+            });
+        }
+    }
+
+    public interface ClickListener {
+        void onClick(int position, View v);
+
+        void onDeleteClick(int position, View v);
+    }
+
+    @Override
+    public FavoriteListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        View v = LayoutInflater.from(parent.getContext())
+                .inflate(R.layout.comic_strip, parent, false);
+
+        return new ViewHolder(v);
+    }
+
+    @Override
+    public void onBindViewHolder(FavoriteListAdapter.ViewHolder holder, int position) {
+        ComicStrip comicStrip = this.comicStrips.get(position);
+
+        holder.title.setText(comicStrip.getTitle());
+        holder.date.setText(String.format("%s.%s.%s.", comicStrip.getYear(), comicStrip.getMonth(), comicStrip.getDay()));
+    }
+
+    @Override
+    public int getItemCount() {
+        return this.comicStrips.size();
+    }
+
+    public void updateList(List<ComicStrip> cList) {
+        this.comicStrips = cList;
+        this.notifyDataSetChanged();
+    }
+
+    public void setListener(ClickListener clickListener) {
+        this.clickListener = clickListener;
+    }
+
+    public ComicStrip getComicStripByNum(int position) {
+        return this.comicStrips.get(position);
+    }
+}
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesActivity.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesActivity.java
index 83bf35a..9c96cbd 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesActivity.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesActivity.java
@@ -1,8 +1,13 @@
 package me.szaki.xkcd.xkcdbrowser.ui.favorites;
 
+import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.Snackbar;
+import android.support.v7.widget.DividerItemDecoration;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.support.design.widget.NavigationView;
 import android.support.v4.view.GravityCompat;
@@ -12,11 +17,31 @@ import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.widget.LinearLayout;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
 
 import me.szaki.xkcd.xkcdbrowser.R;
+import me.szaki.xkcd.xkcdbrowser.XKCDBrowserApplication;
+import me.szaki.xkcd.xkcdbrowser.adapter.FavoriteListAdapter;
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
+import me.szaki.xkcd.xkcdbrowser.ui.detail.DetailActivity;
+import me.szaki.xkcd.xkcdbrowser.ui.main.MainActivity;
 
 public class FavoritesActivity extends AppCompatActivity
-        implements NavigationView.OnNavigationItemSelectedListener {
+        implements NavigationView.OnNavigationItemSelectedListener, FavoritesScreen, FavoriteListAdapter.ClickListener {
+
+    @Inject
+    FavoritesPresenter favoritesPresenter;
+    private FavoriteListAdapter mAdapter;
+
+    public FavoritesActivity() {
+        XKCDBrowserApplication.injector.inject(this);
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -25,15 +50,6 @@ public class FavoritesActivity extends AppCompatActivity
         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);
 
-        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
-        fab.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
-                        .setAction("Action", null).show();
-            }
-        });
-
         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                 this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
@@ -42,6 +58,24 @@ public class FavoritesActivity extends AppCompatActivity
 
         NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
         navigationView.setNavigationItemSelectedListener(this);
+
+
+        RecyclerView recyclerView = findViewById(R.id.strips);
+        // use this setting to improve performance if you know that changes
+        // in content do not change the layout size of the RecyclerView
+        recyclerView.setHasFixedSize(true);
+
+        // use a linear layout manager
+        LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
+        recyclerView.setLayoutManager(mLayoutManager);
+        recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayout.VERTICAL));
+
+        // specify an adapter (see also next example)
+        mAdapter = new FavoriteListAdapter();
+        recyclerView.setAdapter(mAdapter);
+        mAdapter.setListener(this);
+
+
     }
 
     @Override
@@ -61,7 +95,9 @@ public class FavoritesActivity extends AppCompatActivity
         int id = item.getItemId();
 
         if (id == R.id.nav_main) {
-            // Handle the camera action
+            Intent i = new Intent(getApplicationContext(), MainActivity.class);
+            startActivity(i);
+            finish();
         } else if (id == R.id.nav_favorites) {
 
         }
@@ -70,4 +106,53 @@ public class FavoritesActivity extends AppCompatActivity
         drawer.closeDrawer(GravityCompat.START);
         return true;
     }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+
+        this.favoritesPresenter.attachScreen(this);
+        favoritesPresenter.getData();
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+
+        this.favoritesPresenter.detachScreen();
+    }
+
+    @Override
+    public void onClick(int position, View v) {
+        Intent i = new Intent(getApplicationContext(), DetailActivity.class);
+        startActivity(i);
+    }
+
+    @Override
+    public void onDeleteClick(int position, View v) {
+        favoritesPresenter.deleteData(mAdapter.getComicStripByNum(position));
+    }
+
+    @Override
+    public void dataReceived(final List<ComicStrip> strips) {
+        Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
+
+        Runnable myRunnable = new Runnable() {
+            @Override
+            public void run() {
+                mAdapter.updateList(strips);
+            }
+        };
+        mainHandler.post(myRunnable);
+    }
+
+    @Override
+    public void deleteSucess() {
+        Snackbar.make(findViewById(android.R.id.content), "Deleted", Snackbar.LENGTH_SHORT)
+                .setAction("Action", null).show();
+
+        favoritesPresenter.getData();
+    }
+
+
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java
index 33adfe5..8fbbd0e 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java
@@ -1,16 +1,17 @@
 package me.szaki.xkcd.xkcdbrowser.ui.favorites;
 
 
+import java.io.IOException;
+
 import javax.inject.Inject;
 
 import me.szaki.xkcd.xkcdbrowser.XKCDBrowserApplication;
 import me.szaki.xkcd.xkcdbrowser.interactor.comics.ComicsInteractor;
 import me.szaki.xkcd.xkcdbrowser.interactor.comics.DBInteractor;
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
 import me.szaki.xkcd.xkcdbrowser.ui.Presenter;
 
 public class FavoritesPresenter extends Presenter<FavoritesScreen> {
-    @Inject
-    ComicsInteractor comicsInteractor;
 
     @Inject
     DBInteractor db;
@@ -19,13 +20,23 @@ public class FavoritesPresenter extends Presenter<FavoritesScreen> {
         XKCDBrowserApplication.injector.inject(this);
     }
 
-    @Override
-    public void attachScreen(FavoritesScreen screen) {
-        super.attachScreen(screen);
+    public void getData () {
+        new Thread() {
+            @Override
+            public void run() {
+                screen.dataReceived(db.getComics());
+            }
+        }.start();
     }
 
-    @Override
-    public void detachScreen() {
-        super.detachScreen();
+    public void deleteData(final ComicStrip c) {
+        new Thread() {
+            @Override
+            public void run() {
+                db.deleteComic(c);
+                screen.deleteSucess();
+            }
+        }.start();
     }
+
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesScreen.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesScreen.java
index 691e7d7..6862dcb 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesScreen.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesScreen.java
@@ -1,5 +1,12 @@
 package me.szaki.xkcd.xkcdbrowser.ui.favorites;
 
 
+import java.util.List;
+
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
+
 public interface FavoritesScreen {
+    public void dataReceived(List<ComicStrip> strips);
+
+    public void deleteSucess();
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainActivity.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainActivity.java
index 98944f2..5c38712 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainActivity.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainActivity.java
@@ -1,5 +1,6 @@
 package me.szaki.xkcd.xkcdbrowser.ui.main;
 
+import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
@@ -30,6 +31,8 @@ import javax.inject.Inject;
 import me.szaki.xkcd.xkcdbrowser.R;
 import me.szaki.xkcd.xkcdbrowser.XKCDBrowserApplication;
 import me.szaki.xkcd.xkcdbrowser.network.model.Comic;
+import me.szaki.xkcd.xkcdbrowser.ui.favorites.FavoritesActivity;
+import me.szaki.xkcd.xkcdbrowser.ui.favorites.FavoritesPresenter;
 
 public class MainActivity extends AppCompatActivity
         implements NavigationView.OnNavigationItemSelectedListener, MainScreen {
@@ -114,7 +117,9 @@ public class MainActivity extends AppCompatActivity
         if (id == R.id.nav_main) {
             // Handle the camera action
         } else if (id == R.id.nav_favorites) {
-
+            Intent i = new Intent(getApplicationContext(), FavoritesActivity.class);
+            startActivity(i);
+            finish();
         }
 
         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
diff --git a/app/src/main/res/drawable-hdpi/ic_delete.png b/app/src/main/res/drawable-hdpi/ic_delete.png
new file mode 100755
index 0000000000000000000000000000000000000000..decc2a54df03b3d60fa3b9722582b958bc26ed02
GIT binary patch
literal 656
zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F<YIjKx9jP7LeL$-HD>VDj>G
zaSX{|eH*zuPdHFu?#<Y0S?MVvE)$&`kBa9o3ptrx2>i|bgXz~2PvN>_Lb9<6V*HMq
zZH0saxs*Om5aNDgk^P>pSa;{gb(17Nutv_h9bsMl?2PU6H@kLlC!CfsU_aCN|0RQ7
zvIXOV9ktKH1jYC{Gd~;osr-?9a`3d<|HFp-&#&!|PGX#*V!Gn`;!8WECHd-Gw;Q&^
zD!rKYE?h)lp}Xaq?dzV-f8f4XN9pvk8OtVjT?_J5IgneoLvU+l^LKGc0}UyM83lVc
zSG@0f?d;&SlH*vnh1ic>rDkuvU8cy!rW9Yl9k5t%>&%MfC9_@Rrrg?bA@QN?ks^ke
z%45d&9l64n34|D~5AvPHV87haSbmf7{eP_%Wu*~6^Fny0b3T}^mEV>>qay0y#xFs9
zALJ^QwM2YnxGcxg++6*-@bRBrEiv6YCD#9qssB>eP#xe=oyvLU=A|WqN5%V#IpofG
zpZ=5jE_{O8dB#f<r-Z8}6zmea{^(?^Qk9bIf`f_=em*d%J7}B4sQq6*g~_D9gMW?c
zgTtY`%T*T?o@T!$^x@&Ew#z~nc06Uy=KN6*dN`9a<IbnXtt>S=Rz2LpVv_gsKopZ*
z%+-Qd!VW_7Z)TVo9sb9--OEADRaomo#9qV1=Er5mEgvL(R1-Gem3NGgDR@3HtwW&t
z$&Pg67GAz(LJ#`>L`}Ztu2OZ1eeZnHV!c)?z2laT!(_Crg09|tQ6qlkZQJ6_lXbN=
z@de*`!Y`_&{LJQ0ZNq)_UrmmGH|*T_SG3yJ?)uhLz8TEV4rp0^kUlB2%02O2`xyoX
O1_n=8KbLh*2~7Yf*dccS

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-mdpi/ic_delete.png b/app/src/main/res/drawable-mdpi/ic_delete.png
new file mode 100755
index 0000000000000000000000000000000000000000..d64b5ef82c5707418971f728f2c66ed50a159aff
GIT binary patch
literal 410
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U<~ne
zaSVyzd^_#D*I@^NW6y6d37hSFaks(`9;G;!y+7EGOjeIS!2aRcQvL^L(?2}%6gk@6
zp`c{fd__HgyY1Mv-H%1?M5)d;VdQ_r*K+f3*}jt>lqaZu`gosn0S80ggs%K&<s5sa
zyh@I7@BZ$dF~QT;UvMt-mN4;UO>y~iBYGp{wdb*3p7&;T*zbw=B}*8Zk2msNzL;1M
zxPMQzT!wRZLB`))$&xQ7tQIPdJgXJ-&v&o7@`iiidaDPnRl3~)ISfIUS|htR{-44x
zR=<C`@*I|1o;PIXU$~vH&SH=9NuH9)Wfw|Bt@kr#cZ5GP>pj$SSN!Cu55Xm03uZkn
z6xyH`c0;s5x-4F$`+LkQWA*@7sef*3<qrsdV6kEJKOp>rnT2QXw13=v56-GGT-eAn
zVTy#(&o60F#ri6yvDVeAk7QrCp%h@ddA4mzR^b8lK=WN&C!L?y(0zbiF)w=A8uKIl
Q3=9kmp00i_>zopr0OE+TMgRZ+

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xhdpi/ic_delete.png b/app/src/main/res/drawable-xhdpi/ic_delete.png
new file mode 100755
index 0000000000000000000000000000000000000000..8175fb04eef74713b8698dc42c82aefc96c5871d
GIT binary patch
literal 590
zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE<t`_ZS!$7>k44ofy`glX=O&z{KI{
z;uuoF_;%KAKPE?!wsf(N$7W?XW@mbC|HUBi_HFOQV`1}MqNRKFA23U3XqH$frDi%N
zFKluBc&H~`n4@Kb&gOJQpC6uTyRD1Y-T$d5qRnEbz`z7S-Chpo7JXc>BV3^Gl=Rb}
zbF-r>*GT?UF_>r7kap5~O4Pl8+;xeyjnjUWEPiue`j_NPe^G~kJGRTR)@81h2)%0l
zZ`p0*?Vn1n-}m~iXULHCZmw5kuco^9^O+K}cRc2k{BulVE9a%Kp0g(&FP*r1a&Ft%
z<BT(OE>)}+P!LZ_VN?H<;>gF4;K(L>GwsoR2HhtUCuG@)ERhwxsmSM$pwoEdKXX-J
z^Q3akEjI6M&wtVSIyL&6zJ=xU$JS?FHoW9!@M*ZV+nMoN|Ad<iA_rJ9_F9W1{N<R*
z>%d5<gv74@O9hlOIm+_(F>R^wi?Y3~-+Cv9A^vU753TIxyFHZ+Zsyx}K5t-`cGwq{
zYjw&}!09^sBfp<v*ALH0%*#{yrfsyBDa!TyV)Ns9FDqwXlUjQvsk}I2SKY;`sZR5s
zXzjayH$65;H|V{1(fq7R_m^juEfL(PC0%r_i|N$4<GVh8R+7(JyD-_NiGia5f*K4P
a>$gTl3;!1hKfu7iz~JfX=d#Wzp$P!CLi(lv

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete.png b/app/src/main/res/drawable-xxhdpi/ic_delete.png
new file mode 100755
index 0000000000000000000000000000000000000000..bac7eb9469a4c41e59ae23abe3e745e469848f8f
GIT binary patch
literal 1108
zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z{2P0
z;uuoF_;&6=Z;?caWB2pZP8WrKd9W~BC8V9>O!JdOMUEyu)}P@eZ^T^O1Y)gRV}CRA
zaB(qd-)Vk$Q0&kG7VFZS<|CzR@0LA#J-hUHv(x&+b?42VZB}@E&iZrB`|rQcp6ioK
zbNQjfD5QW5S!l5M$f;+!_Du0wcqOaum$b~5AU$`zGp^5HKTU6vd!FLG^iW#B{*>OG
zPfg~05Xybpz42RKeN0X2si)JX`}iyF6ngML{w7C#oLSQQ9Y5!OGdXVZY_e!^wSv{J
zOP)WbuKRQS^c{{3;^#$P2i^}Y|F-kxf;mi$Ki`~l`reiJc;?LLb<M|4h`f$<C=$8O
z-D_yL*1%ic%qZCHOsV0wlxcsB^0Uu&iT*y(Ql@x$-!=i!=-So$>}^|peBUHKHmi}|
zE1b>teZ$XhYRhUhzC5tL#98KSJH_JlM)9k6?ws4*W}j#N_Tlsc&TPuN6dV|14}9LJ
z&H7`(4OceS62|k#*NHr6P7;?Cxxi{8zq@Kbk7?rP-Mxp7zvG{0C(rv#{jkZToj>0l
z-`((U;p6+)R;~W-o2~G=b=&)$m1j4%@><&%g$b{$IGZZLDU-wW;j+u$Lq}ZpeC6L(
z>u%-oukd?WCg;r^-`_XHo;~)^Q20oA+1mU3+K)bP?(&UmTg0jTQ)B^y({xP+--wgT
z8CV5&`7mZ2^0H&qXt<Ed<scmPNz;L`MK73P)`m&`j9dyOGnp>5Os(MxU|4usq(N=X
zli&s>j@V@kCW)%^nM5337_lxGj7C0YWhs19b>gb*X;HPzovP7$m%mr^-qCR5)Uwxm
zxL(RhN4@>RC(EjLfF+TsUeb!&=SR`<a-S-7QN0D4XV>SgvHX6y<=m0{ic7C!mY458
zX?^JdliR(JYe!qw-*uLZdm~}JJ^%LJUGr}5ZQk9&U0}X+^HKS;Q!NU%_lVDAKY!f)
zPtB$5OU0LV_aE4wdLaMSbiTaf$N6*l*wfdtnBUnmsrtmzx5w7;e*e<<-0czj-|Ua<
z!7KmxRlDm|t0~NEnL9C|wy<c&g)PBmJ?nQqemy7J_LbbV$uBdd?=?hp#)Mt%{eREp
z;N@$Hn+;5M?np~h*;(@L<m%;2mn3(d-#YQ-ONUjVkKYD{W>#EF{nWAgVxacs%_ogb
qA1t4<=51j$_Kc{|_`m&teCp0K)g@)?j2Rdh7(8A5T-G@yGywo<>Fmq^

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete.png b/app/src/main/res/drawable-xxxhdpi/ic_delete.png
new file mode 100755
index 0000000000000000000000000000000000000000..fad9e8d99311f9e5d3c388b035723a06ed0eb517
GIT binary patch
literal 1256
zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+7>k44ofy`glX=O&z_Q5G
z#WAFU@$F2<?2vGYw(~QsBQ8twls<Rc&UMu{D`;i6!=k$)yT7=X1mD>q{E}az^<USn
zU?x?y#wKpr#oW0I*Ts}v)MM#>x#Zx4YX9@T=3I_>GtSH|&zsliU{w69?)~>Y{L?*!
znD{vy7?=ba7+4e-7zr^O!vs5WZ>Bwdb>^nu&A)anCeP+3t?HU9t^Urw_99zZa@$fz
zlb9L11%iHP9w`YkGCV4-*!KGG)`P_-_ZafctY9=-f2MBQst?|2SEQAf@73EYX`Q%l
z`==i#<MjPb70>nL+!cPV_vp^kJO5b!G%fvEIw#I{_qh$>+dM1tlHM~M))p6c5)IdN
zD8H0cpIUoX>9n1*2W!RWr%NXvJ$G*Hj7J-5pVhptxXNj`>_chYrz_R^GWYoFpZ3oy
zw+{WMVsuFP=$6>B-S>U<?Q3igrGEPwwvr*b+j#lukU#T;>-Mal;{N=@epj9IzH9CN
zI&b~tQqLCPnDtqPC8KyZZ<%ug+k{&+ER47A<Tc+FSirc%Oy04<Z2Rp5bCwK-m1o@r
z7My)+c4O`B2WJ{(J+1F*iM$Nm_uxun?3P&ZTenhG?s#e)xbo-0`FgoC=UO&R`NtY`
zqIgT7>%^+h&HKy$Z@0WPwZa@8{y!8LyZMt3x89uium9gc-ro2(>uv2y{{4|X5Fy}d
z!V(Z*Hm{N4*i(%~iVaPhKJu^_=(!8>GKx&;O;>0rwCu{@Sg;_+hMBSFbfAkf18eGI
zNsfe=J|!t84Grn@4h)ZrL@o+AINq#aW0IJ@xTB4M>(nu0fde~aMzYZ{EGtA#&pNx|
z#!c6T>uFCl9!0!)qjX?B*P}FJoiZ~)g>_GgCPg|v?wMSE_ip7JW2xBN&JBKFi~V-r
z)hM*)%WeN(ZuccuhvmiEHTK+we`jRMwC;9TRetyG&kL{l4>~o>=zbp?w|{1(j<kVf
zdCSwP>s8MS`Ll{@xfx$A_*k}Lmtn1Nl7tDT-Nf`yd0+d!uG9OO%d(<TCO)?Q=I<wG
z#DCsi`X}_-`K?a^-){<eANKymmf(HDKW#5v<=&h4^J4hVeIIi9e(a1t^sMt!?Z3c%
zxBp+zzo&Qf_j&W#`-6)w1vQk1%j?Bi$*=wt)%Ei7pNXkfhfU7Q6hFT@d&Z;umBDvj
uueaOsqxOI7vKoGZ1pq?9g(Rl`jAFl5HYTn;X2Zb1z~JfX=d#Wzp$Pyo#t=3D

literal 0
HcmV?d00001

diff --git a/app/src/main/res/layout/app_bar_favorites.xml b/app/src/main/res/layout/app_bar_favorites.xml
index fb118be..a587c0b 100644
--- a/app/src/main/res/layout/app_bar_favorites.xml
+++ b/app/src/main/res/layout/app_bar_favorites.xml
@@ -22,12 +22,5 @@
 
     <include layout="@layout/content_favorites" />
 
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_margin="@dimen/fab_margin"
-        app:srcCompat="@android:drawable/ic_dialog_email" />
 
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/comic_strip.xml b/app/src/main/res/layout/comic_strip.xml
new file mode 100644
index 0000000..bbea280
--- /dev/null
+++ b/app/src/main/res/layout/comic_strip.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.daimajia.swipe.SwipeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:swipe="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    swipe:drag_edge="right"
+    swipe:show_mode="pull_out">
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent">
+        <FrameLayout
+            android:layout_width="40dp"
+            android:layout_height="match_parent" >
+
+            <Button
+                android:id="@+id/delete_button"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_gravity="center"
+                android:background="@null"
+                android:drawableStart="@drawable/ic_delete"
+                android:gravity="center"
+                android:maxHeight="60dp"
+                android:maxWidth="60dp"
+                android:textColor="@android:color/white" />
+        </FrameLayout>
+    </LinearLayout>
+    <android.support.constraint.ConstraintLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="10dp">
+
+        <TextView
+            android:id="@+id/title_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="0dp"
+            android:layout_marginTop="0dp"
+            android:text="TextView"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/date_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="0dp"
+            android:layout_marginTop="0dp"
+            android:text="TextView"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </android.support.constraint.ConstraintLayout>
+</com.daimajia.swipe.SwipeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_favorites.xml b/app/src/main/res/layout/content_favorites.xml
index ed576e6..0171548 100644
--- a/app/src/main/res/layout/content_favorites.xml
+++ b/app/src/main/res/layout/content_favorites.xml
@@ -8,4 +8,13 @@
     tools:context=".ui.favorites.FavoritesActivity"
     tools:showIn="@layout/app_bar_favorites">
 
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/strips"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="8dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 </android.support.constraint.ConstraintLayout>
\ No newline at end of file
-- 
GitLab