package wikokit.kiwidict; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.os.Bundle; import android.view.Window; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Toast; import wikokit.base.wikipedia.language.LanguageType; import wikokit.base.wikipedia.sql.Connect; import wikokit.base.wikt.constant.POSLocal; import wikokit.base.wikt.constant.RelationLocal; import wikokit.base.wikt.multi.ru.name.POSRu; import wikokit.base.wikt.multi.ru.name.RelationRu; import wikokit.base.wikt.multi.en.name.POSEn; import wikokit.base.wikt.sql.TLang; import wikokit.base.wikt.sql.TPOS; import wikokit.base.wikt.sql.TRelationType; import wikokit.kiwidict.R; import wikokit.kiwidict.lang.LangChoice; import wikokit.kiwidict.lang.LangOnItemSelectedListener; import wikokit.kiwidict.lang.LangSpinnerAdapter; import wikokit.kiwidict.lang.LanguageSpinner; import wikokit.kiwidict.search_window.QueryTextString; import wikokit.kiwidict.util.TipsTeapot; import wikokit.kiwidict.wordlist.WordList; public class KiwidictActivity extends Activity { private Connect wikt_conn; // private DataBaseHelper db_helper; private static SQLiteDatabase db; DownloadAndInstallActivity install_activity = new DownloadAndInstallActivity(); static QueryTextString query_text_string; static ProgressBar spinning_wheel; static WordList word_list; static LangChoice lang_choice = new LangChoice(); static LanguageSpinner lspinner = new LanguageSpinner(); static TipsTeapot tip = TipsTeapot.generateRandomTip(); static String word0 = tip.getQuery(); //"*с?рё*"; public KiwidictActivity () { } /** * Check if the database already exist to avoid re-downloading and unzipping * the file each time you open the application. * @return true if it exists, false if it doesn't */ public static boolean isDatabaseAvailable() { SQLiteDatabase check_db = null; try{ String path = wikokit.base.wikt.db.FileUtil.getFilePathAtExternalStorage(Connect.DB_DIR, Connect.getDBFilename()); check_db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(check_db != null) { //System.out.println("checkDataBase: Database openes, not null."); check_db.close(); } return check_db != null; } void openDatabase() { wikt_conn = new Connect(this); // context if(!wikt_conn.openDatabase()) { Toast.makeText(this, "Error: database is not available.", Toast.LENGTH_LONG).show(); return; } db = wikt_conn.getDB(); KWConstants.setDatabase(db); TLang.createFastMaps(db);// once upon a time: use Wiktionary parsed db TPOS.createFastMaps (db); TRelationType.createFastMaps(db); //System.out.println("initDatabase: DBName=" + wikt_parsed_conn.getDBName()); RelationLocal _ = RelationRu.synonymy; // fun initialization: inheritance vs. static fields LanguageType native_lang = Connect.getNativeLanguage(); if(LanguageType.ru == native_lang) { POSLocal $ = POSRu.noun; } else if(LanguageType.en == native_lang) { POSLocal $ = POSEn.noun; } } void initGUI() { query_text_string = new QueryTextString(); query_text_string.word_textfield = (EditText) findViewById(R.id.editText_word); spinning_wheel = (ProgressBar)findViewById(R.id.spinning_wheel); word_list = new WordList(this); CheckBox _lang_source_checkbox = (CheckBox) findViewById(wikokit.kiwidict.enwikt.R.id.lang_source_checkbox); EditText _lang_source_text = (EditText) findViewById(R.id.lang_source_text); lang_choice.initialize( word_list, query_text_string, lspinner, tip.getSourceLangCodes(), Connect.getNativeLanguage(), // GUI _lang_source_checkbox, _lang_source_text); ListView word_listview = (ListView) findViewById(R.id.word_listview_id); query_text_string.initialize(word0, db, word_list, lang_choice, this); word_list.initialize(db, query_text_string, spinning_wheel, lang_choice, //FilterMeanSemRelTrans _filter_mean_sem_transl, Connect.getNativeLanguage(), //_word0 : String, KWConstants.n_words_list, word_listview, this); // word_list.setSkipRedirects(KWConstants.b_skip_redirects); //filter_mean_sem_transl.initialize(word_list, lang_choice, query_text_string); //debug_panel.initialize(); word_list.updateWordList( KWConstants.b_skip_redirects, word0 ); //query_text_string.saveWordValue(); word_list.copyWordsToStringArray( word_list.getPageArray() ); // language dropdown selection menu (spinner) GUI + logic String[] ar_spinner = lspinner.fillByAllLanguages(); LangOnItemSelectedListener lang_item_listener = new LangOnItemSelectedListener(lspinner, lang_choice); Spinner lang_spinner_widget = (Spinner) findViewById(R.id.lang_spinner_id); lspinner.initialize(lang_spinner_widget, lang_item_listener); //ArrayAdapter<String> spinner_adapter = new ArrayAdapter(this, // android.R.layout.simple_spinner_item, ar_spinner); LangSpinnerAdapter spinner_adapter = new LangSpinnerAdapter(this, android.R.layout.simple_spinner_item, ar_spinner, lspinner); spinner_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); lang_spinner_widget.setAdapter(spinner_adapter); lang_spinner_widget.setOnItemSelectedListener(lang_item_listener); lspinner.postInit(tip.getSourceLangCodes()); } /** Called when the activity is first created. * Download and unzip file with the database. **/ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); //db_helper = new DataBaseHelper(this); //if( !db_helper.isDatabaseAvailable() ) { //if( !DataBaseHelper.isDatabaseAvailable()) { if( !isDatabaseAvailable() ) { Intent i = new Intent(this, DownloadAndInstallActivity.class); startActivityForResult(i, 0); } else { openDatabase(); // -------------------------------- // GUI initGUI(); } } /** After downloading and installing dictionary activity. */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_CANCELED) { //Toast.makeText(this, "activity canceled", Toast.LENGTH_SHORT).show(); // database failed, exit. finish(); } else if (resultCode == Activity.RESULT_OK) { //Toast.makeText(this, "activity ok", Toast.LENGTH_SHORT).show(); // ok, open database. openDatabase(); // -------------------------------- // GUI initGUI(); } } }