Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Home screen here represent 4 registers each having a different type of service. Following are main components of Home

  1. App logo .. TBD How to change the logo without code
  2. Unsynced forms count - Shows the data entries which have not been submitted to server yet
  3. Register - Explained in detail below
  4. 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

  1. Permission or Role : Which permission or role of user should be checked to allow him see this view. TBD role
  2. Container Id : The id of register main Layout or container. This is to control visibility of register
  3. Register Button Id : The id on button which implements the navigation on click event. This allows forwarding all onclick events to custom listener
  4. Register Click Listener : The onClickListener for this register
  5. Non Register Click Listener : The onClickListener for this non register buttons.
  6. Register Count Views : The badges which display counts for registers
    1. Each Register count view has following components
      1. View Id : This is the id of TextView which is display for count
      2. Table : Which table it displays data from. This is the bindtype where data is managed for given beneficiary. Read more about Bind Types.
      3. Filter : Any custom filter to be applied to count query
      4. Postfix : Any post fix to add to badge incase there are multiple badges for one register. This is to distinguish count type
      5. Count Method : Should app automatically calculates count or developer want to provide count using a custom complex query. Possible values AUTO, MANUAL, NONE

...

Code Block
languagejava
themeEclipse
titleExample Register Initialization
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 (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");
    }
}

...

Code Block
languagejava
themeEclipse
titleExample Home Activity
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;
            }
        }
    };
}

...