Skip to content

Commit fc40f69

Browse files
committed
Merge branch 'release/0.1.6' into main
2 parents 1a8289c + fa89791 commit fc40f69

File tree

174 files changed

+3265
-495
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+3265
-495
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
distribution: 'temurin' # See 'Supported distributions' for available options
3939
java-version: '17'
4040
- name: Configure gradle
41-
uses: gradle/gradle-build-action@v2.7.1
41+
uses: gradle/gradle-build-action@v2.8.0
4242
with:
4343
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
4444
- name: Assemble debug APK

.github/workflows/maestro.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
4141
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
4242
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
43-
- uses: mobile-dev-inc/action-maestro-cloud@v1.4.1
43+
- uses: mobile-dev-inc/action-maestro-cloud@v1.5.0
4444
with:
4545
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
4646
# Doc says (https://github.com/mobile-dev-inc/action-maestro-cloud#android):

.github/workflows/nightlyReports.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
distribution: 'temurin' # See 'Supported distributions' for available options
6363
java-version: '17'
6464
- name: Configure gradle
65-
uses: gradle/gradle-build-action@v2.7.1
65+
uses: gradle/gradle-build-action@v2.8.0
6666
with:
6767
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
6868
- name: Dependency analysis

.github/workflows/quality.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
distribution: 'temurin' # See 'Supported distributions' for available options
4141
java-version: '17'
4242
- name: Configure gradle
43-
uses: gradle/gradle-build-action@v2.7.1
43+
uses: gradle/gradle-build-action@v2.8.0
4444
with:
4545
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
4646
- name: Run code quality check suite

.github/workflows/recordScreenshots.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
java-version: '17'
2525
# Add gradle cache, this should speed up the process
2626
- name: Configure gradle
27-
uses: gradle/gradle-build-action@v2.7.1
27+
uses: gradle/gradle-build-action@v2.8.0
2828
with:
2929
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
3030
- name: Record screenshots

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
distribution: 'temurin' # See 'Supported distributions' for available options
2626
java-version: '17'
2727
- name: Configure gradle
28-
uses: gradle/gradle-build-action@v2.7.1
28+
uses: gradle/gradle-build-action@v2.8.0
2929
- name: Create app bundle
3030
env:
3131
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}

.github/workflows/sonar.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
distribution: 'temurin' # See 'Supported distributions' for available options
3333
java-version: '17'
3434
- name: Configure gradle
35-
uses: gradle/gradle-build-action@v2.7.1
35+
uses: gradle/gradle-build-action@v2.8.0
3636
with:
3737
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
3838
- name: 🔊 Publish results to Sonar

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
distribution: 'temurin' # See 'Supported distributions' for available options
3535
java-version: '17'
3636
- name: Configure gradle
37-
uses: gradle/gradle-build-action@v2.7.1
37+
uses: gradle/gradle-build-action@v2.8.0
3838
with:
3939
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
4040

.idea/kotlinc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
appId: ${APP_ID}
2+
---
3+
- takeScreenshot: build/maestro/530-Timeline
4+
- tapOn: "Add attachment"
5+
- tapOn: "Poll"
6+
- tapOn: "What is the poll about?"
7+
- inputText: "I am a poll"
8+
- tapOn: "Option 1"
9+
- inputText: "Answer 1"
10+
- tapOn: "Option 2"
11+
- inputText: "Answer 2"
12+
- tapOn: "Create"
13+
- takeScreenshot: build/maestro/531-Timeline

.maestro/tests/roomList/timeline/timeline.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ appId: ${APP_ID}
55
- takeScreenshot: build/maestro/500-Timeline
66
- runFlow: messages/text.yaml
77
- runFlow: messages/location.yaml
8+
- runFlow: messages/poll.yaml
89
- back
910
- runFlow: ../../assertions/assertHomeDisplayed.yaml

