package org.wikipedia.useroption.ui; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; 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.ListView; import org.wikipedia.R; import org.wikipedia.database.CursorAdapterLoaderCallback; import org.wikipedia.database.contract.UserOptionContract; import org.wikipedia.useroption.sync.UserOptionContentResolver; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import static org.wikipedia.Constants.USER_OPTION_ROW_FRAGMENT_LOADER_ID; public class UserOptionRowFragment extends Fragment { @BindView(R.id.fragment_user_option_list) ListView list; private Unbinder unbinder; public static UserOptionRowFragment newInstance() { return new UserOptionRowFragment(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment_user_option_row, container, false); unbinder = ButterKnife.bind(this, view); CursorAdapter listAdapter = new UserOptionRowCursorAdapter(getContext(), null, true); list.setAdapter(listAdapter); LoaderCallback callback = new LoaderCallback(getContext(), listAdapter); getActivity().getSupportLoaderManager().initLoader(USER_OPTION_ROW_FRAGMENT_LOADER_ID, null, callback); setHasOptionsMenu(true); return view; } @Override public void onDestroyView() { getActivity().getSupportLoaderManager().destroyLoader(USER_OPTION_ROW_FRAGMENT_LOADER_ID); unbinder.unbind(); unbinder = null; super.onDestroyView(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_user_option, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_user_option_sync_all: UserOptionContentResolver.requestManualSync(); return true; default: return super.onOptionsItemSelected(item); } } private static class LoaderCallback extends CursorAdapterLoaderCallback { LoaderCallback(@NonNull Context context, @NonNull CursorAdapter adapter) { super(context, adapter); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { Uri uri = UserOptionContract.HttpWithOption.URI; final String[] projection = null; final String selection = null; final String[] selectionArgs = null; String order = UserOptionContract.Option.ID.qualifiedName() + " desc"; return new CursorLoader(context(), uri, projection, selection, selectionArgs, order); } } }