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