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