package com.door43.translationstudio.newui.publish;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.door43.translationstudio.R;
import com.door43.translationstudio.dialogs.CustomAlertDialog;
import com.door43.translationstudio.tasks.ValidationTask;
import com.door43.util.DummyDialogListener;
import com.door43.util.tasks.ManagedTask;
import com.door43.util.tasks.TaskManager;
import java.security.InvalidParameterException;
/**
* Created by joel on 9/20/2015.
*/
public class ValidationFragment extends PublishStepFragment implements ManagedTask.OnFinishedListener, ValidationAdapter.OnClickListener {
private LinearLayout mLoadingLayout;
private RecyclerView mRecyclerView;
private ValidationAdapter mValidationAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_publish_validation_list, container, false);
Bundle args = getArguments();
String targetTranslationId = args.getString(PublishActivity.EXTRA_TARGET_TRANSLATION_ID);
String sourceTranslationId = args.getString(ARG_SOURCE_TRANSLATION_ID);
if(targetTranslationId == null) {
throw new InvalidParameterException("a valid target translation id is required");
}
if(sourceTranslationId == null) {
throw new InvalidParameterException("a valid source translation id is required");
}
mRecyclerView = (RecyclerView)rootView.findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mValidationAdapter = new ValidationAdapter(getActivity());
mValidationAdapter.setOnClickListener(this);
mRecyclerView.setAdapter(mValidationAdapter);
mLoadingLayout = (LinearLayout)rootView.findViewById(R.id.loading_layout);
// display loading view
mRecyclerView.setVisibility(View.GONE);
mLoadingLayout.setVisibility(View.VISIBLE);
// start task to validate items
ValidationTask task = (ValidationTask) TaskManager.getTask(ValidationTask.TASK_ID);
if(task != null) {
task.addOnFinishedListener(this);
} else {
// start new task
task = new ValidationTask(targetTranslationId, sourceTranslationId);
task.addOnFinishedListener(this);
TaskManager.addTask(task);
}
return rootView;
}
@Override
public void onFinished(final ManagedTask task) {
TaskManager.clearTask(task);
Handler hand = new Handler(Looper.getMainLooper());
hand.post(new Runnable() {
@Override
public void run() {
mValidationAdapter.setValidations(((ValidationTask) task).getValidations());
mRecyclerView.setVisibility(View.VISIBLE);
mLoadingLayout.setVisibility(View.GONE);
// TODO: animate
}
});
}
@Override
public void onClickReview(String targetTranslationId, String chapterId, String frameId) {
openReview(targetTranslationId, chapterId, frameId);
}
@Override
public void onClickNext() {
if(mValidationAdapter.getItemCount() > 2) {
// when there are more than two items (success card and next button) there were validation issues
CustomAlertDialog.Create(getActivity())
.setTitle(R.string.dialog_validation_warnings)
.setMessage(R.string.validation_warnings)
.setIcon(R.drawable.ic_report_black_24dp)
.setPositiveButton(R.string.label_ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
nextStep();
}
})
.setNegativeButton(R.string.title_cancel, null).show("ValidWarn");
} else {
nextStep();
}
}
private void nextStep() {
// TODO: proceed to the next step
getListener().nextStep();
}
@Override
public void onDestroy() {
mValidationAdapter.setOnClickListener(null);
super.onDestroy();
}
}