Java tutorial
/* * Copyright (C) 2013 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.fragment; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.content.Loader; import android.text.format.DateUtils; import android.view.MenuItem; import android.view.View; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import net.simonvt.cathode.R; import net.simonvt.cathode.database.SimpleCursor; import net.simonvt.cathode.database.SimpleCursorLoader; import net.simonvt.cathode.provider.ProviderSchematic.Shows; import net.simonvt.cathode.settings.Settings; import net.simonvt.cathode.ui.LibraryType; import net.simonvt.cathode.ui.Loaders; import net.simonvt.cathode.ui.adapter.ShowsWithNextAdapter; import net.simonvt.cathode.ui.dialog.ListDialog; public class WatchedShowsFragment extends ShowsFragment implements ListDialog.Callback { private enum SortBy { TITLE("title", Shows.SORT_TITLE), WATCHED("watched", Shows.SORT_WATCHED); private String key; private String sortOrder; SortBy(String key, String sortOrder) { this.key = key; this.sortOrder = sortOrder; } public String getKey() { return key; } public String getSortOrder() { return sortOrder; } @Override public String toString() { return key; } private static final Map<String, SortBy> STRING_MAPPING = new HashMap<String, SortBy>(); static { for (SortBy via : SortBy.values()) { STRING_MAPPING.put(via.toString().toUpperCase(), via); } } public static SortBy fromValue(String value) { SortBy sortBy = STRING_MAPPING.get(value.toUpperCase()); if (sortBy == null) { sortBy = TITLE; } return sortBy; } } private static final String DIALOG_SORT = "net.simonvt.cathode.ui.fragment.WatchedShowsFragment.sortDialog"; private SharedPreferences settings; private SortBy sortBy; @Override public void onCreate(Bundle inState) { settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); sortBy = SortBy.fromValue(settings.getString(Settings.SORT_SHOW_WATCHED, SortBy.TITLE.getKey())); super.onCreate(inState); setEmptyText(R.string.empty_show_watched); setTitle(R.string.title_shows_watched); } @Override public void onViewCreated(View view, Bundle inState) { super.onViewCreated(view, inState); toolbar.inflateMenu(R.menu.fragment_shows_watched); } @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.menu_sort) { ArrayList<ListDialog.Item> items = new ArrayList<ListDialog.Item>(); items.add(new ListDialog.Item(R.id.sort_title, R.string.sort_title)); items.add(new ListDialog.Item(R.id.sort_watched, R.string.sort_watched)); ListDialog.newInstance(R.string.action_sort_by, items, this).show(getFragmentManager(), DIALOG_SORT); return true; } return super.onMenuItemClick(item); } @Override public void onItemSelected(int id) { switch (id) { case R.id.sort_title: sortBy = SortBy.TITLE; settings.edit().putString(Settings.SORT_SHOW_RECOMMENDED, SortBy.TITLE.getKey()).apply(); getLoaderManager().restartLoader(Loaders.LOADER_SHOWS_WATCHED, null, this); break; case R.id.sort_watched: sortBy = SortBy.WATCHED; settings.edit().putString(Settings.SORT_SHOW_RECOMMENDED, SortBy.WATCHED.getKey()).apply(); getLoaderManager().restartLoader(Loaders.LOADER_SHOWS_WATCHED, null, this); break; } } @Override protected LibraryType getLibraryType() { return LibraryType.WATCHED; } protected int getLoaderId() { return Loaders.LOADER_SHOWS_WATCHED; } @Override public Loader<SimpleCursor> onCreateLoader(int i, Bundle bundle) { final Uri contentUri = Shows.SHOWS_WATCHED; SimpleCursorLoader cl = new SimpleCursorLoader(getActivity(), contentUri, ShowsWithNextAdapter.PROJECTION, null, null, sortBy.getSortOrder()); cl.setUpdateThrottle(2 * DateUtils.SECOND_IN_MILLIS); return cl; } }