Benoit Marty
2 years ago
18 changed files with 328 additions and 43 deletions
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
plugins { |
||||
id 'com.android.library' |
||||
id 'org.jetbrains.kotlin.android' |
||||
} |
||||
|
||||
android { |
||||
namespace 'io.element.android.x.core' |
||||
compileSdk 33 |
||||
|
||||
defaultConfig { |
||||
minSdk 29 |
||||
targetSdk 33 |
||||
|
||||
consumerProguardFiles "consumer-rules.pro" |
||||
} |
||||
|
||||
buildTypes { |
||||
release { |
||||
minifyEnabled false |
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
||||
} |
||||
} |
||||
compileOptions { |
||||
sourceCompatibility JavaVersion.VERSION_1_8 |
||||
targetCompatibility JavaVersion.VERSION_1_8 |
||||
} |
||||
buildFeatures { |
||||
compose true |
||||
} |
||||
composeOptions { |
||||
kotlinCompilerExtensionVersion compose_version |
||||
} |
||||
kotlinOptions { |
||||
jvmTarget = '1.8' |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
implementation 'androidx.core:core-ktx:1.9.0' |
||||
implementation 'androidx.appcompat:appcompat:1.5.1' |
||||
|
||||
implementation 'com.google.android.material:material:1.6.1' |
||||
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' |
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1" |
||||
implementation 'androidx.activity:activity-compose:1.6.0' |
||||
|
||||
implementation 'androidx.fragment:fragment-ktx:1.5.3' |
||||
|
||||
implementation 'com.airbnb.android:mavericks-compose:2.7.0' |
||||
} |
@ -0,0 +1,2 @@
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<manifest /> |
@ -1,8 +1,13 @@
@@ -1,8 +1,13 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
import com.airbnb.mvrx.Async |
||||
import com.airbnb.mvrx.MavericksState |
||||
import com.airbnb.mvrx.Uninitialized |
||||
|
||||
data class LoginViewState( |
||||
val homeserver: String = "matrix.org", |
||||
val login: String = "", |
||||
val password: String = "", |
||||
val submitEnabled: Boolean = false, |
||||
) |
||||
val isLoggedIn: Async<Unit> = Uninitialized, |
||||
) : MavericksState |
||||
|
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
plugins { |
||||
id 'com.android.library' |
||||
id 'org.jetbrains.kotlin.android' |
||||
} |
||||
|
||||
android { |
||||
namespace 'io.element.android.x.ui.screen.roomlist' |
||||
compileSdk 33 |
||||
|
||||
defaultConfig { |
||||
minSdk 29 |
||||
targetSdk 33 |
||||
|
||||
consumerProguardFiles "consumer-rules.pro" |
||||
} |
||||
|
||||
buildTypes { |
||||
release { |
||||
minifyEnabled false |
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
||||
} |
||||
} |
||||
compileOptions { |
||||
sourceCompatibility JavaVersion.VERSION_1_8 |
||||
targetCompatibility JavaVersion.VERSION_1_8 |
||||
} |
||||
buildFeatures { |
||||
compose true |
||||
} |
||||
composeOptions { |
||||
kotlinCompilerExtensionVersion compose_version |
||||
} |
||||
kotlinOptions { |
||||
jvmTarget = '1.8' |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
implementation project(":libraries:core") |
||||
implementation project(":libraries:ui:theme") |
||||
implementation project(":libraries:sdk:matrix") |
||||
|
||||
implementation 'androidx.core:core-ktx:1.9.0' |
||||
implementation 'androidx.appcompat:appcompat:1.5.1' |
||||
|
||||
implementation 'com.google.android.material:material:1.6.1' |
||||
|
||||
implementation "androidx.compose.ui:ui:$compose_version" |
||||
implementation 'androidx.compose.material3:material3:1.0.0-rc01' |
||||
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" |
||||
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" |
||||
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" |
||||
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' |
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1" |
||||
implementation 'androidx.activity:activity-compose:1.6.0' |
||||
|
||||
implementation 'androidx.fragment:fragment-ktx:1.5.3' |
||||
|
||||
implementation 'com.airbnb.android:mavericks-compose:2.7.0' |
||||
} |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
|
||||
<application> |
||||
<activity android:name="RoomListActivity" /> |
||||
</application> |
||||
|
||||
</manifest> |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
sealed interface RoomListActions { |
||||
object LoadMore : RoomListActions |
||||
} |
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
import android.os.Bundle |
||||
import androidx.activity.ComponentActivity |
||||
import androidx.activity.compose.setContent |
||||
import androidx.activity.viewModels |
||||
import androidx.compose.foundation.layout.Column |
||||
import androidx.compose.foundation.layout.fillMaxSize |
||||
import androidx.compose.foundation.layout.padding |
||||
import androidx.compose.material3.MaterialTheme |
||||
import androidx.compose.material3.Surface |
||||
import androidx.compose.runtime.collectAsState |
||||
import androidx.compose.ui.Modifier |
||||
import androidx.compose.ui.unit.dp |
||||
import io.element.android.x.ui.theme.ElementXTheme |
||||
|
||||
class RoomListActivity : ComponentActivity() { |
||||
|
||||
private val viewModel: RoomListViewModel by viewModels() |
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) { |
||||
super.onCreate(savedInstanceState) |
||||
|
||||
setContent { |
||||
ElementXTheme { |
||||
// A surface container using the 'background' color from the theme |
||||
Surface( |
||||
modifier = Modifier |
||||
.fillMaxSize() |
||||
.padding(16.dp), |
||||
color = MaterialTheme.colorScheme.background |
||||
) { |
||||
Column( |
||||
modifier = Modifier.fillMaxSize() |
||||
) { |
||||
/* TODO |
||||
val state = viewModel.state.collectAsState().value |
||||
RoomListHeader() |
||||
RoomList() |
||||
|
||||
*/ |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
import androidx.lifecycle.ViewModel |
||||
import io.element.android.x.sdk.matrix.MatrixInstance |
||||
import kotlinx.coroutines.flow.MutableStateFlow |
||||
import kotlinx.coroutines.flow.asStateFlow |
||||
|
||||
class RoomListViewModel : ViewModel() { |
||||
|
||||
private val matrix = MatrixInstance.getInstance() |
||||
|
||||
private val _state = MutableStateFlow(RoomListViewState()) |
||||
val state = _state.asStateFlow() |
||||
|
||||
init { |
||||
observeState() |
||||
} |
||||
|
||||
private fun observeState() { |
||||
// TODO Update submitEnabled when other state members are updated. |
||||
} |
||||
|
||||
fun handle(action: RoomListActions) { |
||||
when (action) { |
||||
RoomListActions.LoadMore -> TODO() |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
data class RoomListViewState( |
||||
val list: List<String> = emptyList(), |
||||
val canLoadMore: Boolean = false, |
||||
) |
Loading…
Reference in new issue