package com.myMinistry.fragments; import java.text.DateFormatSymbols; import java.text.ParseException; import java.util.Calendar; import java.util.Locale; import android.content.ComponentName; import android.content.pm.PackageManager; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.myMinistry.R; import com.myMinistry.dialogfragments.TimePickerDialogFragment; import com.myMinistry.dialogfragments.TimePickerDialogFragment.TimePickerDialogFragmentListener; import com.myMinistry.receivers.BootReceiver; import com.myMinistry.util.HelpUtils; import com.myMinistry.util.PrefUtils; import com.squareup.phrase.Phrase; public class DBScheduleFragment extends Fragment { private FragmentManager fm; public final int SCHEDULE_DAILY = 0; public final int SCHEDULE_WEEKLY = 1; private Spinner s_weekday; private CheckBox cb_is_active_daily, cb_is_active_weekly; private TextView b_daily_time, b_weekly_time; private Calendar daily = Calendar.getInstance(Locale.getDefault()); private Calendar weekly = Calendar.getInstance(Locale.getDefault()); public DBScheduleFragment newInstance() { return new DBScheduleFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.scheduled_backups, container, false); fm = getActivity().getSupportFragmentManager(); s_weekday = (Spinner) root.findViewById(R.id.s_weekday); cb_is_active_daily = (CheckBox) root.findViewById(R.id.cb_is_active_daily); cb_is_active_weekly = (CheckBox) root.findViewById(R.id.cb_is_active_weekly); b_daily_time = (TextView) root.findViewById(R.id.b_daily_time); b_weekly_time = (TextView) root.findViewById(R.id.b_weekly_time); TextView t_daily_save = (TextView) root.findViewById(R.id.t_daily_save); TextView t_weekly_save = (TextView) root.findViewById(R.id.t_weekly_save); t_daily_save.setText(getActivity().getApplicationContext().getString(R.string.menu_save).toUpperCase(Locale.getDefault())); t_daily_save.setTextColor(getActivity().getApplicationContext().getResources().getColor(R.color.appbasetheme_color)); t_daily_save.setTypeface(t_daily_save.getTypeface(), Typeface.BOLD); t_weekly_save.setText(getActivity().getApplicationContext().getString(R.string.menu_save).toUpperCase(Locale.getDefault())); t_weekly_save.setTextColor(getActivity().getApplicationContext().getResources().getColor(R.color.appbasetheme_color)); t_weekly_save.setTypeface(t_weekly_save.getTypeface(), Typeface.BOLD); root.findViewById(R.id.t_daily_save).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PrefUtils.setDBBackupDaily(getActivity(), cb_is_active_daily.isChecked()); PrefUtils.setDBBackupDailyTime(getActivity(), DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(daily.getTime()).toString()); if(cb_is_active_daily.isChecked()) { HelpUtils.setDailyAlarm(getActivity().getApplicationContext()); Toast.makeText(getActivity().getApplicationContext(), Phrase.from(getActivity().getApplicationContext(), R.string.toast_daily_backup_scheduled) .put("time", DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(daily.getTime())) .format() , Toast.LENGTH_LONG).show(); enableBootReceiver(); } else { HelpUtils.disableDailyAlarm(getActivity().getApplicationContext()); Toast.makeText(getActivity().getApplicationContext(), getActivity().getResources().getString(R.string.toast_daily_backup_cancelled), Toast.LENGTH_LONG).show(); if(PrefUtils.shouldDBBackupWeekly(getActivity())) { disableBootReceiver(); } } } }); root.findViewById(R.id.t_weekly_save).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PrefUtils.setDBBackupWeekly(getActivity(), cb_is_active_weekly.isChecked()); PrefUtils.setDBBackupWeeklyTime(getActivity(), DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(weekly.getTime())); PrefUtils.setDBBackupWeeklyWeekday(getActivity(), weekly.get(Calendar.DAY_OF_WEEK)); if(cb_is_active_weekly.isChecked()) { HelpUtils.setWeeklyAlarm(getActivity().getApplicationContext()); Toast.makeText(getActivity().getApplicationContext(), Phrase.from(getActivity().getApplicationContext(), R.string.toast_weekly_backup_scheduled) .put("weekday", DateUtils.formatDateTime(getActivity().getApplicationContext(), weekly.getTimeInMillis(), DateUtils.FORMAT_SHOW_WEEKDAY)) .put("time", DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(weekly.getTime()).toString()) .format() , Toast.LENGTH_LONG).show(); enableBootReceiver(); } else { HelpUtils.disableWeeklyAlarm(getActivity().getApplicationContext()); Toast.makeText(getActivity().getApplicationContext(), getActivity().getResources().getString(R.string.toast_weekly_backup_cancelled), Toast.LENGTH_LONG).show(); if(PrefUtils.shouldDBBackupDaily(getActivity())) { disableBootReceiver(); } } } }); b_daily_time.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimePickerDialogFragment frag = TimePickerDialogFragment.newInstance(daily); frag.setTimePickerDialogFragmentListener(new TimePickerDialogFragmentListener() { @Override public void TimePickerDialogFragmentListenerSet(int hourOfDay, int minute) { daily.set(Calendar.HOUR_OF_DAY, hourOfDay); daily.set(Calendar.MINUTE, minute); daily.set(Calendar.SECOND,0); updateDisplayTimes(); } }); frag.show(fm, TimePickerDialogFragment.TAG); } }); b_weekly_time.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimePickerDialogFragment frag = TimePickerDialogFragment.newInstance(weekly); frag.setTimePickerDialogFragmentListener(new TimePickerDialogFragmentListener() { @Override public void TimePickerDialogFragmentListenerSet(int hourOfDay, int minute) { weekly.set(Calendar.HOUR_OF_DAY, hourOfDay); weekly.set(Calendar.MINUTE, minute); weekly.set(Calendar.SECOND,0); updateDisplayTimes(); } }); frag.show(fm, TimePickerDialogFragment.TAG); } }); String[] weekdays = new DateFormatSymbols(Locale.getDefault()).getWeekdays(); ArrayAdapter<?> adapter = new ArrayAdapter<Object>(getActivity().getApplicationContext(), R.layout.simple_spinner_item_holo_light, weekdays); adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item); s_weekday.setAdapter(adapter); s_weekday.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { weekly.set(Calendar.DAY_OF_WEEK, (int)id); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); fillData(); return root; } private void fillData() { try { daily.setTime(DateFormat.getTimeFormat(getActivity().getApplicationContext()).parse(PrefUtils.getDBBackupDailyTime(getActivity()))); } catch (ParseException e) { e.printStackTrace(); } try { weekly.setTime(DateFormat.getTimeFormat(getActivity().getApplicationContext()).parse(PrefUtils.getDBBackupWeeklyTime(getActivity()))); } catch (ParseException e) { e.printStackTrace(); } weekly.set(Calendar.DAY_OF_WEEK, PrefUtils.getDBBackupWeeklyWeekday(getActivity())); s_weekday.setSelection(weekly.get(Calendar.DAY_OF_WEEK)); cb_is_active_daily.setChecked(PrefUtils.shouldDBBackupDaily(getActivity())); cb_is_active_weekly.setChecked(PrefUtils.shouldDBBackupWeekly(getActivity())); updateDisplayTimes(); } private void updateDisplayTimes() { b_daily_time.setText(DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(daily.getTime()).toString()); b_weekly_time.setText(DateFormat.getTimeFormat(getActivity().getApplicationContext()).format(weekly.getTime()).toString()); } private void enableBootReceiver() { ComponentName receiver = new ComponentName(getActivity().getApplicationContext(), BootReceiver.class); PackageManager pm = getActivity().getApplicationContext().getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } private void disableBootReceiver() { ComponentName receiver = new ComponentName(getActivity().getApplicationContext(), BootReceiver.class); PackageManager pm = getActivity().getApplicationContext().getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } }