/*
 * Copyright 2016 Elvis Hew
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.elvishew.xlogsample;

import android.app.Application;
import android.os.Environment;

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.naming.DateFileNameGenerator;

import java.io.File;

public class XLogSampleApplication extends Application {

  public static Printer globalFilePrinter;

  @Override
  public void onCreate() {
    super.onCreate();

    initXlog();
  }

  /**
   * Initialize XLog.
   */
  private void initXlog() {
    LogConfiguration config = new LogConfiguration.Builder()
        .tag(getString(R.string.global_tag))                   // Specify TAG, default: "X-LOG"
        // .t()                                                // Enable thread info, disabled by default
        // .st(2)                                              // Enable stack trace info with depth 2, disabled by default
        // .b()                                                // Enable border, disabled by default
        // .jsonFormatter(new MyJsonFormatter())               // Default: DefaultJsonFormatter
        // .xmlFormatter(new MyXmlFormatter())                 // Default: DefaultXmlFormatter
        // .throwableFormatter(new MyThrowableFormatter())     // Default: DefaultThrowableFormatter
        // .threadFormatter(new MyThreadFormatter())           // Default: DefaultThreadFormatter
        // .stackTraceFormatter(new MyStackTraceFormatter())   // Default: DefaultStackTraceFormatter
        // .borderFormatter(new MyBoardFormatter())            // Default: DefaultBorderFormatter
        // .addObjectFormatter(AnyClass.class,                 // Add formatter for specific class of object
        //     new AnyClassObjectFormatter())                  // Use Object.toString() by default
        .build();

    Printer androidPrinter = new AndroidPrinter();             // Printer that print the log using android.util.Log
    Printer filePrinter = new FilePrinter                      // Printer that print the log to the file system
        .Builder(new File(Environment.getExternalStorageDirectory(), "xlogsample").getPath())       // Specify the path to save log file
        .fileNameGenerator(new DateFileNameGenerator())        // Default: ChangelessFileNameGenerator("log")
        // .backupStrategy(new MyBackupStrategy())             // Default: FileSizeBackupStrategy(1024 * 1024)
        // .logFlattener(new MyLogFlattener())                 // Default: DefaultLogFlattener
        .build();

    XLog.init(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE,// Specify the log level, logs below this level won't be printed
        config,                                                // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build()
        androidPrinter,                                        // Specify printers, if no printer is specified, AndroidPrinter will be used by default
        filePrinter);

    // For future usage: partial usage in MainActivity.
    globalFilePrinter = filePrinter;
  }
}

@@ -794,16 +794,138 @@
 g.XLog;%0A
+import com.elvishew.xlog.flattener.ClassicFlattener;%0Aimport com.elvishew.xlog.interceptor.BlacklistTagsFilterInterceptor;%0A
 import c
@@ -1457,16 +1457,192 @@
 ilder()%0A
+        .logLevel(BuildConfig.DEBUG ? LogLevel.ALL             // Specify log level, logs below this level won't be printed, default: LogLevel.ALL%0A            : LogLevel.NONE)%0A
         
@@ -2850,32 +2850,417 @@
 ng() by default%0A
+        .addInterceptor(new BlacklistTagsFilterInterceptor(    // Add blacklist tags filter%0A            %22blacklist1%22, %22blacklist2%22, %22blacklist3%22))%0A        // .addInterceptor(new WhitelistTagsFilterInterceptor( // Add whitelist tags filter%0A        //     %22whitelist1%22, %22whitelist2%22, %22whitelist3%22))%0A        // .addInterceptor(new MyInterceptor())                // Add a log interceptor%0A
         .build()
@@ -3855,19 +3855,16 @@
 %0A       
- //
  .logFla
@@ -3878,13 +3878,15 @@
 new 
-MyLog
+Classic
 Flat
@@ -3889,24 +3889,25 @@
 Flattener())
+ 
             
@@ -3930,19 +3930,16 @@
  Default
-Log
 Flattene
@@ -3977,121 +3977,75 @@
 nit(
-BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE,// Specify the log level, logs below this level won't be printed
+                                                 // Initialize XLog
 %0A   
@@ -4330,16 +4330,54 @@
 dPrinter
+(for Android)/ConsolePrinter(for java)
  will be
@@ -4381,27 +4381,17 @@
  be used
- by default
+.
 %0A       

Update initialization codes in sample