From f5bcf301d0c942c3481a679ada6cd158e5d377ce 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 22:42:01 +0200
Subject: [PATCH] create detail screen

---
 .../adapter/FavoriteListAdapter.java          |  2 +-
 .../xkcdbrowser/ui/detail/DetailActivity.java | 81 ++++++++++++++++---
 .../ui/detail/DetailPresenter.java            | 21 ++---
 .../xkcdbrowser/ui/detail/DetailScreen.java   |  5 ++
 .../ui/favorites/FavoritesActivity.java       | 15 ++--
 app/src/main/res/drawable/side_nav_bar.xml    |  8 +-
 app/src/main/res/layout/activity_detail.xml   |  8 --
 app/src/main/res/layout/content_detail.xml    | 14 ++++
 app/src/main/res/values/strings.xml           |  6 +-
 9 files changed, 111 insertions(+), 49 deletions(-)

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
index 8ba4187..17c082b 100644
--- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java
+++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/adapter/FavoriteListAdapter.java
@@ -73,7 +73,7 @@ public class FavoriteListAdapter extends RecyclerView.Adapter<FavoriteListAdapte
         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()));
+        holder.date.setText(String.format("%s.%02d.%02d.", comicStrip.getYear(), Integer.parseInt(comicStrip.getMonth()), Integer.parseInt(comicStrip.getDay())));
     }
 
     @Override
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 e26a76b..4a2306a 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,15 +1,35 @@
 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.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
+import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
-import android.view.View;
+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 {
 
-public class DetailActivity extends AppCompatActivity {
+    @Inject
+    DetailPresenter detailPresenter;
+
+    private ImageView detailImageView;
+    private Long num;
+
+    public DetailActivity() {
+        XKCDBrowserApplication.injector.inject(this);
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -17,16 +37,53 @@ public class DetailActivity extends AppCompatActivity {
         setContentView(R.layout.activity_detail);
         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+        this.detailImageView = findViewById(R.id.detailImageView);
+
+        Intent i = getIntent();
+        num = i.getLongExtra("num", 0l);
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
 
-        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
-        fab.setOnClickListener(new View.OnClickListener() {
+        this.detailPresenter.attachScreen(this);
+        detailPresenter.getComicByNum(Long.valueOf(num));
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+
+        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 onClick(View view) {
-                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
-                        .setAction("Action", null).show();
+            public void run() {
+                detailImageView.setImageBitmap(finalMIcon_val);
+                setTitle(comic.getTitle());
             }
-        });
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        };
+        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 19377a0..d24e48a 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 9c33c64..555cc96 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 9c96cbd..5944789 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
@@ -3,24 +3,20 @@ 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.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.Menu;
 import android.view.MenuItem;
+import android.view.View;
 import android.widget.LinearLayout;
-import android.widget.Toast;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.inject.Inject;
@@ -125,6 +121,7 @@ public class FavoritesActivity extends AppCompatActivity
     @Override
     public void onClick(int position, View v) {
         Intent i = new Intent(getApplicationContext(), DetailActivity.class);
+        i.putExtra("num", mAdapter.getComicStripByNum(position).getNum());
         startActivity(i);
     }
 
diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml
index 6d81870..d36ebc4 100644
--- a/app/src/main/res/drawable/side_nav_bar.xml
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -1,9 +1,5 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <gradient
-        android:angle="135"
-        android:centerColor="#009688"
-        android:endColor="#00695C"
-        android:startColor="#4DB6AC"
-        android:type="linear" />
+    <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 b0c06b3..c89fd98 100644
--- a/app/src/main/res/layout/activity_detail.xml
+++ b/app/src/main/res/layout/activity_detail.xml
@@ -23,12 +23,4 @@
 
     <include layout="@layout/content_detail" />
 
-    <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/content_detail.xml b/app/src/main/res/layout/content_detail.xml
index ba9444c..1141fc8 100644
--- a/app/src/main/res/layout/content_detail.xml
+++ b/app/src/main/res/layout/content_detail.xml
@@ -8,4 +8,18 @@
     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/values/strings.xml b/app/src/main/res/values/strings.xml
index 259fb49..a462b07 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,10 +1,10 @@
 <resources>
     <string name="app_name">XKCD browser</string>
-    <string name="title_activity_main">MainActivity</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">Android Studio</string>
-    <string name="nav_header_subtitle">android.studio@android.com</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>
-- 
GitLab