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