From dbc2ed4982139d0dae5d380979a385938ca832f9 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 18 Mar 2018 16:36:14 +0200 Subject: Implemented custom logging on Java ! --- .../java/com/twine/tango/unittesting/Logging_TST.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java (limited to 'Software/Android_Studio/Tango.UnitTesting/src/androidTest/java') diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java new file mode 100644 index 000000000..0e7b1fbd5 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java @@ -0,0 +1,9 @@ +package com.twine.tango.unittesting; + +/** + * Created by Roy on 3/18/2018. + */ + +public class Logging_TST +{ +} -- cgit v1.3.1 From a21d0758fd56a76d934a036a3bfeacea8984ee85 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 18 Mar 2018 16:36:18 +0200 Subject: Implemented custom logging on Java ! --- Software/Android_Studio/Tango.DAL/build.gradle | 4 +- .../Tango.DAL/src/main/res/raw/tangodb | Bin 274432 -> 430080 bytes Software/Android_Studio/Tango.Logging/build.gradle | 7 + .../com/twine/tango/logging/ExceptionLogItem.java | 41 ++++ .../java/com/twine/tango/logging/FileLogger.java | 99 ++++++++++ .../main/java/com/twine/tango/logging/ILogger.java | 9 + .../java/com/twine/tango/logging/LogCatLogger.java | 58 ++++++ .../java/com/twine/tango/logging/LogCategory.java | 5 + .../main/java/com/twine/tango/logging/LogItem.java | 64 ++++++- .../java/com/twine/tango/logging/LogManager.java | 206 +++++++++++++++++++++ .../com/twine/tango/logging/MessageLogItem.java | 24 +++ Software/Android_Studio/Tango.PMR/build.gradle | 14 +- .../Android_Studio/Tango.UnitTesting/build.gradle | 1 + .../com/twine/tango/unittesting/Logging_TST.java | 39 ++++ Software/Android_Studio/settings.gradle | 2 +- Software/DB/Tango.db | Bin 274432 -> 430080 bytes Software/DB/Tango.mdf | Bin 75497472 -> 75497472 bytes Software/DB/Tango_log.ldf | Bin 1048576 -> 1048576 bytes Software/Visual_Studio/Tango.Logging/FileLogger.cs | 2 +- 19 files changed, 563 insertions(+), 12 deletions(-) (limited to 'Software/Android_Studio/Tango.UnitTesting/src/androidTest/java') diff --git a/Software/Android_Studio/Tango.DAL/build.gradle b/Software/Android_Studio/Tango.DAL/build.gradle index 86c71c619..abaccdd33 100644 --- a/Software/Android_Studio/Tango.DAL/build.gradle +++ b/Software/Android_Studio/Tango.DAL/build.gradle @@ -71,6 +71,6 @@ task generateEntities(type: Exec, description: 'Generate DAL Entities') { } } -preBuild.dependsOn(copyFiles) +//preBuild.dependsOn(copyFiles) -preBuild.dependsOn(generateEntities) \ No newline at end of file +//preBuild.dependsOn(generateEntities) \ No newline at end of file diff --git a/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb index 82b936014..336f96dcf 100644 Binary files a/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb and b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb differ diff --git a/Software/Android_Studio/Tango.Logging/build.gradle b/Software/Android_Studio/Tango.Logging/build.gradle index 36a8dfafb..724faea79 100644 --- a/Software/Android_Studio/Tango.Logging/build.gradle +++ b/Software/Android_Studio/Tango.Logging/build.gradle @@ -20,6 +20,11 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { @@ -29,4 +34,6 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + + compile globalDependencies.joda } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ExceptionLogItem.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ExceptionLogItem.java index 86166ff95..49aa1b687 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ExceptionLogItem.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ExceptionLogItem.java @@ -6,4 +6,45 @@ package com.twine.tango.logging; public class ExceptionLogItem extends LogItem { + private Exception exception; + private String description; + + public Exception getException() + { + return exception; + } + + public void setException(Exception exception) + { + this.exception = exception; + } + + public String getDescription() + { + return description; + } + + public void setDescription(String description) + { + this.description = description; + } + + @Override + public String getMessage() + { + return exception.getMessage(); + } + + @Override + public String toString() + { + return String.format("[%s] [%s] [%s] [%s] [Line %s]: %s\n%s", + getTimeStamp().toString("HH:mm:ss.SS"), + getCategory().toString(), + getCallerFile(), + getCallerMethodName(), + String.valueOf(getCallerLineNumber()), + getDescription(), + exception.toString()); + } } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/FileLogger.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/FileLogger.java index db9da89a7..50b6b27b6 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/FileLogger.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/FileLogger.java @@ -1,9 +1,108 @@ package com.twine.tango.logging; +import android.content.Context; + +import org.joda.time.DateTime; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + /** * Created by Roy on 3/18/2018. */ public class FileLogger implements ILogger { + private boolean enabled; + private boolean immediate; + private String fileName; + private String folder; + private Context context; + private FileOutputStream stream; + private boolean fileCreated; + + public FileLogger(Context context) + { + this.context = context; + folder = "logs"; + fileName = "log-" + DateTime.now().toString("dd-MM-yyyy_HH-mm-ss") + ".log"; + enabled = true; + } + + public FileLogger(Context context, String folder, String fileName) + { + this(context); + + this.folder = folder; + this.fileName = fileName; + this.context = context; + } + + @Override + public void setEnabled(boolean enabled) + { + this.enabled = enabled; + } + + @Override + public boolean getEnabled() + { + return this.enabled; + } + + @Override + public void setImmediate(boolean immediate) + { + this.immediate = immediate; + } + + @Override + public boolean getImmediate() + { + return this.immediate; + } + + public String getFileName() + { + return fileName; + } + + @Override + public void onLog(LogItem log) + { + try + { + ensureLogFile(); + stream.write((log.toString() + System.lineSeparator()).getBytes(StandardCharsets.UTF_8)); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + protected void finalize() throws Throwable + { + super.finalize(); + stream.close(); + } + + private void ensureLogFile() throws IOException + { + if (!fileCreated) + { + fileCreated = true; + File sdcard = context.getFilesDir(); + File dir = new File(sdcard.getAbsolutePath() + "/" + folder); + boolean b = dir.mkdirs(); + + File file = new File(dir.getAbsolutePath() + "/" + fileName); + b = file.createNewFile(); + + stream = new FileOutputStream(file, true); + } + } } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ILogger.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ILogger.java index 4e550332b..a6ddf1dfc 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ILogger.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/ILogger.java @@ -6,4 +6,13 @@ package com.twine.tango.logging; public interface ILogger { + void onLog(LogItem log); + + void setEnabled(boolean enabled); + + boolean getEnabled(); + + void setImmediate(boolean immediate); + + boolean getImmediate(); } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCatLogger.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCatLogger.java index 8dc14abad..e394503e1 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCatLogger.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCatLogger.java @@ -1,9 +1,67 @@ package com.twine.tango.logging; +import android.util.Log; + /** * Created by Roy on 3/18/2018. */ public class LogCatLogger implements ILogger { + private boolean enabled; + private boolean immediate; + private static final String tag = "Tango"; + + public LogCatLogger() + { + enabled = true; + immediate = true; + } + + @Override + public void setEnabled(boolean enabled) + { + this.enabled = enabled; + } + + @Override + public boolean getEnabled() + { + return this.enabled; + } + + @Override + public void setImmediate(boolean immediate) + { + this.immediate = immediate; + } + + @Override + public boolean getImmediate() + { + return this.immediate; + } + + @Override + public void onLog(LogItem log) + { + switch (log.getCategory()) + { + case Info: + Log.i(tag,log.toString()); + break; + case Error: + Log.e(tag,log.toString()); + break; + case Warning: + Log.w(tag,log.toString()); + break; + case Critical: + Log.wtf(tag,log.toString()); + break; + case Debug: + Log.d(tag,log.toString()); + break; + } + } } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCategory.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCategory.java index bf116f95a..5ce2c521e 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCategory.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogCategory.java @@ -6,4 +6,9 @@ package com.twine.tango.logging; public enum LogCategory { + Info, + Warning, + Error, + Critical, + Debug, } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogItem.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogItem.java index 327858b15..deaeb3084 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogItem.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogItem.java @@ -1,9 +1,71 @@ package com.twine.tango.logging; +import org.joda.time.DateTime; + /** * Created by Roy on 3/18/2018. */ -public class LogItem +public abstract class LogItem { + private String callerMethodName; + private String callerFile; + private int callerLineNumber; + private DateTime timeStamp; + private LogCategory category; + + public String getCallerMethodName() + { + return callerMethodName; + } + + public void setCallerMethodName(String callerMethodName) + { + this.callerMethodName = callerMethodName; + } + + public String getCallerFile() + { + return callerFile; + } + + public void setCallerFile(String callerFile) + { + this.callerFile = callerFile; + } + + public int getCallerLineNumber() + { + return callerLineNumber; + } + + public void setCallerLineNumber(int callerLineNumber) + { + this.callerLineNumber = callerLineNumber; + } + + public DateTime getTimeStamp() + { + return timeStamp; + } + + public void setTimeStamp(DateTime timeStamp) + { + this.timeStamp = timeStamp; + } + + public LogCategory getCategory() + { + return category; + } + + public void setCategory(LogCategory category) + { + this.category = category; + } + + public abstract String getMessage(); + + @Override + public abstract String toString(); } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java index f77e09274..b3b8041a2 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java @@ -1,9 +1,215 @@ package com.twine.tango.logging; +import org.joda.time.DateTime; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; + /** * Created by Roy on 3/18/2018. */ public class LogManager { + private static LogManager defaultLogger; + + private List loggers; + private ConcurrentLinkedQueue logs; + private Thread loggingThread; + private boolean isStarted; + private List categories; + + public static LogManager getDefault() + { + if (defaultLogger == null) + { + defaultLogger = new LogManager(); + } + + return defaultLogger; + } + + public LogManager() + { + loggers = new ArrayList<>(); + logs = new ConcurrentLinkedQueue<>(); + categories = new ArrayList<>(); + + categories.add(LogCategory.Info); + categories.add(LogCategory.Critical); + categories.add(LogCategory.Error); + categories.add(LogCategory.Warning); + } + + public List getCategories() + { + return categories; + } + + public void setCategories(List categories) + { + this.categories = categories; + } + + public boolean getHasLogsPending() + { + return logs.size() > 0; + } + + public void registerLogger(ILogger logger) + { + if (logger != null && !loggers.contains(logger)) + { + loggers.add(logger); + } + } + + public void unregisterLogger(ILogger logger) + { + if (logger != null && loggers.contains(logger)) + { + loggers.remove(logger); + } + } + + private void fillStackInfo(StackTraceElement[] stackTraceElements, LogItem log) + { + if (stackTraceElements.length > 0) + { + int counter = 0; + + StackTraceElement stack = stackTraceElements[counter]; + + while (!stack.getFileName().equals("LogManager.java")) + { + stack = stackTraceElements[counter++]; + } + + stack = stackTraceElements[counter]; + + log.setCallerFile(stack.getFileName()); + log.setCallerMethodName(stack.getMethodName()); + log.setCallerLineNumber(stack.getLineNumber()); + } + } + + public Exception log(Exception exception, LogCategory category, String description) + { + if (!categories.contains(category)) return exception; + + ExceptionLogItem log = new ExceptionLogItem(); + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + fillStackInfo(stackTraceElements, log); + log.setTimeStamp(DateTime.now()); + log.setCategory(category); + log.setDescription(description); + log.setException(exception); + + appendLog(log); + + return exception; + } + + public Exception log(Exception exception, String description) + { + ExceptionLogItem log = new ExceptionLogItem(); + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + fillStackInfo(stackTraceElements, log); + log.setTimeStamp(DateTime.now()); + log.setDescription(description); + log.setException(exception); + log.setCategory(LogCategory.Error); + + appendLog(log); + + return exception; + } + + public String log(String message, LogCategory category) + { + MessageLogItem log = new MessageLogItem(); + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + fillStackInfo(stackTraceElements, log); + log.setTimeStamp(DateTime.now()); + log.setMessage(message); + log.setCategory(category); + + appendLog(log); + + return message; + } + + public String log(String message) + { + MessageLogItem log = new MessageLogItem(); + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + fillStackInfo(stackTraceElements, log); + log.setTimeStamp(DateTime.now()); + log.setMessage(message); + log.setCategory(LogCategory.Info); + + appendLog(log); + + return message; + } + + private void appendLog(LogItem log) + { + if (log != null) + { + for (ILogger logger : loggers) + { + if (logger.getEnabled() && logger.getImmediate()) + { + logger.onLog(log); + } + } + + logs.add(log); + } + + startLoggingThread(); + } + + private void startLoggingThread() + { + if (!isStarted) + { + isStarted = true; + loggingThread = new Thread(this::loggingThreadMethod); + loggingThread.start(); + } + } + + private void loggingThreadMethod() + { + try + { + while (isStarted) + { + while (logs.size() > 0) + { + LogItem log = logs.poll(); + + if (log != null) + { + for (ILogger logger : loggers) + { + if (logger.getEnabled() && !logger.getImmediate()) + { + logger.onLog(log); + } + } + } + } + + Thread.sleep(10); + } + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } } diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/MessageLogItem.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/MessageLogItem.java index 90659cb7e..cf7c7ab48 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/MessageLogItem.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/MessageLogItem.java @@ -6,4 +6,28 @@ package com.twine.tango.logging; public class MessageLogItem extends LogItem { + private String message; + + @Override + public String getMessage() + { + return message; + } + + public void setMessage(String message) + { + this.message = message; + } + + @Override + public String toString() + { + return String.format("[%s] [%s] [%s] [%s] [Line %s]: %s", + getTimeStamp().toString("HH:mm:ss.SS"), + getCategory().toString(), + getCallerFile(), + getCallerMethodName(), + String.valueOf(getCallerLineNumber()), + getMessage()); + } } diff --git a/Software/Android_Studio/Tango.PMR/build.gradle b/Software/Android_Studio/Tango.PMR/build.gradle index d65ec1a97..1aca6d009 100644 --- a/Software/Android_Studio/Tango.PMR/build.gradle +++ b/Software/Android_Studio/Tango.PMR/build.gradle @@ -56,10 +56,10 @@ task reflectPMR() << { } } -tasks.withType(JavaCompile) { - compileTask -> compileTask.dependsOn createPMR -} - -tasks.withType(JavaCompile) { - compileTask -> compileTask.dependsOn reflectPMR -} +//tasks.withType(JavaCompile) { +// compileTask -> compileTask.dependsOn createPMR +//} +// +//tasks.withType(JavaCompile) { +// compileTask -> compileTask.dependsOn reflectPMR +//} diff --git a/Software/Android_Studio/Tango.UnitTesting/build.gradle b/Software/Android_Studio/Tango.UnitTesting/build.gradle index 3f58e3803..a785e4580 100644 --- a/Software/Android_Studio/Tango.UnitTesting/build.gradle +++ b/Software/Android_Studio/Tango.UnitTesting/build.gradle @@ -45,4 +45,5 @@ dependencies { implementation project(':Tango.Transport') implementation project(':Tango.Web') implementation project(':Tango.NativeBridge') + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java index 0e7b1fbd5..a1baa6f67 100644 --- a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java +++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java @@ -1,9 +1,48 @@ package com.twine.tango.unittesting; +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import com.twine.tango.logging.FileLogger; +import com.twine.tango.logging.LogCatLogger; +import com.twine.tango.logging.LogCategory; +import com.twine.tango.logging.LogManager; + +import org.junit.Test; +import org.junit.runner.RunWith; + /** * Created by Roy on 3/18/2018. */ +@RunWith(AndroidJUnit4.class) public class Logging_TST { + @Test + public void register_and_log_using_log_Cat() + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + LogManager logManager = LogManager.getDefault(); + + logManager.registerLogger(new LogCatLogger()); + logManager.registerLogger(new FileLogger(appContext)); + + logManager.log("This is a general log message."); + logManager.log("This is a critical log message", LogCategory.Critical); + + while (logManager.getHasLogsPending()) + { + try + { + Thread.sleep(5000); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + } } diff --git a/Software/Android_Studio/settings.gradle b/Software/Android_Studio/settings.gradle index 15bb94e3b..77d1d0863 100644 --- a/Software/Android_Studio/settings.gradle +++ b/Software/Android_Studio/settings.gradle @@ -1 +1 @@ -include ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL', ':Tango.Web', ':Tango.UnitTesting', ':Tango.NativeBridge' +include ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL', ':Tango.Web', ':Tango.UnitTesting', ':Tango.NativeBridge', ':Tango.Logging' diff --git a/Software/DB/Tango.db b/Software/DB/Tango.db index 82b936014..336f96dcf 100644 Binary files a/Software/DB/Tango.db and b/Software/DB/Tango.db differ diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf index 328def1cd..8542aaac6 100644 Binary files a/Software/DB/Tango.mdf and b/Software/DB/Tango.mdf differ diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf index a89ce1563..bf5478dd0 100644 Binary files a/Software/DB/Tango_log.ldf and b/Software/DB/Tango_log.ldf differ diff --git a/Software/Visual_Studio/Tango.Logging/FileLogger.cs b/Software/Visual_Studio/Tango.Logging/FileLogger.cs index 75c6e529e..e104b59b9 100644 --- a/Software/Visual_Studio/Tango.Logging/FileLogger.cs +++ b/Software/Visual_Studio/Tango.Logging/FileLogger.cs @@ -27,7 +27,7 @@ namespace Tango.Logging _isEnabled = true; String logsFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Twine", "Tango", "logs"); Directory.CreateDirectory(logsFolder); - LogFile = Path.Combine(logsFolder, string.Format("{1}-{0:yyyy-MM-dd_hh-mm-ss}.log", DateTime.Now, Path.GetFileNameWithoutExtension(System.AppDomain.CurrentDomain.FriendlyName))); + LogFile = Path.Combine(logsFolder, string.Format("{1}-{0:dd-MM-yyyy_hh-mm-ss}.log", DateTime.Now, Path.GetFileNameWithoutExtension(System.AppDomain.CurrentDomain.FriendlyName))); } /// -- cgit v1.3.1 From 4f4b5f052200fde6ccc6aa06094904cf9bf3106b Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 18 Mar 2018 18:11:20 +0200 Subject: Refactored android project to use the new logging library. Implemented continuous request timeout on android. --- Software/Android_Studio/Tango.Core/build.gradle | 9 +- .../java/com/twine/tango/core/ExtendedObject.java | 14 +++ Software/Android_Studio/Tango.DAL/build.gradle | 9 +- .../src/main/java/com/twine/tango/dal/TangoDB.java | 11 +- .../Android_Studio/Tango.Integration/build.gradle | 2 +- .../services/ExternalBridgeService.java | 10 +- .../services/SynchronizationService.java | 20 ++-- .../java/com/twine/tango/logging/LogManager.java | 10 ++ Software/Android_Studio/Tango.PMR/build.gradle | 6 +- .../java/com/twine/tango/pmr/MessageFactory.java | 8 +- .../Android_Studio/Tango.SharedUI/build.gradle | 2 +- .../com/twine/tango/sharedui/TangoApplication.java | 40 ++----- .../twine/tango/sharedui/mvvm/ViewModelBase.java | 5 +- .../navigation/AndroidNavigationProvider.java | 24 ++-- .../Android_Studio/Tango.Stubs.UI/build.gradle | 1 + .../tango/stubs/ui/views/stub/StubFragmentVM.java | 5 +- Software/Android_Studio/Tango.Stubs/build.gradle | 2 +- .../java/com/twine/tango/stubs/AvailableStub.java | 6 +- .../main/java/com/twine/tango/stubs/StubBase.java | 12 +- .../Android_Studio/Tango.Transport/build.gradle | 8 +- .../tango/transport/TransportAdapterBase.java | 6 +- .../twine/tango/transport/TransportMessage.java | 11 +- .../com/twine/tango/transport/TransporterBase.java | 128 +++++++++++---------- .../transport/adapters/TcpTransportAdapter.java | 10 +- .../transport/adapters/UsbTransportAdapter.java | 3 +- .../com/twine/tango/unittesting/Logging_TST.java | 3 - .../tango/unittesting/Synchronization_TST.java | 4 +- Software/Android_Studio/build.gradle | 1 - 28 files changed, 192 insertions(+), 178 deletions(-) create mode 100644 Software/Android_Studio/Tango.Core/src/main/java/com/twine/tango/core/ExtendedObject.java (limited to 'Software/Android_Studio/Tango.UnitTesting/src/androidTest/java') diff --git a/Software/Android_Studio/Tango.Core/build.gradle b/Software/Android_Studio/Tango.Core/build.gradle index 55696df8c..036e02ac5 100644 --- a/Software/Android_Studio/Tango.Core/build.gradle +++ b/Software/Android_Studio/Tango.Core/build.gradle @@ -20,16 +20,19 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + dataBinding { + enabled = true + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - compile globalDependencies.stream compile globalDependencies.linq + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.Core/src/main/java/com/twine/tango/core/ExtendedObject.java b/Software/Android_Studio/Tango.Core/src/main/java/com/twine/tango/core/ExtendedObject.java new file mode 100644 index 000000000..5a7b50d79 --- /dev/null +++ b/Software/Android_Studio/Tango.Core/src/main/java/com/twine/tango/core/ExtendedObject.java @@ -0,0 +1,14 @@ +package com.twine.tango.core; + +import android.databinding.BaseObservable; + +import com.twine.tango.logging.LogManager; + +/** + * Created by Roy on 3/18/2018. + */ + +public class ExtendedObject extends BaseObservable +{ + protected static LogManager logManager = LogManager.getDefault(); +} diff --git a/Software/Android_Studio/Tango.DAL/build.gradle b/Software/Android_Studio/Tango.DAL/build.gradle index abaccdd33..fdc899b3a 100644 --- a/Software/Android_Studio/Tango.DAL/build.gradle +++ b/Software/Android_Studio/Tango.DAL/build.gradle @@ -34,7 +34,6 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - //DBFlow compile globalDependencies.rxJavaAndroid compile globalDependencies.rxJava @@ -42,16 +41,12 @@ dependencies { compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}" compile "com.github.Raizlabs.DBFlow:dbflow-rx2:${dbflow_version}" - - implementation project(':Tango.Core') compile 'com.android.support:support-annotations:25.4.0' - - compile globalDependencies.logging compile globalDependencies.storage compile globalDependencies.joda - - compile group: 'commons-io', name: 'commons-io', version: '2.4' + compile 'commons-io:commons-io:2.4' + implementation project(':Tango.Logging') } //Copy data base to assets folder. diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java index 53bb6a8e2..cdbaab1bb 100644 --- a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java +++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java @@ -1,8 +1,5 @@ package com.twine.tango.dal; -import android.os.Environment; - -import com.elvishew.xlog.XLog; import com.raizlabs.android.dbflow.annotation.Database; import com.raizlabs.android.dbflow.config.DatabaseConfig; import com.raizlabs.android.dbflow.config.DatabaseDefinition; @@ -10,6 +7,7 @@ import com.raizlabs.android.dbflow.config.FlowConfig; import com.raizlabs.android.dbflow.config.FlowManager; import com.snatik.storage.Storage; import com.twine.tango.core.ContextHelper; +import com.twine.tango.core.ExtendedObject; import org.apache.commons.io.IOUtils; @@ -23,7 +21,7 @@ import java.io.InputStream; * Must be initialized before use. */ @Database(name = "Tango", version = 1) -public class TangoDB +public class TangoDB extends ExtendedObject { private static DatabaseDefinition database; private static String database_path; @@ -44,8 +42,7 @@ public class TangoDB createIfNotFound(); } catch (Exception e) { - XLog.e("Application failed on 'create database if not' found. will run in DBFlow default mode."); - XLog.e(e); + logManager.log(e,"Application failed on 'create database if not' found. will run in DBFlow default mode."); } FlowManager.init(FlowConfig.builder(ContextHelper.getApplicationContext()) @@ -63,7 +60,7 @@ public class TangoDB backup(); } catch (IOException e) { - XLog.e(e); + logManager.log(e); } } diff --git a/Software/Android_Studio/Tango.Integration/build.gradle b/Software/Android_Studio/Tango.Integration/build.gradle index 255fce0f6..ba8a3f663 100644 --- a/Software/Android_Studio/Tango.Integration/build.gradle +++ b/Software/Android_Studio/Tango.Integration/build.gradle @@ -39,7 +39,6 @@ dependencies { androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' compile globalDependencies.rxJavaAndroid compile globalDependencies.rxJava - compile globalDependencies.logging compile globalDependencies.dagger compile globalDependencies.daggerAndroid implementation project(':Tango.PMR') @@ -47,4 +46,5 @@ dependencies { implementation project(':Tango.Core') implementation project(':Tango.DAL') implementation project(':Tango.Web') + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java index 189c21d3f..aea082d05 100644 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java @@ -6,9 +6,9 @@ import android.net.wifi.WifiManager; import android.os.StrictMode; import android.os.SystemClock; -import com.elvishew.xlog.XLog; import com.google.protobuf.GeneratedMessageV3; import com.twine.tango.core.ContextHelper; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.core.IEventHandler; import com.twine.tango.integration.operators.IMachineOperator; import com.twine.tango.integration.providers.IMachineIdentityProvider; @@ -100,7 +100,7 @@ public class ExternalBridgeService extends BasicTransporter implements IExternal } catch (IOException e) { - XLog.e(e); + logManager.log(e); } SystemClock.sleep(5000); @@ -180,7 +180,7 @@ public class ExternalBridgeService extends BasicTransporter implements IExternal } catch (IOException e) { - XLog.e(e); + logManager.log(e); } SystemClock.sleep(100); @@ -268,13 +268,13 @@ public class ExternalBridgeService extends BasicTransporter implements IExternal } else { - XLog.w("Message received from an unauthorized adapter!"); + logManager.log("Message received from an unauthorized adapter!"); } } catch (Exception e) { - XLog.e(e); + logManager.log(e); } } diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java index 53b4c8194..d8423cf22 100644 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java @@ -2,10 +2,10 @@ package com.twine.tango.integration.services; import android.os.AsyncTask; -import com.elvishew.xlog.XLog; import com.google.protobuf.ByteString; import com.snatik.storage.Storage; import com.twine.tango.core.ContextHelper; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.dal.TangoDB; import com.twine.tango.integration.providers.IMachineIdentityProvider; import com.twine.tango.integration.services.IExternalBridgeService.MessageReceivedArgs; @@ -16,14 +16,10 @@ import com.twine.tango.pmr.integration.DirectSynchronizationRequestOuterClass.Di import com.twine.tango.pmr.integration.DirectSynchronizationResponseOuterClass.DirectSynchronizationResponse; import com.twine.tango.pmr.integration.OverrideDataBaseRequestOuterClass.OverrideDataBaseRequest; import com.twine.tango.pmr.integration.OverrideDataBaseResponseOuterClass.OverrideDataBaseResponse; -import com.twine.tango.pmr.stubs.CalculateRequestOuterClass.CalculateRequest; -import com.twine.tango.pmr.stubs.CalculateResponseOuterClass.CalculateResponse; import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; import com.twine.tango.web.WebApiFactory; import com.twine.tango.web.ISynchronizationAPI; -import java.io.IOException; - import javax.inject.Inject; import io.reactivex.Completable; @@ -32,7 +28,7 @@ import io.reactivex.Completable; /** * Represents the Tango application local to remote synchronization engine. */ -public class SynchronizationService implements ISynchronizationService +public class SynchronizationService extends ExtendedObject implements ISynchronizationService { private IMachineIdentityProvider machineIdentityProvider; private IExternalBridgeService bridgeService; @@ -78,12 +74,12 @@ public class SynchronizationService implements ISynchronizationService },(ex) -> { - XLog.e(ex); + logManager.log(ex); }); } catch (Exception e) { - XLog.e(e); + logManager.log(e); //Create response. OverrideDataBaseResponse response = OverrideDataBaseResponse.newBuilder() .setSuccessful(false) @@ -98,7 +94,7 @@ public class SynchronizationService implements ISynchronizationService },(ex) -> { - XLog.e(ex); + logManager.log(ex); }); } }); @@ -129,12 +125,12 @@ public class SynchronizationService implements ISynchronizationService },(ex) -> { - XLog.e(ex); + logManager.log(ex); }); } catch (Exception e) { - XLog.e(e); + logManager.log(e); } }); } @@ -170,7 +166,7 @@ public class SynchronizationService implements ISynchronizationService }, (ex) -> { - XLog.e(ex); + logManager.log(ex); emitter.onError(ex); }); diff --git a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java index b3b8041a2..b2a199f22 100644 --- a/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java +++ b/Software/Android_Studio/Tango.Logging/src/main/java/com/twine/tango/logging/LogManager.java @@ -94,6 +94,11 @@ public class LogManager } } + public Exception log(Throwable throwable) + { + return log(new Exception((throwable))); + } + public Exception log(Exception exception, LogCategory category, String description) { if (!categories.contains(category)) return exception; @@ -126,6 +131,11 @@ public class LogManager return exception; } + public Exception log(Exception exception) + { + return log(exception,""); + } + public String log(String message, LogCategory category) { MessageLogItem log = new MessageLogItem(); diff --git a/Software/Android_Studio/Tango.PMR/build.gradle b/Software/Android_Studio/Tango.PMR/build.gradle index 1aca6d009..19f6f810d 100644 --- a/Software/Android_Studio/Tango.PMR/build.gradle +++ b/Software/Android_Studio/Tango.PMR/build.gradle @@ -23,16 +23,14 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - compile globalDependencies.protobuf - compile globalDependencies.logging compile project(path: ':Tango.Core') + implementation project(':Tango.Logging') } task createPMR(type: Exec, description: 'Update all PMR files') { diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java index 689d2c25a..982b5cdb1 100644 --- a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java +++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java @@ -1,10 +1,10 @@ package com.twine.tango.pmr; -import com.elvishew.xlog.XLog; import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.Parser; import com.twine.tango.core.ReflectionsHelper; +import com.twine.tango.logging.LogManager; import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer; import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType; @@ -67,9 +67,9 @@ public class MessageFactory //Ignore because we are trying to find the right class by brute force. } } - - - XLog.e(new ClassNotFoundException("Could not find PMR message class for " + name)); + + + LogManager.getDefault().log(new ClassNotFoundException("Could not find PMR message class for " + name)); return null; } diff --git a/Software/Android_Studio/Tango.SharedUI/build.gradle b/Software/Android_Studio/Tango.SharedUI/build.gradle index 832a8eb22..0696c1e2e 100644 --- a/Software/Android_Studio/Tango.SharedUI/build.gradle +++ b/Software/Android_Studio/Tango.SharedUI/build.gradle @@ -47,7 +47,6 @@ dependencies { implementation 'javax.inject:javax.inject:1' implementation 'com.jakewharton:butterknife:8.7.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0' - implementation globalDependencies.logging implementation project(':Tango.Core') compile 'com.hrules:horizontalnumberpicker:1.1.1' //Extensions @@ -63,4 +62,5 @@ dependencies { implementation project(':Tango.Transport') implementation project(':Tango.Integration') compile 'com.squareup:otto:1.3.8' + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/TangoApplication.java b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/TangoApplication.java index a2a48ae43..aacb35350 100644 --- a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/TangoApplication.java +++ b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/TangoApplication.java @@ -4,17 +4,12 @@ import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; -import com.elvishew.xlog.LogConfiguration; -import com.elvishew.xlog.LogLevel; -import com.elvishew.xlog.XLog; -import com.elvishew.xlog.printer.AndroidPrinter; -import com.elvishew.xlog.printer.Printer; -import com.elvishew.xlog.printer.file.FilePrinter; -import com.elvishew.xlog.printer.file.backup.FileSizeBackupStrategy; -import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator; import com.google.protobuf.GeneratedMessageV3; import com.twine.tango.core.ContextHelper; import com.twine.tango.dal.TangoDB; +import com.twine.tango.logging.FileLogger; +import com.twine.tango.logging.LogCatLogger; +import com.twine.tango.logging.LogManager; import com.twine.tango.pmr.MessageFactory; import com.twine.tango.web.WebApiFactory; @@ -42,27 +37,16 @@ public class TangoApplication extends Application JodaTimeAndroid.init(context); ContextHelper.init(context); + + LogManager logManager = LogManager.getDefault(); - LogConfiguration config = new LogConfiguration.Builder() - .logLevel(LogLevel.ALL) - .tag("Tango") - .t() - .st(1) -// .b() - .addObjectFormatter(GeneratedMessageV3.class, msg -> msg.toString()).build(); - - File sdcard = context.getFilesDir(); - File dir = new File(sdcard.getAbsolutePath() + "/logs"); - boolean b = dir.mkdirs(); - - Printer androidPrinter = new AndroidPrinter(); - Printer filePrinter = new FilePrinter.Builder(dir.getPath()) - .fileNameGenerator(new DateFileNameGenerator()) - .backupStrategy(new FileSizeBackupStrategy(1024 * 1024)) - .build(); + LogCatLogger logCatLogger = new LogCatLogger(); + FileLogger fileLogger = new FileLogger(context); + + logManager.registerLogger(logCatLogger); + logManager.registerLogger(fileLogger); - XLog.init(config, androidPrinter, filePrinter); - XLog.i("Logger Initialized. logs will be saved to: " + dir.getAbsolutePath()); + logManager.log("Logger Initialized. logs will be saved to: " + fileLogger.getFileName()); TangoDB.init(); @@ -72,7 +56,7 @@ public class TangoApplication extends Application Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { throwable.printStackTrace(); - XLog.e(throwable); + logManager.log(throwable); System.exit(1); //TODO: What to do on application crash ? }); diff --git a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewModelBase.java b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewModelBase.java index 60886b7e7..1d2e5ad86 100644 --- a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewModelBase.java +++ b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewModelBase.java @@ -2,6 +2,8 @@ package com.twine.tango.sharedui.mvvm; import android.util.Log; +import com.twine.tango.core.ExtendedObject; + import java.lang.reflect.Field; @@ -10,7 +12,8 @@ import java.lang.reflect.Field; * * @param the type parameter */ -public abstract class ViewModelBase { +public abstract class ViewModelBase extends ExtendedObject +{ /** * The View. diff --git a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/navigation/AndroidNavigationProvider.java b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/navigation/AndroidNavigationProvider.java index dcdf4160f..545793a5d 100644 --- a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/navigation/AndroidNavigationProvider.java +++ b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/navigation/AndroidNavigationProvider.java @@ -4,7 +4,7 @@ import android.app.FragmentManager; import android.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; -import com.elvishew.xlog.XLog; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.core.IAction1; import com.twine.tango.sharedui.R; import com.twine.tango.sharedui.containers.FragmentBase; @@ -12,7 +12,7 @@ import com.twine.tango.sharedui.containers.FragmentBase; /** * Represents an android navigation provider. */ -public class AndroidNavigationProvider implements INavigationProvider +public class AndroidNavigationProvider extends ExtendedObject implements INavigationProvider { private AppCompatActivity activity; private FragmentBase currentFragment; @@ -51,7 +51,7 @@ public class AndroidNavigationProvider implements INavigationProvider { if (activity == null) { - XLog.e(new NullPointerException("No navigation activity registered.")); + logManager.log(new NullPointerException("No navigation activity registered.")); return; } @@ -70,7 +70,7 @@ public class AndroidNavigationProvider implements INavigationProvider fragment = (FragmentBase) Class.forName(fragmentName).newInstance(); } catch (Exception ex) { - XLog.e("Fragment " + fragmentName + " not found.", ex); + logManager.log(ex,"Fragment " + fragmentName + " not found."); return; } } @@ -106,14 +106,14 @@ public class AndroidNavigationProvider implements INavigationProvider fragmentTransaction.replace(fragment_container, fragment).addToBackStack(fragmentName); fragmentTransaction.commit(); - try - { - //noinspection ConstantConditions - //fragment.getView().setFocusableInTouchMode(true); - } catch (Exception ex) - { - XLog.e(ex); - } +// try +// { +// //noinspection ConstantConditions +// //fragment.getView().setFocusableInTouchMode(true); +// } catch (Exception ex) +// { +// logManager.log(ex); +// } currentFragment = fragment; } diff --git a/Software/Android_Studio/Tango.Stubs.UI/build.gradle b/Software/Android_Studio/Tango.Stubs.UI/build.gradle index 41853210a..6214adf2c 100644 --- a/Software/Android_Studio/Tango.Stubs.UI/build.gradle +++ b/Software/Android_Studio/Tango.Stubs.UI/build.gradle @@ -67,4 +67,5 @@ dependencies { implementation project(':Tango.Transport') implementation project(':Tango.Core') implementation project(':Tango.DAL') + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java index fe237bcd8..f490ccee6 100644 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java @@ -1,6 +1,5 @@ package com.twine.tango.stubs.ui.views.stub; -import com.elvishew.xlog.XLog; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import com.twine.tango.integration.operators.IMachineOperator; @@ -58,11 +57,11 @@ public class StubFragmentVM extends ViewModelBase stub.get().run().observeOn(AndroidSchedulers.mainThread()).subscribe((response) -> { this.response.set(this.response.get() + response + "\n"); - XLog.i(response); + logManager.log(response); }, (ex) -> { this.response.set(this.response.get() + ex.getMessage() + "\n"); - XLog.e(ex); + logManager.log(ex); }); } } diff --git a/Software/Android_Studio/Tango.Stubs/build.gradle b/Software/Android_Studio/Tango.Stubs/build.gradle index c13f526c0..a6815ffe3 100644 --- a/Software/Android_Studio/Tango.Stubs/build.gradle +++ b/Software/Android_Studio/Tango.Stubs/build.gradle @@ -34,7 +34,6 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' - compile globalDependencies.logging testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' @@ -43,6 +42,7 @@ dependencies { implementation project(':Tango.Core') compile project(path: ':Tango.Transport') implementation project(':Tango.SharedUI') + implementation project(':Tango.Logging') } task reflectStubs() << { diff --git a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/AvailableStub.java b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/AvailableStub.java index f1b2488af..f6b4fe7cd 100644 --- a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/AvailableStub.java +++ b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/AvailableStub.java @@ -1,13 +1,13 @@ package com.twine.tango.stubs; -import com.elvishew.xlog.XLog; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.transport.ITransporter; /** * Represents a description of an available stub type which can be instantiated and run. */ -public class AvailableStub +public class AvailableStub extends ExtendedObject { private Class type; @@ -101,7 +101,7 @@ public class AvailableStub return (StubBase) type.getConstructor(ITransporter.class).newInstance(transporter); } catch (Exception e) { - XLog.e(e); + logManager.log(e); } return null; diff --git a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/StubBase.java b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/StubBase.java index 80ac59a8e..f79a12b8f 100644 --- a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/StubBase.java +++ b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/StubBase.java @@ -1,6 +1,6 @@ package com.twine.tango.stubs; -import com.elvishew.xlog.XLog; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.core.ReflectionsHelper; import com.twine.tango.transport.ITransporter; @@ -15,7 +15,7 @@ import io.reactivex.subjects.PublishSubject; /** * Represents na {@link IStub} base class. */ -public abstract class StubBase implements IStub { +public abstract class StubBase extends ExtendedObject implements IStub { private ITransporter transporter; private StubState state; @@ -65,20 +65,20 @@ public abstract class StubBase implements IStub { public Observable run() { PublishSubject subject = PublishSubject.create(); - - XLog.i("Executing stub " + this.getClass().getSimpleName() + "..."); + + logManager.log("Executing stub " + this.getClass().getSimpleName() + "..."); setState(StubState.Running); onRun().subscribe((res) -> { subject.onNext(res); setState(StubState.Passed); - XLog.i("Stub completed successfully with result " + res); + logManager.log("Stub completed successfully with result " + res); }, (ex) -> { setState(StubState.Failed); - XLog.i("Stub failed."); + logManager.log("Stub failed."); subject.onError(ex); }); setState(StubState.Running); diff --git a/Software/Android_Studio/Tango.Transport/build.gradle b/Software/Android_Studio/Tango.Transport/build.gradle index 685c112db..09ce4b6b7 100644 --- a/Software/Android_Studio/Tango.Transport/build.gradle +++ b/Software/Android_Studio/Tango.Transport/build.gradle @@ -22,6 +22,10 @@ android { } } + dataBinding { + enabled = true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -41,14 +45,12 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - implementation project(':Tango.PMR') implementation project(':Tango.Core') - compile globalDependencies.rxJavaAndroid compile globalDependencies.rxJava - compile globalDependencies.logging compile globalDependencies.protobuf compile globalDependencies.joda compile globalDependencies.usb + implementation project(':Tango.Logging') } diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java index e88ce5dab..b79492607 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java @@ -1,7 +1,7 @@ package com.twine.tango.transport; -import com.elvishew.xlog.XLog; import com.twine.tango.core.Event; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.core.IEventHandler; import com.twine.tango.core.ObjectDisposedException; @@ -16,7 +16,7 @@ import io.reactivex.Completable; /** * Represents an {@link ITransportAdapter} base class. */ -public abstract class TransportAdapterBase implements ITransportAdapter +public abstract class TransportAdapterBase extends ExtendedObject implements ITransportAdapter { /** * The constant MAX_BUFFER_SIZE. @@ -202,7 +202,7 @@ public abstract class TransportAdapterBase implements ITransportAdapter { disconnect().blockingAwait(); setState(TransportComponentState.Failed); - XLog.e(ex); + logManager.log(ex); } /** diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportMessage.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportMessage.java index a787d62ff..9978dd106 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportMessage.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportMessage.java @@ -15,10 +15,16 @@ public class TransportMessage extends TransportMessageBase private PublishSubject publishSubject; + public boolean isAtLeastOnResponseReceived() + { + return atLeastOnResponseReceived; + } + + private boolean atLeastOnResponseReceived; + /** * Instantiates a new Transport message. * - * @param adapter the adapter * @param token the token * @param message the message * @param direction the direction @@ -35,7 +41,7 @@ public class TransportMessage extends TransportMessageBase @Override protected void setResult(Object result, boolean completed) { - + atLeastOnResponseReceived = true; publishSubject.onNext((T) result); if (completed) publishSubject.onComplete(); } @@ -43,6 +49,7 @@ public class TransportMessage extends TransportMessageBase @Override protected void setException(Exception error) { + atLeastOnResponseReceived = true; publishSubject.onError(error); } } diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java index 921cd6338..66e7af393 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java @@ -1,13 +1,17 @@ package com.twine.tango.transport; +import android.databinding.BaseObservable; +import android.databinding.Bindable; import android.os.AsyncTask; import android.os.SystemClock; -import com.elvishew.xlog.XLog; import com.google.protobuf.GeneratedMessageV3; import com.twine.tango.core.Event; +import com.twine.tango.core.ExtendedObject; import com.twine.tango.core.IEventHandler; import com.twine.tango.core.ObjectDisposedException; +import com.twine.tango.logging.LogCategory; +import com.twine.tango.logging.LogManager; import com.twine.tango.pmr.MessageFactory; import com.twine.tango.pmr.TangoMessage; import com.twine.tango.pmr.common.ErrorCodeOuterClass.ErrorCode; @@ -38,7 +42,7 @@ import static br.com.zbra.androidlinq.Linq.stream; /** * Represents an {@link ITransporter} base class. */ -public abstract class TransporterBase implements ITransporter +public abstract class TransporterBase extends ExtendedObject implements ITransporter { private ConcurrentLinkedQueue sendingQueue; @@ -64,6 +68,7 @@ public abstract class TransporterBase implements ITransporter //region Properties + @Bindable @Override public ITransportAdapter getAdapter() { @@ -74,12 +79,12 @@ public abstract class TransporterBase implements ITransporter public void setAdapter(ITransportAdapter adapter) { this.adapter = adapter; - - XLog.i("Adapter changed:"); + + logManager.log("Adapter changed:"); if (this.adapter != null) { - XLog.i(adapter.getClass().getName() + ", " + adapter.getAddress() + ", " + adapter.getState()); + logManager.log(adapter.getClass().getName() + ", " + adapter.getAddress() + ", " + adapter.getState()); adapter.removeStateChangedListener(this::onAdapterStateChanged); adapter.addStateChangedListener(this::onAdapterStateChanged); @@ -90,6 +95,8 @@ public abstract class TransporterBase implements ITransporter adapter.connect().subscribe(); } } + + notifyPropertyChanged(BR.adapter); } @Override @@ -104,6 +111,7 @@ public abstract class TransporterBase implements ITransporter this.encoder = encoder; } + @Bindable @Override public TransportComponentState getState() { @@ -119,6 +127,7 @@ public abstract class TransporterBase implements ITransporter { this.state = state; onStateChanged(this.state); + notifyPropertyChanged(BR.state); } @Override @@ -194,7 +203,7 @@ public abstract class TransporterBase implements ITransporter { disconnect().blockingAwait(); setState(TransportComponentState.Failed); - XLog.e("Transporter failed.", ex); + logManager.log(ex,"Transporter failed."); } /** @@ -274,13 +283,13 @@ public abstract class TransporterBase implements ITransporter setState(TransportComponentState.Connected); startThreads(); - - XLog.i("Transporter connected..."); + + logManager.log("Transporter connected..."); x.onComplete(); } catch (Exception e) { - XLog.e("Error connecting transporter", e); + logManager.log(e,"Error connecting transporter"); x.onError(e); } }).subscribeOn(Schedulers.io()); @@ -301,8 +310,8 @@ public abstract class TransporterBase implements ITransporter } setState(TransportComponentState.Disconnected); - - XLog.i("Transporter disconnected..."); + + logManager.log("Transporter disconnected..."); x.onComplete(); } @@ -323,22 +332,21 @@ public abstract class TransporterBase implements ITransporter @Override public Single> sendRequest(TangoMessage request, Period timeout) { - XLog.i("Queuing request message: " + request.getContainer().getType() + " Token: " + request.getContainer().getToken()); - XLog.i("Expected response: " + Response.Builder.class.getSimpleName()); + logManager.log("Queuing request message: " + request.getContainer().getType() + " Token: " + request.getContainer().getToken(), LogCategory.Debug); + logManager.log("Expected response: " + Response.Builder.class.getSimpleName(), LogCategory.Debug); PublishSubject> subject = PublishSubject.create(); TransportMessage> message = new TransportMessage<>(request.getContainer().getToken(), request, TransportMessageDirection.Request, () -> encoder.encode(request), subject); sendingQueue.add(message); - Completable.timer(getRequestTimeout().getSeconds(), TimeUnit.SECONDS) + Completable.timer(timeout.getSeconds(), TimeUnit.SECONDS) .subscribe(() -> { if (!subject.hasComplete()) { - TimeoutException exception = new TimeoutException("Request message " + request.getMessage().getClass().getSimpleName() + " had timed out after " + getRequestTimeout().getSeconds() + " seconds."); - XLog.e(exception); - XLog.i("Setting request task exception..."); - subject.onError(exception); + Exception ex = logManager.log(new TimeoutException("Request message " + request.getMessage().getClass().getSimpleName() + " had timed out after " + timeout.getSeconds() + " seconds.")); + logManager.log("Setting request task exception...", LogCategory.Debug); + subject.onError(ex); } }); @@ -348,8 +356,8 @@ public abstract class TransporterBase implements ITransporter @Override public Observable> sendContinuousRequest(TangoMessage request) { - XLog.i("Queuing continuous response request message: " + request.getContainer().getType() + " Token: " + request.getContainer().getToken()); - XLog.i("Expected response: " + Response.Builder.class.getSimpleName()); + logManager.log("Queuing continuous response request message: " + request.getContainer().getType() + " Token: " + request.getContainer().getToken(), LogCategory.Debug); + logManager.log("Expected response: " + Response.Builder.class.getSimpleName(), LogCategory.Debug); request.getContainer().setContinuous(true); request.getContainer().setCompleted(false); @@ -359,6 +367,17 @@ public abstract class TransporterBase implements ITransporter message.setContinuous(true); sendingQueue.add(message); + Completable.timer(getRequestTimeout().getSeconds(), TimeUnit.SECONDS) + .subscribe(() -> + { + if (!message.isAtLeastOnResponseReceived()) + { + Exception ex = logManager.log(new TimeoutException("Request message " + request.getMessage().getClass().getSimpleName() + " had timed out after " + getRequestTimeout().getSeconds() + " seconds.")); + logManager.log("Setting request task exception...", LogCategory.Debug); + message.setException(ex); + } + }); + return subject; } @@ -374,34 +393,34 @@ public abstract class TransporterBase implements ITransporter response.getContainer().setToken(token); - XLog.i("Queuing response message: " + response.getClass().getSimpleName()); + logManager.log("Queuing response message: " + response.getClass().getSimpleName(), LogCategory.Debug); PendingResponse pendingResponse = null; - XLog.i("Searching for matching request token: " + token); + logManager.log("Searching for matching request token: " + token, LogCategory.Debug); pendingResponse = pendingResponses.get(token); if (pendingResponse != null) { - XLog.i("Found matching request token: " + token + " on adapter: " + adapter.getAddress()); + logManager.log("Found matching request token: " + token + " on adapter: " + adapter.getAddress(), LogCategory.Debug); if (!pendingResponse.isContinuous()) { - XLog.i("Removing matching request token..."); + logManager.log("Removing matching request token...", LogCategory.Debug); pendingResponses.remove(token); } else if (response.getContainer().getCompleted()) { - XLog.i("Response completed. Removing matching request token..."); + logManager.log("Response completed. Removing matching request token...", LogCategory.Debug); pendingResponses.remove(token); } } else { //This should never happen. - XLog.w("Matching request token was not found..."); - throw new RuntimeException("There was no matching request token and this should never happen!"); + Exception ex = logManager.log(new RuntimeException("There was no matching request token and this should never happen!")); + throw new RuntimeException(ex); } PublishSubject subject = PublishSubject.create(); @@ -472,7 +491,11 @@ public abstract class TransporterBase implements ITransporter if (adapter.getState() == TransportComponentState.Connected) { adapter.write(message.getSerialize().invoke()); - XLog.i("message sent on adapter: " + adapter.getAddress() + "..."); + logManager.log("message sent on adapter: " + adapter.getAddress() + "...", LogCategory.Debug); + } + else + { + logManager.log("Could not send message " + message.getMessage().getClass().getSimpleName() + ". Adapter is disconnected.", LogCategory.Warning); } if (message.getDirection() == TransportMessageDirection.Request) @@ -523,31 +546,21 @@ public abstract class TransporterBase implements ITransporter if (data != null) { - XLog.i("Message received on adapter: " + adapter.getAddress()); - XLog.i("Parsing message container..."); + logManager.log("Message received on adapter: " + adapter.getAddress(), LogCategory.Debug); - MessageContainer container; - - try - { - container = encoder.decodeContainer(data); - } - catch (Exception e) - { - XLog.e("Invalid message container received!", e); - continue; - } + logManager.log("Parsing message container...", LogCategory.Debug); + MessageContainer container = encoder.decodeContainer(data); - XLog.i("Searching for pending request token: " + container.getToken()); + logManager.log("Searching for pending request token: " + container.getToken(), LogCategory.Debug); TransportMessageBase request = stream(pendingRequests).singleOrDefault(x -> x.getToken().equals(container.getToken()), null); if (request != null) { - XLog.i("Found pending request: " + ((TangoMessage) request.getMessage()).getContainer().getType()); + logManager.log("Found pending request: " + ((TangoMessage) request.getMessage()).getContainer().getType(), LogCategory.Debug); if (!request.isContinuous()) { - XLog.i("Pending request was identified as 'single response'. Removing pending request."); + logManager.log("Pending request was identified as 'single response'. Removing pending request.", LogCategory.Debug); pendingRequests.remove(request); @@ -555,61 +568,60 @@ public abstract class TransporterBase implements ITransporter { if (container.getError() == ErrorCode.NONE) { - XLog.i("Response has returned with error: " + container.getError().toString()); + logManager.log("Parsing inner response message and setting pending request task result...", LogCategory.Debug); request.setResult(encoder.decode(data), true); + logManager.log("Message enquirer released...", LogCategory.Debug); } else { - XLog.i("Parsing inner response message and setting pending request task result..."); + logManager.log("Response has returned with error: " + container.getError().toString(), LogCategory.Warning); request.setException(new ResponseErrorException(container.getError(), (TangoMessage) encoder.decode(data))); } } catch (Exception ex) { - XLog.e("Error parsing inner message", ex); - request.setException(ex); + request.setException(logManager.log(ex,"Error parsing response message.")); } } else { - XLog.i("Pending request was identified as 'continuous response'. keeping pending request."); + logManager.log("Pending request was identified as 'continuous response'. keeping pending request.",LogCategory.Debug); try { if (container.getError() == ErrorCode.NONE) { - XLog.i("Parsing inner response message and invoking continuous response callback..."); + logManager.log("Parsing inner response message and invoking continuous response callback...",LogCategory.Debug); if (container.getCompleted()) { - XLog.i("Continuous sequence completed."); + logManager.log("Continuous sequence completed.",LogCategory.Debug); } request.setResult(encoder.decode(data), container.getCompleted()); } else { - XLog.i("Response has returned with error: " + container.getError().toString()); + logManager.log("Response has returned with error: " + container.getError().toString(),LogCategory.Warning); request.setException(new ResponseErrorException(container.getError(), (TangoMessage) encoder.decode(data))); } } catch (Exception ex) { - XLog.e("Error parsing inner message", ex); - request.setException(ex); + request.setException(logManager.log(ex,"Error parsing response message")); } } } else { - XLog.i("Message was identified as a new request message: " + container.getType().toString()); + logManager.log("Message was identified as a new request message: " + container.getType().toString(),LogCategory.Debug); try { - XLog.i("Saving request token: " + container.getToken()); + logManager.log("Saving request token: " + container.getToken(),LogCategory.Debug); pendingResponses.put(container.getToken(), new PendingResponse(container.getContinuous())); if (container.getType() == MessageType.KeepAliveRequest) { - XLog.i("Submitting keep alive response..."); + logManager.log("Submitting keep alive response...",LogCategory.Debug); sendResponse(MessageFactory.createTangoMessage(KeepAliveResponse.class, container.getToken())).observeOn(Schedulers.newThread()).subscribe(() -> { }, (ex) -> @@ -619,7 +631,7 @@ public abstract class TransporterBase implements ITransporter } else { - XLog.i("Invoking RequestReceived event..."); + logManager.log("Invoking RequestReceived event...",LogCategory.Debug); AsyncTask.execute(() -> onRequestReceived(container)); } } diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java index 2d9282f07..129ceabdf 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java @@ -2,7 +2,6 @@ package com.twine.tango.transport.adapters; import android.os.SystemClock; -import com.elvishew.xlog.XLog; import com.twine.tango.core.ObjectDisposedException; import com.twine.tango.transport.TransportAdapterBase; import com.twine.tango.transport.TransportAdapterMode; @@ -97,13 +96,13 @@ public class TcpTransportAdapter extends TransportAdapterBase pullThread = new Thread(this::pullThreadMethod); pullThread.setName("Adapter Pull Thread"); pullThread.start(); - XLog.i("TCP adapter connected..."); + logManager.log("TCP adapter connected..."); x.onComplete(); } } catch (Exception e) { - XLog.e("Could not connect the TCP adapter."); + logManager.log("Could not connect the TCP adapter."); x.onError(e); } }).subscribeOn(Schedulers.io()); @@ -130,14 +129,13 @@ public class TcpTransportAdapter extends TransportAdapterBase //Ignore further disposing attempts failure. } setState(TransportComponentState.Disconnected); - XLog.i("TCP adapter disconnected."); + logManager.log("TCP adapter disconnected."); x.onComplete(); } } catch (IOException e) { - XLog.e("Could not disconnect the TCP adapter."); - XLog.e(e); + logManager.log(e, "Could not disconnect the TCP adapter."); x.onError(e); } diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/UsbTransportAdapter.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/UsbTransportAdapter.java index 0d8d36060..a12a0924d 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/UsbTransportAdapter.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/UsbTransportAdapter.java @@ -9,7 +9,6 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; -import com.elvishew.xlog.XLog; import com.felhr.usbserial.UsbSerialDevice; import com.felhr.usbserial.UsbSerialInterface; import com.twine.tango.core.ContextHelper; @@ -81,7 +80,7 @@ public class UsbTransportAdapter extends TransportAdapterBase { if (device.getVendorId() == Integer.decode(getAddress())) { - XLog.i("USB Device found: " + device.getManufacturerName()); + logManager.log("USB Device found: " + device.getManufacturerName()); usbManager.requestPermission(device, mPermissionIntent); break; } diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java index a1baa6f67..2f02ef972 100644 --- a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java +++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Logging_TST.java @@ -27,9 +27,6 @@ public class Logging_TST LogManager logManager = LogManager.getDefault(); - logManager.registerLogger(new LogCatLogger()); - logManager.registerLogger(new FileLogger(appContext)); - logManager.log("This is a general log message."); logManager.log("This is a critical log message", LogCategory.Critical); diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java index 4635bec7a..d7fef49bc 100644 --- a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java +++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java @@ -4,12 +4,12 @@ import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; -import com.elvishew.xlog.XLog; import com.twine.tango.dal.dao.TangoDAO; import com.twine.tango.dal.entities.Organization; import com.twine.tango.integration.providers.MachineIdentityProvider; import com.twine.tango.integration.services.ISynchronizationService; import com.twine.tango.integration.services.SynchronizationService; +import com.twine.tango.logging.LogManager; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,7 +33,7 @@ public class Synchronization_TST for (Organization org : TangoDAO.getAllOrganizations()) { - XLog.i(org.getName()); + LogManager.getDefault().log(org.getName()); } //ISynchronizationService synchronizer = new SynchronizationService(new MachineIdentityProvider()); diff --git a/Software/Android_Studio/build.gradle b/Software/Android_Studio/build.gradle index 3152cdfc2..d9421626b 100644 --- a/Software/Android_Studio/build.gradle +++ b/Software/Android_Studio/build.gradle @@ -30,7 +30,6 @@ allprojects { ext { //Support Libraries dependencies globalDependencies = [ - logging : 'com.elvishew:xlog:1.4.0', rxJavaAndroid: 'io.reactivex.rxjava2:rxandroid:2.0.1', rxJava : 'io.reactivex.rxjava2:rxjava:2.1.5', dagger : 'com.google.dagger:dagger:2.11', -- cgit v1.3.1