/* © 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.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.Toast;
import net.reichholf.dreamdroid.R;
import net.reichholf.dreamdroid.activities.MainActivity;
import net.reichholf.dreamdroid.activities.abs.MultiPaneHandler;
import net.reichholf.dreamdroid.fragment.ActivityCallbackHandler;
import net.reichholf.dreamdroid.fragment.dialogs.ActionDialog;
import net.reichholf.dreamdroid.fragment.helper.FragmentHelper;
import net.reichholf.dreamdroid.fragment.interfaces.IBaseFragment;
import net.reichholf.dreamdroid.fragment.interfaces.IMutliPaneContent;
import net.reichholf.dreamdroid.helpers.Statics;
/**
* @author sre
*/
public abstract class BaseFragment extends Fragment implements ActivityCallbackHandler, IMutliPaneContent, IBaseFragment, ActionDialog.DialogActionListener {
private FragmentHelper mHelper = null;
protected boolean mShouldRetainInstance = true;
protected boolean mHasFabReload = false;
protected boolean mHasFabMain = false;
public BaseFragment() {
super();
mHelper = new FragmentHelper();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mHelper == null)
mHelper = new FragmentHelper(this);
else
mHelper.bindToFragment(this);
mHelper.onCreate(savedInstanceState);
if (mShouldRetainInstance)
setRetainInstance(true);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setFabEnabled(R.id.fab_reload, mHasFabReload);
setFabEnabled(R.id.fab_main, mHasFabMain);
}
protected void setFabEnabled(int id, boolean enabled) {
FloatingActionButton fab = (FloatingActionButton) getAppCompatActivity().findViewById(id);
if(fab == null)
return;
fab.setTag(R.id.fab_scrolling_view_behavior_enabled, enabled);
if(enabled) {
fab.show();
} else {
fab.hide();
((MainActivity)getAppCompatActivity()).unregisterFab(id);
}
}
@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 onSaveInstanceState(Bundle outState) {
mHelper.onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MultiPaneHandler mph = getMultiPaneHandler(); //TODO how do i reproduce this?
if (mph == null || !mph.isDrawerOpen())
createOptionsMenu(menu, inflater);
}
@Override
public void createOptionsMenu(Menu menu, MenuInflater inflater) {
}
@Override
public void onDrawerOpened() {
}
@Override
public void onDrawerClosed() {
}
public boolean hasHeader () {
return false;
}
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 initTitles(String title) {
mHelper.setBaseTitle(title);
mHelper.setCurrentTitle(title);
}
public MultiPaneHandler getMultiPaneHandler() {
return mHelper.getMultiPaneHandler();
}
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, int descriptionId, int backgroundResId, View.OnClickListener onClickListener) {
FloatingActionButton fab = (FloatingActionButton) getAppCompatActivity().findViewById(id);
if (fab == null)
return;
fab.setTag(R.id.fab_scrolling_view_behavior_enabled, true);
fab.show();
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;
}
});
}
@Override
public void onDialogAction(int action, Object details, String dialogTag) {
}
}