package com.door43.translationstudio.newui.translate;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import com.door43.translationstudio.core.TranslationViewMode;
import java.util.ArrayList;
import java.util.List;
/**
* Created by joel on 9/18/2015.
*/
public abstract class ViewModeAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
private List<VH> mViewHolders = new ArrayList<>();
private OnEventListener mListener;
private int mStartPosition = 0;
/**
* Returns the viewholder generated by the child class so we can keep track of it
* @param parent
* @param viewType
* @return
*/
abstract VH onCreateManagedViewHolder(ViewGroup parent, int viewType);
@Override
public final VH onCreateViewHolder(ViewGroup parent, int viewType) {
VH holder = onCreateManagedViewHolder(parent, viewType);
mViewHolders.add(holder);
return holder;
}
/**
* Returns the start position where the list should start when first built
* @return
*/
protected int getListStartPosition() {
return mStartPosition;
}
/**
* Sets the position where the list should start when first built
* @param startPosition
*/
protected void setListStartPosition(int startPosition) {
mStartPosition = startPosition;
}
/**
* Returns the registered click listener
* @return
*/
protected OnEventListener getListener() {
return mListener;
}
/**
* Registeres the click listener
* @param listener
*/
public void setOnClickListener(OnEventListener listener) {
mListener = listener;
}
/**
* Notifies the adapter that it should rebuild it's view holders
*/
abstract void rebuild();
/**
* Updates the source translation to be displayed
* @param sourceTranslationId
*/
abstract void setSourceTranslation(String sourceTranslationId);
/**
* Called when coordinating operations need to be applied to all the view holders
* @param holder
*/
abstract void onCoordinate(VH holder);
/**
* Requests the layout manager to coordinate all visible children in the list
*/
protected void coordinateViewHolders() {
for(VH holder:mViewHolders) {
onCoordinate(holder);
}
}
/**
* returns the frame at the given position
* @param position
* @return
*/
public abstract String getFocusedFrameId(int position);
/**
* returns the frame at the given position
* @param position
* @return
*/
public abstract String getFocusedChapterId(int position);
/**
* Returns the position of an item in the adapter.
* @param chapterId
* @param frameId
* @return -1 if no item is found
*/
public abstract int getItemPosition(String chapterId, String frameId);
/**
* Restarts the auto commit timer
*/
public void restartAutoCommitTimer() {
mListener.restartAutoCommitTimer();
}
/**
* Notifies the adpater that it needs to reload all it's data.
*/
public abstract void reload();
public interface OnEventListener {
void onSourceTranslationTabClick(String sourceTranslationId);
void onNewSourceTranslationTabClick();
void closeKeyboard();
void openTranslationMode(TranslationViewMode mode, Bundle extras);
void onTranslationWordClick(String translationWordId, int width);
void onTranslationArticleClick(String volume, String manual, String slug, int width);
void onTranslationNoteClick(String chapterId, String frameId, String translationNoteId, int width);
void onCheckingQuestionClick(String chapterId, String frameId, String checkingQuestionId, int width);
void scrollToFrame(String chapterSlug, String frameSlug);
void restartAutoCommitTimer();
}
}