package com.door43.translationstudio.newui.home; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageButton; import android.widget.TextView; import com.door43.translationstudio.R; import com.door43.translationstudio.core.Library; import com.door43.translationstudio.core.NativeSpeaker; import com.door43.translationstudio.core.SourceLanguage; import com.door43.translationstudio.core.TargetTranslation; import com.door43.translationstudio.core.Translator; import com.door43.translationstudio.AppContext; import com.door43.translationstudio.dialogs.CustomAlertDialog; import com.door43.translationstudio.newui.PrintDialog; import com.door43.translationstudio.newui.publish.PublishActivity; import com.door43.translationstudio.newui.BackupDialog; import com.door43.util.tasks.ThreadableUI; import java.util.ArrayList; import java.util.Locale; /** * Displays detailed information about a target translation */ public class TargetTranslationInfoDialog extends DialogFragment { public static final String ARG_TARGET_TRANSLATION_ID = "arg_target_translation_id"; private TargetTranslation mTargetTranslation; private Translator mTranslator; private OnDeleteListener mListener; private int mTranslationProgress = 0; private boolean mTranslationProgressWasCalculated = false; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); View v = inflater.inflate(R.layout.dialog_target_translation_info, container, false); mTranslator = AppContext.getTranslator(); Bundle args = getArguments(); if(args == null || !args.containsKey(ARG_TARGET_TRANSLATION_ID)) { dismiss(); } else { String targetTranslationId = args.getString(ARG_TARGET_TRANSLATION_ID, null); mTargetTranslation = mTranslator.getTargetTranslation(targetTranslationId); } final Library library = AppContext.getLibrary(); TextView title = (TextView)v.findViewById(R.id.title); TextView projectTitle = (TextView)v.findViewById(R.id.project_title); SourceLanguage sourceLanguage = library.getPreferredSourceLanguage(mTargetTranslation.getProjectId(), Locale.getDefault().getLanguage()); if(sourceLanguage != null) { title.setText(sourceLanguage.projectTitle + " - " + mTargetTranslation.getTargetLanguageName()); projectTitle.setText(sourceLanguage.projectTitle + " (" + mTargetTranslation.getProjectId() + ")"); } else { title.setText(mTargetTranslation.getProjectId() + " - " + mTargetTranslation.getTargetLanguageName()); projectTitle.setText(mTargetTranslation.getProjectId()); } TextView languageTitle = (TextView)v.findViewById(R.id.language_title); languageTitle.setText(mTargetTranslation.getTargetLanguageName() + " (" + mTargetTranslation.getTargetLanguageId() + ")"); final TextView progressView = (TextView)v.findViewById(R.id.progress); final ThreadableUI task = new ThreadableUI(getActivity()) { private int progress = 0; @Override public void onStop() { } @Override public void run() { progress = Math.round(library.getTranslationProgress(mTargetTranslation) * 100); } @Override public void onPostExecute() { if (!isInterrupted()) { mTranslationProgressWasCalculated = true; mTranslationProgress = progress; progressView.setText(progress + "%"); } } }; if(!mTranslationProgressWasCalculated) { progressView.setText(""); task.start(); } else { progressView.setText(mTranslationProgress + "%"); } TextView translatorsView = (TextView)v.findViewById(R.id.translators); translatorsView.setText(""); String translators = getTranslaterNames("\n"); if(translators != null) { translatorsView.setText(translators); } // TODO: 10/1/2015 support displaying multiple translators TextView publishView = (TextView)v.findViewById(R.id.publish_state); publishView.setText(""); int statusID = 0; switch (mTargetTranslation.getPublishedStatus()) { case NOT_PUBLISHED: statusID = R.string.publish_status_not; break; case IS_CURRENT: statusID = R.string.publish_status_current; break; case NOT_CURRENT: statusID = R.string.publish_status_not_current; break; default: case ERROR: statusID = R.string.error; break; } publishView.setText(statusID); ImageButton deleteButton = (ImageButton)v.findViewById(R.id.delete_button); deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CustomAlertDialog.Create(getActivity()) .setTitle(R.string.label_delete) .setIcon(R.drawable.ic_delete_black_24dp) .setMessage(R.string.confirm_delete_target_translation) .setPositiveButton(R.string.confirm, new View.OnClickListener() { @Override public void onClick(View v) { task.stop(); if(mTargetTranslation != null) { mTranslator.deleteTargetTranslation(mTargetTranslation.getId()); AppContext.clearTargetTranslationSettings(mTargetTranslation.getId()); } if(mListener != null) { mListener.onDeleteTargetTranslation(mTargetTranslation.getId()); } dismiss(); } }) .setNegativeButton(R.string.no, null) .show("DeleteTrans"); } }); ImageButton backupButton = (ImageButton)v.findViewById(R.id.backup_button); backupButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentTransaction backupFt = getFragmentManager().beginTransaction(); Fragment backupPrev = getFragmentManager().findFragmentByTag(BackupDialog.TAG); if (backupPrev != null) { backupFt.remove(backupPrev); } backupFt.addToBackStack(null); BackupDialog backupDialog = new BackupDialog(); Bundle args = new Bundle(); args.putString(BackupDialog.ARG_TARGET_TRANSLATION_ID, mTargetTranslation.getId()); backupDialog.setArguments(args); backupDialog.show(backupFt, BackupDialog.TAG); } }); ImageButton publishButton = (ImageButton)v.findViewById(R.id.publish_button); publishButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent publishIntent = new Intent(getActivity(), PublishActivity.class); publishIntent.putExtra(PublishActivity.EXTRA_TARGET_TRANSLATION_ID, mTargetTranslation.getId()); publishIntent.putExtra(PublishActivity.EXTRA_CALLING_ACTIVITY, PublishActivity.ACTIVITY_HOME); startActivity(publishIntent); } }); ImageButton printButton = (ImageButton)v.findViewById(R.id.print_button); printButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentTransaction printFt = getFragmentManager().beginTransaction(); Fragment printPrev = getFragmentManager().findFragmentByTag("printDialog"); if (printPrev != null) { printFt.remove(printPrev); } printFt.addToBackStack(null); PrintDialog printDialog = new PrintDialog(); Bundle printArgs = new Bundle(); printArgs.putString(PrintDialog.ARG_TARGET_TRANSLATION_ID, mTargetTranslation.getId()); printDialog.setArguments(printArgs); printDialog.show(printFt, "printDialog"); } }); View contributorsGroup = v.findViewById(R.id.contributors_group); contributorsGroup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); Fragment prev = getActivity().getFragmentManager().findFragmentByTag("manage-contributors"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); ManageContributorsDialog dialog = new ManageContributorsDialog(); Bundle args = new Bundle(); args.putString(ManageContributorsDialog.EXTRA_TARGET_TRANSLATION_ID, mTargetTranslation.getId()); dialog.setArguments(args); dialog.show(ft, "manage-contributors"); } }); // TODO: re-connect to dialogs return v; } /** * Assigns a listener for this dialog * @param listener */ public void setOnDeleteListener(OnDeleteListener listener) { mListener = listener; } public interface OnDeleteListener { void onDeleteTargetTranslation(String targetTranslationId); } /** * returns a concatenated list of names or null if error */ public String getTranslaterNames(String between) { ArrayList<NativeSpeaker> nameList = mTargetTranslation.getContributors(); if(null != nameList) { String listString = ""; for (int i = 0; i < nameList.size(); i++) { if(!listString.isEmpty()) { listString += between; } listString += nameList.get(i).name; } return listString; } return null; } }