diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8012805b7ed1ed92f19e29598a97428b67ad0706
--- /dev/null
+++ b/.idea/assetWizardSettings.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="WizardSettings">
+    <option name="children">
+      <map>
+        <entry key="imageWizard">
+          <value>
+            <PersistentState>
+              <option name="children">
+                <map>
+                  <entry key="imageAssetPanel">
+                    <value>
+                      <PersistentState>
+                        <option name="children">
+                          <map>
+                            <entry key="launcher">
+                              <value>
+                                <PersistentState>
+                                  <option name="children">
+                                    <map>
+                                      <entry key="foregroundImage">
+                                        <value>
+                                          <PersistentState>
+                                            <option name="values">
+                                              <map>
+                                                <entry key="scalingPercent" value="70" />
+                                              </map>
+                                            </option>
+                                          </PersistentState>
+                                        </value>
+                                      </entry>
+                                    </map>
+                                  </option>
+                                  <option name="values">
+                                    <map>
+                                      <entry key="backgroundAssetType" value="COLOR" />
+                                      <entry key="backgroundColor" value="ffffff" />
+                                      <entry key="foregroundImage" value="$USER_HOME$/Downloads/512x512bb.jpg" />
+                                    </map>
+                                  </option>
+                                </PersistentState>
+                              </value>
+                            </entry>
+                          </map>
+                        </option>
+                      </PersistentState>
+                    </value>
+                  </entry>
+                </map>
+              </option>
+            </PersistentState>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index a950c4211b98c5a691c4fbb4a086ebd1a4931f78..d89bb99d65148fc964687815b11160c69ede5121 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 75dac502959ec4f6e5232282499067f85aa716f5..39638799269d0193201b39e5276d8236659f97fe 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -24,7 +24,7 @@
       </value>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/app/build.gradle b/app/build.gradle
