/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Android code. * * The Initial Developer of the Original Code is Mozilla Corporation. * Portions created by the Initial Developer are Copyright (C) 2010 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alex Pakhotin * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #filter substitution package @ANDROID_PACKAGE_NAME@; import android.app.NotificationManager; import android.content.Intent; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.net.Uri; public class NotificationHandler extends BroadcastReceiver { private static final String LOGTAG = "GeckoNotificationHandler"; @Override public void onReceive(Context context, Intent intent) { if (intent != null) handleIntent(context, intent); } protected void handleIntent(Context context, Intent notificationIntent) { String action = notificationIntent.getAction(); String alertName = ""; String alertCookie = ""; Uri data = notificationIntent.getData(); if (data != null) { alertName = data.getSchemeSpecificPart(); alertCookie = data.getFragment(); if (alertCookie == null) alertCookie = ""; } Log.i(LOGTAG, "NotificationHandler.handleIntent\n" + "- action = '" + action + "'\n" + "- alertName = '" + alertName + "'\n" + "- alertCookie = '" + alertCookie + "'"); int notificationID = alertName.hashCode(); Log.i(LOGTAG, "Handle notification ID " + notificationID); if (App.mAppContext != null) { // This should call the observer, if any App.mAppContext.handleNotification(action, alertName, alertCookie); } else { // The app is not running, just cancel this notification NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(notificationID); } if (App.ACTION_ALERT_CLICK.equals(action)) { // Start or bring to front the main activity Intent appIntent = new Intent(Intent.ACTION_MAIN); appIntent.setClassName(context, "@ANDROID_PACKAGE_NAME@.App"); appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); appIntent.putExtra("args", "-alert " + alertName + (alertCookie.length() > 0 ? "#" + alertCookie : "")); try { Log.i(LOGTAG, "startActivity with intent: Action='" + appIntent.getAction() + "'" + ", args='" + appIntent.getStringExtra("args") + "'" ); context.startActivity(appIntent); } catch (ActivityNotFoundException e) { Log.e(LOGTAG, "NotificationHandler Exception: ", e); } } } }