/** * MakeCursorAdapter * * @author Remel Pugh * @version 1.0 */ @SuppressWarnings("unused") public class MakeCursorAdapter extends CursorAdapter { private static final String TAG = Logger.makeTag(MakeCursorAdapter.class); private final LayoutInflater inflater; private ContentResolver resolver; /** * @param context * @param c */ @SuppressWarnings("deprecation") public MakeCursorAdapter(final Context context, final Cursor c) { super(context, c); inflater = LayoutInflater.from(context); resolver = context.getContentResolver(); } /** * @param context * @param c * @param autoRequery */ public MakeCursorAdapter(final Context context, final Cursor c, final boolean autoRequery) { super(context, c, autoRequery); inflater = LayoutInflater.from(context); resolver = context.getContentResolver(); } /** * @param context * @param c * @param flags */ public MakeCursorAdapter(final Context context, final Cursor c, final int flags) { super(context, c, flags); inflater = LayoutInflater.from(context); resolver = context.getContentResolver(); } /** {@inheritDoc} */ @Override public void bindView(final View view, final Context context, final Cursor cursor) { final ViewsFinder finder = new ViewsFinder(view); final TextView text = finder.find(id.text1); text.setText(convertToString(cursor)); } /** {@inheritDoc} */ @Override public CharSequence convertToString(final Cursor cursor) { return cursor.getString(Columns.MAKE_NAME.getIndex()); } /** {@inheritDoc} */ @Override public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { return inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false); } /** {@inheritDoc} */ @Override public Cursor runQueryOnBackgroundThread(final CharSequence constraint) { if (getFilterQueryProvider() != null) { return getFilterQueryProvider().runQuery(constraint); } final String sort; final String selection; final String[] selectionArg; sort = Columns.MAKE_NAME.getName() + " COLLATE NOCASE ASC"; selection = constraint == null ? null : Columns.MAKE_NAME.getName() + " LIKE ?"; selectionArg = constraint == null ? null : new String[] {"%" + constraint.toString() + "%"}; return resolver.query(Make.CONTENT_URI, Make.PROJECTION, selection, selectionArg, sort); } }
/** * BaseDialogFragment * * @author Remel Pugh * @version 1.0 */ @SuppressWarnings("unused") public abstract class BaseDialogFragment extends DialogFragment implements FragmentBase { private static final String TAG = Logger.makeTag(BaseDialogFragment.class); @Inject @ForActivity protected Context activityContext; @Inject @ForApplication protected Context applicationContext; protected ViewsFinder finder; private boolean isDualPane = false; private boolean isFirstAttach = true; /** {@inheritDoc} */ @Override public boolean isDualPane() { return isDualPane; } /** {@inheritDoc} */ @Override public void setDualPane(final boolean isDualPane) { this.isDualPane = isDualPane; } /** {@inheritDoc} */ @Override public void onAttach(Activity activity) { super.onAttach(activity); // activityContext = activity; if (getActivity() instanceof BaseActivity && isFirstAttach) { ((BaseActivity) getActivity()).inject(this); isFirstAttach = false; } } /** {@inheritDoc} */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); initialize(savedInstanceState); setHasOptionsMenu(getMenuResourceId() != null && getMenuResourceId() > 0); } /** {@inheritDoc} */ @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { if (hasOptionsMenu() && getMenuResourceId() != null) { inflater.inflate(getMenuResourceId(), menu); super.onCreateOptionsMenu(menu, inflater); } } /** {@inheritDoc} */ @Override public View onCreateView( final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final View view = inflater.inflate(getLayoutResourceId(), null); finder = new ViewsFinder(view); afterViews(savedInstanceState); return view; } /** {@inheritDoc} */ @Override public void onDetach() { activityContext = null; applicationContext = null; super.onDetach(); } /** {@inheritDoc} */ @Override public void onViewCreated(final View view, final Bundle savedInstanceState) { if (getDialog() != null) { getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_RESIZE); } super.onViewCreated(view, savedInstanceState); } /** {@inheritDoc} */ @Override public void setSubtitle(final int subtitleResId) { setSubtitle(getString(subtitleResId)); } /** {@inheritDoc} */ @Override public void setSubtitle(final String subtitle) { if (!isAdded()) { return; } if (getDialog() == null) { if (getActivity() instanceof ActionBarActivity) { ((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle(subtitle); } } } /** {@inheritDoc} */ @Override public void setTitle(final int titleId) { setTitle(getString(titleId)); } /** {@inheritDoc} */ @Override public void setTitle(final String title) { if (!isAdded()) { return; } if (getDialog() == null) { getActivity().setTitle(title); } else { getDialog().setTitle(title); } } /** * Called after the view has been created. * * @param savedInstanceState The saved state of fragment. */ protected abstract void afterViews(final Bundle savedInstanceState); /** * Gets the layout resource for this instance. * * @return Resource identifier for the layout resource. */ protected abstract int getLayoutResourceId(); /** * Gets the menu resource for this instance. * * @return Resource identifier for the menu resource. */ protected abstract Integer getMenuResourceId(); /** * Initializes this instance. * * @param savedInstanceState If the fragment is being re-initialized after previously being shut * down then this Bundle contains the data it most recently supplied in {@link * BaseDialogFragment#onSaveInstanceState(android.os.Bundle)}. Note: Otherwise it is null. */ @SuppressWarnings("EmptyMethod") protected void initialize(final Bundle savedInstanceState) {} }
/** @author Remel Pugh */ @SuppressWarnings("unused") public abstract class BaseRecyclerActivity extends ActionBarActivity implements Injector { private static final String TAG = Logger.makeTag(BaseRecyclerActivity.class); protected Bundle activityState; protected ViewsFinder finder; protected FragmentFinder fragmentFinder; private ObjectGraph activityGraph; private RecyclerView.Adapter<?> adapter; private RecyclerView recyclerView; private Toolbar toolbar; /** {@inheritDoc} */ @Override public ObjectGraph getObjectGraph() { return activityGraph; } /** {@inheritDoc} */ @Override public void inject(Object target) { // ensure object graph has been created buildGraph(); activityGraph.inject(target); } /** {@inheritDoc} */ @Override public boolean onCreateOptionsMenu(final Menu menu) { final Integer resourceId = getMenuResource(); if (resourceId != null) { getMenuInflater().inflate(getMenuResource(), menu); } return true; } /** {@inheritDoc} */ @Override public boolean onOptionsItemSelected(final MenuItem item) { final int id = item.getItemId(); switch (id) { case android.R.id.home: { navigateUp(); return true; } default: { return super.onOptionsItemSelected(item); } } } /** {@inheritDoc} */ @Override public void setContentView(final int layoutResID) { super.setContentView(layoutResID); afterSetContentView(); } /** {@inheritDoc} */ @Override public void setContentView(final View view) { super.setContentView(view); afterSetContentView(); } /** {@inheritDoc} */ @Override public void setContentView(final View view, final ViewGroup.LayoutParams params) { super.setContentView(view, params); afterSetContentView(); } /** */ protected void afterSetContentView() { final RecyclerView.ItemAnimator animator; finder = new ViewsFinder(this); fragmentFinder = new FragmentFinder(this); recyclerView = finder.find(R.id.util__recycler_view); if (recyclerView == null) { throw new IllegalStateException( "Unable to find a RecyclerView with id of @id/util__recycler_view"); } recyclerView.setLayoutManager(getLayoutManager()); recyclerView.setAdapter(getAdapter()); animator = getItemAnimator(); if (animator != null) { recyclerView.setItemAnimator(animator); } afterViews(activityState); } /** Executed after the activity's layout has been assigned */ protected abstract void afterViews(Bundle savedInstanceState); /** @return */ protected abstract List<Object> getActivityModules(); /** @return */ protected abstract RecyclerView.Adapter<?> getAdapter(); /** @return */ protected abstract RecyclerView.ItemAnimator getItemAnimator(); protected abstract RecyclerView.LayoutManager getLayoutManager(); /** * Identifies the layout resource to be used by the current activity. * * @return The resource identifier for the layout */ protected Integer getLayoutResource() { return R.layout.util__activity_recycler_view; } /** * Identifies the menu resource to be used by the current activity. * * @return The resource identifier for the menu */ protected Integer getMenuResource() { return null; } /** @return */ protected Toolbar getToolbar() { return toolbar; } /** @param savedInstanceState */ protected void initialize(final Bundle savedInstanceState) { activityState = savedInstanceState; } /** @return */ protected boolean isHomeAsUpEnabled() { return false; } /** @return */ protected boolean isHomeButtonEnabled() { return true; } /** @return */ protected boolean isLogoEnabled() { return false; } /** * Determines if the application title is displayed by default it is not displayed. * * @return true if the title is to be displayed, otherwise false */ protected boolean isTitleEnabled() { return false; } /** */ protected void navigateUp() { NavigationUtils.navigateUp(this); } /** Sets the default configuration for the activity {@link android.support.v7.app.ActionBar}. */ protected void onConfigureActionBar() { final ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(isHomeAsUpEnabled()); actionBar.setDisplayShowTitleEnabled(isTitleEnabled()); actionBar.setDisplayUseLogoEnabled(isLogoEnabled()); actionBar.setHomeButtonEnabled(isHomeButtonEnabled()); } /** {@inheritDoc} */ @Override protected void onCreate(final Bundle savedInstanceState) { buildGraph(); initialize(savedInstanceState); super.onCreate(savedInstanceState); if (getLayoutResource() == null) { throw new IllegalStateException("A layout must be specified."); } setContentView(getLayoutResource()); setToolbar(); onConfigureActionBar(); } /** {@inheritDoc} */ @Override protected void onDestroy() { // Eagerly clear the reference to the activity graph to allow it to be garbage collected as soon // as possible. activityGraph = null; super.onDestroy(); } /** */ protected void setToolbar() { toolbar = finder.find(R.id.util__toolbar); if (toolbar != null) { setSupportActionBar(toolbar); } } private void buildGraph() { if (activityGraph == null) { final ApplicationExtension application = (ApplicationExtension) getApplication(); final List<Object> modules = CollectionUtils.newList(); // Create the activity graph by .plus-ing our modules onto the application graph. modules.add(new ActivityModule(this)); modules.addAll(getActivityModules()); activityGraph = application.getObjectGraph().plus(modules.toArray()); // Inject ourselves so subclasses will have dependencies fulfilled when this method returns. activityGraph.inject(this); } } }
/** * VehicleCursorAdapter * * @author Remel Pugh * @version 1.0 */ @SuppressWarnings("unused") public class VehicleCursorAdapter extends BaseCheckableCursorAdapter { private static final String TAG = Logger.makeTag(VehicleCursorAdapter.class); /** {@inheritDoc} */ public VehicleCursorAdapter( final Context context, final Bundle savedInstanceState, final Cursor c) { super(context, savedInstanceState, R.layout.list_item_vehicle, c); } /** {@inheritDoc} */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) public VehicleCursorAdapter( final Context context, final Bundle savedInstanceState, final Cursor c, final int flags) { super(context, savedInstanceState, R.layout.list_item_vehicle, c, flags); } /** {@inheritDoc} */ @Override public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { final int id = item.getItemId(); if (id == R.id.action_delete) { if (getOnActionModeCallbackListener() != null) { getOnActionModeCallbackListener().onActionDelete(mode); } return true; } return false; } /** {@inheritDoc} */ @Override public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { final MenuInflater inflater = ((FragmentActivity) helper.getContext()).getMenuInflater(); if (getOnActionModeCallbackListener() != null) { getOnActionModeCallbackListener().onActionModeCreated(mode); } inflater.inflate(R.menu.menu_delete_contextual, menu); return true; } /** {@inheritDoc} */ @Override public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { return false; } /** {@inheritDoc} */ @Override protected void populateData(final Context context, final View view, final Cursor cursor) { final ViewsFinder finder = new ViewsFinder(view); final TextView vehicleName = finder.find(id.text1); final TextView makeModel = finder.find(id.text2); final StringBuilder text = new StringBuilder(); final VehicleDTO vehicle = VehicleDTO.newInstance(cursor); if (vehicle.getYear() > 0) { text.append(vehicle.getYear()).append(" "); } text.append(vehicle.getMakeName()).append(" ").append(vehicle.getModelName()); vehicleName.setText(vehicle.getName()); makeModel.setText(text); } }