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.android.statusbartest; 18 19 import java.util.GregorianCalendar; 20 21 import android.app.Activity; 22 import android.app.Notification; 23 import android.app.NotificationManager; 24 import android.app.PendingIntent; 25 import android.content.Context; 26 import android.content.ContentResolver; 27 import android.content.Intent; 28 import android.graphics.Bitmap; 29 import android.graphics.drawable.BitmapDrawable; 30 import android.net.Uri; 31 import android.os.Bundle; 32 import android.os.Environment; 33 import android.os.Vibrator; 34 import android.os.Handler; 35 import android.text.TextUtils; 36 import android.util.Log; 37 import android.net.Uri; 38 import android.os.SystemClock; 39 import android.view.View; 40 import android.widget.CompoundButton; 41 import android.widget.RadioButton; 42 import android.widget.RadioGroup; 43 import android.widget.RemoteViews; 44 import android.os.PowerManager; 45 46 public class NotificationBuilderTest extends Activity 47 { 48 private final static String TAG = "NotificationTestList"; 49 50 NotificationManager mNM; 51 52 @Override onCreate(Bundle icicle)53 public void onCreate(Bundle icicle) { 54 super.onCreate(icicle); 55 mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 56 setContentView(R.layout.notification_builder_test); 57 if (icicle == null) { 58 setDefaults(); 59 } 60 for (int id: new int[] { 61 R.id.clear_1, 62 R.id.clear_2, 63 R.id.clear_3, 64 R.id.clear_4, 65 R.id.clear_5, 66 R.id.clear_6, 67 R.id.clear_7, 68 R.id.clear_8, 69 R.id.clear_9, 70 R.id.clear_10, 71 R.id.notify_1, 72 R.id.notify_2, 73 R.id.notify_3, 74 R.id.notify_4, 75 R.id.notify_5, 76 R.id.notify_6, 77 R.id.notify_7, 78 R.id.notify_8, 79 R.id.notify_9, 80 R.id.notify_10, 81 R.id.ten, 82 R.id.clear_all, 83 }) { 84 findViewById(id).setOnClickListener(mClickListener); 85 } 86 } 87 setDefaults()88 private void setDefaults() { 89 setChecked(R.id.when_now); 90 setChecked(R.id.icon_surprise); 91 setChecked(R.id.title_medium); 92 setChecked(R.id.text_medium); 93 setChecked(R.id.info_none); 94 setChecked(R.id.number_0); 95 setChecked(R.id.intent_alert); 96 setChecked(R.id.delete_none); 97 setChecked(R.id.full_screen_none); 98 setChecked(R.id.ticker_none); 99 setChecked(R.id.large_icon_none); 100 setChecked(R.id.sound_none); 101 setChecked(R.id.vibrate_none); 102 setChecked(R.id.lights_red); 103 setChecked(R.id.lights_off); 104 } 105 106 private View.OnClickListener mClickListener = new View.OnClickListener() { 107 public void onClick(View v) { 108 switch (v.getId()) { 109 case R.id.clear_1: 110 mNM.cancel(1); 111 break; 112 case R.id.clear_2: 113 mNM.cancel(2); 114 break; 115 case R.id.clear_3: 116 mNM.cancel(3); 117 break; 118 case R.id.clear_4: 119 mNM.cancel(4); 120 break; 121 case R.id.clear_5: 122 mNM.cancel(5); 123 break; 124 case R.id.clear_6: 125 mNM.cancel(6); 126 break; 127 case R.id.clear_7: 128 mNM.cancel(7); 129 break; 130 case R.id.clear_8: 131 mNM.cancel(8); 132 break; 133 case R.id.clear_9: 134 mNM.cancel(9); 135 break; 136 case R.id.clear_10: 137 mNM.cancel(10); 138 break; 139 case R.id.notify_1: 140 sendNotification(1); 141 break; 142 case R.id.notify_2: 143 sendNotification(2); 144 break; 145 case R.id.notify_3: 146 sendNotification(3); 147 break; 148 case R.id.notify_4: 149 sendNotification(4); 150 break; 151 case R.id.notify_5: 152 sendNotification(5); 153 break; 154 case R.id.notify_6: 155 sendNotification(6); 156 break; 157 case R.id.notify_7: 158 sendNotification(7); 159 break; 160 case R.id.notify_8: 161 sendNotification(8); 162 break; 163 case R.id.notify_9: 164 sendNotification(9); 165 break; 166 case R.id.notify_10: 167 sendNotification(10); 168 break; 169 case R.id.ten: { 170 for (int id=1; id<=10; id++) { 171 sendNotification(id); 172 } 173 break; 174 } 175 case R.id.clear_all: { 176 for (int id=1; id<=10; id++) { 177 mNM.cancel(id); 178 } 179 break; 180 } 181 } 182 } 183 }; 184 sendNotification(int id)185 private void sendNotification(int id) { 186 final Notification n = buildNotification(id); 187 mNM.notify(id, n); 188 } 189 buildNotification(int id)190 private Notification buildNotification(int id) { 191 Notification.Builder b = new Notification.Builder(this); 192 193 // when 194 switch (getRadioChecked(R.id.group_when)) { 195 case R.id.when_midnight: { 196 GregorianCalendar c = new GregorianCalendar(); 197 c.set(GregorianCalendar.HOUR_OF_DAY, 0); 198 c.set(GregorianCalendar.MINUTE, 0); 199 c.set(GregorianCalendar.SECOND, 0); 200 b.setWhen(c.getTimeInMillis()); 201 break; 202 } 203 case R.id.when_now: 204 b.setWhen(System.currentTimeMillis()); 205 break; 206 case R.id.when_now_plus_1h: 207 break; 208 case R.id.when_tomorrow: 209 break; 210 } 211 212 // icon 213 switch (getRadioChecked(R.id.group_icon)) { 214 case R.id.icon_im: 215 b.setSmallIcon(R.drawable.icon1); 216 break; 217 case R.id.icon_alert: 218 b.setSmallIcon(R.drawable.icon2); 219 break; 220 case R.id.icon_surprise: 221 b.setSmallIcon(R.drawable.emo_im_kissing); 222 break; 223 } 224 225 // title 226 final String title = getRadioTag(R.id.group_title); 227 if (!TextUtils.isEmpty(title)) { 228 b.setContentTitle(title); 229 } 230 231 // text 232 final String text = getRadioTag(R.id.group_text); 233 if (!TextUtils.isEmpty(text)) { 234 b.setContentText(text); 235 } 236 237 // info 238 final String info = getRadioTag(R.id.group_info); 239 if (!TextUtils.isEmpty(info)) { 240 b.setContentInfo(info); 241 } 242 243 // number 244 b.setNumber(getRadioInt(R.id.group_number, 0)); 245 246 // contentIntent 247 switch (getRadioChecked(R.id.group_intent)) { 248 case R.id.intent_none: 249 break; 250 case R.id.intent_alert: 251 b.setContentIntent(makeContentIntent(id)); 252 break; 253 } 254 255 // deleteIntent 256 switch (getRadioChecked(R.id.group_delete)) { 257 case R.id.delete_none: 258 break; 259 case R.id.delete_alert: 260 b.setDeleteIntent(makeDeleteIntent(id)); 261 break; 262 } 263 264 // fullScreenIntent TODO 265 266 // ticker 267 switch (getRadioChecked(R.id.group_ticker)) { 268 case R.id.ticker_none: 269 break; 270 case R.id.ticker_short: 271 case R.id.ticker_wrap: 272 case R.id.ticker_haiku: 273 b.setTicker(getRadioTag(R.id.group_ticker)); 274 break; 275 case R.id.ticker_custom: 276 // TODO 277 break; 278 } 279 280 // largeIcon 281 switch (getRadioChecked(R.id.group_large_icon)) { 282 case R.id.large_icon_none: 283 break; 284 case R.id.large_icon_pineapple: 285 b.setLargeIcon(loadBitmap(R.drawable.pineapple)); 286 break; 287 case R.id.large_icon_pineapple2: 288 b.setLargeIcon(loadBitmap(R.drawable.pineapple2)); 289 break; 290 case R.id.large_icon_small: 291 b.setLargeIcon(loadBitmap(R.drawable.icon2)); 292 break; 293 } 294 295 // sound TODO 296 297 // vibrate 298 switch (getRadioChecked(R.id.group_vibrate)) { 299 case R.id.vibrate_none: 300 break; 301 case R.id.vibrate_short: 302 b.setVibrate(new long[] { 0, 200 }); 303 break; 304 case R.id.vibrate_medium: 305 b.setVibrate(new long[] { 0, 500 }); 306 break; 307 case R.id.vibrate_long: 308 b.setVibrate(new long[] { 0, 1000 }); 309 break; 310 case R.id.vibrate_pattern: 311 b.setVibrate(new long[] { 0, 250, 250, 250, 250, 250, 250, 250 }); 312 break; 313 } 314 315 // lights 316 final int color = getRadioInt(R.id.group_lights_color, 0xff0000); 317 int onMs; 318 int offMs; 319 switch (getRadioChecked(R.id.group_lights_blink)) { 320 case R.id.lights_slow: 321 onMs = 1300; 322 offMs = 1300; 323 break; 324 case R.id.lights_fast: 325 onMs = 300; 326 offMs = 300; 327 break; 328 case R.id.lights_on: 329 onMs = 1; 330 offMs = 0; 331 break; 332 case R.id.lights_off: 333 default: 334 onMs = 0; 335 offMs = 0; 336 break; 337 } 338 if (onMs != 0 && offMs != 0) { 339 b.setLights(color, onMs, offMs); 340 } 341 342 // flags 343 b.setOngoing(getChecked(R.id.flag_ongoing)); 344 b.setOnlyAlertOnce(getChecked(R.id.flag_once)); 345 b.setAutoCancel(getChecked(R.id.flag_auto_cancel)); 346 347 // defaults 348 int defaults = 0; 349 if (getChecked(R.id.default_sound)) { 350 defaults |= Notification.DEFAULT_SOUND; 351 } 352 if (getChecked(R.id.default_vibrate)) { 353 defaults |= Notification.DEFAULT_VIBRATE; 354 } 355 if (getChecked(R.id.default_lights)) { 356 defaults |= Notification.DEFAULT_LIGHTS; 357 } 358 b.setDefaults(defaults); 359 360 return b.getNotification(); 361 } 362 setChecked(int id)363 private void setChecked(int id) { 364 final CompoundButton b = (CompoundButton)findViewById(id); 365 b.setChecked(true); 366 } 367 getRadioChecked(int id)368 private int getRadioChecked(int id) { 369 final RadioGroup g = (RadioGroup)findViewById(id); 370 return g.getCheckedRadioButtonId(); 371 } 372 getRadioTag(int id)373 private String getRadioTag(int id) { 374 final RadioGroup g = (RadioGroup)findViewById(id); 375 final View v = findViewById(g.getCheckedRadioButtonId()); 376 return (String)v.getTag(); 377 } 378 getRadioInt(int id, int def)379 private int getRadioInt(int id, int def) { 380 String str = getRadioTag(id); 381 if (TextUtils.isEmpty(str)) { 382 return def; 383 } else { 384 try { 385 return Integer.parseInt(str); 386 } catch (NumberFormatException ex) { 387 return def; 388 } 389 } 390 } 391 getChecked(int id)392 private boolean getChecked(int id) { 393 final CompoundButton b = (CompoundButton)findViewById(id); 394 return b.isChecked(); 395 } 396 loadBitmap(int id)397 private Bitmap loadBitmap(int id) { 398 final BitmapDrawable bd = (BitmapDrawable)getResources().getDrawable(id); 399 return Bitmap.createBitmap(bd.getBitmap()); 400 } 401 makeDeleteIntent(int id)402 private PendingIntent makeDeleteIntent(int id) { 403 Intent intent = new Intent(this, ConfirmationActivity.class); 404 intent.setData(Uri.fromParts("content", "//status_bar_test/delete/" + id, null)); 405 intent.putExtra(ConfirmationActivity.EXTRA_TITLE, "Delete intent"); 406 intent.putExtra(ConfirmationActivity.EXTRA_TEXT, "id: " + id); 407 return PendingIntent.getActivity(this, 0, intent, 0); 408 } 409 makeContentIntent(int id)410 private PendingIntent makeContentIntent(int id) { 411 Intent intent = new Intent(this, ConfirmationActivity.class); 412 intent.setData(Uri.fromParts("content", "//status_bar_test/content/" + id, null)); 413 intent.putExtra(ConfirmationActivity.EXTRA_TITLE, "Content intent"); 414 intent.putExtra(ConfirmationActivity.EXTRA_TEXT, "id: " + id); 415 return PendingIntent.getActivity(this, 0, intent, 0); 416 } 417 } 418 419