-
Notifications
You must be signed in to change notification settings - Fork 742
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Setup Flipper #6300
Setup Flipper #6300
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Setup [Flipper](https://fbflipper.com/) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# Flipper | ||
|
||
<!--- TOC --> | ||
|
||
* [Introduction](#introduction) | ||
* [Setup](#setup) | ||
* [Troubleshoot](#troubleshoot) | ||
* [No device found issue](#no-device-found-issue) | ||
* [Diagnostic Activity](#diagnostic-activity) | ||
* [Other](#other) | ||
* [Links](#links) | ||
|
||
<!--- END --> | ||
|
||
## Introduction | ||
|
||
[Flipper](https://fbflipper.com) is a powerful tool from Meta, which allow to inspect the running application details and states from your computer. | ||
|
||
Flipper is configured in the Element Android project to let the developers be able to: | ||
- inspect all the Realm databases content; | ||
- do layout inspection; | ||
- see the crash logs; | ||
- see the logcat; | ||
- see all the network requests; | ||
- see all the SharedPreferences; | ||
- take screenshots and record videos of the device; | ||
- and more! | ||
|
||
## Setup | ||
|
||
- Install Flipper on your computer. Follow instructions here: https://fbflipper.com/docs/getting-started/index/ | ||
- Run the debug version of Element on an emulator or on a real device. | ||
|
||
### Troubleshoot | ||
|
||
#### No device found issue | ||
|
||
The configuration of the Flipper application has to be updated. The issue has been asked and answered here: https://stackoverflow.com/questions/71744103/android-emulator-unable-to-connect-to-flipper/72608113#72608113 | ||
|
||
#### Diagnostic Activity | ||
|
||
Flipper comes with a Diagnostic Activity that you can start from command line using: | ||
|
||
```shell | ||
adb shell am start -n im.vector.app.debug/com.facebook.flipper.android.diagnostics.FlipperDiagnosticActivity | ||
``` | ||
|
||
It provides some log which can help to figure out what's going on client side. | ||
|
||
#### Other | ||
|
||
https://fbflipper.com/docs/getting-started/troubleshooting/android/ may help. | ||
|
||
## Links | ||
|
||
- https://fbflipper.com | ||
- Realm Plugin for Flipper: https://github.com/kamgurgul/Flipper-Realm |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/* | ||
* Copyright (c) 2022 The Matrix.org Foundation C.I.C. | ||
* | ||
* 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 org.matrix.android.sdk.api.debug | ||
|
||
import io.realm.RealmConfiguration | ||
|
||
/** | ||
* Useful methods to access to some private data managed by the SDK. | ||
*/ | ||
interface DebugService { | ||
/** | ||
* Get all the available Realm Configuration. | ||
*/ | ||
fun getAllRealmConfigurations(): List<RealmConfiguration> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we could instead returns a list of flipper plugin? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The Matrix SDK does not know what a Flipper plugin is, only the debug version of module |
||
|
||
/** | ||
* Prints out info on DB size to logcat. | ||
*/ | ||
fun logDbUsageInfo() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note: it should probably return a String rather than printing things on logcat, but this is out of scope of this PR. |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright (c) 2022 The Matrix.org Foundation C.I.C. | ||
* | ||
* 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 org.matrix.android.sdk.internal.debug | ||
|
||
import dagger.Binds | ||
import dagger.Module | ||
import org.matrix.android.sdk.api.debug.DebugService | ||
|
||
@Module | ||
internal abstract class DebugModule { | ||
|
||
@Binds | ||
abstract fun bindDebugService(service: DefaultDebugService): DebugService | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (c) 2022 The Matrix.org Foundation C.I.C. | ||
* | ||
* 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 org.matrix.android.sdk.internal.debug | ||
|
||
import io.realm.RealmConfiguration | ||
import org.matrix.android.sdk.api.debug.DebugService | ||
import org.matrix.android.sdk.internal.SessionManager | ||
import org.matrix.android.sdk.internal.database.tools.RealmDebugTools | ||
import org.matrix.android.sdk.internal.di.AuthDatabase | ||
import org.matrix.android.sdk.internal.di.GlobalDatabase | ||
import javax.inject.Inject | ||
|
||
internal class DefaultDebugService @Inject constructor( | ||
@AuthDatabase private val realmConfigurationAuth: RealmConfiguration, | ||
@GlobalDatabase private val realmConfigurationGlobal: RealmConfiguration, | ||
private val sessionManager: SessionManager, | ||
) : DebugService { | ||
|
||
override fun getAllRealmConfigurations(): List<RealmConfiguration> { | ||
return sessionManager.getLastSession()?.getRealmConfigurations().orEmpty() + | ||
realmConfigurationAuth + | ||
realmConfigurationGlobal | ||
} | ||
|
||
override fun logDbUsageInfo() { | ||
RealmDebugTools(realmConfigurationAuth).logInfo("Auth") | ||
RealmDebugTools(realmConfigurationGlobal).logInfo("Global") | ||
sessionManager.getLastSession()?.logDbUsageInfo() | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd instead allow to provide an okhttp client. We'll be able to use
okhttpClient.newBuilder()
.If the app is using his own okhttp it'll allow to share resources.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my latest commit 5c84fdc, the interceptors provided by the configuration have to be added at the end, to ensure to see all the request headers.
Providing on OkHttp client make sense though, maybe for another dedicated PR?