1a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang/* 2a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * Copyright (C) 2011 The Android Open Source Project 3a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * 4a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * Licensed under the Apache License, Version 2.0 (the "License"); 5a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * you may not use this file except in compliance with the License. 6a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * You may obtain a copy of the License at 7a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * 8a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * http://www.apache.org/licenses/LICENSE-2.0 9a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * 10a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * Unless required by applicable law or agreed to in writing, software 11a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * distributed under the License is distributed on an "AS IS" BASIS, 12a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * See the License for the specific language governing permissions and 14a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * limitations under the License. 15a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang */ 16a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 17a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangpackage android.app; 18a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 19a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 20a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.content.Context; 21a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.content.Intent; 22a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.net.Uri; 23a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.os.SystemClock; 24a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.test.InstrumentationTestCase; 25a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.test.RepetitiveTest; 26a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport android.test.TimedTest; 27a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 28a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangimport java.util.Random; 29a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 30a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang/** 31a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * Test which spams notification manager with a large number of notifications, for both stress and 32a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang * performance testing. 33a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang */ 34a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuangpublic class NotificationStressTest extends InstrumentationTestCase { 35a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 36a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private static final int NUM_ITERATIONS = 200; 37a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private static final int[] ICONS = new int[] { 38a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_call_mute, 39a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_chat, 40a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_error, 41a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_missed_call, 42a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_more, 43a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_sdcard, 44a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_sdcard_prepare, 45a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_sdcard_usb, 46a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_sync, 47a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_sync_noanim, 48a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang android.R.drawable.stat_notify_voicemail, 49a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang }; 50a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 51a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private final Random mRandom = new Random(); 52a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private Context mContext; 53a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private NotificationManager mNotificationManager; 54a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private int notifyId = 0; 55a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 56a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang @Override 57a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang protected void setUp() throws Exception { 58a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang super.setUp(); 59a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang mContext = getInstrumentation().getContext(); 60a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang mNotificationManager = (NotificationManager) mContext.getSystemService( 61a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang Context.NOTIFICATION_SERVICE); 62a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang } 63a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 64a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang @Override 65a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang protected void tearDown() throws Exception { 66a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang super.tearDown(); 67a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang mNotificationManager.cancelAll(); 68a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang } 69a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 70a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang @RepetitiveTest(numIterations=NUM_ITERATIONS) 71a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang public void testNotificationStress() { 72a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang // Cancel one of every five notifications to vary load on notification manager 73a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang if (notifyId % 5 == 4) { 74a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang mNotificationManager.cancel(notifyId - 4); 75a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang } 76a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang sendNotification(notifyId++, "testNotificationStressNotify"); 77a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang } 78a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang 79a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang private void sendNotification(int id, CharSequence text) { 80a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang // Create "typical" notification with random icon 81a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang Notification notification = new Notification(ICONS[mRandom.nextInt(ICONS.length)], text, 82a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang System.currentTimeMillis()); 83a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang // Fill in arbitrary content 84a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); 85a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0); 86a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang CharSequence title = text + " " + id; 87a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang CharSequence subtitle = String.valueOf(System.currentTimeMillis()); 88a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang notification.setLatestEventInfo(mContext, title, subtitle, pendingIntent); 89a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang mNotificationManager.notify(id, notification); 90a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang SystemClock.sleep(10); 91a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang } 92a760e55783ee30b0f3494e113a1c37003c9d1770Tsu Chiang Chuang} 93