/ocr/ocrservice/src/com/googlecode/eyesfree/ocr/intent/PrefsActivity.java

http://eyes-free.googlecode.com/ · Java · 198 lines · 129 code · 44 blank · 25 comment · 11 complexity · 869c0eeda8b3dfbd83c6cc91b0eaa5d6 MD5 · raw file

  1. /*
  2. * Copyright (C) 2011 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.googlecode.eyesfree.ocr.intent;
  17. import android.content.BroadcastReceiver;
  18. import android.content.Context;
  19. import android.content.Intent;
  20. import android.content.IntentFilter;
  21. import android.os.Bundle;
  22. import android.os.Environment;
  23. import android.preference.ListPreference;
  24. import android.preference.Preference;
  25. import android.preference.Preference.OnPreferenceClickListener;
  26. import android.preference.PreferenceActivity;
  27. import android.util.Log;
  28. import com.googlecode.eyesfree.ocr.R;
  29. import com.googlecode.eyesfree.ocr.client.Intents;
  30. import com.googlecode.eyesfree.ocr.client.Language;
  31. import com.googlecode.eyesfree.ocr.client.Ocr;
  32. import java.util.List;
  33. /**
  34. * Provides access to global OCR preferences.
  35. *
  36. * @author alanv@google.com (Alan Viverette)
  37. */
  38. public class PrefsActivity extends PreferenceActivity {
  39. private static final String TAG = "PrefsActivity";
  40. private Preference mManagePref;
  41. private ListPreference mLangPref;
  42. private IntentFilter mFilter;
  43. private String mStrManage;
  44. private String mStrLang;
  45. private Ocr mOcr;
  46. private boolean mInitialized;
  47. @Override
  48. protected void onCreate(Bundle savedInstanceState) {
  49. super.onCreate(savedInstanceState);
  50. addPreferencesFromResource(R.xml.prefs);
  51. mStrManage = getString(R.string.manage_pref);
  52. mStrLang = getString(R.string.lang_pref);
  53. // "Test Activities" is disabled for now...
  54. // mStrTest = getString(R.string.test_pref);
  55. // findPreference(mStrTest).setOnPreferenceClickListener(onPreferenceClick);
  56. mManagePref = findPreference(mStrManage);
  57. mManagePref.setOnPreferenceClickListener(onPreferenceClick);
  58. mManagePref.setEnabled(false);
  59. mLangPref = (ListPreference) findPreference(mStrLang);
  60. mLangPref.setEnabled(false);
  61. mFilter = new IntentFilter();
  62. mFilter.addAction(Intents.Actions.LANGUAGES_UPDATED);
  63. Ocr.InitCallback initCallback = new Ocr.InitCallback() {
  64. @Override
  65. public void onInitialized(int status) {
  66. updateLanguages();
  67. mInitialized = true;
  68. }
  69. };
  70. mInitialized = false;
  71. mOcr = new Ocr(this, initCallback);
  72. }
  73. @Override
  74. protected void onResume() {
  75. super.onResume();
  76. registerReceiver(broadcastReceiver, mFilter);
  77. if (mInitialized) {
  78. updateLanguages();
  79. }
  80. }
  81. @Override
  82. protected void onPause() {
  83. unregisterReceiver(broadcastReceiver);
  84. super.onPause();
  85. }
  86. @Override
  87. protected void onDestroy() {
  88. mOcr.release();
  89. super.onDestroy();
  90. }
  91. @Override
  92. public void onWindowFocusChanged(boolean hasFocus) {
  93. super.onWindowFocusChanged(hasFocus);
  94. if (hasFocus) {
  95. updateLangPrefSummary();
  96. }
  97. }
  98. private void updateLangPrefSummary() {
  99. final String defaultLanguage = mLangPref.getValue();
  100. if (defaultLanguage != null) {
  101. mLangPref.setSummary(getString(R.string.lang_pref_summary, defaultLanguage));
  102. }
  103. }
  104. private void updateLanguages() {
  105. // Abort if the SD card isn't inserted
  106. if (!Environment.getExternalStorageDirectory().canRead()) {
  107. Log.e(TAG, "Missing SD card");
  108. mLangPref.setEnabled(false);
  109. mManagePref.setEnabled(false);
  110. return;
  111. }
  112. List<Language> available = mOcr.getAvailableLanguages();
  113. // Enable language management and abort if we're missing languages
  114. if (available.isEmpty()) {
  115. Log.e(TAG, "No languages installed");
  116. mLangPref.setEnabled(false);
  117. mManagePref.setEnabled(true);
  118. return;
  119. }
  120. String[] entries = new String[available.size()];
  121. String[] values = new String[available.size()];
  122. for (int i = 0; i < available.size(); i++) {
  123. Language lang = available.get(i);
  124. values[i] = lang.iso_639_2;
  125. entries[i] = lang.english;
  126. }
  127. mLangPref.setEntries(entries);
  128. mLangPref.setEntryValues(values);
  129. mLangPref.setEnabled(true);
  130. mManagePref.setEnabled(true);
  131. }
  132. private final OnPreferenceClickListener onPreferenceClick = new OnPreferenceClickListener() {
  133. @Override
  134. public boolean onPreferenceClick(Preference preference) {
  135. String key = preference.getKey();
  136. Intent intent;
  137. if (mStrManage.equals(key)) {
  138. intent = new Intent(Intents.Languages.ACTION);
  139. } else {
  140. return false;
  141. }
  142. startActivity(intent);
  143. return true;
  144. }
  145. };
  146. private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
  147. @Override
  148. public void onReceive(Context context, Intent intent) {
  149. if (mInitialized && intent.getAction().equals(Intents.Actions.LANGUAGES_UPDATED)) {
  150. updateLanguages();
  151. }
  152. }
  153. };
  154. }