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 0895d8c0eda6254d45a533fc2c336784f7f6bc39..19cf45c49e248c5c87d31ed1e7f239e634f4f60e 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 @@ -30,6 +30,7 @@ import de.kuschku.libquassel.util.and import de.kuschku.libquassel.util.or import de.kuschku.quasseldroid.Keys import de.kuschku.quasseldroid.R +import de.kuschku.quasseldroid.persistence.AccountDatabase import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.settings.Settings import de.kuschku.quasseldroid.ui.chat.input.Editor @@ -68,6 +69,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc @Inject lateinit var database: QuasselDatabase + @Inject + lateinit var accountDatabase: AccountDatabase + private lateinit var editor: Editor private val panelSlideListener: SlidingUpPanelLayout.PanelSlideListener = object : @@ -194,27 +198,41 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc 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, _ -> + runInBackground { + val account = accountDatabase.accounts().findById(accountId) + + runOnUiThread { + val dialog = 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() 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) + account?.let { + userField.setText(it.user) + } } + dialog.show() } - .build() - .show() + } } .build() .show() @@ -249,7 +267,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc } override fun onActionModeStarted(mode: ActionMode?) { - mode?.menu?.retint(toolbar.context) + when (mode?.tag) { + "BUFFER", + "MESSAGES" -> mode.menu?.retint(toolbar.context) + } super.onActionModeStarted(mode) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt index ee95141591bc048b821deb4e479d8e3f3de02711..823c1981aec5dd52c06f782bec7e91bf92ac8b5f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt @@ -4,7 +4,6 @@ import android.arch.lifecycle.LifecycleOwner import android.arch.lifecycle.LiveData import android.arch.lifecycle.Observer import android.graphics.drawable.Drawable -import android.support.v4.graphics.drawable.DrawableCompat import android.support.v7.util.DiffUtil import android.support.v7.widget.RecyclerView import android.view.LayoutInflater @@ -220,9 +219,9 @@ class BufferListAdapter( itemView.isSelected = state.selected if (state.networkExpanded) { - status.setImageDrawable(itemView.context.getCompatDrawable(R.drawable.ic_chevron_up)) + status.setImageDrawable(itemView.context.getDrawableCompat(R.drawable.ic_chevron_up)) } else { - status.setImageDrawable(itemView.context.getCompatDrawable(R.drawable.ic_chevron_down)) + status.setImageDrawable(itemView.context.getDrawableCompat(R.drawable.ic_chevron_down)) } } } @@ -243,8 +242,8 @@ class BufferListAdapter( var bufferId: BufferId? = null - private val online: Drawable - private val offline: Drawable + private val online: Drawable? + private val offline: Drawable? private var none: Int = 0 private var activity: Int = 0 @@ -269,16 +268,16 @@ class BufferListAdapter( } } - online = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate() - offline = itemView.context.getCompatDrawable(R.drawable.ic_status_offline).mutate() + online = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate() + offline = itemView.context.getDrawableCompat(R.drawable.ic_status_offline)?.mutate() itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { - DrawableCompat.setTint(online, getColor(0, 0)) - DrawableCompat.setTint(offline, getColor(1, 0)) + online?.tint(getColor(0, 0)) + offline?.tint(getColor(1, 0)) none = getColor(2, 0) activity = getColor(3, 0) @@ -331,8 +330,8 @@ class BufferListAdapter( var bufferId: BufferId? = null - private val online: Drawable - private val offline: Drawable + private val online: Drawable? + private val offline: Drawable? private var none: Int = 0 private var activity: Int = 0 @@ -357,16 +356,16 @@ class BufferListAdapter( } } - online = itemView.context.getCompatDrawable(R.drawable.ic_status_channel).mutate() - offline = itemView.context.getCompatDrawable(R.drawable.ic_status_channel_offline).mutate() + online = itemView.context.getDrawableCompat(R.drawable.ic_status_channel)?.mutate() + offline = itemView.context.getDrawableCompat(R.drawable.ic_status_channel_offline)?.mutate() itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { - DrawableCompat.setTint(online, getColor(0, 0)) - DrawableCompat.setTint(offline, getColor(1, 0)) + online?.tint(getColor(0, 0)) + offline?.tint(getColor(1, 0)) none = getColor(2, 0) activity = getColor(3, 0) @@ -419,9 +418,9 @@ class BufferListAdapter( var bufferId: BufferId? = null - private val online: Drawable - private val away: Drawable - private val offline: Drawable + private val online: Drawable? + private val away: Drawable? + private val offline: Drawable? private var none: Int = 0 private var activity: Int = 0 @@ -446,18 +445,18 @@ class BufferListAdapter( } } - online = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate() - away = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate() - offline = itemView.context.getCompatDrawable(R.drawable.ic_status_offline).mutate() + online = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate() + away = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate() + offline = itemView.context.getDrawableCompat(R.drawable.ic_status_offline)?.mutate() itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway, R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage, R.attr.colorTintHighlight ) { - DrawableCompat.setTint(online, getColor(0, 0)) - DrawableCompat.setTint(away, getColor(1, 0)) - DrawableCompat.setTint(offline, getColor(1, 0)) + online?.tint(getColor(0, 0)) + away?.tint(getColor(1, 0)) + offline?.tint(getColor(1, 0)) none = getColor(2, 0) activity = getColor(3, 0) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt index 048cd05ff528ed8250a99071ddc6a8f6fc5a0386..fab3a894beb732442782bc6780e669035dd225fc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt @@ -1,6 +1,7 @@ package de.kuschku.quasseldroid.ui.chat.buffers import android.arch.lifecycle.Observer +import android.os.Build import android.os.Bundle import android.support.v7.widget.* import android.view.* @@ -146,7 +147,11 @@ class BufferViewConfigFragment : ServiceBoundFragment() { } override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { - return false + mode?.tag = "MESSAGES" + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + mode?.type = ActionMode.TYPE_FLOATING + } + return true } override fun onDestroyActionMode(mode: ActionMode?) { diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt index b0d61f044b5e8607600913224dc834aa62c467cf..0f1903e0098b6fffe171b6d3ec47bb86d9711d38 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt @@ -1,7 +1,6 @@ package de.kuschku.quasseldroid.ui.chat.input import android.graphics.drawable.Drawable -import android.support.v4.graphics.drawable.DrawableCompat import android.support.v7.recyclerview.extensions.ListAdapter import android.support.v7.util.DiffUtil import android.support.v7.widget.RecyclerView @@ -14,8 +13,9 @@ import butterknife.BindView import butterknife.ButterKnife import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.ui.chat.nicks.NickListAdapter.Companion.VIEWTYPE_AWAY -import de.kuschku.quasseldroid.util.helper.getCompatDrawable +import de.kuschku.quasseldroid.util.helper.getDrawableCompat import de.kuschku.quasseldroid.util.helper.styledAttributes +import de.kuschku.quasseldroid.util.helper.tint import de.kuschku.quasseldroid.util.helper.visibleIf import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem import de.kuschku.quasseldroid.viewmodel.data.BufferStatus @@ -124,8 +124,8 @@ class AutoCompleteAdapter( var value: String? = null - private val online: Drawable - private val offline: Drawable + private val online: Drawable? + private val offline: Drawable? init { ButterKnife.bind(this, itemView) @@ -135,14 +135,14 @@ class AutoCompleteAdapter( clickListener?.invoke(value) } - online = itemView.context.getCompatDrawable(R.drawable.ic_status_channel).mutate() - offline = itemView.context.getCompatDrawable(R.drawable.ic_status_channel_offline).mutate() + online = itemView.context.getDrawableCompat(R.drawable.ic_status_channel)?.mutate() + offline = itemView.context.getDrawableCompat(R.drawable.ic_status_channel_offline)?.mutate() itemView.context.theme.styledAttributes( R.attr.colorAccent, R.attr.colorAway ) { - DrawableCompat.setTint(online, getColor(0, 0)) - DrawableCompat.setTint(offline, getColor(1, 0)) + online?.tint(getColor(0, 0)) + offline?.tint(getColor(1, 0)) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt index 60e006d67d6f5869394254aa31c383977564d8ce..7e0ef657707a718de34b17a2873ffbd64ae25f7f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt @@ -112,7 +112,8 @@ class MessageListFragment : ServiceBoundFragment() { } override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { - return false + mode?.tag = "MESSAGES" + return true } override fun onDestroyActionMode(mode: ActionMode?) { diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt index 4e27ecfd98f9c9ea696123250e696a056763ca3e..799414c5ce804c40309408a7427e25c80702055b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt @@ -13,6 +13,7 @@ import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.service.QuasselService import de.kuschku.quasseldroid.ui.chat.ChatActivity import de.kuschku.quasseldroid.util.helper.editApply +import de.kuschku.quasseldroid.util.helper.getColorCompat import de.kuschku.quasseldroid.util.helper.sharedPreferences import de.kuschku.quasseldroid.util.helper.systemService @@ -69,7 +70,7 @@ class QuasseldroidNotificationManager(private val context: Context) { .addAction(0, context.getString(R.string.label_open), pendingIntentOpen) .addAction(0, context.getString(R.string.label_disconnect), pendingIntentDisconnect) .setSmallIcon(R.drawable.ic_logo) - .setColor(context.resources.getColor(R.color.colorPrimary)) + .setColor(context.getColorCompat(R.color.colorPrimary)) .setPriority(NotificationCompat.PRIORITY_MIN) return Handle(BACKGROUND_NOTIFICATION_ID, notification) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt index df66c4fe5d585cefc00ed2b728bba53f1221aa41..e1f1a11afef33ea444ddf7f6d18a38402c24aebc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt @@ -2,21 +2,12 @@ package de.kuschku.quasseldroid.util.helper import android.content.Context import android.content.SharedPreferences -import android.graphics.drawable.Drawable import android.os.Build import android.preference.PreferenceManager import android.support.annotation.ColorInt import android.support.annotation.ColorRes import android.support.annotation.DrawableRes - -fun Context.getStatusBarHeight(): Int { - var result = 0 - val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android") - if (resourceId > 0) { - result = resources.getDimensionPixelSize(resourceId) - } - return result -} +import android.support.v4.content.ContextCompat inline fun <reified T> Context.systemService(): T = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -25,22 +16,10 @@ inline fun <reified T> Context.systemService(): T = getSystemService(T::class.java.simpleName) as T } -fun Context.getCompatDrawable(@DrawableRes id: Int): Drawable { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - this.resources.getDrawable(id, this.theme) - } else { - this.resources.getDrawable(id) - } -} +fun Context.getDrawableCompat(@DrawableRes id: Int) = ContextCompat.getDrawable(this, id) @ColorInt -fun Context.getCompatColor(@ColorRes id: Int): Int { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - this.resources.getColor(id, this.theme) - } else { - this.resources.getColor(id) - } -} +fun Context.getColorCompat(@ColorRes id: Int) = ContextCompat.getColor(this, id) fun <T> Context.sharedPreferences(name: String? = null, mode: Int = 0, diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt new file mode 100644 index 0000000000000000000000000000000000000000..90047347c1ccb41d250f90de710b707b944fc151 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt @@ -0,0 +1,7 @@ +package de.kuschku.quasseldroid.util.helper + +import android.graphics.drawable.Drawable +import android.support.annotation.ColorInt +import android.support.v4.graphics.drawable.DrawableCompat + +fun Drawable.tint(@ColorInt tint: Int) = DrawableCompat.setTint(this, tint) \ 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 d193007176471468ccba2ec4d835b6dc5ca76b0b..328f2cb3283c7b87e5a9ca32e69008db6fff8bfd 100644 --- a/app/src/main/res/layout/setup_account_connection.xml +++ b/app/src/main/res/layout/setup_account_connection.xml @@ -18,7 +18,6 @@ android:id="@+id/host" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/label_connection_host" android:inputType="textUri" /> </android.support.design.widget.TextInputLayout> @@ -34,7 +33,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" - android:hint="@string/labelConnectionPort" android:text="@string/defaultConnectionPort" /> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml index 471051625ff0a9c4870a49105da79c265e7f0af5..b95d98987eee13a6cb2d0050c30588d1791b28f3 100644 --- a/app/src/main/res/layout/setup_account_edit.xml +++ b/app/src/main/res/layout/setup_account_edit.xml @@ -43,7 +43,6 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/label_account_name" android:inputType="text" /> </android.support.design.widget.TextInputLayout> </LinearLayout> @@ -87,7 +86,6 @@ android:id="@+id/host" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/label_connection_host" android:inputType="textUri" /> </android.support.design.widget.TextInputLayout> @@ -107,7 +105,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" - android:hint="@string/labelConnectionPort" android:text="@string/defaultConnectionPort" /> </android.support.design.widget.TextInputLayout> </LinearLayout> @@ -153,7 +150,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textVisiblePassword|textNoSuggestions" - android:hint="@string/label_account_user" app:errorEnabled="true" /> </android.support.design.widget.TextInputLayout> @@ -169,7 +165,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" - android:hint="@string/label_account_pass" app:errorEnabled="true" /> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/setup_account_name.xml b/app/src/main/res/layout/setup_account_name.xml index 4b027e387e69524c2aa591abdcd70dc2c20bc842..7321ec065a4564e95f3f2adef275ebd36faf38b6 100644 --- a/app/src/main/res/layout/setup_account_name.xml +++ b/app/src/main/res/layout/setup_account_name.xml @@ -16,7 +16,6 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/label_account_name" android:inputType="text" /> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/setup_account_user.xml b/app/src/main/res/layout/setup_account_user.xml index 0ca50d27146751f197cec1efeb2dc9de1229892e..60214fa1df96c1389ddff97f841a5bebac4a2d04 100644 --- a/app/src/main/res/layout/setup_account_user.xml +++ b/app/src/main/res/layout/setup_account_user.xml @@ -16,7 +16,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textVisiblePassword|textNoSuggestions" - android:hint="@string/label_account_user" app:errorEnabled="true" /> </android.support.design.widget.TextInputLayout> @@ -32,7 +31,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" - android:hint="@string/label_account_pass" app:errorEnabled="true" /> </android.support.design.widget.TextInputLayout>