diff --git a/app/build.gradle b/app/build.gradle
index b0ebe9e2ba..83b4036c05 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,6 +42,7 @@ dependencies {
final DAGGER_VERSION = '2.0.1'
final HAMCREST_VERSION = '1.3'
final MOCKITO_VERSION = '1.10.19'
+ final STORIO_VERSION = '1.4.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
@@ -54,8 +55,8 @@ dependencies {
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
compile 'com.squareup.okhttp:okhttp:2.4.0'
- compile 'com.pushtorefresh.storio:sqlite:1.4.0'
- compile 'com.pushtorefresh.storio:sqlite-annotations:1.4.0'
+ compile "com.pushtorefresh.storio:sqlite:$STORIO_VERSION"
+ compile "com.pushtorefresh.storio:sqlite-annotations:$STORIO_VERSION"
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.github.bumptech.glide:glide:3.6.1'
compile 'de.hdodenhof:circleimageview:1.3.0'
@@ -66,6 +67,7 @@ dependencies {
compile "com.google.dagger:dagger:$DAGGER_VERSION"
apt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
+ apt "com.pushtorefresh.storio:sqlite-annotations-processor:$STORIO_VERSION"
provided 'org.glassfish:javax.annotation:10.0-b28'
compile('com.mikepenz:materialdrawer:4.3.0@aar') {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 445d7a99be..c6dbe092db 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,9 +12,9 @@
android:label="@string/app_name"
android:theme="@style/AppTheme" >
+ android:theme="@style/AppTheme.NoActionBar" >
@@ -22,14 +22,14 @@
-
-
-
-
-
-
+
+
+
diff --git a/app/src/main/java/eu/kanade/mangafeed/App.java b/app/src/main/java/eu/kanade/mangafeed/App.java
index 3e0039dcc9..60fcbd1860 100644
--- a/app/src/main/java/eu/kanade/mangafeed/App.java
+++ b/app/src/main/java/eu/kanade/mangafeed/App.java
@@ -27,6 +27,10 @@ public class App extends Application {
return mApplicationComponent;
}
+ public static AppComponent getComponent(Context context) {
+ return get(context).getComponent();
+ }
+
// Needed to replace the component with a test specific one
public void setComponent(AppComponent applicationComponent) {
mApplicationComponent = applicationComponent;
diff --git a/app/src/main/java/eu/kanade/mangafeed/AppComponent.java b/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
index 765f1bf948..093ad1e993 100644
--- a/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
+++ b/app/src/main/java/eu/kanade/mangafeed/AppComponent.java
@@ -7,6 +7,8 @@ import javax.inject.Singleton;
import dagger.Component;
import eu.kanade.mangafeed.data.DataModule;
import eu.kanade.mangafeed.ui.activity.MainActivity;
+import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
+import eu.kanade.mangafeed.ui.fragment.LibraryFragment;
@Singleton
@Component(
@@ -18,6 +20,8 @@ import eu.kanade.mangafeed.ui.activity.MainActivity;
public interface AppComponent {
void inject(MainActivity mainActivity);
+ void inject(LibraryFragment libraryFragment);
+ void inject(MangaDetailActivity mangaDetailActivity);
Application application();
}
\ No newline at end of file
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/helpers/DatabaseHelper.java b/app/src/main/java/eu/kanade/mangafeed/data/helpers/DatabaseHelper.java
index 2b767e0f56..afa07905ee 100644
--- a/app/src/main/java/eu/kanade/mangafeed/data/helpers/DatabaseHelper.java
+++ b/app/src/main/java/eu/kanade/mangafeed/data/helpers/DatabaseHelper.java
@@ -2,42 +2,44 @@ package eu.kanade.mangafeed.data.helpers;
import android.content.Context;
+import com.pushtorefresh.storio.sqlite.SQLiteTypeMapping;
import com.pushtorefresh.storio.sqlite.StorIOSQLite;
import com.pushtorefresh.storio.sqlite.impl.DefaultStorIOSQLite;
-import com.pushtorefresh.storio.sqlite.queries.Query;
-import java.util.List;
+import eu.kanade.mangafeed.data.managers.ChapterManager;
+import eu.kanade.mangafeed.data.models.Chapter;
+import eu.kanade.mangafeed.data.models.ChapterStorIOSQLiteDeleteResolver;
+import eu.kanade.mangafeed.data.models.ChapterStorIOSQLiteGetResolver;
+import eu.kanade.mangafeed.data.models.ChapterStorIOSQLitePutResolver;
+import eu.kanade.mangafeed.data.models.Manga;
+import eu.kanade.mangafeed.data.models.MangaStorIOSQLiteDeleteResolver;
+import eu.kanade.mangafeed.data.models.MangaStorIOSQLiteGetResolver;
+import eu.kanade.mangafeed.data.models.MangaStorIOSQLitePutResolver;
+import eu.kanade.mangafeed.data.managers.MangaManager;
-import eu.kanade.mangafeed.data.entities.Manga;
-import eu.kanade.mangafeed.data.tables.MangasTable;
-import rx.Observable;
-
-/**
- * Created by len on 23/09/2015.
- */
public class DatabaseHelper {
private StorIOSQLite db;
+ public MangaManager manga;
+ public ChapterManager chapter;
public DatabaseHelper(Context context) {
db = DefaultStorIOSQLite.builder()
.sqliteOpenHelper(new DbOpenHelper(context))
- .build();
- }
-
- public StorIOSQLite getStorIODb() {
- return db;
- }
-
- public Observable> getMangas() {
- return db.get()
- .listOfObjects(Manga.class)
- .withQuery(Query.builder()
- .table(MangasTable.TABLE)
+ .addTypeMapping(Manga.class, SQLiteTypeMapping.builder()
+ .putResolver(new MangaStorIOSQLitePutResolver())
+ .getResolver(new MangaStorIOSQLiteGetResolver())
+ .deleteResolver(new MangaStorIOSQLiteDeleteResolver())
.build())
- .prepare()
- .createObservable();
+ .addTypeMapping(Chapter.class, SQLiteTypeMapping.builder()
+ .putResolver(new ChapterStorIOSQLitePutResolver())
+ .getResolver(new ChapterStorIOSQLiteGetResolver())
+ .deleteResolver(new ChapterStorIOSQLiteDeleteResolver())
+ .build())
+ .build();
+ manga = new MangaManager(db);
+ chapter = new ChapterManager(db);
}
}
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/helpers/DbOpenHelper.java b/app/src/main/java/eu/kanade/mangafeed/data/helpers/DbOpenHelper.java
index d3e0fcd4d6..8354343c45 100644
--- a/app/src/main/java/eu/kanade/mangafeed/data/helpers/DbOpenHelper.java
+++ b/app/src/main/java/eu/kanade/mangafeed/data/helpers/DbOpenHelper.java
@@ -7,9 +7,6 @@ import android.support.annotation.NonNull;
import eu.kanade.mangafeed.data.tables.MangasTable;
-/**
- * Created by len on 23/09/2015.
- */
public class DbOpenHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "mangafeed.db";
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/managers/BaseManager.java b/app/src/main/java/eu/kanade/mangafeed/data/managers/BaseManager.java
new file mode 100644
index 0000000000..bab0ca8817
--- /dev/null
+++ b/app/src/main/java/eu/kanade/mangafeed/data/managers/BaseManager.java
@@ -0,0 +1,12 @@
+package eu.kanade.mangafeed.data.managers;
+
+import com.pushtorefresh.storio.sqlite.StorIOSQLite;
+
+public abstract class BaseManager {
+
+ protected StorIOSQLite db;
+
+ public BaseManager(StorIOSQLite db) {
+ this.db = db;
+ }
+}
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/managers/ChapterManager.java b/app/src/main/java/eu/kanade/mangafeed/data/managers/ChapterManager.java
new file mode 100644
index 0000000000..daf9689a5f
--- /dev/null
+++ b/app/src/main/java/eu/kanade/mangafeed/data/managers/ChapterManager.java
@@ -0,0 +1,33 @@
+package eu.kanade.mangafeed.data.managers;
+
+import com.pushtorefresh.storio.sqlite.StorIOSQLite;
+import com.pushtorefresh.storio.sqlite.queries.Query;
+
+import java.util.List;
+
+import eu.kanade.mangafeed.data.models.Chapter;
+import eu.kanade.mangafeed.data.models.Manga;
+import eu.kanade.mangafeed.data.tables.ChaptersTable;
+import rx.Observable;
+
+/**
+ * Created by len on 26/09/2015.
+ */
+public class ChapterManager extends BaseManager {
+
+ public ChapterManager(StorIOSQLite db) {
+ super(db);
+ }
+
+ public Observable> get(Manga manga) {
+ return db.get()
+ .listOfObjects(Chapter.class)
+ .withQuery(Query.builder()
+ .table(ChaptersTable.TABLE)
+ .where(ChaptersTable.COLUMN_MANGA_ID + "=?")
+ .whereArgs(manga.id)
+ .build())
+ .prepare()
+ .createObservable();
+ }
+}
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/managers/MangaManager.java b/app/src/main/java/eu/kanade/mangafeed/data/managers/MangaManager.java
new file mode 100644
index 0000000000..6a6519b0a5
--- /dev/null
+++ b/app/src/main/java/eu/kanade/mangafeed/data/managers/MangaManager.java
@@ -0,0 +1,37 @@
+package eu.kanade.mangafeed.data.managers;
+
+import com.pushtorefresh.storio.sqlite.StorIOSQLite;
+import com.pushtorefresh.storio.sqlite.operations.put.PutResult;
+import com.pushtorefresh.storio.sqlite.queries.Query;
+
+import java.util.List;
+
+import eu.kanade.mangafeed.data.models.Manga;
+import eu.kanade.mangafeed.data.tables.MangasTable;
+import rx.Observable;
+
+public class MangaManager extends BaseManager {
+ List mangass;
+
+ public MangaManager(StorIOSQLite db) {
+ super(db);
+ }
+
+ public Observable> get() {
+ return db.get()
+ .listOfObjects(Manga.class)
+ .withQuery(Query.builder()
+ .table(MangasTable.TABLE)
+ .build())
+ .prepare()
+ .createObservable();
+ }
+
+ public Observable insert(Manga manga) {
+ return db.put()
+ .object(manga)
+ .prepare()
+ .createObservable();
+ }
+
+}
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/models/Chapter.java b/app/src/main/java/eu/kanade/mangafeed/data/models/Chapter.java
new file mode 100644
index 0000000000..030f7e8f4d
--- /dev/null
+++ b/app/src/main/java/eu/kanade/mangafeed/data/models/Chapter.java
@@ -0,0 +1,67 @@
+package eu.kanade.mangafeed.data.models;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
+import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
+
+import eu.kanade.mangafeed.data.tables.ChaptersTable;
+
+@StorIOSQLiteType(table = ChaptersTable.TABLE)
+public class Chapter {
+
+ @Nullable
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_ID, key = true)
+ public Long id;
+
+ @NonNull
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_MANGA_ID)
+ public int manga_id;
+
+ @NonNull
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_URL)
+ public String url;
+
+ @NonNull
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_NAME)
+ public String name;
+
+ @NonNull
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_READ)
+ public int read;
+
+ @NonNull
+ @StorIOSQLiteColumn(name = ChaptersTable.COLUMN_DATE_FETCH)
+ public long date_fetch;
+
+
+ public Chapter() {}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Chapter chapter = (Chapter) o;
+
+ if (manga_id != chapter.manga_id) return false;
+ if (read != chapter.read) return false;
+ if (date_fetch != chapter.date_fetch) return false;
+ if (id != null ? !id.equals(chapter.id) : chapter.id != null) return false;
+ if (!url.equals(chapter.url)) return false;
+ return name.equals(chapter.name);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id != null ? id.hashCode() : 0;
+ result = 31 * result + manga_id;
+ result = 31 * result + url.hashCode();
+ result = 31 * result + name.hashCode();
+ result = 31 * result + read;
+ result = 31 * result + (int) (date_fetch ^ (date_fetch >>> 32));
+ return result;
+ }
+}
diff --git a/app/src/main/java/eu/kanade/mangafeed/data/entities/Manga.java b/app/src/main/java/eu/kanade/mangafeed/data/models/Manga.java
similarity index 97%
rename from app/src/main/java/eu/kanade/mangafeed/data/entities/Manga.java
rename to app/src/main/java/eu/kanade/mangafeed/data/models/Manga.java
index cf22206a01..4fb5483ad0 100644
--- a/app/src/main/java/eu/kanade/mangafeed/data/entities/Manga.java
+++ b/app/src/main/java/eu/kanade/mangafeed/data/models/Manga.java
@@ -1,8 +1,4 @@
-package eu.kanade.mangafeed.data.entities;
-
-/**
- * Created by len on 23/09/2015.
- */
+package eu.kanade.mangafeed.data.models;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -74,7 +70,7 @@ public class Manga {
@StorIOSQLiteColumn(name = MangasTable.COLUMN_CHAPTER_ORDER)
public int chapter_order;
- Manga() {}
+ public Manga() {}
public Manga(String title) {
this.title = title;
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java
new file mode 100644
index 0000000000..183e18cbf5
--- /dev/null
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java
@@ -0,0 +1,56 @@
+package eu.kanade.mangafeed.ui.activity;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import de.greenrobot.event.EventBus;
+import eu.kanade.mangafeed.R;
+import eu.kanade.mangafeed.data.models.Manga;
+
+public class MangaDetailActivity extends AppCompatActivity {
+
+ Manga manga;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manga_detail);
+ EventBus.getDefault().registerSticky(this);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_manga_detail, menu);
+ 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.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onDestroy() {
+ EventBus.getDefault().unregister(this);
+
+ super.onDestroy();
+ }
+
+ public void onEvent(Manga manga) {
+ this.manga = manga;
+ //loadChapters();
+ }
+}
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/adapter/LibraryAdapter.java b/app/src/main/java/eu/kanade/mangafeed/ui/adapter/LibraryAdapter.java
index d0aec712ed..ef1f53a4a3 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/adapter/LibraryAdapter.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/adapter/LibraryAdapter.java
@@ -11,12 +11,12 @@ import android.widget.TextView;
import com.bumptech.glide.Glide;
-import java.util.ArrayList;
+import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import eu.kanade.mangafeed.R;
-import eu.kanade.mangafeed.data.entities.Manga;
+import eu.kanade.mangafeed.data.models.Manga;
import uk.co.ribot.easyadapter.annotations.LayoutId;
/**
@@ -28,9 +28,9 @@ public class LibraryAdapter extends ArrayAdapter {
Context context;
int layoutResourceId;
- ArrayList data;
+ List data;
- public LibraryAdapter(Context context, int layoutResourceId, ArrayList data) {
+ public LibraryAdapter(Context context, int layoutResourceId, List data) {
super(context, layoutResourceId, data);
this.context = context;
this.layoutResourceId = layoutResourceId;
diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/LibraryFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/LibraryFragment.java
index 4ed4dc3d33..22579f659a 100644
--- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/LibraryFragment.java
+++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/LibraryFragment.java
@@ -1,26 +1,38 @@
package eu.kanade.mangafeed.ui.fragment;
-import android.os.Bundle;
import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
-import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
+import de.greenrobot.event.EventBus;
+import eu.kanade.mangafeed.App;
import eu.kanade.mangafeed.R;
-import eu.kanade.mangafeed.data.entities.Manga;
+import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
+import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.ui.activity.BaseActivity;
import eu.kanade.mangafeed.ui.adapter.LibraryAdapter;
+import rx.functions.Action1;
public class LibraryFragment extends Fragment {
@Bind(R.id.gridView)
GridView grid;
+ @Inject
+ DatabaseHelper db;
+
+ List mangas;
+
public static LibraryFragment newInstance() {
LibraryFragment fragment = new LibraryFragment();
Bundle args = new Bundle();
@@ -33,19 +45,27 @@ public class LibraryFragment extends Fragment {
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_library, container, false);
+ App.getComponent(getActivity()).inject(this);
((BaseActivity) getActivity()).getSupportActionBar().setTitle(R.string.library_title);
-
ButterKnife.bind(this, view);
- ArrayList mangas = new ArrayList<>();
- mangas.add(new Manga("One Piece"));
- mangas.add(new Manga("Berserk"));
- mangas.add(new Manga("Fate/stay night: Unlimited Blade Works"));
+ db.manga.get().subscribe(
+ result -> {
+ mangas = result;
- LibraryAdapter adapter = new LibraryAdapter(getActivity(),
- R.layout.item_library, mangas);
+ LibraryAdapter adapter = new LibraryAdapter(getActivity(),
+ R.layout.item_library, mangas);
- grid.setAdapter(adapter);
+ grid.setAdapter(adapter);
+ grid.setOnItemClickListener(
+ (parent, v, position, id) -> {
+ Intent intent = new Intent(".ui.activity.MangaDetailActivity");
+ EventBus.getDefault().postSticky(adapter.getItem(position));
+ startActivity(intent);
+ }
+ );
+ }
+ );
return view;
}
diff --git a/app/src/main/res/layout/activity_manga_detail.xml b/app/src/main/res/layout/activity_manga_detail.xml
new file mode 100644
index 0000000000..469662e589
--- /dev/null
+++ b/app/src/main/res/layout/activity_manga_detail.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_chapter.xml b/app/src/main/res/layout/item_chapter.xml
new file mode 100644
index 0000000000..74e72cb488
--- /dev/null
+++ b/app/src/main/res/layout/item_chapter.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_manga_detail.xml b/app/src/main/res/menu/menu_manga_detail.xml
new file mode 100644
index 0000000000..4f27727c03
--- /dev/null
+++ b/app/src/main/res/menu/menu_manga_detail.xml
@@ -0,0 +1,7 @@
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5cc5ab3b99..400af76be1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -26,5 +26,9 @@
Recent updates
Catalogues
Settings
+ MangaDetailActivity
+
+ Hello world!
+ Settings