1 /*
2  * Copyright 2012 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.android.notificationstudio.generator;
18 import static com.android.notificationstudio.model.EditableItem.ACTION1_ICON;
19 import static com.android.notificationstudio.model.EditableItem.ACTION1_TEXT;
20 import static com.android.notificationstudio.model.EditableItem.ACTION2_ICON;
21 import static com.android.notificationstudio.model.EditableItem.ACTION2_TEXT;
22 import static com.android.notificationstudio.model.EditableItem.ACTION3_ICON;
23 import static com.android.notificationstudio.model.EditableItem.ACTION3_TEXT;
24 import static com.android.notificationstudio.model.EditableItem.BIG_CONTENT_TITLE;
25 import static com.android.notificationstudio.model.EditableItem.BIG_TEXT;
26 import static com.android.notificationstudio.model.EditableItem.CONTENT_INFO;
27 import static com.android.notificationstudio.model.EditableItem.CONTENT_TEXT;
28 import static com.android.notificationstudio.model.EditableItem.CONTENT_TITLE;
29 import static com.android.notificationstudio.model.EditableItem.LARGE_ICON;
30 import static com.android.notificationstudio.model.EditableItem.LINES;
31 import static com.android.notificationstudio.model.EditableItem.NUMBER;
32 import static com.android.notificationstudio.model.EditableItem.PICTURE;
33 import static com.android.notificationstudio.model.EditableItem.PROGRESS;
34 import static com.android.notificationstudio.model.EditableItem.SMALL_ICON;
35 import static com.android.notificationstudio.model.EditableItem.STYLE;
36 import static com.android.notificationstudio.model.EditableItem.SUB_TEXT;
37 import static com.android.notificationstudio.model.EditableItem.SUMMARY_TEXT;
38 import static com.android.notificationstudio.model.EditableItem.USES_CHRON;
39 import static com.android.notificationstudio.model.EditableItem.WHEN;
40 
41 import android.app.Notification;
42 import android.app.PendingIntent;
43 import android.content.Context;
44 import android.content.Intent;
45 import android.support.v4.app.NotificationCompat;
46 import android.support.v4.app.NotificationCompat.BigPictureStyle;
47 import android.support.v4.app.NotificationCompat.BigTextStyle;
48 import android.support.v4.app.NotificationCompat.InboxStyle;
49 
50 import com.android.notificationstudio.model.EditableItemConstants;
51 
52 public class NotificationGenerator implements EditableItemConstants {
53 
build(Context context)54     public static Notification build(Context context) {
55 
56         PendingIntent noop = PendingIntent.getActivity(context, 0, new Intent(), 0);
57 
58         NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
59         if (SMALL_ICON.hasValue())
60             builder.setSmallIcon(SMALL_ICON.getValueInt());
61         if (CONTENT_TITLE.hasValue())
62             builder.setContentTitle(CONTENT_TITLE.getValueString());
63         if (CONTENT_TEXT.hasValue())
64             builder.setContentText(CONTENT_TEXT.getValueString());
65         if (SUB_TEXT.hasValue())
66             builder.setSubText(SUB_TEXT.getValueString());
67         if (LARGE_ICON.hasValue())
68             builder.setLargeIcon(LARGE_ICON.getValueBitmap());
69         if (CONTENT_INFO.hasValue())
70             builder.setContentInfo(CONTENT_INFO.getValueString());
71         if (NUMBER.hasValue())
72             builder.setNumber(NUMBER.getValueInt());
73         if (WHEN.hasValue())
74             builder.setWhen(WHEN.getValueLong());
75         if (PROGRESS.hasValue() && PROGRESS.getValueBool())
76             builder.setProgress(0, 0, true);
77         if (USES_CHRON.hasValue())
78             builder.setUsesChronometer(USES_CHRON.getValueBool());
79         if (ACTION1_ICON.hasValue())
80             builder.addAction(ACTION1_ICON.getValueInt(), ACTION1_TEXT.getValueString(), noop);
81         if (ACTION2_ICON.hasValue())
82             builder.addAction(ACTION2_ICON.getValueInt(), ACTION2_TEXT.getValueString(), noop);
83         if (ACTION3_ICON.hasValue())
84             builder.addAction(ACTION3_ICON.getValueInt(), ACTION3_TEXT.getValueString(), noop);
85 
86         if (STYLE.hasValue())
87             generateStyle(builder);
88 
89         // for older OSes
90         builder.setContentIntent(noop);
91 
92         return builder.build();
93     }
94 
generateStyle(NotificationCompat.Builder builder)95     private static void generateStyle(NotificationCompat.Builder builder) {
96         Integer styleValue = STYLE.getValueInt();
97 
98         if (STYLE_BIG_PICTURE.equals(styleValue)) {
99             BigPictureStyle bigPicture = new NotificationCompat.BigPictureStyle();
100             if (PICTURE.hasValue())
101                 bigPicture.bigPicture(PICTURE.getValueBitmap());
102             if (BIG_CONTENT_TITLE.hasValue())
103                 bigPicture.setBigContentTitle(BIG_CONTENT_TITLE.getValueString());
104             if (SUMMARY_TEXT.hasValue())
105                 bigPicture.setSummaryText(SUMMARY_TEXT.getValueString());
106             builder.setStyle(bigPicture);
107         } else if (STYLE_BIG_TEXT.equals(styleValue)) {
108             BigTextStyle bigText = new NotificationCompat.BigTextStyle();
109             if (BIG_TEXT.hasValue())
110                 bigText.bigText(BIG_TEXT.getValueString());
111             if (BIG_CONTENT_TITLE.hasValue())
112                 bigText.setBigContentTitle(BIG_CONTENT_TITLE.getValueString());
113             if (SUMMARY_TEXT.hasValue())
114                 bigText.setSummaryText(SUMMARY_TEXT.getValueString());
115             builder.setStyle(bigText);
116         } else if (STYLE_INBOX.equals(styleValue)) {
117             InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
118             if (LINES.hasValue()) {
119                 for (String line : LINES.getValueString().split("\\n")) {
120                     inboxStyle.addLine(line);
121                 }
122             }
123             if (BIG_CONTENT_TITLE.hasValue())
124                 inboxStyle.setBigContentTitle(BIG_CONTENT_TITLE.getValueString());
125             if (SUMMARY_TEXT.hasValue())
126                 inboxStyle.setSummaryText(SUMMARY_TEXT.getValueString());
127             builder.setStyle(inboxStyle);
128         }
129     }
130 
131 }
132