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.content.Context; 22*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 23*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 24*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 25*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 26*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 27*90c8c64dSAndroid Build Coastguard Worker import android.widget.Button; 28*90c8c64dSAndroid Build Coastguard Worker import android.widget.RadioGroup; 29*90c8c64dSAndroid Build Coastguard Worker import android.widget.Toast; 30*90c8c64dSAndroid Build Coastguard Worker 31*90c8c64dSAndroid Build Coastguard Worker 32*90c8c64dSAndroid Build Coastguard Worker /** 33*90c8c64dSAndroid Build Coastguard Worker * Fragment that demonstrates how notifications with different visibility metadata differ on 34*90c8c64dSAndroid Build Coastguard Worker * a lockscreen. 35*90c8c64dSAndroid Build Coastguard Worker */ 36*90c8c64dSAndroid Build Coastguard Worker public class VisibilityMetadataFragment extends Fragment { 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker private NotificationManager mNotificationManager; 39*90c8c64dSAndroid Build Coastguard Worker 40*90c8c64dSAndroid Build Coastguard Worker /** 41*90c8c64dSAndroid Build Coastguard Worker * {@link RadioGroup} that has Visibility RadioButton in its children. 42*90c8c64dSAndroid Build Coastguard Worker */ 43*90c8c64dSAndroid Build Coastguard Worker private RadioGroup mRadioGroup; 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker /** 46*90c8c64dSAndroid Build Coastguard Worker * Incremental int used for ID for notifications so that each notification will be 47*90c8c64dSAndroid Build Coastguard Worker * treated differently. 48*90c8c64dSAndroid Build Coastguard Worker */ 49*90c8c64dSAndroid Build Coastguard Worker private int mIncrementalNotificationId = 0; 50*90c8c64dSAndroid Build Coastguard Worker 51*90c8c64dSAndroid Build Coastguard Worker /** 52*90c8c64dSAndroid Build Coastguard Worker * Button to show a notification. 53*90c8c64dSAndroid Build Coastguard Worker */ 54*90c8c64dSAndroid Build Coastguard Worker private Button mShowNotificationButton; 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 VisibilityMetadataFragment newInstance() { 63*90c8c64dSAndroid Build Coastguard Worker VisibilityMetadataFragment fragment = new VisibilityMetadataFragment(); 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 VisibilityMetadataFragment()68*90c8c64dSAndroid Build Coastguard Worker public VisibilityMetadataFragment() { 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_visibility_metadata_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 NotificationVisibility visibility = getVisibilityFromSelectedRadio(mRadioGroup); 94*90c8c64dSAndroid Build Coastguard Worker showNotificationClicked(visibility); 95*90c8c64dSAndroid Build Coastguard Worker } 96*90c8c64dSAndroid Build Coastguard Worker }); 97*90c8c64dSAndroid Build Coastguard Worker mRadioGroup = (RadioGroup) view.findViewById(R.id.visibility_radio_group); 98*90c8c64dSAndroid Build Coastguard Worker } 99*90c8c64dSAndroid Build Coastguard Worker 100*90c8c64dSAndroid Build Coastguard Worker /** 101*90c8c64dSAndroid Build Coastguard Worker * Creates a new notification with a different visibility level. 102*90c8c64dSAndroid Build Coastguard Worker * 103*90c8c64dSAndroid Build Coastguard Worker * @param visibility The visibility of the notification to be created. 104*90c8c64dSAndroid Build Coastguard Worker * 105*90c8c64dSAndroid Build Coastguard Worker * @return A Notification instance. 106*90c8c64dSAndroid Build Coastguard Worker */ createNotification(NotificationVisibility visibility)107*90c8c64dSAndroid Build Coastguard Worker private Notification createNotification(NotificationVisibility visibility) { 108*90c8c64dSAndroid Build Coastguard Worker Notification.Builder notificationBuilder = new Notification.Builder(getActivity()) 109*90c8c64dSAndroid Build Coastguard Worker .setContentTitle("Notification for Visibility metadata"); 110*90c8c64dSAndroid Build Coastguard Worker 111*90c8c64dSAndroid Build Coastguard Worker notificationBuilder.setVisibility(visibility.getVisibility()); 112*90c8c64dSAndroid Build Coastguard Worker notificationBuilder.setContentText(String.format("Visibility : %s", 113*90c8c64dSAndroid Build Coastguard Worker visibility.getDescription())); 114*90c8c64dSAndroid Build Coastguard Worker notificationBuilder.setSmallIcon(visibility.getNotificationIconId()); 115*90c8c64dSAndroid Build Coastguard Worker 116*90c8c64dSAndroid Build Coastguard Worker return notificationBuilder.build(); 117*90c8c64dSAndroid Build Coastguard Worker } 118*90c8c64dSAndroid Build Coastguard Worker 119*90c8c64dSAndroid Build Coastguard Worker /** 120*90c8c64dSAndroid Build Coastguard Worker * Returns a {@link NotificationVisibility} depending on which RadioButton in the radiogroup 121*90c8c64dSAndroid Build Coastguard Worker * is selected. 122*90c8c64dSAndroid Build Coastguard Worker * 123*90c8c64dSAndroid Build Coastguard Worker * @param radiogroup The RadioGroup. 124*90c8c64dSAndroid Build Coastguard Worker * @return The instance of {@link NotificationVisibility} corresponding to RadioButton. 125*90c8c64dSAndroid Build Coastguard Worker */ getVisibilityFromSelectedRadio(RadioGroup radiogroup)126*90c8c64dSAndroid Build Coastguard Worker private NotificationVisibility getVisibilityFromSelectedRadio(RadioGroup radiogroup) { 127*90c8c64dSAndroid Build Coastguard Worker switch (radiogroup.getCheckedRadioButtonId()) { 128*90c8c64dSAndroid Build Coastguard Worker case R.id.visibility_public_radio_button: 129*90c8c64dSAndroid Build Coastguard Worker return NotificationVisibility.PUBLIC; 130*90c8c64dSAndroid Build Coastguard Worker case R.id.visibility_private_radio_button: 131*90c8c64dSAndroid Build Coastguard Worker return NotificationVisibility.PRIVATE; 132*90c8c64dSAndroid Build Coastguard Worker case R.id.visibility_secret_radio_button: 133*90c8c64dSAndroid Build Coastguard Worker return NotificationVisibility.SECRET; 134*90c8c64dSAndroid Build Coastguard Worker default: 135*90c8c64dSAndroid Build Coastguard Worker //If not selected, returns PUBLIC as default. 136*90c8c64dSAndroid Build Coastguard Worker return NotificationVisibility.PUBLIC; 137*90c8c64dSAndroid Build Coastguard Worker } 138*90c8c64dSAndroid Build Coastguard Worker } 139*90c8c64dSAndroid Build Coastguard Worker 140*90c8c64dSAndroid Build Coastguard Worker /** 141*90c8c64dSAndroid Build Coastguard Worker * Invoked when {@link #mShowNotificationButton} is clicked. 142*90c8c64dSAndroid Build Coastguard Worker * Creates a new notification with a different visibility level. 143*90c8c64dSAndroid Build Coastguard Worker * 144*90c8c64dSAndroid Build Coastguard Worker * @param visibility The visibility of the notification to be created. 145*90c8c64dSAndroid Build Coastguard Worker */ showNotificationClicked(NotificationVisibility visibility)146*90c8c64dSAndroid Build Coastguard Worker private void showNotificationClicked(NotificationVisibility visibility) { 147*90c8c64dSAndroid Build Coastguard Worker // Assigns a unique (incremented) notification ID in order to treat each notification as a 148*90c8c64dSAndroid Build Coastguard Worker // different one. This helps demonstrate how a notification with a different visibility 149*90c8c64dSAndroid Build Coastguard Worker // level differs on the lockscreen. 150*90c8c64dSAndroid Build Coastguard Worker mIncrementalNotificationId++; 151*90c8c64dSAndroid Build Coastguard Worker mNotificationManager.notify(mIncrementalNotificationId, createNotification(visibility)); 152*90c8c64dSAndroid Build Coastguard Worker Toast.makeText(getActivity(), "Show Notification clicked", Toast.LENGTH_SHORT).show(); 153*90c8c64dSAndroid Build Coastguard Worker } 154*90c8c64dSAndroid Build Coastguard Worker 155*90c8c64dSAndroid Build Coastguard Worker /** 156*90c8c64dSAndroid Build Coastguard Worker * Enum indicating possible visibility levels for notifications and related data(String 157*90c8c64dSAndroid Build Coastguard Worker * representation of visibility levels, an icon ID to create a notification) to 158*90c8c64dSAndroid Build Coastguard Worker * create a notification. 159*90c8c64dSAndroid Build Coastguard Worker */ 160*90c8c64dSAndroid Build Coastguard Worker private enum NotificationVisibility { 161*90c8c64dSAndroid Build Coastguard Worker PUBLIC(Notification.VISIBILITY_PUBLIC, "Public", R.drawable.ic_public_notification), 162*90c8c64dSAndroid Build Coastguard Worker PRIVATE(Notification.VISIBILITY_PRIVATE, "Private", R.drawable.ic_private_notification), 163*90c8c64dSAndroid Build Coastguard Worker SECRET(Notification.VISIBILITY_SECRET, "Secret", R.drawable.ic_secret_notification); 164*90c8c64dSAndroid Build Coastguard Worker 165*90c8c64dSAndroid Build Coastguard Worker /** 166*90c8c64dSAndroid Build Coastguard Worker * Visibility level of the notification. 167*90c8c64dSAndroid Build Coastguard Worker */ 168*90c8c64dSAndroid Build Coastguard Worker private final int mVisibility; 169*90c8c64dSAndroid Build Coastguard Worker 170*90c8c64dSAndroid Build Coastguard Worker /** 171*90c8c64dSAndroid Build Coastguard Worker * String representation of the visibility. 172*90c8c64dSAndroid Build Coastguard Worker */ 173*90c8c64dSAndroid Build Coastguard Worker private final String mDescription; 174*90c8c64dSAndroid Build Coastguard Worker 175*90c8c64dSAndroid Build Coastguard Worker /** 176*90c8c64dSAndroid Build Coastguard Worker * Id of an icon used for notifications created from the visibility. 177*90c8c64dSAndroid Build Coastguard Worker */ 178*90c8c64dSAndroid Build Coastguard Worker private final int mNotificationIconId; 179*90c8c64dSAndroid Build Coastguard Worker NotificationVisibility(int visibility, String description, int notificationIconId)180*90c8c64dSAndroid Build Coastguard Worker NotificationVisibility(int visibility, String description, int notificationIconId) { 181*90c8c64dSAndroid Build Coastguard Worker mVisibility = visibility; 182*90c8c64dSAndroid Build Coastguard Worker mDescription = description; 183*90c8c64dSAndroid Build Coastguard Worker mNotificationIconId = notificationIconId; 184*90c8c64dSAndroid Build Coastguard Worker } 185*90c8c64dSAndroid Build Coastguard Worker getVisibility()186*90c8c64dSAndroid Build Coastguard Worker public int getVisibility() { 187*90c8c64dSAndroid Build Coastguard Worker return mVisibility; 188*90c8c64dSAndroid Build Coastguard Worker } 189*90c8c64dSAndroid Build Coastguard Worker getDescription()190*90c8c64dSAndroid Build Coastguard Worker public String getDescription() { 191*90c8c64dSAndroid Build Coastguard Worker return mDescription; 192*90c8c64dSAndroid Build Coastguard Worker } 193*90c8c64dSAndroid Build Coastguard Worker getNotificationIconId()194*90c8c64dSAndroid Build Coastguard Worker public int getNotificationIconId() { 195*90c8c64dSAndroid Build Coastguard Worker return mNotificationIconId; 196*90c8c64dSAndroid Build Coastguard Worker } 197*90c8c64dSAndroid Build Coastguard Worker } 198*90c8c64dSAndroid Build Coastguard Worker } 199