package com.door43.translationstudio.newui.newtranslation; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.support.v4.view.MenuItemCompat; import android.os.Bundle; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.door43.translationstudio.R; import com.door43.translationstudio.SettingsActivity; import com.door43.translationstudio.core.Resource; import com.door43.translationstudio.core.SourceLanguage; import com.door43.translationstudio.core.SourceTranslation; import com.door43.translationstudio.core.TargetLanguage; import com.door43.translationstudio.core.TargetTranslation; import com.door43.translationstudio.core.TranslationType; import com.door43.translationstudio.core.Translator; import com.door43.translationstudio.dialogs.CustomAlertDialog; import com.door43.translationstudio.newui.library.ServerLibraryActivity; import com.door43.translationstudio.newui.library.Searchable; import com.door43.translationstudio.newui.BaseActivity; import com.door43.translationstudio.AppContext; import java.util.Locale; public class NewTargetTranslationActivity extends BaseActivity implements TargetLanguageListFragment.OnItemClickListener, ProjectListFragment.OnItemClickListener { public static final String EXTRA_TARGET_TRANSLATION_ID = "extra_target_translation_id"; public static final int RESULT_DUPLICATE = 2; private static final String STATE_TARGET_TRANSLATION_ID = "state_target_translation_id"; private static final String STATE_TARGET_LANGUAGE_ID = "state_target_language_id"; public static final int RESULT_ERROR = 3; private TargetLanguage mSelectedTargetLanguage = null; private Searchable mFragment; private String mNewTargetTranslationId = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_target_translation); if(findViewById(R.id.fragment_container) != null) { if(savedInstanceState != null) { mFragment = (Searchable)getFragmentManager().findFragmentById(R.id.fragment_container); } else { mFragment = new TargetLanguageListFragment(); ((TargetLanguageListFragment) mFragment).setArguments(getIntent().getExtras()); getFragmentManager().beginTransaction().add(R.id.fragment_container, (TargetLanguageListFragment) mFragment).commit(); // TODO: animate } } } public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if(savedInstanceState != null) { mNewTargetTranslationId = savedInstanceState.getString(STATE_TARGET_TRANSLATION_ID, null); String targetLanguageId = savedInstanceState.getString(STATE_TARGET_LANGUAGE_ID, null); if(targetLanguageId != null) { mSelectedTargetLanguage = AppContext.getLibrary().getTargetLanguage(targetLanguageId); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_new_target_translation, menu); return true; } @Override public void onItemClick(TargetLanguage targetLanguage) { mSelectedTargetLanguage = targetLanguage; // display project list mFragment = new ProjectListFragment(); ((ProjectListFragment) mFragment).setArguments(getIntent().getExtras()); getFragmentManager().beginTransaction().replace(R.id.fragment_container, (ProjectListFragment) mFragment).commit(); // TODO: animate invalidateOptionsMenu(); } @Override public void onItemClick(String projectId) { Translator translator = AppContext.getTranslator(); // TRICKY: android only supports translating regular text projects String resourceSlug = projectId.equals("obs") ? "obs" : Resource.REGULAR_SLUG; TargetTranslation existingTranslation = translator.getTargetTranslation(TargetTranslation.generateTargetTranslationId(mSelectedTargetLanguage.getId(), projectId, TranslationType.TEXT, resourceSlug)); if(existingTranslation == null) { // create new target translation SourceLanguage sourceLanguage = AppContext.getLibrary().getPreferredSourceLanguage(projectId, Locale.getDefault().getLanguage()); // get project name // TODO: 3/2/2016 eventually the format will be specified in the project SourceTranslation sourceTranslation = AppContext.getLibrary().getDefaultSourceTranslation(projectId, sourceLanguage.getId()); TargetTranslation targetTranslation = AppContext.getTranslator().createTargetTranslation(AppContext.getProfile().getNativeSpeaker(), mSelectedTargetLanguage, projectId, TranslationType.TEXT, resourceSlug, sourceTranslation.getFormat()); if(targetTranslation != null) { mNewTargetTranslationId = targetTranslation.getId(); Intent data = new Intent(); data.putExtra(EXTRA_TARGET_TRANSLATION_ID, mNewTargetTranslationId); setResult(RESULT_OK, data); finish(); } else { AppContext.getTranslator().deleteTargetTranslation(TargetTranslation.generateTargetTranslationId(mSelectedTargetLanguage.getId(), projectId, TranslationType.TEXT, resourceSlug)); Intent data = new Intent(); setResult(RESULT_ERROR, data); finish(); } } else { // that translation already exists Intent data = new Intent(); data.putExtra(EXTRA_TARGET_TRANSLATION_ID, existingTranslation.getId()); setResult(RESULT_DUPLICATE, data); finish(); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); if(mFragment instanceof ProjectListFragment) { menu.findItem(R.id.action_update).setVisible(true); } else { menu.findItem(R.id.action_update).setVisible(false); } SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); final MenuItem searchMenuItem = menu.findItem(R.id.action_search); final SearchView searchViewAction = (SearchView) MenuItemCompat.getActionView(searchMenuItem); searchViewAction.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return true; } @Override public boolean onQueryTextChange(String s) { mFragment.onSearchQuery(s); return true; } }); searchViewAction.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch(id) { case R.id.action_settings: Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); return true; case R.id.action_search: return true; case R.id.action_update: CustomAlertDialog.Create(this) .setTitle(R.string.update_projects) .setIcon(R.drawable.ic_local_library_black_24dp) .setMessage(R.string.use_internet_confirmation) .setPositiveButton(R.string.yes, new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(NewTargetTranslationActivity.this, ServerLibraryActivity.class); // intent.putExtra(ServerLibraryActivity.ARG_SHOW_UPDATES, true); startActivity(intent); } }) .setNegativeButton(R.string.no, null) .show("Update"); return true; default: return super.onOptionsItemSelected(item); } } public void onSaveInstanceState(Bundle outState) { if(mNewTargetTranslationId != null) { outState.putSerializable(STATE_TARGET_TRANSLATION_ID, mNewTargetTranslationId); } else { outState.remove(STATE_TARGET_TRANSLATION_ID); } if(mSelectedTargetLanguage != null) { outState.putString(STATE_TARGET_LANGUAGE_ID, mSelectedTargetLanguage.getId()); } else { outState.remove(STATE_TARGET_LANGUAGE_ID); } super.onSaveInstanceState(outState); } }