mirror of https://github.com/tasks/tasks
Convert debug classes to Kotlin
parent
4042dd4ebd
commit
3ae52f4879
@ -1,66 +0,0 @@
|
|||||||
package org.tasks;
|
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.StrictMode;
|
|
||||||
import com.facebook.flipper.android.AndroidFlipperClient;
|
|
||||||
import com.facebook.flipper.android.utils.FlipperUtils;
|
|
||||||
import com.facebook.flipper.core.FlipperClient;
|
|
||||||
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
|
|
||||||
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
|
|
||||||
import com.facebook.soloader.SoLoader;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import leakcanary.AppWatcher;
|
|
||||||
import org.tasks.injection.ForApplication;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
class BuildSetup {
|
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Preferences preferences;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
BuildSetup(@ForApplication Context context, Preferences preferences) {
|
|
||||||
this.context = context;
|
|
||||||
this.preferences = preferences;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setup() {
|
|
||||||
Timber.plant(new Timber.DebugTree());
|
|
||||||
Application application = (Application) context.getApplicationContext();
|
|
||||||
SoLoader.init(application, false);
|
|
||||||
|
|
||||||
if (!preferences.getBoolean(R.string.p_leakcanary, false)) {
|
|
||||||
AppWatcher.setConfig(AppWatcher.getConfig().newBuilder().enabled(false).build());
|
|
||||||
}
|
|
||||||
if (preferences.getBoolean(R.string.p_flipper, false) && FlipperUtils.shouldEnableFlipper(context)) {
|
|
||||||
FlipperClient client = AndroidFlipperClient.getInstance(application);
|
|
||||||
client.addPlugin(new InspectorFlipperPlugin(application, DescriptorMapping.withDefaults()));
|
|
||||||
client.addPlugin(new DatabasesFlipperPlugin(application));
|
|
||||||
client.addPlugin(new NetworkFlipperPlugin());
|
|
||||||
client.addPlugin(new SharedPreferencesFlipperPlugin(application));
|
|
||||||
client.start();
|
|
||||||
}
|
|
||||||
if (preferences.getBoolean(R.string.p_strict_mode_thread, false)) {
|
|
||||||
StrictMode.setThreadPolicy(
|
|
||||||
new StrictMode.ThreadPolicy.Builder()
|
|
||||||
.detectDiskReads()
|
|
||||||
.detectDiskWrites()
|
|
||||||
.detectNetwork()
|
|
||||||
.penaltyLog()
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
if (preferences.getBoolean(R.string.p_strict_mode_vm, false)) {
|
|
||||||
StrictMode.setVmPolicy(
|
|
||||||
new StrictMode.VmPolicy.Builder()
|
|
||||||
.detectLeakedSqlLiteObjects()
|
|
||||||
.detectLeakedClosableObjects()
|
|
||||||
.penaltyLog()
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,53 @@
|
|||||||
|
package org.tasks
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.StrictMode
|
||||||
|
import android.os.StrictMode.VmPolicy
|
||||||
|
import com.facebook.flipper.android.AndroidFlipperClient
|
||||||
|
import com.facebook.flipper.android.utils.FlipperUtils
|
||||||
|
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin
|
||||||
|
import com.facebook.flipper.plugins.inspector.DescriptorMapping
|
||||||
|
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin
|
||||||
|
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
|
||||||
|
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin
|
||||||
|
import com.facebook.soloader.SoLoader
|
||||||
|
import leakcanary.AppWatcher
|
||||||
|
import org.tasks.injection.ForApplication
|
||||||
|
import org.tasks.preferences.Preferences
|
||||||
|
import timber.log.Timber
|
||||||
|
import timber.log.Timber.DebugTree
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
internal class BuildSetup @Inject constructor(@ForApplication private val context: Context, private val preferences: Preferences) {
|
||||||
|
fun setup() {
|
||||||
|
Timber.plant(DebugTree())
|
||||||
|
SoLoader.init(context, false)
|
||||||
|
val leakCanaryEnabled = preferences.getBoolean(R.string.p_leakcanary, false)
|
||||||
|
AppWatcher.config = AppWatcher.config.copy(enabled = leakCanaryEnabled)
|
||||||
|
if (preferences.getBoolean(R.string.p_flipper, false) && FlipperUtils.shouldEnableFlipper(context)) {
|
||||||
|
val client = AndroidFlipperClient.getInstance(context)
|
||||||
|
client.addPlugin(InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()))
|
||||||
|
client.addPlugin(DatabasesFlipperPlugin(context))
|
||||||
|
client.addPlugin(NetworkFlipperPlugin())
|
||||||
|
client.addPlugin(SharedPreferencesFlipperPlugin(context))
|
||||||
|
client.start()
|
||||||
|
}
|
||||||
|
if (preferences.getBoolean(R.string.p_strict_mode_thread, false)) {
|
||||||
|
StrictMode.setThreadPolicy(
|
||||||
|
StrictMode.ThreadPolicy.Builder()
|
||||||
|
.detectDiskReads()
|
||||||
|
.detectDiskWrites()
|
||||||
|
.detectNetwork()
|
||||||
|
.penaltyLog()
|
||||||
|
.build())
|
||||||
|
}
|
||||||
|
if (preferences.getBoolean(R.string.p_strict_mode_vm, false)) {
|
||||||
|
StrictMode.setVmPolicy(
|
||||||
|
VmPolicy.Builder()
|
||||||
|
.detectLeakedSqlLiteObjects()
|
||||||
|
.detectLeakedClosableObjects()
|
||||||
|
.penaltyLog()
|
||||||
|
.build())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,48 +0,0 @@
|
|||||||
package org.tasks;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import com.facebook.flipper.android.AndroidFlipperClient;
|
|
||||||
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
|
||||||
import com.google.api.client.http.HttpRequest;
|
|
||||||
import com.google.api.client.http.HttpResponse;
|
|
||||||
import java.io.IOException;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import org.tasks.injection.ForApplication;
|
|
||||||
|
|
||||||
public class DebugNetworkInterceptor {
|
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public DebugNetworkInterceptor(@ForApplication Context context) {
|
|
||||||
this.context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static NetworkFlipperPlugin getNetworkPlugin(Context context) {
|
|
||||||
return AndroidFlipperClient.getInstance(context).getPlugin(NetworkFlipperPlugin.ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(OkHttpClient.Builder builder) {
|
|
||||||
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(getNetworkPlugin(context)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> T execute(HttpRequest request, Class<T> responseClass) throws IOException {
|
|
||||||
FlipperHttpInterceptor<T> interceptor =
|
|
||||||
new FlipperHttpInterceptor<>(getNetworkPlugin(context), responseClass);
|
|
||||||
request
|
|
||||||
.setInterceptor(interceptor)
|
|
||||||
.setResponseInterceptor(interceptor)
|
|
||||||
.execute();
|
|
||||||
return interceptor.getResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> T report(HttpResponse httpResponse, Class<T> responseClass, long start, long finish)
|
|
||||||
throws IOException {
|
|
||||||
FlipperHttpInterceptor<T> interceptor =
|
|
||||||
new FlipperHttpInterceptor<>(getNetworkPlugin(context), responseClass);
|
|
||||||
interceptor.report(httpResponse, start, finish);
|
|
||||||
return interceptor.getResponse();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,39 @@
|
|||||||
|
package org.tasks
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.facebook.flipper.android.AndroidFlipperClient
|
||||||
|
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor
|
||||||
|
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
|
||||||
|
import com.google.api.client.http.HttpRequest
|
||||||
|
import com.google.api.client.http.HttpResponse
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import org.tasks.injection.ForApplication
|
||||||
|
import java.io.IOException
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class DebugNetworkInterceptor @Inject constructor(@ForApplication private val context: Context) {
|
||||||
|
fun add(builder: OkHttpClient.Builder) {
|
||||||
|
builder.addNetworkInterceptor(FlipperOkhttpInterceptor(getNetworkPlugin(context)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun <T> execute(request: HttpRequest, responseClass: Class<T>): T? {
|
||||||
|
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
|
||||||
|
request
|
||||||
|
.setInterceptor(interceptor)
|
||||||
|
.setResponseInterceptor(interceptor)
|
||||||
|
.execute()
|
||||||
|
return interceptor.response
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun <T> report(httpResponse: HttpResponse, responseClass: Class<T>, start: Long, finish: Long): T? {
|
||||||
|
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
|
||||||
|
interceptor.report(httpResponse, start, finish)
|
||||||
|
return interceptor.response
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getNetworkPlugin(context: Context): NetworkFlipperPlugin {
|
||||||
|
return AndroidFlipperClient.getInstance(context).getPlugin(NetworkFlipperPlugin.ID)!!
|
||||||
|
}
|
||||||
|
}
|
@ -1,105 +0,0 @@
|
|||||||
package org.tasks;
|
|
||||||
|
|
||||||
import static com.todoroo.andlib.utility.DateUtilities.now;
|
|
||||||
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkReporter.Header;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkReporter.RequestInfo;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkReporter.ResponseInfo;
|
|
||||||
import com.google.api.client.http.HttpContent;
|
|
||||||
import com.google.api.client.http.HttpExecuteInterceptor;
|
|
||||||
import com.google.api.client.http.HttpHeaders;
|
|
||||||
import com.google.api.client.http.HttpRequest;
|
|
||||||
import com.google.api.client.http.HttpResponse;
|
|
||||||
import com.google.api.client.http.HttpResponseInterceptor;
|
|
||||||
import com.google.api.client.json.GenericJson;
|
|
||||||
import com.todoroo.astrid.helper.UUIDHelper;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
class FlipperHttpInterceptor<T> implements HttpExecuteInterceptor, HttpResponseInterceptor {
|
|
||||||
|
|
||||||
private final Class<T> responseClass;
|
|
||||||
private final String requestId = UUIDHelper.newUUID();
|
|
||||||
private final NetworkFlipperPlugin plugin;
|
|
||||||
private T body;
|
|
||||||
|
|
||||||
FlipperHttpInterceptor(NetworkFlipperPlugin plugin, Class<T> responseClass) {
|
|
||||||
this.responseClass = responseClass;
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void intercept(HttpRequest request) {
|
|
||||||
plugin.reportRequest(toRequestInfo(request, now()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void interceptResponse(HttpResponse response) throws IOException {
|
|
||||||
plugin.reportResponse(toResponseInfo(response, now()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void report(HttpResponse response, long start, long end) throws IOException {
|
|
||||||
plugin.reportRequest(toRequestInfo(response.getRequest(), start));
|
|
||||||
plugin.reportResponse(toResponseInfo(response, end));
|
|
||||||
}
|
|
||||||
|
|
||||||
public T getResponse() {
|
|
||||||
return body;
|
|
||||||
}
|
|
||||||
|
|
||||||
private RequestInfo toRequestInfo(HttpRequest request, long timestamp) {
|
|
||||||
RequestInfo requestInfo = new RequestInfo();
|
|
||||||
requestInfo.method = request.getRequestMethod();
|
|
||||||
requestInfo.body = bodyToByteArray(request.getContent());
|
|
||||||
requestInfo.headers = getHeaders(request.getHeaders());
|
|
||||||
requestInfo.requestId = requestId;
|
|
||||||
requestInfo.timeStamp = timestamp;
|
|
||||||
requestInfo.uri = request.getUrl().toString();
|
|
||||||
return requestInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ResponseInfo toResponseInfo(HttpResponse response, long timestamp) throws IOException {
|
|
||||||
ResponseInfo responseInfo = new ResponseInfo();
|
|
||||||
responseInfo.timeStamp = timestamp;
|
|
||||||
responseInfo.headers = getHeaders(response.getHeaders());
|
|
||||||
responseInfo.requestId = requestId;
|
|
||||||
responseInfo.statusCode = response.getStatusCode();
|
|
||||||
responseInfo.statusReason = response.getStatusMessage();
|
|
||||||
body = response.parseAs(responseClass);
|
|
||||||
if (body instanceof GenericJson) {
|
|
||||||
try {
|
|
||||||
responseInfo.body = ((GenericJson) body).toPrettyString().getBytes();
|
|
||||||
} catch (IOException e) {
|
|
||||||
Timber.e(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return responseInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Header> getHeaders(HttpHeaders headers) {
|
|
||||||
List<Header> result = new ArrayList<>();
|
|
||||||
for (Map.Entry<String, Object> entry : headers.entrySet()) {
|
|
||||||
result.add(new Header(entry.getKey(), entry.getValue().toString()));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] bodyToByteArray(HttpContent content) {
|
|
||||||
if (content == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
||||||
try {
|
|
||||||
content.writeTo(output);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Timber.e(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return output.toByteArray();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,82 @@
|
|||||||
|
package org.tasks
|
||||||
|
|
||||||
|
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
|
||||||
|
import com.facebook.flipper.plugins.network.NetworkReporter
|
||||||
|
import com.facebook.flipper.plugins.network.NetworkReporter.ResponseInfo
|
||||||
|
import com.google.api.client.http.*
|
||||||
|
import com.google.api.client.json.GenericJson
|
||||||
|
import com.todoroo.andlib.utility.DateUtilities
|
||||||
|
import com.todoroo.astrid.helper.UUIDHelper
|
||||||
|
import timber.log.Timber
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
internal class FlipperHttpInterceptor<T>(private val plugin: NetworkFlipperPlugin, private val responseClass: Class<T>) : HttpExecuteInterceptor, HttpResponseInterceptor {
|
||||||
|
private val requestId = UUIDHelper.newUUID()
|
||||||
|
|
||||||
|
var response: T? = null
|
||||||
|
private set
|
||||||
|
|
||||||
|
override fun intercept(request: HttpRequest) {
|
||||||
|
plugin.reportRequest(toRequestInfo(request, DateUtilities.now()))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(IOException::class)
|
||||||
|
override fun interceptResponse(response: HttpResponse) {
|
||||||
|
plugin.reportResponse(toResponseInfo(response, DateUtilities.now()))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun report(response: HttpResponse, start: Long, end: Long) {
|
||||||
|
plugin.reportRequest(toRequestInfo(response.request, start))
|
||||||
|
plugin.reportResponse(toResponseInfo(response, end))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toRequestInfo(request: HttpRequest, timestamp: Long): NetworkReporter.RequestInfo {
|
||||||
|
val requestInfo = NetworkReporter.RequestInfo()
|
||||||
|
requestInfo.method = request.requestMethod
|
||||||
|
requestInfo.body = bodyToByteArray(request.content)
|
||||||
|
requestInfo.headers = getHeaders(request.headers)
|
||||||
|
requestInfo.requestId = requestId
|
||||||
|
requestInfo.timeStamp = timestamp
|
||||||
|
requestInfo.uri = request.url.toString()
|
||||||
|
return requestInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(IOException::class)
|
||||||
|
private fun toResponseInfo(response: HttpResponse, timestamp: Long): ResponseInfo {
|
||||||
|
val responseInfo = ResponseInfo()
|
||||||
|
responseInfo.timeStamp = timestamp
|
||||||
|
responseInfo.headers = getHeaders(response.headers)
|
||||||
|
responseInfo.requestId = requestId
|
||||||
|
responseInfo.statusCode = response.statusCode
|
||||||
|
responseInfo.statusReason = response.statusMessage
|
||||||
|
this.response = response.parseAs(responseClass)
|
||||||
|
if (this.response is GenericJson) {
|
||||||
|
try {
|
||||||
|
responseInfo.body = (this.response as GenericJson).toPrettyString().toByteArray()
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Timber.e(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return responseInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getHeaders(headers: HttpHeaders): List<NetworkReporter.Header> {
|
||||||
|
return headers.map { (name, value) -> NetworkReporter.Header(name, value.toString()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bodyToByteArray(content: HttpContent?): ByteArray? {
|
||||||
|
if (content == null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
val output = ByteArrayOutputStream()
|
||||||
|
try {
|
||||||
|
content.writeTo(output)
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Timber.e(e)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return output.toByteArray()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue