From 4966f1e15ffc8c26306d35a2a2d7cc2fd8f088b2 Mon Sep 17 00:00:00 2001
From: inorichi <chibilen@gmail.com>
Date: Wed, 21 Oct 2015 17:20:03 +0200
Subject: [PATCH] Convert catalogue to a fragment

---
 app/src/main/AndroidManifest.xml              |  9 ----
 .../eu/kanade/mangafeed/AppComponent.java     |  2 +-
 .../presenter/CataloguePresenter.java         |  6 +--
 .../mangafeed/ui/activity/BaseActivity.java   | 11 ++++-
 .../mangafeed/ui/activity/MainActivity.java   |  6 +--
 .../mangafeed/ui/fragment/BaseFragment.java   |  9 ++++
 .../CatalogueFragment.java}                   | 49 +++++++++++--------
 .../mangafeed/ui/fragment/SourceFragment.java | 10 ++--
 .../main/res/layout/activity_catalogue.xml    | 45 -----------------
 .../main/res/layout/fragment_catalogue.xml    | 38 ++++++++++++--
 .../main/res/layout/fragment_manga_info.xml   |  2 +-
 app/src/main/res/layout/fragment_source.xml   | 13 +++++
 12 files changed, 103 insertions(+), 97 deletions(-)
 rename app/src/main/java/eu/kanade/mangafeed/ui/{activity/CatalogueActivity.java => fragment/CatalogueFragment.java} (77%)
 delete mode 100644 app/src/main/res/layout/activity_catalogue.xml
 create mode 100644 app/src/main/res/layout/fragment_source.xml

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 957876e95..86e3a0b55 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,15 +28,6 @@
             android:label="@string/title_activity_manga_detail"
             android:parentActivityName=".ui.activity.MainActivity" >
         </activity>
-        <activity
-            android:name=".ui.activity.CatalogueActivity"
-            android:label="@string/title_activity_catalogue_list"
-            android:parentActivityName=".ui.activity.MainActivity"
-            android:theme="@style/AppTheme" >
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="eu.kanade.mangafeed.ui.activity.MainActivity" />
-        </activity>
         <activity
             android:name=".ui.activity.ReaderActivity"
             android:label="@string/title_activity_viewer"
diff --git a/app/src/main/java/eu/kanade/mangafeed/AppComponent.java b/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
index 14c8f97dd..4557c3550 100644
--- a/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
+++ b/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
@@ -12,8 +12,8 @@ import eu.kanade.mangafeed.presenter.MainPresenter;
 import eu.kanade.mangafeed.presenter.MangaChaptersPresenter;
 import eu.kanade.mangafeed.presenter.MangaDetailPresenter;
 import eu.kanade.mangafeed.presenter.MangaInfoPresenter;
-import eu.kanade.mangafeed.presenter.SourcePresenter;
 import eu.kanade.mangafeed.presenter.ReaderPresenter;
