/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dk.dr.radio.vaekning; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ListView; import android.widget.TextView; import java.util.Calendar; import dk.dr.radio.akt.Basisaktivitet; import dk.dr.radio.akt.Basisfragment; import dk.dr.radio.diverse.App; import dk.dr.radio.v3.R; /** * AlarmClock_akt application. */ public class AlarmClock_akt extends Basisaktivitet implements OnItemClickListener { static final String PREFERENCES = "AlarmClock"; /** * This must be false for production. If true, turns on logging, * test code, etc. */ static final boolean DEBUG = false; private LayoutInflater mFactory; private ListView mAlarmsList; private AlarmTimeAdapter adapter; private void updateAlarm(boolean enabled, Alarm alarm) { alarm.enabled = enabled; if (enabled) { alarm.time = Alarms.calculateAlarm(alarm.hour, alarm.minutes, alarm.daysOfWeek).getTimeInMillis(); SetAlarm_akt.popAlarmSetToast(this, alarm.time); } Alarms.setAlarm(this, alarm); } private class AlarmTimeAdapter extends BaseAdapter { public int getCount() { return Alarms.alarmer.size(); } // der er omkring tusind drawables public Object getItem(int position) { return position; } // bruges ikke public long getItemId(int position) { return position; } // bruges ikke @Override public View getView(final int position, View view, ViewGroup parent) { view = mFactory.inflate(R.layout.deskclock_alarm_time_elemento, parent, false); DigitalClock digitalClock = (DigitalClock) view.findViewById(R.id.digitalClock); digitalClock.setLive(false); final Alarm alarm = Alarms.alarmer.get(position); View indicator = view.findViewById(R.id.indicator); // Set the initial state of the clock "checkbox" final CheckBox clockOnOff = (CheckBox) indicator.findViewById(R.id.clock_onoff); clockOnOff.setChecked(alarm.enabled); clockOnOff.setTypeface(App.skrift_gibson); // Clicking outside the "checkbox" should also change the state. indicator.setOnClickListener(new OnClickListener() { public void onClick(View v) { clockOnOff.toggle(); updateAlarm(clockOnOff.isChecked(), alarm); } }); // set the alarm text final Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, alarm.hour); c.set(Calendar.MINUTE, alarm.minutes); digitalClock.updateTime(c); // Set the repeat text or leave it blank if it does not repeat. TextView daysOfWeekView = (TextView) digitalClock.findViewById(R.id.daysOfWeek); daysOfWeekView.setTypeface(App.skrift_gibson); final String daysOfWeekStr = alarm.daysOfWeek.toString(AlarmClock_akt.this, false); if (daysOfWeekStr != null && daysOfWeekStr.length() != 0) { daysOfWeekView.setText(daysOfWeekStr); daysOfWeekView.setVisibility(View.VISIBLE); } else { daysOfWeekView.setVisibility(View.GONE); } // Display the label TextView labelView = (TextView) view.findViewById(R.id.label); labelView.setTypeface(App.skrift_gibson); if (alarm.label != null && alarm.label.length() != 0) { labelView.setText(alarm.label); labelView.setVisibility(View.VISIBLE); } else { labelView.setVisibility(View.GONE); } ((TextView) view.findViewById(R.id.timeDisplay)).setTypeface(App.skrift_gibson); Basisfragment.udvikling_checkDrSkrifter(view, this.toString()); return view; } } ; @Override public boolean onContextItemSelected(final MenuItem item) { final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); final int pos = (int) info.position; // Error check just in case. if (pos == -1) { return super.onContextItemSelected(item); } final Alarm alarm = Alarms.alarmer.get(pos); if (item.getItemId()==R.id.delete_alarm) { // Confirm that the alarm will be deleted. new AlertDialog.Builder(this) .setTitle(getString(R.string.delete_alarm)) .setMessage(getString(R.string.delete_alarm_confirm)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { Alarms.deleteAlarm(AlarmClock_akt.this, alarm.id); adapter.notifyDataSetChanged(); // hack } }) .setNegativeButton(android.R.string.cancel, null) .show(); return true; } if (item.getItemId()==R.id.enable_alarm) { alarm.enabled = !alarm.enabled; if (alarm.enabled) { alarm.time = Alarms.calculateAlarm(alarm.hour, alarm.minutes, alarm.daysOfWeek).getTimeInMillis(); SetAlarm_akt.popAlarmSetToast(this, alarm.time); } Alarms.setAlarm(this, alarm); adapter.notifyDataSetChanged(); return true; } if (item.getItemId()==R.id.edit_alarm) { Intent intent = new Intent(this, SetAlarm_akt.class); intent.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm.toString()); startActivity(intent); return true; } return super.onContextItemSelected(item); } @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); mFactory = LayoutInflater.from(this); Alarms.tjekIndlæst(this); updateLayout(); App.advarEvtOmAlarmerHvisInstalleretPåSDkort(this); } private void updateLayout() { setContentView(R.layout.deskclock_alarm_clock); mAlarmsList = (ListView) findViewById(R.id.alarms_list); adapter = new AlarmTimeAdapter(); mAlarmsList.setAdapter(adapter); mAlarmsList.setVerticalScrollBarEnabled(true); mAlarmsList.setOnItemClickListener(this); mAlarmsList.setOnCreateContextMenuListener(this); View addAlarm = findViewById(R.id.add_alarm); addAlarm.setOnClickListener(new OnClickListener() { public void onClick(View v) { addNewAlarm(); } }); // Make the entire view selected when focused. addAlarm.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { v.setSelected(hasFocus); } }); Button doneButton = (Button) findViewById(R.id.done); if (doneButton != null) { doneButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); } doneButton.setTypeface(App.skrift_gibson); ((TextView) findViewById(R.id.tilføj_alarm)).setTypeface(App.skrift_gibson); ((TextView) findViewById(R.id.advarsel)).setTypeface(App.skrift_gibson); Basisfragment.udvikling_checkDrSkrifter(findViewById(R.id.base_layout), ""+this); } @Override public void onResume() { super.onResume(); adapter.notifyDataSetChanged(); // hack } private void addNewAlarm() { startActivity(new Intent(this, SetAlarm_akt.class)); } @Override protected void onDestroy() { super.onDestroy(); ToastMaster.cancelToast(); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { // Inflate the menu from xml. getMenuInflater().inflate(R.menu.deskclock_context_menu, menu); // Use the current item to create a custom view for the header. final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; final Alarm alarm = Alarms.alarmer.get(info.position); // Construct the Calendar to compute the time. final Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, alarm.hour); cal.set(Calendar.MINUTE, alarm.minutes); final String time = Alarms.formatTime(this, cal); // Inflate the custom view and set each TextView's text. final View v = mFactory.inflate(R.layout.deskclock_context_menu_header, null); TextView textView = (TextView) v.findViewById(R.id.header_time); textView.setTypeface(App.skrift_gibson); textView.setText(time); textView = (TextView) v.findViewById(R.id.header_label); textView.setText(alarm.label); textView.setTypeface(App.skrift_gibson); // Set the custom view on the menu. menu.setHeaderView(v); // Change the text based on the state of the alarm. if (alarm.enabled) { menu.findItem(R.id.enable_alarm).setTitle(R.string.disable_alarm); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId()==android.R.id.home) { finish(); return true; } if (item.getItemId()==R.id.menu_item_add_alarm) { addNewAlarm(); return true; } if (item.getItemId()==R.id.menu_item_done) { finish(); return true; } return super.onOptionsItemSelected(item); } /* @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.deskclock_alarm_list_menu_ubrugt, menu); return super.onCreateOptionsMenu(menu); } */ @Override public void onItemClick(AdapterView parent, View v, int pos, long id) { final Alarm alarm = Alarms.alarmer.get(pos); Intent intent = new Intent(this, SetAlarm_akt.class); intent.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm.toString()); startActivity(intent); } }