index d431fddabd25fe35b37eb39b23d7117ef9c61e21..87c3accf67628aad5f9194b351f1126065191cc5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -65,7 +65,8 @@ dependencies {
 
     // Dagger
     implementation 'com.google.dagger:dagger:2.11'
-    implementation 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries
+    implementation 'com.google.dagger:dagger-android-support:2.11'
+    // if you use the support libraries
     annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
     annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
     implementation 'com.google.dagger:dagger-android:2.11'
@@ -82,5 +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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6e25c8f7263be0a4b1bd2c9281228375ca65b3ce..78e0a39df309957afbe2937c289bece81b4b0b28 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="me.szaki.xkcd.xkcdbrowser">
+
     <uses-permission android:name="android.permission.INTERNET" />
+
     <application
         android:name=".XKCDBrowserApplication"
         android:allowBackup="true"
@@ -10,15 +12,29 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".ui.main.MainActivity">
+        <activity
+            android:name=".ui.main.MainActivity"
+            android:label="@string/title_activity_main"
+            android:theme="@style/AppTheme.NoActionBar">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".ui.detail.DetailActivity"></activity>
-        <activity android:name=".ui.favorites.FavoritesActivity"></activity>
+        <activity
+            android:name=".ui.favorites.FavoritesActivity"
+            android:label="@string/title_activity_favorites"
+            android:theme="@style/AppTheme.NoActionBar" />
+        <activity
+            android:name=".ui.detail.DetailActivity"
+            android:label="@string/title_activity_detail"
+            android:parentActivityName=".ui.favorites.FavoritesActivity"
+            android:theme="@style/AppTheme.NoActionBar">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value="me.szaki.xkcd.xkcdbrowser.ui.favorites.FavoritesActivity" />
+        </activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png
new file mode 100644
index 0000000000000000000000000000000000000000..8bbcff23f1097696f293a42b180e3f8dcd2a2049
Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ
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 0000000000000000000000000000000000000000..17c082b3a291cba140c523d74a23b9106af80f92
--- /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.%02d.%02d.", comicStrip.getYear(), Integer.parseInt(comicStrip.getMonth()), Integer.parseInt(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/database/ComicsDAO.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java
index dae5aa329d509c06f169a1e0f9b649b99afc0157..8abcfc6b72f96d81bcf491c67e42e34e8ed0d632 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java
@@ -18,6 +18,9 @@ public interface ComicsDAO {
     @Query("SELECT * FROM ComicStrip WHERE id = :id")
     public ComicStrip getComic(Long id);
 
+    @Query("SELECT * FROM ComicStrip WHERE num = :num")
+    public ComicStrip getComicByNum(Long num);
+
     @Insert
     public void insertAll(ComicStrip... comic);
 
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/ComicsInteractor.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/ComicsInteractor.java
index f333e97456b37c3624d2453b44f40cd416199f66..5e7ffe22fcf48414972764730f11e5a678e3e738 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/ComicsInteractor.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/ComicsInteractor.java
@@ -2,8 +2,6 @@ package me.szaki.xkcd.xkcdbrowser.interactor.comics;
 
 
 import java.io.IOException;
-import java.util.Date;
-import java.util.Random;
 
 import javax.inject.Inject;
 
@@ -23,12 +21,8 @@ public class ComicsInteractor {
         return this.comicApi.getComic(id).execute().body();
     }
 
-    public Comic getRandomComic() throws IOException {
-        Random r = new Random(new Date().getTime());
-        return this.comicApi.getComic(r.nextLong()).execute().body();
-    }
-
     public Comic getLatestComic() throws IOException {
         return this.comicApi.getCurrentComic().execute().body();
     }
+
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/DBInteractor.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/DBInteractor.java
index 47a7a0f4c8fe684ec6d2dcbe28fe6b5a1af958c9..733be6773cd3284f40b98b1d7f7164d5643dabe4 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/DBInteractor.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/interactor/comics/DBInteractor.java
@@ -34,5 +34,6 @@ public class DBInteractor {
         db.getDAO().insertAll(c);
     }
 
+    public ComicStrip getComicByNum(Long id) { return db.getDAO().getComicByNum(id); }
 
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailActivity.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailActivity.java
index 88053321a0cb1f6a330dc9b9be9bf42b135b5bc6..4a2306aea88270cf908a970f11fae6b56cb6b6bc 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailActivity.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailActivity.java
@@ -1,35 +1,89 @@
 package me.szaki.xkcd.xkcdbrowser.ui.detail;
 
-
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.os.Bundle;
+import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.widget.ImageView;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 import javax.inject.Inject;
 
 import me.szaki.xkcd.xkcdbrowser.R;
 import me.szaki.xkcd.xkcdbrowser.XKCDBrowserApplication;
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
 
 public class DetailActivity extends AppCompatActivity implements DetailScreen {
+
     @Inject
     DetailPresenter detailPresenter;
 
+    private ImageView detailImageView;
+    private Long num;
+
+    public DetailActivity() {
+        XKCDBrowserApplication.injector.inject(this);
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_detail);
+        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
-        XKCDBrowserApplication.injector.inject(this);
+        this.detailImageView = findViewById(R.id.detailImageView);
+
+        Intent i = getIntent();
+        num = i.getLongExtra("num", 0l);
     }
 
     @Override
     protected void onStart() {
         super.onStart();
-        detailPresenter.attachScreen(this);
+
+        this.detailPresenter.attachScreen(this);
+        detailPresenter.getComicByNum(Long.valueOf(num));
     }
 
     @Override
     protected void onStop() {
         super.onStop();
-        detailPresenter.detachScreen();
+
+        this.detailPresenter.detachScreen();
+    }
+
+    @Override
+    public void dataReceived(final ComicStrip comic) {
+        Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
+        Bitmap mIcon_val = null;
+
+        if (comic != null) {
+            try {
+                URL newurl = new URL(comic.getImg());
+                mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        final Bitmap finalMIcon_val = mIcon_val;
+        Runnable myRunnable = new Runnable() {
+            @Override
+            public void run() {
+                detailImageView.setImageBitmap(finalMIcon_val);
+                setTitle(comic.getTitle());
+            }
+        };
+        mainHandler.post(myRunnable);
     }
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailPresenter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailPresenter.java
index 19377a01936a6cd73755028d31cb615f6d3c8253..d24e48af615ce5dc262a369fbecc92c878d0730e 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailPresenter.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailPresenter.java
@@ -4,24 +4,25 @@ package me.szaki.xkcd.xkcdbrowser.ui.detail;
 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.ui.Presenter;
 
 public class DetailPresenter extends Presenter<DetailScreen> {
+
+
     @Inject
-    ComicsInteractor comicsInteractor;
+    DBInteractor db;
 
     public DetailPresenter () {
         XKCDBrowserApplication.injector.inject(this);
     }
 
-    @Override
-    public void attachScreen(DetailScreen screen) {
-        super.attachScreen(screen);
-    }
-
-    @Override
-    public void detachScreen() {
-        super.detachScreen();
+    public void getComicByNum(final Long id) {
+        new Thread() {
+            @Override
+            public void run() {
+                screen.dataReceived(db.getComicByNum(id));
+            }
+        }.start();
     }
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailScreen.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailScreen.java
index 9c33c64924b67d5037eed407a5c7488643467d07..555cc964adee84b2db351d713d7d371030eaf633 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailScreen.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/detail/DetailScreen.java
@@ -1,4 +1,9 @@
 package me.szaki.xkcd.xkcdbrowser.ui.detail;
 
+import java.util.List;
+
+import me.szaki.xkcd.xkcdbrowser.model.ComicStrip;
+
 public interface DetailScreen {
+    public void dataReceived(ComicStrip comic);
 }
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 e1c52712267f44ceb24233fade9984c0a5110c69..594478954cef364b48f1f4a26f11b47436735b11 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,35 +1,155 @@
 package me.szaki.xkcd.xkcdbrowser.ui.favorites;
 
-
+import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.support.design.widget.NavigationView;
+import android.support.design.widget.Snackbar;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.DividerItemDecoration;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.LinearLayout;
+
+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, FavoritesScreen, FavoriteListAdapter.ClickListener {
 
-public class FavoritesActivity extends AppCompatActivity implements FavoritesScreen {
     @Inject
     FavoritesPresenter favoritesPresenter;
+    private FavoriteListAdapter mAdapter;
+
+    public FavoritesActivity() {
+        XKCDBrowserApplication.injector.inject(this);
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_favorites);
+        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
 
-        XKCDBrowserApplication.injector.inject(this);
+        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);
+        drawer.addDrawerListener(toggle);
+        toggle.syncState();
+
+        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
+    public void onBackPressed() {
+        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+        if (drawer.isDrawerOpen(GravityCompat.START)) {
+            drawer.closeDrawer(GravityCompat.START);
+        } else {
+            super.onBackPressed();
+        }
+    }
+
+    @SuppressWarnings("StatementWithEmptyBody")
+    @Override
+    public boolean onNavigationItemSelected(MenuItem item) {
+        // Handle navigation view item clicks here.
+        int id = item.getItemId();
+
+        if (id == R.id.nav_main) {
+            Intent i = new Intent(getApplicationContext(), MainActivity.class);
+            startActivity(i);
+            finish();
+        } else if (id == R.id.nav_favorites) {
+
+        }
+
+        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+        drawer.closeDrawer(GravityCompat.START);
+        return true;
     }
 
     @Override
     protected void onStart() {
         super.onStart();
-        favoritesPresenter.attachScreen(this);
+
+        this.favoritesPresenter.attachScreen(this);
+        favoritesPresenter.getData();
     }
 
     @Override
     protected void onStop() {
         super.onStop();
-        favoritesPresenter.detachScreen();
+
+        this.favoritesPresenter.detachScreen();
+    }
+
+    @Override
+    public void onClick(int position, View v) {
+        Intent i = new Intent(getApplicationContext(), DetailActivity.class);
+        i.putExtra("num", mAdapter.getComicStripByNum(position).getNum());
+        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 33adfe57b14a069aaf6ddb326e5496df5b5603f1..8fbbd0ee9cf08303c41eab8924bc11914d314da4 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 691e7d763c80a741a754df0c94a572bfc915a4cb..6862dcbd73fc8e44090259fc93ffbfcaeeb2793b 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 44ee581f349aff30816f1510d29221521b3821b5..e361178857cbfbf47c866894fe7108f8d3697976 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,34 +1,231 @@
 package me.szaki.xkcd.xkcdbrowser.ui.main;
 
-import android.support.v7.app.AppCompatActivity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.view.View;
+import android.support.design.widget.NavigationView;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 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 {
 
-public class MainActivity extends AppCompatActivity implements MainScreen {
     @Inject
     MainPresenter mainPresenter;
 
+    private ImageView imageView;
+    private Comic currentComic;
+    private MenuItem favoriteButton;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
+        XKCDBrowserApplication.injector.inject(this);
+
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
 
-        XKCDBrowserApplication.injector.inject(this);
+        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);
+        drawer.addDrawerListener(toggle);
+        toggle.syncState();
+
+        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
+        navigationView.setNavigationItemSelectedListener(this);
+
+        this.imageView = findViewById(R.id.imageView);
+
+        findViewById(R.id.next_button).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                favoriteButton.setCheckable(false);
+                mainPresenter.getNext();
+            }
+        });
+
+        findViewById(R.id.previous_button).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                favoriteButton.setCheckable(false);
+                mainPresenter.getPrevious();
+            }
+        });
+
+        findViewById(R.id.random_button).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                favoriteButton.setCheckable(false);
+                mainPresenter.getRandom();
+            }
+        });
+
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+
+        getMenuInflater().inflate(R.menu.main_menu, menu);
+        this.favoriteButton = menu.getItem(0);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        // Handle action bar item clicks here. The action bar will
+        // automatically handle clicks on the Home/Up button, so long
+        // as you specify a parent activity in AndroidManifest.xml.
+        int id = item.getItemId();
+
+        //noinspection SimplifiableIfStatement
+        if (id == R.id.favorite_button) {
+            favoriteButton.setCheckable(false);
+            mainPresenter.saveComic(currentComic);
+            return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void onBackPressed() {
+        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+        if (drawer.isDrawerOpen(GravityCompat.START)) {
+            drawer.closeDrawer(GravityCompat.START);
+        } else {
+            super.onBackPressed();
+        }
+    }
+
+    @SuppressWarnings("StatementWithEmptyBody")
+    @Override
+    public boolean onNavigationItemSelected(MenuItem item) {
+        // Handle navigation view item clicks here.
+        int id = item.getItemId();
+
+        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);
+        drawer.closeDrawer(GravityCompat.START);
+        return true;
     }
 
     @Override
     protected void onStart() {
         super.onStart();
-        mainPresenter.attachScreen(this);
+
+        this.mainPresenter.attachScreen(this);
+        this.mainPresenter.getCurrent();
     }
 
     @Override
     protected void onStop() {
         super.onStop();
-        mainPresenter.detachScreen();
+
+        this.mainPresenter.detachScreen();
+    }
+
+    @Override
+    public void getImage(final Comic c) {
+        Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
+        Bitmap mIcon_val = null;
+
+        if (c != null) {
+            currentComic = c;
+            try {
+                URL newurl = new URL(c.getImg());
+                mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        final Bitmap finalMIcon_val = mIcon_val;
+        Runnable myRunnable = new Runnable() {
+            @Override
+            public void run() {
+                if (finalMIcon_val == null) {
+                    Snackbar.make(findViewById(android.R.id.content), "Already on newest!", Snackbar.LENGTH_SHORT)
+                            .setAction("Action", null).show();
+                } else {
+                    imageView.setImageBitmap(finalMIcon_val);
+                    setTitle(c.getTitle());
+                }
+            }
+        };
+        mainHandler.post(myRunnable);
+    }
+
+    @Override
+    public void saveComic() {
+        Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
+
+        Runnable myRunnable = new Runnable() {
+            @Override
+            public void run() {
+                favoriteButton.setIcon(getDrawable(R.drawable.ic_star));
+                Snackbar.make(findViewById(android.R.id.content), "Saved!", Snackbar.LENGTH_SHORT)
+                    .setAction("Action", null).show();
+            }
+        };
+        mainHandler.post(myRunnable);
+    }
+
+    @Override
+    public void setFavorite(final boolean exists) {
+
+        Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
+
+        Runnable myRunnable = new Runnable() {
+            @Override
+            public void run() {
+                if (exists) {
+                    favoriteButton.setIcon(getDrawable(R.drawable.ic_star));
+                } else {
+                    favoriteButton.setIcon(getDrawable(R.drawable.ic_star_border));
+                    favoriteButton.setCheckable(true);
+                }
+            }
+        };
+        mainHandler.post(myRunnable);
+
+
     }
 }
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java
index 23edcd5a9ff9f604b53a42e7816256d8f7056c6e..8532aabd3d936e2aa15bd5f17305e46a7a9f3425 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java
@@ -1,11 +1,18 @@
 package me.szaki.xkcd.xkcdbrowser.ui.main;
 
 
+import android.support.annotation.Nullable;
+
+import java.io.IOException;
+import java.util.Random;
+
 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.network.model.Comic;
 import me.szaki.xkcd.xkcdbrowser.ui.Presenter;
 
 public class MainPresenter extends Presenter<MainScreen> {
@@ -15,17 +22,112 @@ public class MainPresenter extends Presenter<MainScreen> {
     @Inject
     DBInteractor db;
 
-    public MainPresenter () {
+    private int currentId;
+    private int maxId;
+
+    private Random r;
+
+    public MainPresenter() {
         XKCDBrowserApplication.injector.inject(this);
+        r = new Random();
     }
 
-    @Override
-    public void attachScreen(MainScreen screen) {
-        super.attachScreen(screen);
+    public void getCurrent() {
+        new Thread() {
+            @Override
+            public void run() {
+                try {
+                    Comic c = comicsInteractor.getLatestComic();
+                    currentId = c.getNum();
+                    maxId = c.getNum();
+                    screen.getImage(c);
+                    checkFavorite(c);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }.start();
     }
 
-    @Override
-    public void detachScreen() {
-        super.detachScreen();
+    public void getPrevious() {
+        new Thread() {
+            @Override
+            public void run() {
+                Comic c = getComic(--currentId);
+                screen.getImage(c);
+                checkFavorite(c);
+            }
+        }.start();
     }
+
+    public void getRandom() {
+        new Thread() {
+            @Override
+            public void run() {
+                Comic c = getComic(r.nextInt(maxId));
+                currentId = c.getNum();
+                screen.getImage(c);
+                checkFavorite(c);
+            }
+        }.start();
+    }
+
+    public void getNext() {
+        new Thread() {
+            @Override
+            public void run() {
+                Comic c = getComic(++currentId);
+                if (c != null && c.getNum() > maxId) {
+                    maxId = c.getNum();
+                }
+                screen.getImage(c);
+                checkFavorite(c);
+            }
+        }.start();
+    }
+
+    public void saveComic(final Comic currentComic) {
+        new Thread() {
+            @Override
+            public void run() {
+                ComicStrip comic = new ComicStrip() {{
+                    setAlt(currentComic.getAlt());
+                    setDay(currentComic.getDay());
+                    setMonth(currentComic.getMonth());
+                    setNum(Long.valueOf(currentComic.getNum()));
+                    setLink(currentComic.getLink());
+                    setYear(currentComic.getYear());
+                    setNews(currentComic.getNews());
+                    setSafe_title(currentComic.getSafeTitle());
+                    setTranscript(currentComic.getTranscript());
+                    setImg(currentComic.getImg());
+                    setTitle(currentComic.getTitle());
+                }};
+
+                db.saveComic(comic);
+                screen.saveComic();
+            }
+        }.start();
+    }
+
+    @Nullable
+    private Comic getComic(int id) {
+        try {
+            Comic c = comicsInteractor.getComic(id);
+            return c;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private void checkFavorite(Comic c) {
+        if (c == null) {
+            return;
+        }
+        ComicStrip comicByNum = db.getComicByNum(c.getNum().longValue());
+        screen.setFavorite(comicByNum != null);
+    }
+
 }
+
diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainScreen.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainScreen.java
index 4990c7658b6fd903d6092c3cddb60f120bf652ee..e77fdf9d3e92d112e36ca8f551e4482eb04b0cf5 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainScreen.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainScreen.java
@@ -1,4 +1,11 @@
 package me.szaki.xkcd.xkcdbrowser.ui.main;
 
+import me.szaki.xkcd.xkcdbrowser.network.model.Comic;
+
 public interface MainScreen {
+    public void getImage(Comic c);
+
+    public void saveComic();
+
+    public void setFavorite(boolean exists);
 }
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
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_home.png b/app/src/main/res/drawable-hdpi/ic_home.png
new file mode 100755
index 0000000000000000000000000000000000000000..7581a659e4e6840a1258a2a73aa42d402c6b9311
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_home.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_star.png b/app/src/main/res/drawable-hdpi/ic_star.png
new file mode 100755
index 0000000000000000000000000000000000000000..a83395e2534f3b0b0169cc5bb05f8b0fbb88120b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_star.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_star_border.png b/app/src/main/res/drawable-hdpi/ic_star_border.png
new file mode 100755
index 0000000000000000000000000000000000000000..3decf5877628c9958bfcbe57c4d8f66b092db93b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_star_border.png differ
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
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_home.png b/app/src/main/res/drawable-mdpi/ic_home.png
new file mode 100755
index 0000000000000000000000000000000000000000..d2f19bcbb5144689b0687eb608f0f454583da0c0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_home.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_star.png b/app/src/main/res/drawable-mdpi/ic_star.png
new file mode 100755
index 0000000000000000000000000000000000000000..a2ae1c7e7a164a781e3b404c88e383517c860672
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_star.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_star_border.png b/app/src/main/res/drawable-mdpi/ic_star_border.png
new file mode 100755
index 0000000000000000000000000000000000000000..8f8de37bd7009e4dfaf6b2285b647034f6663461
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_star_border.png differ
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
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_home.png b/app/src/main/res/drawable-xhdpi/ic_home.png
new file mode 100755
index 0000000000000000000000000000000000000000..49fc4dc9dbf9c37904e2a6a611dd0e0510331b06
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_star.png b/app/src/main/res/drawable-xhdpi/ic_star.png
new file mode 100755
index 0000000000000000000000000000000000000000..a5ad50b8c564695ac10e59d732908b8593b8a1e2
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_star.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_star_border.png b/app/src/main/res/drawable-xhdpi/ic_star_border.png
new file mode 100755
index 0000000000000000000000000000000000000000..04706c8b57523c35ead9352d285a1e0b61db99c8
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_star_border.png differ
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
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_home.png b/app/src/main/res/drawable-xxhdpi/ic_home.png
new file mode 100755
index 0000000000000000000000000000000000000000..711b7bb497fdbe36a058f2b693587aed8d2b5849
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_home.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_star.png b/app/src/main/res/drawable-xxhdpi/ic_star.png
new file mode 100755
index 0000000000000000000000000000000000000000..c08d3c61396f2756f8989df884ba2c9a038a04a7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_star.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_star_border.png b/app/src/main/res/drawable-xxhdpi/ic_star_border.png
new file mode 100755
index 0000000000000000000000000000000000000000..b8b5e9d003c9f1d8e4529c2cc6794e868b6418c9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_star_border.png differ
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
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_delete.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_home.png b/app/src/main/res/drawable-xxxhdpi/ic_home.png
new file mode 100755
index 0000000000000000000000000000000000000000..73bfdefa01e07728d513470a87b1d92481a6e1b3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_home.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_star.png b/app/src/main/res/drawable-xxxhdpi/ic_star.png
new file mode 100755
index 0000000000000000000000000000000000000000..f3ee6bbc2ed7fc89790f6c9836b6e455154d52a3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_star.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_star_border.png b/app/src/main/res/drawable-xxxhdpi/ic_star_border.png
new file mode 100755
index 0000000000000000000000000000000000000000..b8c11dfdfc09f73164578ff72364733dfd178cac
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_star_border.png differ
diff --git a/app/src/main/res/drawable/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0d9ea104b2f34dbd9d7a0ea545589660fe6c0ef6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_camera.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f6872c409eb82cabaa9297998d49005b057d8043
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_gallery.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_menu_manage.xml b/app/src/main/res/drawable/ic_menu_manage.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1be60b368cee69ed9c866009439b50e4e920230
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_manage.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M22.7,19l-9.1,-9.1c0.9,-2.3 0.4,-5 -1.5,-6.9 -2,-2 -5,-2.4 -7.4,-1.3L9,6 6,9 1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1c1.9,1.9 4.6,2.4 6.9,1.5l9.1,9.1c0.4,0.4 1,0.4 1.4,0l2.3,-2.3c0.5,-0.4 0.5,-1.1 0.1,-1.4z" />
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_menu_send.xml b/app/src/main/res/drawable/ic_menu_send.xml
new file mode 100644
index 0000000000000000000000000000000000000000..00c668c60b05fd2e0b5c4f8bc43c8114c7dbd7a1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_send.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_menu_share.xml b/app/src/main/res/drawable/ic_menu_share.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a28fb9e2897130c7b627049d91c2294679563b05
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_share.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..209aa6430e754b466c4256446446cfce615f3394
--- /dev/null
+++ b/app/src/main/res/drawable/ic_menu_slideshow.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z" />
+</vector>
diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d36ebc4ed2d02b4062d5d7b02148c4d16e6eb13c
--- /dev/null
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -0,0 +1,5 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid
+        android:color="#9E9E9E"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml
index 43febafe7eab8c820972e8f95ec0bf959b643d4f..c89fd986c537657c4ecef25cb41fe2f1fa78f8b5 100644
--- a/app/src/main/res/layout/activity_detail.xml
+++ b/app/src/main/res/layout/activity_detail.xml
@@ -1,9 +1,26 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.design.widget.CoordinatorLayout 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="match_parent"
-    tools:context="me.szaki.xkcd.xkcdbrowser.ui.detail.DetailActivity">
+    tools:context=".ui.detail.DetailActivity"
+    android:fitsSystemWindows="true">
 
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+    <android.support.design.widget.AppBarLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:theme="@style/AppTheme.AppBarOverlay">
+
+        <android.support.v7.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize"
+            android:background="?attr/colorPrimary"
+            app:popupTheme="@style/AppTheme.PopupOverlay" />
+
+    </android.support.design.widget.AppBarLayout>
+
+    <include layout="@layout/content_detail" />
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_favorites.xml b/app/src/main/res/layout/activity_favorites.xml
index 5596ce04683d3f097b1bd9adca0fe6062b827905..c7b4197f2b2c32b7b1e9c1e5a487ce54c6d95e68 100644
--- a/app/src/main/res/layout/activity_favorites.xml
+++ b/app/src/main/res/layout/activity_favorites.xml
@@ -1,9 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="me.szaki.xkcd.xkcdbrowser.ui.favorites.FavoritesActivity">
+    android:fitsSystemWindows="true"
+    tools:openDrawer="start">
 
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+    <include
+        layout="@layout/app_bar_favorites"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+    <android.support.design.widget.NavigationView
+        android:id="@+id/nav_view"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_gravity="start"
+        android:fitsSystemWindows="true"
+        app:headerLayout="@layout/nav_header_main"
+        app:menu="@menu/activity_main_drawer" />
+
+</android.support.v4.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e25f1fe4f3260a7b5c8fd4cbe6ded0deb8274d70..a61d8a6300f62056e6801f60f572b0e6e3515507 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="me.szaki.xkcd.xkcdbrowser.ui.main.MainActivity">
+    android:fitsSystemWindows="true"
+    tools:openDrawer="start">
 
-    <TextView
+    <include
+        layout="@layout/app_bar_main"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+    <android.support.design.widget.NavigationView
+        android:id="@+id/nav_view"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Hello World!"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        android:layout_height="match_parent"
+        android:layout_gravity="start"
+        android:fitsSystemWindows="true"
+        app:headerLayout="@layout/nav_header_main"
+        app:menu="@menu/activity_main_drawer" />
 
-</android.support.constraint.ConstraintLayout>
+</android.support.v4.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/app_bar_favorites.xml b/app/src/main/res/layout/app_bar_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a587c0b3022ead7fb6482d023ccf9507dd8063a3
--- /dev/null
+++ b/app/src/main/res/layout/app_bar_favorites.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout 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="match_parent"
+    tools:context=".ui.favorites.FavoritesActivity">
+
+    <android.support.design.widget.AppBarLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:theme="@style/AppTheme.AppBarOverlay">
+
+        <android.support.v7.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize"
+            android:background="?attr/colorPrimary"
+            app:popupTheme="@style/AppTheme.PopupOverlay" />
+
+    </android.support.design.widget.AppBarLayout>
+
+    <include layout="@layout/content_favorites" />
+
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03f12f703b3190ce748d21aad33473415dc03aa3
--- /dev/null
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout 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="match_parent"
+    tools:context=".ui.main.MainActivity">
+
+    <android.support.design.widget.AppBarLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:theme="@style/AppTheme.AppBarOverlay">
+
+        <android.support.v7.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="?attr/colorPrimary"
+            app:popupTheme="@style/AppTheme.PopupOverlay">
+
+        </android.support.v7.widget.Toolbar>
+
+    </android.support.design.widget.AppBarLayout>
+
+    <include layout="@layout/content_main" />
+
+
+</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 0000000000000000000000000000000000000000..bbea280e75ff6681fb17f7ef36d3a1380525a643
--- /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_detail.xml b/app/src/main/res/layout/content_detail.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1141fc8bbfa0f99cec69d93c815e32a29eca83dc
--- /dev/null
+++ b/app/src/main/res/layout/content_detail.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior"
+    tools:context=".ui.detail.DetailActivity"
+    tools:showIn="@layout/activity_detail">
+
+    <ImageView
+        android:id="@+id/detailImageView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@android:color/background_light" />
+
+</android.support.constraint.ConstraintLayout>
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..0171548629eca35882af1016e56dcfa260bfd6d1
--- /dev/null
+++ b/app/src/main/res/layout/content_favorites.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior"
+    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
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f8f8b8cc719983dfcef1c7b0da0adf5a1f0b0db1
--- /dev/null
+++ b/app/src/main/res/layout/content_main.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior"
+    tools:context=".ui.main.MainActivity"
+    tools:showIn="@layout/app_bar_main">
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintBottom_toTopOf="@+id/random_button"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@android:color/background_light" />
+
+    <Button
+        android:id="@+id/previous_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:layout_marginStart="16dp"
+        android:text="Previous"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+    <Button
+        android:id="@+id/random_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginStart="8dp"
+        android:text="Random"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/next_button"
+        app:layout_constraintStart_toEndOf="@+id/previous_button" />
+
+    <Button
+        android:id="@+id/next_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="16dp"
+        android:text="Next"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml
new file mode 100644
index 0000000000000000000000000000000000000000..211e10a8035204912e49b7bd507891c5bd386da0
--- /dev/null
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/nav_header_height"
+    android:background="@drawable/side_nav_bar"
+    android:gravity="bottom"
+    android:orientation="vertical"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    android:theme="@style/ThemeOverlay.AppCompat.Dark">
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:contentDescription="@string/nav_header_desc"
+        android:paddingTop="@dimen/nav_header_vertical_spacing"
+        app:srcCompat="@mipmap/ic_launcher_round" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="@dimen/nav_header_vertical_spacing"
+        android:text="@string/nav_header_title"
+        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/nav_header_subtitle" />
+
+</LinearLayout>
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15cabce67d48513ea242c9e406e16e9593cecbaa
--- /dev/null
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:showIn="navigation_view">
+
+    <group android:checkableBehavior="single">
+        <item
+            android:id="@+id/nav_main"
+            android:icon="@drawable/ic_home"
+            android:title="Main" />
+        <item
+            android:id="@+id/nav_favorites"
+            android:icon="@drawable/ic_star"
+            android:title="Favorites" />
+
+    </group>
+
+</menu>
diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bdd84166ddd9eb9567dc8ff80662b9d6736932a
--- /dev/null
+++ b/app/src/main/res/menu/main_menu.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/favorite_button"
+        android:orderInCategory="100"
+        android:title="@string/action_settings"
+        android:icon="@drawable/ic_star_border"
+        app:showAsAction="ifRoom" />
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..036d09bc5fd523323794379703c4a111d1e28a04 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher_background" />
-    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
 </adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..036d09bc5fd523323794379703c4a111d1e28a04 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher_background" />
-    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
 </adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index a2f5908281d070150700378b64a84c7db1f97aa1..eb2e812000616f54d995c8c0459a8dc8378537b1 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2f75cae9c1401d94c120b9842027230e42c1a8b
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
index 1b523998081149a985cef0cdf89045b9ed29964a..4e9913635bd2d03dd3fd7ddaf1ef55fbed29ca8d 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index ff10afd6e182edb2b1a63c8f984e9070d9f950ba..b3a8326a80444b31c03ba78955953c104b748309 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000000000000000000000000000000000..1979eb0a38af14d29e37d5153a854d7b2d560416
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
index 115a4c768a20c9e13185c17043f4c4d12dd4632a..58f90d12c73ef1784d3d22f0494d2aa3655c1832 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index dcd3cd8083358269d6ed7894726283bb9bcbbfea..6d29ae3a6b914af33cc76b6776669be0971e0287 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000000000000000000000000000000000..476959a151f8af786665839440e656991e4ee367
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
index 459ca609d3ae0d3943ab44cdc27feef9256dc6d7..b86d2cba1aaae2506c0237cf37a186e060c34f46 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 8ca12fe024be86e868d14e91120a6902f8e88ac6..c3080dfe526ec32d7d7be5b9a0f6f3539836cf0f 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d8c84c83ab31f36861c0c4b66717e7cfa6399c8
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
index 8e19b410a1b15ff180f3dacac19395fe3046cdec..9a3d2e8ba79ca6d8d7dfdb94c4ef4d2bccb0aef7 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index b824ebdd48db917eea2e67a82260a100371f8a24..a49fe49f82e87ded95a73e2c946c2e090f9063a6 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d867a7756a624361909c37c1e29373b57945888
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
index 4c19a13c239cb67b8a2134ddd5f325db1d2d5bee..926f2725c7d9f3d45b4e357df0f1f2175fb89038 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd7a058433df8e82194e88d4192fb6fcb9a20908
--- /dev/null
+++ b/app/src/main/res/values-v21/styles.xml
@@ -0,0 +1,8 @@
+<resources>
+
+    <style name="AppTheme.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+        <item name="android:statusBarColor">@android:color/transparent</item>
+    </style>
+</resources>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 3ab3e9cbce07f7cdc941fc8ba424c05e83ed80f0..2063f94c8b5ed91fdb4c9680ce3700d9d89af263 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <color name="colorPrimary">#3F51B5</color>
-    <color name="colorPrimaryDark">#303F9F</color>
-    <color name="colorAccent">#FF4081</color>
+    <color name="colorPrimary">#9E9E9E</color>
+    <color name="colorPrimaryDark">#616161</color>
+    <color name="colorAccent">#BDBDBD</color>
 </resources>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ab4520ffa990a8cd9759d59f22dce30cf158528
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,8 @@
+<resources>
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+    <dimen name="nav_header_vertical_spacing">8dp</dimen>
+    <dimen name="nav_header_height">176dp</dimen>
+    <dimen name="fab_margin">16dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5d5899fdf0a1b144bf341b29e0c66ba50bbcedd
--- /dev/null
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="ic_launcher_background">#FFFFFF</color>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f819e4f8b4d66a0e8cb55edb63d929de40d013b8..a462b0725c4a9e76bc7fad9006544174a132d446 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,12 @@
 <resources>
     <string name="app_name">XKCD browser</string>
+    <string name="title_activity_main">XKCD Browser</string>
+    <string name="navigation_drawer_open">Open navigation drawer</string>
+    <string name="navigation_drawer_close">Close navigation drawer</string>
+    <string name="nav_header_title">XKCD</string>
+    <string name="nav_header_subtitle">A webcomic of romance, sarcasm, math, and language.</string>
+    <string name="nav_header_desc">Navigation header</string>
+    <string name="action_settings">Favorite</string>
+    <string name="title_activity_favorites">Favorites</string>
+    <string name="title_activity_detail">Detail</string>
 </resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5885930df6d10edf3d6df40d6556297d11f953da..5e399fa2ef03d01365e9c9dff7940aec2c4ba97b 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,11 +1,20 @@
 <resources>
 
     <!-- Base application theme. -->
-    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
         <!-- Customize your theme here. -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
         <item name="colorAccent">@color/colorAccent</item>
     </style>
 
+    <style name="AppTheme.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
+
+    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
+
 </resources>
diff --git a/build.gradle b/build.gradle
index eccff49eab7c57365178b7fda17863645a2efbc7..1a3d812308d49457ea04cd40dacb56edffcd19a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.1.1'
+        classpath 'com.android.tools.build:gradle:3.1.2'
         
 
         // NOTE: Do not place your application dependencies here; they belong