package org.openlmis.core.view.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
import org.joda.time.DateTime;
import org.openlmis.core.LMISApp;
import org.openlmis.core.R;
import org.openlmis.core.googleAnalytics.ScreenName;
import org.openlmis.core.googleAnalytics.TrackerActions;
import org.openlmis.core.presenter.SelectPeriodPresenter;
import org.openlmis.core.utils.Constants;
import org.openlmis.core.utils.InjectPresenter;
import org.openlmis.core.utils.TrackRnREventUtil;
import org.openlmis.core.view.adapter.SelectPeriodAdapter;
import org.openlmis.core.view.viewmodel.SelectInventoryViewModel;
import org.openlmis.core.view.widget.SingleClickButtonListener;
import java.util.List;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
@ContentView(R.layout.activity_select_period)
public class SelectPeriodActivity extends BaseActivity implements SelectPeriodPresenter.SelectPeriodView {
@InjectView(R.id.tv_select_period_instruction)
protected TextView tvInstruction;
@InjectView(R.id.vg_inventory_date_container)
protected GridView vgContainer;
@InjectView(R.id.btn_select_period_next)
protected Button nextBtn;
@InjectView(R.id.tv_select_period_warning)
protected TextView tvSelectPeriodWarning;
@InjectPresenter(SelectPeriodPresenter.class)
SelectPeriodPresenter presenter;
private SelectPeriodAdapter adapter;
private SelectInventoryViewModel selectedInventory;
private String programCode;
private boolean isMissedPeriod;
@Override
protected ScreenName getScreenName() {
return ScreenName.SelectPeriodScreen;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
this.programCode = getIntent().getStringExtra(Constants.PARAM_PROGRAM_CODE);
isMissedPeriod = getIntent().getBooleanExtra(Constants.PARAM_IS_MISSED_PERIOD, false);
super.onCreate(savedInstanceState);
init();
}
@Override
protected int getThemeRes() {
switch (programCode) {
case Constants.MMIA_PROGRAM_CODE:
return R.style.AppTheme_AMBER;
case Constants.VIA_PROGRAM_CODE:
return R.style.AppTheme_PURPLE;
default:
return super.getThemeRes();
}
}
private void init() {
invalidateNextBtn();
DateTime date = new DateTime(LMISApp.getInstance().getCurrentTimeMillis());
if (LMISApp.getInstance().getFeatureToggleFor(R.bool.feature_training)) {
tvInstruction.setText(Html.fromHtml(this.getString(R.string.label_training_select_close_of_period, date.monthOfYear().getAsShortText(), date.toString("dd MMM"))));
} else {
tvInstruction.setText(Html.fromHtml(this.getString(R.string.label_select_close_of_period, date.monthOfYear().getAsShortText(), date.toString("dd MMM"))));
}
presenter.loadData(programCode);
adapter = new SelectPeriodAdapter();
vgContainer.setAdapter(adapter);
bindListeners();
}
private void bindListeners() {
vgContainer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedInventory = adapter.getItem(position);
invalidateNextBtn();
}
});
nextBtn.setOnClickListener(new SingleClickButtonListener() {
@Override
public void onSingleClick(View v) {
if (selectedInventory == null) {
tvSelectPeriodWarning.setVisibility(View.VISIBLE);
return;
}
nextBtn.setEnabled(false);
Intent intent = new Intent();
intent.putExtra(Constants.PARAM_SELECTED_INVENTORY_DATE, selectedInventory.getInventoryDate());
intent.putExtra(Constants.PARAM_IS_MISSED_PERIOD, isMissedPeriod);
TrackRnREventUtil.trackRnRListEvent(TrackerActions.SelectPeriod, programCode);
setResult(RESULT_OK, intent);
finish();
}
});
}
private void invalidateNextBtn() {
tvSelectPeriodWarning.setVisibility(View.INVISIBLE);
}
public static Intent getIntentToMe(Context context, String programCode) {
return getIntentToMe(context, programCode, false);
}
public static Intent getIntentToMe(Context context, String programCode, boolean isMissedPeriod) {
Intent intent = new Intent(context, SelectPeriodActivity.class);
intent.putExtra(Constants.PARAM_PROGRAM_CODE, programCode);
intent.putExtra(Constants.PARAM_IS_MISSED_PERIOD, isMissedPeriod);
return intent;
}
@Override
public void refreshDate(List<SelectInventoryViewModel> inventories) {
adapter.refreshDate(inventories);
for (SelectInventoryViewModel selectInventoryViewModel : inventories) {
if (selectInventoryViewModel.isChecked()) {
int position = inventories.indexOf(selectInventoryViewModel);
vgContainer.setItemChecked(position, true);
selectedInventory = adapter.getItem(position);
}
}
}
}