1 /*
2  * Copyright (C) 2017 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.googlecode.android_scripting;
18 
19 import android.app.AlertDialog;
20 import android.app.Notification;
21 import android.app.NotificationManager;
22 import android.app.PendingIntent;
23 import android.content.Context;
24 import android.content.DialogInterface;
25 import android.widget.Toast;
26 
27 public class Log {
Log()28   private Log() {
29     // Utility class.
30   }
31 
getTag()32   private static String getTag() {
33     StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
34     String fullClassName = stackTraceElements[4].getClassName();
35     String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
36     int lineNumber = stackTraceElements[4].getLineNumber();
37     return "sl4a." + className + ":" + lineNumber;
38   }
39 
toast(Context context, String message)40   private static void toast(Context context, String message) {
41     Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
42   }
43 
notify(Context context, String title, String contentTitle, String message)44   public static void notify(Context context, String title, String contentTitle, String message) {
45     android.util.Log.v(getTag(), String.format("%s %s", contentTitle, message));
46 
47     String packageName = context.getPackageName();
48     int iconId = context.getResources().getIdentifier("stat_sys_warning", "drawable", packageName);
49     NotificationManager notificationManager =
50         (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
51     Notification.Builder builder = new Notification.Builder(context);
52     builder.setSmallIcon(iconId > 0 ? iconId : -1)
53            .setTicker(title)
54            .setWhen(0)
55            .setContentTitle(contentTitle)
56            .setContentText(message)
57            .setContentIntent(PendingIntent.getService(context, 0, null, 0));
58     Notification note = builder.build();
59     note.contentView.getLayoutId();
60     notificationManager.notify(NotificationIdFactory.create(), note);
61   }
62 
showDialog(final Context context, final String title, final String message)63   public static void showDialog(final Context context, final String title, final String message) {
64     android.util.Log.v(getTag(), String.format("%s %s", title, message));
65 
66     MainThread.run(context, new Runnable() {
67       @Override
68       public void run() {
69         AlertDialog.Builder builder = new AlertDialog.Builder(context);
70         builder.setTitle(title);
71         builder.setMessage(message);
72 
73         DialogInterface.OnClickListener buttonListener = new DialogInterface.OnClickListener() {
74           @Override
75           public void onClick(DialogInterface dialog, int which) {
76             dialog.dismiss();
77           }
78         };
79         builder.setPositiveButton("Ok", buttonListener);
80         builder.show();
81       }
82     });
83   }
84 
v(String message)85   public static void v(String message) {
86     android.util.Log.v(getTag(), message);
87   }
88 
v(String message, Throwable e)89   public static void v(String message, Throwable e) {
90     android.util.Log.v(getTag(), message, e);
91   }
92 
v(Context context, String message)93   public static void v(Context context, String message) {
94     toast(context, message);
95     android.util.Log.v(getTag(), message);
96   }
97 
v(Context context, String message, Throwable e)98   public static void v(Context context, String message, Throwable e) {
99     toast(context, message);
100     android.util.Log.v(getTag(), message, e);
101   }
102 
e(Throwable e)103   public static void e(Throwable e) {
104     android.util.Log.e(getTag(), "Error", e);
105   }
106 
e(String message)107   public static void e(String message) {
108     android.util.Log.e(getTag(), message);
109   }
110 
e(String message, Throwable e)111   public static void e(String message, Throwable e) {
112     android.util.Log.e(getTag(), message, e);
113   }
114 
e(Context context, String message)115   public static void e(Context context, String message) {
116     toast(context, message);
117     android.util.Log.e(getTag(), message);
118   }
119 
e(Context context, String message, Throwable e)120   public static void e(Context context, String message, Throwable e) {
121     toast(context, message);
122     android.util.Log.e(getTag(), message, e);
123   }
124 
w(Throwable e)125   public static void w(Throwable e) {
126     android.util.Log.w(getTag(), "Warning", e);
127   }
128 
w(String message)129   public static void w(String message) {
130     android.util.Log.w(getTag(), message);
131   }
132 
w(String message, Throwable e)133   public static void w(String message, Throwable e) {
134     android.util.Log.w(getTag(), message, e);
135   }
136 
w(Context context, String message)137   public static void w(Context context, String message) {
138     toast(context, message);
139     android.util.Log.w(getTag(), message);
140   }
141 
w(Context context, String message, Throwable e)142   public static void w(Context context, String message, Throwable e) {
143     toast(context, message);
144     android.util.Log.w(getTag(), message, e);
145   }
146 
d(String message)147   public static void d(String message) {
148     android.util.Log.d(getTag(), message);
149   }
150 
d(String message, Throwable e)151   public static void d(String message, Throwable e) {
152     android.util.Log.d(getTag(), message, e);
153   }
154 
d(Context context, String message)155   public static void d(Context context, String message) {
156     toast(context, message);
157     android.util.Log.d(getTag(), message);
158   }
159 
d(Context context, String message, Throwable e)160   public static void d(Context context, String message, Throwable e) {
161     toast(context, message);
162     android.util.Log.d(getTag(), message, e);
163   }
164 
i(String message)165   public static void i(String message) {
166     android.util.Log.i(getTag(), message);
167   }
168 
i(String message, Throwable e)169   public static void i(String message, Throwable e) {
170     android.util.Log.i(getTag(), message, e);
171   }
172 
i(Context context, String message)173   public static void i(Context context, String message) {
174     toast(context, message);
175     android.util.Log.i(getTag(), message);
176   }
177 
i(Context context, String message, Throwable e)178   public static void i(Context context, String message, Throwable e) {
179     toast(context, message);
180     android.util.Log.i(getTag(), message, e);
181   }
182 }
183