package com.github.espiandev.showcaseview;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class ShowcaseViews {
private final List<ShowcaseView> views = new ArrayList<ShowcaseView>();
private final Activity activity;
private final int showcaseTemplateId;
private OnShowcaseAcknowledged showcaseAcknowledgedListener = new OnShowcaseAcknowledged() {
@Override
public void onShowCaseAcknowledged(ShowcaseView showcaseView) {
//DEFAULT LISTENER - DOESN'T DO ANYTHING!
}
};
public interface OnShowcaseAcknowledged {
void onShowCaseAcknowledged(ShowcaseView showcaseView);
}
public ShowcaseViews(Activity activity, int showcaseTemplateLayout) {
this.activity = activity;
this.showcaseTemplateId = showcaseTemplateLayout;
}
public ShowcaseViews(Activity activity, int showcaseTemplateLayout, OnShowcaseAcknowledged acknowledgedListener) {
this(activity, showcaseTemplateLayout);
this.showcaseAcknowledgedListener = acknowledgedListener;
}
public void addView(ItemViewProperties properties) {
ShowcaseView showcaseView = new ShowcaseViewBuilder(activity, showcaseTemplateId).setShowcaseItem(properties.itemType, properties.id, activity)
.setText(properties.titleResId, properties.messageResId)
.setShowcaseIndicatorScale(properties.scale)
.build();
showcaseView.overrideButtonClick(createShowcaseViewDismissListener(showcaseView));
views.add(showcaseView);
}
private View.OnClickListener createShowcaseViewDismissListener(final ShowcaseView showcaseView) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
showcaseView.hide();
if (views.isEmpty()) {
showcaseAcknowledgedListener.onShowCaseAcknowledged(showcaseView);
} else {
show();
}
}
};
}
public void show() {
if (views.isEmpty()) {
return;
}
final ShowcaseView view = views.get(0);
((ViewGroup) activity.getWindow().getDecorView()).addView(view);
views.remove(0);
}
public boolean hasViews(){
return !views.isEmpty();
}
public static class ItemViewProperties {
public static final int ID_SPINNER = 0;
public static final int ID_TITLE = 1;
public static final int ID_OVERFLOW = 2;
private static final float DEFAULT_SCALE = 1f;
protected final int titleResId;
protected final int messageResId;
protected final int id;
protected final int itemType;
protected final float scale;
public ItemViewProperties(int id, int titleResId, int messageResId, int itemType) {
this(id, titleResId, messageResId, itemType, DEFAULT_SCALE);
}
public ItemViewProperties(int id, int titleResId, int messageResId, int itemType, float scale) {
this.id = id;
this.titleResId = titleResId;
this.messageResId = messageResId;
this.itemType = itemType;
this.scale = scale;
}
}
}