/*
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.mobile.activities.syncedpatients;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.openmrs.mobile.R;
import org.openmrs.mobile.activities.ACBaseFragment;
import org.openmrs.mobile.activities.lastviewedpatients.LastViewedPatientsActivity;
import org.openmrs.mobile.application.OpenMRS;
import org.openmrs.mobile.models.Patient;
import org.openmrs.mobile.utilities.FontsUtil;
import org.openmrs.mobile.utilities.NetworkUtils;
import java.util.ArrayList;
import java.util.List;
public class SyncedPatientsFragment extends ACBaseFragment<SyncedPatientsContract.Presenter> implements SyncedPatientsContract.View {
// Fragment components
private TextView mEmptyList;
private RecyclerView mSyncedPatientRecyclerView;
//Initialization Progress bar
private ProgressBar mProgressBar;
private MenuItem mAddPatientMenuItem;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_synced_patients, container, false);
// Patient list config
mSyncedPatientRecyclerView = (RecyclerView) root.findViewById(R.id.syncedPatientRecyclerView);
mSyncedPatientRecyclerView.setHasFixedSize(true);
mSyncedPatientRecyclerView.setAdapter(new SyncedPatientsRecyclerViewAdapter(this,
new ArrayList<Patient>()));
mSyncedPatientRecyclerView.setVisibility(View.GONE);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(root.getContext());
mSyncedPatientRecyclerView.setLayoutManager(linearLayoutManager);
mEmptyList = (TextView) root.findViewById(R.id.emptySyncedPatientList);
mProgressBar = (ProgressBar) root.findViewById(R.id.syncedPatientsInitialProgressBar);
// Font config
FontsUtil.setFont((ViewGroup) this.getActivity().findViewById(android.R.id.content));
return root;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.syncbutton:
enableAddPatient(OpenMRS.getInstance().getSyncState());
break;
case R.id.actionAddPatients:
if (NetworkUtils.hasNetwork()) {
Intent intent = new Intent(getActivity(), LastViewedPatientsActivity.class);
startActivity(intent);
}else {
NoInternetConnectionSnackbar();
}
break;
default:
// Do nothing
break;
}
return super.onOptionsItemSelected(item);
}
/**
* This method is used to update data in SyncedPatientRecyclerView.
* It creates SyncedPatientsRecyclerViewAdapter and fills it with fresh data.
* Then new instance of SyncedPatientsRecyclerViewAdapter is set to its SyncedPatientRecyclerView.
*
* @param patientList new set of data
*/
@Override
public void updateAdapter(List<Patient> patientList) {
SyncedPatientsRecyclerViewAdapter adapter = new SyncedPatientsRecyclerViewAdapter(this, patientList);
adapter.notifyDataSetChanged();
mSyncedPatientRecyclerView.setAdapter(adapter);
}
@Override
public void updateListVisibility(boolean isVisible) {
mProgressBar.setVisibility(View.GONE);
if (isVisible) {
mSyncedPatientRecyclerView.setVisibility(View.VISIBLE);
mEmptyList.setVisibility(View.GONE);
} else {
mSyncedPatientRecyclerView.setVisibility(View.GONE);
mEmptyList.setVisibility(View.VISIBLE);
mEmptyList.setText(getString(R.string.search_patient_no_results));
}
}
@Override
public void updateListVisibility(boolean isVisible, @NonNull String replacementWord) {
if (isVisible) {
mSyncedPatientRecyclerView.setVisibility(View.VISIBLE);
mEmptyList.setVisibility(View.GONE);
} else {
mSyncedPatientRecyclerView.setVisibility(View.GONE);
mEmptyList.setVisibility(View.VISIBLE);
mEmptyList.setText(getString(R.string.search_patient_no_result_for_query, replacementWord));
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
super.onCreateOptionsMenu(menu, menuInflater);
mAddPatientMenuItem = menu.findItem(R.id.actionAddPatients);
enableAddPatient(OpenMRS.getInstance().getSyncState());
}
private void enableAddPatient(boolean enabled) {
int resId = enabled ? R.drawable.ic_add : R.drawable.ic_add_disabled;
mAddPatientMenuItem.setEnabled(enabled);
mAddPatientMenuItem.setIcon(resId);
}
private void NoInternetConnectionSnackbar() {
Snackbar mSnackbar = Snackbar.make(getActivity().findViewById(android.R.id.content),
R.string.snackbar_no_internet_connection, Snackbar.LENGTH_SHORT);
View sbView = mSnackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
mSnackbar.show();
}
/**
* @return New instance of SyncedPatientsFragment
*/
public static SyncedPatientsFragment newInstance() {
return new SyncedPatientsFragment();
}
}