package com.geek_alarm.android.activities; import android.content.Intent; import android.database.DataSetObserver; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ListView; import com.geek_alarm.android.AlarmPreference; import com.geek_alarm.android.R; import com.geek_alarm.android.Utils; import com.geek_alarm.android.adapters.AlarmPreferenceAdapter; import com.geek_alarm.android.db.AlarmPreferenceDao; import java.util.List; /** * This is main window. * List of alarms and option buttons * are displayed in this activity. */ public class AlarmsActivity extends ActionBarActivity { private AlarmPreferenceAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Utils.updateTaskTypesAsync(false); if (SingleAlarmActivity.useSingleAlarmActivity()) { goToSingleAlarmActivity(); return; } setContentView(R.layout.alarms); List<AlarmPreference> alarms = AlarmPreferenceDao.INSTANCE.getAll(); adapter = new AlarmPreferenceAdapter(this, alarms); ((ListView) findViewById(R.id.alarms)).setAdapter(adapter); adapter.registerDataSetObserver(new DeleteAlarmObserver()); // Add alarm by default, if there is no one yet. if (alarms.isEmpty()) { addAlarm(); } } /** * This method called, after user modified activity. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { return; } AlarmPreference alarm = adapter.getItem(requestCode); alarm.setHour(data.getIntExtra("hour", 0)); alarm.setMinute(data.getIntExtra("minute", 0)); alarm.setDays(data.getIntExtra("days", 0)); AlarmPreferenceDao.INSTANCE.update(alarm); if (alarm.isEnabled()) { Utils.setAlarm(alarm); } adapter.notifyDataSetChanged(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.alarms, menu); return true; } private void 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); adapter.add(alarm); } @Override protected void onResume() { super.onResume(); if (SingleAlarmActivity.useSingleAlarmActivity()) { goToSingleAlarmActivity(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.add: addAlarm(); return true; case R.id.settings: showSettings(); return true; default: return super.onOptionsItemSelected(item); } } private class DeleteAlarmObserver extends DataSetObserver { @Override public void onChanged() { if (SingleAlarmActivity.useSingleAlarmActivity()) { goToSingleAlarmActivity(); } } } private void showSettings() { Intent intent = new Intent(AlarmsActivity.this, PreferenceActivity.class); startActivity(intent); } private void goToSingleAlarmActivity() { Intent intent = new Intent(this, SingleAlarmActivity.class); startActivity(intent); finish(); } }