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