CHANGES.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
Changes in Element X v0.1.6 (2023-09-04)
2+
========================================
3+
4+
Features ✨
5+
----------
6+
- Enable the Polls feature. Allows to create, view, vote and end polls. ([#1196](https://github.com/vector-im/element-x-android/issues/1196))
7+
- Create poll. ([#1143](https://github.com/vector-im/element-x-android/issues/1143))
8+
9+
Bugfixes 🐛
10+
----------
11+
- Ensure notification for Event from encrypted room get decrypted content. ([#1178](https://github.com/vector-im/element-x-android/issues/1178))
12+
- Make sure Snackbars are only displayed once. ([#928](https://github.com/vector-im/element-x-android/issues/928))
13+
- Fix the orientation of sent images. ([#1135](https://github.com/vector-im/element-x-android/issues/1135))
14+
- Bug reporter crashes when 'send logs' is disabled. ([#1168](https://github.com/vector-im/element-x-android/issues/1168))
15+
- Add missing link to the terms on the analytics setting screen. ([#1177](https://github.com/vector-im/element-x-android/issues/1177))
16+
- Re-enable `SyncService.withEncryptionSync` to improve decryption of notifications. ([#1198](https://github.com/vector-im/element-x-android/issues/1198))
17+
- Crash with `aspectRatio` modifier when `Float.NaN` was used as input. ([#1995](https://github.com/vector-im/element-x-android/issues/1995))
18+
19+
Other changes
20+
-------------
21+
- Remove unnecessary year in copyright mention. ([#1187](https://github.com/vector-im/element-x-android/issues/1187))
22+
23+
124
Changes in Element X v0.1.5 (2023-08-28)
225
========================================
326

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ If after your research you still have a question, ask at [#element-x-android:mat
8181

8282
## Copyright & License
8383

84-
Copyright (c) 2022 New Vector Ltd
84+
Copyright © New Vector Ltd
8585

8686
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the [LICENSE](LICENSE) file, or at:
8787

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ dependencies {
218218
implementation(libs.network.okhttp.logging)
219219
implementation(libs.serialization.json)
220220

221-
implementation(libs.vanniktech.emoji)
221+
implementation(libs.matrix.emojibase.bindings)
222222

223223
implementation(libs.dagger)
224224
kapt(libs.dagger.compiler)

app/src/main/kotlin/io/element/android/x/ElementXApplication.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import io.element.android.x.di.AppComponent
2323
import io.element.android.x.di.DaggerAppComponent
2424
import io.element.android.x.info.logApplicationInfo
2525
import io.element.android.x.initializer.CrashInitializer
26-
import io.element.android.x.initializer.EmojiInitializer
2726
import io.element.android.x.initializer.TracingInitializer
2827

2928
class ElementXApplication : Application(), DaggerComponentOwner {
@@ -39,7 +38,6 @@ class ElementXApplication : Application(), DaggerComponentOwner {
3938
AppInitializer.getInstance(this).apply {
4039
initializeComponent(CrashInitializer::class.java)
4140
initializeComponent(TracingInitializer::class.java)
42-
initializeComponent(EmojiInitializer::class.java)
4341
}
4442
logApplicationInfo()
4543
}

app/src/main/kotlin/io/element/android/x/MainNode.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import com.bumble.appyx.core.node.Node
2828
import com.bumble.appyx.core.node.ParentNode
2929
import com.bumble.appyx.core.plugin.Plugin
3030
import io.element.android.appnav.LoggedInAppScopeFlowNode
31-
import io.element.android.appnav.room.RoomLoadedFlowNode
3231
import io.element.android.appnav.RootFlowNode
32+
import io.element.android.appnav.room.RoomLoadedFlowNode
3333
import io.element.android.libraries.architecture.bindings
3434
import io.element.android.libraries.architecture.createNode
3535
import io.element.android.libraries.di.DaggerComponentOwner
@@ -45,15 +45,14 @@ class MainNode(
4545
buildContext: BuildContext,
4646
private val mainDaggerComponentOwner: MainDaggerComponentsOwner,
4747
plugins: List<Plugin>,
48-
) :
49-
ParentNode<MainNode.RootNavTarget>(
50-
navModel = PermanentNavModel(
51-
navTargets = setOf(RootNavTarget),
52-
savedStateMap = buildContext.savedStateMap,
53-
),
54-
buildContext = buildContext,
55-
plugins = plugins,
48+
) : ParentNode<MainNode.RootNavTarget>(
49+
navModel = PermanentNavModel(
50+
navTargets = setOf(RootNavTarget),
51+
savedStateMap = buildContext.savedStateMap,
5652
),
53+
buildContext = buildContext,
54+
plugins = plugins,
55+
),
5756
DaggerComponentOwner by mainDaggerComponentOwner {
5857

5958
private val loggedInFlowNodeCallback = object : LoggedInAppScopeFlowNode.LifecycleCallback {

app/src/main/kotlin/io/element/android/x/di/AppModule.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import androidx.preference.PreferenceManager
2323
import com.squareup.anvil.annotations.ContributesTo
2424
import dagger.Module
2525
import dagger.Provides
26+
import io.element.android.features.messages.impl.timeline.components.customreaction.DefaultEmojibaseProvider
27+
import io.element.android.features.messages.impl.timeline.components.customreaction.EmojibaseProvider
2628
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
2729
import io.element.android.libraries.core.meta.BuildMeta
2830
import io.element.android.libraries.core.meta.BuildType
@@ -105,4 +107,10 @@ object AppModule {
105107
fun provideSnackbarDispatcher(): SnackbarDispatcher {
106108
return SnackbarDispatcher()
107109
}
110+
111+
@Provides
112+
@SingleIn(AppScope::class)
113+
fun providesEmojibaseProvider(@ApplicationContext context: Context): EmojibaseProvider {
114+
return DefaultEmojibaseProvider(context)
115+
}
108116
}

app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
package io.element.android.x.initializer
1818

1919
import android.content.Context
20+
import androidx.preference.PreferenceManager
2021
import androidx.startup.Initializer
22+
import io.element.android.features.preferences.impl.developer.tracing.SharedPrefTracingConfigurationStore
23+
import io.element.android.features.preferences.impl.developer.tracing.TargetLogLevelMapBuilder
2124
import io.element.android.libraries.architecture.bindings
2225
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
2326
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
@@ -34,8 +37,11 @@ class TracingInitializer : Initializer<Unit> {
3437
val bugReporter = appBindings.bugReporter()
3538
Timber.plant(tracingService.createTimberTree())
3639
val tracingConfiguration = if (BuildConfig.DEBUG) {
40+
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
41+
val store = SharedPrefTracingConfigurationStore(prefs)
42+
val builder = TargetLogLevelMapBuilder(store)
3743
TracingConfiguration(
38-
filterConfiguration = TracingFilterConfigurations.debug,
44+
filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
3945
writesToLogcat = true,
4046
writesToFilesConfiguration = WriteToFilesConfiguration.Disabled
4147
)

appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,15 @@ import coil.Coil
2323
import com.bumble.appyx.core.composable.Children
2424
import com.bumble.appyx.core.lifecycle.subscribe
2525
import com.bumble.appyx.core.modality.BuildContext
26+
import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel
2627
import com.bumble.appyx.core.node.Node
28+
import com.bumble.appyx.core.node.ParentNode
2729
import com.bumble.appyx.core.plugin.Plugin
2830
import com.bumble.appyx.core.plugin.plugins
29-
import com.bumble.appyx.navmodel.backstack.BackStack
3031
import dagger.assisted.Assisted
3132
import dagger.assisted.AssistedInject
3233
import io.element.android.anvilannotations.ContributesNode
33-
import io.element.android.libraries.architecture.BackstackNode
3434
import io.element.android.libraries.architecture.NodeInputs
35-
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
3635
import io.element.android.libraries.architecture.bindings
3736
import io.element.android.libraries.architecture.createNode
3837
import io.element.android.libraries.architecture.inputs
@@ -51,9 +50,9 @@ import kotlinx.parcelize.Parcelize
5150
class LoggedInAppScopeFlowNode @AssistedInject constructor(
5251
@Assisted buildContext: BuildContext,
5352
@Assisted plugins: List<Plugin>,
54-
) : BackstackNode<LoggedInAppScopeFlowNode.NavTarget>(
55-
backstack = BackStack(
56-
initialElement = NavTarget.Root,
53+
) : ParentNode<LoggedInAppScopeFlowNode.NavTarget>(
54+
navModel = PermanentNavModel(
55+
navTargets = setOf(NavTarget),
5756
savedStateMap = buildContext.savedStateMap,
5857
),
5958
buildContext = buildContext,
@@ -63,10 +62,8 @@ class LoggedInAppScopeFlowNode @AssistedInject constructor(
6362
fun onOpenBugReport()
6463
}
6564

66-
sealed interface NavTarget : Parcelable {
67-
@Parcelize
68-
data object Root : NavTarget
69-
}
65+
@Parcelize
66+
object NavTarget : Parcelable
7067

7168
interface LifecycleCallback : NodeLifecycleCallback {
7269
fun onFlowCreated(identifier: String, client: MatrixClient)
@@ -95,31 +92,24 @@ class LoggedInAppScopeFlowNode @AssistedInject constructor(
9592
}
9693

9794
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
98-
return when (navTarget) {
99-
NavTarget.Root -> {
100-
val callback = object : LoggedInFlowNode.Callback {
101-
override fun onOpenBugReport() {
102-
plugins<Callback>().forEach { it.onOpenBugReport() }
103-
}
104-
}
105-
val nodeLifecycleCallbacks = plugins<NodeLifecycleCallback>()
106-
createNode<LoggedInFlowNode>(buildContext, nodeLifecycleCallbacks + callback)
95+
val callback = object : LoggedInFlowNode.Callback {
96+
override fun onOpenBugReport() {
97+
plugins<Callback>().forEach { it.onOpenBugReport() }
10798
}
10899
}
100+
val nodeLifecycleCallbacks = plugins<NodeLifecycleCallback>()
101+
return createNode<LoggedInFlowNode>(buildContext, nodeLifecycleCallbacks + callback)
109102
}
110103

111104
suspend fun attachSession(): LoggedInFlowNode {
112-
return waitForChildAttached { navTarget ->
113-
navTarget is NavTarget.Root
114-
}
105+
return waitForChildAttached { _ -> true }
115106
}
116107

117108
@Composable
118109
override fun View(modifier: Modifier) {
119110
Children(
120-
navModel = backstack,
111+
navModel = navModel,
121112
modifier = modifier,
122-
transitionHandler = rememberDefaultTransitionHandler(),
123113
)
124114
}
125115
}

appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import io.element.android.libraries.di.SessionScope
6060
import io.element.android.libraries.matrix.api.MatrixClient
6161
import io.element.android.libraries.matrix.api.core.MAIN_SPACE
6262
import io.element.android.libraries.matrix.api.core.RoomId
63+
import io.element.android.libraries.matrix.api.sync.StartSyncReason
6364
import io.element.android.libraries.matrix.api.sync.SyncState
6465
import io.element.android.libraries.push.api.notifications.NotificationDrawerManager
6566
import io.element.android.services.appnavstate.api.AppNavigationStateService
@@ -124,7 +125,7 @@ class LoggedInFlowNode @AssistedInject constructor(
124125
onStop = {
125126
//Counterpart startSync is done in observeSyncStateAndNetworkStatus method.
126127
coroutineScope.launch {
127-
syncService.stopSync()
128+
syncService.stopSync(StartSyncReason.AppInForeground)
128129
}
129130
},
130131
onDestroy = {
@@ -150,7 +151,7 @@ class LoggedInFlowNode @AssistedInject constructor(
150151
.collect { (syncState, networkStatus) ->
151152
Timber.d("Sync state: $syncState, network status: $networkStatus")
152153
if (syncState != SyncState.Running && networkStatus == NetworkStatus.Online) {
153-
syncService.startSync()
154+
syncService.startSync(StartSyncReason.AppInForeground)
154155
}
155156
}
156157
}

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import org.jetbrains.kotlin.cli.common.toBooleanLenient
55

66
buildscript {
77
dependencies {
8-
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")
8+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.10")
99
classpath("com.google.gms:google-services:4.3.15")
1010
}
1111
}

0 commit comments

Comments
 (0)