package net.mvla.mvhs.ui;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import net.mvla.mvhs.PrefUtils;
import net.mvla.mvhs.R;
import net.mvla.mvhs.Utils;
import net.mvla.mvhs.schedulecalendar.bellschedule.UserPeriodInfo;
/**
* Setting up classes/rooms
*/
public class ScheduleSetupActivity extends AppCompatActivity {
public static final String EXTRA_OPTIONAL = "ScheduleSetupActivity.OPTIONAL";
private Toolbar mActionBarToolbar;
private boolean mOptional;
Toolbar getActionBarToolbar() {
if (mActionBarToolbar == null) {
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
if (mActionBarToolbar != null) {
setSupportActionBar(mActionBarToolbar);
}
}
return mActionBarToolbar;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sched_setup);
mOptional = getIntent().getBooleanExtra(EXTRA_OPTIONAL, false);
getActionBarToolbar();
FragmentManager fm = getFragmentManager();
Fragment f = fm.findFragmentById(R.id.activity_setup_fragment);
if (f == null) {
f = new SetupFragment();
fm.beginTransaction()
.replace(R.id.activity_setup_fragment, f)
.commit();
}
if (mOptional) {
mActionBarToolbar.setNavigationIcon(R.drawable.ic_close_black_24dp);
mActionBarToolbar.setContentInsetsRelative(Utils.convertDpToPx(this, 72), 0);
}
setTitle(getString(R.string.schedule_setup));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (mOptional) {
super.onBackPressed();
} else {
Snackbar.make(findViewById(android.R.id.content), getString(R.string.enter_schedule_warning), Snackbar.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_setup, menu);
return super.onCreateOptionsMenu(menu);
}
public static class SetupFragment extends Fragment {
private RecyclerView mRecyclerView;
private SetupAdapter mAdapter;
private UserPeriodInfo[] mPeriods;
//true = rally b
private boolean mRallyB;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mPeriods = new UserPeriodInfo[8];
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
for (int i = 0; i < mPeriods.length; i++) {
mPeriods[i] = new UserPeriodInfo();
mPeriods[i].room = preferences.getString(PrefUtils.PREF_SCHEDULE_PREFIX + i + PrefUtils.PREF_SCHEDULE_ROOM, "");
mPeriods[i].subject = preferences.getString(PrefUtils.PREF_SCHEDULE_PREFIX + i + PrefUtils.PREF_SCHEDULE_SBJCT, "");
}
mRallyB = preferences.getBoolean(PrefUtils.PREF_SCHEDULE_RALLY_B, false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setup_done:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
for (int i = 0; i < mPeriods.length; i++) {
UserPeriodInfo period = mPeriods[i];
preferences.edit().putString(PrefUtils.PREF_SCHEDULE_PREFIX + i + PrefUtils.PREF_SCHEDULE_ROOM,
String.valueOf(period.room)).apply();
preferences.edit().putString(PrefUtils.PREF_SCHEDULE_PREFIX + i + PrefUtils.PREF_SCHEDULE_SBJCT,
String.valueOf(period.subject)).apply();
}
preferences.edit().putBoolean(PrefUtils.PREF_SCHEDULE_RALLY_B, mRallyB).apply();
getActivity().finish();
break;
}
return super.onOptionsItemSelected(item);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_list, container, false);
mAdapter = new SetupAdapter();
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return mRecyclerView;
}
private class SetupAdapter extends RecyclerView.Adapter<SetupAdapter.SetupViewHolder> {
@Override
public int getItemViewType(int position) {
return mPeriods.length > position ? 0 : 1;
}
@Override
public SetupViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(getActivity()).inflate(
viewType == 0 ? R.layout.list_item_sched_setup : R.layout.list_item_sched_setup_rally_toggle,
viewGroup, false);
SetupViewHolder holder = new SetupViewHolder(view);
if (viewType == 0) {
holder.period = (TextView) view.findViewById(R.id.list_item_setup_period_text);
holder.room = (EditText) view.findViewById(R.id.list_item_setup_room_edit);
holder.subject = (EditText) view.findViewById(R.id.list_item_setup_subject_edit);
} else {
holder.radioGroup = (RadioGroup) view;
}
return holder;
}
@Override
public void onBindViewHolder(SetupViewHolder holder, final int position) {
if (getItemViewType(position) == 1) {
holder.radioGroup.check(mRallyB ?
R.id.list_item_sched_setup_rally_b : R.id.list_item_sched_setup_rally_a);
holder.radioGroup.setOnCheckedChangeListener((group, checkedId)
-> mRallyB = checkedId == R.id.list_item_sched_setup_rally_b);
return;
}
holder.period.setText("Period " + position + ": ");
holder.room.setText(mPeriods[position].room);
holder.subject.setText(mPeriods[position].subject);
if (holder.room.getTag() != null) {
holder.room.removeTextChangedListener((TextWatcher) holder.room.getTag());
}
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mPeriods[position].room = s.toString();
}
};
holder.room.addTextChangedListener(watcher);
holder.room.setTag(watcher);
if (holder.subject.getTag() != null) {
holder.subject.removeTextChangedListener((TextWatcher) holder.subject.getTag());
}
TextWatcher watcherSub = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mPeriods[position].subject = s.toString();
}
};
holder.subject.addTextChangedListener(watcherSub);
holder.subject.setTag(watcher);
}
@Override
public int getItemCount() {
return 9;
}
class SetupViewHolder extends RecyclerView.ViewHolder {
TextView period;
EditText room;
EditText subject;
RadioGroup radioGroup;
public SetupViewHolder(View itemView) {
super(itemView);
}
}
}
}
}