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') 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