/* * Copyright (C) 2008 ZXing authors * Copyright 2011 Robert Theis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package edu.sfsu.cs.orange.ocr; import com.v.mypersonaltrainer.R; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import edu.sfsu.cs.orange.ocr.language.LanguageCodeHelper; import edu.sfsu.cs.orange.ocr.language.TranslatorBing; import edu.sfsu.cs.orange.ocr.language.TranslatorGoogle; /** * Class to handle preferences that are saved across sessions of the app. Shows * a hierarchy of preferences to the user, organized into sections. These * preferences are displayed in the options menu that is shown when the user * presses the MENU button. * * The code for this class was adapted from the ZXing project: http://code.google.com/p/zxing */ public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { // Preference keys not carried over from ZXing project public static final String KEY_SOURCE_LANGUAGE_PREFERENCE = "sourceLanguageCodeOcrPref"; public static final String KEY_TARGET_LANGUAGE_PREFERENCE = "targetLanguageCodeTranslationPref"; public static final String KEY_TOGGLE_TRANSLATION = "preference_translation_toggle_translation"; public static final String KEY_CONTINUOUS_PREVIEW = "preference_capture_continuous"; public static final String KEY_PAGE_SEGMENTATION_MODE = "preference_page_segmentation_mode"; public static final String KEY_OCR_ENGINE_MODE = "preference_ocr_engine_mode"; public static final String KEY_CHARACTER_BLACKLIST = "preference_character_blacklist"; public static final String KEY_CHARACTER_WHITELIST = "preference_character_whitelist"; public static final String KEY_TOGGLE_LIGHT = "preference_toggle_light"; public static final String KEY_TRANSLATOR = "preference_translator"; // Preference keys carried over from ZXing project public static final String KEY_AUTO_FOCUS = "preferences_auto_focus"; public static final String KEY_HELP_VERSION_SHOWN = "preferences_help_version_shown"; public static final String KEY_NOT_OUR_RESULTS_SHOWN = "preferences_not_our_results_shown"; public static final String KEY_REVERSE_IMAGE = "preferences_reverse_image"; public static final String KEY_PLAY_BEEP = "preferences_play_beep"; public static final String KEY_VIBRATE = "preferences_vibrate"; public static final String TRANSLATOR_BING = "Bing Translator"; public static final String TRANSLATOR_GOOGLE = "Google Translate"; //private CheckBoxPreference checkBoxPreferenceContinuousPreview; private ListPreference listPreferenceSourceLanguage; //private CheckBoxPreference checkBoxTranslate; private ListPreference listPreferenceTargetLanguage; private ListPreference listPreferenceTranslator; private ListPreference listPreferenceOcrEngineMode; //private CheckBoxPreference checkBoxBeep; private EditTextPreference editTextPreferenceCharacterBlacklist; private EditTextPreference editTextPreferenceCharacterWhitelist; private ListPreference listPreferencePageSegmentationMode; //private CheckBoxPreference checkBoxReversedImage; private static SharedPreferences sharedPreferences; /** * Set the default preference values. * * @param Bundle * savedInstanceState the current Activity's state, as passed by * Android */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); //checkBoxPreferenceContinuousPreview = (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_CONTINUOUS_PREVIEW); listPreferenceSourceLanguage = (ListPreference) getPreferenceScreen().findPreference(KEY_SOURCE_LANGUAGE_PREFERENCE); //checkBoxTranslate = (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_TOGGLE_TRANSLATION); listPreferenceTargetLanguage = (ListPreference) getPreferenceScreen().findPreference(KEY_TARGET_LANGUAGE_PREFERENCE); listPreferenceTranslator = (ListPreference) getPreferenceScreen().findPreference(KEY_TRANSLATOR); listPreferenceOcrEngineMode = (ListPreference) getPreferenceScreen().findPreference(KEY_OCR_ENGINE_MODE); //checkBoxBeep = (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_PLAY_BEEP); editTextPreferenceCharacterBlacklist = (EditTextPreference) getPreferenceScreen().findPreference(KEY_CHARACTER_BLACKLIST); editTextPreferenceCharacterWhitelist = (EditTextPreference) getPreferenceScreen().findPreference(KEY_CHARACTER_WHITELIST); listPreferencePageSegmentationMode = (ListPreference) getPreferenceScreen().findPreference(KEY_PAGE_SEGMENTATION_MODE); //checkBoxReversedImage = (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_REVERSE_IMAGE); // Create the entries/entryvalues for the translation target language list. initTranslationTargetList(); } /** * Interface definition for a callback to be invoked when a shared * preference is changed. Sets summary text for the app's preferences. Summary text values show the * current settings for the values. * * @param sharedPreferences * the Android.content.SharedPreferences that received the change * @param key * the key of the preference that was changed, added, or removed */ @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // Update preference summary values to show current preferences if (key.equals(KEY_TRANSLATOR)) { listPreferenceTranslator.setSummary(sharedPreferences.getString(key, CaptureActivity.DEFAULT_TRANSLATOR)); } else if(key.equals(KEY_SOURCE_LANGUAGE_PREFERENCE)) { // Set the summary text for the source language name listPreferenceSourceLanguage.setSummary(LanguageCodeHelper.getOcrLanguageName(getBaseContext(), sharedPreferences.getString(key, CaptureActivity.DEFAULT_SOURCE_LANGUAGE_CODE))); // Retrieve the character blacklist/whitelist for the new language String blacklist = OcrCharacterHelper.getBlacklist(sharedPreferences, listPreferenceSourceLanguage.getValue()); String whitelist = OcrCharacterHelper.getWhitelist(sharedPreferences, listPreferenceSourceLanguage.getValue()); // Save the character blacklist/whitelist to preferences sharedPreferences.edit().putString(KEY_CHARACTER_BLACKLIST, blacklist).commit(); sharedPreferences.edit().putString(KEY_CHARACTER_WHITELIST, whitelist).commit(); // Set the blacklist/whitelist summary text editTextPreferenceCharacterBlacklist.setSummary(blacklist); editTextPreferenceCharacterWhitelist.setSummary(whitelist); } else if (key.equals(KEY_TARGET_LANGUAGE_PREFERENCE)) { listPreferenceTargetLanguage.setSummary(LanguageCodeHelper.getTranslationLanguageName(this, sharedPreferences.getString(key, CaptureActivity.DEFAULT_TARGET_LANGUAGE_CODE))); } else if (key.equals(KEY_PAGE_SEGMENTATION_MODE)) { listPreferencePageSegmentationMode.setSummary(sharedPreferences.getString(key, CaptureActivity.DEFAULT_PAGE_SEGMENTATION_MODE)); } else if (key.equals(KEY_OCR_ENGINE_MODE)) { listPreferenceOcrEngineMode.setSummary(sharedPreferences.getString(key, CaptureActivity.DEFAULT_OCR_ENGINE_MODE)); } else if (key.equals(KEY_CHARACTER_BLACKLIST)) { // Save a separate, language-specific character blacklist for this language OcrCharacterHelper.setBlacklist(sharedPreferences, listPreferenceSourceLanguage.getValue(), sharedPreferences.getString(key, OcrCharacterHelper.getDefaultBlacklist(listPreferenceSourceLanguage.getValue()))); // Set the summary text editTextPreferenceCharacterBlacklist.setSummary(sharedPreferences.getString(key, OcrCharacterHelper.getDefaultBlacklist(listPreferenceSourceLanguage.getValue()))); } else if (key.equals(KEY_CHARACTER_WHITELIST)) { // Save a separate, language-specific character blacklist for this language OcrCharacterHelper.setWhitelist(sharedPreferences, listPreferenceSourceLanguage.getValue(), sharedPreferences.getString(key, OcrCharacterHelper.getDefaultWhitelist(listPreferenceSourceLanguage.getValue()))); // Set the summary text editTextPreferenceCharacterWhitelist.setSummary(sharedPreferences.getString(key, OcrCharacterHelper.getDefaultWhitelist(listPreferenceSourceLanguage.getValue()))); } // Update the languages available for translation based on the current translator selected. if (key.equals(KEY_TRANSLATOR)) { initTranslationTargetList(); } } /** * Sets the list of available languages and the current target language for translation. Called * when the key for the current translator is changed. */ void initTranslationTargetList() { // Set the preference for the target language code, in case we've just switched from Google // to Bing, or Bing to Google. String currentLanguageCode = sharedPreferences.getString(KEY_TARGET_LANGUAGE_PREFERENCE, CaptureActivity.DEFAULT_TARGET_LANGUAGE_CODE); // Get the name of our language String currentLanguage = LanguageCodeHelper.getTranslationLanguageName(getBaseContext(), currentLanguageCode); String[] translators = getResources().getStringArray(R.array.translators); String translator = sharedPreferences.getString(KEY_TRANSLATOR, CaptureActivity.DEFAULT_TRANSLATOR); String newLanguageCode = ""; if (translator.equals(translators[0])) { // Bing // Update the list of available languages for the currently-chosen translation API. listPreferenceTargetLanguage.setEntries(R.array.translationtargetlanguagenames_microsoft); listPreferenceTargetLanguage.setEntryValues(R.array.translationtargetiso6391_microsoft); // Get the corresponding code for our language name newLanguageCode = TranslatorBing.toLanguage(currentLanguage); } else if (translator.equals(translators[1])) { // Google // Update the list of available languages for the currently-chosen translation API. listPreferenceTargetLanguage.setEntries(R.array.translationtargetlanguagenames_google); listPreferenceTargetLanguage.setEntryValues(R.array.translationtargetiso6391_google); // Get the corresponding code for our language name newLanguageCode = TranslatorGoogle.toLanguage(currentLanguage); } // Store the code as the target language preference String newLanguageName = LanguageCodeHelper.getTranslationLanguageName(getBaseContext(), newLanguageCode); listPreferenceTargetLanguage.setValue(newLanguageName); // Set the radio button in the list sharedPreferences.edit().putString(PreferencesActivity.KEY_TARGET_LANGUAGE_PREFERENCE, newLanguageCode).commit(); listPreferenceTargetLanguage.setSummary(newLanguageName); } /** * Sets up initial preference summary text * values and registers the OnSharedPreferenceChangeListener. */ @Override protected void onResume() { super.onResume(); // Set up the initial summary values listPreferenceTranslator.setSummary(sharedPreferences.getString(KEY_TRANSLATOR, CaptureActivity.DEFAULT_TRANSLATOR)); listPreferenceSourceLanguage.setSummary(LanguageCodeHelper.getOcrLanguageName(getBaseContext(), sharedPreferences.getString(KEY_SOURCE_LANGUAGE_PREFERENCE, CaptureActivity.DEFAULT_SOURCE_LANGUAGE_CODE))); listPreferenceTargetLanguage.setSummary(LanguageCodeHelper.getTranslationLanguageName(getBaseContext(), sharedPreferences.getString(KEY_TARGET_LANGUAGE_PREFERENCE, CaptureActivity.DEFAULT_TARGET_LANGUAGE_CODE))); listPreferencePageSegmentationMode.setSummary(sharedPreferences.getString(KEY_PAGE_SEGMENTATION_MODE, CaptureActivity.DEFAULT_PAGE_SEGMENTATION_MODE)); listPreferenceOcrEngineMode.setSummary(sharedPreferences.getString(KEY_OCR_ENGINE_MODE, CaptureActivity.DEFAULT_OCR_ENGINE_MODE)); editTextPreferenceCharacterBlacklist.setSummary(sharedPreferences.getString(KEY_CHARACTER_BLACKLIST, OcrCharacterHelper.getDefaultBlacklist(listPreferenceSourceLanguage.getValue()))); editTextPreferenceCharacterWhitelist.setSummary(sharedPreferences.getString(KEY_CHARACTER_WHITELIST, OcrCharacterHelper.getDefaultWhitelist(listPreferenceSourceLanguage.getValue()))); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } /** * Called when Activity is about to lose focus. Unregisters the * OnSharedPreferenceChangeListener. */ @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } }