diff --git a/README.md b/README.md
index d05b56e..b148620 100644
--- a/README.md
+++ b/README.md
@@ -14,10 +14,14 @@ repositories {
and then declare a dependency inside a module:
```groovy
dependencies {
- compile('com.github.bright:slf4android:0.1.6'){
- transitive = true
- }
- //other dependencies
+ // just SLF4J binding
+ implementation("com.github.bright.slf4android:slf4android:$slf4androidVersion")
+
+ // (optional) a handler for file logging
+ implementation("com.github.bright.slf4android:slf4android-handler-file-log:$slf4androidVersion")
+
+ // (optional) a handler for notifying the developer in case of an error
+ implementation("com.github.bright.slf4android:slf4android-handler-notify-developer:$slf4androidVersion")
}
```
As with any slf4j compatible implementation using slf4android looks like this:
@@ -77,7 +81,7 @@ Note that we remove a default logcat handler since Crashlytics will push message
### Logging to a file
To print messages to a separate file just add:
```java
-FileLogHandlerConfiguration fileHandler = LoggerConfiguration.fileLogHandler(this);
+FileLogHandlerConfiguration fileHandler = FileLogHandlerConfiguration.create(this);
LoggerConfiguration.configuration().addHandlerToRootLogger(fileHandler);
String logFileName = fileHandler.getCurrentFileName();
// logFileName contains full path to logged file
@@ -86,7 +90,7 @@ inside your custom `android.app.Application` `onCreate` method. This will create
To change the location of log file you can use:
```java
-FileLogHandlerConfiguration fileHandler = LoggerConfiguration.fileLogHandler(this);
+FileLogHandlerConfiguration fileHandler = FileLogHandlerConfiguration.create(this);
fileHandler.setFullFilePathPattern("/sdcard/your.package/my_log.%g.%u.log");
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index aa54e88..0000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,85 +0,0 @@
-plugins {
- id 'com.android.library'
- id 'maven-publish'
-}
-
-android {
- namespace "pl.brightinventions.slf4android"
- testNamespace "pl.brightinventions.slf4android.androidTest"
-
- compileSdk 34
-
- defaultConfig {
- minSdkVersion 14
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
-
- publishing {
- singleVariant('release') {
- withSourcesJar()
- }
- }
-
- packagingOptions {
- exclude 'LICENSE.txt'
- exclude 'META-INF/LICENSE.txt'
- exclude 'META-INF/LICENSE'
- exclude 'META-INF/NOTICE'
- }
-
- useLibrary 'android.test.runner'
- useLibrary 'android.test.base'
-
- java {
- toolchain {
- languageVersion = JavaLanguageVersion.of(17)
- }
- }
-}
-
-dependencies {
- implementation 'androidx.core:core:1.12.0'
- implementation 'org.slf4j:slf4j-api:1.7.36'
- implementation 'com.squareup:seismic:1.0.2'
- androidTestImplementation 'org.hamcrest:hamcrest-core:1.3'
- androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
- androidTestImplementation('junit:junit:4.13.2')
- androidTestImplementation 'androidx.test:rules:1.5.0'
- androidTestImplementation 'org.easytesting:fest-util:1.2.5'
-
- testImplementation 'org.hamcrest:hamcrest-core:1.3'
- testImplementation 'org.hamcrest:hamcrest-library:1.3'
- testImplementation('junit:junit:4.13.2')
- testImplementation 'org.easytesting:fest-util:1.2.5'
- testImplementation('org.robolectric:robolectric:4.11.1') {
- exclude module: 'classworlds'
- exclude module: 'commons-logging'
- exclude module: 'httpclient'
- exclude module: 'maven-artifact'
- exclude module: 'maven-artifact-manager'
- exclude module: 'maven-error-diagnostics'
- exclude module: 'maven-model'
- exclude module: 'maven-project'
- exclude module: 'maven-settings'
- exclude module: 'plexus-container-default'
- exclude module: 'plexus-interpolation'
- exclude module: 'plexus-utils'
- exclude module: 'wagon-file'
- exclude module: 'wagon-http-lightweight'
- exclude module: 'wagon-provider-api'
- }
-}
-
-publishing {
- publications {
- release(MavenPublication) {
- groupId = 'com.github.bright'
- artifactId = 'slf4android'
- version = '1.0'
-
- afterEvaluate {
- from components.release
- }
- }
- }
-}
diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml
deleted file mode 100644
index bbb0c50..0000000
--- a/app/src/androidTest/AndroidManifest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/java/pl/brightinventions/slf4android/Disposable.java b/app/src/main/java/pl/brightinventions/slf4android/Disposable.java
deleted file mode 100644
index a1dede6..0000000
--- a/app/src/main/java/pl/brightinventions/slf4android/Disposable.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package pl.brightinventions.slf4android;
-
-interface Disposable {
- void dispose();
-}
diff --git a/app/src/main/java/pl/brightinventions/slf4android/FileLogHandlerConfiguration.java b/app/src/main/java/pl/brightinventions/slf4android/FileLogHandlerConfiguration.java
deleted file mode 100644
index 0663194..0000000
--- a/app/src/main/java/pl/brightinventions/slf4android/FileLogHandlerConfiguration.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package pl.brightinventions.slf4android;
-
-import java.util.logging.Handler;
-
-public abstract class FileLogHandlerConfiguration extends Handler {
- @SuppressWarnings("UnusedDeclaration")
- public abstract FileLogHandlerConfiguration setFullFilePathPattern(String fullPathPattern);
-
- @SuppressWarnings("UnusedDeclaration")
- public abstract FileLogHandlerConfiguration setRotateFilesCountLimit(int count);
-
- @SuppressWarnings("UnusedDeclaration")
- public abstract FileLogHandlerConfiguration setLogFileSizeLimitInBytes(int maxFileSizeInBytes);
- public abstract String getCurrentFileName();
-}
diff --git a/build.gradle b/build.gradle
index 2758468..d0caab2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.2.0'
+ classpath 'com.android.tools.build:gradle:8.4.0'
//classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
}
}
diff --git a/core/.gitignore b/core/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/core/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/core/build.gradle b/core/build.gradle
new file mode 100644
index 0000000..f11ccd2
--- /dev/null
+++ b/core/build.gradle
@@ -0,0 +1,64 @@
+plugins {
+ id 'com.android.library'
+ id 'maven-publish'
+}
+
+android {
+ namespace 'pl.brightinventions.slf4android'
+ compileSdk 34
+
+ defaultConfig {
+ minSdk 14
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ publishing {
+ singleVariant('release') {
+ withSourcesJar()
+ }
+ }
+
+ java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(17)
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ api 'org.slf4j:slf4j-api:1.7.36'
+
+ testImplementation('junit:junit:4.13.2')
+ testImplementation 'org.hamcrest:hamcrest-core:1.3'
+ testImplementation 'org.hamcrest:hamcrest-library:1.3'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+}
+
+publishing {
+ publications {
+ release(MavenPublication) {
+ groupId = 'com.github.bright.slf4android'
+ artifactId = 'slf4android'
+ version = '1.0'
+
+ afterEvaluate {
+ from components.release
+ }
+ }
+ }
+}
diff --git a/core/consumer-rules.pro b/core/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/core/proguard-rules.pro b/core/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/core/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/LoggerAdapterTests.java b/core/src/androidTest/java/pl/brightinventions/slf4android/LoggerAdapterTests.java
similarity index 94%
rename from app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/LoggerAdapterTests.java
rename to core/src/androidTest/java/pl/brightinventions/slf4android/LoggerAdapterTests.java
index d1c8fe6..ab19d5d 100644
--- a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/LoggerAdapterTests.java
+++ b/core/src/androidTest/java/pl/brightinventions/slf4android/LoggerAdapterTests.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android.androidTest;
+package pl.brightinventions.slf4android;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
@@ -13,9 +13,6 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import pl.brightinventions.slf4android.LogLevel;
-import pl.brightinventions.slf4android.LoggerConfiguration;
-
public class LoggerAdapterTests {
public static final String LOGGER_NAME = "ApplicationTest";
@@ -141,7 +138,7 @@ public void test_error_message_printed_when_level_is_set_to_debug() {
@Test
public void test_warning_message_printed_when_level_is_set_to_debug() {
setLevelTo(LogLevel.DEBUG);
- getLogger().error("new warning message with exception", new NullPointerException("Bad"));
+ getLogger().warn("new warning message with exception", new NullPointerException("Bad"));
assertThat(getLastMessage(), containsString("new warning message with exception"));
}
}
\ No newline at end of file
diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..568741e
--- /dev/null
+++ b/core/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/org/slf4j/impl/StaticLoggerBinder.java b/core/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
similarity index 100%
rename from app/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
rename to core/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java b/core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
rename to core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/AndroidLoggerFactory.java b/core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerFactory.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/AndroidLoggerFactory.java
rename to core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerFactory.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/ConstLoggerValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/ConstLoggerValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/ConstLoggerValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/ConstLoggerValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/DateValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/DateValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/DateValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/DateValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java b/core/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java
similarity index 94%
rename from app/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java
rename to core/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java
index e303624..32079d7 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java
+++ b/core/src/main/java/pl/brightinventions/slf4android/HandlerFormatterCompiler.java
@@ -3,7 +3,7 @@
public class HandlerFormatterCompiler {
private final LoggerPatternConfiguration configuration;
- public HandlerFormatterCompiler(LoggerPatternConfiguration configuration) {
+ HandlerFormatterCompiler(LoggerPatternConfiguration configuration) {
this.configuration = configuration;
}
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LevelValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/LevelValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LevelValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/LevelValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/ListLogRecordFormatter.java b/core/src/main/java/pl/brightinventions/slf4android/ListLogRecordFormatter.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/ListLogRecordFormatter.java
rename to core/src/main/java/pl/brightinventions/slf4android/ListLogRecordFormatter.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogLevel.java b/core/src/main/java/pl/brightinventions/slf4android/LogLevel.java
similarity index 79%
rename from app/src/main/java/pl/brightinventions/slf4android/LogLevel.java
rename to core/src/main/java/pl/brightinventions/slf4android/LogLevel.java
index d181221..b404d2b 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/LogLevel.java
+++ b/core/src/main/java/pl/brightinventions/slf4android/LogLevel.java
@@ -33,7 +33,7 @@ public boolean isSmallerOrEqualTo(Level level) {
}
/**
- * Converts a {@link pl.brightinventions.slf4android.LogLevel} logging level into an Android one.
+ * Converts a {@link LogLevel} logging level into an Android one.
*
* @return The resulting Android logging level.
*/
@@ -42,9 +42,9 @@ public int getAndroidLevel() {
}
/**
- * Converts a {@link pl.brightinventions.slf4android.LogLevel} logging level into a {@link java.util.logging.Level}.
+ * Converts a {@link LogLevel} logging level into a {@link Level}.
*
- * @return The resulting {@link java.util.logging.Level}.
+ * @return The resulting {@link Level}.
*/
public Level getUtilLogLevel() {
return utilLogLevel;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogRecord.java b/core/src/main/java/pl/brightinventions/slf4android/LogRecord.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LogRecord.java
rename to core/src/main/java/pl/brightinventions/slf4android/LogRecord.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java b/core/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java
rename to core/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogcatHandler.java b/core/src/main/java/pl/brightinventions/slf4android/LogcatHandler.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LogcatHandler.java
rename to core/src/main/java/pl/brightinventions/slf4android/LogcatHandler.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java b/core/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java
similarity index 67%
rename from app/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java
rename to core/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java
index 5b007ef..dd37a0f 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java
+++ b/core/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java
@@ -1,10 +1,9 @@
package pl.brightinventions.slf4android;
-import android.annotation.TargetApi;
-import android.app.Application;
-import android.content.Context;
-import android.os.Build;
+import org.slf4j.LoggerFactory;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Handler;
@@ -14,25 +13,40 @@
public class LoggerConfiguration implements LoggerPatternConfiguration {
private static boolean initialized = false;
private static LoggerConfiguration configuration;
- private final ArrayList loggerPatterns = new ArrayList();
- private final ArrayList disposeThingsOnReset = new ArrayList();
+ private final ArrayList loggerPatterns = new ArrayList<>();
+ private final ArrayList thingsToCloseOnReset = new ArrayList<>();
private final HandlerFormatterCompiler compiler;
- public LoggerConfiguration() {
+ private final org.slf4j.Logger logger;
+
+ LoggerConfiguration() {
compiler = new HandlerFormatterCompiler(this);
+ logger = LoggerFactory.getLogger(getClass().getSimpleName());
}
public static LoggerConfiguration resetConfigurationToDefault() {
if (configuration != null) {
- configuration.dispose();
+ configuration.close();
}
configureDefaults();
return configuration;
}
- private void dispose() {
- for (Disposable dispose : disposeThingsOnReset) {
- dispose.dispose();
+ /**
+ * Registers a {@link Closeable} that will be closed upon
+ * {@link #resetConfigurationToDefault() configuration reset}.
+ */
+ public synchronized void registerCloseable(Closeable closeable) {
+ thingsToCloseOnReset.add(closeable);
+ }
+
+ private synchronized void close() {
+ for (Closeable closeable : thingsToCloseOnReset) {
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ logger.error("Could not close {}", closeable, e);
+ }
}
}
@@ -86,17 +100,6 @@ private static Logger removeLogHandlers(String loggerName) {
return rootLogger;
}
- /**
- * Creates a {@link pl.brightinventions.slf4android.FileLogHandlerConfiguration} logger handler.
- * The returned new instance should be added to some logger with {@link #addHandlerToLogger(String, java.util.logging.Handler)}
- *
- * @return A new instance of {@link pl.brightinventions.slf4android.FileLogHandlerConfiguration}.
- */
- public static FileLogHandlerConfiguration fileLogHandler(Context context) {
- LogRecordFormatter formatter = configuration().compiler.compile("%date %level [%thread] %name - %message%newline");
- return new FileLogHandler(context, formatter);
- }
-
public static LoggerConfiguration configuration() {
ensureInitialized();
return configuration;
@@ -138,36 +141,10 @@ public LoggerConfiguration removeHandlerFromLogger(String loggerName, Class ex
return this;
}
- public NotifyDeveloperHandler notifyDeveloperHandler(final Application context, String email) {
- final ActivityStateListener stateListener = getStateListener(context);
- ArrayList emails = new ArrayList();
- emails.add(email);
- NotifyDeveloperHandler handler = new NotifyDeveloperHandler(context, emails, stateListener);
- handler.addAttachmentClass(ReadLogcatEntriesAsyncTask.class);
- handler.addAttachmentClass(MakeScreenShotAsyncTask.class);
- return handler;
- }
-
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
- private ActivityStateListener getStateListener(final Application context) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- final ActivityStateListener stateListener = new ActivityStateListener();
- disposeThingsOnReset.add(new Disposable() {
- @Override
- public void dispose() {
- context.unregisterActivityLifecycleCallbacks(stateListener);
- }
- });
- context.registerActivityLifecycleCallbacks(stateListener);
- return stateListener;
- }
- return null;
- }
-
/**
* Adds given {@code handler} to logger named {@code loggerName}.
*
- * @return A {@link java.util.logging.Logger} named {@code loggerName}.
+ * @return A {@link Logger} named {@code loggerName}.
*/
public Logger addHandlerToLogger(String loggerName, Handler handler) {
Logger logger = Logger.getLogger(loggerName);
@@ -178,7 +155,7 @@ public Logger addHandlerToLogger(String loggerName, Handler handler) {
/**
* Adds given {@code handler} to root logger.
*
- * @return The root {@link java.util.logging.Logger}.
+ * @return The root {@link Logger}.
*/
public Logger addHandlerToRootLogger(Handler handler) {
Logger logger = Logger.getLogger("");
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LoggerNameValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/LoggerNameValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LoggerNameValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/LoggerNameValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LoggerPattern.java b/core/src/main/java/pl/brightinventions/slf4android/LoggerPattern.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LoggerPattern.java
rename to core/src/main/java/pl/brightinventions/slf4android/LoggerPattern.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LoggerPatternConfiguration.java b/core/src/main/java/pl/brightinventions/slf4android/LoggerPatternConfiguration.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LoggerPatternConfiguration.java
rename to core/src/main/java/pl/brightinventions/slf4android/LoggerPatternConfiguration.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/MessageValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/MessageValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/MessageValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/MessageValueSupplier.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/TextUtils.java b/core/src/main/java/pl/brightinventions/slf4android/TextUtils.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/TextUtils.java
rename to core/src/main/java/pl/brightinventions/slf4android/TextUtils.java
diff --git a/app/src/main/java/pl/brightinventions/slf4android/ThreadValueSupplier.java b/core/src/main/java/pl/brightinventions/slf4android/ThreadValueSupplier.java
similarity index 100%
rename from app/src/main/java/pl/brightinventions/slf4android/ThreadValueSupplier.java
rename to core/src/main/java/pl/brightinventions/slf4android/ThreadValueSupplier.java
diff --git a/app/src/test/java/pl/brightinventions/slf4android/HandlerFormatterCompilerTests.java b/core/src/test/java/pl/brightinventions/slf4android/HandlerFormatterCompilerTests.java
similarity index 100%
rename from app/src/test/java/pl/brightinventions/slf4android/HandlerFormatterCompilerTests.java
rename to core/src/test/java/pl/brightinventions/slf4android/HandlerFormatterCompilerTests.java
diff --git a/app/src/test/java/pl/brightinventions/slf4android/MessageValueSupplierTests.java b/core/src/test/java/pl/brightinventions/slf4android/MessageValueSupplierTests.java
similarity index 100%
rename from app/src/test/java/pl/brightinventions/slf4android/MessageValueSupplierTests.java
rename to core/src/test/java/pl/brightinventions/slf4android/MessageValueSupplierTests.java
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0f23ff6..09e0043 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Dec 29 11:11:03 CET 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/handler-file-log/.gitignore b/handler-file-log/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/handler-file-log/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/handler-file-log/build.gradle b/handler-file-log/build.gradle
new file mode 100644
index 0000000..8584ac7
--- /dev/null
+++ b/handler-file-log/build.gradle
@@ -0,0 +1,64 @@
+plugins {
+ id 'com.android.library'
+ id 'maven-publish'
+}
+
+android {
+ namespace 'pl.brightinventions.slf4android.handler.filelog'
+ compileSdk 34
+
+ defaultConfig {
+ minSdk 14
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ publishing {
+ singleVariant('release') {
+ withSourcesJar()
+ }
+ }
+
+ java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(17)
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ api project(':core')
+
+ androidTestImplementation 'org.hamcrest:hamcrest-core:1.3'
+ androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
+ androidTestImplementation('junit:junit:4.13.2')
+ androidTestImplementation 'androidx.test:rules:1.5.0'
+ androidTestImplementation 'org.easytesting:fest-util:1.2.5'
+}
+
+publishing {
+ publications {
+ release(MavenPublication) {
+ groupId = 'com.github.bright.slf4android'
+ artifactId = 'slf4android-handler-file-log'
+ version = '1.0'
+
+ afterEvaluate {
+ from components.release
+ }
+ }
+ }
+}
diff --git a/handler-file-log/consumer-rules.pro b/handler-file-log/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/handler-file-log/proguard-rules.pro b/handler-file-log/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/handler-file-log/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/FileHandlerTests.java b/handler-file-log/src/androidTest/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerTests.java
similarity index 94%
rename from app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/FileHandlerTests.java
rename to handler-file-log/src/androidTest/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerTests.java
index d256e9f..199a1d8 100644
--- a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/FileHandlerTests.java
+++ b/handler-file-log/src/androidTest/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerTests.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android.androidTest;
+package pl.brightinventions.slf4android.handler.filelog;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -18,7 +18,6 @@
import java.util.Calendar;
import java.util.GregorianCalendar;
-import pl.brightinventions.slf4android.FileLogHandlerConfiguration;
import pl.brightinventions.slf4android.LoggerConfiguration;
public class FileHandlerTests {
@@ -28,7 +27,7 @@ public class FileHandlerTests {
@Before
public void setUp() {
LoggerConfiguration.resetConfigurationToDefault();
- handler = LoggerConfiguration.fileLogHandler(getInstrumentation().getContext());
+ handler = FileLogHandlerConfiguration.create(getInstrumentation().getContext());
LoggerConfiguration.configuration().addHandlerToLogger(getClass().getSimpleName(), handler);
LOG = LoggerFactory.getLogger(getClass().getSimpleName());
}
diff --git a/handler-file-log/src/main/AndroidManifest.xml b/handler-file-log/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..568741e
--- /dev/null
+++ b/handler-file-log/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/pl/brightinventions/slf4android/FileHandlerExpose.java b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerExpose.java
similarity index 97%
rename from app/src/main/java/pl/brightinventions/slf4android/FileHandlerExpose.java
rename to handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerExpose.java
index a979438..bd00358 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/FileHandlerExpose.java
+++ b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerExpose.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.filelog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/FileLogHandler.java b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandler.java
similarity index 97%
rename from app/src/main/java/pl/brightinventions/slf4android/FileLogHandler.java
rename to handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandler.java
index ab02d16..b48f8e8 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/FileLogHandler.java
+++ b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandler.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.filelog;
import android.content.Context;
import android.util.Log;
@@ -13,6 +13,8 @@
import java.util.logging.Level;
import java.util.logging.LogRecord;
+import pl.brightinventions.slf4android.LogRecordFormatter;
+
class FileLogHandler extends FileLogHandlerConfiguration {
private static String TAG = FileLogHandler.class.getSimpleName();
private FileHandler fileHandler;
diff --git a/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandlerConfiguration.java b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandlerConfiguration.java
new file mode 100644
index 0000000..a4faf2c
--- /dev/null
+++ b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandlerConfiguration.java
@@ -0,0 +1,36 @@
+package pl.brightinventions.slf4android.handler.filelog;
+
+import android.content.Context;
+
+import java.util.logging.Handler;
+
+import pl.brightinventions.slf4android.LogRecordFormatter;
+import pl.brightinventions.slf4android.LoggerConfiguration;
+
+public abstract class FileLogHandlerConfiguration extends Handler {
+ @SuppressWarnings("UnusedDeclaration")
+ public abstract FileLogHandlerConfiguration setFullFilePathPattern(String fullPathPattern);
+
+ @SuppressWarnings("UnusedDeclaration")
+ public abstract FileLogHandlerConfiguration setRotateFilesCountLimit(int count);
+
+ @SuppressWarnings("UnusedDeclaration")
+ public abstract FileLogHandlerConfiguration setLogFileSizeLimitInBytes(int maxFileSizeInBytes);
+
+ public abstract String getCurrentFileName();
+
+
+ /**
+ * Creates a {@link FileLogHandlerConfiguration} logger handler.
+ * The returned new instance should be added to some logger with
+ * {@link pl.brightinventions.slf4android.LoggerConfiguration#addHandlerToLogger(String, Handler)}
+ *
+ * @return A new instance of {@link FileLogHandlerConfiguration}.
+ */
+ public static FileLogHandlerConfiguration create(Context context) {
+ LogRecordFormatter formatter = LoggerConfiguration.configuration()
+ .getCompiler()
+ .compile("%date %level [%thread] %name - %message%newline");
+ return new FileLogHandler(context, formatter);
+ }
+}
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogRecordFormatterUtilFormatterAdapter.java b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/LogRecordFormatterUtilFormatterAdapter.java
similarity index 79%
rename from app/src/main/java/pl/brightinventions/slf4android/LogRecordFormatterUtilFormatterAdapter.java
rename to handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/LogRecordFormatterUtilFormatterAdapter.java
index 3650e24..9dbe58a 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/LogRecordFormatterUtilFormatterAdapter.java
+++ b/handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/LogRecordFormatterUtilFormatterAdapter.java
@@ -1,8 +1,10 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.filelog;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
+import pl.brightinventions.slf4android.LogRecordFormatter;
+
class LogRecordFormatterUtilFormatterAdapter extends Formatter {
private final LogRecordFormatter formatter;
diff --git a/app/.gitignore b/handler-notify-developer/.gitignore
similarity index 100%
rename from app/.gitignore
rename to handler-notify-developer/.gitignore
diff --git a/handler-notify-developer/build.gradle b/handler-notify-developer/build.gradle
new file mode 100644
index 0000000..7b72347
--- /dev/null
+++ b/handler-notify-developer/build.gradle
@@ -0,0 +1,69 @@
+plugins {
+ id 'com.android.library'
+ id 'maven-publish'
+}
+
+android {
+ namespace "pl.brightinventions.slf4android.handler.notifydeveloper"
+
+ compileSdk 34
+
+ defaultConfig {
+ minSdkVersion 19
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ publishing {
+ singleVariant('release') {
+ withSourcesJar()
+ }
+ }
+
+ packagingOptions {
+ exclude 'LICENSE.txt'
+ exclude 'META-INF/LICENSE.txt'
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/NOTICE'
+ }
+
+ useLibrary 'android.test.runner'
+ useLibrary 'android.test.base'
+
+ java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(17)
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ api project(':core')
+
+ implementation 'androidx.core:core:1.13.1'
+ implementation 'com.squareup:seismic:1.0.2'
+
+ androidTestImplementation 'org.hamcrest:hamcrest-core:1.3'
+ androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
+ androidTestImplementation('junit:junit:4.13.2')
+ androidTestImplementation 'androidx.test:rules:1.5.0'
+ androidTestImplementation 'org.easytesting:fest-util:1.2.5'
+}
+
+publishing {
+ publications {
+ release(MavenPublication) {
+ groupId = 'com.github.bright.slf4android'
+ artifactId = 'slf4android-handler-notify-developer'
+ version = '1.0'
+
+ afterEvaluate {
+ from components.release
+ }
+ }
+ }
+}
diff --git a/app/proguard-rules.pro b/handler-notify-developer/proguard-rules.pro
similarity index 100%
rename from app/proguard-rules.pro
rename to handler-notify-developer/proguard-rules.pro
diff --git a/handler-notify-developer/src/androidTest/AndroidManifest.xml b/handler-notify-developer/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..91142f0
--- /dev/null
+++ b/handler-notify-developer/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/NotifyDeveloperHandlerTests.java b/handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandlerTests.java
similarity index 76%
rename from app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/NotifyDeveloperHandlerTests.java
rename to handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandlerTests.java
index 1168111..573cb2a 100644
--- a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/NotifyDeveloperHandlerTests.java
+++ b/handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandlerTests.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android.androidTest;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
@@ -7,6 +7,7 @@
import androidx.test.rule.ActivityTestRule;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,36 +15,35 @@
import java.util.concurrent.TimeUnit;
import pl.brightinventions.slf4android.LoggerConfiguration;
-import pl.brightinventions.slf4android.NotifyDeveloperHandler;
-public class NotifyDeveloperHandlerTests extends ActivityTestRule {
+public class NotifyDeveloperHandlerTests {
+
+ @Rule
+ public ActivityTestRule activityTestRule =
+ new ActivityTestRule<>(TestActivity.class, true, true);
private Logger LOG;
private NotifyDeveloperHandler handler;
- public NotifyDeveloperHandlerTests() {
- super(TestActivity.class);
- }
-
@Before
public void setUp() {
LoggerConfiguration.resetConfigurationToDefault();
LoggerConfiguration configuration = LoggerConfiguration.configuration();
Application targetContext = (Application) getInstrumentation().getTargetContext().getApplicationContext();
- handler = configuration.notifyDeveloperHandler(targetContext, "piotr.mionskowski@gmail.com");
+ handler = NotifyDeveloperHandler.create(targetContext, "piotr.mionskowski@gmail.com");
configuration.addHandlerToLogger("", handler);
LOG = LoggerFactory.getLogger(getClass().getSimpleName());
}
@Test
public void test_dont_send_message_with_level_lower_than_error() {
- getActivity();
+ activityTestRule.getActivity();
LOG.warn("Hello");
}
@Test
public void test_send_message_with_level_error() throws Exception {
- getActivity();
+ activityTestRule.getActivity();
LOG.warn("Hello");
LOG.error("Send email", new NullPointerException("A test message"));
Thread.sleep(TimeUnit.SECONDS.toMillis(15));
@@ -52,7 +52,7 @@ public void test_send_message_with_level_error() throws Exception {
@Test
public void test_send_message_with_custom_subject_body_with_level_error() throws Exception {
handler.withSubject("Błąd").withBody("Podaj szczegóły błędu: ");
- getActivity();
+ activityTestRule.getActivity();
LOG.warn("Hello");
LOG.error("Send email", new NullPointerException("A test message"));
Thread.sleep(TimeUnit.SECONDS.toMillis(15));
diff --git a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/TestActivity.java b/handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/TestActivity.java
similarity index 57%
rename from app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/TestActivity.java
rename to handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/TestActivity.java
index 1b077a8..c6d79d5 100644
--- a/app/src/androidTest/java/pl/brightinventions/slf4android/androidTest/TestActivity.java
+++ b/handler-notify-developer/src/androidTest/java/pl/brightinventions/slf4android/handler/notifydeveloper/TestActivity.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android.androidTest;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.app.Activity;
import android.os.Bundle;
@@ -7,6 +7,6 @@ public class TestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.test);
+ setContentView(pl.brightinventions.slf4android.handler.notifydeveloper.test.R.layout.test);
}
}
diff --git a/app/src/androidTest/res/layout/test.xml b/handler-notify-developer/src/androidTest/res/layout/test.xml
similarity index 100%
rename from app/src/androidTest/res/layout/test.xml
rename to handler-notify-developer/src/androidTest/res/layout/test.xml
diff --git a/app/src/main/AndroidManifest.xml b/handler-notify-developer/src/main/AndroidManifest.xml
similarity index 94%
rename from app/src/main/AndroidManifest.xml
rename to handler-notify-developer/src/main/AndroidManifest.xml
index c081391..5c31aae 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/handler-notify-developer/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/java/pl/brightinventions/slf4android/ActivityStateListener.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ActivityStateListener.java
similarity index 90%
rename from app/src/main/java/pl/brightinventions/slf4android/ActivityStateListener.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ActivityStateListener.java
index 03fb919..a422816 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/ActivityStateListener.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ActivityStateListener.java
@@ -1,14 +1,11 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Application;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
-@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
class ActivityStateListener implements Application.ActivityLifecycleCallbacks {
private Activity lastUsedActivity;
private Activity activeActivity;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/AtLeastFilter.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/AtLeastFilter.java
similarity index 76%
rename from app/src/main/java/pl/brightinventions/slf4android/AtLeastFilter.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/AtLeastFilter.java
index 5ae45da..5946127 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/AtLeastFilter.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/AtLeastFilter.java
@@ -1,8 +1,10 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import java.util.logging.Filter;
import java.util.logging.LogRecord;
+import pl.brightinventions.slf4android.LogLevel;
+
class AtLeastFilter implements Filter {
private final LogLevel level;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/EmailErrorReport.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/EmailErrorReport.java
similarity index 97%
rename from app/src/main/java/pl/brightinventions/slf4android/EmailErrorReport.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/EmailErrorReport.java
index 47d7f33..a190d52 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/EmailErrorReport.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/EmailErrorReport.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.content.Context;
import android.content.Intent;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/Lists.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Lists.java
similarity index 82%
rename from app/src/main/java/pl/brightinventions/slf4android/Lists.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Lists.java
index 48ed174..78a702d 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/Lists.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Lists.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/LogcatReadingConfiguration.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/LogcatReadingConfiguration.java
similarity index 81%
rename from app/src/main/java/pl/brightinventions/slf4android/LogcatReadingConfiguration.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/LogcatReadingConfiguration.java
index 4bf28cb..d2ce824 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/LogcatReadingConfiguration.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/LogcatReadingConfiguration.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
class LogcatReadingConfiguration {
private boolean shouldClear;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/MakeScreenShotAsyncTask.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/MakeScreenShotAsyncTask.java
similarity index 98%
rename from app/src/main/java/pl/brightinventions/slf4android/MakeScreenShotAsyncTask.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/MakeScreenShotAsyncTask.java
index 9d51981..55dc53f 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/MakeScreenShotAsyncTask.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/MakeScreenShotAsyncTask.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.app.Activity;
import android.content.Context;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperDialogDisplayActivity.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperDialogDisplayActivity.java
similarity index 90%
rename from app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperDialogDisplayActivity.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperDialogDisplayActivity.java
index a9208d7..1e3e2d2 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperDialogDisplayActivity.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperDialogDisplayActivity.java
@@ -1,21 +1,24 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
-import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
-import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
+import java.io.Closeable;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import pl.brightinventions.slf4android.LogRecord;
+import pl.brightinventions.slf4android.MessageValueSupplier;
+
public class NotifyDeveloperDialogDisplayActivity extends Activity {
private static final String TAG = NotifyDeveloperDialogDisplayActivity.class.getSimpleName();
private static final MessageValueSupplier messageFormatter = new MessageValueSupplier();
@@ -47,7 +50,7 @@ public static AlertDialog showDialogIn(final Context activityContext, LogRecord
return alertDialog;
}
- private static AlertDialog showDialogIn(final Context activityContext, final String message, final List emailAddresses, String emailSubject, String emailBody, Iterable> attachmentTasks, final Disposable onDialogClose) {
+ private static AlertDialog showDialogIn(final Context activityContext, final String message, final List emailAddresses, String emailSubject, String emailBody, Iterable> attachmentTasks, final Closeable onDialogClose) {
final EmailErrorReport emailErrorReport = new EmailErrorReport(message, emailAddresses, emailSubject, emailBody);
for (AsyncTask attachment : attachmentTasks) {
startTaskExecution(activityContext, attachment);
@@ -67,18 +70,14 @@ private static AlertDialog showDialogIn(final Context activityContext, final Str
public void onClick(DialogInterface dialog, int which) {
sendEmailWithError(activityContext, emailErrorReport);
dialog.dismiss();
- if (onDialogClose != null) {
- onDialogClose.dispose();
- }
+ closeSafely(onDialogClose);
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- if (onDialogClose != null) {
- onDialogClose.dispose();
- }
+ closeSafely(onDialogClose);
}
})
.create();
@@ -86,6 +85,16 @@ public void onClick(DialogInterface dialog, int which) {
return alertDialog;
}
+ private static void closeSafely(Closeable closeable) {
+ if (closeable != null) {
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Could not close " + closeable, e);
+ }
+ }
+ }
+
private static List> buildAttachmentFactories(Iterable attachmentsClasses) {
List> attachmentTasks = new ArrayList>();
for (String attachmentClassName : attachmentsClasses) {
@@ -104,7 +113,6 @@ private static List> buildAttachmentFactories(Ite
return attachmentTasks;
}
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static void startTaskExecution(Context activityContext, AsyncTask attachment) {
attachment.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, activityContext);
}
@@ -146,9 +154,9 @@ protected void onCreate(Bundle savedInstanceState) {
String emailBody = getIntent().getExtras().getString("email_body");
List> attachmentTasks = buildAttachmentFactoriesFromIntent();
if (log_record != null) {
- dialog = showDialogIn(this, log_record, emailAddresses, emailSubject, emailBody, attachmentTasks, new Disposable() {
+ dialog = showDialogIn(this, log_record, emailAddresses, emailSubject, emailBody, attachmentTasks, new Closeable() {
@Override
- public void dispose() {
+ public void close() {
finish();
}
});
diff --git a/app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperHandler.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandler.java
similarity index 85%
rename from app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperHandler.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandler.java
index 718e9d5..194ca2a 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/NotifyDeveloperHandler.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandler.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.app.Activity;
import android.app.AlertDialog;
@@ -21,6 +21,9 @@
import java.util.logging.Level;
import java.util.logging.LogRecord;
+import pl.brightinventions.slf4android.LogLevel;
+import pl.brightinventions.slf4android.LoggerConfiguration;
+
public class NotifyDeveloperHandler extends Handler {
private static final String TAG = NotifyDeveloperHandler.class.getSimpleName();
private final Context context;
@@ -34,6 +37,27 @@ public class NotifyDeveloperHandler extends Handler {
private android.os.Handler mailLoopHandler = new android.os.Handler(Looper.getMainLooper());
private ArrayList attachmentClassList;
+ public static NotifyDeveloperHandler create(final Application context, String email) {
+ final ActivityStateListener stateListener = getStateListener(context);
+ ArrayList emails = new ArrayList();
+ emails.add(email);
+ NotifyDeveloperHandler handler = new NotifyDeveloperHandler(context, emails, stateListener);
+ handler.addAttachmentClass(ReadLogcatEntriesAsyncTask.class);
+ handler.addAttachmentClass(MakeScreenShotAsyncTask.class);
+ return handler;
+ }
+
+ private static ActivityStateListener getStateListener(final Application context) {
+ final ActivityStateListener stateListener = new ActivityStateListener();
+
+ LoggerConfiguration.configuration().registerCloseable(() ->
+ context.unregisterActivityLifecycleCallbacks(stateListener)
+ );
+
+ context.registerActivityLifecycleCallbacks(stateListener);
+ return stateListener;
+ }
+
NotifyDeveloperHandler(Application context, Iterable emailAddress, ActivityStateListener activityState) {
this(context, emailAddress, LogLevel.ERROR, activityState);
}
@@ -141,7 +165,7 @@ private ArrayList getAttachmentClassList() {
return attachmentClassList;
}
- public NotifyDeveloperHandler withSubject(String subject){
+ public NotifyDeveloperHandler withSubject(String subject) {
this.emailSubject = subject;
return this;
}
diff --git a/app/src/main/java/pl/brightinventions/slf4android/ReadLogcatEntriesAsyncTask.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ReadLogcatEntriesAsyncTask.java
similarity index 97%
rename from app/src/main/java/pl/brightinventions/slf4android/ReadLogcatEntriesAsyncTask.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ReadLogcatEntriesAsyncTask.java
index 17d5f51..4696b31 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/ReadLogcatEntriesAsyncTask.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ReadLogcatEntriesAsyncTask.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.content.Context;
import android.os.AsyncTask;
diff --git a/app/src/main/java/pl/brightinventions/slf4android/Slf4AndroidLogFileProvider.java b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Slf4AndroidLogFileProvider.java
similarity index 85%
rename from app/src/main/java/pl/brightinventions/slf4android/Slf4AndroidLogFileProvider.java
rename to handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Slf4AndroidLogFileProvider.java
index e1db851..35597fe 100644
--- a/app/src/main/java/pl/brightinventions/slf4android/Slf4AndroidLogFileProvider.java
+++ b/handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/Slf4AndroidLogFileProvider.java
@@ -1,4 +1,4 @@
-package pl.brightinventions.slf4android;
+package pl.brightinventions.slf4android.handler.notifydeveloper;
import android.content.Context;
diff --git a/app/src/main/res/values/strings.xml b/handler-notify-developer/src/main/res/values/strings.xml
similarity index 100%
rename from app/src/main/res/values/strings.xml
rename to handler-notify-developer/src/main/res/values/strings.xml
diff --git a/app/src/main/res/xml/file_paths.xml b/handler-notify-developer/src/main/res/xml/file_paths.xml
similarity index 58%
rename from app/src/main/res/xml/file_paths.xml
rename to handler-notify-developer/src/main/res/xml/file_paths.xml
index 6545fb7..338bd74 100644
--- a/app/src/main/res/xml/file_paths.xml
+++ b/handler-notify-developer/src/main/res/xml/file_paths.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 5c962e0..d567183 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -2,4 +2,7 @@ plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
}
-include ':app'
+include ':core'
+include ':testapp'
+include ':handler-file-log'
+include ':handler-notify-developer'
diff --git a/testapp/.gitignore b/testapp/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/testapp/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/testapp/build.gradle b/testapp/build.gradle
new file mode 100644
index 0000000..bf92b5e
--- /dev/null
+++ b/testapp/build.gradle
@@ -0,0 +1,69 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'pl.brightinventions.slf4android.testapp'
+ compileSdk 34
+
+ defaultConfig {
+ applicationId "pl.brightinventions.slf4android.testapp"
+ minSdk 19
+ targetSdk 34
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ release {
+ storeFile file('testkeystore.jks')
+ storePassword 'teststore'
+ keyAlias 'key'
+ keyPassword 'testkey'
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
+ }
+ }
+
+ java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(17)
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+repositories {
+ maven { url 'https://jitpack.io' }
+}
+
+dependencies {
+ // Uncomment to use the artifacts from JitPack
+ //var slf4androidVersion = '7378c1016a'
+ //implementation "com.github.bright.slf4android:slf4android:$slf4androidVersion"
+ //implementation "com.github.bright.slf4android:slf4android-handler-file-log:slf4androidVersion"
+ //implementation "com.github.bright.slf4android:slf4android-handler-notify-developer:slf4androidVersion"
+
+ // Uncomment to use the local modules
+ implementation project(':core')
+ //implementation project(':handler-file-log')
+ //implementation project(':handler-notify-developer')
+
+ implementation 'androidx.core:core:1.13.1'
+
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+}
\ No newline at end of file
diff --git a/testapp/proguard-rules.pro b/testapp/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/testapp/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/testapp/src/main/AndroidManifest.xml b/testapp/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c9f751f
--- /dev/null
+++ b/testapp/src/main/AndroidManifest.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testapp/src/main/java/pl/brightinventions/slf4android/testapp/MainActivity.java b/testapp/src/main/java/pl/brightinventions/slf4android/testapp/MainActivity.java
new file mode 100644
index 0000000..da19640
--- /dev/null
+++ b/testapp/src/main/java/pl/brightinventions/slf4android/testapp/MainActivity.java
@@ -0,0 +1,44 @@
+package pl.brightinventions.slf4android.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import pl.brightinventions.slf4android.LoggerConfiguration;
+
+public class MainActivity extends Activity {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MainActivity.class.getSimpleName());
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ findViewById(R.id.log).setOnClickListener((view) -> {
+ LOG.trace("trace");
+ LOG.debug("debug");
+ LOG.info("info");
+ LOG.warn("warn");
+ LOG.error("error");
+ });
+ findViewById(R.id.reset).setOnClickListener((view) -> {
+ LoggerConfiguration.resetConfigurationToDefault();
+ });
+ findViewById(R.id.registerCloseable).setOnClickListener((view) -> {
+ LoggerConfiguration.configuration().registerCloseable(() -> LOG.info("Closing"));
+ });
+ findViewById(R.id.registerFailingCloseable).setOnClickListener((view) -> {
+ LoggerConfiguration.configuration().registerCloseable(() -> {
+ throw new IOException("Test");
+ });
+ });
+
+ }
+}
diff --git a/testapp/src/main/java/pl/brightinventions/slf4android/testapp/TestApp.java b/testapp/src/main/java/pl/brightinventions/slf4android/testapp/TestApp.java
new file mode 100644
index 0000000..178891a
--- /dev/null
+++ b/testapp/src/main/java/pl/brightinventions/slf4android/testapp/TestApp.java
@@ -0,0 +1,15 @@
+package pl.brightinventions.slf4android.testapp;
+
+import android.app.Application;
+
+import pl.brightinventions.slf4android.LoggerConfiguration;
+
+public class TestApp extends Application {
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ LoggerConfiguration.resetConfigurationToDefault();
+ }
+}
diff --git a/testapp/src/main/res/layout/activity_main.xml b/testapp/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..084bae0
--- /dev/null
+++ b/testapp/src/main/res/layout/activity_main.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testapp/src/main/res/mipmap-hdpi/ic_launcher.png b/testapp/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..1d58720
Binary files /dev/null and b/testapp/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/testapp/src/main/res/mipmap-hdpi/ic_launcher_round.png b/testapp/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..42075b2
Binary files /dev/null and b/testapp/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/testapp/src/main/res/mipmap-mdpi/ic_launcher.png b/testapp/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..3dc3bb0
Binary files /dev/null and b/testapp/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/testapp/src/main/res/mipmap-mdpi/ic_launcher_round.png b/testapp/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..dc11866
Binary files /dev/null and b/testapp/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/testapp/src/main/res/mipmap-xhdpi/ic_launcher.png b/testapp/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..dd8a424
Binary files /dev/null and b/testapp/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/testapp/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/testapp/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..cd80007
Binary files /dev/null and b/testapp/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/testapp/src/main/res/mipmap-xxhdpi/ic_launcher.png b/testapp/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..8f47bb0
Binary files /dev/null and b/testapp/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/testapp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/testapp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..3fbfd37
Binary files /dev/null and b/testapp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..1022868
Binary files /dev/null and b/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..2906382
Binary files /dev/null and b/testapp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/testapp/src/main/res/values/strings.xml b/testapp/src/main/res/values/strings.xml
new file mode 100644
index 0000000..ae0adfd
--- /dev/null
+++ b/testapp/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ testapp
+
\ No newline at end of file
diff --git a/testapp/testkeystore.jks b/testapp/testkeystore.jks
new file mode 100644
index 0000000..94d9894
Binary files /dev/null and b/testapp/testkeystore.jks differ