import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
-import android.provider.Settings;
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.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
+import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.TextView;
-import android.widget.CheckBox;
-import java.util.Calendar;
import java.text.DateFormatSymbols;
+import java.util.Calendar;
/**
* AlarmClock application.
*/
public class AlarmClock extends Activity implements OnItemClickListener {
- final static String PREFERENCES = "AlarmClock";
- final static String PREF_CLOCK_FACE = "face";
- final static String PREF_SHOW_CLOCK = "show_clock";
+ static final String PREFERENCES = "AlarmClock";
+ static final String PREF_CLOCK_FACE = "face";
+ static final String PREF_SHOW_CLOCK = "show_clock";
/** Cap alarm count at this number */
- final static int MAX_ALARM_COUNT = 12;
+ static final int MAX_ALARM_COUNT = 12;
/** This must be false for production. If true, turns on logging,
test code, etc. */
- final static boolean DEBUG = false;
+ static final boolean DEBUG = false;
private SharedPreferences mPrefs;
private LayoutInflater mFactory;
private int mFace = -1;
/*
- * FIXME: it would be nice for this to live in an xml config file.
+ * TODO: it would be nice for this to live in an xml config file.
*/
- final static int[] CLOCKS = {
+ static final int[] CLOCKS = {
R.layout.clock_basic_bw,
R.layout.clock_googly,
R.layout.clock_droid2,
((TextView) ret.findViewById(R.id.am)).setText(mAm);
((TextView) ret.findViewById(R.id.pm)).setText(mPm);
- DigitalClock digitalClock = (DigitalClock)ret.findViewById(R.id.digitalClock);
+ DigitalClock digitalClock =
+ (DigitalClock) ret.findViewById(R.id.digitalClock);
digitalClock.setLive(false);
- if (Log.LOGV) Log.v("newView " + cursor.getPosition());
return ret;
}
public void bindView(View view, Context context, Cursor cursor) {
final Alarm alarm = new Alarm(cursor);
- CheckBox onButton = (CheckBox)view.findViewById(R.id.alarmButton);
+ CheckBox onButton = (CheckBox) view.findViewById(R.id.alarmButton);
onButton.setChecked(alarm.enabled);
onButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mAm = ampm[0];
mPm = ampm[1];
- // sanity check -- no database, no clock
- if (getContentResolver() == null) {
- new AlertDialog.Builder(this)
- .setTitle(getString(R.string.error))
- .setMessage(getString(R.string.dberror))
- .setPositiveButton(
- android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- finish();
- }
- })
- .setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- finish();
- }})
- .setIcon(android.R.drawable.ic_dialog_alert)
- .create().show();
- return;
- }
-
- setContentView(R.layout.alarm_clock);
mFactory = LayoutInflater.from(this);
mPrefs = getSharedPreferences(PREFERENCES, 0);
-
mCursor = Alarms.getAlarmsCursor(getContentResolver());
+
+ updateLayout();
+ setClockVisibility(mPrefs.getBoolean(PREF_SHOW_CLOCK, true));
+ }
+
+ private final Handler mHandler = new Handler();
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ // Send a message to avoid a possible ANR.
+ mHandler.post(new Runnable() {
+ public void run() {
+ updateLayout();
+ inflateClock();
+ }
+ });
+ }
+
+ private void updateLayout() {
+ setContentView(R.layout.alarm_clock);
mAlarmsList = (ListView) findViewById(R.id.alarms_list);
mAlarmsList.setAdapter(new AlarmTimeAdapter(this, mCursor));
mAlarmsList.setVerticalScrollBarEnabled(true);
mClockLayout = (ViewGroup) findViewById(R.id.clock_layout);
mClockLayout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- final Intent intent = new Intent(AlarmClock.this, ClockPicker.class);
+ final Intent intent =
+ new Intent(AlarmClock.this, ClockPicker.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
-
- setClockVisibility(mPrefs.getBoolean(PREF_SHOW_CLOCK, true));
}
@Override
int face = mPrefs.getInt(PREF_CLOCK_FACE, 0);
if (mFace != face) {
- if (face < 0 || face >= AlarmClock.CLOCKS.length)
+ if (face < 0 || face >= AlarmClock.CLOCKS.length) {
mFace = 0;
- else
+ } else {
mFace = face;
+ }
inflateClock();
}
}
switch (item.getItemId()) {
case R.id.menu_add_alarm:
Uri uri = Alarms.addAlarm(getContentResolver());
- // FIXME: scroll to new item?
+ // TODO: Create new alarm _after_ SetAlarm so the user has the
+ // chance to cancel alarm creation.
String segment = uri.getPathSegments().get(1);
int newId = Integer.parseInt(segment);
if (Log.LOGV) {