diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/custom_views/CoreMalariaFloatingMenu.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/custom_views/CoreMalariaFloatingMenu.java new file mode 100644 index 0000000000..f7d6e9c9ba --- /dev/null +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/custom_views/CoreMalariaFloatingMenu.java @@ -0,0 +1,121 @@ +package org.smartregister.chw.core.custom_views; + +import android.app.Activity; +import android.content.Context; +import android.support.design.widget.FloatingActionButton; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import org.smartregister.chw.core.R; +import org.smartregister.chw.core.listener.OnClickFloatingMenu; +import org.smartregister.chw.malaria.custom_views.BaseMalariaFloatingMenu; +import org.smartregister.chw.malaria.fragment.BaseMalariaCallDialogFragment; + +import static org.smartregister.chw.core.utils.Utils.redrawWithOption; + +public abstract class CoreMalariaFloatingMenu extends BaseMalariaFloatingMenu { + public FloatingActionButton fab; + private Animation fabOpen; + private Animation fabClose; + private Animation rotateForward; + private Animation rotateBack; + private View callLayout; + private View referLayout; + private RelativeLayout activityMain; + private boolean isFabMenuOpen = false; + private LinearLayout menuBar; + private OnClickFloatingMenu onClickFloatingMenu; + + public CoreMalariaFloatingMenu(Context context, String clientName, String clientPhone, + String clientFamilyHeadName, String clientFamilyHeadPhone) { + super(context, clientName, clientPhone, clientFamilyHeadName, clientFamilyHeadPhone); + } + + public CoreMalariaFloatingMenu(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setFloatMenuClickListener(OnClickFloatingMenu onClickFloatingMenu) { + this.onClickFloatingMenu = onClickFloatingMenu; + } + + @Override + protected void initUi() { + inflate(getContext(), R.layout.view_malaria_floating_menu, this); + + fabOpen = AnimationUtils.loadAnimation(getContext(), R.anim.fab_open); + fabClose = AnimationUtils.loadAnimation(getContext(), R.anim.fab_close); + rotateForward = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_forward); + rotateBack = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_back); + + activityMain = findViewById(R.id.activity_main); + menuBar = findViewById(R.id.menu_bar); + + fab = findViewById(R.id.malaria_fab); + fab.setOnClickListener(this); + + callLayout = findViewById(R.id.call_layout); + callLayout.setOnClickListener(this); + callLayout.setClickable(false); + + referLayout = findViewById(R.id.refer_to_facility_layout); + referLayout.setOnClickListener(this); + referLayout.setClickable(false); + + menuBar.setVisibility(GONE); + + } + + @Override + public void onClick(View view) { + onClickFloatingMenu.onClickMenu(view.getId()); + } + + public void animateFAB() { + if (menuBar.getVisibility() == GONE) { + menuBar.setVisibility(VISIBLE); + } + + if (isFabMenuOpen) { + activityMain.setBackgroundResource(R.color.transparent); + fab.startAnimation(rotateBack); + fab.setImageResource(R.drawable.ic_edit_white); + + callLayout.startAnimation(fabClose); + callLayout.setClickable(false); + + referLayout.startAnimation(fabClose); + referLayout.setClickable(false); + isFabMenuOpen = false; + } else { + activityMain.setBackgroundResource(R.color.grey_tranparent_50); + fab.startAnimation(rotateForward); + fab.setImageResource(R.drawable.ic_input_add); + + callLayout.startAnimation(fabOpen); + callLayout.setClickable(true); + + referLayout.startAnimation(fabOpen); + referLayout.setClickable(true); + isFabMenuOpen = true; + } + } + + + public void launchCallWidget() { + BaseMalariaCallDialogFragment.launchDialog((Activity) this.getContext(), getClientName(), + getPhoneNumber(), getFamilyHeadName(), getFamilyHeadPhone()); + } + + public void redraw(boolean hasPhoneNumber) { + redrawWithOption(this, hasPhoneNumber); + } + + public View getCallLayout() { + return callLayout; + } +} diff --git a/opensrp-chw-core/src/main/res/layout/view_malaria_floating_menu.xml b/opensrp-chw-core/src/main/res/layout/view_malaria_floating_menu.xml new file mode 100644 index 0000000000..a0e36b8df0 --- /dev/null +++ b/opensrp-chw-core/src/main/res/layout/view_malaria_floating_menu.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opensrp-chw/src/main/java/org/smartregister/chw/activity/AncMemberProfileActivity.java b/opensrp-chw/src/main/java/org/smartregister/chw/activity/AncMemberProfileActivity.java index 437eed5827..2b6a393bce 100644 --- a/opensrp-chw/src/main/java/org/smartregister/chw/activity/AncMemberProfileActivity.java +++ b/opensrp-chw/src/main/java/org/smartregister/chw/activity/AncMemberProfileActivity.java @@ -294,6 +294,7 @@ public void startFormActivity(JSONObject formJson) { JsonFormUtils.REQUEST_CODE_GET_JSON); } + @Override public List getReferralTypeModels() { return referralTypeModels; diff --git a/opensrp-chw/src/main/java/org/smartregister/chw/activity/MalariaProfileActivity.java b/opensrp-chw/src/main/java/org/smartregister/chw/activity/MalariaProfileActivity.java index 6772defb6a..343dfbc23f 100644 --- a/opensrp-chw/src/main/java/org/smartregister/chw/activity/MalariaProfileActivity.java +++ b/opensrp-chw/src/main/java/org/smartregister/chw/activity/MalariaProfileActivity.java @@ -4,25 +4,35 @@ import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; +import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.TextView; +import android.widget.LinearLayout; +import android.widget.Toast; +import com.google.gson.Gson; + +import org.apache.commons.lang3.StringUtils; +import org.json.JSONException; import org.json.JSONObject; import org.smartregister.chw.R; +import org.smartregister.chw.anc.domain.Visit; +import org.smartregister.chw.anc.util.NCUtils; import org.smartregister.chw.core.contract.FamilyOtherMemberProfileExtendedContract; import org.smartregister.chw.core.contract.FamilyProfileExtendedContract; import org.smartregister.chw.core.dao.AncDao; -import org.smartregister.chw.core.dao.ChildDao; import org.smartregister.chw.core.dao.PNCDao; import org.smartregister.chw.core.interactor.CoreMalariaProfileInteractor; +import org.smartregister.chw.core.listener.OnClickFloatingMenu; import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.custom_view.MalariaFloatingMenu; import org.smartregister.chw.malaria.activity.BaseMalariaProfileActivity; import org.smartregister.chw.malaria.domain.MemberObject; import org.smartregister.chw.malaria.presenter.BaseMalariaProfilePresenter; import org.smartregister.chw.malaria.util.Constants; import org.smartregister.chw.presenter.FamilyOtherMemberActivityPresenter; +import org.smartregister.clientandeventmodel.Event; import org.smartregister.commonregistry.CommonPersonObject; import org.smartregister.commonregistry.CommonPersonObjectClient; import org.smartregister.commonregistry.CommonRepository; @@ -37,8 +47,10 @@ import io.reactivex.schedulers.Schedulers; import timber.log.Timber; +import static org.smartregister.chw.anc.AncLibrary.getInstance; + public class MalariaProfileActivity extends BaseMalariaProfileActivity implements FamilyOtherMemberProfileExtendedContract.View, FamilyProfileExtendedContract.PresenterCallBack { - private static final String CLIENT = "client"; + private static final String CLIENT = "CLIENT"; public static void startMalariaActivity(Activity activity, MemberObject memberObject, CommonPersonObjectClient client) { Intent intent = new Intent(activity, MalariaProfileActivity.class); @@ -47,6 +59,7 @@ public static void startMalariaActivity(Activity activity, MemberObject memberOb activity.startActivity(intent); } + @Override protected void initializePresenter() { showProgressBar(true); @@ -56,8 +69,14 @@ protected void initializePresenter() { } @Override - protected void onCreation() { - super.onCreation(); + protected void setupViews() { + super.setupViews(); + setProfileImage(MEMBER_OBJECT.getBaseEntityId(), null); + if (isAnc(MEMBER_OBJECT)) { + textViewRecordAnc.setVisibility(View.VISIBLE); + visitStatus.setVisibility(View.VISIBLE); + } + } @Override @@ -116,6 +135,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } + @NonNull @Override public FamilyOtherMemberActivityPresenter presenter() { @@ -124,26 +144,23 @@ public FamilyOtherMemberActivityPresenter presenter() { } @Override - public void setProfileImage(String s, String s1) { - //implement + public void setProfileImage(String baseEntityId, String s1) { + imageRenderHelper.refreshProfileImage(baseEntityId, imageView, R.mipmap.ic_member); } @Override public void setProfileName(@NonNull String s) { - TextView textView = findViewById(org.smartregister.malaria.R.id.textview_name); - textView.setText(s); + textViewName.setText(s); } @Override public void setProfileDetailOne(@NonNull String s) { - TextView textView = findViewById(org.smartregister.malaria.R.id.textview_gender); - textView.setText(s); + textViewGender.setText(s); } @Override public void setProfileDetailTwo(@NonNull String s) { - TextView textView = findViewById(org.smartregister.malaria.R.id.textview_address); - textView.setText(s); + textViewLocation.setText(s); } @Override @@ -152,6 +169,37 @@ public void onClick(View view) { int id = view.getId(); if (id == R.id.textview_record_malaria) { MalariaFollowUpVisitActivity.startMalariaRegistrationActivity(this, MEMBER_OBJECT.getBaseEntityId()); + } else if (id == R.id.textview_record_anc) { + AncHomeVisitActivity.startMe(this, MEMBER_OBJECT.getBaseEntityId(), false); + } else if (id == R.id.textview_record_anc_not_done) { + setAncVisitNotDoneView(true); + saveVisit(org.smartregister.chw.anc.util.Constants.EVENT_TYPE.ANC_HOME_VISIT_NOT_DONE); + } else if (id == R.id.textview_undo) { + setAncVisitNotDoneView(false); + } + } + + private void saveVisit(String eventType) { + try { + Event event = org.smartregister.chw.anc.util.JsonFormUtils.createUntaggedEvent(MEMBER_OBJECT.getBaseEntityId(), eventType, org.smartregister.chw.anc.util.Constants.TABLES.ANC_MEMBERS); + Visit visit = NCUtils.eventToVisit(event, org.smartregister.chw.anc.util.JsonFormUtils.generateRandomUUIDString()); + visit.setPreProcessedJson(new Gson().toJson(event)); + getInstance().visitRepository().addVisit(visit); + } catch (JSONException e) { + Timber.e(e); + } + } + + private void setAncVisitNotDoneView(Boolean bool) { + if (bool) { + visitStatus.setVisibility(View.VISIBLE); + textViewRecordAnc.setVisibility(View.GONE); + visitStatus.setVisibility(View.GONE); + } else { + visitStatus.setVisibility(View.GONE); + textViewRecordAnc.setVisibility(View.VISIBLE); + visitStatus.setVisibility(View.VISIBLE); + } } @@ -262,9 +310,9 @@ public MemberType(org.smartregister.chw.anc.domain.MemberObject memberObject, St type = CoreConstants.TABLE_NAME.ANC_MEMBER; } else if (PNCDao.isPNCMember(memberObject.getBaseEntityId())) { type = CoreConstants.TABLE_NAME.PNC_MEMBER; - } else if (ChildDao.isChild(memberObject.getBaseEntityId())) { - type = CoreConstants.TABLE_NAME.CHILD; - } + }// else if (ChildDao.isChild(memberObject.getBaseEntityId())) { + // type = CoreConstants.TABLE_NAME.CHILD; + //} MemberType memberType = new MemberType(memberObject, type); e.onNext(memberType); @@ -328,4 +376,46 @@ public void openFamilyDueServices() { intent.putExtra(CoreConstants.INTENT_KEY.SERVICE_DUE, true); startActivity(intent); } + + private void checkPhoneNumberProvided() { + ((MalariaFloatingMenu) baseMalariaFloatingMenu).redraw(!StringUtils.isBlank(MEMBER_OBJECT.getPhoneNumber()) + || !StringUtils.isBlank(MEMBER_OBJECT.getPhoneNumber())); + } + + + @Override + public void initializeFloatingMenu() { + baseMalariaFloatingMenu = new MalariaFloatingMenu(this, MEMBER_OBJECT); + + OnClickFloatingMenu onClickFloatingMenu = viewId -> { + switch (viewId) { + case R.id.malaria_fab: + checkPhoneNumberProvided(); + ((MalariaFloatingMenu) baseMalariaFloatingMenu).animateFAB(); + break; + case R.id.call_layout: + ((MalariaFloatingMenu) baseMalariaFloatingMenu).launchCallWidget(); + ((MalariaFloatingMenu) baseMalariaFloatingMenu).animateFAB(); + break; + case R.id.refer_to_facility_layout: + Toast.makeText(this, "Refer", Toast.LENGTH_SHORT).show(); + break; + default: + Timber.d("Unknown fab action"); + break; + } + + }; + + ((MalariaFloatingMenu) baseMalariaFloatingMenu).setFloatMenuClickListener(onClickFloatingMenu); + baseMalariaFloatingMenu.setGravity(Gravity.BOTTOM | Gravity.END); + LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.MATCH_PARENT); + addContentView(baseMalariaFloatingMenu, linearLayoutParams); + } + + + protected boolean isAnc(MemberObject memberObject) { + return !memberObject.getAncIsClosed() && memberObject.getGestAge() != null && !memberObject.getGestAge().trim().equals(""); + } } diff --git a/opensrp-chw/src/main/java/org/smartregister/chw/custom_view/MalariaFloatingMenu.java b/opensrp-chw/src/main/java/org/smartregister/chw/custom_view/MalariaFloatingMenu.java new file mode 100644 index 0000000000..7858c2dfb3 --- /dev/null +++ b/opensrp-chw/src/main/java/org/smartregister/chw/custom_view/MalariaFloatingMenu.java @@ -0,0 +1,12 @@ +package org.smartregister.chw.custom_view; + +import android.content.Context; + +import org.smartregister.chw.core.custom_views.CoreMalariaFloatingMenu; +import org.smartregister.chw.malaria.domain.MemberObject; + +public class MalariaFloatingMenu extends CoreMalariaFloatingMenu { + public MalariaFloatingMenu(Context context, MemberObject MEMBER_OBJECT) { + super(context, MEMBER_OBJECT); + } +} diff --git a/opensrp-chw/src/main/java/org/smartregister/chw/model/MalariaRegisterFragmentModel.java b/opensrp-chw/src/main/java/org/smartregister/chw/model/MalariaRegisterFragmentModel.java index 684ee6337e..a0f11d4e91 100644 --- a/opensrp-chw/src/main/java/org/smartregister/chw/model/MalariaRegisterFragmentModel.java +++ b/opensrp-chw/src/main/java/org/smartregister/chw/model/MalariaRegisterFragmentModel.java @@ -3,6 +3,7 @@ import android.support.annotation.NonNull; import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; import org.smartregister.chw.malaria.model.BaseMalariaRegisterFragmentModel; import org.smartregister.chw.util.ChwDBConstants; import org.smartregister.chw.util.Constants; @@ -21,6 +22,7 @@ public String mainSelect(@NonNull String tableName, @NonNull String mainConditio queryBuilder.SelectInitiateMainTable(tableName, mainColumns(tableName)); queryBuilder.customJoin("INNER JOIN " + Constants.TABLE_NAME.FAMILY_MEMBER + " ON " + tableName + "." + DBConstants.KEY.BASE_ENTITY_ID + " = " + Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.BASE_ENTITY_ID + " COLLATE NOCASE "); queryBuilder.customJoin("INNER JOIN " + Constants.TABLE_NAME.FAMILY + " ON " + Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.RELATIONAL_ID + " = " + Constants.TABLE_NAME.FAMILY + "." + DBConstants.KEY.BASE_ENTITY_ID); + queryBuilder.customJoin("LEFT JOIN " + CoreConstants.TABLE_NAME.ANC_MEMBER_LOG + " ON " + tableName + "." + DBConstants.KEY.BASE_ENTITY_ID + " = " + CoreConstants.TABLE_NAME.ANC_MEMBER_LOG + "." + DBConstants.KEY.BASE_ENTITY_ID + " COLLATE NOCASE "); queryBuilder.customJoin("LEFT JOIN " + Constants.TABLE_NAME.ANC_MEMBER + " ON " + tableName + "." + DBConstants.KEY.BASE_ENTITY_ID + " = " + Constants.TABLE_NAME.ANC_MEMBER + "." + DBConstants.KEY.BASE_ENTITY_ID + " COLLATE NOCASE "); queryBuilder.customJoin("LEFT JOIN " + Constants.TABLE_NAME.PNC_MEMBER + " ON " + tableName + "." + DBConstants.KEY.BASE_ENTITY_ID + " = " + Constants.TABLE_NAME.PNC_MEMBER + "." + DBConstants.KEY.BASE_ENTITY_ID + " COLLATE NOCASE "); return queryBuilder.mainCondition(mainCondition); @@ -41,11 +43,19 @@ protected String[] mainColumns(String tableName) { columnList.add(Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.GENDER); columnList.add(Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.UNIQUE_ID); columnList.add(Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.RELATIONAL_ID); + columnList.add(Constants.TABLE_NAME.FAMILY_MEMBER + "." + DBConstants.KEY.PHONE_NUMBER + " as " + org.smartregister.chw.malaria.util.DBConstants.KEY.PHONE_NUMBER_MALARIA); columnList.add(Constants.TABLE_NAME.FAMILY + "." + DBConstants.KEY.VILLAGE_TOWN); columnList.add(Constants.TABLE_NAME.FAMILY + "." + DBConstants.KEY.FAMILY_HEAD); columnList.add(Constants.TABLE_NAME.FAMILY + "." + DBConstants.KEY.PRIMARY_CAREGIVER); columnList.add(Constants.TABLE_NAME.PNC_MEMBER + "." + ChwDBConstants.DELIVERY_DATE); columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + org.smartregister.chw.anc.util.DBConstants.KEY.PHONE_NUMBER); + columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + ChwDBConstants.IS_CLOSED + " as " + org.smartregister.chw.malaria.util.DBConstants.KEY.ANC_IS_CLOSED); + columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + org.smartregister.chw.malaria.util.DBConstants.KEY.GEST_AGE); + columnList.add(Constants.TABLE_NAME.PNC_MEMBER + "." + ChwDBConstants.IS_CLOSED + " as " + org.smartregister.chw.malaria.util.DBConstants.KEY.PNC_IS_CLOSED); + columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + org.smartregister.chw.core.utils.ChwDBConstants.LMP); + columnList.add(CoreConstants.TABLE_NAME.ANC_MEMBER_LOG + "." + org.smartregister.chw.anc.util.DBConstants.KEY.DATE_CREATED); + columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + org.smartregister.chw.anc.util.DBConstants.KEY.CONFIRMED_VISITS); + columnList.add(Constants.TABLE_NAME.ANC_MEMBER + "." + org.smartregister.chw.anc.util.DBConstants.KEY.LAST_HOME_VISIT); columnList.add(Constants.TABLE_NAME.FAMILY + "." + DBConstants.KEY.FIRST_NAME + " as " + org.smartregister.chw.anc.util.DBConstants.KEY.FAMILY_NAME); return columnList.toArray(new String[columnList.size()]); } diff --git a/opensrp-chw/src/main/java/org/smartregister/chw/provider/ChwRegisterProvider.java b/opensrp-chw/src/main/java/org/smartregister/chw/provider/ChwRegisterProvider.java index 5a93a580d8..3bab49993c 100644 --- a/opensrp-chw/src/main/java/org/smartregister/chw/provider/ChwRegisterProvider.java +++ b/opensrp-chw/src/main/java/org/smartregister/chw/provider/ChwRegisterProvider.java @@ -180,4 +180,4 @@ protected void onPostExecute(Void param) { updateDueColumn(context, viewHolder, childVisit); } } -} +} \ No newline at end of file