diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DictsDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DictsDelegate.java index d46a3d02f..8638655c6 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DictsDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DictsDelegate.java @@ -69,13 +69,13 @@ import org.eehouse.android.xw4.DictUtils.DictLoc; import org.eehouse.android.xw4.DlgDelegate.Action; import org.eehouse.android.xw4.jni.GameSummary; import org.eehouse.android.xw4.loc.LocUtils; +import org.eehouse.android.xw4.DwnldDelegate.DownloadFinishedListener; public class DictsDelegate extends ListDelegateBase implements View.OnClickListener, AdapterView.OnItemLongClickListener, SelectableItem, MountEventReceiver.SDCardNotifiee, DlgDelegate.DlgClickNotify, GroupStateListener, - DwnldDelegate.DownloadFinishedListener, - XWListItem.ExpandedListener { + DownloadFinishedListener, XWListItem.ExpandedListener { protected static final String DICT_SHOWREMOTE = "do_launch"; protected static final String DICT_LANG_EXTRA = "use_lang"; @@ -989,6 +989,12 @@ public class DictsDelegate extends ListDelegateBase downloadForResult( activity, requestCode, 0, null ); } + public static void downloadDefaultDict( Context context, String lc, + DownloadFinishedListener lstnr ) + { + new GetDefaultDictTask( context, lc, lstnr ).execute(); + } + ////////////////////////////////////////////////////////////////////// // XWListItem.ExpandedListener interface ////////////////////////////////////////////////////////////////////// @@ -1086,6 +1092,75 @@ public class DictsDelegate extends ListDelegateBase return result; } + private static class GetDefaultDictTask extends AsyncTask { + private Context m_context; + private String m_lc; + private DownloadFinishedListener m_lstnr; + + public GetDefaultDictTask( Context context, String lc, + DownloadFinishedListener lnr ) { + m_context = context; + m_lc = lc; + m_lstnr = lnr; + } + + @Override + public Void doInBackground( Void... unused ) + { + // FIXME: this should pass up the language code to retrieve and + // parse less data + HttpPost post = UpdateCheckReceiver.makePost( m_context, "listDicts" ); + if ( null != post ) { + JSONObject theOne = null; + String langName = null; + String json = UpdateCheckReceiver.runPost( post, new JSONObject() ); + try { + JSONObject obj = new JSONObject( json ); + JSONArray langs = obj.optJSONArray( "langs" ); + int nLangs = langs.length(); + for ( int ii = 0; ii < nLangs; ++ii ) { + JSONObject langObj = langs.getJSONObject( ii ); + String langCode = langObj.getString( "lc" ); + if ( ! langCode.equals( m_lc ) ) { + continue; + } + // we have our language; look for one marked default; + // otherwise take the largest. + langName = langObj.getString( "lang" ); + JSONArray dicts = langObj.getJSONArray( "dicts" ); + int nDicts = dicts.length(); + int theOneNWords = 0; + for ( int jj = 0; jj < nDicts; ++jj ) { + JSONObject dict = dicts.getJSONObject( jj ); + if ( dict.optBoolean( "isDflt", false ) ) { + theOne = dict; + break; + } else { + int nWords = dict.getInt( "nWords" ); + if ( null == theOne || nWords > theOneNWords ) { + theOne = dict; + theOneNWords = nWords; + } + } + } + } + } catch ( JSONException ex ) { + DbgUtils.loge( ex ); + theOne = null; + } + + if ( null != theOne ) { + String name = theOne.optString( "xwd" ); + if ( null != name ) { + DwnldDelegate.downloadDictInBack( m_context, langName, + name, m_lstnr ); + } + } + } + return null; + } + } + private class FetchListTask extends AsyncTask implements OnCancelListener { private Context m_context; diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java index 0edec804f..a76506c6c 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesListDelegate.java @@ -50,6 +50,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -63,12 +64,13 @@ import org.eehouse.android.xw4.jni.*; import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType; import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnTypeSet; import org.eehouse.android.xw4.loc.LocUtils; +import org.eehouse.android.xw4.DwnldDelegate.DownloadFinishedListener; public class GamesListDelegate extends ListDelegateBase implements OnItemLongClickListener, DBUtils.DBChangeListener, SelectableItem, - DwnldDelegate.DownloadFinishedListener, - DlgDelegate.HasDlgDelegate, GroupStateListener { + DownloadFinishedListener, DlgDelegate.HasDlgDelegate, + GroupStateListener { private static final String SAVE_ROWID = "SAVE_ROWID"; @@ -909,6 +911,8 @@ public class GamesListDelegate extends ListDelegateBase askDefaultNameIf(); + getDictForLangIf(); + m_origTitle = getTitle(); } // init @@ -1865,6 +1869,36 @@ public class GamesListDelegate extends ListDelegateBase } } + private void getDictForLangIf() + { + String lc = Locale.getDefault().getLanguage(); + if ( !lc.equals("en") ) { + int code = LocUtils.codeForLangCode( m_activity, lc ); + String[] names = DictLangCache.getHaveLang( m_activity, code ); + if ( 0 == names.length ) { + DownloadFinishedListener lstnr = new DownloadFinishedListener() { + public void downloadFinished( final String lang, + String name, + boolean success ) { + if ( success ) { + runOnUiThread( new Runnable() { + public void run() { + showGotDictForLang( lang ); + } + } ); + } + } + }; + DictsDelegate.downloadDefaultDict( m_activity, lc, lstnr ); + } + } + } + + private void showGotDictForLang( String lang ) + { + showOKOnlyDialog( String.format( "got dict for %s", lang ) ); + } + private void updateField() { String newField = CommonPrefs.getSummaryField( m_activity ); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/loc/LocUtils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/loc/LocUtils.java index d43519196..c48df7905 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/loc/LocUtils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/loc/LocUtils.java @@ -142,6 +142,24 @@ public class LocUtils { return xlated; } + private static Map s_langCodeMap = null; + public static int codeForLangCode( Context context, String lc ) + { + if ( null == s_langCodeMap ) { + s_langCodeMap = new HashMap(); + String[] langCodes = + context.getResources().getStringArray( R.array.language_codes ); + for ( int ii = 0; ii < langCodes.length; ++ii ) { + String item = langCodes[ii]; + if ( 0 < item.length() ) { + s_langCodeMap.put( item, ii ); + } + } + } + + return s_langCodeMap.get( lc ); + } + public static void xlateView( Activity activity ) { xlateView( activity, Utils.getContentView( activity ) );