+import eu.kanade.mangafeed.presenter.SourcePresenter;
 
 @Singleton
 @Component(
diff --git a/app/src/main/java/eu/kanade/mangafeed/presenter/CataloguePresenter.java b/app/src/main/java/eu/kanade/mangafeed/presenter/CataloguePresenter.java
index 05a5fbec6..3fcb8aa8e 100644
--- a/app/src/main/java/eu/kanade/mangafeed/presenter/CataloguePresenter.java
+++ b/app/src/main/java/eu/kanade/mangafeed/presenter/CataloguePresenter.java
@@ -14,7 +14,7 @@ import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
 import eu.kanade.mangafeed.data.helpers.SourceManager;
 import eu.kanade.mangafeed.data.models.Manga;
 import eu.kanade.mangafeed.sources.Source;
-import eu.kanade.mangafeed.ui.activity.CatalogueActivity;
+import eu.kanade.mangafeed.ui.fragment.CatalogueFragment;
 import eu.kanade.mangafeed.util.PageBundle;
 import eu.kanade.mangafeed.util.RxPager;
 import icepick.State;
@@ -24,7 +24,7 @@ import rx.android.schedulers.AndroidSchedulers;
 import rx.schedulers.Schedulers;
 import rx.subjects.PublishSubject;
 
-public class CataloguePresenter extends BasePresenter<CatalogueActivity> {
+public class CataloguePresenter extends BasePresenter<CatalogueFragment> {
 
     @Inject SourceManager sourceManager;
     @Inject DatabaseHelper db;
@@ -67,7 +67,7 @@ public class CataloguePresenter extends BasePresenter<CatalogueActivity> {
     }
 
     @Override
-    protected void onTakeView(CatalogueActivity view) {
+    protected void onTakeView(CatalogueFragment view) {
         super.onTakeView(view);
 
         view.setToolbarTitle(selectedSource.getName());
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/BaseActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/activity/BaseActivity.java
index e40afaef6..97ea61110 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/activity/BaseActivity.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/activity/BaseActivity.java
@@ -24,11 +24,18 @@ public class BaseActivity<P extends Presenter> extends NucleusAppCompatActivity<
 
     protected void setupToolbar(Toolbar toolbar) {
         setSupportActionBar(toolbar);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        if (getSupportActionBar() != null)
+            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     }
 
     public void setToolbarTitle(String title) {
-        getSupportActionBar().setTitle(title);
+        if (getSupportActionBar() != null)
+            getSupportActionBar().setTitle(title);
+    }
+
+    public void setToolbarTitle(int titleResource) {
+        if (getSupportActionBar() != null)
+            getSupportActionBar().setTitle(getString(titleResource));
     }
 
     public Context getActivity() {
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/MainActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MainActivity.java
index 13e46ab0c..208fe513c 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/activity/MainActivity.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MainActivity.java
@@ -82,7 +82,7 @@ public class MainActivity extends BaseActivity<MainPresenter> {
         drawer.setSelection(R.id.nav_drawer_library);
     }
 
-    private void setFragment(Fragment fragment) {
+    public void setFragment(Fragment fragment) {
         try {
             if (fragment != null && getSupportFragmentManager() != null) {
                 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
@@ -96,8 +96,4 @@ public class MainActivity extends BaseActivity<MainPresenter> {
         }
     }
 
-    public void setToolbarTitle(int titleResource) {
-        getSupportActionBar().setTitle(getString(titleResource));
-    }
-
 }
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/BaseFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/BaseFragment.java
index b220bf513..25c91f457 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/BaseFragment.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/BaseFragment.java
@@ -3,6 +3,7 @@ package eu.kanade.mangafeed.ui.fragment;
 import android.os.Bundle;
 
 import eu.kanade.mangafeed.App;
+import eu.kanade.mangafeed.ui.activity.BaseActivity;
 import nucleus.factory.PresenterFactory;
 import nucleus.presenter.Presenter;
 import nucleus.view.NucleusSupportFragment;
@@ -20,4 +21,12 @@ public class BaseFragment<P extends Presenter> extends NucleusSupportFragment<P>
         super.onCreate(savedInstanceState);
     }
 
+    public void setToolbarTitle(String title) {
+        ((BaseActivity)getActivity()).setToolbarTitle(title);
+    }
+
+    public void setToolbarTitle(int resourceId) {
+        ((BaseActivity)getActivity()).setToolbarTitle(getString(resourceId));
+    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/CatalogueActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/CatalogueFragment.java
similarity index 77%
rename from app/src/main/java/eu/kanade/mangafeed/ui/activity/CatalogueActivity.java
rename to app/src/main/java/eu/kanade/mangafeed/ui/fragment/CatalogueFragment.java
index 52a82422d..348a388ab 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/activity/CatalogueActivity.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/CatalogueFragment.java
@@ -1,13 +1,14 @@
-package eu.kanade.mangafeed.ui.activity;
+package eu.kanade.mangafeed.ui.fragment;
 
-import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.widget.SearchView;
-import android.support.v7.widget.Toolbar;
+import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.GridView;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
@@ -22,6 +23,7 @@ import butterknife.OnItemClick;
 import eu.kanade.mangafeed.R;
 import eu.kanade.mangafeed.data.models.Manga;
 import eu.kanade.mangafeed.presenter.CataloguePresenter;
+import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
 import eu.kanade.mangafeed.ui.adapter.CatalogueHolder;
 import eu.kanade.mangafeed.util.PageBundle;
 import eu.kanade.mangafeed.widget.EndlessScrollListener;
@@ -29,10 +31,7 @@ import nucleus.factory.RequiresPresenter;
 import uk.co.ribot.easyadapter.EasyAdapter;
 
 @RequiresPresenter(CataloguePresenter.class)
-public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
-
-    @Bind(R.id.toolbar)
-    Toolbar toolbar;
+public class CatalogueFragment extends BaseFragment<CataloguePresenter> {
 
     @Bind(R.id.gridView)
     GridView manga_list;
@@ -49,34 +48,44 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
 
     public final static String SOURCE_ID = "source_id";
 
-    public static Intent newIntent(Context context, int source_id) {
-        Intent intent = new Intent(context, CatalogueActivity.class);
-        intent.putExtra(SOURCE_ID, source_id);
-        return intent;
+    public static CatalogueFragment newInstance(int source_id) {
+        CatalogueFragment fragment = new CatalogueFragment();
+        Bundle args = new Bundle();
+        args.putInt(SOURCE_ID, source_id);
+        fragment.setArguments(args);
+        return fragment;
     }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_catalogue);
-        ButterKnife.bind(this);
+        setHasOptionsMenu(true);
+    }
 
-        setupToolbar(toolbar);
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+        View view = inflater.inflate(R.layout.fragment_catalogue, container, false);
+        ButterKnife.bind(this, view);
 
         initializeAdapter();
         initializeScrollListener();
 
-        int source_id = getIntent().getIntExtra(SOURCE_ID, -1);
+        int source_id = getArguments().getInt(SOURCE_ID, -1);
+
+        showProgressBar();
 
         if (savedInstanceState == null)
             getPresenter().startRequesting(source_id);
+
+        return view;
     }
 
     @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.catalogue_list, menu);
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.catalogue_list, menu);
         initializeSearch(menu);
-        return super.onCreateOptionsMenu(menu);
     }
 
     private void initializeSearch(Menu menu) {
@@ -107,7 +116,7 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
     }
 
     public void initializeAdapter() {
-        adapter = new EasyAdapter<>(this, CatalogueHolder.class);
+        adapter = new EasyAdapter<>(getActivity(), CatalogueHolder.class);
         manga_list.setAdapter(adapter);
     }
 
@@ -115,7 +124,7 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
     public void onMangaClick(int position) {
         Manga selectedManga = adapter.getItem(position);
 
-        Intent intent = MangaDetailActivity.newIntent(this, selectedManga);
+        Intent intent = MangaDetailActivity.newIntent(getActivity(), selectedManga);
         intent.putExtra(MangaDetailActivity.MANGA_ONLINE, true);
         startActivity(intent);
     }
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/SourceFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/SourceFragment.java
index 23a4b4e18..3cce7a2dc 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/SourceFragment.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/SourceFragment.java
@@ -1,6 +1,5 @@
 package eu.kanade.mangafeed.ui.fragment;
 
-import android.content.Intent;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -15,7 +14,6 @@ import butterknife.OnItemClick;
 import eu.kanade.mangafeed.R;
 import eu.kanade.mangafeed.presenter.SourcePresenter;
 import eu.kanade.mangafeed.sources.Source;
-import eu.kanade.mangafeed.ui.activity.CatalogueActivity;
 import eu.kanade.mangafeed.ui.activity.MainActivity;
 import eu.kanade.mangafeed.ui.adapter.SourceHolder;
 import nucleus.factory.RequiresPresenter;
@@ -43,10 +41,10 @@ public class SourceFragment extends BaseFragment<SourcePresenter> {
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         // Inflate the layout for this fragment
-        View view = inflater.inflate(R.layout.fragment_catalogue, container, false);
+        View view = inflater.inflate(R.layout.fragment_source, container, false);
         ButterKnife.bind(this, view);
 
-        activity.setToolbarTitle(R.string.catalogues_title);
+        setToolbarTitle(R.string.catalogues_title);
 
         createAdapter();
 
@@ -57,8 +55,8 @@ public class SourceFragment extends BaseFragment<SourcePresenter> {
     public void onSourceClick(int position) {
         Source source = adapter.getItem(position);
 
-        Intent intent = CatalogueActivity.newIntent(activity, source.getSourceId());
-        startActivity(intent);
+        CatalogueFragment fragment = CatalogueFragment.newInstance(source.getSourceId());
+        activity.setFragment(fragment);
     }
 
     private void createAdapter() {
diff --git a/app/src/main/res/layout/activity_catalogue.xml b/app/src/main/res/layout/activity_catalogue.xml
deleted file mode 100644
index 3d9d53f2e..000000000
--- a/app/src/main/res/layout/activity_catalogue.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" android:fitsSystemWindows="true"
-    tools:context="eu.kanade.mangafeed.ui.activity.CatalogueActivity">
-
-    <include
-        android:id="@+id/toolbar"
-        layout="@layout/toolbar"/>
-
-    <ProgressBar
-        android:id="@+id/progress"
-        style="?android:attr/progressBarStyleLarge"
-        android:layout_width="wrap_content"
-        android:layout_height="fill_parent"
-        android:layout_gravity="center_vertical|center_horizontal"
-        android:visibility="gone" />
-
-    <GridView
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:id="@+id/gridView"
-        android:padding="10dp"
-        android:clipToPadding="false"
-        android:verticalSpacing="8dp"
-        android:horizontalSpacing="8dp"
-        android:columnWidth="96dp"
-        android:numColumns="auto_fit"
-        android:stretchMode="columnWidth"
-        android:fastScrollEnabled="true"
-        tools:listitem="@layout/item_catalogue" />
-
-    <ProgressBar
-        android:id="@+id/progress_grid"
-        style="?android:attr/progressBarStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical|center_horizontal"
-        android:visibility="gone" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/fragment_catalogue.xml b/app/src/main/res/layout/fragment_catalogue.xml
index 9d672fb29..d1adda782 100644
--- a/app/src/main/res/layout/fragment_catalogue.xml
+++ b/app/src/main/res/layout/fragment_catalogue.xml
@@ -1,13 +1,41 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="eu.kanade.mangafeed.ui.fragment.SourceFragment">
+    android:layout_height="match_parent" android:fitsSystemWindows="true"
+    tools:context="eu.kanade.mangafeed.ui.fragment.CatalogueFragment">
 
+    <ProgressBar
+        android:id="@+id/progress"
+        style="?android:attr/progressBarStyleLarge"
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:layout_gravity="center_vertical|center_horizontal"
+        android:visibility="gone" />
 
-    <ListView
+    <GridView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:id="@+id/gridView"
+        android:padding="10dp"
+        android:clipToPadding="false"
+        android:verticalSpacing="8dp"
+        android:horizontalSpacing="8dp"
+        android:columnWidth="96dp"
+        android:numColumns="auto_fit"
+        android:stretchMode="columnWidth"
+        android:fastScrollEnabled="true"
+        tools:listitem="@layout/item_catalogue" />
+
+    <ProgressBar
+        android:id="@+id/progress_grid"
+        style="?android:attr/progressBarStyle"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:id="@+id/catalogue_list" />
+        android:layout_gravity="center_vertical|center_horizontal"
+        android:visibility="gone" />
 
 </LinearLayout>
diff --git a/app/src/main/res/layout/fragment_manga_info.xml b/app/src/main/res/layout/fragment_manga_info.xml
index e637dbbca..6df249914 100644
--- a/app/src/main/res/layout/fragment_manga_info.xml
+++ b/app/src/main/res/layout/fragment_manga_info.xml
@@ -5,7 +5,7 @@
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent" android:fitsSystemWindows="true"
-    tools:context="eu.kanade.mangafeed.ui.activity.CatalogueActivity">
+    tools:context="eu.kanade.mangafeed.ui.fragment.CatalogueFragment">
 
     <LinearLayout
         android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/fragment_source.xml b/app/src/main/res/layout/fragment_source.xml
new file mode 100644
index 000000000..9d672fb29
--- /dev/null
+++ b/app/src/main/res/layout/fragment_source.xml
@@ -0,0 +1,13 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="eu.kanade.mangafeed.ui.fragment.SourceFragment">
+
+
+    <ListView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/catalogue_list" />
+
+</LinearLayout>