diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index ffa74becc..62a1285f7 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -194,9 +194,6 @@ dependencies {
implementation(libs.markwon.tables)
implementation(libs.markwon.tasklist)
- debugImplementation(libs.facebook.flipper)
- debugImplementation(libs.facebook.flipper.network)
- debugImplementation(libs.facebook.soloader)
debugImplementation(libs.leakcanary)
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation(libs.kotlin.reflect)
diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml
index 71532e5c3..4bea1ea2a 100644
--- a/app/src/debug/AndroidManifest.xml
+++ b/app/src/debug/AndroidManifest.xml
@@ -7,10 +7,6 @@
android:networkSecurityConfig="@xml/network_security_config"
tools:ignore="GoogleAppIndexingWarning">
-
-
diff --git a/app/src/debug/java/org/tasks/BuildSetup.kt b/app/src/debug/java/org/tasks/BuildSetup.kt
index dd72c69c1..a7ceac3c8 100644
--- a/app/src/debug/java/org/tasks/BuildSetup.kt
+++ b/app/src/debug/java/org/tasks/BuildSetup.kt
@@ -3,14 +3,6 @@ package org.tasks
import android.app.Application
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 com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo
import com.todoroo.andlib.utility.AndroidUtilities.atLeastQ
import leakcanary.AppWatcher
@@ -27,18 +19,9 @@ class BuildSetup @Inject constructor(
fun setup() {
Timber.plant(Timber.DebugTree())
Timber.plant(fileLogger)
- SoLoader.init(context, false)
if (preferences.getBoolean(R.string.p_leakcanary, false)) {
AppWatcher.manualInstall(context)
}
- 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)) {
val builder = StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog()
if (preferences.getBoolean(R.string.p_crash_main_queries, false)) {
diff --git a/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt b/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt
deleted file mode 100644
index bb0dd6afe..000000000
--- a/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt
+++ /dev/null
@@ -1,39 +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 dagger.hilt.android.qualifiers.ApplicationContext
-import okhttp3.OkHttpClient
-import java.io.IOException
-import javax.inject.Inject
-
-class DebugNetworkInterceptor @Inject constructor(@param:ApplicationContext private val context: Context) {
- fun apply(builder: OkHttpClient.Builder?) {
- builder?.addNetworkInterceptor(FlipperOkhttpInterceptor(getNetworkPlugin(context)))
- }
-
- @Throws(IOException::class)
- fun execute(request: HttpRequest, responseClass: Class): T? {
- val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
- request
- .setInterceptor(interceptor)
- .setResponseInterceptor(interceptor)
- .execute()
- return interceptor.response
- }
-
- @Throws(IOException::class)
- fun report(httpResponse: HttpResponse, responseClass: Class, 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)!!
- }
-}
\ No newline at end of file
diff --git a/app/src/debug/java/org/tasks/FlipperHttpInterceptor.kt b/app/src/debug/java/org/tasks/FlipperHttpInterceptor.kt
deleted file mode 100644
index a4dbb22d9..000000000
--- a/app/src/debug/java/org/tasks/FlipperHttpInterceptor.kt
+++ /dev/null
@@ -1,82 +0,0 @@
-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 org.tasks.data.UUIDHelper
-import org.tasks.time.DateTimeUtils2.currentTimeMillis
-import timber.log.Timber
-import java.io.ByteArrayOutputStream
-import java.io.IOException
-
-internal class FlipperHttpInterceptor(private val plugin: NetworkFlipperPlugin, private val responseClass: Class) : HttpExecuteInterceptor, HttpResponseInterceptor {
- private val requestId = UUIDHelper.newUUID()
-
- var response: T? = null
- private set
-
- override fun intercept(request: HttpRequest) {
- plugin.reportRequest(toRequestInfo(request, currentTimeMillis()))
- }
-
- @Throws(IOException::class)
- override fun interceptResponse(response: HttpResponse) {
- plugin.reportResponse(toResponseInfo(response, currentTimeMillis()))
- }
-
- @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 {
- 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()
- }
-}
\ No newline at end of file
diff --git a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
index 7ede149b5..836fbacae 100644
--- a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
+++ b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
@@ -30,7 +30,6 @@ class Debug : InjectingPreferenceFragment() {
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
for (pref in listOf(
R.string.p_leakcanary,
- R.string.p_flipper,
R.string.p_strict_mode_vm,
R.string.p_strict_mode_thread,
R.string.p_crash_main_queries
diff --git a/app/src/debug/res/values/keys.xml b/app/src/debug/res/values/keys.xml
index dc278d77e..986be2ba9 100644
--- a/app/src/debug/res/values/keys.xml
+++ b/app/src/debug/res/values/keys.xml
@@ -4,7 +4,6 @@
Strict mode - Thread
Strict mode - VM
LeakCanary
- Flipper
Unlock pro
Purchase %s
Consume %s
diff --git a/app/src/debug/res/xml/preferences_debug.xml b/app/src/debug/res/xml/preferences_debug.xml
index 80714b291..180b982fb 100644
--- a/app/src/debug/res/xml/preferences_debug.xml
+++ b/app/src/debug/res/xml/preferences_debug.xml
@@ -6,11 +6,6 @@
android:key="@string/p_leakcanary"
android:title="@string/debug_leakcanary" />
-
-
execute(request: AbstractGoogleJsonClientRequest): T? = execute(request, false)
@@ -28,15 +23,7 @@ abstract class BaseInvoker(
credentialsAdapter.checkToken()
Timber.d(caller)
val response: T? = try {
- if (preferences.isFlipperEnabled) {
- val start = currentTimeMillis()
- val httpResponse = request.executeUnparsed()
- interceptor.report(httpResponse, request.responseClass, start,
- currentTimeMillis()
- )
- } else {
- request.execute()
- }
+ request.execute()
} catch (e: HttpResponseException) {
return@withContext if (e.statusCode == 401 && !retry) {
credentialsAdapter.invalidateToken()
diff --git a/app/src/main/java/org/tasks/googleapis/InvokerFactory.kt b/app/src/main/java/org/tasks/googleapis/InvokerFactory.kt
index 1a7ce1cba..351615217 100644
--- a/app/src/main/java/org/tasks/googleapis/InvokerFactory.kt
+++ b/app/src/main/java/org/tasks/googleapis/InvokerFactory.kt
@@ -6,7 +6,6 @@ import com.google.api.services.tasks.TasksScopes
import com.todoroo.astrid.gtasks.api.GtasksInvoker
import com.todoroo.astrid.gtasks.api.HttpCredentialsAdapter
import dagger.hilt.android.qualifiers.ApplicationContext
-import org.tasks.DebugNetworkInterceptor
import org.tasks.R
import org.tasks.drive.DriveInvoker
import org.tasks.gtasks.GoogleAccountManager
@@ -17,23 +16,18 @@ class InvokerFactory @Inject constructor(
@ApplicationContext private val context: Context,
private val googleAccountManager: GoogleAccountManager,
private val preferences: Preferences,
- private val interceptor: DebugNetworkInterceptor
) {
fun getDriveInvoker() = DriveInvoker(
context,
- preferences,
HttpCredentialsAdapter(
googleAccountManager,
preferences.getStringValue(R.string.p_google_drive_backup_account) ?: "",
DriveScopes.DRIVE_FILE
),
- interceptor
)
fun getGtasksInvoker(account: String) = GtasksInvoker(
HttpCredentialsAdapter(googleAccountManager, account, TasksScopes.TASKS),
- preferences,
- interceptor
)
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/http/HttpClientFactory.kt b/app/src/main/java/org/tasks/http/HttpClientFactory.kt
index 754a03df0..7c60c391a 100644
--- a/app/src/main/java/org/tasks/http/HttpClientFactory.kt
+++ b/app/src/main/java/org/tasks/http/HttpClientFactory.kt
@@ -23,11 +23,9 @@ import net.openid.appauth.AuthState
import okhttp3.OkHttpClient
import okhttp3.internal.tls.OkHostnameVerifier
import org.tasks.BuildConfig
-import org.tasks.DebugNetworkInterceptor
import org.tasks.caldav.TasksCookieJar
import org.tasks.data.entity.CaldavAccount
import org.tasks.extensions.Context.cookiePersistor
-import org.tasks.preferences.Preferences
import org.tasks.security.KeyStoreEncryption
import org.tasks.sync.microsoft.MicrosoftService
import org.tasks.sync.microsoft.requestTokenRefresh
@@ -37,8 +35,6 @@ import javax.net.ssl.SSLContext
class HttpClientFactory @Inject constructor(
@ApplicationContext private val context: Context,
- private val preferences: Preferences,
- private val interceptor: DebugNetworkInterceptor,
private val encryption: KeyStoreEncryption,
) {
suspend fun newClient(foreground: Boolean) = newClient(
@@ -85,9 +81,6 @@ class HttpClientFactory @Inject constructor(
block(builder)
- if (preferences.isFlipperEnabled) {
- interceptor.apply(builder)
- }
return builder.build()
}
diff --git a/app/src/main/java/org/tasks/location/GeocoderMapbox.kt b/app/src/main/java/org/tasks/location/GeocoderMapbox.kt
index 4fe9c1cc4..ac4a10b6e 100644
--- a/app/src/main/java/org/tasks/location/GeocoderMapbox.kt
+++ b/app/src/main/java/org/tasks/location/GeocoderMapbox.kt
@@ -12,26 +12,19 @@ import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import okhttp3.OkHttpClient
import okhttp3.Request
-import org.tasks.DebugNetworkInterceptor
import org.tasks.R
import org.tasks.data.entity.Place
-import org.tasks.preferences.Preferences
import java.io.IOException
import javax.inject.Inject
class GeocoderMapbox @Inject constructor(
@ApplicationContext context: Context,
- private val preferences: Preferences,
- private val interceptor: DebugNetworkInterceptor,
) : Geocoder {
private val token = context.getString(R.string.mapbox_key)
override suspend fun reverseGeocode(mapPosition: MapPosition): Place? =
withContext(Dispatchers.IO) {
val builder = OkHttpClient().newBuilder()
- if (preferences.isFlipperEnabled) {
- interceptor.apply(builder)
- }
val client = builder.build()
val url = "https://api.mapbox.com/geocoding/v5/mapbox.places/${mapPosition.longitude},${mapPosition.latitude}.json?access_token=$token"
val response = client.newCall(Request.Builder().get().url(url).build()).execute()
diff --git a/app/src/main/java/org/tasks/location/PlaceSearchMapbox.kt b/app/src/main/java/org/tasks/location/PlaceSearchMapbox.kt
index 823f5eff1..e28e81163 100644
--- a/app/src/main/java/org/tasks/location/PlaceSearchMapbox.kt
+++ b/app/src/main/java/org/tasks/location/PlaceSearchMapbox.kt
@@ -11,18 +11,14 @@ import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import okhttp3.OkHttpClient
import okhttp3.Request
-import org.tasks.DebugNetworkInterceptor
import org.tasks.R
import org.tasks.data.entity.Place
import org.tasks.location.GeocoderMapbox.Companion.toPlace
-import org.tasks.preferences.Preferences
import java.io.IOException
import javax.inject.Inject
class PlaceSearchMapbox @Inject constructor(
@ApplicationContext context: Context,
- private val preferences: Preferences,
- private val interceptor: DebugNetworkInterceptor,
) : PlaceSearch {
val token = context.getString(R.string.mapbox_key)
@@ -35,9 +31,6 @@ class PlaceSearchMapbox @Inject constructor(
override suspend fun search(query: String, bias: MapPosition?): List =
withContext(Dispatchers.IO) {
val builder = OkHttpClient().newBuilder()
- if (preferences.isFlipperEnabled) {
- interceptor.apply(builder)
- }
val proximity = bias?.let {
"&proximity=${bias.longitude},${bias.latitude}"
}
diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt
index e3aa6b1ca..870728c80 100644
--- a/app/src/main/java/org/tasks/preferences/Preferences.kt
+++ b/app/src/main/java/org/tasks/preferences/Preferences.kt
@@ -489,9 +489,6 @@ class Preferences @JvmOverloads constructor(
fun getPrefs(c: Class): Map =
prefs.all.filter { (_, value) -> c.isInstance(value) } as Map
- val isFlipperEnabled: Boolean
- get() = BuildConfig.DEBUG && getBoolean(R.string.p_flipper, false)
-
var isPositionHackEnabled: Boolean
get() = getLong(R.string.p_google_tasks_position_hack, 0) > currentTimeMillis() - ONE_WEEK
set(value) { setLong(R.string.p_google_tasks_position_hack, if (value) currentTimeMillis() else 0) }
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 31506ace3..7179fe403 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -370,7 +370,6 @@
strict_mode_vm
strict_mode_thread
p_leakcanary
- p_flipper
debug_pro
debug_crash_main_queries
sync_ongoing
diff --git a/app/src/release/java/org/tasks/DebugNetworkInterceptor.kt b/app/src/release/java/org/tasks/DebugNetworkInterceptor.kt
deleted file mode 100644
index 84e828c80..000000000
--- a/app/src/release/java/org/tasks/DebugNetworkInterceptor.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.tasks
-
-import com.google.api.client.http.HttpRequest
-import com.google.api.client.http.HttpResponse
-import okhttp3.OkHttpClient
-import javax.inject.Inject
-
-class DebugNetworkInterceptor @Inject constructor() {
- fun apply(builder: OkHttpClient.Builder?) {}
- fun execute(httpRequest: HttpRequest?, responseClass: Class?): T? = null
- fun report(httpResponse: HttpResponse?, responseClass: Class?, start: Long, finish: Long): T? = null
-}
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 89d3d3387..ed920e268 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -20,7 +20,6 @@ desugar_jdk_libs = "2.1.3"
etebase = "2.3.2"
firebase = "33.8.0"
firebase-crashlytics-gradle = "3.0.2"
-flipper = "0.273.0"
google-oauth2 = "1.30.1"
google-api-drive = "v3-rev20250122-2.0.0"
google-api-tasks = "v1-rev20250105-2.0.0"
@@ -58,7 +57,6 @@ recyclerview = "1.4.0"
rfc5545-datetime = "0.2.4"
room = "2.7.0-alpha13"
shortcut-badger = "1.1.22"
-soloader = "0.12.1"
timber = "5.0.1"
swiperefreshlayout = "1.1.0"
work = "2.10.0"
@@ -116,9 +114,6 @@ dmfs-opentasks-provider = { module = "com.github.tasks.opentasks:opentasks-provi
dmfs-recur = { module = "org.dmfs:lib-recur", version.ref = "lib-recur" }
dmfs-rfc5545-datetime = { module = "org.dmfs:rfc5545-datetime", version.ref = "rfc5545-datetime" }
etebase = { module = "com.etebase:client", version.ref = "etebase" }
-facebook-flipper = { module = "com.facebook.flipper:flipper", version.ref = "flipper" }
-facebook-flipper-network = { module = "com.facebook.flipper:flipper-network-plugin", version.ref = "flipper" }
-facebook-soloader = { module = "com.facebook.soloader:soloader", version.ref = "soloader" }
firebase = { module = "com.google.firebase:firebase-bom", version.ref = "firebase" }
firebase-config-ktx = { module = "com.google.firebase:firebase-config-ktx" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics" }