Home is the main Register screen which user sees right after Login. There you control the overall flow of application and navigation to different registers. This also setups different background services which need to run for optimized working of app. This also starts FormSyncer service.
To start a Home screen you just need to implement goToHome() in your login activity as mentioned in Login and navigation is taken care of by core app. Now you need two things.
- Create a view or layout for your Home as done here
- Create an Activity extending NativeHomeActivity from core app. This would take care all background and sync services. Find a working example here
The Home screen here represent 4 registers each having a different type of service. Following are main components of Home
- App logo .. TBD How to change the logo without code
- Unsynced forms count - Shows the data entries which have not been submitted to server yet
- Register - Explained in detail below
- Non Register modules - Any additional components which do not follow the standard register layout.
Register
A register is a class im core app and is the main component which controls the naviation to different services and this is the most important part where you have to provide the implementation. Following are main components of register which must be provided when initializing Home
- Permission or Role : Which permission or role of user should be checked to allow him see this view. TBD role
- Container Id : The id of register main Layout or container. This is to control visibility of register
- Register Button Id : The id on button which implements the navigation on click event. This allows forwarding all onclick events to custom listener
- Register Click Listener : The onClickListener for this register
- Register Count Views : The badges which display counts for registers
- Each Register count view has following components
- View Id : This is the id of TextView which is display for count
- Table : Which table it displays data from. This is the bindtype where data is managed for given beneficiary. Read more about Bind Types.
- Filter : Any custom filter to be applied to count query
- Postfix : Any post fix to add to badge incase there are multiple badges for one register. This is to distinguish count type
- Count Method : Should app automatically calculates count or developer want to provide count using a custom complex query. Possible values AUTO, MANUAL, NONE
- Each Register count view has following components
Following is an example of how you initialize a Register with two badges
public void setupViewsAndListeners() { Register myRegister = initRegister("View Permission For Register in OpenMRS", R.id.myRegisterContainer, R.id.btn_my_register, onRegisterStartListener, new RegisterCountView[]{ new RegisterCountView(R.id.txt_my_count_type_1, "mybindType1", "", "B1", CountMethod.AUTO), new RegisterCountView(R.id.txt_my_count_type_2, "mybindType2", "", "B2", CountMethod.AUTO), }); } // You can override count for a badge like below in method updateRegisterCounts protected void updateRegisterCounts(HomeContext homeContext) { if (myRegister.isAllowed()){ // TODO automate and call automatically without need to call resetCount myRegister.resetRegisterCounts(); int count1 = myRegister.getCountView(R.id.txt_my_count_type_1).getCurrentCount(); int count2 = myRegister.getCountView(R.id.txt_my_count_type_2).getCurrentCount(); // Actual count to display should be count1+count2 so override myRegister.overrideRegisterCount(R.id.txt_my_count_type_2, count1+count2, "B2"); } }
A complete example would be
public class MyHomeActivity extends NativeHomeActivity { Activity activity=this; // keep a reference to register for custom tasks private Register myRegister; private final String TAG = getClass().getName(); @Override public int smartRegistersHomeLayout() { return R.layout.smart_registers_home; } @Override protected void onCreation() { super.onCreation(); navigationController = new ImmunizationNavigationController(this);//todo refactor and maybe remove this method } @Override public void setupViewsAndListeners() { myRegister = initRegister("View Permission For Register in OpenMRS", R.id.myRegisterContainer, R.id.btn_my_register, onRegisterStartListener, new RegisterCountView[]{ new RegisterCountView(R.id.txt_my_count_type_1, "mybindType1", "", "B1", CountMethod.AUTO), new RegisterCountView(R.id.txt_my_count_type_2, "mybindType2", "", "B2", CountMethod.AUTO), }); } @Override // You can override count for a badge like below in method updateRegisterCounts protected void updateRegisterCounts(HomeContext homeContext) { if (myRegister.isAllowed()){ // TODO automate and call automatically without need to call resetCount myRegister.resetRegisterCounts(); int count1 = myRegister.getCountView(R.id.txt_my_count_type_1).getCurrentCount(); int count2 = myRegister.getCountView(R.id.txt_my_count_type_2).getCurrentCount(); // Actual count to display should be count1+count2 so override myRegister.overrideRegisterCount(R.id.txt_my_count_type_2, count1+count2, "B2"); } } private View.OnClickListener onRegisterStartListener = new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_my_register: activity.startActivity(new Intent(activity, MyRegisterActivity.class)); break; case R.id.btn_register2: // for other registers break; } } }; // on click listener for non register buttons private View.OnClickListener onButtonsClickListener = new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_non_register_function1: // start activity 1 break; case R.id.btn_non_register_function2: // start activity 2 activity.startActivity(new Intent(activity, MyActivity2.class)); break; } } }; }
Add Comment