Supposedly this is best practice (a bit doubtful about
that) but it is a brute-force approach to try fixing
the ClassCastException issues.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hughes.android.dictionary"
android:installLocation="auto"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hughes.android.dictionary"
android:installLocation="auto"
- android:versionCode="89"
- android:versionName="5.3.6" >
+ android:versionCode="90"
+ android:versionName="5.3.7" >
<uses-sdk
android:minSdkVersion="10"
<uses-sdk
android:minSdkVersion="10"
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
- android:name=".DictionaryApplication"
android:allowBackup="true"
android:resizeableActivity="true"
android:icon="@drawable/icon"
android:allowBackup="true"
android:resizeableActivity="true"
android:icon="@drawable/icon"
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
- setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ setTheme(DictionaryApplication.INSTANCE.getSelectedTheme().themeId);
super.onCreate(savedInstanceState);
setContentView(R.layout.about_activity);
super.onCreate(savedInstanceState);
setContentView(R.layout.about_activity);
@Override
public void onCreate(Bundle savedInstanceState) {
@Override
public void onCreate(Bundle savedInstanceState) {
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ application = DictionaryApplication.INSTANCE;
// This needs to be before super.onCreate, otherwise ActionbarSherlock
// doesn't makes the background of the actionbar white when you're
// in the dark theme.
// This needs to be before super.onCreate, otherwise ActionbarSherlock
// doesn't makes the background of the actionbar white when you're
// in the dark theme.
- setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
+ setTheme(application.getSelectedTheme().themeId);
Log.d(LOG, "onCreate:" + this);
super.onCreate(savedInstanceState);
Log.d(LOG, "onCreate:" + this);
super.onCreate(savedInstanceState);
setContentView(R.layout.dictionary_activity);
setContentView(R.layout.dictionary_activity);
- application = (DictionaryApplication) getApplication();
theme = application.getSelectedTheme();
textColorFg = getResources().getColor(theme.tokenRowFgColor);
theme = application.getSelectedTheme();
textColorFg = getResources().getColor(theme.tokenRowFgColor);
import java.util.Locale;
import java.util.Map;
import java.util.Locale;
import java.util.Map;
-public class DictionaryApplication extends Application {
+public enum DictionaryApplication {
+ INSTANCE;
+
+ private Context appContext;
static final String LOG = "QuickDicApp";
static final String LOG = "QuickDicApp";
- @Override
- public void onCreate() {
- super.onCreate();
+ public void init(Context c) {
+ if (appContext != null) {
+ assert c == appContext;
+ return;
+ }
+ appContext = c;
Log.d("QuickDic", "Application: onCreate");
TransliteratorManager.init(null, threadBackground);
Log.d("QuickDic", "Application: onCreate");
TransliteratorManager.init(null, threadBackground);
- staticInit(getApplicationContext());
+ staticInit(appContext);
languageButtonPixels = (int) TypedValue.applyDimension(
languageButtonPixels = (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics());
+ TypedValue.COMPLEX_UNIT_DIP, 60, appContext.getResources().getDisplayMetrics());
// Load the dictionaries we know about.
// Load the dictionaries we know about.
- dictionaryConfig = PersistentObjectCache.init(getApplicationContext()).read(
+ dictionaryConfig = PersistentObjectCache.init(appContext).read(
C.DICTIONARY_CONFIGS, DictionaryConfig.class);
if (dictionaryConfig == null) {
dictionaryConfig = new DictionaryConfig();
C.DICTIONARY_CONFIGS, DictionaryConfig.class);
if (dictionaryConfig == null) {
dictionaryConfig = new DictionaryConfig();
- setTheme(getSelectedTheme().themeId);
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ appContext.setTheme(getSelectedTheme().themeId);
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
prefs.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Log.d("QuickDic", "prefs changed: " + key);
prefs.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Log.d("QuickDic", "prefs changed: " + key);
- if (key.equals(getString(R.string.themeKey))) {
- setTheme(getSelectedTheme().themeId);
+ if (key.equals(appContext.getString(R.string.themeKey))) {
+ appContext.setTheme(getSelectedTheme().themeId);
- public void onCreateGlobalOptionsMenu(
+ public static void onCreateGlobalOptionsMenu(
final Context context, final Menu menu) {
final Context context, final Menu menu) {
- final MenuItem about = menu.add(getString(R.string.about));
+ final Context c = context.getApplicationContext();
+ final MenuItem about = menu.add(c.getString(R.string.about));
MenuItemCompat.setShowAsAction(about, MenuItem.SHOW_AS_ACTION_NEVER);
about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
MenuItemCompat.setShowAsAction(about, MenuItem.SHOW_AS_ACTION_NEVER);
about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
- final Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
+ final Intent intent = new Intent(c, AboutActivity.class);
context.startActivity(intent);
return false;
}
});
context.startActivity(intent);
return false;
}
});
- final MenuItem help = menu.add(getString(R.string.help));
+ final MenuItem help = menu.add(c.getString(R.string.help));
MenuItemCompat.setShowAsAction(help, MenuItem.SHOW_AS_ACTION_NEVER);
help.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
MenuItemCompat.setShowAsAction(help, MenuItem.SHOW_AS_ACTION_NEVER);
help.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
- context.startActivity(HtmlDisplayActivity.getHelpLaunchIntent(getApplicationContext()));
+ context.startActivity(HtmlDisplayActivity.getHelpLaunchIntent(c));
- final MenuItem preferences = menu.add(getString(R.string.settings));
+ final MenuItem preferences = menu.add(c.getString(R.string.settings));
MenuItemCompat.setShowAsAction(preferences, MenuItem.SHOW_AS_ACTION_NEVER);
preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
PreferenceActivity.prefsMightHaveChanged = true;
MenuItemCompat.setShowAsAction(preferences, MenuItem.SHOW_AS_ACTION_NEVER);
preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
PreferenceActivity.prefsMightHaveChanged = true;
- final Intent intent = new Intent(getApplicationContext(), PreferenceActivity.class);
+ final Intent intent = new Intent(c, PreferenceActivity.class);
context.startActivity(intent);
return false;
}
});
context.startActivity(intent);
return false;
}
});
- final MenuItem reportIssue = menu.add(getString(R.string.reportIssue));
+ final MenuItem reportIssue = menu.add(c.getString(R.string.reportIssue));
MenuItemCompat.setShowAsAction(reportIssue, MenuItem.SHOW_AS_ACTION_NEVER);
reportIssue.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
MenuItemCompat.setShowAsAction(reportIssue, MenuItem.SHOW_AS_ACTION_NEVER);
reportIssue.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
- efd = getApplicationContext().getExternalFilesDir(null);
+ efd = appContext.getExternalFilesDir(null);
} catch (Exception e) {
}
if (efd != null) {
efd.mkdirs();
if (!dictDir.isDirectory() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
} catch (Exception e) {
}
if (efd != null) {
efd.mkdirs();
if (!dictDir.isDirectory() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- getApplicationContext().getExternalFilesDirs(null);
+ appContext.getExternalFilesDirs(null);
}
if (efd.isDirectory() && efd.canWrite() && checkFileCreate(efd)) {
return efd.getAbsolutePath();
}
}
if (!dictDir.isDirectory() && !dictDir.mkdirs()) {
}
if (efd.isDirectory() && efd.canWrite() && checkFileCreate(efd)) {
return efd.getAbsolutePath();
}
}
if (!dictDir.isDirectory() && !dictDir.mkdirs()) {
- return getApplicationContext().getFilesDir().getAbsolutePath();
+ return appContext.getFilesDir().getAbsolutePath();
public synchronized File getDictDir() {
// This metaphor doesn't work, because we've already reset
// prefsMightHaveChanged.
public synchronized File getDictDir() {
// This metaphor doesn't work, because we've already reset
// prefsMightHaveChanged.
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- String dir = prefs.getString(getString(R.string.quickdicDirectoryKey), "");
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
+ String dir = prefs.getString(appContext.getString(R.string.quickdicDirectoryKey), "");
if (dir.isEmpty()) {
dir = selectDefaultDir();
}
dictDir = new File(dir);
dictDir.mkdirs();
if (!dictDir.isDirectory() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (dir.isEmpty()) {
dir = selectDefaultDir();
}
dictDir = new File(dir);
dictDir.mkdirs();
if (!dictDir.isDirectory() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- getApplicationContext().getExternalFilesDirs(null);
+ appContext.getExternalFilesDirs(null);
}
public File getWordListFile() {
}
public File getWordListFile() {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- String file = prefs.getString(getString(R.string.wordListFileKey), "");
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
+ String file = prefs.getString(appContext.getString(R.string.wordListFileKey), "");
if (file.isEmpty()) {
return new File(getDictDir(), "wordList.txt");
}
if (file.isEmpty()) {
return new File(getDictDir(), "wordList.txt");
}
}
public Theme getSelectedTheme() {
}
public Theme getSelectedTheme() {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- final String theme = prefs.getString(getString(R.string.themeKey), "themeLight");
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
+ final String theme = prefs.getString(appContext.getString(R.string.themeKey), "themeLight");
if (theme.equals("themeLight")) {
return Theme.LIGHT;
} else {
if (theme.equals("themeLight")) {
return Theme.LIGHT;
} else {
defaultLangName = null;
}
if (defaultLangName == null) {
defaultLangName = null;
}
if (defaultLangName == null) {
- defaultLangName = IsoUtils.INSTANCE.isoCodeToLocalizedLanguageName(getApplicationContext(), defaultLangISO2);
+ defaultLangName = IsoUtils.INSTANCE.isoCodeToLocalizedLanguageName(appContext, defaultLangISO2);
}
String name = fileToNameCache.get(uncompressedFilename);
}
String name = fileToNameCache.get(uncompressedFilename);
nameBuilder.append("-");
}
nameBuilder
nameBuilder.append("-");
}
nameBuilder
- .append(IsoUtils.INSTANCE.isoCodeToLocalizedLanguageName(getApplicationContext(), sortedIndexInfos.get(i).shortName));
+ .append(IsoUtils.INSTANCE.isoCodeToLocalizedLanguageName(appContext, sortedIndexInfos.get(i).shortName));
}
name = nameBuilder.toString();
} else {
}
name = nameBuilder.toString();
} else {
@Override
public void onCreate(Bundle savedInstanceState) {
@Override
public void onCreate(Bundle savedInstanceState) {
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ application = DictionaryApplication.INSTANCE;
// This must be first, otherwise the action bar doesn't get
// styled properly.
// This must be first, otherwise the action bar doesn't get
// styled properly.
- // Unfortunately on some (Samsung?) Android versions this
- // results in a ClassCastException...
- boolean themeSet = true;
- try {
- setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
- } catch (ClassCastException e) {
- themeSet = false;
- }
+ setTheme(application.getSelectedTheme().themeId);
super.onCreate(savedInstanceState);
Log.d(LOG, "onCreate:" + this);
super.onCreate(savedInstanceState);
Log.d(LOG, "onCreate:" + this);
- application = (DictionaryApplication) getApplication();
- if (!themeSet)
- setTheme(application.getSelectedTheme().themeId);
+ setTheme(application.getSelectedTheme().themeId);
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
- setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ setTheme(DictionaryApplication.INSTANCE.getSelectedTheme().themeId);
super.onCreate(savedInstanceState);
setContentView(R.layout.html_display_activity);
super.onCreate(savedInstanceState);
setContentView(R.layout.html_display_activity);
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
- final DictionaryApplication application = (DictionaryApplication) getApplication();
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ final DictionaryApplication application = DictionaryApplication.INSTANCE;
setTheme(application.getSelectedTheme().themeId);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
setTheme(application.getSelectedTheme().themeId);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
@Override
public void onSharedPreferenceChanged(SharedPreferences p, String v) {
@Override
public void onSharedPreferenceChanged(SharedPreferences p, String v) {
- final DictionaryApplication application = (DictionaryApplication)getApplication();
+ DictionaryApplication.INSTANCE.init(getApplicationContext());
+ final DictionaryApplication application = DictionaryApplication.INSTANCE;
File dictDir = application.getDictDir();
if (!dictDir.isDirectory() || !dictDir.canWrite() ||
!application.checkFileCreate(dictDir)) {
File dictDir = application.getDictDir();
if (!dictDir.isDirectory() || !dictDir.canWrite() ||
!application.checkFileCreate(dictDir)) {