mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-08 09:55:32 +00:00
Merge pull request #3020 from keymanapp/modify/android/keyboard-info
modify(android): Refactor Keyboard class to not use Map
This commit is contained in:
commit
3023b8759c
12 changed files with 211 additions and 176 deletions
|
|
@ -23,6 +23,8 @@ import com.tavultesoft.kmea.data.Dataset;
|
|||
import com.tavultesoft.kmea.data.Keyboard;
|
||||
import com.tavultesoft.kmea.data.adapters.AdapterFilter;
|
||||
import com.tavultesoft.kmea.data.adapters.NestedAdapter;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
import com.tavultesoft.kmea.util.MapCompat;
|
||||
|
||||
final class KMKeyboardPickerAdapter extends NestedAdapter<Keyboard, Dataset.Keyboards, Void> implements OnClickListener {
|
||||
private final static int KEYBOARD_LAYOUT_RESOURCE = R.layout.list_row_layout3;
|
||||
|
|
@ -48,7 +50,25 @@ final class KMKeyboardPickerAdapter extends NestedAdapter<Keyboard, Dataset.Keyb
|
|||
List<Keyboard> kbdList = new ArrayList<>(kbdMapList.size());
|
||||
|
||||
for(HashMap<String, String> kbdMap: kbdMapList) {
|
||||
kbdList.add(new Keyboard(kbdMap));
|
||||
boolean isCustom = kbdMap.containsKey(KMManager.KMKey_CustomKeyboard) &&
|
||||
kbdMap.get(KMManager.KMKey_CustomKeyboard).equals("Y");
|
||||
boolean isNewKeyboard = kbdMap.containsKey(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD) &&
|
||||
kbdMap.get(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD).equals(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD);
|
||||
|
||||
Keyboard k = new Keyboard(
|
||||
kbdMap.get(KMManager.KMKey_PackageID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardName),
|
||||
kbdMap.get(KMManager.KMKey_LanguageID),
|
||||
kbdMap.get(KMManager.KMKey_LanguageName),
|
||||
isCustom,
|
||||
isNewKeyboard,
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Font, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_OskFont, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Version, "1.0"),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_CustomHelpLink, "")
|
||||
);
|
||||
kbdList.add(k);
|
||||
}
|
||||
|
||||
return kbdList;
|
||||
|
|
@ -102,33 +122,10 @@ final class KMKeyboardPickerAdapter extends NestedAdapter<Keyboard, Dataset.Keyb
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> kbInfo = ((Keyboard) v.getTag()).map;
|
||||
Keyboard kbInfo = (Keyboard) v.getTag();
|
||||
Intent i = new Intent(this.getContext(), KeyboardInfoActivity.class);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||
String packageID = kbInfo.get(KMManager.KMKey_PackageID);
|
||||
String keyboardID = kbInfo.get(KMManager.KMKey_KeyboardID);
|
||||
if (packageID == null || packageID.isEmpty()) {
|
||||
packageID = KMManager.KMDefault_UndefinedPackageID;
|
||||
}
|
||||
i.putExtra(KMManager.KMKey_PackageID, packageID);
|
||||
i.putExtra(KMManager.KMKey_KeyboardID, keyboardID);
|
||||
i.putExtra(KMManager.KMKey_LanguageID, kbInfo.get(KMManager.KMKey_LanguageID));
|
||||
i.putExtra(KMManager.KMKey_KeyboardName, kbInfo.get(KMManager.KMKey_KeyboardName));
|
||||
String keyboardVersion = KMManager.getLatestKeyboardFileVersion(this.getContext(), packageID, keyboardID);
|
||||
i.putExtra(KMManager.KMKey_KeyboardVersion, keyboardVersion);
|
||||
boolean isCustom = false;
|
||||
if (kbInfo.get(KMManager.KMKey_CustomKeyboard) != null || kbInfo.containsKey(KMManager.KMKey_CustomKeyboard)) {
|
||||
isCustom = kbInfo.get(KMManager.KMKey_CustomKeyboard).equals("Y") ? true : false;
|
||||
}
|
||||
i.putExtra(KMManager.KMKey_CustomKeyboard, isCustom);
|
||||
String customHelpLink = kbInfo.get(KMManager.KMKey_CustomHelpLink);
|
||||
if (customHelpLink != null) {
|
||||
i.putExtra(KMManager.KMKey_CustomHelpLink, customHelpLink);
|
||||
} else {
|
||||
i.putExtra(KMManager.KMKey_HelpLink,
|
||||
String.format("https://help.keyman.com/keyboard/%s/%s/", keyboardID, keyboardVersion));
|
||||
}
|
||||
i.putExtra(KMManager.KMKey_Keyboard, kbInfo);
|
||||
KeyboardInfoActivity.titleFont = listFont;
|
||||
this.getContext().startActivity(i);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ public final class KMManager {
|
|||
public static final String KMKey_KeyboardCount = "kbCount";
|
||||
public static final String KMKey_HelpLink = "helpLink";
|
||||
public static final String KMKey_Icon = "icon";
|
||||
public static final String KMKey_Keyboard = "keyboard";
|
||||
public static final String KMKey_KeyboardID = "kbId";
|
||||
public static final String KMKey_KeyboardName = "kbName";
|
||||
public static final String KMKey_KeyboardVersion = "version";
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@ import android.widget.SimpleAdapter;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.tavultesoft.kmea.data.Keyboard;
|
||||
import com.tavultesoft.kmea.util.FileProviderUtils;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
import com.tavultesoft.kmea.util.HelpFile;
|
||||
import com.tavultesoft.kmea.util.MapCompat;
|
||||
import com.tavultesoft.kmea.util.QRCodeUtil;
|
||||
|
|
@ -59,12 +61,11 @@ public final class KeyboardInfoActivity extends AppCompatActivity {
|
|||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
|
||||
listView = (ListView) findViewById(R.id.listView);
|
||||
|
||||
final String packageID = getIntent().getStringExtra(KMManager.KMKey_PackageID);
|
||||
final String kbID = getIntent().getStringExtra(KMManager.KMKey_KeyboardID);
|
||||
String kbName = getIntent().getStringExtra(KMManager.KMKey_KeyboardName);
|
||||
final String kbVersion = getIntent().getStringExtra(KMManager.KMKey_KeyboardVersion);
|
||||
final boolean isCustomKeyboard = getIntent().getBooleanExtra(KMManager.KMKey_CustomKeyboard, false);
|
||||
final Keyboard kbd = (Keyboard)getIntent().getSerializableExtra(KMManager.KMKey_Keyboard);
|
||||
final String packageID = kbd.getPackageID();
|
||||
final String kbID = kbd.getResourceId();
|
||||
final String kbName = kbd.getResourceName();
|
||||
final String kbVersion = kbd.getVersion();
|
||||
|
||||
final TextView textView = (TextView) findViewById(R.id.bar_title);
|
||||
textView.setText(kbName);
|
||||
|
|
@ -82,8 +83,7 @@ public final class KeyboardInfoActivity extends AppCompatActivity {
|
|||
|
||||
// Display keyboard help link
|
||||
hashMap = new HashMap<String, String>();
|
||||
final String helpUrlStr = getIntent().getStringExtra(KMManager.KMKey_HelpLink);
|
||||
final String customHelpLink = getIntent().getStringExtra(KMManager.KMKey_CustomHelpLink);
|
||||
final String customHelpLink = kbd.getCustomHelpLink();
|
||||
// Check if app declared FileProvider
|
||||
String icon = String.valueOf(R.drawable.ic_arrow_forward);
|
||||
// Don't show help link arrow if File Provider unavailable, or custom help doesn't exist
|
||||
|
|
@ -123,7 +123,7 @@ public final class KeyboardInfoActivity extends AppCompatActivity {
|
|||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
if (position == 1) {
|
||||
if (customHelpLink != null) {
|
||||
if (FileUtils.isWelcomeFile(customHelpLink)) {
|
||||
// Display local welcome.htm help file, including associated assets
|
||||
Intent i = HelpFile.toActionView(context, customHelpLink, packageID);
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ public final class KeyboardInfoActivity extends AppCompatActivity {
|
|||
}
|
||||
} else {
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(Uri.parse(helpUrlStr));
|
||||
i.setData(Uri.parse(customHelpLink));
|
||||
startActivity(i);
|
||||
}
|
||||
}
|
||||
|
|
@ -146,7 +146,7 @@ public final class KeyboardInfoActivity extends AppCompatActivity {
|
|||
LinearLayout qrLayout = (LinearLayout) view.findViewById(R.id.qrLayout);
|
||||
listView.addFooterView(qrLayout);
|
||||
|
||||
String url = String.format("%s%s", QRCodeUtil.QR_BASE, kbID);
|
||||
String url = String.format(QRCodeUtil.QR_BASE, kbID);
|
||||
Bitmap myBitmap = QRCodeUtil.toBitmap(url);
|
||||
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
|
||||
imageView.setImageBitmap(myBitmap);
|
||||
|
|
|
|||
|
|
@ -578,14 +578,32 @@ public final class KeyboardPickerActivity extends AppCompatActivity {
|
|||
return storageDataset;
|
||||
}
|
||||
|
||||
List<? extends Map<String, String>> kbdMapList = getKeyboardsList(context);
|
||||
List<HashMap<String, String>> kbdMapList = getKeyboardsList(context);
|
||||
if (kbdMapList == null) {
|
||||
kbdMapList = new ArrayList<>(0);
|
||||
}
|
||||
List<Keyboard> kbdsList = new ArrayList<>(kbdMapList.size());
|
||||
|
||||
for(Map<String, String> map: kbdMapList) {
|
||||
kbdsList.add(new Keyboard(map));
|
||||
for(HashMap<String, String> kbdMap: kbdMapList) {
|
||||
boolean isCustom = kbdMap.containsKey(KMManager.KMKey_CustomKeyboard) &&
|
||||
kbdMap.get(KMManager.KMKey_CustomKeyboard).equals("Y");
|
||||
boolean isNewKeyboard = kbdMap.containsKey(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD) &&
|
||||
kbdMap.get(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD).equals(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD);
|
||||
|
||||
Keyboard k = new Keyboard(
|
||||
kbdMap.get(KMManager.KMKey_PackageID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardName),
|
||||
kbdMap.get(KMManager.KMKey_LanguageID),
|
||||
kbdMap.get(KMManager.KMKey_LanguageName),
|
||||
isCustom,
|
||||
isNewKeyboard,
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Font, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_OskFont, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Version, "1.0"),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_CustomHelpLink, "")
|
||||
);
|
||||
kbdsList.add(k);
|
||||
}
|
||||
|
||||
List<? extends Map<String, String>> lexMapList = getLexicalModelsList(context);
|
||||
|
|
@ -612,10 +630,28 @@ public final class KeyboardPickerActivity extends AppCompatActivity {
|
|||
storage.keyboards.setNotifyOnChange(false);
|
||||
storage.keyboards.clear();
|
||||
|
||||
List<? extends Map<String, String>> mapList = getKeyboardsList(context);
|
||||
List<HashMap<String, String>> mapList = getKeyboardsList(context);
|
||||
List<Keyboard> kbdList = new ArrayList<>(mapList.size());
|
||||
for(Map<String, String> map: mapList) {
|
||||
kbdList.add(new Keyboard(map));
|
||||
for(HashMap<String, String> kbdMap: mapList) {
|
||||
boolean isCustom = kbdMap.containsKey(KMManager.KMKey_CustomKeyboard) &&
|
||||
kbdMap.get(KMManager.KMKey_CustomKeyboard).equals("Y");
|
||||
boolean isNewKeyboard = kbdMap.containsKey(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD) &&
|
||||
kbdMap.get(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD).equals(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD);
|
||||
|
||||
Keyboard k = new Keyboard(
|
||||
kbdMap.get(KMManager.KMKey_PackageID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardID),
|
||||
kbdMap.get(KMManager.KMKey_KeyboardName),
|
||||
kbdMap.get(KMManager.KMKey_LanguageID),
|
||||
kbdMap.get(KMManager.KMKey_LanguageName),
|
||||
isCustom,
|
||||
isNewKeyboard,
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Font, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_OskFont, null),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_Version, "1.0"),
|
||||
MapCompat.getOrDefault(kbdMap, KMManager.KMKey_CustomHelpLink, "")
|
||||
);
|
||||
kbdList.add(k);
|
||||
}
|
||||
storage.keyboards.addAll(kbdList);
|
||||
storage.keyboards.notifyDataSetChanged();
|
||||
|
|
|
|||
|
|
@ -68,25 +68,18 @@ public final class KeyboardSettingsActivity extends AppCompatActivity {
|
|||
|
||||
final ListView listView = findViewById(R.id.listView);
|
||||
|
||||
final String packageID = getIntent().getStringExtra(KMManager.KMKey_PackageID);
|
||||
final String languageID = getIntent().getStringExtra(KMManager.KMKey_LanguageID);
|
||||
final String languageName = getIntent().getStringExtra(KMManager.KMKey_LanguageName);
|
||||
final String kbID = getIntent().getStringExtra(KMManager.KMKey_KeyboardID);
|
||||
final String kbName = getIntent().getStringExtra(KMManager.KMKey_KeyboardName);
|
||||
final String kbVersion = getIntent().getStringExtra(KMManager.KMKey_KeyboardVersion);
|
||||
final Keyboard kbd = (Keyboard)getIntent().getSerializableExtra(KMManager.KMKey_Keyboard);
|
||||
final String packageID = kbd.getPackageID();
|
||||
final String languageID = kbd.getLanguageID();
|
||||
final String languageName = kbd.getLanguageName();
|
||||
final String kbID = kbd.getResourceId();
|
||||
final String kbName = kbd.getResourceName();
|
||||
final String kbVersion = kbd.getVersion();
|
||||
String latestKbdCloudVersion = kbVersion;
|
||||
|
||||
// Determine if keyboard update is available from the cloud
|
||||
Dataset dataset = CloudRepository.shared.fetchDataset(this);
|
||||
HashMap<String, String> kbInfo = new HashMap<>();
|
||||
kbInfo.put(KMManager.KMKey_PackageID, packageID);
|
||||
kbInfo.put(KMManager.KMKey_LanguageID, languageID);
|
||||
kbInfo.put(KMManager.KMKey_LanguageName, languageName);
|
||||
kbInfo.put(KMManager.KMKey_KeyboardID, kbID);
|
||||
kbInfo.put(KMManager.KMKey_KeyboardName, kbName);
|
||||
|
||||
Keyboard kbdQuery = new Keyboard(kbInfo);
|
||||
final Keyboard latestKbd = dataset.keyboards.findMatch(kbdQuery);
|
||||
final Keyboard latestKbd = dataset.keyboards.findMatch(kbd);
|
||||
if (latestKbd != null) {
|
||||
latestKbdCloudVersion = latestKbd.getVersion();
|
||||
}
|
||||
|
|
@ -113,8 +106,7 @@ public final class KeyboardSettingsActivity extends AppCompatActivity {
|
|||
|
||||
// Display keyboard help link
|
||||
hashMap = new HashMap<>();
|
||||
final String helpUrlStr = getIntent().getStringExtra(KMManager.KMKey_HelpLink);
|
||||
final String customHelpLink = getIntent().getStringExtra(KMManager.KMKey_CustomHelpLink);
|
||||
final String customHelpLink = kbd.getCustomHelpLink();
|
||||
// Check if app declared FileProvider
|
||||
icon = String.valueOf(R.drawable.ic_arrow_forward);
|
||||
// Don't show help link arrow if File Provider unavailable, or custom help doesn't exist
|
||||
|
|
@ -174,7 +166,7 @@ public final class KeyboardSettingsActivity extends AppCompatActivity {
|
|||
|
||||
// "Help" link clicked
|
||||
} else if (itemTitle.equals(getString(R.string.help_link))) {
|
||||
if (customHelpLink != null) {
|
||||
if (FileUtils.isWelcomeFile(customHelpLink)) {
|
||||
// Display local welcome.htm help file, including associated assets
|
||||
Intent i = HelpFile.toActionView(context, customHelpLink, packageID);
|
||||
|
||||
|
|
@ -183,7 +175,7 @@ public final class KeyboardSettingsActivity extends AppCompatActivity {
|
|||
}
|
||||
} else {
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(Uri.parse(helpUrlStr));
|
||||
i.setData(Uri.parse(customHelpLink));
|
||||
startActivity(i);
|
||||
}
|
||||
|
||||
|
|
@ -206,7 +198,7 @@ public final class KeyboardSettingsActivity extends AppCompatActivity {
|
|||
LinearLayout qrLayout = (LinearLayout) view.findViewById(R.id.qrLayout);
|
||||
listView.addFooterView(qrLayout);
|
||||
|
||||
String url = String.format("%s%s", QRCodeUtil.QR_BASE, kbID);
|
||||
String url = String.format(QRCodeUtil.QR_BASE, kbID);
|
||||
Bitmap myBitmap = QRCodeUtil.toBitmap(url);
|
||||
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
|
||||
imageView.setImageBitmap(myBitmap);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ import com.tavultesoft.kmea.data.CloudRepository;
|
|||
import com.tavultesoft.kmea.data.Dataset;
|
||||
import com.tavultesoft.kmea.data.Keyboard;
|
||||
import com.tavultesoft.kmea.data.adapters.NestedAdapter;
|
||||
import com.tavultesoft.kmea.util.MapCompat;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
|
|
@ -206,31 +206,10 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
listView.setItemChecked(position, true);
|
||||
listView.setSelection(position);
|
||||
Keyboard kbd = ((FilteredKeyboardsAdapter) listView.getAdapter()).getItem(position);
|
||||
HashMap<String, String> kbInfo = new HashMap<>(kbd.map);
|
||||
String packageID = kbInfo.get(KMManager.KMKey_PackageID);
|
||||
String keyboardID = kbInfo.get(KMManager.KMKey_KeyboardID);
|
||||
if (packageID == null || packageID.isEmpty()) {
|
||||
packageID = KMManager.KMDefault_UndefinedPackageID;
|
||||
}
|
||||
Keyboard kbdInfo = ((FilteredKeyboardsAdapter) listView.getAdapter()).getItem(position);
|
||||
Intent intent = new Intent(context, KeyboardSettingsActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||
intent.putExtra(KMManager.KMKey_PackageID, packageID);
|
||||
intent.putExtra(KMManager.KMKey_KeyboardID, keyboardID);
|
||||
intent.putExtra(KMManager.KMKey_LanguageID, kbInfo.get(KMManager.KMKey_LanguageID));
|
||||
intent.putExtra(KMManager.KMKey_LanguageName, kbInfo.get(KMManager.KMKey_LanguageName));
|
||||
intent.putExtra(KMManager.KMKey_KeyboardName, kbInfo.get(KMManager.KMKey_KeyboardName));
|
||||
String keyboardVersion = KMManager.getLatestKeyboardFileVersion(context, packageID, keyboardID);
|
||||
intent.putExtra(KMManager.KMKey_KeyboardVersion, keyboardVersion);
|
||||
boolean isCustom = MapCompat.getOrDefault(kbInfo, KMManager.KMKey_CustomKeyboard, "N").equals("Y") ? true : false;
|
||||
intent.putExtra(KMManager.KMKey_CustomKeyboard, isCustom);
|
||||
String customHelpLink = kbInfo.get(KMManager.KMKey_CustomHelpLink);
|
||||
if (customHelpLink != null) {
|
||||
intent.putExtra(KMManager.KMKey_CustomHelpLink, customHelpLink);
|
||||
} else {
|
||||
intent.putExtra(KMManager.KMKey_HelpLink,
|
||||
String.format("https://help.keyman.com/keyboard/%s/%s/", keyboardID, keyboardVersion));
|
||||
}
|
||||
intent.putExtra(KMManager.KMKey_Keyboard, kbdInfo);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
|
@ -355,7 +334,7 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
com.tavultesoft.kmea.data.Keyboard kbd = this.getItem(position);
|
||||
Keyboard kbd = this.getItem(position);
|
||||
ViewHolder holder;
|
||||
|
||||
// If we're being told to reuse an existing view, do that. It's automatic optimization.
|
||||
|
|
@ -369,7 +348,7 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
holder = (ViewHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
holder.text.setText(kbd.map.get(KMManager.KMKey_KeyboardName));
|
||||
holder.text.setText(kbd.getResourceName());
|
||||
holder.img.setImageResource(R.drawable.ic_arrow_forward);
|
||||
|
||||
return convertView;
|
||||
|
|
|
|||
|
|
@ -64,38 +64,18 @@ public class CloudDataJsonUtil {
|
|||
return keyboardsList;
|
||||
}
|
||||
|
||||
String isCustom = fromKMP ? "Y" : "N";
|
||||
|
||||
try {
|
||||
// Thank you, Cloud API format.
|
||||
JSONArray languages = query.getJSONObject(KMKeyboardDownloaderActivity.KMKey_Languages).getJSONArray(KMKeyboardDownloaderActivity.KMKey_Languages);
|
||||
for (int i = 0; i < languages.length(); i++) {
|
||||
JSONObject language = languages.getJSONObject(i);
|
||||
|
||||
String langID = language.getString(KMManager.KMKey_ID);
|
||||
String langName = language.getString(KMManager.KMKey_Name);
|
||||
|
||||
JSONArray langKeyboards = language.getJSONArray(KMKeyboardDownloaderActivity.KMKey_LanguageKeyboards);
|
||||
JSONObject languageJSON = languages.getJSONObject(i);
|
||||
JSONArray langKeyboards = languageJSON.getJSONArray(KMKeyboardDownloaderActivity.KMKey_LanguageKeyboards);
|
||||
|
||||
// Can't foreach a JSONArray
|
||||
int kbLength = langKeyboards.length();
|
||||
for (int j = 0; j < kbLength; j++) {
|
||||
JSONObject keyboardJSON = langKeyboards.getJSONObject(j);
|
||||
String pkgID = keyboardJSON.optString(KMManager.KMKey_PackageID, KMManager.KMDefault_UndefinedPackageID);
|
||||
String kbID = keyboardJSON.getString(KMManager.KMKey_ID);
|
||||
String kbName = keyboardJSON.getString(KMManager.KMKey_Name);
|
||||
String kbVersion = keyboardJSON.optString(KMManager.KMKey_KeyboardVersion, "1.0");
|
||||
String kbFont = keyboardJSON.optString(KMManager.KMKey_Font, "");
|
||||
String customHelpLink = keyboardJSON.optString(KMManager.KMKey_CustomHelpLink, null);
|
||||
|
||||
//String kbKey = String.format("%s_%s", langID, kbID);
|
||||
HashMap<String, String> hashMap = createKeyboardInfoMap(pkgID,langID,langName,kbID,kbName,kbVersion,isCustom,kbFont,null, customHelpLink);
|
||||
|
||||
|
||||
// if (keyboardModifiedDates.get(kbID) == null) {
|
||||
// keyboardModifiedDates.put(kbID, keyboardJSON.getString(KMManager.KMKey_KeyboardModified));
|
||||
// }
|
||||
|
||||
keyboardsList.add(new Keyboard(hashMap));
|
||||
keyboardsList.add(new Keyboard(languageJSON, keyboardJSON));
|
||||
}
|
||||
}
|
||||
} catch (JSONException | NullPointerException e) {
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ public class Dataset extends ArrayAdapter<Dataset.LanguageDataset> implements Li
|
|||
|
||||
public Type findMatch(Type target) {
|
||||
for(Type obj: data) {
|
||||
if(obj.getResourceId().equals(target.getResourceId()) && obj.getLanguageCode().equals(target.getLanguageCode())) {
|
||||
if(obj.getResourceId().equals(target.getResourceId()) && obj.getLanguageID().equals(target.getLanguageID())) {
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
|
@ -309,7 +309,7 @@ public class Dataset extends ArrayAdapter<Dataset.LanguageDataset> implements Li
|
|||
}
|
||||
|
||||
protected void handleLanguageItemRemoval(LanguageResource coded) {
|
||||
String lgCode = coded.getLanguageCode();
|
||||
String lgCode = coded.getLanguageID();
|
||||
LanguageDataset lgData = languageMetadata.get(lgCode);
|
||||
|
||||
if(lgData.keyboards.size() == 0 && lgData.lexicalModels.size() == 0) {
|
||||
|
|
@ -320,11 +320,11 @@ public class Dataset extends ArrayAdapter<Dataset.LanguageDataset> implements Li
|
|||
}
|
||||
|
||||
protected LanguageDataset getMetadataFor(LanguageResource coded) {
|
||||
final String lgCode = coded.getLanguageCode();
|
||||
final String lgCode = coded.getLanguageID();
|
||||
LanguageDataset data = Dataset.this.languageMetadata.get(lgCode);
|
||||
|
||||
if(data == null) {
|
||||
data = new LanguageDataset(coded.getLanguageName(), coded.getLanguageCode());
|
||||
data = new LanguageDataset(coded.getLanguageName(), coded.getLanguageID());
|
||||
Dataset.this.languageMetadata.put(lgCode, data);
|
||||
Dataset.this.add(data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,97 +1,133 @@
|
|||
package com.tavultesoft.kmea.data;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.tavultesoft.kmea.KMKeyboardDownloaderActivity;
|
||||
import com.tavultesoft.kmea.KMManager;
|
||||
import com.tavultesoft.kmea.KeyboardPickerActivity;
|
||||
import com.tavultesoft.kmea.util.MapCompat;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
|
||||
public class Keyboard implements Serializable, LanguageResource {
|
||||
public final Map<String, String> map;
|
||||
private static final String TAG = "Keyboard";
|
||||
private static final String HELP_URL_FORMATSTR = "https://help.keyman.com/keyboard/%s/%s";
|
||||
|
||||
/* TODO: (v13 refactor)
|
||||
* Drop the HashMap and instead directly represent the following as object properties:
|
||||
*
|
||||
* String kbId = kbInfo.get(KMManager.KMKey_KeyboardID);
|
||||
* String langId = kbInfo.get(KMManager.KMKey_LanguageID);
|
||||
* String kbName = kbInfo.get(KMManager.KMKey_KeyboardName);
|
||||
* String langName = kbInfo.get(KMManager.KMKey_LanguageName);
|
||||
* String kFont = kbInfo.get(KMManager.KMKey_Font);
|
||||
* String kOskFont = kbInfo.get(KMManager.KMKey_OskFont);
|
||||
*/
|
||||
private String packageID;
|
||||
private String keyboardID;
|
||||
private String keyboardName;
|
||||
private String languageID;
|
||||
private String languageName;
|
||||
private boolean isCustomKeyboard;
|
||||
private boolean isNewKeyboard;
|
||||
private String font;
|
||||
private String oskFont;
|
||||
private String helpLink;
|
||||
private String version;
|
||||
|
||||
public Keyboard(Map<String, String> kbdData) {
|
||||
this.map = kbdData;
|
||||
}
|
||||
public Keyboard(JSONObject languageJSON, JSONObject keyboardJSON) {
|
||||
try {
|
||||
this.packageID = keyboardJSON.optString(KMManager.KMKey_PackageID, KMManager.KMDefault_UndefinedPackageID);
|
||||
|
||||
this.keyboardID = keyboardJSON.getString(KMManager.KMKey_ID);
|
||||
|
||||
this.keyboardName = keyboardJSON.getString(KMManager.KMKey_Name);
|
||||
|
||||
public boolean isNewKeyboard() {
|
||||
return map.get(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD)!=null;
|
||||
}
|
||||
// language ID and language name from languageJSON
|
||||
this.languageID = languageJSON.getString(KMManager.KMKey_ID).toLowerCase();
|
||||
this.languageName = languageJSON.getString(KMManager.KMKey_Name);
|
||||
|
||||
public String getResourceId() {
|
||||
return this.map.get(KMManager.KMKey_KeyboardID);
|
||||
}
|
||||
this.isCustomKeyboard = keyboardJSON.has(KMManager.KMKey_CustomKeyboard) &&
|
||||
keyboardJSON.get(KMManager.KMKey_CustomKeyboard).equals("Y");
|
||||
|
||||
@Override
|
||||
public String getLanguageCode() {
|
||||
return this.map.get(KMManager.KMKey_LanguageID);
|
||||
}
|
||||
this.isNewKeyboard = keyboardJSON.has(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD) &&
|
||||
keyboardJSON.get(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD).equals(KeyboardPickerActivity.KMKEY_INTERNAL_NEW_KEYBOARD);
|
||||
|
||||
public String getLanguageName() {
|
||||
return this.map.get(KMManager.KMKey_LanguageName);
|
||||
}
|
||||
this.font = keyboardJSON.optString(KMManager.KMKey_Font, "");
|
||||
|
||||
public String getResourceName() {
|
||||
return this.map.get(KMManager.KMKey_KeyboardName);
|
||||
}
|
||||
this.oskFont = keyboardJSON.optString(KMManager.KMKey_OskFont, "");
|
||||
|
||||
public String getCustomHelpLink() {
|
||||
if (this.map.containsKey(KMManager.KMKey_CustomHelpLink)) {
|
||||
return this.map.get(KMManager.KMKey_CustomHelpLink);
|
||||
this.version = keyboardJSON.optString(KMManager.KMKey_KeyboardVersion, "1.0");
|
||||
|
||||
this.helpLink = keyboardJSON.optString(KMManager.KMKey_CustomHelpLink,
|
||||
String.format(HELP_URL_FORMATSTR, this.keyboardID, this.version));
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "Keyboard exception parsing JSON: " + e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return this.map.get(KMManager.KMKey_KeyboardVersion);
|
||||
public Keyboard(String packageID, String keyboardID, String keyboardName, String languageID, String languageName,
|
||||
boolean isCustomKeyboard, boolean isNewKeyboard,
|
||||
String font, String oskFont, String version, String helpLink) {
|
||||
|
||||
this.packageID = (packageID != null) ? packageID : KMManager.KMDefault_UndefinedPackageID;
|
||||
this.keyboardID = keyboardID;
|
||||
this.keyboardName = keyboardName;
|
||||
this.languageID = languageID.toLowerCase();
|
||||
this.languageName = languageName;
|
||||
this.isCustomKeyboard = isCustomKeyboard;
|
||||
this.isNewKeyboard = isNewKeyboard;
|
||||
this.font = (font != null) ? font : "";
|
||||
this.oskFont = (oskFont != null) ? oskFont : "";
|
||||
this.version = (version != null) ? version : "1.0";
|
||||
this.helpLink = (FileUtils.isWelcomeFile(helpLink)) ? helpLink :
|
||||
String.format(HELP_URL_FORMATSTR, this.keyboardID, this.version);
|
||||
}
|
||||
|
||||
public String getPackage() {
|
||||
return this.map.get(KMManager.KMKey_PackageID);
|
||||
}
|
||||
public boolean isCustomKeyboard() { return isCustomKeyboard; }
|
||||
|
||||
public boolean isNewKeyboard() { return isNewKeyboard; }
|
||||
|
||||
public String getResourceId() { return keyboardID; }
|
||||
|
||||
public String getFont() { return font; }
|
||||
|
||||
public String getOSKFont() { return oskFont; }
|
||||
|
||||
public String getLanguageID() { return languageID; }
|
||||
|
||||
// Deprecated in Keyman 14.0 for getLanguageID()
|
||||
@Override
|
||||
public String getLanguageCode() { return languageID; }
|
||||
|
||||
public String getLanguageName() { return languageName; }
|
||||
|
||||
public String getResourceName() { return keyboardName; }
|
||||
|
||||
public String getCustomHelpLink() { return helpLink; }
|
||||
|
||||
public String getVersion() { return version; }
|
||||
|
||||
public String getPackageID() { return packageID; }
|
||||
|
||||
// Deprecated in Keyman 14.0 for getPackageID()
|
||||
@Override
|
||||
public String getPackage() { return packageID; }
|
||||
|
||||
public Bundle buildDownloadBundle() {
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_PKG_ID, getPackage());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_KB_ID, getResourceId());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_LANG_ID, getLanguageCode());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_KB_NAME, getResourceName());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_LANG_NAME, getLanguageName());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_PKG_ID, packageID);
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_KB_ID, keyboardID);
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_LANG_ID, languageID);
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_KB_NAME, keyboardName);
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_LANG_NAME, languageName);
|
||||
|
||||
String isCustom = map.get(KMManager.KMKey_CustomKeyboard);
|
||||
if(isCustom == null) {
|
||||
isCustom = "N";
|
||||
}
|
||||
bundle.putBoolean(KMKeyboardDownloaderActivity.ARG_IS_CUSTOM, isCustom.equals("Y"));
|
||||
bundle.putBoolean(KMKeyboardDownloaderActivity.ARG_IS_CUSTOM, isCustomKeyboard);
|
||||
|
||||
String customHelpLink = map.get(KMManager.KMKey_CustomHelpLink);
|
||||
if (customHelpLink != null) {
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_CUSTOM_HELP_LINK, getCustomHelpLink());
|
||||
}
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_CUSTOM_HELP_LINK, helpLink);
|
||||
|
||||
return bundle;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if(obj instanceof Keyboard) {
|
||||
boolean lgCodeMatch = ((Keyboard) obj).getLanguageCode().equals(this.getLanguageCode());
|
||||
boolean lgCodeMatch = ((Keyboard) obj).getLanguageID().equals(this.getLanguageID());
|
||||
boolean idMatch = ((Keyboard) obj).getResourceId().equals(this.getResourceId());
|
||||
|
||||
return lgCodeMatch && idMatch;
|
||||
|
|
@ -103,7 +139,7 @@ public class Keyboard implements Serializable, LanguageResource {
|
|||
@Override
|
||||
public int hashCode() {
|
||||
String id = getResourceId();
|
||||
String lgCode = getLanguageCode();
|
||||
String lgCode = getLanguageID();
|
||||
return id.hashCode() * lgCode.hashCode();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,15 @@ import android.os.Bundle;
|
|||
public interface LanguageResource {
|
||||
String getResourceId();
|
||||
String getResourceName();
|
||||
String getLanguageID();
|
||||
|
||||
// Deprecated in Keyman 14.0 by getLanguageID();
|
||||
String getLanguageCode();
|
||||
String getLanguageName();
|
||||
String getVersion();
|
||||
String getPackageID();
|
||||
|
||||
// Deprecated in Keyman 14.0 by getPackageID()
|
||||
String getPackage();
|
||||
String getCustomHelpLink();
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,11 @@ public class LexicalModel implements Serializable, LanguageResource {
|
|||
return this.map.get(KMManager.KMKey_LexicalModelID);
|
||||
}
|
||||
|
||||
public String getLanguageID() {
|
||||
return this.map.get(KMManager.KMKey_LanguageID);
|
||||
}
|
||||
|
||||
// Deprecate in Keyman 14.0 for getLanguageID()
|
||||
@Override
|
||||
public String getLanguageCode() {
|
||||
return this.map.get(KMManager.KMKey_LanguageID);
|
||||
|
|
@ -49,6 +54,9 @@ public class LexicalModel implements Serializable, LanguageResource {
|
|||
return this.map.get(KMManager.KMKey_LexicalModelVersion);
|
||||
}
|
||||
|
||||
public String getPackageID() { return this.map.get(KMManager.KMKey_PackageID); }
|
||||
|
||||
// Deprecate in Keyman 14.0 for getPackageID()
|
||||
public String getPackage() {
|
||||
return this.map.get(KMManager.KMKey_PackageID);
|
||||
}
|
||||
|
|
@ -72,7 +80,7 @@ public class LexicalModel implements Serializable, LanguageResource {
|
|||
return null;
|
||||
}
|
||||
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_PKG_ID, getPackage());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_PKG_ID, getPackageID());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_MODEL_ID, getResourceId());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_LANG_ID, getLanguageCode());
|
||||
bundle.putString(KMKeyboardDownloaderActivity.ARG_MODEL_NAME, getResourceName());
|
||||
|
|
@ -90,7 +98,7 @@ public class LexicalModel implements Serializable, LanguageResource {
|
|||
|
||||
public boolean equals(Object obj) {
|
||||
if(obj instanceof LexicalModel) {
|
||||
boolean lgCodeMatch = ((LexicalModel) obj).getLanguageCode().equals(this.getLanguageCode());
|
||||
boolean lgCodeMatch = ((LexicalModel) obj).getLanguageID().equals(this.getLanguageID());
|
||||
boolean idMatch = ((LexicalModel) obj).getResourceId().equals(this.getResourceId());
|
||||
|
||||
return lgCodeMatch && idMatch;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public class CloudDataJsonUtilTest {
|
|||
List<LexicalModel> results = CloudDataJsonUtil.processLexicalModelJSON(cloud);
|
||||
|
||||
LexicalModel lmInfo = results.get(0);
|
||||
Assert.assertEquals("str-latn", lmInfo.getLanguageCode());
|
||||
Assert.assertEquals("str-latn", lmInfo.getLanguageID());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue