Use the extended ConsoleMessage class to populate the Error Console, and in colour!
Also tag the messages from the console that we pipe to the system log with Browser rather than Tab to match previous behavior and make filtering the logs easier (See b/2376873)
Change-Id: I1e2bb03c5b4e57e531a97acaa17d475224598209
diff --git a/src/com/android/browser/ErrorConsoleView.java b/src/com/android/browser/ErrorConsoleView.java
index 56f663b..0f87cb5 100644
--- a/src/com/android/browser/ErrorConsoleView.java
+++ b/src/com/android/browser/ErrorConsoleView.java
@@ -18,11 +18,13 @@
import android.content.Context;
import android.database.DataSetObserver;
+import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
+import android.webkit.ConsoleMessage;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
@@ -55,7 +57,7 @@
// Before we've been asked to display the console, cache any messages that should
// be added to the console. Then when we do display the console, add them to the view
// then.
- private Vector<ErrorConsoleMessage> mErrorMessageCache;
+ private Vector<ConsoleMessage> mErrorMessageCache;
public ErrorConsoleView(Context context) {
super(context);
@@ -108,8 +110,8 @@
// Add any cached messages to the list now that we've assembled the view.
if (mErrorMessageCache != null) {
- for (ErrorConsoleMessage msg : mErrorMessageCache) {
- mErrorList.addErrorMessage(msg.getMessage(), msg.getSourceID(), msg.getLineNumber());
+ for (ConsoleMessage msg : mErrorMessageCache) {
+ mErrorList.addErrorMessage(msg);
}
mErrorMessageCache.clear();
}
@@ -120,14 +122,14 @@
/**
* Adds a message to the set of messages the console uses.
*/
- public void addErrorMessage(String msg, String sourceId, int lineNumber) {
+ public void addErrorMessage(ConsoleMessage consoleMessage) {
if (mSetupComplete) {
- mErrorList.addErrorMessage(msg, sourceId, lineNumber);
+ mErrorList.addErrorMessage(consoleMessage);
} else {
if (mErrorMessageCache == null) {
- mErrorMessageCache = new Vector<ErrorConsoleMessage>();
+ mErrorMessageCache = new Vector<ConsoleMessage>();
}
- mErrorMessageCache.add(new ErrorConsoleMessage(msg, sourceId, lineNumber));
+ mErrorMessageCache.add(consoleMessage);
}
}
@@ -215,8 +217,8 @@
setAdapter(mConsoleMessages);
}
- public void addErrorMessage(String msg, String sourceId, int lineNumber) {
- mConsoleMessages.add(msg, sourceId, lineNumber);
+ public void addErrorMessage(ConsoleMessage consoleMessage) {
+ mConsoleMessages.add(consoleMessage);
setSelection(mConsoleMessages.getCount());
}
@@ -231,11 +233,11 @@
private class ErrorConsoleMessageList extends android.widget.BaseAdapter
implements android.widget.ListAdapter {
- private Vector<ErrorConsoleMessage> mMessages;
+ private Vector<ConsoleMessage> mMessages;
private LayoutInflater mInflater;
public ErrorConsoleMessageList(Context context) {
- mMessages = new Vector<ErrorConsoleMessage>();
+ mMessages = new Vector<ConsoleMessage>();
mInflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
}
@@ -243,8 +245,8 @@
/**
* Add a new message to the list and update the View.
*/
- public void add(String msg, String sourceID, int lineNumber) {
- mMessages.add(new ErrorConsoleMessage(msg, sourceID, lineNumber));
+ public void add(ConsoleMessage consoleMessage) {
+ mMessages.add(consoleMessage);
notifyDataSetChanged();
}
@@ -288,7 +290,7 @@
*/
public View getView(int position, View convertView, ViewGroup parent) {
View view;
- ErrorConsoleMessage error = mMessages.get(position);
+ ConsoleMessage error = mMessages.get(position);
if (error == null) {
return null;
@@ -302,38 +304,26 @@
TextView headline = (TextView) view.findViewById(android.R.id.text1);
TextView subText = (TextView) view.findViewById(android.R.id.text2);
- headline.setText(error.getSourceID() + ":" + error.getLineNumber());
- subText.setText(error.getMessage());
+ headline.setText(error.sourceId() + ":" + error.lineNumber());
+ subText.setText(error.message());
+ switch (error.messageLevel()) {
+ case ERROR:
+ subText.setTextColor(Color.RED);
+ break;
+ case WARNING:
+ // Orange
+ subText.setTextColor(Color.rgb(255,192,0));
+ break;
+ case TIP:
+ subText.setTextColor(Color.BLUE);
+ break;
+ default:
+ subText.setTextColor(Color.LTGRAY);
+ break;
+ }
return view;
}
}
}
-
- /**
- * This class holds the data for a single error message in the console.
- */
- private static class ErrorConsoleMessage {
- private String mMessage;
- private String mSourceID;
- private int mLineNumber;
-
- public ErrorConsoleMessage(String msg, String sourceID, int lineNumber) {
- mMessage = msg;
- mSourceID = sourceID;
- mLineNumber = lineNumber;
- }
-
- public String getMessage() {
- return mMessage;
- }
-
- public String getSourceID() {
- return mSourceID;
- }
-
- public int getLineNumber() {
- return mLineNumber;
- }
- }
}
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index b434a5d..3c8f5ba 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -46,6 +46,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
+import android.webkit.ConsoleMessage;
import android.webkit.CookieSyncManager;
import android.webkit.GeolocationPermissions;
import android.webkit.HttpAuthHandler;
@@ -70,6 +71,11 @@
class Tab {
// Log Tag
private static final String LOGTAG = "Tab";
+ // Special case the logtag for messages for the Console to make it easier to
+ // filter them and match the logtag used for these messages in older versions
+ // of the browser.
+ private static final String CONSOLE_LOGTAG = "browser";
+
// The Geolocation permissions prompt
private GeolocationPermissionsPrompt mGeolocationPermissionsPrompt;
// Main WebView wrapper
@@ -983,24 +989,43 @@
/* Adds a JavaScript error message to the system log and if the JS
* console is enabled in the about:debug options, to that console
* also.
- * @param message The error message to report.
- * @param lineNumber The line number of the error.
- * @param sourceID The name of the source file that caused the error.
+ * @param consoleMessage the message object.
*/
@Override
- public void onConsoleMessage(String message, int lineNumber,
- String sourceID) {
+ public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
if (mInForeground) {
// call getErrorConsole(true) so it will create one if needed
ErrorConsoleView errorConsole = getErrorConsole(true);
- errorConsole.addErrorMessage(message, sourceID, lineNumber);
+ errorConsole.addErrorMessage(consoleMessage);
if (mActivity.shouldShowErrorConsole()
&& errorConsole.getShowState() != ErrorConsoleView.SHOW_MAXIMIZED) {
errorConsole.showConsole(ErrorConsoleView.SHOW_MINIMIZED);
}
}
- Log.w(LOGTAG, "Console: " + message + " " + sourceID + ":"
- + lineNumber);
+
+ String message = "Console: " + consoleMessage.message() + " "
+ + consoleMessage.sourceId() + ":"
+ + consoleMessage.lineNumber();
+
+ switch (consoleMessage.messageLevel()) {
+ case TIP:
+ Log.v(CONSOLE_LOGTAG, message);
+ break;
+ case LOG:
+ Log.i(CONSOLE_LOGTAG, message);
+ break;
+ case WARNING:
+ Log.w(CONSOLE_LOGTAG, message);
+ break;
+ case ERROR:
+ Log.e(CONSOLE_LOGTAG, message);
+ break;
+ case DEBUG:
+ Log.d(CONSOLE_LOGTAG, message);
+ break;
+ }
+
+ return true;
}
/**