Doc change: sample app for Notifications class
Change-Id: Iaa45156f333e5b8e9bc9cc596900835540ff138e
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 2012 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.example.android.pingme;
|
||||
|
||||
/**
|
||||
*
|
||||
* A set of constants used by all of the components in this application. To use these constants
|
||||
* the components implement the interface.
|
||||
*/
|
||||
|
||||
public final class CommonConstants {
|
||||
|
||||
public CommonConstants() {
|
||||
|
||||
// don't allow the class to be instantiated
|
||||
}
|
||||
|
||||
// Milliseconds in the snooze duration, which translates
|
||||
// to 20 seconds.
|
||||
public static final int SNOOZE_DURATION = 20000;
|
||||
public static final int DEFAULT_TIMER_DURATION = 10000;
|
||||
public static final String ACTION_SNOOZE = "com.example.android.pingme.ACTION_SNOOZE";
|
||||
public static final String ACTION_DISMISS = "com.example.android.pingme.ACTION_DISMISS";
|
||||
public static final String ACTION_PING = "com.example.android.pingme.ACTION_PING";
|
||||
public static final String EXTRA_MESSAGE= "com.example.android.pingme.EXTRA_MESSAGE";
|
||||
public static final String EXTRA_TIMER = "com.example.android.pingme.EXTRA_TIMER";
|
||||
public static final int NOTIFICATION_ID = 001;
|
||||
public static final String DEBUG_TAG = "PingMe";
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2012 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.example.android.pingme;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class MainActivity extends Activity {
|
||||
|
||||
private Intent mServiceIntent;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// Creates an explicit Intent to start the service that constructs and
|
||||
// issues the notification.
|
||||
mServiceIntent = new Intent(getApplicationContext(), PingService.class);
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets the values the user entered and adds them to the intent that will be
|
||||
* used to launch the IntentService that runs the timer and issues the
|
||||
* notification.
|
||||
*/
|
||||
public void onPingClick(View v) {
|
||||
int seconds;
|
||||
|
||||
// Gets the reminder text the user entered.
|
||||
EditText msgText = (EditText) findViewById(R.id.edit_reminder);
|
||||
String message = msgText.getText().toString();
|
||||
|
||||
mServiceIntent.putExtra(CommonConstants.EXTRA_MESSAGE, message);
|
||||
mServiceIntent.setAction(CommonConstants.ACTION_PING);
|
||||
Toast.makeText(this, R.string.timer_start, Toast.LENGTH_SHORT).show();
|
||||
|
||||
// The number of seconds the timer should run.
|
||||
EditText editText = (EditText)findViewById(R.id.edit_seconds);
|
||||
String input = editText.getText().toString();
|
||||
|
||||
if(input == null || input.trim().equals("")){
|
||||
// If user didn't enter a value, sets to default.
|
||||
seconds = R.string.seconds_default;
|
||||
} else {
|
||||
seconds = Integer.parseInt(input);
|
||||
}
|
||||
int milliseconds = (seconds * 1000);
|
||||
mServiceIntent.putExtra(CommonConstants.EXTRA_TIMER, milliseconds);
|
||||
// Launches IntentService "PingService" to set timer.
|
||||
startService(mServiceIntent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (C) 2012 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.example.android.pingme;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* PingService creates a notification that includes 2 buttons: one to snooze the
|
||||
* notification, and one to dismiss it.
|
||||
*/
|
||||
public class PingService extends IntentService {
|
||||
|
||||
private NotificationManager mNotificationManager;
|
||||
private String mMessage;
|
||||
private int mMillis;
|
||||
NotificationCompat.Builder builder;
|
||||
|
||||
public PingService() {
|
||||
|
||||
// The super call is required. The background thread that IntentService
|
||||
// starts is labeled with the string argument you pass.
|
||||
super("com.example.android.pingme");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(Intent intent) {
|
||||
// The reminder message the user set.
|
||||
mMessage = intent.getStringExtra(CommonConstants.EXTRA_MESSAGE);
|
||||
// The timer duration the user set. The default is 10 seconds.
|
||||
mMillis = intent.getIntExtra(CommonConstants.EXTRA_TIMER,
|
||||
CommonConstants.DEFAULT_TIMER_DURATION);
|
||||
NotificationManager nm = (NotificationManager)
|
||||
getSystemService(NOTIFICATION_SERVICE);
|
||||
|
||||
String action = intent.getAction();
|
||||
// This section handles the 3 possible actions:
|
||||
// ping, snooze, and dismiss.
|
||||
if(action.equals(CommonConstants.ACTION_PING)) {
|
||||
issueNotification(intent, mMessage);
|
||||
} else if (action.equals(CommonConstants.ACTION_SNOOZE)) {
|
||||
nm.cancel(CommonConstants.NOTIFICATION_ID);
|
||||
Log.d(CommonConstants.DEBUG_TAG, getString(R.string.snoozing));
|
||||
// Sets a snooze-specific "done snoozing" message.
|
||||
issueNotification(intent, getString(R.string.done_snoozing));
|
||||
|
||||
} else if (action.equals(CommonConstants.ACTION_DISMISS)) {
|
||||
nm.cancel(CommonConstants.NOTIFICATION_ID);
|
||||
}
|
||||
}
|
||||
|
||||
private void issueNotification(Intent intent, String msg) {
|
||||
mNotificationManager = (NotificationManager)
|
||||
getSystemService(NOTIFICATION_SERVICE);
|
||||
|
||||
// Sets up the Snooze and Dismiss action buttons that will appear in the
|
||||
// expanded view of the notification.
|
||||
Intent dismissIntent = new Intent(this, PingService.class);
|
||||
dismissIntent.setAction(CommonConstants.ACTION_DISMISS);
|
||||
PendingIntent piDismiss = PendingIntent.getService(this, 0, dismissIntent, 0);
|
||||
|
||||
Intent snoozeIntent = new Intent(this, PingService.class);
|
||||
snoozeIntent.setAction(CommonConstants.ACTION_SNOOZE);
|
||||
PendingIntent piSnooze = PendingIntent.getService(this, 0, snoozeIntent, 0);
|
||||
|
||||
// Constructs the Builder object.
|
||||
builder =
|
||||
new NotificationCompat.Builder(this)
|
||||
.setSmallIcon(R.drawable.ic_stat_notification)
|
||||
.setContentTitle(getString(R.string.notification))
|
||||
.setContentText(getString(R.string.ping))
|
||||
.setDefaults(Notification.DEFAULT_ALL) // requires VIBRATE permission
|
||||
/*
|
||||
* Sets the big view "big text" style and supplies the
|
||||
* text (the user's reminder message) that will be displayed
|
||||
* in the detail area of the expanded notification.
|
||||
* These calls are ignored by the support library for
|
||||
* pre-4.1 devices.
|
||||
*/
|
||||
.setStyle(new NotificationCompat.BigTextStyle()
|
||||
.bigText(msg))
|
||||
.addAction (R.drawable.ic_stat_dismiss,
|
||||
getString(R.string.dismiss), piDismiss)
|
||||
.addAction (R.drawable.ic_stat_snooze,
|
||||
getString(R.string.snooze), piSnooze);
|
||||
|
||||
/*
|
||||
* Clicking the notification itself displays ResultActivity, which provides
|
||||
* UI for snoozing or dismissing the notification.
|
||||
* This is available through either the normal view or big view.
|
||||
*/
|
||||
Intent resultIntent = new Intent(this, ResultActivity.class);
|
||||
resultIntent.putExtra(CommonConstants.EXTRA_MESSAGE, msg);
|
||||
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
|
||||
// Because clicking the notification opens a new ("special") activity, there's
|
||||
// no need to create an artificial back stack.
|
||||
PendingIntent resultPendingIntent =
|
||||
PendingIntent.getActivity(
|
||||
this,
|
||||
0,
|
||||
resultIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
);
|
||||
|
||||
builder.setContentIntent(resultPendingIntent);
|
||||
startTimer(mMillis);
|
||||
}
|
||||
|
||||
private void issueNotification(NotificationCompat.Builder builder) {
|
||||
mNotificationManager = (NotificationManager)
|
||||
getSystemService(NOTIFICATION_SERVICE);
|
||||
// Including the notification ID allows you to update the notification later on.
|
||||
mNotificationManager.notify(CommonConstants.NOTIFICATION_ID, builder.build());
|
||||
}
|
||||
|
||||
// Starts the timer according to the number of seconds the user specified.
|
||||
private void startTimer(int millis) {
|
||||
Log.d(CommonConstants.DEBUG_TAG, getString(R.string.timer_start));
|
||||
try {
|
||||
Thread.sleep(millis);
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
Log.d(CommonConstants.DEBUG_TAG, getString(R.string.sleep_error));
|
||||
}
|
||||
Log.d(CommonConstants.DEBUG_TAG, getString(R.string.timer_finished));
|
||||
issueNotification(builder);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2012 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.example.android.pingme;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
/**
|
||||
* This Activity is displayed when users click the notification itself. It provides
|
||||
* UI for snoozing and dismissing the notification.
|
||||
*/
|
||||
public class ResultActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_result);
|
||||
String message = getIntent().getStringExtra(CommonConstants.EXTRA_MESSAGE);
|
||||
TextView text = (TextView) findViewById(R.id.result_message);
|
||||
text.setText(message);
|
||||
}
|
||||
|
||||
public void onSnoozeClick(View v) {
|
||||
Intent intent = new Intent(getApplicationContext(), PingService.class);
|
||||
intent.setAction(CommonConstants.ACTION_SNOOZE);
|
||||
startService(intent);
|
||||
}
|
||||
|
||||
public void onDismissClick(View v) {
|
||||
Intent intent = new Intent(getApplicationContext(), PingService.class);
|
||||
intent.setAction(CommonConstants.ACTION_DISMISS);
|
||||
startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user