Search for library (not working)
@ -0,0 +1,18 @@
|
||||
package eu.kanade.mangafeed.presenter;
|
||||
|
||||
import de.greenrobot.event.EventBus;
|
||||
|
||||
public class BasePresenter {
|
||||
|
||||
public void registerForStickyEvents() {
|
||||
EventBus.getDefault().registerSticky(this);
|
||||
}
|
||||
|
||||
public void registerForEvents() {
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
public void unregisterForEvents() {
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
}
|
@ -10,11 +10,17 @@ import eu.kanade.mangafeed.data.helpers.PreferencesHelper;
|
||||
import eu.kanade.mangafeed.data.models.Manga;
|
||||
import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
|
||||
import eu.kanade.mangafeed.view.LibraryView;
|
||||
import rx.Observable;
|
||||
import rx.Subscription;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
import rx.subjects.PublishSubject;
|
||||
import timber.log.Timber;
|
||||
import uk.co.ribot.easyadapter.EasyAdapter;
|
||||
|
||||
import static rx.android.schedulers.AndroidSchedulers.mainThread;
|
||||
|
||||
public class LibraryPresenter {
|
||||
public class LibraryPresenter extends BasePresenter {
|
||||
|
||||
private LibraryView view;
|
||||
|
||||
@ -24,6 +30,9 @@ public class LibraryPresenter {
|
||||
@Inject
|
||||
PreferencesHelper prefs;
|
||||
|
||||
private Subscription searchViewSubscription;
|
||||
private PublishSubject<Observable<String>> searchViewPublishSubject;
|
||||
|
||||
public LibraryPresenter(LibraryView view) {
|
||||
this.view = view;
|
||||
App.getComponent(view.getActivity()).inject(this);
|
||||
@ -45,10 +54,24 @@ public class LibraryPresenter {
|
||||
view.getActivity().startActivity(intent);
|
||||
}
|
||||
|
||||
public void initializeSearch() {
|
||||
searchViewPublishSubject = PublishSubject.create();
|
||||
searchViewSubscription = Observable.switchOnNext(searchViewPublishSubject)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(Timber::w);
|
||||
}
|
||||
|
||||
public void initializeMangas() {
|
||||
db.manga.get()
|
||||
.observeOn(mainThread())
|
||||
.subscribe(view::setMangas);
|
||||
}
|
||||
|
||||
public void onQueryTextChange(String query) {
|
||||
if (searchViewPublishSubject != null) {
|
||||
searchViewPublishSubject.onNext(Observable.just(query));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
|
||||
import eu.kanade.mangafeed.data.models.Manga;
|
||||
import eu.kanade.mangafeed.view.MangaDetailView;
|
||||
|
||||
public class MangaDetailPresenter {
|
||||
public class MangaDetailPresenter extends BasePresenter {
|
||||
|
||||
private MangaDetailView view;
|
||||
|
||||
@ -20,14 +20,6 @@ public class MangaDetailPresenter {
|
||||
App.getComponent(view.getActivity()).inject(this);
|
||||
}
|
||||
|
||||
public void onStart() {
|
||||
EventBus.getDefault().registerSticky(this);
|
||||
}
|
||||
|
||||
public void onStop() {
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
public void onEventMainThread(Manga manga) {
|
||||
view.loadManga(manga);
|
||||
initializeChapters(manga);
|
||||
|
@ -89,22 +89,6 @@ public class MainActivity extends BaseActivity {
|
||||
mSubscriptions.unsubscribe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.main, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_github:
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void setFragment(Fragment fragment) {
|
||||
try {
|
||||
if (fragment != null && getSupportFragmentManager() != null) {
|
||||
|
@ -32,6 +32,12 @@ public class MangaDetailActivity extends BaseActivity implements MangaDetailView
|
||||
@Bind(R.id.manga_chapters_list)
|
||||
ListView list_chapters;
|
||||
|
||||
public static Intent newIntent(Context context, Manga manga) {
|
||||
Intent intent = new Intent(context, MangaDetailActivity.class);
|
||||
MangaDetailPresenter.newIntent(manga);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -42,44 +48,16 @@ public class MangaDetailActivity extends BaseActivity implements MangaDetailView
|
||||
setupToolbar(toolbar);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
public static Intent newIntent(Context context, Manga manga) {
|
||||
Intent intent = new Intent(context, MangaDetailActivity.class);
|
||||
MangaDetailPresenter.newIntent(manga);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
presenter.onStart();
|
||||
presenter.registerForStickyEvents();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
presenter.unregisterForEvents();
|
||||
super.onStop();
|
||||
presenter.onStop();
|
||||
}
|
||||
|
||||
public void loadManga(Manga manga) {
|
||||
|
@ -0,0 +1,6 @@
|
||||
package eu.kanade.mangafeed.ui.fragment;
|
||||
|
||||
import android.app.Fragment;
|
||||
|
||||
public class BaseFragment extends Fragment {
|
||||
}
|
@ -1,8 +1,10 @@
|
||||
package eu.kanade.mangafeed.ui.fragment;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.GridView;
|
||||
@ -17,14 +19,16 @@ import eu.kanade.mangafeed.presenter.LibraryPresenter;
|
||||
import eu.kanade.mangafeed.ui.activity.MainActivity;
|
||||
import eu.kanade.mangafeed.ui.adapter.MangaLibraryHolder;
|
||||
import eu.kanade.mangafeed.view.LibraryView;
|
||||
import timber.log.Timber;
|
||||
import uk.co.ribot.easyadapter.EasyAdapter;
|
||||
|
||||
|
||||
public class LibraryFragment extends Fragment implements LibraryView {
|
||||
public class LibraryFragment extends BaseFragment implements LibraryView {
|
||||
|
||||
@Bind(R.id.gridView) GridView grid;
|
||||
LibraryPresenter presenter;
|
||||
EasyAdapter<Manga> adapter;
|
||||
MainActivity activity;
|
||||
|
||||
public static LibraryFragment newInstance() {
|
||||
LibraryFragment fragment = new LibraryFragment();
|
||||
@ -36,8 +40,10 @@ public class LibraryFragment extends Fragment implements LibraryView {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
|
||||
presenter = new LibraryPresenter(this);
|
||||
activity = (MainActivity)getActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -45,18 +51,49 @@ public class LibraryFragment extends Fragment implements LibraryView {
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
View view = inflater.inflate(R.layout.fragment_library, container, false);
|
||||
((MainActivity)getActivity()).setToolbarTitle(getString(R.string.library_title));
|
||||
activity.setToolbarTitle(getString(R.string.library_title));
|
||||
ButterKnife.bind(this, view);
|
||||
|
||||
presenter.initializeMangas();
|
||||
setMangaClickListener();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
setupToolbar();
|
||||
setMangaClickListener();
|
||||
presenter.initializeMangas();
|
||||
presenter.initializeSearch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.library, menu);
|
||||
initializeSearch(menu);
|
||||
}
|
||||
|
||||
private void initializeSearch(Menu menu) {
|
||||
final SearchView sv = (SearchView) menu.findItem(R.id.action_search).getActionView();
|
||||
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
presenter.onQueryTextChange(newText);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// LibraryView
|
||||
|
||||
public void setMangas(List<Manga> mangas) {
|
||||
if (adapter == null) {
|
||||
adapter = new EasyAdapter<Manga>(
|
||||
adapter = new EasyAdapter<>(
|
||||
getActivity(),
|
||||
MangaLibraryHolder.class,
|
||||
mangas
|
||||
@ -71,8 +108,12 @@ public class LibraryFragment extends Fragment implements LibraryView {
|
||||
private void setMangaClickListener() {
|
||||
grid.setOnItemClickListener(
|
||||
(parent, view, position, id) ->
|
||||
presenter.onMangaClick(adapter, position)
|
||||
presenter.onMangaClick(adapter, position)
|
||||
);
|
||||
}
|
||||
|
||||
private void setupToolbar() {
|
||||
//activity.getSupportActionBar().
|
||||
}
|
||||
|
||||
}
|
||||
|
BIN
app/src/main/res/drawable-hdpi/ic_action_refresh.png
Normal file
After Width: | Height: | Size: 422 B |
BIN
app/src/main/res/drawable-hdpi/ic_action_search.png
Normal file
After Width: | Height: | Size: 448 B |
BIN
app/src/main/res/drawable-mdpi/ic_action_refresh.png
Normal file
After Width: | Height: | Size: 276 B |
BIN
app/src/main/res/drawable-mdpi/ic_action_search.png
Normal file
After Width: | Height: | Size: 265 B |
BIN
app/src/main/res/drawable-xhdpi/ic_action_refresh.png
Normal file
After Width: | Height: | Size: 557 B |
BIN
app/src/main/res/drawable-xhdpi/ic_action_search.png
Normal file
After Width: | Height: | Size: 492 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_action_refresh.png
Normal file
After Width: | Height: | Size: 787 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_action_search.png
Normal file
After Width: | Height: | Size: 744 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_action_refresh.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/ic_action_search.png
Normal file
After Width: | Height: | Size: 967 B |
17
app/src/main/res/menu/library.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<menu 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" tools:context=".MainActivity">
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:title="@string/action_search"
|
||||
android:icon="@drawable/ic_action_search"
|
||||
android:orderInCategory="100"
|
||||
app:showAsAction="collapseActionView|ifRoom"
|
||||
app:actionViewClass="android.support.v7.widget.SearchView"/>
|
||||
<item
|
||||
android:id="@+id/action_refresh"
|
||||
android:title="@string/action_refresh"
|
||||
android:icon="@drawable/ic_action_refresh"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
@ -1,6 +0,0 @@
|
||||
<menu 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" tools:context=".MainActivity">
|
||||
<item android:id="@+id/action_github" android:title="@string/action_github"
|
||||
android:orderInCategory="100" app:showAsAction="never" />
|
||||
</menu>
|
@ -30,5 +30,8 @@
|
||||
|
||||
<string name="hello_world">Hello world!</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="action_search">Search</string>
|
||||
<string name="action_refresh">Refresh</string>
|
||||
<string name="library_search_hint">Title or author...</string>
|
||||
|
||||
</resources>
|
||||
|