package com.fastaccess.ui.base;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialogFragment;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.ViewHelper;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import icepick.Icepick;
/**
* Created by Kosh on 16 Sep 2016, 2:11 PM
*/
public abstract class BaseBottomSheetDialog extends BottomSheetDialogFragment {
protected BottomSheetBehavior<View> bottomSheetBehavior;
private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
isAlreadyHidden = true;
onHidden();
}
}
@Override public void onSlide(@NonNull View bottomSheet, float slideOffset) {
if (slideOffset == -1.0) {
isAlreadyHidden = true;
onDismissedByScrolling();
}
}
};
protected boolean isAlreadyHidden;
@Nullable private Unbinder unbinder;
@LayoutRes protected abstract int layoutRes();
protected abstract void onViewCreated(@NonNull View view);
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
Icepick.restoreInstanceState(this, savedInstanceState);
}
}
@Override public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), layoutRes(), null);
dialog.setContentView(contentView);
View parent = ((View) contentView.getParent());
bottomSheetBehavior = BottomSheetBehavior.from(parent);
if (bottomSheetBehavior != null) {
bottomSheetBehavior.setBottomSheetCallback(bottomSheetCallback);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
unbinder = ButterKnife.bind(this, contentView);
onViewCreated(contentView);
}
@Override public void onDestroyView() {
super.onDestroyView();
if (unbinder != null) unbinder.unbind();
}
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override public void onShow(DialogInterface dialogINterface) {
if (ViewHelper.isTablet(getContext())) {
if (dialog.getWindow() != null) {
dialog.getWindow().setLayout(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT);
}
}
onDialogIsVisible();
}
});
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
isAlreadyHidden = true;
onDismissedByScrolling();
}
return false;
}
});
return dialog;
}
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.e();
}
@Override public void onDetach() {
if (!isAlreadyHidden) {
onDismissedByScrolling();
}
super.onDetach();
}
protected void onHidden() {
dismiss();
}//helper method to notify dialogs
protected void onDismissedByScrolling() {}//helper method to notify dialogs
protected void onDialogIsVisible() {}//helper method to notify dialogs
}