Skip to content
Snippets Groups Projects
Verified Commit 84f942fc authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Only show missing features dialog once

parent 872150e0
Branches
Tags
No related merge requests found
Pipeline #
......@@ -85,7 +85,8 @@ class Quasseldroid : DaggerApplication() {
user = it.user,
pass = it.pass,
name = it.name,
lastUsed = 0
lastUsed = 0,
acceptedMissingFeatures = false
)
}.toTypedArray())
Thread(Runnable {
......
......@@ -124,7 +124,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
private var chatlineFragment: ChatlineFragment? = null
private var isInitialConnect = true
private var connectedAccount = -1L
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
......@@ -458,12 +458,12 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
.firstElement()
.toLiveData()
.observe(this, Observer {
if (isInitialConnect) {
if (connectedAccount != accountId) {
if (resources.getBoolean(R.bool.buffer_drawer_exists) &&
viewModel.buffer.value == Int.MAX_VALUE) {
drawerLayout.openDrawer(Gravity.START)
}
isInitialConnect = false
connectedAccount = accountId
viewModel.session.value?.orNull()?.let {
if (it.identities.isEmpty()) {
UserSetupActivity.launch(this)
......@@ -486,7 +486,11 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
ExtendedFeature.BacklogFilterType
) - it.features.core.enabledFeatures
if (missingFeatures.isNotEmpty()) {
MissingFeaturesDialog.Builder(this)
runInBackground {
val accounts = accountDatabase.accounts()
val account = accounts.findById(accountId)
if (account?.acceptedMissingFeatures == false) {
val dialog = MissingFeaturesDialog.Builder(this)
.missingFeatures(missingFeatures.mapNotNull { feature ->
when (feature) {
ExtendedFeature.SynchronizedMarkerLine -> R.string.label_feature_synchronizedmarkerline
......@@ -512,7 +516,16 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
)
}
})
.show()
.positiveListener(MaterialDialog.SingleButtonCallback { _, _ ->
runInBackground {
accounts.save(account.copy(acceptedMissingFeatures = true))
}
})
runOnUiThread {
dialog.show()
}
}
}
}
}
}
......@@ -606,18 +619,18 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
super.onSaveInstanceState(outState)
outState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
outState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
outState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
outState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
}
override fun onSaveInstanceState(outState: Bundle?, outPersistentState: PersistableBundle?) {
super.onSaveInstanceState(outState, outPersistentState)
outState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
outState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
outState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
outState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
outPersistentState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
outPersistentState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
outPersistentState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
outPersistentState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
}
}
......@@ -626,7 +639,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
viewModel.buffer.onNext(savedInstanceState?.getInt("OPEN_BUFFER", -1) ?: -1)
viewModel.bufferViewConfigId.onNext(savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", -1)
?: -1)
isInitialConnect = savedInstanceState?.getBoolean("HAS_BEEN_CONNECTED", true) ?: true
connectedAccount = savedInstanceState?.getLong("CONNECTED_ACCOUNT", -1L) ?: -1L
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
......@@ -644,10 +657,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", fallbackBufferViewConfigId)
?: fallbackBufferViewConfigId
)
val fallbackIsInitialConnect = persistentState?.getBoolean("HAS_BEEN_CONNECTED", true) ?: true
isInitialConnect = savedInstanceState?.getBoolean(
"HAS_BEEN_CONNECTED", fallbackIsInitialConnect
) ?: fallbackIsInitialConnect
val fallbackConnectedAccount = persistentState?.getLong("CONNECTED_ACCOUNT", -1L) ?: -1L
connectedAccount = savedInstanceState?.getLong(
"CONNECTED_ACCOUNT", fallbackConnectedAccount
) ?: fallbackConnectedAccount
}
}
......
......@@ -43,7 +43,8 @@ class AccountSetupActivity : SetupActivity() {
user = data.getString("user"),
pass = data.getString("pass"),
name = data.getString("name"),
lastUsed = Instant.now().epochSecond
lastUsed = Instant.now().epochSecond,
acceptedMissingFeatures = false
)
handler.post {
database.accounts().create(account)
......
......@@ -45,6 +45,9 @@ class MissingFeaturesDialog : DialogFragment() {
.customView(R.layout.dialog_missing_features, true)
.title(R.string.label_missing_features)
.positiveText(R.string.label_accept)
.also { dialog ->
builder?.positiveListener?.let(dialog::onPositive)
}
.build()
ButterKnife.bind(this, dialog.customView!!)
list.layoutManager = LinearLayoutManager(list.context)
......@@ -57,7 +60,7 @@ class MissingFeaturesDialog : DialogFragment() {
override fun onDismiss(dialog: DialogInterface?) {
super.onDismiss(dialog)
builder?.dismissListener?.onDismiss(this)
builder?.dismissListener?.onDismiss(this.dialog)
}
fun show(context: FragmentActivity) = show(context.supportFragmentManager)
......@@ -73,15 +76,11 @@ class MissingFeaturesDialog : DialogFragment() {
}
}
@FunctionalInterface
interface OnDismissListener {
fun onDismiss(dialog: MissingFeaturesDialog)
}
class Builder(private val fragmentManager: FragmentManager) : Serializable {
constructor(context: FragmentActivity) : this(context.supportFragmentManager)
var dismissListener: OnDismissListener? = null
var dismissListener: DialogInterface.OnDismissListener? = null
var positiveListener: MaterialDialog.SingleButtonCallback? = null
var missingFeatures: List<MissingFeature>? = null
fun missingFeatures(missingFeatures: List<MissingFeature>): Builder {
......@@ -89,11 +88,16 @@ class MissingFeaturesDialog : DialogFragment() {
return this
}
fun dismissListener(dismissListener: OnDismissListener): Builder {
fun dismissListener(dismissListener: DialogInterface.OnDismissListener): Builder {
this.dismissListener = dismissListener
return this
}
fun positiveListener(positiveListener: MaterialDialog.SingleButtonCallback): Builder {
this.positiveListener = positiveListener
return this
}
fun build() = MissingFeaturesDialog().apply {
arguments = Bundle().apply {
putSerializable("builder", this@Builder)
......
......@@ -20,10 +20,12 @@
package de.kuschku.quasseldroid.persistence
import android.arch.lifecycle.LiveData
import android.arch.persistence.db.SupportSQLiteDatabase
import android.arch.persistence.room.*
import android.arch.persistence.room.migration.Migration
import android.content.Context
@Database(entities = [(AccountDatabase.Account::class)], version = 1)
@Database(entities = [(AccountDatabase.Account::class)], version = 2)
abstract class AccountDatabase : RoomDatabase() {
abstract fun accounts(): AccountDao
......@@ -36,7 +38,8 @@ abstract class AccountDatabase : RoomDatabase() {
var user: String,
var pass: String,
var name: String,
var lastUsed: Long
var lastUsed: Long,
var acceptedMissingFeatures: Boolean
)
@Dao
......@@ -73,6 +76,12 @@ abstract class AccountDatabase : RoomDatabase() {
database = Room.databaseBuilder(
context.applicationContext,
AccountDatabase::class.java, DATABASE_NAME
).addMigrations(
object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE account ADD COLUMN acceptedMissingFeatures INTEGER NOT NULL DEFAULT 0;")
}
}
).allowMainThreadQueries().build()
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment