Skip to content

Commit 2f3b422

Browse files
authored
Merge pull request #3496 from dhis2/ANDROAPP-5658
fix: [ANDROAPP-5658] Shows snackbar when user does not have connection when trying to sync
2 parents 039ffb7 + 5dca594 commit 2f3b422

File tree

16 files changed

+147
-8
lines changed

16 files changed

+147
-8
lines changed

app/src/main/java/org/dhis2/usescases/datasets/dataSetTable/DataSetTableActivity.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,14 @@ class DataSetTableActivity : ActivityGlobalAbstract(), DataSetTableContract.View
172172
if (hasChanged) presenter.updateData()
173173
}
174174
})
175+
.onNoConnectionListener {
176+
val contextView = findViewById<View>(R.id.navigationBar)
177+
Snackbar.make(
178+
contextView,
179+
R.string.sync_offline_check_connection,
180+
Snackbar.LENGTH_SHORT,
181+
).show()
182+
}
175183
.show(DATAVALUE_SYNC)
176184
}
177185

app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/DataSetDetailActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import androidx.fragment.app.FragmentTransaction;
1717
import androidx.lifecycle.ViewModelProvider;
1818

19+
import com.google.android.material.snackbar.Snackbar;
20+
1921
import org.dhis2.App;
2022
import org.dhis2.R;
2123
import org.dhis2.bindings.ExtensionsKt;
@@ -26,6 +28,7 @@
2628
import org.dhis2.commons.filters.FiltersAdapter;
2729
import org.dhis2.commons.orgunitselector.OUTreeFragment;
2830
import org.dhis2.commons.sync.ConflictType;
31+
import org.dhis2.commons.sync.OnNoConnectionListener;
2932
import org.dhis2.databinding.ActivityDatasetDetailBinding;
3033
import org.dhis2.ui.ThemeManager;
3134
import org.dhis2.usescases.datasets.datasetDetail.datasetList.DataSetListFragment;
@@ -240,10 +243,18 @@ public void setProgress(boolean active) {
240243
@Override
241244
public void showGranularSync() {
242245
presenter.trackDataSetGranularSync();
246+
View contextView = findViewById(R.id.navigationBar);
243247
new SyncStatusDialog.Builder()
244248
.withContext(this, null)
245249
.withSyncContext(new SyncContext.DataSet(dataSetUid))
246250
.onDismissListener(hasChanged -> presenter.refreshList())
251+
.onNoConnectionListener(() ->
252+
Snackbar.make(
253+
contextView,
254+
R.string.sync_offline_check_connection,
255+
Snackbar.LENGTH_SHORT
256+
).show()
257+
)
247258
.show("DATASET_SYNC");
248259
}
249260
}

app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/datasetList/DataSetListFragment.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.fragment.app.viewModels
8+
import com.google.android.material.snackbar.Snackbar
89
import org.dhis2.R
910
import org.dhis2.commons.Constants
1011
import org.dhis2.commons.sync.OnDismissListener
@@ -132,7 +133,16 @@ class DataSetListFragment : FragmentGlobalAbstract() {
132133
viewModel.updateData()
133134
}
134135
}
135-
}).show(FRAGMENT_TAG)
136+
})
137+
.onNoConnectionListener {
138+
val contextView = activity.findViewById<View>(R.id.navigationBar)
139+
Snackbar.make(
140+
contextView,
141+
R.string.sync_offline_check_connection,
142+
Snackbar.LENGTH_SHORT,
143+
).show()
144+
}
145+
.show(FRAGMENT_TAG)
136146
}
137147

138148
companion object {

app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureActivity.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,14 @@ class EventCaptureActivity :
444444
SyncStatusDialog.Builder()
445445
.withContext(this)
446446
.withSyncContext(SyncContext.Event(eventUid!!))
447+
.onNoConnectionListener {
448+
val contextView = findViewById<View>(R.id.navigationBar)
449+
Snackbar.make(
450+
contextView,
451+
R.string.sync_offline_check_connection,
452+
Snackbar.LENGTH_SHORT,
453+
).show()
454+
}
447455
.show("EVENT_SYNC")
448456
}
449457

