package com.fsck.k9.view;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import com.fsck.k9.R;
import com.github.amlcurran.showcaseview.ShowcaseView;
import com.github.amlcurran.showcaseview.ShowcaseView.Builder;
import com.github.amlcurran.showcaseview.targets.ViewTarget;
public class HighlightDialogFragment extends DialogFragment {
public static final String ARG_HIGHLIGHT_VIEW = "highlighted_view";
public static final float BACKGROUND_DIM_AMOUNT = 0.25f;
private ShowcaseView showcaseView;
protected void highlightViewInBackground() {
if (!getArguments().containsKey(ARG_HIGHLIGHT_VIEW)) {
return;
}
Activity activity = getActivity();
if (activity == null) {
throw new IllegalStateException("fragment must be attached to set highlight!");
}
boolean alreadyShowing = showcaseView != null && showcaseView.isShowing();
if (alreadyShowing) {
return;
}
int highlightedView = getArguments().getInt(ARG_HIGHLIGHT_VIEW);
showcaseView = new Builder(activity)
.setTarget(new ViewTarget(highlightedView, activity))
.hideOnTouchOutside()
.blockAllTouches()
.withMaterialShowcase()
.setStyle(R.style.ShowcaseTheme)
.build();
showcaseView.hideButton();
}
@Override
public void onStart() {
super.onStart();
hideKeyboard();
highlightViewInBackground();
setDialogBackgroundDim();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
hideShowcaseView();
}
private void setDialogBackgroundDim() {
Dialog dialog = getDialog();
if (dialog == null) {
return;
}
dialog.getWindow().setDimAmount(BACKGROUND_DIM_AMOUNT);
}
private void hideKeyboard() {
Activity activity = getActivity();
if (activity == null) {
return;
}
// check if no view has focus
View v = activity.getCurrentFocus();
if (v == null) {
return;
}
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
private void hideShowcaseView() {
if (showcaseView != null && showcaseView.isShowing()) {
showcaseView.hide();
}
showcaseView = null;
}
}