Skip to content

Commit 73e3e30

Browse files
committed
Move lists UI code to new module
1 parent e49eae1 commit 73e3e30

41 files changed

Lines changed: 182 additions & 76 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.circleci/test_modules.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ metadata
2121
selfie-camera
2222
draw
2323
printer
24+
lists

androidshared/src/main/res/values/attrs.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<declare-styleable name="EmptyListView">
4-
<attr name="icon" />
5-
<attr name="title" format="string" />
6-
<attr name="subtitle" format="string" />
7-
</declare-styleable>s
8-
93
<!-- These attributes are extensions to Material 3 -->
104
<declare-styleable name="Material3Custom">
115
<attr name="textAppearanceLabelExtraLarge" format="reference" />

collect_app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ dependencies {
262262
implementation project(':google-maps')
263263
implementation project(':draw')
264264
implementation project(':printer')
265+
implementation project(':lists')
265266

266267
if (getSecrets().getProperty('MAPBOX_DOWNLOADS_TOKEN', '') != '') {
267268
implementation project(':mapbox')

collect_app/src/main/java/org/odk/collect/android/activities/InstanceChooserList.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@
5555
import org.odk.collect.android.utilities.ApplicationConstants;
5656
import org.odk.collect.android.utilities.FormsRepositoryProvider;
5757
import org.odk.collect.android.utilities.InstancesRepositoryProvider;
58-
import org.odk.collect.androidshared.ui.EmptyListView;
5958
import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard;
6059
import org.odk.collect.async.Scheduler;
6160
import org.odk.collect.forms.Form;
6261
import org.odk.collect.forms.instances.Instance;
62+
import org.odk.collect.lists.EmptyListView;
6363
import org.odk.collect.material.MaterialProgressDialogFragment;
6464
import org.odk.collect.settings.SettingsProvider;
6565
import org.odk.collect.settings.keys.MetaKeys;

collect_app/src/main/java/org/odk/collect/android/formhierarchy/FormHierarchyActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@
6464
import org.odk.collect.android.utilities.HtmlUtils;
6565
import org.odk.collect.android.utilities.InstancesRepositoryProvider;
6666
import org.odk.collect.android.utilities.MediaUtils;
67-
import org.odk.collect.androidshared.ui.EmptyListView;
6867
import org.odk.collect.androidshared.ui.DialogFragmentUtils;
6968
import org.odk.collect.androidshared.ui.FragmentFactoryBuilder;
7069
import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard;
7170
import org.odk.collect.async.Scheduler;
7271
import org.odk.collect.audiorecorder.recording.AudioRecorder;
72+
import org.odk.collect.lists.EmptyListView;
7373
import org.odk.collect.location.LocationClient;
7474
import org.odk.collect.permissions.PermissionsChecker;
7575
import org.odk.collect.permissions.PermissionsProvider;

collect_app/src/main/java/org/odk/collect/android/formlists/blankformlist/BlankFormListActivity.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import org.odk.collect.android.injection.DaggerUtils
1616
import org.odk.collect.android.preferences.dialogs.ServerAuthDialogFragment
1717
import org.odk.collect.androidshared.network.NetworkStateProvider
1818
import org.odk.collect.androidshared.ui.DialogFragmentUtils
19-
import org.odk.collect.androidshared.ui.EmptyListView
20-
import org.odk.collect.androidshared.ui.RecyclerViewUtils
2119
import org.odk.collect.androidshared.ui.SnackbarUtils
2220
import org.odk.collect.permissions.PermissionListener
2321
import org.odk.collect.permissions.PermissionsProvider
@@ -57,7 +55,7 @@ class BlankFormListActivity : LocalizedActivity(), OnFormItemClickListener {
5755

5856
val list = findViewById<RecyclerView>(R.id.form_list)
5957
list.layoutManager = LinearLayoutManager(this)
60-
list.addItemDecoration(RecyclerViewUtils.verticalLineDivider(this))
58+
list.addItemDecoration(org.odk.collect.lists.RecyclerViewUtils.verticalLineDivider(this))
6159
list.adapter = adapter
6260

6361
initObservers()
@@ -105,7 +103,7 @@ class BlankFormListActivity : LocalizedActivity(), OnFormItemClickListener {
105103
findViewById<RecyclerView>(R.id.form_list).visibility =
106104
if (forms.isEmpty()) View.GONE else View.VISIBLE
107105

108-
findViewById<EmptyListView>(R.id.empty_list_message).visibility =
106+
findViewById<org.odk.collect.lists.EmptyListView>(R.id.empty_list_message).visibility =
109107
if (forms.isEmpty()) View.VISIBLE else View.GONE
110108

111109
adapter.setData(forms)

collect_app/src/main/java/org/odk/collect/android/formlists/blankformlist/DeleteBlankFormFragment.kt

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ import androidx.lifecycle.map
1515
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1616
import org.odk.collect.android.R
1717
import org.odk.collect.androidshared.ui.FragmentFactoryBuilder
18-
import org.odk.collect.androidshared.ui.RecyclerViewUtils
19-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectAdapter
20-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectControlsFragment
21-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectItem
22-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectListFragment
23-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectViewModel
18+
import org.odk.collect.lists.RecyclerViewUtils
19+
import org.odk.collect.lists.multiselect.MultiSelectAdapter
20+
import org.odk.collect.lists.multiselect.MultiSelectControlsFragment
21+
import org.odk.collect.lists.multiselect.MultiSelectItem
22+
import org.odk.collect.lists.multiselect.MultiSelectListFragment
23+
import org.odk.collect.lists.multiselect.MultiSelectViewModel
2424
import org.odk.collect.strings.R.string
2525

2626
class DeleteBlankFormFragment(
@@ -32,7 +32,12 @@ class DeleteBlankFormFragment(
3232
private val multiSelectViewModel: MultiSelectViewModel<BlankFormListItem> by viewModels {
3333
MultiSelectViewModel.Factory(
3434
blankFormListViewModel.formsToDisplay.map {
35-
it.map { blankForm -> MultiSelectItem(blankForm.databaseId, blankForm) }
35+
it.map { blankForm ->
36+
MultiSelectItem(
37+
blankForm.databaseId,
38+
blankForm
39+
)
40+
}
3641
}
3742
)
3843
}
@@ -42,7 +47,11 @@ class DeleteBlankFormFragment(
4247

4348
childFragmentManager.fragmentFactory = FragmentFactoryBuilder()
4449
.forClass(MultiSelectListFragment::class) {
45-
MultiSelectListFragment(getString(string.delete_file), multiSelectViewModel, ::SelectableBlankFormListItemViewHolder) {
50+
MultiSelectListFragment(
51+
getString(string.delete_file),
52+
multiSelectViewModel,
53+
::SelectableBlankFormListItemViewHolder
54+
) {
4655
it.empty.setIcon(R.drawable.ic_baseline_delete_72)
4756
it.empty.setTitle(getString(string.empty_list_of_forms_to_delete_title))
4857
it.empty.setSubtitle(getString(string.empty_list_of_blank_forms_to_delete_subtitle))

collect_app/src/main/java/org/odk/collect/android/formlists/savedformlist/DeleteSavedFormFragment.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,8 @@ import org.odk.collect.analytics.Analytics
1616
import org.odk.collect.android.R
1717
import org.odk.collect.android.analytics.AnalyticsEvents
1818
import org.odk.collect.androidshared.ui.FragmentFactoryBuilder
19-
import org.odk.collect.androidshared.ui.RecyclerViewUtils
2019
import org.odk.collect.androidshared.ui.SnackbarUtils
2120
import org.odk.collect.androidshared.ui.SnackbarUtils.SnackbarPresenterObserver
22-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectControlsFragment
23-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectItem
24-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectListFragment
25-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectViewModel
2621
import org.odk.collect.forms.instances.Instance
2722
import org.odk.collect.material.MaterialProgressDialogFragment
2823
import org.odk.collect.strings.R.string
@@ -33,10 +28,15 @@ class DeleteSavedFormFragment(
3328
) : Fragment() {
3429

3530
private val savedFormListViewModel: SavedFormListViewModel by viewModels { viewModelFactory }
36-
private val multiSelectViewModel: MultiSelectViewModel<Instance> by viewModels {
37-
MultiSelectViewModel.Factory(
31+
private val multiSelectViewModel: org.odk.collect.lists.multiselect.MultiSelectViewModel<Instance> by viewModels {
32+
org.odk.collect.lists.multiselect.MultiSelectViewModel.Factory(
3833
savedFormListViewModel.formsToDisplay.map {
39-
it.map { instance -> MultiSelectItem(instance.dbId, instance) }
34+
it.map { instance ->
35+
org.odk.collect.lists.multiselect.MultiSelectItem(
36+
instance.dbId,
37+
instance
38+
)
39+
}
4040
}
4141
)
4242
}
@@ -45,22 +45,26 @@ class DeleteSavedFormFragment(
4545
super.onAttach(context)
4646

4747
childFragmentManager.fragmentFactory = FragmentFactoryBuilder()
48-
.forClass(MultiSelectListFragment::class) {
49-
MultiSelectListFragment(getString(string.delete_file), multiSelectViewModel, ::SelectableSavedFormListItemViewHolder) {
48+
.forClass(org.odk.collect.lists.multiselect.MultiSelectListFragment::class) {
49+
org.odk.collect.lists.multiselect.MultiSelectListFragment(
50+
getString(string.delete_file),
51+
multiSelectViewModel,
52+
::SelectableSavedFormListItemViewHolder
53+
) {
5054
it.empty.setIcon(R.drawable.ic_baseline_delete_72)
5155
it.empty.setTitle(getString(string.empty_list_of_forms_to_delete_title))
5256
it.empty.setSubtitle(getString(string.empty_list_of_saved_forms_to_delete_subtitle))
5357

54-
it.list.addItemDecoration(RecyclerViewUtils.verticalLineDivider(context))
58+
it.list.addItemDecoration(org.odk.collect.lists.RecyclerViewUtils.verticalLineDivider(context))
5559
}
5660
}
5761
.build()
5862

5963
childFragmentManager.setFragmentResultListener(
60-
MultiSelectControlsFragment.REQUEST_ACTION,
64+
org.odk.collect.lists.multiselect.MultiSelectControlsFragment.REQUEST_ACTION,
6165
this
6266
) { _, result ->
63-
val selected = result.getLongArray(MultiSelectControlsFragment.RESULT_SELECTED)!!
67+
val selected = result.getLongArray(org.odk.collect.lists.multiselect.MultiSelectControlsFragment.RESULT_SELECTED)!!
6468
onDeleteSelected(selected)
6569
}
6670
}

collect_app/src/main/java/org/odk/collect/android/formlists/savedformlist/SelectableSavedFormListItemViewHolder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import android.view.View
44
import android.view.ViewGroup
55
import android.widget.CheckBox
66
import org.odk.collect.android.R
7-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectAdapter
87
import org.odk.collect.forms.instances.Instance
98

109
class SelectableSavedFormListItemViewHolder(parent: ViewGroup) :
11-
MultiSelectAdapter.ViewHolder<Instance>(
10+
org.odk.collect.lists.multiselect.MultiSelectAdapter.ViewHolder<Instance>(
1211
SavedFormListItemView(parent.context)
1312
) {
1413
private var selectView = itemView

collect_app/src/main/java/org/odk/collect/android/instancemanagement/send/InstanceUploaderListActivity.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static org.odk.collect.android.utilities.ApplicationConstants.SortingOrder.BY_DATE_DESC;
2121
import static org.odk.collect.android.utilities.ApplicationConstants.SortingOrder.BY_NAME_ASC;
2222
import static org.odk.collect.android.utilities.ApplicationConstants.SortingOrder.BY_NAME_DESC;
23-
import static org.odk.collect.androidshared.ui.multiselect.MultiSelectViewModelKt.updateSelectAll;
2423

2524
import android.content.Intent;
2625
import android.database.Cursor;
@@ -65,9 +64,9 @@
6564
import org.odk.collect.android.projects.ProjectsDataService;
6665
import org.odk.collect.androidshared.network.NetworkStateProvider;
6766
import org.odk.collect.androidshared.ui.MenuExtKt;
68-
import org.odk.collect.androidshared.ui.multiselect.MultiSelectViewModel;
6967
import org.odk.collect.androidshared.ui.ToastUtils;
7068
import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard;
69+
import org.odk.collect.lists.multiselect.MultiSelectViewModel;
7170
import org.odk.collect.settings.SettingsProvider;
7271
import org.odk.collect.settings.keys.ProjectKeys;
7372
import org.odk.collect.strings.localization.LocalizedActivity;
@@ -151,7 +150,7 @@ public void onCreate(Bundle savedInstanceState) {
151150
multiSelectViewModel = new ViewModelProvider(this).get(MultiSelectViewModel.class);
152151
multiSelectViewModel.getSelected().observe(this, ids -> {
153152
binding.uploadButton.setEnabled(!ids.isEmpty());
154-
allSelected = updateSelectAll(binding.toggleButton, listAdapter.getCount(), ids.size());
153+
allSelected = org.odk.collect.lists.multiselect.MultiSelectViewModelKt.updateSelectAll(binding.toggleButton, listAdapter.getCount(), ids.size());
155154

156155
listAdapter.setSelected(ids);
157156
});

0 commit comments

Comments
 (0)