private boolean mHasSubscriptions;
private int mNextFreeMessageIndex = 1;
private static final Map<String, ISO639_3.LanguageCode> loadAllowedLanguages() {
final ISO639_3 iso639_3 = new ISO639_3();
// Get all real (non-symbolic) and living languages
final HashMap<String, ISO639_3.LanguageCode> languages = new HashMap<String, ISO639_3.LanguageCode>(
iso639_3.getLanguagesByScopeAndType(ISO639_3.LanguageCode.Scope.Individual, ISO639_3.LanguageCode.Type.Living)
); // Convert from Hashtable to HashMap, we do not need synchronization.
// Add the special code for multiple languages
final ISO639_3.LanguageCode multilingual = iso639_3.getMultilingualCode();
languages.put(multilingual.id, multilingual);
// Latin is still being taught in schools. Type == Ancient, therefore not in result of getLanguagesByScopeAndType
final ISO639_3.LanguageCode lat = iso639_3.getLanguages().get("lat");
IfNull.thenThrow(lat);
languages.put("lat", lat);
// Esperanto, added by request. Scope == "Constructed", therefore not in result of getLanguagesByScopeAndType
final ISO639_3.LanguageCode epo = iso639_3.getLanguages().get("epo");
IfNull.thenThrow(epo);
languages.put("epo", epo);
// Klingon, easter-egg for nerds. Scope == "Constructed", therefore not in result of getLanguagesByScopeAndType
final ISO639_3.LanguageCode tlh = iso639_3.getLanguages().get("tlh");
IfNull.thenThrow(tlh);
languages.put("tlh", tlh);
return languages;
}