package com.geek_alarm.android.activities; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.text.format.DateFormat; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.Toast; import android.widget.ToggleButton; import com.geek_alarm.android.ActivityUtils; import com.geek_alarm.android.AlarmPreference; import com.geek_alarm.android.R; import com.geek_alarm.android.Utils; import com.geek_alarm.android.db.AlarmPreferenceDao; import kankan.wheel.widget.OnWheelScrollListener; import kankan.wheel.widget.WheelView; import java.util.Date; import java.util.List; public class SingleAlarmActivity extends ActionBarActivity { private Toast timeLeft; public static boolean useSingleAlarmActivity() { List<AlarmPreference> alarms = AlarmPreferenceDao.INSTANCE.getAll(); if (Utils.getPreferences().getBoolean("useMultiAlarmScreen", false)) { return false; } if (alarms.size() == 0) { return true; } if (alarms.size() == 1) { AlarmPreference alarm = alarms.get(0); // Only if all days enabled for the alarm we can show it on SingleAlarm activity. int allDays = 0x7F; return alarm.getDays() == allDays; } return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!useSingleAlarmActivity()) { goToAlarmsActivity(); return; } timeLeft = Toast.makeText(this, "", Toast.LENGTH_SHORT); setContentView(R.layout.single_alarm); setUpAlarm(); setUpToggleButton(); } @Override protected void onResume() { super.onResume(); if (!useSingleAlarmActivity()) { goToAlarmsActivity(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.alarms, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.add: addAlarm(); // We have 2 alarms now, so switch to AlarmsActivity. goToAlarmsActivity(); return true; case R.id.settings: showSettings(); return true; default: return super.onOptionsItemSelected(item); } } private void setUpToggleButton() { ToggleButton toggle = (ToggleButton)findViewById(R.id.enabled); toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { saveAlarm(); } }); AlarmPreference alarm = AlarmPreferenceDao.INSTANCE.getAll().get(0); toggle.setChecked(alarm.isEnabled()); } private void showSettings() { Intent intent = new Intent(this, PreferenceActivity.class); startActivity(intent); } private void setUpAlarm() { List<AlarmPreference> alarms = AlarmPreferenceDao.INSTANCE.getAll(); if (alarms.isEmpty()) { alarms.add(addAlarm()); } AlarmPreference alarm = alarms.get(0); ActivityUtils.initWheelTimePicker(this, alarm.getHour(), alarm.getMinute(), R.layout.wheel_text_item_big); WheelStoppedListener listener = new WheelStoppedListener(); int[] items = {R.id.hour, R.id.mins, R.id.ampm}; for (int item : items) { ((WheelView) findViewById(item)).addScrollingListener(listener); if (!DateFormat.is24HourFormat(this)) { LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams( (int) getResources().getDimension(R.dimen.width_alarm_am_pm), LinearLayout.LayoutParams.MATCH_PARENT); findViewById(item).setLayoutParams(layout); } } ((WheelView) findViewById(R.id.mins)).addScrollingListener(listener); ((WheelView) findViewById(R.id.ampm)).addScrollingListener(listener); } private AlarmPreference addAlarm() { AlarmPreference alarm = new AlarmPreference(); // All days by default. alarm.setDays(0x7F); alarm.setEnabled(true); AlarmPreferenceDao.INSTANCE.add(alarm); // It must be only AFTER we inserted in db, // otherwise id will be empty and we won't find alarm in db, // when it go off. Utils.setAlarm(alarm); return alarm; } private void goToAlarmsActivity() { Intent intent = new Intent(this, AlarmsActivity.class); startActivity(intent); finish(); } private void saveAlarm() { AlarmPreference alarm = AlarmPreferenceDao.INSTANCE.getAll().get(0); alarm.setHour(ActivityUtils.getHour(this)); alarm.setMinute(ActivityUtils.getMinute(this)); alarm.setEnabled(((ToggleButton) findViewById(R.id.enabled)).isChecked()); AlarmPreferenceDao.INSTANCE.update(alarm); String message; if (alarm.isEnabled()) { Utils.setAlarm(alarm); long nextTime = Utils.getNextTime(alarm.getHour(), alarm.getMinute()); message = Utils.timeBetween(new Date().getTime(), nextTime); } else { Utils.cancelAlarm(alarm); message = "Alarm disabled"; } timeLeft.setText(message); timeLeft.show(); } private class WheelStoppedListener implements OnWheelScrollListener { public void onScrollingFinished(WheelView wheel) { saveAlarm(); } public void onScrollingStarted(WheelView wheel) {} } }