package ua.kpi.ecampus.ui.activity; import android.app.ProgressDialog; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.media.Image; import android.support.design.widget.TextInputLayout; import android.support.v4.content.ContextCompat; import android.support.v4.content.res.ResourcesCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.Display; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.Spinner; import android.widget.TextView; import java.util.List; import javax.inject.Inject; import butterknife.Bind; import butterknife.OnClick; import ua.kpi.ecampus.R; import ua.kpi.ecampus.model.Recipient; import ua.kpi.ecampus.model.pojo.Item; import ua.kpi.ecampus.ui.adapter.BulletinsRecipientAdapter; import ua.kpi.ecampus.ui.adapter.ItemSpinnerAdapter; import ua.kpi.ecampus.ui.adapter.NothingSelectedAdapter; import ua.kpi.ecampus.ui.fragment.DatePickerFragment; import ua.kpi.ecampus.ui.presenter.SaveBulletinPresenter; import ua.kpi.ecampus.util.ToastUtil; /** * Created by Administrator on 12.05.2016. */ public abstract class SaveBulletinActivity extends BaseActivity implements SaveBulletinPresenter.IView { @Bind(R.id.edit_text_bulletin_theme) protected EditText mSubject; @Bind(R.id.edit_text_bulletin_text) protected EditText mText; @Bind(R.id.toolbar) protected Toolbar mToolbar; @Bind(R.id.text_view_start_period) protected EditText mStartDate; @Bind(R.id.text_view_end_period) protected EditText mEndDate; @Bind(R.id.text_view_creation_date_value) protected TextView mCreateDate; @Bind(R.id.spinner_profile) protected Spinner mSpinnerProfile; @Bind(R.id.spinner_group) protected Spinner mSpinnerGroup; @Bind(R.id.spinner_subdivision) protected Spinner mSpinnerSubdivision; @Bind(R.id.layout_profile) protected RelativeLayout mLayoutProfile; @Bind(R.id.layout_group) protected RelativeLayout mLayoutGroup; @Bind(R.id.rb_all) protected RadioButton mRbAll; @Bind(R.id.rb_profile) protected RadioButton mRbProfile; @Bind(R.id.rb_group) protected RadioButton mRbGroup; @Bind(R.id.btn_more_information) protected ImageButton mMoreInfoBtn; @Inject protected SaveBulletinPresenter mPresenter; protected BulletinsRecipientAdapter mAdapter; protected ProgressDialog mProgressDialog; protected final String START_DATE = "start_date"; protected final String END_DATE = "end_date"; @Override public void showProgressDialog() { mProgressDialog = new ProgressDialog(SaveBulletinActivity.this, R.style .AppTheme_Dark_Dialog); mProgressDialog.setIndeterminate(true); mProgressDialog.setMessage(getString(R.string.progress_sending)); mProgressDialog.show(); } @Override public void dismissProgressDialog() { mProgressDialog.dismiss(); } @Override public void setSubdivisionAdapter(List<Item> list) { setSubdivisionSpinner(list); } @Override public void setProfileAdapter(List<Item> list) { setProfileSpinner(list); } @Override public void setGroupAdapter(List<Item> list) { setGroupSpinner(list); } @Override public void updateBadgeCounter(int count) { TextView tvCounter = (TextView) findViewById(R.id.tv_badge_counter); tvCounter.setText(Integer.toString(count)); } @OnClick(R.id.btn_add_recipient) public void onAddRecipient() { Recipient recipient = createRecipient(); if (recipient != null) { if (!mAdapter.contains(recipient)) { mAdapter.addItem(recipient); updateBadgeCounter(mAdapter.getItemCount()); } else { ToastUtil.showShortMessage(getString(R.string .recipient_already_exists), this); } } else { ToastUtil.showError(getString(R.string.wrong_recipient), this); } } @OnClick(R.id.btn_show_recipients) public void onShowRecipients() { View inflatedView = inflateView(R.layout.recipient_popup_layout); setRecyclerView(inflatedView); // get device size Display display = getWindowManager().getDefaultDisplay(); final Point size = new Point(); display.getSize(size); PopupWindow popWindow = new PopupWindow(inflatedView, size.x - 50, size.y - 900, true); popWindow.setBackgroundDrawable(ContextCompat.getDrawable (getApplicationContext(), R.drawable.popup_bg)); popWindow.setFocusable(true); // make it outside touchable to dismiss the popup window popWindow.setOutsideTouchable(true); popWindow.setAnimationStyle(R.style.PopupAnimation); popWindow.showAtLocation(new LinearLayout(this), Gravity.BOTTOM, 0, 100); } @OnClick(R.id.btn_more_information) public void onMoreInformation(){ hideShowMoreInformation((FrameLayout) findViewById(R.id.attribute_input_start_period)); hideShowMoreInformation((FrameLayout) findViewById(R.id.attribute_input_end_period)); } private void hideShowMoreInformation(FrameLayout frameLayout){ if(frameLayout.getVisibility() != View.VISIBLE) { mMoreInfoBtn.setImageResource(R.drawable.arrow_up); frameLayout.setVisibility(View.VISIBLE); } else{ mMoreInfoBtn.setImageResource(R.drawable.arrow_down); frameLayout.setVisibility(View.GONE); } } protected void setDateListener() { mStartDate.setOnClickListener(v -> setDateTo(mStartDate, "2")); mEndDate.setOnClickListener(v -> setDateTo(mEndDate, "1")); } protected void setDateTo(EditText view, String uniqueString) { DatePickerFragment newFragment = new DatePickerFragment(); newFragment.setView(view); newFragment.show(getFragmentManager(), uniqueString); } protected void setAdapter() { mAdapter = new BulletinsRecipientAdapter(this); } protected void setProfileSpinner(List<Item> list) { ArrayAdapter<Item> adapter = new ItemSpinnerAdapter(this, R.layout .spinner_item, R.layout.spinner_dropdown_item, list); mSpinnerProfile.setAdapter(new NothingSelectedAdapter( adapter, R.layout.spinner_item_nothing_selected_profile, this)); } protected void setGroupSpinner(List<Item> list) { ArrayAdapter<Item> adapter = new ItemSpinnerAdapter(this, R.layout .spinner_item, R.layout.spinner_dropdown_item, list); mSpinnerGroup.setAdapter(new NothingSelectedAdapter( adapter, R.layout.spinner_item_nothing_selected_group, this)); } protected void setSubdivisionSpinner(List<Item> list) { ArrayAdapter<Item> adapter = new ItemSpinnerAdapter(this, R.layout .spinner_item, R.layout.spinner_dropdown_item, list); mSpinnerSubdivision.setAdapter(adapter); mSpinnerSubdivision.setOnItemSelectedListener(new AdapterView .OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Item item = (Item) parent.getItemAtPosition(position); mPresenter.loadGroupsOfSubdivision(item.getId().toString()); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } protected void setRadioGroup() { RadioGroup radioGroup = (RadioGroup) findViewById(R.id .radio_group_recipient); radioGroup.setOnCheckedChangeListener((radioGroup1, checkedId) -> { switch (checkedId) { case R.id.rb_all: setVisibility(View.VISIBLE, findViewById(R.id .image_view_subdiv), findViewById(R.id .spinner_subdivision)); setVisibility(View.GONE, mLayoutProfile, mLayoutGroup); break; case R.id.rb_profile: setVisibility(View.GONE, mLayoutGroup); setVisibility(View.VISIBLE, mLayoutProfile, findViewById (R.id.image_view_subdiv), findViewById(R.id .spinner_subdivision)); break; case R.id.rb_group: setVisibility(View.GONE, mLayoutProfile, findViewById(R.id .image_view_subdiv), findViewById(R.id .spinner_subdivision)); setVisibility(View.VISIBLE, mLayoutGroup); break; default: break; } }); } protected void clearValues() { String empty = ""; mSubject.setText(empty); mText.setText(empty); mStartDate.setText(empty); mEndDate.setText(empty); mRbAll.setChecked(true); mAdapter.clear(); } protected void setRecyclerView(View parentView) { RecyclerView recView = (RecyclerView) parentView.findViewById(R.id .recycler_view_buffer_recipients); LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recView.setLayoutManager(layoutManager); recView.setAdapter(mAdapter); } protected boolean isValidInput() { boolean isValid = true; if (mAdapter.getItemCount() <= 0) { ToastUtil.showShortMessage(getString(R.string .recipient_must_be_added), this); isValid = false; } return (isValid & validateField((TextInputLayout) findViewById(R.id .input_theme), mSubject.getText().toString()) & validateField((TextInputLayout) findViewById(R.id .input_text), mText.getText().toString()) & validateField((TextInputLayout) findViewById(R.id .input_start_period), mStartDate.getText().toString()) & validateField((TextInputLayout) findViewById(R.id .input_end_period), mEndDate.getText().toString()) ); } private View inflateView(int resource) { LayoutInflater layoutInflater = (LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE); return layoutInflater.inflate(resource, null, false); } private void setVisibility(int visibility, View... views) { for (View v : views) { v.setVisibility(visibility); } } private Recipient createRecipient() { Recipient r = null; Item subdiv = (Item) mSpinnerSubdivision.getSelectedItem(); if(subdiv == null) return null; String subdivId = Integer.toString(subdiv.getId()); String subdivName = subdiv.getName(); if (mRbAll.isChecked()) { r = new Recipient(subdivId, subdivName, null, null, null, null); } else if (mRbProfile.isChecked()) { Item profile = (Item) mSpinnerProfile.getSelectedItem(); if (profile == null) return null; r = new Recipient(subdivId, subdivName, Integer.toString(profile .getId()), profile.getName(), null, null); } else if (mRbGroup.isChecked()) { Item group = (Item) mSpinnerGroup.getSelectedItem(); if (group == null) return null; r = new Recipient(null, null, null, null, Integer .toString(group.getId()), group.getName()); } return r; } private boolean validateField(TextInputLayout inputLayout, String inputField) { if (inputField.isEmpty()) { inputLayout.setError(getString(R.string.required_field)); return false; } else { inputLayout.setError(null); } return true; } }