/* * Copyright (C) 2016 Simon Vig Therkildsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.simonvt.cathode.ui.lists; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import javax.inject.Inject; import net.simonvt.cathode.CathodeApp; import net.simonvt.cathode.R; import net.simonvt.cathode.database.SimpleCursor; import net.simonvt.cathode.database.SimpleCursorLoader; import net.simonvt.cathode.jobqueue.Job; import net.simonvt.cathode.jobqueue.JobManager; import net.simonvt.cathode.provider.ProviderSchematic; import net.simonvt.cathode.remote.sync.lists.SyncLists; import net.simonvt.cathode.ui.ListNavigationListener; import net.simonvt.cathode.ui.fragment.ToolbarSwipeRefreshRecyclerFragment; public class ListsFragment extends ToolbarSwipeRefreshRecyclerFragment<ListsAdapter.ViewHolder> implements LoaderManager.LoaderCallbacks<SimpleCursor>, ListsAdapter.OnListClickListener { public static final String TAG = "net.simonvt.cathode.ui.lists.ListsFragment"; static final String DIALOG_LIST_CREATE = "net.simonvt.cathode.ui.HomeActivity.createListFragment"; private static final int LOADER_LISTS = 1; @Inject JobManager jobManager; private ListNavigationListener listener; private ListsAdapter adapter; @Override public void onAttach(Activity activity) { super.onAttach(activity); listener = (ListNavigationListener) activity; } @Override public void onCreate(Bundle inState) { super.onCreate(inState); CathodeApp.inject(getActivity(), this); setTitle(R.string.navigation_lists); setEmptyText(R.string.empty_lists); getLoaderManager().initLoader(LOADER_LISTS, null, this); } @Override protected int getColumnCount() { return 1; } private Job.OnDoneListener onDoneListener = new Job.OnDoneListener() { @Override public void onDone(Job job) { setRefreshing(false); } }; @Override public void onRefresh() { Job job = new SyncLists(); job.registerOnDoneListener(onDoneListener); jobManager.addJob(job); } @Override public void onListClicked(long listId, String listName) { listener.onShowList(listId, listName); } @Override public boolean displaysMenuIcon() { return true; } @Override public void createMenu(Toolbar toolbar) { super.createMenu(toolbar); toolbar.inflateMenu(R.menu.fragment_lists); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.menu_list_create: CreateListFragment dialog = new CreateListFragment(); dialog.show(getFragmentManager(), DIALOG_LIST_CREATE); return true; } return super.onMenuItemClick(item); } private void setCursor(Cursor cursor) { if (adapter == null) { adapter = new ListsAdapter(this, getActivity()); setAdapter(adapter); } adapter.changeCursor(cursor); } @Override public Loader<SimpleCursor> onCreateLoader(int id, Bundle args) { return new SimpleCursorLoader(getActivity(), ProviderSchematic.Lists.LISTS, ListsAdapter.PROJECTION, null, null, null); } @Override public void onLoadFinished(Loader<SimpleCursor> loader, SimpleCursor data) { setCursor(data); } @Override public void onLoaderReset(Loader<SimpleCursor> loader) { } }