diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 1bdcf91fa..b1c57f7c6 100755 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -73,15 +73,13 @@ import com.todoroo.astrid.timers.TimerControlSet; import com.todoroo.astrid.timers.TimerPlugin; import com.todoroo.astrid.ui.DateChangedAlerts; import com.todoroo.astrid.ui.DeadlineControlSet; -import com.todoroo.astrid.ui.EditNotesControlSet; +import com.todoroo.astrid.ui.DescriptionControlSet; import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ImportanceControlSet; import com.todoroo.astrid.ui.PopupControlSet; import com.todoroo.astrid.ui.ReminderControlSet; import com.todoroo.astrid.utility.Flags; -import com.todoroo.astrid.voice.VoiceInputAssistant; -import com.todoroo.astrid.voice.VoiceRecognizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -146,7 +144,6 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { // --- request codes - private static final int REQUEST_VOICE_RECOG = 10; public static final int REQUEST_CODE_RECORD = 30; public static final int REQUEST_CODE_ATTACH_FILE = 40; public static final int REQUEST_CODE_BEAST_MODE = 50; @@ -178,7 +175,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { // --- UI components - private EditNotesControlSet notesControlSet = null; + private DescriptionControlSet notesControlSet = null; private FilesControlSet filesControlSet = null; private TimerActionControlSet timerAction; private EditText title; @@ -199,9 +196,6 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { /** whether task should be saved when this activity exits */ private boolean shouldSaveState = true; - /** voice assistant for notes-creation */ - private VoiceInputAssistant voiceNoteAssistant; - private EditText notesEditText; private Dialog whenDialog; @@ -391,7 +385,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { controlSetMap.put(getString(R.string.TEA_ctrl_importance_pref), importanceControl); - notesControlSet = new EditNotesControlSet(preferences, getActivity()); + notesControlSet = new DescriptionControlSet(preferences, getActivity()); notesEditText = (EditText) notesControlSet.getView().findViewById( R.id.notes); controls.add(notesControlSet); @@ -507,22 +501,8 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { private class TaskEditBackgroundLoader extends Thread { public void onUiThread() { - // prepare and set listener for voice-button if (getActivity() != null) { - if (VoiceRecognizer.voiceInputAvailable(getActivity())) { - ImageButton voiceAddNoteButton = (ImageButton) notesControlSet.getView().findViewById( - R.id.voiceAddNoteButton); - voiceAddNoteButton.setVisibility(View.VISIBLE); - int prompt = R.string.voice_edit_note_prompt; - voiceNoteAssistant = new VoiceInputAssistant(voiceAddNoteButton, REQUEST_VOICE_RECOG); - voiceNoteAssistant.setAppend(); - voiceNoteAssistant.setLanguageModel(RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); - if (VoiceRecognizer.voiceInputAvailable(ContextManager.getContext())) { - voiceNoteAssistant.configureMicrophoneButton(TaskEditFragment.this, prompt); - } else { - voiceNoteAssistant.hideVoiceButton(); - } - } + // todo: is this necessary? loadMoreContainer(); } } @@ -542,7 +522,6 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { onUiThread(); } }); - } } @@ -957,16 +936,6 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { if (editNotes != null && editNotes.activityResult(requestCode, resultCode, data)) { return; - } else if (requestCode == REQUEST_VOICE_RECOG - && resultCode == Activity.RESULT_OK) { - // handle the result of voice recognition, put it into the - // appropiate textfield - voiceNoteAssistant.handleActivityResult(requestCode, resultCode, data, notesEditText); - - // write the voicenote into the model, or it will be deleted by - // onResume.populateFields - // (due to the activity-change) - notesControlSet.writeToModel(model); } else if (requestCode == REQUEST_CODE_RECORD && resultCode == Activity.RESULT_OK) { String recordedAudioPath = data.getStringExtra(AACRecordingActivity.RESULT_OUTFILE); String recordedAudioName = data.getStringExtra(AACRecordingActivity.RESULT_FILENAME); diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index c557342a0..06c597db7 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -10,7 +10,6 @@ import android.app.AlertDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.speech.SpeechRecognizer; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v4.widget.DrawerLayout; @@ -20,11 +19,10 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.Toast; +import com.todoroo.andlib.data.Callback; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.actfm.TagSettingsActivity; import com.todoroo.astrid.actfm.TagSettingsActivityTablet; import com.todoroo.astrid.actfm.TagViewFragment; @@ -40,10 +38,9 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.tags.TagFilterExposer; -import com.todoroo.astrid.ui.QuickAddBar; import com.todoroo.astrid.utility.Constants; import com.todoroo.astrid.utility.Flags; -import com.todoroo.astrid.voice.VoiceRecognizer; +import com.todoroo.astrid.voice.VoiceInputAssistant; import org.tasks.R; import org.tasks.preferences.ActivityPreferences; @@ -51,15 +48,15 @@ import org.tasks.ui.NavigationDrawerFragment; import javax.inject.Inject; -import static com.todoroo.astrid.voice.RecognizerApi.RecognizerApiListener; -import static com.todoroo.astrid.voice.VoiceRecognizer.voiceInputAvailable; +import static com.todoroo.astrid.voice.VoiceInputAssistant.voiceInputAvailable; import static org.tasks.ui.NavigationDrawerFragment.OnFilterItemClickedListener; -public class TaskListActivity extends AstridActivity implements OnPageChangeListener, OnFilterItemClickedListener, RecognizerApiListener { +public class TaskListActivity extends AstridActivity implements OnPageChangeListener, OnFilterItemClickedListener { @Inject TagDataDao tagDataDao; @Inject ActivityPreferences preferences; @Inject GtasksPreferenceService gtasksPreferenceService; + @Inject VoiceInputAssistant voiceInputAssistant; private NavigationDrawerFragment navigationDrawer; @@ -319,6 +316,16 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { + Callback quickAddTask = new Callback() { + @Override + public void apply(String title) { + getTaskListFragment().quickAddBar.quickAddTask(title); + } + }; + if (voiceInputAssistant.handleActivityResult(requestCode, resultCode, data, quickAddTask)) { + return; + } + if ((requestCode == NavigationDrawerFragment.REQUEST_NEW_LIST || requestCode == TaskListFragment.ACTIVITY_REQUEST_NEW_FILTER) && resultCode == Activity.RESULT_OK) { @@ -454,7 +461,7 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList TaskListFragment tlf = getTaskListFragment(); switch(item.getItemId()) { case R.id.menu_voice_add: - getTaskListFragment().startVoiceRecognition(); + voiceInputAssistant.startVoiceRecognitionActivity(R.string.voice_create_prompt); return true; case R.id.menu_sort: AlertDialog dialog = SortSelectionActivity.createDialog( @@ -493,45 +500,4 @@ public class TaskListActivity extends AstridActivity implements OnPageChangeList public boolean isDrawerOpen() { return navigationDrawer.isDrawerOpen(); } - - // Voice recognizer callbacks - @Override - public void onSpeechResult(String result) { - TaskListFragment tlf = getTaskListFragment(); - if (tlf != null) { - tlf.quickAddBar.quickAddTask(result); - } - } - - @Override - public void onSpeechError(int error) { - TaskListFragment tlf = getTaskListFragment(); - if (tlf != null) { - QuickAddBar quickAdd = tlf.quickAddBar; - if (quickAdd != null) { - VoiceRecognizer vr = getTaskListFragment().getVoiceRecognizer(); - if (vr != null) { - vr.cancel(); - } - } - } - - int errorStr = 0; - switch(error) { - case SpeechRecognizer.ERROR_NETWORK: - case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: - errorStr = R.string.speech_err_network; - break; - case SpeechRecognizer.ERROR_NO_MATCH: - Toast.makeText(this, R.string.speech_err_no_match, Toast.LENGTH_LONG).show(); - break; - default: - errorStr = R.string.speech_err_default; - break; - } - - if (errorStr > 0) { - DialogUtilities.okDialog(this, getString(errorStr), null); - } - } } diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 236db9f09..b34e9f1d5 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -71,7 +71,6 @@ import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.timers.TimerPlugin; import com.todoroo.astrid.ui.QuickAddBar; import com.todoroo.astrid.utility.Flags; -import com.todoroo.astrid.voice.VoiceRecognizer; import com.todoroo.astrid.widget.TasksWidget; import org.slf4j.Logger; @@ -220,10 +219,6 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel emptyView.setRefreshing(ongoing); } - public VoiceRecognizer getVoiceRecognizer() { - return voiceRecognizer; - } - /** * Container Activity must implement this interface and we ensure that it * does during the onAttach() callback @@ -491,31 +486,6 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel * ====================================================================== */ - @Override - public void onStart() { - super.onStart(); - setupRecognizerApi(); - } - - @Override - public void onStop() { - super.onStop(); - destroyRecognizerApi(); - } - - private VoiceRecognizer voiceRecognizer; - - public void setupRecognizerApi() { - voiceRecognizer = VoiceRecognizer.instantiateVoiceRecognizer(getActivity(), (TaskListActivity) getActivity()); - } - - public void destroyRecognizerApi() { - voiceRecognizer.destroyRecognizerApi(); - } - - public void startVoiceRecognition() { - voiceRecognizer.startVoiceRecognition(getActivity(), this); - } @Override public void onResume() { super.onResume(); diff --git a/astrid/src/main/java/com/todoroo/astrid/files/FilesControlSet.java b/astrid/src/main/java/com/todoroo/astrid/files/FilesControlSet.java index e6ed45126..f1bc5b28e 100644 --- a/astrid/src/main/java/com/todoroo/astrid/files/FilesControlSet.java +++ b/astrid/src/main/java/com/todoroo/astrid/files/FilesControlSet.java @@ -9,6 +9,7 @@ import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; +import android.media.MediaPlayer; import android.net.Uri; import android.text.TextUtils; import android.view.LayoutInflater; @@ -31,8 +32,6 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.ui.PopupControlSet; import com.todoroo.astrid.utility.Constants; -import com.todoroo.astrid.voice.RecognizerApi; -import com.todoroo.astrid.voice.RecognizerApi.PlaybackExceptionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -177,12 +176,29 @@ public class FilesControlSet extends PopupControlSet { } } + public static interface PlaybackExceptionHandler { + public void playbackFailed(); + } + + private static void play(String file, PlaybackExceptionHandler handler) { + MediaPlayer mediaPlayer = new MediaPlayer(); + + try { + mediaPlayer.setDataSource(file); + mediaPlayer.prepare(); + mediaPlayer.start(); + } catch (Exception e) { + log.error(e.getMessage(), e); + handler.playbackFailed(); + } + } + private void showFile(final TaskAttachment m) { final String fileType = m.containsNonNullValue(TaskAttachment.CONTENT_TYPE) ? m.getContentType() : TaskAttachment.FILE_TYPE_OTHER; final String filePath = m.getFilePath(); if (fileType.startsWith(TaskAttachment.FILE_TYPE_AUDIO)) { - RecognizerApi.play(m.getFilePath(), new PlaybackExceptionHandler() { + play(m.getFilePath(), new PlaybackExceptionHandler() { @Override public void playbackFailed() { showFromIntent(filePath, fileType); diff --git a/astrid/src/main/java/com/todoroo/astrid/ui/EditNotesControlSet.java b/astrid/src/main/java/com/todoroo/astrid/ui/DescriptionControlSet.java similarity index 95% rename from astrid/src/main/java/com/todoroo/astrid/ui/EditNotesControlSet.java rename to astrid/src/main/java/com/todoroo/astrid/ui/DescriptionControlSet.java index b798ccfc8..7a880b981 100644 --- a/astrid/src/main/java/com/todoroo/astrid/ui/EditNotesControlSet.java +++ b/astrid/src/main/java/com/todoroo/astrid/ui/DescriptionControlSet.java @@ -23,13 +23,13 @@ import org.tasks.preferences.ActivityPreferences; import static org.tasks.preferences.ResourceResolver.getResource; -public class EditNotesControlSet extends PopupControlSet { +public class DescriptionControlSet extends PopupControlSet { protected EditText editText; protected TextView notesPreview; protected ImageView image; - public EditNotesControlSet(ActivityPreferences preferences, Activity activity) { + public DescriptionControlSet(ActivityPreferences preferences, Activity activity) { super(preferences, activity, R.layout.control_set_notes, R.layout.control_set_notes_display, R.string.TEA_note_label); image = (ImageView) getDisplayView().findViewById(R.id.display_row_icon); } diff --git a/astrid/src/main/java/com/todoroo/astrid/voice/RecognizerApi.java b/astrid/src/main/java/com/todoroo/astrid/voice/RecognizerApi.java deleted file mode 100644 index 5a7a6c26b..000000000 --- a/astrid/src/main/java/com/todoroo/astrid/voice/RecognizerApi.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.todoroo.astrid.voice; - -import android.annotation.TargetApi; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; -import android.content.Intent; -import android.media.MediaPlayer; -import android.os.Bundle; -import android.speech.RecognitionListener; -import android.speech.RecognizerIntent; -import android.speech.SpeechRecognizer; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.ArrayList; - -@TargetApi(8) -public class RecognizerApi implements RecognitionListener { - - private static final Logger log = LoggerFactory.getLogger(RecognizerApi.class); - - public static interface PlaybackExceptionHandler { - public void playbackFailed(); - } - - private Context context; - - public static interface RecognizerApiListener { - public void onSpeechResult(String result); - - public void onSpeechError(int error); - } - - private RecognizerApiListener mListener; - - public RecognizerApi(Context context) { - this.context = context; - - sr = SpeechRecognizer.createSpeechRecognizer(context); - } - - public void setListener(RecognizerApiListener listener) { - this.mListener = listener; - } - - public static void play(String file, PlaybackExceptionHandler handler) { - MediaPlayer mediaPlayer = new MediaPlayer(); - - try { - mediaPlayer.setDataSource(file); - mediaPlayer.prepare(); - mediaPlayer.start(); - } catch (Exception e) { - log.error(e.getMessage(), e); - handler.playbackFailed(); - } - } - - private long speechStarted = 0; - private SpeechRecognizer sr; - private ProgressDialog speakPd; - private ProgressDialog processingPd; - - public void start(String callingPackage, String speakNowMessage) { - sr.setRecognitionListener(this); - - Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); - intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, - RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); - intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, callingPackage); - - speechStarted = 0; - baos.reset(); - - speakPd = new ProgressDialog(context); - speakPd.setMessage(speakNowMessage); - speakPd.setIndeterminate(true); - speakPd.setCancelable(true); - speakPd.setOnCancelListener(new OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - sr.cancel(); - onEndOfSpeech(); - } - }); - - speakPd.show(); - sr.startListening(intent); - - speechStarted = System.currentTimeMillis(); - } - - public void cancel() { - sr.cancel(); - } - - public void destroy() { - sr.setRecognitionListener(null); - sr.destroy(); - } - - // --- RecognitionListener methods --- // - - private ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - @Override - public void onBeginningOfSpeech() { - } - - @Override - public void onBufferReceived(byte[] buffer) { - if (speechStarted > 0) { - try { - baos.write(buffer); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - } - - @Override - public void onEndOfSpeech() { - speakPd.dismiss(); - - if (speechStarted == 0) - return; - - processingPd = new ProgressDialog(context); - processingPd.setMessage(""); - processingPd.setIndeterminate(true); - processingPd.setCancelable(true); - processingPd.setOnCancelListener(new OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - sr.cancel(); - } - }); - processingPd.show(); - } - - @Override - public void onError(int error) { - log.error("Error code " + error, new RuntimeException()); - if (mListener != null) { - mListener.onSpeechError(error); - } - } - - @Override - public void onEvent(int arg0, Bundle arg1) { - // - } - - @Override - public void onPartialResults(Bundle partialResults) { - onResults(partialResults); - } - - @Override - public void onReadyForSpeech(Bundle arg0) { - } - - @Override - public void onResults(Bundle results) { - processingPd.dismiss(); - ArrayList strings = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); - if (mListener != null) { - mListener.onSpeechResult(strings == null || strings.size() == 0 ? "" : strings.get(0)); - } - } - - @Override - public void onRmsChanged(float arg0) { - } - -} \ No newline at end of file diff --git a/astrid/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java b/astrid/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java index c9b59335e..ad37b4d0e 100644 --- a/astrid/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java +++ b/astrid/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java @@ -6,7 +6,10 @@ package com.todoroo.astrid.voice; import android.app.Activity; +import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.speech.RecognizerIntent; import android.support.v4.app.Fragment; import android.view.View; @@ -14,6 +17,7 @@ import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageButton; +import com.todoroo.andlib.data.Callback; import com.todoroo.andlib.service.ContextManager; import junit.framework.Assert; @@ -23,6 +27,10 @@ import org.slf4j.LoggerFactory; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; /** * This class handles taking voice-input and appends the text to the registered EditText-instance. @@ -35,13 +43,27 @@ import java.util.ArrayList; * * @author Arne Jans */ +@Singleton public class VoiceInputAssistant { - private static final Logger log = LoggerFactory.getLogger(VoiceInputAssistant.class); - /** requestcode for activityresult from voicerecognizer-intent */ public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; + /** + * Call this to see if your phone supports voiceinput in its current configuration. + * If this method returns false, it could also mean that Google Voicesearch is simply + * not installed. + * If this method returns true, internal use of it enables the registered microphone-button. + * + * @return whether this phone supports voiceinput + */ + public static boolean voiceInputAvailable(Context context) { + PackageManager pm = context.getPackageManager(); + List activities = pm.queryIntentActivities( + new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); + return (activities.size() != 0); + } + /** * This requestcode is used to differentiate between multiple microphone-buttons on a single fragment. * Use the mightier constructor to specify your own requestCode in this case for every additional use on an fragment. @@ -49,62 +71,15 @@ public class VoiceInputAssistant { */ private int requestCode = VOICE_RECOGNITION_REQUEST_CODE; private Activity activity; - private final ImageButton voiceButton; - private boolean append = false; - - private String languageModel = RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH; - - /** - * @param languageModel the languageModel to set - */ - public void setLanguageModel(String languageModel) { - this.languageModel = languageModel; - } - - /** Sets whether voice input will append into field */ - public void setAppend() { - this.append = true; - } /** * This constructor can be called from a widget with a voice-button calling a dummy-activity. * * @param activity dummy-activity that starts the voice-request. */ + @Inject public VoiceInputAssistant(Activity activity) { this.activity = activity; - this.voiceButton = null; - } - - /** - * Creates a new VoiceInputAssistance-instance for use with a specified button and textfield. - * If you need more than one microphone-button on a given fragment, use the other constructor. - * - * @param voiceButton the microphone-Button - */ - public VoiceInputAssistant(ImageButton voiceButton) { - Assert.assertNotNull("A VoiceInputAssistant without a voiceButton makes no sense!", voiceButton); - this.voiceButton = voiceButton; - } - - /** - * The param requestCode is used to differentiate between multiple - * microphone-buttons on a single fragment. - * Use the this constructor to specify your own requestCode in - * this case for every additional use on a fragment. - * If you only use one microphone-button on a fragment, - * you can leave it to its default, VOICE_RECOGNITION_REQUEST_CODE. - * - * - * @param requestCode has to be unique in a single fragment-context, - * dont use VOICE_RECOGNITION_REQUEST_CODE, this is reserved for the other constructor - */ - public VoiceInputAssistant(ImageButton voiceButton, int requestCode) { - this(voiceButton); - if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) { - throw new InvalidParameterException("You have to specify a unique requestCode for this VoiceInputAssistant!"); - } - this.requestCode = requestCode; } /** @@ -113,19 +88,12 @@ public class VoiceInputAssistant { * * @param prompt Specify the R.string.string_id resource for the prompt-text during voice-recognition here */ - public void startVoiceRecognitionActivity(Fragment fragment, int prompt) { + public void startVoiceRecognitionActivity(int prompt) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); - intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, languageModel); + intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, ContextManager.getContext().getString(prompt)); - String detailMessage = "Error! No Fragment or Activity was registered to handle this voiceinput-request!"; - if (activity != null) { - activity.startActivityForResult(intent, requestCode); - } else if (fragment != null) { - fragment.startActivityForResult(intent, requestCode); - } else { - log.error(detailMessage, new IllegalStateException(detailMessage)); - } + activity.startActivityForResult(intent, requestCode); } /** @@ -140,7 +108,7 @@ public class VoiceInputAssistant { * * @param activityRequestCode if this equals the requestCode specified by constructor, then results of voice-recognition */ - public boolean handleActivityResult(int activityRequestCode, int resultCode, Intent data, EditText textField) { + public boolean handleActivityResult(int activityRequestCode, int resultCode, Intent data, Callback onVoiceRecognition) { boolean result = false; // handle the result of voice recognition, put it into the textfield if (activityRequestCode == this.requestCode) { @@ -158,29 +126,11 @@ public class VoiceInputAssistant { recognizedSpeech = recognizedSpeech.substring(0, 1).toUpperCase() + recognizedSpeech.substring(1).toLowerCase(); - if(append) { - textField.setText((textField.getText() + " " + recognizedSpeech).trim()); - } else { - textField.setText(recognizedSpeech); - } + onVoiceRecognition.apply(recognizedSpeech); } } } return result; } - - public void configureMicrophoneButton(final Fragment fragment, final int prompt) { - voiceButton.setVisibility(View.VISIBLE); - voiceButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - startVoiceRecognitionActivity(fragment, prompt); - } - }); - } - - public void hideVoiceButton() { - voiceButton.setVisibility(View.GONE); - } } diff --git a/astrid/src/main/java/com/todoroo/astrid/voice/VoiceRecognizer.java b/astrid/src/main/java/com/todoroo/astrid/voice/VoiceRecognizer.java deleted file mode 100644 index 0e89c671c..000000000 --- a/astrid/src/main/java/com/todoroo/astrid/voice/VoiceRecognizer.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ -package com.todoroo.astrid.voice; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.speech.RecognizerIntent; -import android.speech.SpeechRecognizer; -import android.support.v4.app.Fragment; - -import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.astrid.utility.Constants; -import com.todoroo.astrid.voice.RecognizerApi.RecognizerApiListener; - -import org.tasks.R; - -import java.util.List; - -@TargetApi(8) -public class VoiceRecognizer { - - protected RecognizerApi recognizerApi; - protected VoiceInputAssistant voiceInputAssistant; - - public static boolean speechRecordingAvailable(Context context) { - return AndroidUtilities.getSdkVersion() >= 8 && - SpeechRecognizer.isRecognitionAvailable(context); - } - - /** - * Call this to see if your phone supports voiceinput in its current configuration. - * If this method returns false, it could also mean that Google Voicesearch is simply - * not installed. - * If this method returns true, internal use of it enables the registered microphone-button. - * - * @return whether this phone supports voiceinput - */ - public static boolean voiceInputAvailable(Context context) { - PackageManager pm = context.getPackageManager(); - List activities = pm.queryIntentActivities( - new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); - return (activities.size() != 0); - } - - private VoiceRecognizer() { - // - } - - private static VoiceRecognizer instance = null; - - public static VoiceRecognizer instantiateVoiceRecognizer(Activity activity, RecognizerApiListener listener) { - synchronized(VoiceRecognizer.class) { - if (instance == null) { - instance = new VoiceRecognizer(); - } - } - - if (speechRecordingAvailable(activity)) { - if (instance.recognizerApi != null) { - instance.recognizerApi.destroy(); - } - - instance.recognizerApi = new RecognizerApi(activity); - instance.recognizerApi.setListener(listener); - } else { - instance.voiceInputAssistant = new VoiceInputAssistant(activity); - } - return instance; - } - - public void startVoiceRecognition(Context context, Fragment fragment) { - if (speechRecordingAvailable(context) && recognizerApi != null) { - recognizerApi.start(Constants.PACKAGE, context.getString(R.string.audio_speak_now)); - } else { - int prompt = R.string.voice_create_prompt; - voiceInputAssistant.startVoiceRecognitionActivity(fragment, prompt); - } - } - - public void destroyRecognizerApi() { - if (instance != null && instance.recognizerApi != null) { - instance.recognizerApi.destroy(); - instance.recognizerApi = null; - } - } - - public void cancel() { - if (instance != null && instance.recognizerApi != null) { - instance.recognizerApi.cancel(); - } - } -} diff --git a/astrid/src/main/res/layout/control_set_notes.xml b/astrid/src/main/res/layout/control_set_notes.xml index 937075a93..aeb1170c4 100644 --- a/astrid/src/main/res/layout/control_set_notes.xml +++ b/astrid/src/main/res/layout/control_set_notes.xml @@ -22,19 +22,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> - - Вие имате $NUM съвпадения: $FILTER Резервни копия Напомняния за пропуснати повиквания, гласово въвеждане и разни настройки - Мрежова грешка! Разпознаване на говор изисква връзка с мрежата за да работи. - За съжаление, аз не можах да разбера това! Моля, опитайте отново. - Съжаляваме, възникна грешка при разпознаване на говор. Моля, опитайте отново. Прикачи файл Запис на бележка Сигурни ли сте? Не може да бъде отменено Записване на Аудио Спри Записването - Говорете Сега! Не е намерен плейър, който да работи с този тип аудио. Бихте ли искали да изтеглите аудио плейър от Android Market? Не е намерен аудио плейър Не е намерен PDF четец. Бихте ли искали да си изтеглите PDF четец от Android Market? @@ -344,7 +340,6 @@ тази задача е приключена на: Отделено време: Говорете за да създадете задача - Говорете за да зададете описание на задача Гласово въвеждане Гласови напомняния Tasks ще изтоваря имената на задачите по време на напомняния за задача diff --git a/astrid/src/main/res/values-cs/strings.xml b/astrid/src/main/res/values-cs/strings.xml index a2304c53a..6744435d4 100644 --- a/astrid/src/main/res/values-cs/strings.xml +++ b/astrid/src/main/res/values-cs/strings.xml @@ -327,15 +327,11 @@ Máš $NUM se značkou $FILTER Další nastavení Upomínky na zmeškané hovory, nastavení pro hlasové zadávání a další - Chyba sítě! Rozpoznávání řeči vyžaduje funkční síťové připojení. - Je mi líto, ale nerozuměla jsem! Zkuste to znovu. - Rozpoznávání řeči narazilo na problém. Zkuste to prosím znovu. Přiložit soubor Nahrát poznámku Skutečně? Nebude cesty zpět Nahrávám zvuk Ukončit záznam - Hovořte! Audio přehrávač nebyl nalezen Chybí prohlížeč PDF Chybí prohlížeč MS Office. Přejete si ho stáhnout z Android Marketu? @@ -487,7 +483,6 @@ skončil tento úkol: Strávený čas: Mluvte pro vytvoření úkolu - Namluvit popis úkolu Hlasové upomínky Úkoly Tmavé téma widgetu diff --git a/astrid/src/main/res/values-de/strings.xml b/astrid/src/main/res/values-de/strings.xml index 1f4ad8f31..391eca7cc 100644 --- a/astrid/src/main/res/values-de/strings.xml +++ b/astrid/src/main/res/values-de/strings.xml @@ -326,15 +326,11 @@ Du hast $NUM Übereinstimmungen mit: $FILTER Premium und erweiterte Einstellungen Verpasste Anruf Erinnerungen, Spracheingabe und Andere Einstellungen - Netzwerkfehler! Spracherkennung benötigt eine Internetverbindung um zu funktionieren. - Entschuldigung! Ich konnte das nicht verstehen! Bitte versuchen Sie es erneut. - Tut uns leid, die Spracherkennung konnte das nicht verarbeiten. Bitte versuchen Sie es erneut. Datei anhängen Notiz aufzeichnen Sind Sie sicher? Das kann nicht rückgängig gemacht werden Audio aufnehmen Aufnahme stoppen - Sprechen Sie jetzt! Dieser Dateityp kann nicht geöffnet werden. Möchten Sie einen Audio-Player von Google Play herunterladen? Es wurde kein Audio-Player gefunden Dieser Dateityp kann nicht geöffnet werden. Möchten Sie einen PDF-Reader von Google Play herunterladen? @@ -491,7 +487,6 @@ Bearbeitung abgebrochen: Benötigte Zeit: Sprechen Sie, um eine Aufgabe anzulegen - Sprechen Sie, um Aufgabennotizen zu setzen Spracheingabe aktivieren Sprach-Erinnerungen Tasks wird Aufgabennamen bei der Erinnerung aussprechen diff --git a/astrid/src/main/res/values-el/strings.xml b/astrid/src/main/res/values-el/strings.xml index a01545055..f503c7a00 100644 --- a/astrid/src/main/res/values-el/strings.xml +++ b/astrid/src/main/res/values-el/strings.xml @@ -253,8 +253,6 @@ Σφάλμα στον διαχειριστή επαφών της συσκευής σας. Παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά απο τις ρυθμίσεις του Google Tasks. Σφάλμα αυθεντικοποίησης στο παρασκήνιο. Παρακαλώ δοκιμάστε να συγχρονίσετε όσο τρέχει το Tasks. Προηγμένες ρυθμίσεις - Συγγνώμη δεν το κατάλαβα αυτό! Ξαναπροσπάθησε. - Συγγνώμη η αναγνώριση φωνής αντιμετώπισε σφάλμα. Παρακαλώ ξαναπροσπαθήστε. Προσθήκη αρχείου Καταγραφή σημείωσης Είστε σίγουρος; Δεν μπορεί να ακυρωθεί @@ -360,7 +358,6 @@ σταμάτησε να εκτελεί το καθήκον: Χρόνος που πέρασε Μιλήστε για να δημιουργήσετε καθήκον - Μιλήστε για να οριίσετε περιγραφή καθήκοντος Εισαγωγή φωνής Φωνητικές υπενθυμίσεις Καθήκοντα diff --git a/astrid/src/main/res/values-es/strings.xml b/astrid/src/main/res/values-es/strings.xml index da27fa961..512be8c1e 100644 --- a/astrid/src/main/res/values-es/strings.xml +++ b/astrid/src/main/res/values-es/strings.xml @@ -333,15 +333,11 @@ Tasks podría no avisarle cuanto venza una tarea.\n Tiene $NUM que coincide con: $FILTER Premium y configuraciones varias Recordatorios de llamadas perdidas, reconocimiento de voz y ajustes varios - ¡Error en la red! El reconocimiento de voz requiere una conexión de red para funcionar. - Lo siento. ¡No lo comprendo! Por favor, inténtalo de nuevo. - Lo siento. Ha habido un error en el reconocimiento de voz. Por favor, Inténtalo de nuevo. Adjuntar un archivo Grabar una nota Está seguro? No se puede deshacer Grabando Audio Detener grabación - Hable ahora! No se ha encontrado programa para reproducir ese tipo de audio. ¿Te gustaría descargar un reproductor de audio desde el Android Market? No se encontró reproductor de audio No se encontró lector de archivos PDF. ¿Desea descargar uno de Android Market? @@ -499,7 +495,6 @@ Tasks podría no avisarle cuanto venza una tarea.\n dejó de hacer esta tarea: Tiempo dedicado: Hable para crear una tarea - Hable para establecer notas de tarea Ingreso por voz Avisos de voz Tasks dirá los nombres de las tareas durante los avisos diff --git a/astrid/src/main/res/values-fr/strings.xml b/astrid/src/main/res/values-fr/strings.xml index 4cce95030..4a4c4c463 100644 --- a/astrid/src/main/res/values-fr/strings.xml +++ b/astrid/src/main/res/values-fr/strings.xml @@ -328,15 +328,11 @@ Vous avez $NUM correspondant(s) : $FILTER Premium et réglages divers Rappel des appels manqués, commande vocale et paramètres divers - Problème de connexion réseau. La reconaissance vocale demande une connexion internet pour fonctionner. - Excusez-moi, je n\'ais pas compris! Veuillez répeter. - Excusez-moi, la reconaissance vocale a rencontrer une erreur. Veuillez réessayer. Joindre un fichier Enregistrer un commentaire Ètes-vous certain? Cette opération est irréversible Enregistrement Audio Arrêter l\'enregistrement - Veuillez parler! Aucun lecteur supporte ce format audio. Voulez-vous télécharger un lecteur audio du Play Store? Aucun lecteur audio trouvé Aucun logiciel permettant de lire les fichiers PDF n\'a été trouvé. Souhaitez vous en télécharger un à partir de Android Market ? @@ -493,7 +489,6 @@ Cette tâche a été arretée : Temps passé : Parlez pour créer une nouvelle tâche - Parlez pour définir les notes de la tâche Entrée voix Rappels vocaux Tasks donnera le nom de la tâche diff --git a/astrid/src/main/res/values-it/strings.xml b/astrid/src/main/res/values-it/strings.xml index 9cc436050..a4e852ee7 100644 --- a/astrid/src/main/res/values-it/strings.xml +++ b/astrid/src/main/res/values-it/strings.xml @@ -300,15 +300,11 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat Hai $NUM corrispondenti: $FILTER Impostazioni Premium e varie Promemoria chiamate mancate, comandi vocali e impostazioni varie - Errore di rete! Il riconoscimento vocale richiede una connessione di rete per funzionare. - Mi dispiace, non riesco a capire! Si prega di riprovare. - Ci dispiace, si è verificato un errore nel riconoscimento vocale. Si prega di riprovare. Allega un file Registra una nota Se sicuro? Non può essere eseguito Registrazione Audio Fine Registrazione - Parla ora! Non è stato trovato nessun lettore per quel tipo di audio. Vuoi scaricarne uno da Android Market? Non è stato trovato nessun riproduttore audio Non è stato trovato nessun lettore di file PDF. Vuoi scaricare un lettore di file PDF da Google Play (Android Market)? @@ -443,7 +439,6 @@ Se visualizzi questo errore più volte, ti consigliamo di cancellare tutti i dat fine attività Tempo speso: Parla per creare un\'attività - Parla per aggiungere le note Voce Promemoria vocali Tasks pronuncerà il nome dell\'attività durante i promemoria diff --git a/astrid/src/main/res/values-iw/strings.xml b/astrid/src/main/res/values-iw/strings.xml index 4b453ab00..59658699b 100644 --- a/astrid/src/main/res/values-iw/strings.xml +++ b/astrid/src/main/res/values-iw/strings.xml @@ -333,15 +333,11 @@ יש לך $NUM המתאימים: $FILTER פרימיום והגדרות שונות תזכורת קולית הוחמצה, קלט קולי והגדרות כלליות - שגיאת חיבור! זיהוי דיבור דורש חיבור לאינטרנט. - סליחה, לא הבנתי! אנא נסה שוב. - סליחה, מזהה הדיבור נתקל בבעיה. אנא נסה שנית. צרף קובץ הקלד הערה בטוח? לא ניתן לבטל את הפעולה מקליטה שֵׁמַע הפסק הקלטה - דַּבֵּר כעת! לא מצאתי נגן לסוג זה של קובץ שֵׁמַע. הֲתִּרְצֶה להוריד נגן מחנות גוגל? לא נמצא נגן לקבצי שֵׁמַע לא מצאתי קורא קבצי PDF. הֲתִּרְצֶה להוריד קורא קבצי PDF מחנות היישומים? @@ -494,7 +490,6 @@ הפסק ביצוע של משימה זו: זמן שהושקע: דַּבֵּר כדי ליצור משימה - דַּבֵּר כדי לקבוע את ההערות למשימה קלט קולי תזכורות קוליות אסטריד תאמר את שם המשימה כחלק מהתזכורת diff --git a/astrid/src/main/res/values-ja/strings.xml b/astrid/src/main/res/values-ja/strings.xml index e7dcc8f16..2d646cb6c 100644 --- a/astrid/src/main/res/values-ja/strings.xml +++ b/astrid/src/main/res/values-ja/strings.xml @@ -335,15 +335,11 @@ $FILTER の検索結果: $NUM 件 拡張設定 応答しなかった呼び出しのリマインダー, 音声入力, およびその他の設定 - ネットワークエラー! 音声認識の動作はネットワーク接続が必要です - 申し訳ありません, 認識できませんでした! もう一度試してください. - 申し訳ありません, 音声認識でエラーが発生しました. もう一度試してください. ファイルを添付 注釈を記録 よろしいですか? 取り消しできません 音声を録音中 録音を停止 - 話してください! そのオーディオ形式を再生するプレイヤーがありません. Google Play からオーディオプレイヤーをダウンロードしますか? オーディオプレイヤーがありません PDF リーダーがありません. PDF リーダーを Google Play からダウンロードしますか? @@ -501,7 +497,6 @@ このタスクの実行を中止しました: 消費時間: 話してタスクを作成してください - 話してタスク概要を設定してください 音声入力 音声リマインダー Tasks はタスクリマインダーでタスク名を話します diff --git a/astrid/src/main/res/values-ko/strings.xml b/astrid/src/main/res/values-ko/strings.xml index 7eef67bbf..73c5562f1 100644 --- a/astrid/src/main/res/values-ko/strings.xml +++ b/astrid/src/main/res/values-ko/strings.xml @@ -339,15 +339,11 @@ $NUM 개의 일정이 일치합니다: $FILTER 프리미엄과 기타 설정 부재중 전화 알림, 음성 입력과 기타 설정 - 네트워크 에러! 음성인식이 동작하려면 네트워크 연결이 필요합니다. - 죄송하지만 알아듣지 못했습니다! 다시 말해 주세요. - 죄송하지만 음성 인식에 에러가 발생했습니다. 다시 시도해 주세요. 파일 첨부 노트 기록 정말입니까? 되돌릴 수 없습니다 오디오 녹음 중 녹음 중단 - 지금 말하세요! 이런 형식의 오디오를 다룰 수 있는 재생기가 없습니다. 안드로이드 마켓에서 다운로드할까요? 오디오 재생기 없음 PDF 리더가 없습니다. 안드로이드 마켓에서 PDF 리더를 다운로드할까요? @@ -503,7 +499,6 @@ 이 일정 중지: 소요 시간: 일정을 만들려면 말하세요 - 일정의 내용을 말하세요 음성 입력 음성 알림 일정 알림기간 동안 일정 이름을 직접 말해 줍니다 diff --git a/astrid/src/main/res/values-nb/strings.xml b/astrid/src/main/res/values-nb/strings.xml index 928842e38..1eac08a65 100644 --- a/astrid/src/main/res/values-nb/strings.xml +++ b/astrid/src/main/res/values-nb/strings.xml @@ -226,7 +226,6 @@ Tidtaker aktiv for %s! Oppgaver med tidtaker Snakk for å skape en oppgave - Snakk for å sette oppgavenotater Taleinndata Talepåminnelser Tasks vil lese opp oppgaver ved påminnelse diff --git a/astrid/src/main/res/values-nl/strings.xml b/astrid/src/main/res/values-nl/strings.xml index 899fb17a6..bed8c3442 100644 --- a/astrid/src/main/res/values-nl/strings.xml +++ b/astrid/src/main/res/values-nl/strings.xml @@ -332,15 +332,11 @@ Er zijn $NUM taken voor: $FILTER Premium en diverse instellingen Gemiste oproepen herinneringen, spraakinvoer en diverse instellingen - Netwerkfout! Spraakherkenning heeft een netwerkverbinding nodig. - Sorry, ik begrijp je niet! Probeer het opnieuw. - Sorry, spraakherkenning ondervond een fout. Graag opnieuw proberen. Een bestand bijvoegen Een notitie opnemen Weet je het zeker? Dit kan niet ongedaan gemaakt worden Bezig met opname Opname stoppen - Spreek nu! Geen mediaspeler gevonden die dit type audio-bestand ondersteunt. Wil je een mediaspeler downloaden via de Android Market? Geen mediaspeler gevonden Geen PDF-lezer gevonden. Wil je een PDF-lezer downloaden via de Android Market? @@ -497,7 +493,6 @@ taak gestopt: Gebruikte tijd: Spreek om taak te maken - Spreek notities van taak in Spraakinvoer Gesproken herinneringen Bij herinneringen zullen de taaknamen uitgesproken worden diff --git a/astrid/src/main/res/values-pl/strings.xml b/astrid/src/main/res/values-pl/strings.xml index d4988aa35..35fb8fd48 100644 --- a/astrid/src/main/res/values-pl/strings.xml +++ b/astrid/src/main/res/values-pl/strings.xml @@ -332,15 +332,11 @@ i odzyskanie zadań z kopi zapasowej (Settings->Sync and backup->Backup-&g Masz $NUM pasujących: $FILTER Ustawienia Premium i inne Przypomniania nieodebranych połączeń, polecenia głosowe i inne ustawienia - Błąd sieci! Rozpoznawanie mowy wymaga połączenia z siecią. - Przepraszam, nie zrozumiałem! Powtórz, proszę. - Przepraszamy, rozpoznawanie mowy napotkało na błąd. Proszę spróbować ponownie. Dołącz plik Nagraj notatkę Jesteś pewny? Tych zmian nie można odwrócić Nagrywanie dźwięku Zakończ nagrywanie - Mów! Nie znaleziono odtwarzacza, który byłby w stanie odtworzyć ten plik. Czy chciałbyś pobrać odtwarzacz z Android Market? Nie znaleziono odtwarzacza Nie znaleziono czytnika PDF. Czy chciałbyć pobrać czytnik z Android Market? @@ -498,7 +494,6 @@ i odzyskanie zadań z kopi zapasowej (Settings->Sync and backup->Backup-&g zakończono zadanie: Czas spędzony: Mów by utworzyć zadanie - Mów by ustawić notatkę zadania Polecenia głosowe Przypomnienia głosowe Tasks będzie mówił nazwę zadania podczas przypomnienia diff --git a/astrid/src/main/res/values-pt-rBR/strings.xml b/astrid/src/main/res/values-pt-rBR/strings.xml index 244d92d67..d967c347c 100644 --- a/astrid/src/main/res/values-pt-rBR/strings.xml +++ b/astrid/src/main/res/values-pt-rBR/strings.xml @@ -313,15 +313,11 @@ Você tem $NUM resultados: $FILTER Configurações de Premium e misc. Lembretes de chamadas perdidas, entrada de voz e configurações diversas - Erro de rede! Reconhecimento de fala requer uma conexão com a rede para funcionar. - Desculpe, eu não consegui entender! Por favor tente de novo. - Desculpa, reconhecimento de fala encontrou um erro. Por favor, tente novamente. Anexar um arquivo Gravar uma nota Você tem certeza? Não pode ser desfeito Gravando Áudio Parar Gravação - Fale Agora! \"Não foi encontrado um reprodutor que manipule este tipo de áudio. Você gostaria de baixar um reprodutor de áudio no Android Market?\" Não foi encontrado um reprodutor de áudio Nenhum leitor de PDF foi encontrado. Você gostaria de baixar um leitor de PDF no Android Market? @@ -465,7 +461,6 @@ parou a tarefa: Tempo gasto: Fale para criar uma tarefa - Fale para completar as notas da tarefa Entrada de voz Lembretes de voz Tasks irá falar o nome das tarefas durante os lembretes diff --git a/astrid/src/main/res/values-pt/strings.xml b/astrid/src/main/res/values-pt/strings.xml index 92482a07c..4245a9cf0 100644 --- a/astrid/src/main/res/values-pt/strings.xml +++ b/astrid/src/main/res/values-pt/strings.xml @@ -338,15 +338,11 @@ das tarefas através de um backup em Definições->Sincronização e backup-& Tem $NUM ocorrências para: $FILTER Definições avançadas Lembretes de chamadas, entrada por voz e outras definições - Erro de rede! O reconhecimento de voz requer uma ligação de rede ativa. - Não consegui perceber! Tente novamente. - O reconhecimento de voz detetou um erro. Tente novamente. Anexar um ficheiro Gravar uma nota Tem a certeza? A ação não pode ser anulada! Gravação áudio Parar gravação - Falar agora! Não foi encontrado um reprodutor para gerir este tipo de áudio. Gostaria de transferir um reprodutor na loja Google? Reprodutor áudio não encontrado Nenhum leitor PDF encontrado. Gostaria de transferir um leitor de PDF na loja Google? @@ -503,7 +499,6 @@ das tarefas através de um backup em Definições->Sincronização e backup-& parou de fazer esta tarefa: Tempo gasto: Falar para criar uma tarefa - Falar para definir a descrição Entrada por voz Lembretes de voz O Tasks irá reproduzir o nome da tarefa durante os lembretes diff --git a/astrid/src/main/res/values-ru/strings.xml b/astrid/src/main/res/values-ru/strings.xml index 7fe6d3d64..19b484b82 100644 --- a/astrid/src/main/res/values-ru/strings.xml +++ b/astrid/src/main/res/values-ru/strings.xml @@ -336,15 +336,11 @@ Число соответствий $FILTER: $NUM Премиум и другие настройки Напоминания о пропущенных звонках, голосовой ввод и другие настройки - Ошибка подключения! Для голосового распознавания требуется интернет соединение. - Извините, я не расслышал! Повторите, пожалуйста. - Извините, ошибка службы голосового распознавания. Попробуйте, еще раз. Прикрепить файл Записать заметку Вы уверены? Это не может быть отменено. Запись голоса. Остановить запись - Говорите! Не найден проигрыватель для этого типа аудио. Хотите скачать его с Google Plus? Не найдено проигрывателя. Не найдена программа для просмотра PDF файлов. Хотите скачать её с Play Market? @@ -502,7 +498,6 @@ зада завершилась: Времени потрачено: Говорите чтобы создать задачу - Произнесите заметки задачи Голосовой ввод Голосовые напоминания Tasks должен произносить название задач во время напоминаний diff --git a/astrid/src/main/res/values-sl-rSI/strings.xml b/astrid/src/main/res/values-sl-rSI/strings.xml index f0e196a17..341695b38 100644 --- a/astrid/src/main/res/values-sl-rSI/strings.xml +++ b/astrid/src/main/res/values-sl-rSI/strings.xml @@ -334,15 +334,11 @@ $NUM jih ustreza: $FILTER Napredne nastavitve Opomniki zgrešenih klicev, vnos glasu in razne nastavitve - Napaka na omrežju! Prepoznava govora za delovanje potrebuje omrežno povezavo. - Žal tega nisem razumel. Prosim poskusite ponovno. - Žal je pri prepoznavi govora prišlo do napake. Prosimo poskusite ponovno. Pripni datoteko Posnemi opombo Ste prepričani? Tega ni mogoče razveljaviti Snemam zvok Prekini snemanje - Začnite govoriti! Ni ustreznega predvajalnika. Želite naložiti predvajalnik zvoka z Android tržnice? Nisem našel predvajalnika zvoka Ne najdem PDF bralnika. Ga želite naložiti z Android tržnice? @@ -499,7 +495,6 @@ ta opravek končal: Porabljen čas: Glasovno ustvari opravek - Govorite za opis opravka Vnos glasu Glasovni opomniki Aplikacija Opravki bo med opominjanjem glede opravkov izgovarjala nazive opravkov diff --git a/astrid/src/main/res/values-sv/strings.xml b/astrid/src/main/res/values-sv/strings.xml index c4e16ee1e..496f9ce24 100644 --- a/astrid/src/main/res/values-sv/strings.xml +++ b/astrid/src/main/res/values-sv/strings.xml @@ -323,15 +323,11 @@ och återställer dina aktuella uppgifter från en backup Du har $NUM som matchar: $FILTER Premium och övriga inställningar Påminnelser för missade samtal, röstinmatning samt övriga inställningar - Nätverksfel! Taligenkänning kräver internetaccess för att fungera. - Ursäkta, jag förstod inte det där. Vänligen försök igen. - Taligenkänning misslyckades. Vänligen försök igen. Bifoga fil Spela in en anteckning Är du säker? Detta kan inte ångras Spelar in ljud Avsluta inspelning - Prata nu! Ingen spelare hittades för denna ljudtyp. Skulle du vilja ladda ned en ljudspelare från Google Play? Ingen ljudspelare hittades Ingen PDF-läsare hittades. Skulle du vilja ladda ned en från Google Play? @@ -485,7 +481,6 @@ och återställer dina aktuella uppgifter från en backup slutade arbeta med uppgiften: Nedlagt tid: Prata för att skapa uppgift - Prata för att sätta uppgiftens anteckningar Röstindata Röstpåminnelser Tasks läser upp uppgifterna vid påminnelse diff --git a/astrid/src/main/res/values-tr/strings.xml b/astrid/src/main/res/values-tr/strings.xml index 2f3b48608..846485d1b 100644 --- a/astrid/src/main/res/values-tr/strings.xml +++ b/astrid/src/main/res/values-tr/strings.xml @@ -300,15 +300,11 @@ $FILTER konumunda $NUM var Gelişmiş ayarlar Çağrı hatırlatıcılar, ses girdileri ve çeşitli ayarlar - Ağ hatası! Konuşmanın tanınması çalışması için bir ağ bağlantısına gerek duyar. - Üzgünüm, bunu anlayamadım! Lütfen yeniden deneyin. - Üzgünüm, konuşma tanınma işlevi hata verdi. Lütfen yeniden deneyin. Bir dosya ekle Bir not kaydet Emin misiniz? Geri döndürülemez Ses Kaydediliyor Kaydı Durdur - Şimdi Konuşun! Bu ses türünü çalan bir oynatıcı bulunamadı. Google Play\'den bir ses yürütücüsü indirmek iste misiniz? Ses oynatıcı bulunamadı PDF okuyucu bulunamadı. Google Play\'den bir PDF okuyucu indirmek iste misiniz? @@ -450,7 +446,6 @@ bu görevden vazgeç: Harcanan zaman: Yeni görev için konuş - Görev notları için konuş Ses Girişi Sesli Hatırlatmalar Tasks görev isimlerini görev hatırlatmaları sırasında söyleyecek diff --git a/astrid/src/main/res/values-uk/strings.xml b/astrid/src/main/res/values-uk/strings.xml index ec04d0e08..e27b03683 100644 --- a/astrid/src/main/res/values-uk/strings.xml +++ b/astrid/src/main/res/values-uk/strings.xml @@ -339,15 +339,11 @@ Число відповідностей $FILTER: $NUM Розширені налаштування Нагадування про пропущені дзвінки, голосове введення та інші установки - Помилка підключення! Для голосового розпізнавання потрібно інтернет з\'єднання. - Вибачте, я не розчув! Повторіть, будь ласка. - Вибачте, помилка служби голосового розпізнавання. Спробуйте, ще раз. Прикріпити файл Записати замітку Ви впевнені? Це не може бути скасовано. Запис аудіо Зупинити запис - Говоріть зараз! Не знайдене програвач для цього типу аудіо. Хочете завантажити його з Play Market? Не знайдено погравача Не знайдено програма для перегляду PDF файлів. Хочете завантажити її з Android Play Market? diff --git a/astrid/src/main/res/values-zh-rCN/strings.xml b/astrid/src/main/res/values-zh-rCN/strings.xml index 597b17e71..1f0559ef3 100644 --- a/astrid/src/main/res/values-zh-rCN/strings.xml +++ b/astrid/src/main/res/values-zh-rCN/strings.xml @@ -280,15 +280,11 @@ 您有 $NUM 符合: $FILTER 高级和其它设置 未接电话提醒,语音输入和其它设置 - 网络出错!语音识别需要网络连接才能运作。 - 对不起,我听不明白喔!请再说一次吧。 - 对不起,语音识别遇到出错。请重新再试。 附上一份文件 录制一条便笺 您确定吗?无法恢复的喔 正在录制音频 停止录制 - 现在请讲! 找不到播放器来处理这种音频类型。您想从安卓市场上下载一个音频播放器吗? 找不到音频播放器 找不到 PDF 阅读器。您想从安卓市场上下载一个PDF 阅读器吗? @@ -431,7 +427,6 @@ 已经停止了这项任务: 已经花费时间: 请说话以建立任务 - 请说话以设定任务备注 语音输入 语音提醒 Tasks在任务提醒时会以语音说出任务名称 diff --git a/astrid/src/main/res/values-zh-rTW/strings.xml b/astrid/src/main/res/values-zh-rTW/strings.xml index dea632631..2c3ba54c0 100644 --- a/astrid/src/main/res/values-zh-rTW/strings.xml +++ b/astrid/src/main/res/values-zh-rTW/strings.xml @@ -317,15 +317,11 @@ 您有 $NUM 符合: $FILTER 高級和其它設置 未接電話提醒,語音輸入和其它設置 - 網絡出錯!語音識別需要網絡連接才能運作。 - 對不起,我聽不明白喔!請再說一次吧。 - 對不起,語音識別遇到出錯。請重新再試。 附上一份文件 錄製一條便箋 您確定嗎?無法恢復的喔 正在錄製音頻 停止錄製 - 現在請講! 找不到播放器來處理這種音頻類型。您想從安卓市場上下載一個音頻播放器嗎? 找不到音頻播放器 找不到PDF 閱讀器。您想從安卓市場上下載一個PDF 閱讀器嗎? @@ -473,7 +469,6 @@ 已經停止了這項任務工作: 已經花費時間: 請說話以建立工作 - 請說話以設定工作備註 語音輸入 語音提醒 Tasks在工作提醒時會以語音說出工作名稱 diff --git a/astrid/src/main/res/values/strings-premium.xml b/astrid/src/main/res/values/strings-premium.xml index 50e9a882f..24c787f92 100644 --- a/astrid/src/main/res/values/strings-premium.xml +++ b/astrid/src/main/res/values/strings-premium.xml @@ -1,17 +1,12 @@ - Network error! Speech recognition requires a network connection to work. - Sorry, I couldn\'t understand that! Please try again. - Sorry, speech recognition encountered an error. Please try again. - Attach a file Record a note Are you sure? Cannot be undone Recording Audio Stop Recording - Speak Now! No player found to handle that audio type. Would you like to download an audio player from the Android Market? No audio player found diff --git a/astrid/src/main/res/values/strings-voice.xml b/astrid/src/main/res/values/strings-voice.xml index bd7bf4360..a7500fa46 100644 --- a/astrid/src/main/res/values/strings-voice.xml +++ b/astrid/src/main/res/values/strings-voice.xml @@ -3,8 +3,7 @@ Speak to create a task - Speak to set task description - + Voice input Voice reminders