/* © 2010 Stephan Reichholf <stephan at reichholf dot net> * * Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported * http://creativecommons.org/licenses/by-nc-sa/3.0/ */ package net.reichholf.dreamdroid.fragment.abs; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ListFragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.TextView; import android.widget.Toast; import net.reichholf.dreamdroid.R; import net.reichholf.dreamdroid.activities.abs.MultiPaneHandler; import net.reichholf.dreamdroid.fragment.ActivityCallbackHandler; import net.reichholf.dreamdroid.fragment.helper.FragmentHelper; import net.reichholf.dreamdroid.fragment.interfaces.IMutliPaneContent; import net.reichholf.dreamdroid.helpers.Statics; /** * @author sre */ public abstract class DreamDroidListFragment extends ListFragment implements ActivityCallbackHandler, IMutliPaneContent { private FragmentHelper mHelper; protected boolean mShouldRetainInstance = true; protected boolean mHasFabReload = true; protected boolean mHasFabMain = false; protected boolean mCardListStyle = false; protected ActionMode mActionMode; protected boolean mIsActionMode; protected boolean mIsActionModeRequired; public DreamDroidListFragment() { super(); mHelper = new FragmentHelper(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActionMode = null; mIsActionMode = false; if (mHelper == null) mHelper = new FragmentHelper(this); else mHelper.bindToFragment(this); mHelper.onCreate(savedInstanceState); if (mShouldRetainInstance) setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mCardListStyle) { return inflater.inflate(R.layout.card_list_content, container, false); } return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mHelper.onActivityCreated(savedInstanceState); } @Override public void onResume() { super.onResume(); mHelper.onResume(); } @Override public void onPause() { mHelper.onPause(); super.onPause(); } @Override public void onDestroyView() { endActionMode(); super.onDestroyView(); } @Override public void onSaveInstanceState(Bundle outState) { mHelper.onSaveInstanceState(outState); super.onSaveInstanceState(outState); } @Override public void setEmptyText(CharSequence text) { TextView emptyView = (TextView) getView().findViewById(android.R.id.empty); if (emptyView != null) emptyView.setText(text); else super.setEmptyText(text); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if (!getMultiPaneHandler().isDrawerOpen()) createOptionsMenu(menu, inflater); } @Override public void createOptionsMenu(Menu menu, MenuInflater inflater) { } @Override public MultiPaneHandler getMultiPaneHandler() { return mHelper.getMultiPaneHandler(); } @Override public void onDrawerOpened() { mIsActionModeRequired = mIsActionMode; if (mActionMode != null) mActionMode.finish(); } @Override public void onDrawerClosed() { if (mIsActionModeRequired) startActionMode(); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setViewVisible(R.id.fab_reload, mHasFabReload); setViewVisible(R.id.fab_main, mHasFabMain); } protected void setViewVisible(int id, boolean isVisible) { View v = getAppCompatActivity().findViewById(id); int visibility = isVisible ? View.VISIBLE : View.GONE; v.setVisibility(visibility); } protected void startActionMode() { } public String getBaseTitle() { return mHelper.getBaseTitle(); } public void setBaseTitle(String baseTitle) { mHelper.setBaseTitle(baseTitle); } public String getCurrentTitle() { return mHelper.getCurrenTtitle(); } public void setCurrentTitle(String currentTitle) { mHelper.setCurrentTitle(currentTitle); } public void initTitle(String title) { mHelper.setBaseTitle(title); mHelper.setCurrentTitle(title); } protected void finish() { finish(Statics.RESULT_NONE, null); } protected void finish(int resultCode) { finish(resultCode, null); } protected void finish(int resultCode, Intent data) { mHelper.finish(resultCode, data); } protected AppCompatActivity getAppCompatActivity() { return (AppCompatActivity) getActivity(); } protected void showToast(String toastText) { Toast toast = Toast.makeText(getAppCompatActivity(), toastText, Toast.LENGTH_LONG); toast.show(); } protected void showToast(CharSequence toastText) { Toast toast = Toast.makeText(getAppCompatActivity(), toastText, Toast.LENGTH_LONG); toast.show(); } protected void registerFab(int id, View view, int descriptionId, int backgroundResId, View.OnClickListener onClickListener) { registerFab(id, view, descriptionId, backgroundResId, onClickListener, null, false); } protected void registerFab(int id, View view, int descriptionId, int backgroundResId, View.OnClickListener onClickListener, AbsListView listView) { registerFab(id, view, descriptionId, backgroundResId, onClickListener, listView, false); } protected void registerFab(int id, View view, int descriptionId, int backgroundResId, View.OnClickListener onClickListener, AbsListView listView, boolean topAligned) { FloatingActionButton fab = (FloatingActionButton) getAppCompatActivity().findViewById(id); if (fab == null) return; fab.setContentDescription(getString(descriptionId)); fab.setImageResource(backgroundResId); fab.setOnClickListener(onClickListener); fab.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(getAppCompatActivity(), v.getContentDescription(), Toast.LENGTH_SHORT).show(); return true; } }); } protected void endActionMode() { if (mActionMode != null) mActionMode.finish(); mActionMode = null; } }