diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt index 63c754f1c347101d4a980005b04926a3c14d7a99..b24b6f8f6ecc969f56c127adb7f627b52871067c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt @@ -130,7 +130,7 @@ class QuasselService : DaggerLifecycleService(), private fun updateConnection(accountId: Long, reconnect: Boolean) { handlerService.backend { val account = if (accountId != -1L && reconnect) { - AccountDatabase.Creator.init(this).accounts().findById(accountId) + accountDatabase.accounts().findById(accountId) } else { null } @@ -165,6 +165,13 @@ class QuasselService : DaggerLifecycleService(), } private val backendImplementation = object : Backend { + override fun updateUserDataAndLogin(user: String, pass: String) { + accountDatabase.accounts().findById(accountId)?.let { old -> + accountDatabase.accounts().save(old.copy(user = user, pass = pass)) + sessionManager.login(user, pass) + } + } + override fun sessionManager() = sessionManager override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String, @@ -193,6 +200,12 @@ class QuasselService : DaggerLifecycleService(), private val handlerService = AndroidHandlerService() private val asyncBackend = object : Backend { + override fun updateUserDataAndLogin(user: String, pass: String) { + handlerService.backend { + backendImplementation.updateUserDataAndLogin(user, pass) + } + } + override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String, reconnect: Boolean) { handlerService.backend { @@ -224,7 +237,11 @@ class QuasselService : DaggerLifecycleService(), override fun sessionManager() = backendImplementation.sessionManager() } - private lateinit var database: QuasselDatabase + @Inject + lateinit var database: QuasselDatabase + + @Inject + lateinit var accountDatabase: AccountDatabase private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -237,7 +254,6 @@ class QuasselService : DaggerLifecycleService(), override fun onCreate() { super.onCreate() - database = QuasselDatabase.Creator.init(application) sessionManager = SessionManager(ISession.NULL, QuasselBacklogStorage(database), handlerService) clientData = ClientData( identifier = "${resources.getString(R.string.app_name)} ${BuildConfig.VERSION_NAME}", diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index 0fb11743b5b904c2c32966486f28a85280d603f7..f06944fd3a7ff0d7897b5504dde0fb4cdb99122c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -20,6 +20,7 @@ import android.view.Gravity import android.view.Menu import android.view.MenuItem import android.view.View +import android.widget.EditText import butterknife.BindView import butterknife.ButterKnife import com.afollestad.materialdialogs.MaterialDialog @@ -37,6 +38,7 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.ui.chat.input.Editor import de.kuschku.quasseldroid.ui.chat.input.MessageHistoryAdapter import de.kuschku.quasseldroid.ui.settings.SettingsActivity +import de.kuschku.quasseldroid.util.helper.editCommit import de.kuschku.quasseldroid.util.helper.invoke import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.service.ServiceBoundActivity @@ -171,29 +173,58 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc drawerToggle.syncState() } - viewModel.errors_liveData.observe(this, Observer { - when (it) { - is HandshakeMessage.ClientInitReject -> - MaterialDialog.Builder(this) - .title(R.string.label_error_init) - .content(Html.fromHtml(it.errorString)) - .neutralText(R.string.label_close) - .build() - .show() - is HandshakeMessage.CoreSetupReject -> - MaterialDialog.Builder(this) - .title(R.string.label_error_setup) - .content(Html.fromHtml(it.errorString)) - .neutralText(R.string.label_close) - .build() - .show() - is HandshakeMessage.ClientLoginReject -> - MaterialDialog.Builder(this) - .title(R.string.label_error_login) - .content(Html.fromHtml(it.errorString)) - .neutralText(R.string.label_close) - .build() - .show() + viewModel.errors_liveData.observe(this, Observer { optional -> + optional?.orNull().let { + when (it) { + is HandshakeMessage.ClientInitReject -> + MaterialDialog.Builder(this) + .title(R.string.label_error_init) + .content(Html.fromHtml(it.errorString)) + .neutralText(R.string.label_close) + .build() + .show() + is HandshakeMessage.CoreSetupReject -> + MaterialDialog.Builder(this) + .title(R.string.label_error_setup) + .content(Html.fromHtml(it.errorString)) + .neutralText(R.string.label_close) + .build() + .show() + is HandshakeMessage.ClientLoginReject -> + MaterialDialog.Builder(this) + .title(R.string.label_error_login) + .content(Html.fromHtml(it.errorString)) + .negativeText(R.string.label_disconnect) + .positiveText("Change User/Password") + .onNegative { _, _ -> + disconnect() + } + .onPositive { _, _ -> + MaterialDialog.Builder(this) + .title("Login Required") + .customView(R.layout.setup_account_user, false) + .negativeText(R.string.label_disconnect) + .positiveText(R.string.label_save) + .onNegative { _, _ -> + disconnect() + } + .onPositive { dialog, _ -> + dialog.customView?.run { + val userField = findViewById<EditText>(R.id.user) + val passField = findViewById<EditText>(R.id.pass) + + val user = userField.text.toString() + val pass = passField.text.toString() + + backend.value.orNull()?.updateUserDataAndLogin(user, pass) + } + } + .build() + .show() + } + .build() + .show() + } } }) @@ -319,11 +350,15 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc true } R.id.disconnect -> { - val editor1 = getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).edit() - editor1.putBoolean(Keys.Status.reconnect, false) - editor1.commit() + disconnect() true } else -> super.onOptionsItemSelected(item) } + + private fun disconnect() { + getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).editCommit { + putBoolean(Keys.Status.reconnect, false) + } + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt index a52ac3c6ffc1a65511b517ab6342367bc4b95dab..b5677d0163238cdeb71470216ed52e9deaea1d15 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt @@ -82,26 +82,26 @@ class AccountEditActivity : AppCompatActivity() { } nameValidator = object : TextValidator( - nameWrapper::setError, resources.getString(R.string.hintInvalidName) + nameWrapper::setError, resources.getString(R.string.hint_invalid_name) ) { override fun validate(text: Editable) = text.isNotBlank() } hostValidator = object : TextValidator( - hostWrapper::setError, resources.getString(R.string.hintInvalidHost) + hostWrapper::setError, resources.getString(R.string.hint_invalid_host) ) { override fun validate(text: Editable) = text.toString().matches(Patterns.DOMAIN_NAME.toRegex()) } portValidator = object : TextValidator( - portWrapper::setError, resources.getString(R.string.hintInvalidPort) + portWrapper::setError, resources.getString(R.string.hint_invalid_port) ) { override fun validate(text: Editable) = text.toString().toIntOrNull() in (0 until 65536) } userValidator = object : TextValidator( - userWrapper::setError, resources.getString(R.string.hintInvalidUser) + userWrapper::setError, resources.getString(R.string.hint_invalid_user) ) { override fun validate(text: Editable) = text.isNotBlank() } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountAdapter.kt index 5b3c07ccf8f593263b0dfe60e3fce6a543769049..f236d115fa25237f5ed42a33ad0deaa42e111b79 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountAdapter.kt @@ -217,7 +217,7 @@ class AccountAdapter( id = account.id accountName.text = account.name accountDescription.text = itemView.context.resources.getString( - R.string.userOnHost, account.user, account.host, account.port + R.string.label_user_on_host, account.user, account.host, account.port ) accountSelect.isChecked = selected } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt index 88491e67ae14a93a9814326c61d6ef974c8b93de..3a1224b61bc2c6d2ebac907f54bee0fb64456083 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt @@ -27,8 +27,8 @@ class AccountSelectionSlide : SlideFragment() { override fun isValid() = adapter?.selectedItemId ?: -1L != -1L - override val title = R.string.slideAccountSelectTitle - override val description = R.string.slideAccountSelectDescription + override val title = R.string.slide_account_select_title + override val description = R.string.slide_account_select_description override fun setData(data: Bundle) { if (data.containsKey("selectedAccount")) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupConnectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupConnectionSlide.kt index 62dbbed4e783df8c0cf1f6d7286c5d377207ff97..670bb67b6dfc264c9c6c3332aa37547044f3831c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupConnectionSlide.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupConnectionSlide.kt @@ -30,7 +30,7 @@ class AccountSetupConnectionSlide : SlideFragment() { return hostValidator.isValid && portValidator.isValid } - override val title = R.string.slideAccountConnectionTitle + override val title = R.string.slide_account_connection_title override val description = R.string.slideAccountConnectionDescription override fun setData(data: Bundle) { @@ -51,7 +51,7 @@ class AccountSetupConnectionSlide : SlideFragment() { val view = inflater.inflate(R.layout.setup_account_connection, container, false) ButterKnife.bind(this, view) hostValidator = object : TextValidator( - hostWrapper::setError, resources.getString(R.string.hintInvalidHost) + hostWrapper::setError, resources.getString(R.string.hint_invalid_host) ) { override fun validate(text: Editable) = text.toString().matches(Patterns.DOMAIN_NAME.toRegex()) @@ -59,7 +59,7 @@ class AccountSetupConnectionSlide : SlideFragment() { override fun onChanged() = updateValidity() } portValidator = object : TextValidator( - portWrapper::setError, resources.getString(R.string.hintInvalidPort) + portWrapper::setError, resources.getString(R.string.hint_invalid_port) ) { override fun validate(text: Editable) = text.toString().toIntOrNull() in (0 until 65536) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupNameSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupNameSlide.kt index 3b7049fa9d30d3d886700e08bfb6d1542374bece..f062cb3fb4fcf4bf6382b7dea5ec754bc25f99e7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupNameSlide.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupNameSlide.kt @@ -23,8 +23,8 @@ class AccountSetupNameSlide : SlideFragment() { return nameValidator.isValid } - override val title = R.string.slideAccountNameTitle - override val description = R.string.slideAccountNameDescription + override val title = R.string.slide_account_name_title + override val description = R.string.slide_account_name_description override fun setData(data: Bundle) { if (data.containsKey("name")) @@ -41,7 +41,7 @@ class AccountSetupNameSlide : SlideFragment() { val view = inflater.inflate(R.layout.setup_account_name, container, false) ButterKnife.bind(this, view) nameValidator = object : TextValidator( - nameWrapper::setError, resources.getString(R.string.hintInvalidName) + nameWrapper::setError, resources.getString(R.string.hint_invalid_name) ) { override fun validate(text: Editable) = text.isNotBlank() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupUserSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupUserSlide.kt index 088aac61266d3a1d9a22c8959496b98ee681e7e8..e21728510d4cb3f532632a247684b67366070dcd 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupUserSlide.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupUserSlide.kt @@ -28,8 +28,8 @@ class AccountSetupUserSlide : SlideFragment() { return true } - override val title = R.string.slideAccountUserTitle - override val description = R.string.slideAccountUserDescription + override val title = R.string.slide_account_user_title + override val description = R.string.slide_account_user_description override fun setData(data: Bundle) { if (data.containsKey("user")) @@ -48,7 +48,7 @@ class AccountSetupUserSlide : SlideFragment() { val view = inflater.inflate(R.layout.setup_account_user, container, false) ButterKnife.bind(this, view) userValidator = object : TextValidator( - userWrapper::setError, resources.getString(R.string.hintInvalidUser) + userWrapper::setError, resources.getString(R.string.hint_invalid_user) ) { override fun validate(text: Editable) = text.isNotBlank() diff --git a/app/src/main/res/layout-sw720dp/activity_settings.xml b/app/src/main/res/layout-sw720dp/activity_settings.xml index 893bde649bed402cfe11c5263d1c46bd5e5e5313..8e7395e7ba80d70e9a1ee1067055f0f9c9b6839c 100644 --- a/app/src/main/res/layout-sw720dp/activity_settings.xml +++ b/app/src/main/res/layout-sw720dp/activity_settings.xml @@ -3,11 +3,11 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true"> + android:background="#eeeeee" + android:fitsSystemWindows="true" + android:orientation="vertical"> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" + <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" @@ -15,7 +15,7 @@ <android.support.design.widget.AppBarLayout android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="172dp" android:theme="?attr/actionBarTheme"> <android.support.v7.widget.Toolbar @@ -27,13 +27,28 @@ </android.support.design.widget.AppBarLayout> - <fragment - android:id="@+id/settingsFragment" - android:name="de.kuschku.quasseldroid.ui.settings.SettingsFragment" - android:layout_width="600dp" + <android.support.v7.widget.CardView + android:layout_width="@dimen/max_content_width" android:layout_height="match_parent" android:layout_gravity="center_horizontal" - tools:layout="@xml/preferences" /> - </LinearLayout> + android:layout_marginBottom="32dp" + android:layout_marginTop="-64dp" + android:clipToPadding="false" + app:cardElevation="4dp"> + + <android.support.v4.widget.NestedScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="vertical"> + <fragment + android:id="@+id/settingsFragment" + android:name="de.kuschku.quasseldroid.ui.settings.SettingsFragment" + android:layout_width="match_parent" + android:layout_height="wrap_content" + tools:layout="@xml/preferences" /> + </android.support.v4.widget.NestedScrollView> + </android.support.v7.widget.CardView> + + </LinearLayout> </android.support.v4.widget.DrawerLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/preference_vertical.xml b/app/src/main/res/layout/preference_vertical.xml index fd5c40f8209b917d92ccc714a54b9d6d2b624ad1..0d382f7c3cf092db228727294b060198e1004669 100644 --- a/app/src/main/res/layout/preference_vertical.xml +++ b/app/src/main/res/layout/preference_vertical.xml @@ -64,6 +64,7 @@ android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" + android:textColor="?android:attr/textColorPrimary" android:textSize="16sp" tools:text="Font Size" /> @@ -78,6 +79,7 @@ <LinearLayout android:id="@android:id/widget_frame" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:orientation="vertical" /> </LinearLayout> </LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/setup_account_connection.xml b/app/src/main/res/layout/setup_account_connection.xml index f217339abc7c29ceb074c2fdcce352cfd96ec164..328f2cb3283c7b87e5a9ca32e69008db6fff8bfd 100644 --- a/app/src/main/res/layout/setup_account_connection.xml +++ b/app/src/main/res/layout/setup_account_connection.xml @@ -11,7 +11,7 @@ android:id="@+id/hostWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelConnectionHost" + android:hint="@string/label_connection_host" app:errorEnabled="true"> <EditText diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml index 4397994164a74e6b0be5996b2119fefddbd3174f..b95d98987eee13a6cb2d0050c30588d1791b28f3 100644 --- a/app/src/main/res/layout/setup_account_edit.xml +++ b/app/src/main/res/layout/setup_account_edit.xml @@ -36,7 +36,7 @@ android:id="@+id/nameWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountName" + android:hint="@string/label_account_name" app:errorEnabled="true"> <EditText @@ -79,7 +79,7 @@ android:id="@+id/hostWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelConnectionHost" + android:hint="@string/label_connection_host" app:errorEnabled="true"> <EditText @@ -143,7 +143,7 @@ android:id="@+id/userWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountUser"> + android:hint="@string/label_account_user"> <EditText android:id="@+id/user" @@ -157,7 +157,7 @@ android:id="@+id/passWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountPass" + android:hint="@string/label_account_pass" app:passwordToggleEnabled="true"> <EditText diff --git a/app/src/main/res/layout/setup_account_name.xml b/app/src/main/res/layout/setup_account_name.xml index 4de486fd0b252c76593f3724e3bed5c254b61cc1..7321ec065a4564e95f3f2adef275ebd36faf38b6 100644 --- a/app/src/main/res/layout/setup_account_name.xml +++ b/app/src/main/res/layout/setup_account_name.xml @@ -9,7 +9,7 @@ android:id="@+id/nameWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountName" + android:hint="@string/label_account_name" app:errorEnabled="true"> <EditText diff --git a/app/src/main/res/layout/setup_account_user.xml b/app/src/main/res/layout/setup_account_user.xml index 2dda6f38460d2546395648a1654424a0b91ecdf0..60214fa1df96c1389ddff97f841a5bebac4a2d04 100644 --- a/app/src/main/res/layout/setup_account_user.xml +++ b/app/src/main/res/layout/setup_account_user.xml @@ -9,7 +9,7 @@ android:id="@+id/userWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountUser"> + android:hint="@string/label_account_user"> <EditText android:id="@+id/user" @@ -23,7 +23,7 @@ android:id="@+id/passWrapper" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/labelAccountPass" + android:hint="@string/label_account_pass" app:passwordToggleEnabled="true"> <EditText diff --git a/app/src/main/res/values-de/strings_setup.xml b/app/src/main/res/values-de/strings_setup.xml index fe97661c53cefe3aa515ca08a3b0eee8837d2837..e24e3a95cdc10cab00895cc5fd8b78839524ac8c 100644 --- a/app/src/main/res/values-de/strings_setup.xml +++ b/app/src/main/res/values-de/strings_setup.xml @@ -1,46 +1,46 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Account Selection --> - <string name="slideAccountSelectTitle">Account Auswählen</string> - <string name="slideAccountSelectDescription">Wähle einen Account aus oder erstelle einen neuen</string> - <string name="userOnHost">%1$s @ %2$s:%3$s</string> + <string name="slide_account_select_title">Account Auswählen</string> + <string name="slide_account_select_description">Wähle einen Account aus oder erstelle einen neuen</string> + <string name="label_user_on_host">%1$s @ %2$s:%3$s</string> <!-- Account Connection --> - <string name="slideAccountConnectionTitle">Verbindung</string> + <string name="slide_account_connection_title">Verbindung</string> <string name="slideAccountConnectionDescription">Bitte gebe an die Addresse des Servers an, auf dem dein Core läuft</string> - <string name="labelConnectionHost">Hostname</string> + <string name="label_connection_host">Hostname</string> <string name="labelConnectionPort">Port</string> - <string name="hintInvalidHost">Ungültiger Hostname</string> - <string name="hintInvalidPort">Ungültiger Port</string> + <string name="hint_invalid_host">Ungültiger Hostname</string> + <string name="hint_invalid_port">Ungültiger Port</string> <!-- Account User --> - <string name="slideAccountUserTitle">Dein Account</string> - <string name="slideAccountUserDescription">Bitte gib Benutzernamen und Passwort für deinen Account ein. Falls du noch keinen hast, wird dieser für dich erstellt.</string> + <string name="slide_account_user_title">Dein Account</string> + <string name="slide_account_user_description">Bitte gib Benutzernamen und Passwort für deinen Account ein. Falls du noch keinen hast, wird dieser für dich erstellt.</string> - <string name="labelAccountUser">Benutzername</string> - <string name="labelAccountPass">Passwort</string> + <string name="label_account_user">Benutzername</string> + <string name="label_account_pass">Passwort</string> - <string name="hintInvalidUser">Benutzername darf nicht leer sein</string> + <string name="hint_invalid_user">Benutzername darf nicht leer sein</string> <!-- Account Name --> - <string name="slideAccountNameTitle">Account Anpassen</string> - <string name="slideAccountNameDescription">Benenne diesen Account</string> + <string name="slide_account_name_title">Account Anpassen</string> + <string name="slide_account_name_description">Benenne diesen Account</string> - <string name="labelAccountName">Accountname</string> + <string name="label_account_name">Accountname</string> - <string name="hintInvalidName">Accountname darf nicht leer sein</string> + <string name="hint_invalid_name">Accountname darf nicht leer sein</string> <!-- Core Authenticator Select --> - <string name="slideCoreAuthenticatorSelectTitle">Authentifizierungsbackend auswählen</string> - <string name="slideCoreAuthenticatorSelectDescription">Bitte wähle aus, welches Authentifizierungsbackend der Quassel Core verwenden soll</string> + <string name="slide_core_authenticator_select_title">Authentifizierungsbackend auswählen</string> + <string name="slide_core_authenticator_select_description">Bitte wähle aus, welches Authentifizierungsbackend der Quassel Core verwenden soll</string> <!-- Core Backend Select --> - <string name="slideCoreBackendSelectTitle">Datenbank auswählen</string> - <string name="slideCoreBackendSelectDescription">Bitte wähle aus, in welchem Datenbankbackend der Quassel Core Nachrichten und andere Daten speichern soll</string> + <string name="slide_core_backend_select_title">Datenbank auswählen</string> + <string name="slide_core_backend_select_description">Bitte wähle aus, in welchem Datenbankbackend der Quassel Core Nachrichten und andere Daten speichern soll</string> <!-- Core Backend Config --> - <string name="slideCoreBackendSetupTitle">Datenbank konfigurieren</string> - <string name="slideCoreBackendSetupDescription">Bitte konfiguriere das ausgewählte Datenbankbackend</string> + <string name="slide_core_backend_setup_title">Datenbank konfigurieren</string> + <string name="slide_core_backend_setup_description">Bitte konfiguriere das ausgewählte Datenbankbackend</string> </resources> \ No newline at end of file diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index d5591b01943f2b7105b52250a6640ad0eb936c13..bf1aceae7b34274129ff21278b136edd5f742e99 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -1,3 +1,5 @@ <resources> <dimen name="navigation_drawer_max_width">400dp</dimen> + + <dimen name="max_content_width">600dp</dimen> </resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 21fb8ab65f39b0dce1da370f4ec1ce9d6051fe04..0f762c4fbc4c475e66227ad810ec52da6eafbc66 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -5,4 +5,6 @@ <dimen name="message_vertical">2dp</dimen> <dimen name="autocomplete_max_height">96dp</dimen> + + <dimen name="max_content_width">480dp</dimen> </resources> diff --git a/app/src/main/res/values/strings_setup.xml b/app/src/main/res/values/strings_setup.xml index c5bf1bf09b71bcf7e49390e2c50b85da7e53e4c1..023d168480241145de7be248273dc556ae5eaa61 100644 --- a/app/src/main/res/values/strings_setup.xml +++ b/app/src/main/res/values/strings_setup.xml @@ -1,45 +1,45 @@ <resources> <!-- Account Selection --> - <string name="slideAccountSelectTitle">Select Account</string> - <string name="slideAccountSelectDescription">Please select an account from the list or add one</string> - <string name="userOnHost">%1$s on %2$s:%3$d</string> + <string name="slide_account_select_title">Select Account</string> + <string name="slide_account_select_description">Please select an account from the list or add one</string> + <string name="label_user_on_host">%1$s on %2$s:%3$d</string> <!-- Account Connection --> - <string name="slideAccountConnectionTitle">Connection</string> + <string name="slide_account_connection_title">Connection</string> <string name="slideAccountConnectionDescription">First, please choose which server your core is hosted on.</string> - <string name="labelConnectionHost">Host</string> + <string name="label_connection_host">Host</string> <string name="labelConnectionPort">Port</string> - <string name="hintInvalidHost">Not a valid hostname</string> - <string name="hintInvalidPort">Not a valid port</string> + <string name="hint_invalid_host">Not a valid hostname</string> + <string name="hint_invalid_port">Not a valid port</string> <!-- Account User --> - <string name="slideAccountUserTitle">Your Account</string> - <string name="slideAccountUserDescription">Now, please enter the username and password for your account on the core. If you just created that core, we’ll set up this account for you</string> + <string name="slide_account_user_title">Your Account</string> + <string name="slide_account_user_description">Now, please enter the username and password for your account on the core. If you just created that core, we’ll set up this account for you</string> - <string name="labelAccountUser">Username</string> - <string name="labelAccountPass">Password</string> + <string name="label_account_user">Username</string> + <string name="label_account_pass">Password</string> - <string name="hintInvalidUser">Username can not be empty</string> + <string name="hint_invalid_user">Username can not be empty</string> <!-- Account Name --> - <string name="slideAccountNameTitle">Customize Account</string> - <string name="slideAccountNameDescription">Give this account a name</string> + <string name="slide_account_name_title">Customize Account</string> + <string name="slide_account_name_description">Give this account a name</string> - <string name="labelAccountName">Account name</string> + <string name="label_account_name">Account name</string> - <string name="hintInvalidName">Name can not be empty</string> + <string name="hint_invalid_name">Name can not be empty</string> <!-- Core Authenticator Select --> - <string name="slideCoreAuthenticatorSelectTitle">Select Authentication Backend</string> - <string name="slideCoreAuthenticatorSelectDescription">Please select an authentication backend for the Quassel Core to use for authenticating users.</string> + <string name="slide_core_authenticator_select_title">Select Authentication Backend</string> + <string name="slide_core_authenticator_select_description">Please select an authentication backend for the Quassel Core to use for authenticating users.</string> <!-- Core Backend Select --> - <string name="slideCoreBackendSelectTitle">Select Storage Backend</string> - <string name="slideCoreBackendSelectDescription">Please select a database backend for the Quassel Core storage to store the backlog and other data in.</string> + <string name="slide_core_backend_select_title">Select Storage Backend</string> + <string name="slide_core_backend_select_description">Please select a database backend for the Quassel Core storage to store the backlog and other data in.</string> <!-- Core Backend Config --> - <string name="slideCoreBackendSetupTitle">Configure Storage Backend</string> - <string name="slideCoreBackendSetupDescription">Please configure the selected database backend.</string> + <string name="slide_core_backend_setup_title">Configure Storage Backend</string> + <string name="slide_core_backend_setup_description">Please configure the selected database backend.</string> </resources> diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Backend.kt b/lib/src/main/java/de/kuschku/libquassel/session/Backend.kt index 529c0210ae4791aabefe36fee15a672bf741cf92..2af74cb885c257690ecfe9b414079ac684c7d152 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Backend.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Backend.kt @@ -6,4 +6,5 @@ interface Backend { fun reconnect() fun disconnect(forever: Boolean = false) fun sessionManager(): SessionManager + fun updateUserDataAndLogin(user: String, pass: String) } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ISession.kt b/lib/src/main/java/de/kuschku/libquassel/session/ISession.kt index dfb5118ce5c5542d088fe88131413838173f4dc8..4271747835c602aabd3ceb40f7126b8cf91887f4 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ISession.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ISession.kt @@ -34,6 +34,8 @@ interface ISession : Closeable { val lag: Observable<Long> + fun login(user: String, pass: String) + companion object { val NULL = object : ISession { override val error = BehaviorSubject.create<HandshakeMessage>() @@ -57,6 +59,8 @@ interface ISession : Closeable { override val initStatus: Observable<Pair<Int, Int>> = Observable.just(0 to 0) override val lag: Observable<Long> = Observable.just(0L) + override fun login(user: String, pass: String) = Unit + override fun close() = Unit } } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt index cfb0c8528da93a7c32973982898d413cf78a75b4..42707bd164ff13611399e780c0f1613923422cfd 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt @@ -20,7 +20,7 @@ class Session( address: SocketAddress, private val handlerService: HandlerService, backlogStorage: BacklogStorage, - private val userData: Pair<String, String> + private var userData: Pair<String, String> ) : ProtocolHandler(), ISession { override val features = Features(clientData.clientFeatures, Quassel_Features.of()) @@ -77,6 +77,11 @@ class Session( ) } + override fun login(user: String, pass: String) { + userData = Pair(user, pass) + login() + } + override fun handle(f: HandshakeMessage.CoreSetupAck): Boolean { login() return true diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt index 9294077913652e754e5a0c4666f10eef9aa2c824..d46a638925b11cfaf954c5e899177c06b7a7e5d8 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt @@ -19,8 +19,6 @@ import javax.net.ssl.X509TrustManager class SessionManager(offlineSession: ISession, val backlogStorage: BacklogStorage, val handlerService: HandlerService) : ISession { - override val error: Observable<HandshakeMessage> - get() = session.or(lastSession).error override val features: Features get() = session.or(lastSession).features override val sslSession: SSLSession? @@ -64,15 +62,17 @@ class SessionManager(offlineSession: ISession, private var inProgressSession = BehaviorSubject.createDefault(ISession.NULL) private var lastSession: ISession = offlineSession - override val state: Observable<ConnectionState> = inProgressSession.switchMap { it.state } + override val state: Observable<ConnectionState> = inProgressSession.switchMap(ISession::state) - override val initStatus: Observable<Pair<Int, Int>> = inProgressSession.switchMap { it.initStatus } + override val initStatus: Observable<Pair<Int, Int>> = inProgressSession.switchMap(ISession::initStatus) val session: Observable<ISession> = state.map { connectionState -> if (connectionState == ConnectionState.CONNECTED) inProgressSession.value else lastSession } + override val error: Observable<HandshakeMessage> + get() = inProgressSession.switchMap(ISession::error) val connectionProgress: Observable<Triple<ConnectionState, Int, Int>> = Observable.combineLatest( state, initStatus, @@ -149,4 +149,8 @@ class SessionManager(offlineSession: ISession, inProgressSession.value.close() inProgressSession.onNext(ISession.NULL) } + + override fun login(user: String, pass: String) { + inProgressSession.value.login(user, pass) + } } diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt index 943e12ae6d2b2e0bae1517164e5816e078bb1bba..6ff16c3e9fe831820f705031375e05215530993d 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -4,6 +4,7 @@ import android.arch.lifecycle.ViewModel import de.kuschku.libquassel.protocol.BufferId import de.kuschku.libquassel.protocol.Buffer_Type import de.kuschku.libquassel.protocol.NetworkId +import de.kuschku.libquassel.protocol.message.HandshakeMessage import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.quassel.syncables.BufferViewConfig import de.kuschku.libquassel.quassel.syncables.IrcChannel @@ -60,7 +61,7 @@ class QuasselViewModel : ViewModel() { } } - val errors = session.mapSwitchMapEmpty(ISession::error) + val errors = sessionManager.mapSwitchMap(SessionManager::error) val errors_liveData = errors.toLiveData() /**