From b5729f45b2fb5e358a8a12169140d8b5f2adc0de Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 28 Sep 2017 01:00:45 +0200 Subject: [PATCH] Integrated account setup with the test activity --- app/src/main/AndroidManifest.xml | 20 ++--- .../persistence/AccountDatabase.kt | 2 +- .../quasseldroid_ng/ui/ChatActivity.kt | 73 +++++++++++++------ .../accounts/AccountSelectionActivity.kt | 11 ++- app/src/main/res/layout/activity_main.xml | 55 -------------- app/src/main/res/menu/main.xml | 3 + 6 files changed, 75 insertions(+), 89 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dc4385a64..930331580 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,14 +17,7 @@ android:exported="true" android:label="@string/app_name" android:theme="@style/SplashTheme" - android:windowSoftInputMode="adjustResize"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <action android:name="android.intent.action.VIEW" /> - - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> + android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.setup.accounts.AccountSetupActivity" android:exported="false" @@ -38,11 +31,18 @@ android:theme="@style/SplashTheme" android:windowSoftInputMode="adjustResize" /> <activity - android:name="de.kuschku.quasseldroid_ng.ui.setup.accounts.AccountSelectionActivity" + android:name=".ui.setup.accounts.AccountSelectionActivity" android:exported="true" android:label="AccountSelection" android:theme="@style/SplashTheme" - android:windowSoftInputMode="adjustResize" /> + android:windowSoftInputMode="adjustResize"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> <service android:name=".service.QuasselService" diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt index d00c55335..d17a86787 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt @@ -29,7 +29,7 @@ abstract class AccountDatabase : RoomDatabase() { fun create(vararg entities: AccountDatabase.Account): Array<Long> @Query("SELECT * FROM account WHERE id = :id") - fun findById(id: Long): AccountDatabase.Account + fun findById(id: Long): AccountDatabase.Account? @Query("SELECT * FROM account ORDER BY lastUsed DESC") fun all(): LivePagedListProvider<Int, Account> diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ChatActivity.kt index e20f0f475..4e44fe7e3 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ChatActivity.kt @@ -1,15 +1,18 @@ package de.kuschku.quasseldroid_ng.ui +import android.app.Activity import android.arch.lifecycle.LiveDataReactiveStreams import android.arch.lifecycle.Observer +import android.content.Context import android.content.Intent import android.os.Bundle +import android.os.Handler +import android.os.HandlerThread import android.support.design.widget.Snackbar import android.util.Log import android.view.Menu import android.view.MenuItem import android.widget.Button -import android.widget.EditText import android.widget.TextView import butterknife.BindView import butterknife.ButterKnife @@ -18,7 +21,9 @@ import de.kuschku.libquassel.session.ConnectionState import de.kuschku.libquassel.session.SocketAddress import de.kuschku.libquassel.util.compatibility.LoggingHandler import de.kuschku.quasseldroid_ng.R +import de.kuschku.quasseldroid_ng.persistence.AccountDatabase import de.kuschku.quasseldroid_ng.service.QuasselService +import de.kuschku.quasseldroid_ng.util.helper.editApply import de.kuschku.quasseldroid_ng.util.helper.stickyMapNotNull import de.kuschku.quasseldroid_ng.util.helper.stickySwitchMapNotNull import org.threeten.bp.ZoneOffset @@ -26,18 +31,6 @@ import org.threeten.bp.ZonedDateTime import org.threeten.bp.format.DateTimeFormatter class ChatActivity : ServiceBoundActivity() { - @BindView(R.id.host) - lateinit var host: EditText - - @BindView(R.id.port) - lateinit var port: EditText - - @BindView(R.id.user) - lateinit var user: EditText - - @BindView(R.id.pass) - lateinit var pass: EditText - @BindView(R.id.connect) lateinit var connect: Button @@ -50,6 +43,9 @@ class ChatActivity : ServiceBoundActivity() { @BindView(R.id.errorList) lateinit var errorList: TextView + private val thread = HandlerThread("Chat") + private lateinit var handler: Handler + private val state = backend.stickyMapNotNull(null, Backend::sessionManager) .stickySwitchMapNotNull(ConnectionState.DISCONNECTED) { session -> LiveDataReactiveStreams.fromPublisher(session.state) @@ -58,7 +54,7 @@ class ChatActivity : ServiceBoundActivity() { private var snackbar: Snackbar? = null private val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ISO_TIME - private val handler = object : LoggingHandler() { + private val logHandler = object : LoggingHandler() { override fun log(logLevel: LogLevel, tag: String, message: String?, throwable: Throwable?) { val time = dateTimeFormatter.format(ZonedDateTime.now(ZoneOffset.UTC)) runOnUiThread { @@ -78,19 +74,41 @@ class ChatActivity : ServiceBoundActivity() { = (logLevel.ordinal >= LogLevel.INFO.ordinal) } + var account: AccountDatabase.Account? = null override fun onCreate(savedInstanceState: Bundle?) { + thread.start() + handler = Handler(thread.looper) + startService(Intent(this, QuasselService::class.java)) setTheme(R.style.AppTheme) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ButterKnife.bind(this) + val database = AccountDatabase.Creator.init(this) + handler.post { + val accountId = getSharedPreferences("status", Context.MODE_PRIVATE) + ?.getLong(selectedAccountKey, -1) ?: -1 + if (accountId == -1L) { + setResult(Activity.RESULT_CANCELED) + finish() + } + val it = database.accounts().findById(accountId) + if (it == null) { + setResult(Activity.RESULT_CANCELED) + finish() + } + account = it + } + connect.setOnClickListener { - backend.value?.connect( - SocketAddress(host.text.toString(), port.text.toString().toShort()), - user.text.toString(), - pass.text.toString() - ) + val account = account + if (account != null) + backend.value?.connect( + SocketAddress(account.host, account.port.toShort()), + account.user, + account.pass + ) } disconnect.setOnClickListener { @@ -120,16 +138,27 @@ class ChatActivity : ServiceBoundActivity() { } override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) { - else -> super.onOptionsItemSelected(item) + R.id.disconnect -> { + getSharedPreferences("status", Context.MODE_PRIVATE).editApply { + putBoolean("reconnect", false) + } + finish() + true + } + else -> super.onOptionsItemSelected(item) } override fun onStart() { super.onStart() - LoggingHandler.loggingHandlers.add(handler) + LoggingHandler.loggingHandlers.add(logHandler) } override fun onStop() { - LoggingHandler.loggingHandlers.remove(handler) + LoggingHandler.loggingHandlers.remove(logHandler) super.onStop() } + + companion object { + private const val selectedAccountKey = "selectedAccount" + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt index 9d969f9fe..437f31369 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt @@ -1,8 +1,10 @@ package de.kuschku.quasseldroid_ng.ui.setup.accounts import android.content.Context +import android.content.Intent import android.content.SharedPreferences import android.os.Bundle +import de.kuschku.quasseldroid_ng.ui.ChatActivity import de.kuschku.quasseldroid_ng.ui.setup.SetupActivity import de.kuschku.quasseldroid_ng.util.helper.editCommit @@ -15,15 +17,22 @@ class AccountSelectionActivity : SetupActivity() { override fun onDone(data: Bundle) { statusPreferences.editCommit { putLong(selectedAccountKey, data.getLong(selectedAccountKey, -1)) + putBoolean("reconnect", true) } + startActivity(Intent(this, ChatActivity::class.java)) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) statusPreferences = this.getSharedPreferences("status", Context.MODE_PRIVATE) val data = Bundle() - data.putLong(selectedAccountKey, statusPreferences.getLong(selectedAccountKey, -1)) + val selectedAccount = statusPreferences.getLong(selectedAccountKey, -1) + data.putLong(selectedAccountKey, selectedAccount) setInitData(data) + + if (statusPreferences.getBoolean("reconnect", false) && selectedAccount != -1L) { + startActivity(Intent(this, ChatActivity::class.java)) + } } companion object { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c125e2959..ae8a6ba04 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -12,61 +12,6 @@ android:paddingLeft="24dp" android:paddingRight="24dp"> - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <android.support.design.widget.TextInputEditText - android:id="@+id/host" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="Host" - android:maxLines="1" - android:singleLine="true" /> - </android.support.design.widget.TextInputLayout> - - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <android.support.design.widget.TextInputEditText - android:id="@+id/port" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="Port" - android:inputType="number" - android:maxLines="1" - android:singleLine="true" - android:text="4242" /> - </android.support.design.widget.TextInputLayout> - - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <android.support.design.widget.TextInputEditText - android:id="@+id/user" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="Username" - android:maxLines="1" - android:singleLine="true" /> - </android.support.design.widget.TextInputLayout> - - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <android.support.design.widget.TextInputEditText - android:id="@+id/pass" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="Password" - android:inputType="textPassword" - android:maxLines="1" - android:singleLine="true" /> - </android.support.design.widget.TextInputLayout> - <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index 270a5385a..2079987d4 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -3,4 +3,7 @@ <item android:id="@+id/settings" android:title="Settings" /> + <item + android:id="@+id/disconnect" + android:title="Disconnect" /> </menu> -- GitLab