⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarmclock.java

📁 Android app: AlartClock闹钟
💻 JAVA
字号:
/* * 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 com.android.alarmclock;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;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.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.CursorAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.CheckBox;import java.util.Calendar;/** * AlarmClock application. */public class AlarmClock extends Activity {    final static String PREFERENCES = "AlarmClock";    final static int SET_ALARM = 1;    final static String PREF_CLOCK_FACE = "face";    final static String PREF_SHOW_CLOCK = "show_clock";    /** Cap alarm count at this number */    final static int MAX_ALARM_COUNT = 12;    /** This must be false for production.  If true, turns on logging,        test code, etc. */    final static boolean DEBUG = false;    private SharedPreferences mPrefs;    private LayoutInflater mFactory;    private ViewGroup mClockLayout;    private View mClock = null;    private MenuItem mAddAlarmItem;    private MenuItem mToggleClockItem;    private ListView mAlarmsList;    private Cursor mCursor;    /**     * Which clock face to show     */    private int mFace = -1;    /*     * FIXME: it would be nice for this to live in an xml config file.     */    final static int[] CLOCKS = {        R.layout.clock_basic_bw,        R.layout.clock_googly,        R.layout.clock_droid2,        R.layout.clock_droids,        R.layout.digital_clock    };    private class AlarmTimeAdapter extends CursorAdapter {        public AlarmTimeAdapter(Context context, Cursor cursor) {            super(context, cursor);        }        public View newView(Context context, Cursor cursor, ViewGroup parent) {            View ret = mFactory.inflate(R.layout.alarm_time, parent, false);            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 int id = cursor.getInt(Alarms.AlarmColumns.ALARM_ID_INDEX);            final int hour = cursor.getInt(Alarms.AlarmColumns.ALARM_HOUR_INDEX);            final int minutes = cursor.getInt(Alarms.AlarmColumns.ALARM_MINUTES_INDEX);            final Alarms.DaysOfWeek daysOfWeek = new Alarms.DaysOfWeek(                    cursor.getInt(Alarms.AlarmColumns.ALARM_DAYS_OF_WEEK_INDEX));            final boolean enabled = cursor.getInt(Alarms.AlarmColumns.ALARM_ENABLED_INDEX) == 1;            CheckBox onButton = (CheckBox)view.findViewById(R.id.alarmButton);            onButton.setChecked(enabled);            onButton.setOnClickListener(new OnClickListener() {                    public void onClick(View v) {                        boolean isChecked = ((CheckBox) v).isChecked();                        Alarms.enableAlarm(AlarmClock.this, id, isChecked);                        if (isChecked) {                            SetAlarm.popAlarmSetToast(                                    AlarmClock.this, hour, minutes, daysOfWeek);                        }                    }            });            DigitalClock digitalClock = (DigitalClock)view.findViewById(R.id.digitalClock);            if (Log.LOGV) Log.v("bindView " + cursor.getPosition() + " " + id + " " + hour +                                ":" + minutes + " " + daysOfWeek.toString(context, true) + " dc " + digitalClock);            digitalClock.setOnClickListener(new OnClickListener() {                    public void onClick(View v) {                        if (true) {                            Intent intent = new Intent(AlarmClock.this, SetAlarm.class);                            intent.putExtra(Alarms.ID, id);                            startActivityForResult(intent, SET_ALARM);                        } else {                            // TESTING: immediately pop alarm                            Intent fireAlarm = new Intent(AlarmClock.this, AlarmAlert.class);                            fireAlarm.putExtra(Alarms.ID, id);                            fireAlarm.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                            startActivity(fireAlarm);                        }                    }                });            // set the alarm text            final Calendar c = Calendar.getInstance();            c.set(Calendar.HOUR_OF_DAY, hour);            c.set(Calendar.MINUTE, minutes);            digitalClock.updateTime(c);            TextView daysOfWeekView = (TextView) digitalClock.findViewById(R.id.daysOfWeek);            daysOfWeekView.setText(daysOfWeek.toString(AlarmClock.this, false));            // Build context menu            digitalClock.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {                    public void onCreateContextMenu(ContextMenu menu, View view,                                                    ContextMenuInfo menuInfo) {                        menu.setHeaderTitle(Alarms.formatTime(AlarmClock.this, c));                        MenuItem deleteAlarmItem = menu.add(0, id, 0, R.string.delete_alarm);                    }                });        }    };    @Override    public boolean onContextItemSelected(MenuItem item) {        Alarms.deleteAlarm(this, item.getItemId());        return true;    }    @Override    protected void onCreate(Bundle icicle) {        super.onCreate(icicle);        // 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());        mAlarmsList = (ListView) findViewById(R.id.alarms_list);        mAlarmsList.setAdapter(new AlarmTimeAdapter(this, mCursor));        mAlarmsList.setVerticalScrollBarEnabled(true);        mAlarmsList.setItemsCanFocus(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);                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                    startActivity(intent);                }            });        setClockVisibility(mPrefs.getBoolean(PREF_SHOW_CLOCK, true));    }    @Override    protected void onResume() {        super.onResume();        int face = mPrefs.getInt(PREF_CLOCK_FACE, 0);        if (mFace != face) {            if (face < 0 || face >= AlarmClock.CLOCKS.length)                mFace = 0;            else                mFace = face;            inflateClock();        }    }    @Override    protected void onDestroy() {        super.onDestroy();        ToastMaster.cancelToast();        mCursor.deactivate();    }    protected void inflateClock() {        if (mClock != null) {            mClockLayout.removeView(mClock);        }        mClock = mFactory.inflate(CLOCKS[mFace], null);        mClockLayout.addView(mClock, 0);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        super.onCreateOptionsMenu(menu);        mAddAlarmItem = menu.add(0, 0, 0, R.string.add_alarm);        mAddAlarmItem.setIcon(android.R.drawable.ic_menu_add);        mToggleClockItem = menu.add(0, 0, 0, R.string.hide_clock);        mToggleClockItem.setIcon(R.drawable.ic_menu_clock_face);        return true;    }    /**     * Only allow user to add a new alarm if there are fewer than     * MAX_ALARM_COUNT     */    @Override    public boolean onPrepareOptionsMenu(Menu menu) {        super.onPrepareOptionsMenu(menu);        mAddAlarmItem.setVisible(mAlarmsList.getChildCount() < MAX_ALARM_COUNT);        mToggleClockItem.setTitle(getClockVisibility() ? R.string.hide_clock :                                  R.string.show_clock);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        if (item == mAddAlarmItem) {            Uri uri = Alarms.addAlarm(getContentResolver());            // FIXME: scroll to new item.  mAlarmsList.requestChildRectangleOnScreen() ?            String segment = uri.getPathSegments().get(1);            int newId = Integer.parseInt(segment);            if (Log.LOGV) Log.v("In AlarmClock, new alarm id = " + newId);            Intent intent = new Intent(AlarmClock.this, SetAlarm.class);            intent.putExtra(Alarms.ID, newId);            startActivityForResult(intent, SET_ALARM);            return true;        } else if (item == mToggleClockItem) {            setClockVisibility(!getClockVisibility());            saveClockVisibility();            return true;        }        return false;    }    private boolean getClockVisibility() {        return mClockLayout.getVisibility() == View.VISIBLE;    }    private void setClockVisibility(boolean visible) {        mClockLayout.setVisibility(visible ? View.VISIBLE : View.GONE);    }    private void saveClockVisibility() {        mPrefs.edit().putBoolean(PREF_SHOW_CLOCK, getClockVisibility()).commit();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -