diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardPickerAdapter.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardPickerAdapter.java index febe8a23ca..100b0ea197 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardPickerAdapter.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardPickerAdapter.java @@ -15,13 +15,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.TextView; import com.tavultesoft.kmea.data.Keyboard; -import com.tavultesoft.kmea.data.adapters.KeyboardsAdapter; -final class KMKeyboardPickerAdapter extends KeyboardsAdapter implements OnClickListener { +final class KMKeyboardPickerAdapter extends ArrayAdapter implements OnClickListener { private final static int KEYBOARD_LAYOUT_RESOURCE = R.layout.list_row_layout3; private Context context; @@ -36,9 +36,9 @@ final class KMKeyboardPickerAdapter extends KeyboardsAdapter implements OnClickL return kbdData; } + // TODO: End goal: take in a KeyboardAdapter instead of this list; reference that as needed. public KMKeyboardPickerAdapter(Context context, List> data) { super(context, KEYBOARD_LAYOUT_RESOURCE, mapCast(data)); - this.context = context; } @Override diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/ModelPickerActivity.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/ModelPickerActivity.java index f2532300cb..588f0f839f 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/ModelPickerActivity.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/ModelPickerActivity.java @@ -26,6 +26,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import com.tavultesoft.kmea.data.adapters.LexicalModelAdapter; import com.tavultesoft.kmea.packages.JSONUtils; import com.tavultesoft.kmea.packages.LexicalModelPackageProcessor; import com.tavultesoft.kmea.packages.PackageProcessor; diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/RepositoryDataset.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/Dataset.java similarity index 67% rename from android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/RepositoryDataset.java rename to android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/Dataset.java index 0f1fa0495c..8bcc2924c5 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/RepositoryDataset.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/Dataset.java @@ -7,11 +7,11 @@ import androidx.annotation.NonNull; import java.util.List; -public class RepositoryDataset extends ArrayAdapter { +public class Dataset extends ArrayAdapter { // Stores internal adapters for keyboard, lexical model listings // 'Items' are language-specific datasets holding their own language-specific adapters. - public RepositoryDataset(@NonNull Context context, int resource, @NonNull List objects) { + private Dataset(@NonNull Context context, int resource, @NonNull List objects) { super(context, resource, objects); } } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/LexicalModel.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/LexicalModel.java new file mode 100644 index 0000000000..9ad32ade69 --- /dev/null +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/LexicalModel.java @@ -0,0 +1,23 @@ +package com.tavultesoft.kmea.data; + +import java.util.Map; + +public class LexicalModel { + public final Map map; + + /* TODO: (v13 refactor) + * Drop the HashMap and instead directly represent the following as object properties: + * + * hashMap.put(KMManager.KMKey_PackageID, packageID); + * hashMap.put(KMManager.KMKey_LanguageID, languageID); + * hashMap.put(KMManager.KMKey_LexicalModelID, modelID); + * hashMap.put(KMManager.KMKey_LexicalModelName, modelName); + * hashMap.put(KMManager.KMKey_LanguageName, langName); + * hashMap.put(KMManager.KMKey_LexicalModelVersion, modelVersion); + * hashMap.put(KMManager.KMKey_CustomModel, isCustom); + */ + + public LexicalModel(Map modelData) { + this.map = modelData; + } +} diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/KeyboardsAdapter.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/KeyboardsAdapter.java index 880e49040f..e70a66ee42 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/KeyboardsAdapter.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/KeyboardsAdapter.java @@ -7,14 +7,25 @@ import androidx.annotation.NonNull; import com.tavultesoft.kmea.data.Keyboard; +import java.util.Collections; import java.util.List; -public class KeyboardsAdapter extends ArrayAdapter { +public class KeyboardsAdapter extends ArrayAdapter implements ListBacked { + private final List data; + public KeyboardsAdapter(@NonNull Context context, int resource, @NonNull List data) { super(context, resource, data); - // We do NOT save a reference to the data; it should always be accessed - // through ArrayAdapter methods. + + // We only want to allow mutations through the adapter, but it's useful to maintain + // a List<> version of the data to assist with other adapters. + this.data = Collections.unmodifiableList(data); + } + + public List asList() { + return this.data; } // getView should be overridden by child instances. + // - repository dataset + // - local dataset } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/LexicalModelAdapter.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/LexicalModelAdapter.java new file mode 100644 index 0000000000..9d6b6698a3 --- /dev/null +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/LexicalModelAdapter.java @@ -0,0 +1,31 @@ +package com.tavultesoft.kmea.data.adapters; + +import android.content.Context; +import android.widget.ArrayAdapter; + +import androidx.annotation.NonNull; + +import com.tavultesoft.kmea.data.LexicalModel; + +import java.util.Collections; +import java.util.List; + +public class LexicalModelAdapter extends ArrayAdapter implements ListBacked { + private final List data; + + public LexicalModelAdapter(@NonNull Context context, int resource, @NonNull List data) { + super(context, resource, data); + + // We only want to allow mutations through the adapter, but it's useful to maintain + // a List<> version of the data to assist with other adapters. + this.data = Collections.unmodifiableList(data); + } + + public List asList() { + return this.data; + } + + // getView should be overridden by child instances. + // - repository dataset + // - local dataset +} diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/ListBacked.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/ListBacked.java new file mode 100644 index 0000000000..e928ef6745 --- /dev/null +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/adapters/ListBacked.java @@ -0,0 +1,7 @@ +package com.tavultesoft.kmea.data.adapters; + +import java.util.List; + +public interface ListBacked { + List asList(); +} \ No newline at end of file