package ru.bsuirhelper.android.ui.schedule;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.*;
import android.widget.DatePicker;
import android.widget.Toast;
import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import org.joda.time.DateTime;
import ru.bsuirhelper.android.ApplicationSettings;
import ru.bsuirhelper.android.R;
import ru.bsuirhelper.android.core.StudentCalendar;
import ru.bsuirhelper.android.ui.DownloadScheduleTask;
import ru.bsuirhelper.android.ui.RotationViewPager;
public class FragmentSchedule extends Fragment implements DownloadScheduleTask.CallBack {
private String title = "Fragment Schedule";
private ViewPager mPager;
private String mGroupId;
private StudentCalendar mStudentCalendar;
private ApplicationSettings mSettings;
private ActionBar mActionBar;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
setRetainInstance(true);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSettings = ApplicationSettings.getInstance(getActivity().getApplicationContext());
mStudentCalendar = new StudentCalendar();
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mActionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
mActionBar.setDisplayShowTitleEnabled(true);
View fragmentContent = inflater.inflate(R.layout.activity_schedule, container, false);
mPager = (ViewPager) fragmentContent.findViewById(R.id.schedule_pager);
if (Build.VERSION.SDK_INT > 10) {
mPager.setPageTransformer(true, new RotationViewPager());
}
try {
mGroupId = (String) getArguments().get("groupId");
} catch (NullPointerException ex) {
}
if (mGroupId == null) {
mGroupId = mSettings.getString("defaultgroup", null);
//If get null, it's mean not set default group
if (mGroupId == null) {
FragmentManager fm = getActivity().getSupportFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new FragmentManagerGroups()).commit();
mActionBar.setTitle(FragmentManagerGroups.TITLE);
return null;
}
}
int subgroup = mSettings.getInt(mGroupId, 1);
SchedulePagerAdapter adapter = new SchedulePagerAdapter(getActivity().getSupportFragmentManager(), mGroupId, subgroup);
mPager.setAdapter(adapter);
mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
mActionBar.setSubtitle("уч.неделя " + mStudentCalendar.getWorkWeek(StudentCalendar.convertToDefaultDateTime(i)));
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
mActionBar.setTitle("Группа " + mGroupId);
mPager.setCurrentItem(mStudentCalendar.getDayOfYear() - 1);
return fragmentContent;
}
@Override
public void onStart() {
super.onStart();
if (ApplicationSettings.getInstance(getActivity().getApplicationContext()).getBoolean("firststart", true)) {
showDialogSubjectTypeHelper();
ApplicationSettings.getInstance(getActivity().getApplicationContext()).putBoolean("firststart", false);
}
EasyTracker tracker = EasyTracker.getInstance(getActivity());
tracker.set(Fields.SCREEN_NAME, title);
tracker.send(MapBuilder.createAppView().build());
}
@Override
public void onStop() {
super.onStop();
EasyTracker.getInstance(getActivity().getApplicationContext()).activityStop(getActivity());
}
@Override
public void onResume() {
super.onResume();
}
private MenuItem mSubgroup1;
private MenuItem mSubgroup2;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_schedule_activity_actions, menu);
mSubgroup1 = menu.findItem(R.id.subgroup1);
mSubgroup2 = menu.findItem(R.id.subgroup2);
int subgroup = mSettings.getInt(mGroupId, 1);
if (subgroup == 1) {
mSubgroup1.setChecked(true);
} else {
mSubgroup2.setChecked(true);
}
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_updateschedule:
ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
if (!isConnected) {
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("Информация")
.setMessage("Интернет соединение отсуствует, проверьте подключение к интернету");
alert.show();
} else {
DownloadScheduleTask downloadScheduleTask = new DownloadScheduleTask(this);
downloadScheduleTask.execute(mGroupId);
}
return true;
case R.id.action_selecttoday:
DialogDatePicker newFragment = new DialogDatePicker() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
mPager.setCurrentItem(mStudentCalendar.getDayOfYear(new DateTime(year, month + 1, day, 1, 1)));
}
};
newFragment.show(getActivity().getSupportFragmentManager(), "timePicker");
return true;
case R.id.subgroup1:
mSubgroup1.setChecked(true);
mSettings.putInt(mGroupId, 1);
refreshSchedule(1);
mActionBar.setSubtitle("подгруппа 1");
return true;
case R.id.subgroup2:
mSubgroup2.setChecked(true);
mSettings.putInt(mGroupId, 2);
refreshSchedule(2);
mActionBar.setSubtitle("подгруппа 2");
return true;
case R.id.action_help:
showDialogSubjectTypeHelper();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void showDialogSubjectTypeHelper() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.dialog_sybject_type_helper, null));
builder.setTitle("Типы пар");
builder.setPositiveButton("Ок", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
void refreshSchedule(int subgroup) {
SchedulePagerAdapter adapter = new SchedulePagerAdapter(getActivity().getSupportFragmentManager(), mGroupId, subgroup);
int position = mPager.getCurrentItem();
mPager.setAdapter(adapter);
mPager.setCurrentItem(position);
}
@Override
public void onPostExecute() {
Toast.makeText(getActivity(), "Расписание обновлено", Toast.LENGTH_SHORT).show();
}
}