Skip to content

Commit

Permalink
add timeline events header
Browse files Browse the repository at this point in the history
Signed-off-by: Pablo <[email protected]>
  • Loading branch information
Balcan committed Feb 5, 2024
1 parent b5cdb0b commit 5f831f0
Show file tree
Hide file tree
Showing 22 changed files with 239 additions and 780 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,8 @@ interface DashboardRepository {
): Observable<List<kotlin.Pair<TrackedEntityAttribute, TrackedEntityAttributeValue>>>

fun getDashboardModel(): DashboardModel

fun getGrouping(): Boolean

fun setGrouping(groupEvent: Boolean)
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package org.dhis2.usescases.teiDashboard

import com.google.gson.reflect.TypeToken
import dhis2.org.analytics.charts.Charts
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.functions.Function
import org.dhis2.bindings.profilePicturePath
import org.dhis2.commons.data.tuples.Pair
import org.dhis2.commons.resources.ResourceManager
import org.dhis2.commons.prefs.Preference
import org.dhis2.commons.prefs.PreferenceProvider
import org.dhis2.utils.AuthorityException
import org.dhis2.utils.DateUtils
import org.dhis2.utils.ValueUtils
Expand Down Expand Up @@ -40,8 +42,8 @@ class DashboardRepositoryImpl(
private val teiUid: String,
private val programUid: String?,
private val enrollmentUid: String?,
private val resources: ResourceManager,
private val teiAttributesProvider: TeiAttributesProvider,
private val preferenceProvider: PreferenceProvider,
) : DashboardRepository {
override fun getTeiHeader(): String? {
return d2.trackedEntityModule().trackedEntitySearch()
Expand Down Expand Up @@ -557,6 +559,30 @@ class DashboardRepositoryImpl(
}
}

override fun getGrouping(): Boolean {
return getGroupingOptions().getOrDefault(programUid, true)
}

override fun setGrouping(groupEvent: Boolean) {
val groups = getGroupingOptions()
programUid?.let { groups[programUid] = groupEvent }
preferenceProvider.saveAsJson<Map<String, Boolean>>(
Preference.GROUPING,
groups,
)
}

private fun getGroupingOptions(): HashMap<String, Boolean> {
val typeToken: TypeToken<HashMap<String, Boolean>> =
object : TypeToken<HashMap<String, Boolean>>() {}
val grouping = preferenceProvider.getObjectFromJson(
Preference.GROUPING,
typeToken,
HashMap(),
)
return grouping
}

override fun getTETypeName(): String? {
return getTrackedEntityInstance(teiUid).flatMap { tei: TrackedEntityInstance ->
d2.trackedEntityModule().trackedEntityTypes()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,12 @@ class DashboardViewModel(
private val _dashboardModel = MutableLiveData<DashboardModel>()
var dashboardModel: LiveData<DashboardModel> = _dashboardModel

private val _groupByStage = MutableLiveData<Boolean>()
val groupByStage: LiveData<Boolean> = _groupByStage

init {
fetchDashboardModel()
fetchGrouping()
}

private fun fetchDashboardModel() {
Expand All @@ -69,6 +73,23 @@ class DashboardViewModel(
}
}

private fun fetchGrouping() {
viewModelScope.launch {
val result = async(context = Dispatchers.IO) {
repository.getGrouping()
}
try {
_groupByStage.value = result.await()
} catch (_: Exception) {
}
}
}

fun setGrouping(groupEvents: Boolean) {
repository.setGrouping(groupEvents)
_groupByStage.value = groupEvents
}

fun eventUid(): LiveData<String> {
return eventUid
}
Expand Down Expand Up @@ -124,7 +145,7 @@ class DashboardViewModel(
}
}
try {
val hasMoreEnrollments = result.await()
result.await()
} catch (e: AuthorityException) {
onAuthorityError()
} catch (e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ public interface View extends AbstractActivityContracts.View {

public interface Presenter {

void init();

void showDescription(String description);

void onBackPressed();
Expand All @@ -55,8 +53,6 @@ public interface Presenter {

void prefSaveCurrentProgram(String programUid);

Boolean getProgramGrouping();

void handleShowHideFilters(boolean showFilter);

EnrollmentStatus getEnrollmentStatus(String enrollmentUid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package org.dhis2.usescases.teiDashboard
import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.os.Handler
Expand Down Expand Up @@ -89,7 +88,7 @@ class TeiDashboardMobileActivity :
var adapter: DashboardPagerAdapter? = null
private lateinit var dashboardViewModel: DashboardViewModel
private var fromRelationship = false
private var groupByStage: MutableLiveData<Boolean>? = null

private var relationshipMap: MutableLiveData<Boolean> = MutableLiveData(false)

private var elevation = 0f
Expand All @@ -98,7 +97,7 @@ class TeiDashboardMobileActivity :
private val detailsLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult(),
) {
presenter.init()

}

private val teiProgramListLauncher = registerForActivityResult(
Expand Down Expand Up @@ -152,7 +151,6 @@ class TeiDashboardMobileActivity :
).inject(this)
setTheme(themeManager.getProgramTheme())
super.onCreate(savedInstanceState)
groupByStage = MutableLiveData(presenter.programGrouping)
dashboardViewModel =
ViewModelProvider(this, viewModelFactory)[DashboardViewModel::class.java]
binding = DataBindingUtil.setContentView(this, R.layout.activity_dashboard_mobile)
Expand Down Expand Up @@ -263,10 +261,6 @@ class TeiDashboardMobileActivity :
presenter.refreshTabCounters()
}

override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
}

override fun onPause() {
presenter.onDettach()
super.onPause()
Expand Down Expand Up @@ -423,7 +417,6 @@ class TeiDashboardMobileActivity :
override fun restoreAdapter(programUid: String?) {
adapter = null
this.programUid = programUid
presenter.init()
}

override fun handleTeiDeletion() {
Expand Down Expand Up @@ -545,7 +538,7 @@ class TeiDashboardMobileActivity :
override fun showMoreOptions(view: View?) {
val menu: Int = if (enrollmentUid == null) {
R.menu.dashboard_tei_menu
} else if (java.lang.Boolean.TRUE == groupByStage?.value) {
} else if (java.lang.Boolean.TRUE == dashboardViewModel.groupByStage.value) {
R.menu.dashboard_menu_group
} else {
R.menu.dashboard_menu
Expand Down Expand Up @@ -583,8 +576,8 @@ class TeiDashboardMobileActivity :
R.id.deleteTei -> presenter.deleteTei()
R.id.deleteEnrollment -> dashboardViewModel.deleteEnrollment { authorityErrorMessage() }
R.id.programSelector -> presenter.onEnrollmentSelectorClick()
R.id.groupEvents -> groupByStage?.setValue(true)
R.id.showTimeline -> groupByStage?.setValue(false)
R.id.groupEvents -> dashboardViewModel.setGrouping(true)
R.id.showTimeline -> dashboardViewModel.setGrouping(false)
R.id.complete -> {
dashboardViewModel.updateEnrollmentStatus(
EnrollmentStatus.COMPLETED,
Expand Down Expand Up @@ -614,10 +607,6 @@ class TeiDashboardMobileActivity :
return null
}

fun observeGrouping(): LiveData<Boolean>? {
return groupByStage
}

override fun relationshipMap(): LiveData<Boolean> {
return relationshipMap
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import dhis2.org.analytics.charts.Charts
import org.dhis2.commons.di.dagger.PerActivity
import org.dhis2.commons.matomo.MatomoAnalyticsController
import org.dhis2.commons.prefs.PreferenceProvider
import org.dhis2.commons.resources.ResourceManager
import org.dhis2.commons.schedulers.SchedulerProvider
import org.dhis2.data.forms.EnrollmentFormRepository
import org.dhis2.data.forms.FormRepository
Expand Down Expand Up @@ -57,7 +56,7 @@ class TeiDashboardModule(
fun dashboardRepository(
d2: D2,
charts: Charts,
resources: ResourceManager,
preferenceProvider: PreferenceProvider,
teiAttributesProvider: TeiAttributesProvider,
): DashboardRepository {
return DashboardRepositoryImpl(
Expand All @@ -66,8 +65,8 @@ class TeiDashboardModule(
teiUid,
programUid,
enrollmentUid,
resources,
teiAttributesProvider,
preferenceProvider,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,17 @@
import static org.dhis2.commons.matomo.Actions.OPEN_RELATIONSHIPS;
import static org.dhis2.commons.matomo.Categories.DASHBOARD;
import static org.dhis2.utils.analytics.AnalyticsConstants.CLICK;
import static org.dhis2.utils.analytics.AnalyticsConstants.DELETE_ENROLL;
import static org.dhis2.utils.analytics.AnalyticsConstants.DELETE_TEI;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import com.google.gson.reflect.TypeToken;

import org.dhis2.commons.Constants;
import org.dhis2.commons.matomo.MatomoAnalyticsController;
import org.dhis2.commons.prefs.Preference;
import org.dhis2.commons.prefs.PreferenceProvider;
import org.dhis2.commons.schedulers.SchedulerProvider;
import org.dhis2.utils.AuthorityException;
import org.dhis2.utils.analytics.AnalyticsHelper;
import org.hisp.dhis.android.core.common.Unit;
import org.hisp.dhis.android.core.enrollment.EnrollmentStatus;
import org.hisp.dhis.android.core.program.Program;

import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.processors.PublishProcessor;
import timber.log.Timber;
Expand Down Expand Up @@ -68,11 +56,6 @@ public TeiDashboardPresenter(
notesCounterProcessor = PublishProcessor.create();
}

@Override
public void init() {

}

@Override
public String getTEType() {
return dashboardRepository.getTETypeName();
Expand Down Expand Up @@ -102,7 +85,6 @@ public void onEnrollmentSelectorClick() {
public void setProgram(Program program) {
this.programUid = program.uid();
view.restoreAdapter(programUid);
init();
}

@Override
Expand Down Expand Up @@ -175,15 +157,6 @@ public void prefSaveCurrentProgram(String programUid) {
preferenceProvider.setValue(Constants.PREVIOUS_DASHBOARD_PROGRAM, programUid);
}

@Override
public Boolean getProgramGrouping() {
if (programUid != null) {
return getGrouping().containsKey(programUid) ? getGrouping().get(programUid) : true;
} else {
return false;
}
}

@Override
public void handleShowHideFilters(boolean showFilters) {
if (showFilters) {
Expand Down Expand Up @@ -213,14 +186,4 @@ public void updateEnrollmentStatus(String enrollmentUid, EnrollmentStatus status
}, Timber::e)
);
}

private Map<String, Boolean> getGrouping() {
TypeToken<HashMap<String, Boolean>> typeToken =
new TypeToken<HashMap<String, Boolean>>() {
};
return preferenceProvider.getObjectFromJson(
Preference.GROUPING,
typeToken,
new HashMap<>());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import io.reactivex.functions.Consumer
import org.dhis2.commons.data.EventCreationType
import org.dhis2.commons.data.EventViewModel
import org.dhis2.commons.data.StageSection
import org.dhis2.commons.filters.FilterItem
import org.dhis2.commons.filters.FilterManager.PeriodRequest
import org.dhis2.usescases.general.AbstractActivityContracts
import org.hisp.dhis.android.core.enrollment.Enrollment
import org.hisp.dhis.android.core.enrollment.EnrollmentStatus
Expand All @@ -30,23 +28,17 @@ class TEIDataContracts {
fun openEventDetails(intent: Intent, options: ActivityOptionsCompat)
fun openEventInitial(intent: Intent)
fun openEventCapture(intent: Intent)
fun showTeiImage(filePath: String, defaultIcon: String)
fun setFilters(filterItems: List<FilterItem>)
fun observeStageSelection(
currentProgram: Program,
currentEnrollment: Enrollment,
): Flowable<StageSection>

fun setEnrollmentData(program: Program?, enrollment: Enrollment?)

fun showPeriodRequest(periodRequest: PeriodRequest)
fun openOrgUnitTreeSelector(programUid: String)
fun setEnrollment(enrollment: Enrollment)
fun showSyncDialog(eventUid: String, enrollmentUid: String)
fun displayCatComboOptionSelectorForEvents(data: List<EventViewModel>)

fun showProgramRuleErrorMessage()
fun showCatOptComboDialog(catComboUid: String)
fun goToEventInitial(eventCreationType: EventCreationType, programStage: ProgramStage)
}
}
Loading

0 comments on commit 5f831f0

Please sign in to comment.