...
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 components - Any additional components which do not follow the standard register layout.
...
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
- Non Register Click Listener : The onClickListener for this non register buttons.
- 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
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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", "column1 < 200 AND column2 = 'live'", "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 (householdRegistermyRegister.isAllowed()){ // TODO automate and call automatically without need to call resetCount householdRegistermyRegister.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 householdRegistermyRegister.overrideRegisterCount(R.id.txt_my_count_type_2, count1+count2, "B2"); } } |
A complete example would be
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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", "column1 < 200 AND column2 = 'live'", "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;
}
}
};
} |