blob: 616632b34ef20d97f47b4e90f0480a1c43f3bf50 [file] [log] [blame]
/*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.lnotifications;
import android.app.Fragment;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.Toast;
import java.util.Random;
/**
* Fragment that demonstrates how notifications with different visibility metadata differ on
* a lockscreen.
*/
public class VisibilityMetadataFragment extends Fragment {
private NotificationManager mNotificationManager;
/**
* {@link RadioGroup} that has Visibility RadioButton in its children.
*/
private RadioGroup mRadioGroup;
/**
* Incremental Integer used for ID for notifications so that each notification will be
* treated differently.
*/
private Integer mIncrementalNotificationId = Integer.valueOf(0);
/**
* Button to show a notification.
*/
private Button mShowNotificationButton;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment NotificationFragment.
*/
public static VisibilityMetadataFragment newInstance() {
VisibilityMetadataFragment fragment = new VisibilityMetadataFragment();
fragment.setRetainInstance(true);
return fragment;
}
public VisibilityMetadataFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNotificationManager = (NotificationManager) getActivity().getSystemService(Context
.NOTIFICATION_SERVICE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_visibility_metadata_notification, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mShowNotificationButton = (Button) view.findViewById(R.id.show_notification_button);
mShowNotificationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NotificationVisibility visibility = getVisibilityFromSelectedRadio(mRadioGroup);
showNotificationClicked(visibility);
}
});
mRadioGroup = (RadioGroup) view.findViewById(R.id.visibility_radio_group);
}
/**
* Creates a new notification with a different visibility level.
*
* @param visibility The visibility of the notification to be created.
*
* @return A Notification instance.
*/
//@VisibleForTesting
Notification createNotification(NotificationVisibility visibility) {
Notification.Builder notificationBuilder = new Notification.Builder(getActivity())
.setContentTitle("Notification for Visibility metadata");
notificationBuilder.setVisibility(visibility.getVisibility());
notificationBuilder.setContentText(String.format("Visibility : %s",
visibility.getDescription()));
notificationBuilder.setSmallIcon(visibility.getNotificationIconId());
return notificationBuilder.build();
}
/**
* Returns a {@link NotificationVisibility} depending on which RadioButton in the radiogroup
* is selected.
*
* @param radiogroup The RadioGroup.
* @return The instance of {@link NotificationVisibility} corresponding to RadioButton.
*/
private NotificationVisibility getVisibilityFromSelectedRadio(RadioGroup radiogroup) {
switch (radiogroup.getCheckedRadioButtonId()) {
case R.id.visibility_public_radio_button:
return NotificationVisibility.PUBLIC;
case R.id.visibility_private_radio_button:
return NotificationVisibility.PRIVATE;
case R.id.visibility_secret_radio_button:
return NotificationVisibility.SECRET;
default:
//If not selected, returns PUBLIC as default.
return NotificationVisibility.PUBLIC;
}
}
/**
* Invoked when {@link #mShowNotificationButton} is clicked.
* Creates a new notification with a different visibility level.
*
* @param visibility The visibility of the notification to be created.
*/
private void showNotificationClicked(NotificationVisibility visibility) {
// Assigns a unique (incremented) notification ID in order to treat each notification as a
// different one. This helps demonstrate how a notification with a different visibility
// level differs on the lockscreen.
mIncrementalNotificationId = new Integer(mIncrementalNotificationId + 1);
mNotificationManager.notify(mIncrementalNotificationId, createNotification(visibility));
Toast.makeText(getActivity(), "Show Notification clicked", Toast.LENGTH_SHORT).show();
}
/**
* Enum indicating possible visibility levels for notifications and related data(String
* representation of visibility levels, an icon ID to create a notification) to
* create a notification.
*/
//@VisibleForTesting
static enum NotificationVisibility {
PUBLIC(Notification.VISIBILITY_PUBLIC, "Public", R.drawable.ic_public_notification),
PRIVATE(Notification.VISIBILITY_PRIVATE, "Private", R.drawable.ic_private_notification),
SECRET(Notification.VISIBILITY_SECRET, "Secret", R.drawable.ic_secret_notification);
/**
* Visibility level of the notification.
*/
private final int mVisibility;
/**
* String representation of the visibility.
*/
private final String mDescription;
/**
* Id of an icon used for notifications created from the visibility.
*/
private final int mNotificationIconId;
NotificationVisibility(int visibility, String description, int notificationIconId) {
mVisibility = visibility;
mDescription = description;
mNotificationIconId = notificationIconId;
}
public int getVisibility() {
return mVisibility;
}
public String getDescription() {
return mDescription;
}
public int getNotificationIconId() {
return mNotificationIconId;
}
}
}