1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.newalarm;
18 
19 import android.app.Activity;
20 import android.app.AlarmManager;
21 import android.app.PendingIntent;
22 import android.content.Intent;
23 import android.os.SystemClock;
24 import android.os.Bundle;
25 import android.view.View;
26 import android.view.View.OnClickListener;
27 import android.widget.Button;
28 import android.widget.Toast;
29 
30 /**
31  * This is the activity that controls AlarmService.
32  * <p>
33  * When the user clicks the "Start Alarm Service" button, it triggers a repeating countdown
34  * timer. Every thirty seconds, the timer starts AlarmService, which then runs for 15 seconds
35  * and shuts itself down.
36  * </p>
37  * <p>
38  * When the user clicks the "Stop Alarm Service" button, it stops the countdown timer.
39  * </p>
40  */
41 
42 public class AlarmActivity extends Activity {
43     // 30 seconds in milliseconds
44     private static final long THIRTY_SECONDS_MILLIS = 30 * 1000;
45 
46     // An intent for AlarmService, to trigger it as if the Activity called startService().
47     private PendingIntent mAlarmSender;
48 
49     // Contains a handle to the system alarm service
50     private AlarmManager mAlarmManager;
51 
52     /**
53      * This method is called when Android starts the activity. It initializes the UI.
54      * <p>
55      * This method is automatically called when Android starts the Activity
56      * </p>
57      */
58     @Override
onCreate(Bundle savedInstanceState)59     protected void onCreate(Bundle savedInstanceState) {
60         super.onCreate(savedInstanceState);
61 
62         // Create a PendingIntent to trigger a startService() for AlarmService
63         mAlarmSender = PendingIntent.getService(  // set up an intent for a call to a service
64             AlarmActivity.this,  // the current context
65             0,  // request code (not used)
66             new Intent(AlarmActivity.this, AlarmService.class),  // A new Service intent
67             0   // flags (none are required for a service)
68         );
69 
70         // Creates the main view
71         setContentView(R.layout.main);
72 
73         // Finds the button that starts the repeating countdown timer
74         Button button = (Button)findViewById(R.id.start_alarm);
75 
76         // Sets the listener for the start button
77         button.setOnClickListener(mStartAlarmListener);
78 
79         // Finds the button that stops countdown timer
80         button = (Button)findViewById(R.id.stop_alarm);
81 
82         // Sets the listener for the stop button
83         button.setOnClickListener(mStopAlarmListener);
84 
85         // Gets the handle to the system alarm service
86         mAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
87     }
88 
89     // Creates a new anonymous click listener for the start button. It starts the repeating
90     //  countdown timer.
91     private OnClickListener mStartAlarmListener = new OnClickListener() {
92         // Sets the callback for when the button is clicked
93         public void onClick(View v) {
94 
95             // Sets the time when the alarm will first go off
96             // The Android AlarmManager uses this form of the current time.
97             long firstAlarmTime = SystemClock.elapsedRealtime();
98 
99             // Sets a repeating countdown timer that triggers AlarmService
100             mAlarmManager.setRepeating(
101                 AlarmManager.ELAPSED_REALTIME_WAKEUP, // based on time since last wake up
102                 firstAlarmTime,  // sends the first alarm immediately
103                 THIRTY_SECONDS_MILLIS,  // repeats every thirty seconds
104                 mAlarmSender  // when the alarm goes off, sends this Intent
105             );
106 
107             // Notifies the user that the repeating countdown timer has been started
108             Toast.makeText(
109                 AlarmActivity.this,  //  the current context
110                 R.string.repeating_started,  // the message to display
111                 Toast.LENGTH_LONG  // how long to display the message
112             ).show();  // show the message on the screen
113         }
114     };
115 
116     // Creates a new anonymous click listener for the stop button. It shuts off the repeating
117     // countdown timer.
118     private OnClickListener mStopAlarmListener = new OnClickListener() {
119         // Sets the callback for when the button is clicked
120         public void onClick(View v) {
121 
122             // Cancels the repeating countdown timer
123             mAlarmManager.cancel(mAlarmSender);
124 
125             // Notifies the user that the repeating countdown timer has been stopped
126             Toast.makeText(
127                 AlarmActivity.this,  //  the current context
128                 R.string.repeating_stopped,  // the message to display
129                 Toast.LENGTH_LONG  // how long to display the message
130             ).show(); // display the message
131         }
132     };
133 }
134