package net.osmand.plus.dashboard;
import android.app.Activity;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import net.osmand.plus.OsmAndAppCustomization;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.widgets.InterceptorFrameLayout;
import net.osmand.plus.widgets.tools.SwipeDismissTouchListener;
public abstract class DashBaseFragment extends Fragment {
protected DashboardOnMap dashboard;
public interface DismissListener {
void onDismiss();
}
public OsmandApplication getMyApplication() {
if (getActivity() == null) {
return null;
}
return (OsmandApplication) getActivity().getApplication();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof MapActivity) {
dashboard = ((MapActivity) activity).getDashboard();
dashboard.onAttach(this);
}
}
@Nullable
@Override
final public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View childView = initView(inflater, container, savedInstanceState);
FrameLayout.LayoutParams layoutParams =
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
InterceptorFrameLayout frameLayout = new InterceptorFrameLayout(getActivity());
frameLayout.setLayoutParams(layoutParams);
FrameLayout.LayoutParams childLayoutParams =
new FrameLayout.LayoutParams(
(ViewGroup.MarginLayoutParams) childView.getLayoutParams());
frameLayout.addView(childView, childLayoutParams);
if (isDismissAllowed()) {
SwipeDismissTouchListener listener = new SwipeDismissTouchListener(childView, null,
new SwipeDismissTouchListener.DismissCallbacks() {
@Override
public boolean canDismiss(Object token) {
return true;
}
@Override
public void onDismiss(View view, Object token, boolean isSwipeRight) {
getDismissCallback().onDismiss();
}
});
frameLayout.setOnTouchListener(listener);
frameLayout.setListener(listener);
if (getDismissCallback() == null) {
defaultDismissListener = new DefaultDismissListener(getParentView(), dashboard, getTag(),
childView);
}
}
return frameLayout;
}
public abstract View initView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState);
public DismissListener getDismissCallback() {
return defaultDismissListener;
}
public boolean isDismissAllowed() {
return true;
}
@Override
public boolean getUserVisibleHint() {
return super.getUserVisibleHint();
}
public abstract void onOpenDash();
public void onCloseDash() {
}
@Override
public final void onPause() {
// use on close
super.onPause();
onCloseDash();
}
public void closeDashboard() {
dashboard.hideDashboard(false);
}
@Override
public final void onResume() {
// use on open update
super.onResume();
if (dashboard != null && dashboard.isVisible() && getView() != null) {
onOpenDash();
}
}
public void onLocationCompassChanged(Location l, double compassValue) {
}
@Override
public void onDetach() {
super.onDetach();
if (dashboard != null) {
dashboard.onDetach(this);
dashboard = null;
}
}
protected void startFavoritesActivity(int tab) {
Activity activity = getActivity();
OsmAndAppCustomization appCustomization = getMyApplication().getAppCustomization();
final Intent favorites = new Intent(activity, appCustomization.getFavoritesActivity());
favorites.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
getMyApplication().getSettings().FAVORITES_TAB.set(tab);
activity.startActivity(favorites);
}
protected View getParentView() {
return dashboard.getParentView();
}
private DismissListener defaultDismissListener;
public static class DefaultDismissListener implements DismissListener {
private View parentView;
private DashboardOnMap dashboardOnMap;
private String fragmentTag;
private View fragmentView;
public DefaultDismissListener(View parentView, DashboardOnMap dashboardOnMap,
String fragmentTag, View fragmentView) {
this.parentView = parentView;
this.dashboardOnMap = dashboardOnMap;
this.fragmentTag = fragmentTag;
this.fragmentView = fragmentView;
}
@Override
public void onDismiss() {
dashboardOnMap.blacklistFragmentByTag(fragmentTag);
ViewCompat.setTranslationX(fragmentView, 0);
ViewCompat.setAlpha(fragmentView, 1);
Snackbar.make(parentView, dashboardOnMap.getMyApplication().getResources()
.getString(R.string.shared_string_card_was_hidden), Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override
public void onClick(View view) {
DefaultDismissListener.this.onUndo();
}
})
.show();
}
public void onUndo() {
dashboardOnMap.unblacklistFragmentClass(fragmentTag);
ViewCompat.setTranslationX(fragmentView, 0);
ViewCompat.setAlpha(fragmentView, 1);
}
}
}