app/src/main/java/org/dhis2/usescases/main/MainActivity.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import androidx.core.view.ViewCompat
2222
import androidx.databinding.DataBindingUtil
2323
import androidx.drawerlayout.widget.DrawerLayout
2424
import com.google.android.material.dialog.MaterialAlertDialogBuilder
25+
import com.google.android.material.snackbar.Snackbar
2526
import org.dhis2.BuildConfig
2627
import org.dhis2.R
2728
import org.dhis2.bindings.app
@@ -304,6 +305,14 @@ class MainActivity :
304305
}
305306
},
306307
)
308+
.onNoConnectionListener {
309+
val contextView = findViewById<View>(R.id.navigationBar)
310+
Snackbar.make(
311+
contextView,
312+
R.string.sync_offline_check_connection,
313+
Snackbar.LENGTH_SHORT,
314+
).show()
315+
}
307316
.show("ALL_SYNC")
308317
}
309318

app/src/main/java/org/dhis2/usescases/main/program/ProgramFragment.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import androidx.compose.runtime.livedata.observeAsState
1616
import androidx.compose.ui.platform.ViewCompositionStrategy
1717
import androidx.core.view.ViewCompat
1818
import androidx.databinding.DataBindingUtil
19+
import com.google.android.material.snackbar.Snackbar
1920
import org.dhis2.App
2021
import org.dhis2.R
2122
import org.dhis2.android.rtsm.commons.Constants.INTENT_EXTRA_APP_CONFIG
@@ -220,7 +221,16 @@ class ProgramFragment : FragmentGlobalAbstract(), ProgramView {
220221
}
221222
}
222223
},
223-
).show(FRAGMENT_TAG)
224+
)
225+
.onNoConnectionListener {
226+
val contextView = activity?.findViewById<View>(R.id.navigationBar)
227+
Snackbar.make(
228+
contextView!!,
229+
R.string.sync_offline_check_connection,
230+
Snackbar.LENGTH_SHORT,
231+
).show()
232+
}
233+
.show(FRAGMENT_TAG)
224234
}
225235

226236
fun sharedView() = binding.drawerLayout

app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailActivity.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.activity.viewModels
1212
import androidx.constraintlayout.widget.ConstraintSet
1313
import androidx.databinding.DataBindingUtil
1414
import com.google.android.material.dialog.MaterialAlertDialogBuilder
15+
import com.google.android.material.snackbar.Snackbar
1516
import dhis2.org.analytics.charts.ui.GroupAnalyticsFragment
1617
import org.dhis2.R
1718
import org.dhis2.bindings.app
@@ -195,7 +196,16 @@ class ProgramEventDetailActivity :
195196
override fun onDismiss(hasChanged: Boolean) {
196197
if (hasChanged) FilterManager.getInstance().publishData()
197198
}
198-
}).show("EVENT_SYNC")
199+
})
200+
.onNoConnectionListener {
201+
val contextView = findViewById<View>(R.id.navigationBar)
202+
Snackbar.make(
203+
contextView,
204+
R.string.sync_offline_check_connection,
205+
Snackbar.LENGTH_SHORT,
206+
).show()
207+
}
208+
.show("EVENT_SYNC")
199209
}
200210

201211
public override fun onPause() {
@@ -376,7 +386,16 @@ class ProgramEventDetailActivity :
376386
override fun onDismiss(hasChanged: Boolean) {
377387
if (hasChanged) FilterManager.getInstance().publishData()
378388
}
379-
}).show(FRAGMENT_TAG)
389+
})
390+
.onNoConnectionListener {
391+
val contextView = findViewById<View>(R.id.rootView)
392+
Snackbar.make(
393+
contextView,
394+
R.string.sync_offline_check_connection,
395+
Snackbar.LENGTH_SHORT,
396+
).show()
397+
}
398+
.show(FRAGMENT_TAG)
380399
}
381400

