Home | History | Annotate | Download | only in lnotifications
      1 /*
      2 * Copyright 2014 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.example.android.lnotifications;
     18 
     19 import android.app.Fragment;
     20 import android.app.Notification;
     21 import android.app.NotificationManager;
     22 import android.content.Context;
     23 import android.os.Bundle;
     24 import android.view.LayoutInflater;
     25 import android.view.View;
     26 import android.view.ViewGroup;
     27 import android.widget.Button;
     28 import android.widget.RadioGroup;
     29 import android.widget.Toast;
     30 
     31 import java.util.Random;
     32 
     33 
     34 /**
     35  * Fragment that demonstrates how notifications with different visibility metadata differ on
     36  * a lockscreen.
     37  */
     38 public class VisibilityMetadataFragment extends Fragment {
     39 
     40     private NotificationManager mNotificationManager;
     41 
     42     /**
     43      * {@link RadioGroup} that has Visibility RadioButton in its children.
     44      */
     45     private RadioGroup mRadioGroup;
     46 
     47     /**
     48      * Incremental Integer used for ID for notifications so that each notification will be
     49      * treated differently.
     50      */
     51     private Integer mIncrementalNotificationId = Integer.valueOf(0);
     52 
     53     /**
     54      * Button to show a notification.
     55      */
     56     private Button mShowNotificationButton;
     57 
     58     /**
     59      * Use this factory method to create a new instance of
     60      * this fragment using the provided parameters.
     61      *
     62      * @return A new instance of fragment NotificationFragment.
     63      */
     64     public static VisibilityMetadataFragment newInstance() {
     65         VisibilityMetadataFragment fragment = new VisibilityMetadataFragment();
     66         fragment.setRetainInstance(true);
     67         return fragment;
     68     }
     69 
     70     public VisibilityMetadataFragment() {
     71         // Required empty public constructor
     72     }
     73 
     74     @Override
     75     public void onCreate(Bundle savedInstanceState) {
     76         super.onCreate(savedInstanceState);
     77         mNotificationManager = (NotificationManager) getActivity().getSystemService(Context
     78                 .NOTIFICATION_SERVICE);
     79     }
     80 
     81     @Override
     82     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     83                              Bundle savedInstanceState) {
     84         // Inflate the layout for this fragment
     85         return inflater.inflate(R.layout.fragment_visibility_metadata_notification, container, false);
     86     }
     87 
     88     @Override
     89     public void onViewCreated(View view, Bundle savedInstanceState) {
     90         super.onViewCreated(view, savedInstanceState);
     91         mShowNotificationButton = (Button) view.findViewById(R.id.show_notification_button);
     92         mShowNotificationButton.setOnClickListener(new View.OnClickListener() {
     93             @Override
     94             public void onClick(View view) {
     95                 NotificationVisibility visibility = getVisibilityFromSelectedRadio(mRadioGroup);
     96                 showNotificationClicked(visibility);
     97             }
     98         });
     99         mRadioGroup = (RadioGroup) view.findViewById(R.id.visibility_radio_group);
    100     }
    101 
    102     /**
    103      * Creates a new notification with a different visibility level.
    104      *
    105      * @param visibility The visibility of the notification to be created.
    106      *
    107      * @return A Notification instance.
    108      */
    109     //@VisibleForTesting
    110     Notification createNotification(NotificationVisibility visibility) {
    111         Notification.Builder notificationBuilder = new Notification.Builder(getActivity())
    112                 .setContentTitle("Notification for Visibility metadata");
    113 
    114         notificationBuilder.setVisibility(visibility.getVisibility());
    115         notificationBuilder.setContentText(String.format("Visibility : %s",
    116                 visibility.getDescription()));
    117         notificationBuilder.setSmallIcon(visibility.getNotificationIconId());
    118 
    119         return notificationBuilder.build();
    120     }
    121 
    122     /**
    123      * Returns a {@link NotificationVisibility} depending on which RadioButton in the radiogroup
    124      * is selected.
    125      *
    126      * @param radiogroup The RadioGroup.
    127      * @return The instance of {@link NotificationVisibility} corresponding to RadioButton.
    128      */
    129     private NotificationVisibility getVisibilityFromSelectedRadio(RadioGroup radiogroup) {
    130         switch (radiogroup.getCheckedRadioButtonId()) {
    131             case R.id.visibility_public_radio_button:
    132                 return NotificationVisibility.PUBLIC;
    133             case R.id.visibility_private_radio_button:
    134                 return NotificationVisibility.PRIVATE;
    135             case R.id.visibility_secret_radio_button:
    136                 return NotificationVisibility.SECRET;
    137             default:
    138                 //If not selected, returns PUBLIC as default.
    139                 return NotificationVisibility.PUBLIC;
    140         }
    141     }
    142 
    143     /**
    144      * Invoked when {@link #mShowNotificationButton} is clicked.
    145      * Creates a new notification with a different visibility level.
    146      *
    147      * @param visibility The visibility of the notification to be created.
    148      */
    149     private void showNotificationClicked(NotificationVisibility visibility) {
    150         // Assigns a unique (incremented) notification ID in order to treat each notification as a
    151         // different one. This helps demonstrate how a notification with a different visibility
    152         // level differs on the lockscreen.
    153         mIncrementalNotificationId = new Integer(mIncrementalNotificationId + 1);
    154         mNotificationManager.notify(mIncrementalNotificationId, createNotification(visibility));
    155         Toast.makeText(getActivity(), "Show Notification clicked", Toast.LENGTH_SHORT).show();
    156     }
    157 
    158     /**
    159      * Enum indicating possible visibility levels for notifications and related data(String
    160      * representation of visibility levels, an icon ID to create a notification) to
    161      * create a notification.
    162      */
    163     //@VisibleForTesting
    164     static enum NotificationVisibility {
    165         PUBLIC(Notification.VISIBILITY_PUBLIC, "Public", R.drawable.ic_public_notification),
    166         PRIVATE(Notification.VISIBILITY_PRIVATE, "Private", R.drawable.ic_private_notification),
    167         SECRET(Notification.VISIBILITY_SECRET, "Secret", R.drawable.ic_secret_notification);
    168 
    169         /**
    170          * Visibility level of the notification.
    171          */
    172         private final int mVisibility;
    173 
    174         /**
    175          * String representation of the visibility.
    176          */
    177         private final String mDescription;
    178 
    179         /**
    180          * Id of an icon used for notifications created from the visibility.
    181          */
    182         private final int mNotificationIconId;
    183 
    184         NotificationVisibility(int visibility, String description, int notificationIconId) {
    185             mVisibility = visibility;
    186             mDescription = description;
    187             mNotificationIconId = notificationIconId;
    188         }
    189 
    190         public int getVisibility() {
    191             return mVisibility;
    192         }
    193 
    194         public String getDescription() {
    195             return mDescription;
    196         }
    197 
    198         public int getNotificationIconId() {
    199             return mNotificationIconId;
    200         }
    201     }
    202 }
    203