diff options
-rw-r--r-- | telecomm/java/android/telecom/Log.java | 9 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Logging/EventManager.java | 2 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Logging/Runnable.java | 99 |
3 files changed, 107 insertions, 3 deletions
diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java index ecda3cd45f73..140cce6b4ee2 100644 --- a/telecomm/java/android/telecom/Log.java +++ b/telecomm/java/android/telecom/Log.java @@ -16,6 +16,7 @@ package android.telecom; +import android.content.Context; import android.net.Uri; import android.os.AsyncTask; import android.telecom.Logging.EventManager; @@ -175,6 +176,10 @@ public class Log { * loggers. */ + public static void setSessionContext(Context context) { + getSessionManager().setContext(context); + } + public static void startSession(String shortMethodName) { getSessionManager().startSession(shortMethodName, null); } @@ -300,7 +305,7 @@ public class Log { private static MessageDigest sMessageDigest; - static void initMd5Sum() { + public static void initMd5Sum() { new AsyncTask<Void, Void, Void>() { @Override public Void doInBackground(Void... args) { @@ -426,7 +431,7 @@ public class Log { msg = (args == null || args.length == 0) ? format : String.format(Locale.US, format, args); } catch (IllegalFormatException ife) { - e("Log", ife, "IllegalFormatException: formatString='%s' numArgs=%d", format, + e(TAG, ife, "Log: IllegalFormatException: formatString='%s' numArgs=%d", format, args.length); msg = format + " (An error occurred while formatting the message.)"; } diff --git a/telecomm/java/android/telecom/Logging/EventManager.java b/telecomm/java/android/telecom/Logging/EventManager.java index 0849804fde6d..cb53d0af1c3f 100644 --- a/telecomm/java/android/telecom/Logging/EventManager.java +++ b/telecomm/java/android/telecom/Logging/EventManager.java @@ -291,7 +291,7 @@ public class EventManager { msg = (args == null || args.length == 0) ? format : String.format(Locale.US, format, args); } catch (IllegalFormatException ife) { - Log.e("Log", ife, "IllegalFormatException: formatString='%s' numArgs=%d", format, + Log.e(this, ife, "IllegalFormatException: formatString='%s' numArgs=%d", format, args.length); msg = format + " (An error occurred while formatting the message.)"; } diff --git a/telecomm/java/android/telecom/Logging/Runnable.java b/telecomm/java/android/telecom/Logging/Runnable.java new file mode 100644 index 000000000000..b2cf3a38360a --- /dev/null +++ b/telecomm/java/android/telecom/Logging/Runnable.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2016 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 android.telecom.Logging; + +import android.telecom.Log; + +/** + * Encapsulates session logging in a Runnable to reduce code duplication when continuing subsessions + * in a handler/thread. + * @hide + */ +public abstract class Runnable { + + private Session mSubsession; + private final String mSubsessionName; + private final Object mLock; + private final java.lang.Runnable mRunnable = new java.lang.Runnable() { + @Override + public void run() { + synchronized (mLock) { + try { + Log.continueSession(mSubsession, mSubsessionName); + loggedRun(); + } finally { + if (mSubsession != null) { + Log.endSession(); + mSubsession = null; + } + } + } + } + }; + + /** + * Creates a new Telecom Runnable that incorporates Session Logging into it. Useful for carrying + * Logging Sessions through different threads as well as through handlers. + * @param subsessionName The name that will be used in the Logs to mark this Session + * @param lock The synchronization lock that will be used to lock loggedRun(). + */ + public Runnable(String subsessionName, Object lock) { + if (lock == null) { + mLock = new Object(); + } else { + mLock = lock; + } + mSubsessionName = subsessionName; + } + + /** + * Return the runnable that will be canceled in the handler queue. + * @return Runnable object to cancel. + */ + public final java.lang.Runnable getRunnableToCancel() { + return mRunnable; + } + + /** + * Creates a Runnable and a logging subsession that can be used in a handler/thread. Be sure to + * call cancel() if this session is never going to be run (removed from a handler queue, for + * for example). + * @return A Java Runnable that can be used in a handler queue or thread. + */ + public java.lang.Runnable prepare() { + cancel(); + mSubsession = Log.createSubsession(); + return mRunnable; + } + + /** + * This method is used to clean up the active session if the Runnable gets removed from a + * handler and is never run. + */ + public void cancel() { + synchronized (mLock) { + Log.cancelSubsession(mSubsession); + mSubsession = null; + } + } + + /** + * The method that will be run in the handler/thread. + */ + abstract public void loggedRun(); + +} |