1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.lnotifications; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.app.Notification; 20*90c8c64dSAndroid Build Coastguard Worker import android.app.NotificationManager; 21*90c8c64dSAndroid Build Coastguard Worker import android.app.PendingIntent; 22*90c8c64dSAndroid Build Coastguard Worker import android.content.Context; 23*90c8c64dSAndroid Build Coastguard Worker import android.content.Intent; 24*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 25*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 26*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 27*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 28*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 29*90c8c64dSAndroid Build Coastguard Worker import android.widget.Button; 30*90c8c64dSAndroid Build Coastguard Worker import android.widget.CheckBox; 31*90c8c64dSAndroid Build Coastguard Worker import android.widget.Toast; 32*90c8c64dSAndroid Build Coastguard Worker 33*90c8c64dSAndroid Build Coastguard Worker /** 34*90c8c64dSAndroid Build Coastguard Worker * Fragment that demonstrates options for displaying Heads-Up Notifications. 35*90c8c64dSAndroid Build Coastguard Worker */ 36*90c8c64dSAndroid Build Coastguard Worker public class HeadsUpNotificationFragment extends Fragment { 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker /** 39*90c8c64dSAndroid Build Coastguard Worker * NotificationId used for the notifications from this Fragment. 40*90c8c64dSAndroid Build Coastguard Worker */ 41*90c8c64dSAndroid Build Coastguard Worker private static final int NOTIFICATION_ID = 1; 42*90c8c64dSAndroid Build Coastguard Worker 43*90c8c64dSAndroid Build Coastguard Worker private NotificationManager mNotificationManager; 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker /** 46*90c8c64dSAndroid Build Coastguard Worker * Button to show a notification. 47*90c8c64dSAndroid Build Coastguard Worker */ 48*90c8c64dSAndroid Build Coastguard Worker private Button mShowNotificationButton; 49*90c8c64dSAndroid Build Coastguard Worker 50*90c8c64dSAndroid Build Coastguard Worker /** 51*90c8c64dSAndroid Build Coastguard Worker * If checked, notifications that this Fragment creates will be displayed as Heads-Up 52*90c8c64dSAndroid Build Coastguard Worker * Notifications. 53*90c8c64dSAndroid Build Coastguard Worker */ 54*90c8c64dSAndroid Build Coastguard Worker private CheckBox mUseHeadsUpCheckbox; 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Worker /** 57*90c8c64dSAndroid Build Coastguard Worker * Use this factory method to create a new instance of 58*90c8c64dSAndroid Build Coastguard Worker * this fragment using the provided parameters. 59*90c8c64dSAndroid Build Coastguard Worker * 60*90c8c64dSAndroid Build Coastguard Worker * @return A new instance of fragment NotificationFragment. 61*90c8c64dSAndroid Build Coastguard Worker */ newInstance()62*90c8c64dSAndroid Build Coastguard Worker public static HeadsUpNotificationFragment newInstance() { 63*90c8c64dSAndroid Build Coastguard Worker HeadsUpNotificationFragment fragment = new HeadsUpNotificationFragment(); 64*90c8c64dSAndroid Build Coastguard Worker fragment.setRetainInstance(true); 65*90c8c64dSAndroid Build Coastguard Worker return fragment; 66*90c8c64dSAndroid Build Coastguard Worker } 67*90c8c64dSAndroid Build Coastguard Worker HeadsUpNotificationFragment()68*90c8c64dSAndroid Build Coastguard Worker public HeadsUpNotificationFragment() { 69*90c8c64dSAndroid Build Coastguard Worker // Required empty public constructor 70*90c8c64dSAndroid Build Coastguard Worker } 71*90c8c64dSAndroid Build Coastguard Worker 72*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)73*90c8c64dSAndroid Build Coastguard Worker public void onCreate(Bundle savedInstanceState) { 74*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 75*90c8c64dSAndroid Build Coastguard Worker mNotificationManager = (NotificationManager) getActivity().getSystemService(Context 76*90c8c64dSAndroid Build Coastguard Worker .NOTIFICATION_SERVICE); 77*90c8c64dSAndroid Build Coastguard Worker } 78*90c8c64dSAndroid Build Coastguard Worker 79*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)80*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, 81*90c8c64dSAndroid Build Coastguard Worker Bundle savedInstanceState) { 82*90c8c64dSAndroid Build Coastguard Worker // Inflate the layout for this fragment 83*90c8c64dSAndroid Build Coastguard Worker return inflater.inflate(R.layout.fragment_heads_up_notification, container, false); 84*90c8c64dSAndroid Build Coastguard Worker } 85*90c8c64dSAndroid Build Coastguard Worker 86*90c8c64dSAndroid Build Coastguard Worker @Override onViewCreated(View view, Bundle savedInstanceState)87*90c8c64dSAndroid Build Coastguard Worker public void onViewCreated(View view, Bundle savedInstanceState) { 88*90c8c64dSAndroid Build Coastguard Worker super.onViewCreated(view, savedInstanceState); 89*90c8c64dSAndroid Build Coastguard Worker mShowNotificationButton = (Button) view.findViewById(R.id.show_notification_button); 90*90c8c64dSAndroid Build Coastguard Worker mShowNotificationButton.setOnClickListener(new View.OnClickListener() { 91*90c8c64dSAndroid Build Coastguard Worker @Override 92*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 93*90c8c64dSAndroid Build Coastguard Worker mNotificationManager.notify(NOTIFICATION_ID, createNotification( 94*90c8c64dSAndroid Build Coastguard Worker mUseHeadsUpCheckbox.isChecked())); 95*90c8c64dSAndroid Build Coastguard Worker Toast.makeText(getActivity(), "Show Notification clicked", Toast.LENGTH_SHORT).show(); 96*90c8c64dSAndroid Build Coastguard Worker } 97*90c8c64dSAndroid Build Coastguard Worker }); 98*90c8c64dSAndroid Build Coastguard Worker mUseHeadsUpCheckbox = (CheckBox) view.findViewById(R.id.use_heads_up_checkbox); 99*90c8c64dSAndroid Build Coastguard Worker } 100*90c8c64dSAndroid Build Coastguard Worker 101*90c8c64dSAndroid Build Coastguard Worker /** 102*90c8c64dSAndroid Build Coastguard Worker * Creates a new notification depending on the argument. 103*90c8c64dSAndroid Build Coastguard Worker * 104*90c8c64dSAndroid Build Coastguard Worker * @param makeHeadsUpNotification A boolean value to indicating whether a notification will be 105*90c8c64dSAndroid Build Coastguard Worker * created as a heads-up notification or not. 106*90c8c64dSAndroid Build Coastguard Worker * <ul> 107*90c8c64dSAndroid Build Coastguard Worker * <li>true : Creates a heads-up notification.</li> 108*90c8c64dSAndroid Build Coastguard Worker * <li>false : Creates a non-heads-up notification.</li> 109*90c8c64dSAndroid Build Coastguard Worker * </ul> 110*90c8c64dSAndroid Build Coastguard Worker * 111*90c8c64dSAndroid Build Coastguard Worker * @return A Notification instance. 112*90c8c64dSAndroid Build Coastguard Worker */ createNotification(boolean makeHeadsUpNotification)113*90c8c64dSAndroid Build Coastguard Worker private Notification createNotification(boolean makeHeadsUpNotification) { 114*90c8c64dSAndroid Build Coastguard Worker Notification.Builder notificationBuilder = new Notification.Builder(getActivity()) 115*90c8c64dSAndroid Build Coastguard Worker .setSmallIcon(R.drawable.ic_launcher_notification) 116*90c8c64dSAndroid Build Coastguard Worker .setPriority(Notification.PRIORITY_DEFAULT) 117*90c8c64dSAndroid Build Coastguard Worker .setCategory(Notification.CATEGORY_MESSAGE) 118*90c8c64dSAndroid Build Coastguard Worker .setContentTitle("Sample Notification") 119*90c8c64dSAndroid Build Coastguard Worker .setContentText("This is a normal notification."); 120*90c8c64dSAndroid Build Coastguard Worker if (makeHeadsUpNotification) { 121*90c8c64dSAndroid Build Coastguard Worker Intent push = new Intent(); 122*90c8c64dSAndroid Build Coastguard Worker push.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 123*90c8c64dSAndroid Build Coastguard Worker push.setClass(getActivity(), LNotificationActivity.class); 124*90c8c64dSAndroid Build Coastguard Worker 125*90c8c64dSAndroid Build Coastguard Worker PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(getActivity(), 0, 126*90c8c64dSAndroid Build Coastguard Worker push, PendingIntent.FLAG_CANCEL_CURRENT); 127*90c8c64dSAndroid Build Coastguard Worker notificationBuilder 128*90c8c64dSAndroid Build Coastguard Worker .setContentText("Heads-Up Notification on Android L or above.") 129*90c8c64dSAndroid Build Coastguard Worker .setFullScreenIntent(fullScreenPendingIntent, true); 130*90c8c64dSAndroid Build Coastguard Worker } 131*90c8c64dSAndroid Build Coastguard Worker return notificationBuilder.build(); 132*90c8c64dSAndroid Build Coastguard Worker } 133*90c8c64dSAndroid Build Coastguard Worker } 134