382401
private fun showList() {

app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,23 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
332332
}
333333

334334
private void openSyncDialog() {
335+
View contextView = findViewById(R.id.navigationBar);
335336
new SyncStatusDialog.Builder()
336337
.withContext(this, null)
337338
.withSyncContext(
338339
new SyncContext.TrackerProgram(initialProgram)
339340
)
340341
.onDismissListener(hasChanged -> {
341342
if (hasChanged) viewModel.refreshData();
342-
}).show("PROGRAM_SYNC");
343+
})
344+
.onNoConnectionListener(() ->
345+
Snackbar.make(
346+
contextView,
347+
R.string.sync_offline_check_connection,
348+
Snackbar.LENGTH_SHORT
349+
).show()
350+
)
351+
.show("PROGRAM_SYNC");
343352
}
344353

345354
@Override
@@ -582,14 +591,22 @@ public void setPrograms(List<ProgramSpinnerModel> programs) {
582591

583592
@Override
584593
public void showSyncDialog(String enrollmentUid) {
594+
View contextView = findViewById(R.id.navigationBar);
585595
new SyncStatusDialog.Builder()
586596
.withContext(this, null)
587597
.withSyncContext(
588598
new SyncContext.TrackerProgramTei(enrollmentUid)
589599
)
590600
.onDismissListener(hasChanged -> {
591601
if (hasChanged) viewModel.refreshData();
592-
}).show("TEI_SYNC");
602+
})
603+
.onNoConnectionListener(() ->
604+
Snackbar.make(
605+
contextView,
606+
R.string.sync_offline_check_connection,
607+
Snackbar.LENGTH_SHORT
608+
).show()
609+
).show("TEI_SYNC");
593610
}
594611

595612
private void setInitialProgram(List<ProgramSpinnerModel> programs) {

app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidx.lifecycle.LiveData
2121
import androidx.lifecycle.MutableLiveData
2222
import androidx.lifecycle.ViewModelProvider
2323
import androidx.viewpager2.widget.ViewPager2
24+
import com.google.android.material.snackbar.Snackbar
2425
import org.dhis2.App
2526
import org.dhis2.R
2627
import org.dhis2.commons.Constants
@@ -302,7 +303,15 @@ class TeiDashboardMobileActivity :
302303
finish()
303304
}
304305
}
305-
}).show(TEI_SYNC)
306+
})
307+
.onNoConnectionListener {
308+
val contextView = findViewById<View>(R.id.navigationBar)
309+
Snackbar.make(
310+
contextView,
311+
R.string.sync_offline_check_connection,
312+
Snackbar.LENGTH_SHORT,
313+
).show()
314+
}.show(TEI_SYNC)
306315
}
307316
}
308317

app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataFragment.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.recyclerview.widget.DividerItemDecoration
1818
import com.bumptech.glide.Glide
1919
import com.bumptech.glide.load.resource.bitmap.CircleCrop
2020
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
21+
import com.google.android.material.snackbar.Snackbar
2122
import io.reactivex.Flowable
2223
import io.reactivex.Single
2324
import io.reactivex.functions.Consumer
@@ -619,7 +620,15 @@ class TEIDataFragment : FragmentGlobalAbstract(), TEIDataContracts.View {
619620
override fun onDismiss(hasChanged: Boolean) {
620621
if (hasChanged) FilterManager.getInstance().publishData()
621622
}
622-
}).show(enrollmentUid)
623+
})
624+
.onNoConnectionListener {
625+
val contextView = activity?.findViewById<View>(R.id.navigationBar)
626+
Snackbar.make(
627+
contextView!!,
628+
R.string.sync_offline_check_connection,
629+
Snackbar.LENGTH_SHORT,
630+
).show()
631+
}.show(enrollmentUid)
623632
}
624633

625634
override fun displayCatComboOptionSelectorForEvents(data: List<EventViewModel>) {

0 commit comments

Comments
 (0)