From f0eb83fc12a646dec3eb30ffc8ca1602d6068f4a Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 19 Apr 2018 00:15:27 +0200 Subject: [PATCH] Access client settings, crashes and about from setup screen --- .../chat/info/channel/ChannelInfoActivity.kt | 4 +- .../ui/chat/info/user/UserInfoActivity.kt | 4 +- .../ui/chat/topic/TopicActivity.kt | 4 +- .../clientsettings/app/AppSettingsActivity.kt | 22 ------ .../clientsettings/app/AppSettingsFragment.kt | 27 +++++++ .../crash/CrashSettingsFragment.kt | 6 +- .../ui/coresettings/CoreSettingsActivity.kt | 4 +- .../aliasitem/AliasItemActivity.kt | 4 +- .../aliaslist/AliasListActivity.kt | 4 +- .../chatlist/ChatlistCreateActivity.kt | 4 +- .../chatlist/ChatlistEditActivity.kt | 4 +- .../highlightlist/HighlightListActivity.kt | 4 +- .../highlightrule/HighlightRuleActivity.kt | 4 +- .../identity/IdentityCreateActivity.kt | 4 +- .../identity/IdentityEditActivity.kt | 4 +- .../ignoreitem/IgnoreItemActivity.kt | 4 +- .../ignorelist/IgnoreListActivity.kt | 4 +- .../network/NetworkCreateActivity.kt | 4 +- .../network/NetworkEditActivity.kt | 4 +- .../networkconfig/NetworkConfigActivity.kt | 4 +- .../networkserver/NetworkServerActivity.kt | 4 +- .../quasseldroid/ui/setup/SetupActivity.kt | 27 +++++++ .../util/service/ServiceBoundActivity.kt | 34 +------- .../util/ui/ServiceBoundSettingsActivity.kt | 79 +++++++++++++++++++ .../quasseldroid/util/ui/SettingsActivity.kt | 3 +- .../quasseldroid/util/ui/ThemedActivity.kt | 38 +++++++++ .../layout-sw600dp-land/activity_setup.xml | 7 ++ .../res/layout-sw600dp/activity_setup.xml | 7 ++ app/src/main/res/layout/activity_setup.xml | 7 ++ app/src/main/res/menu/activity_setup.xml | 12 +++ app/src/main/res/values/themes_base.xml | 5 +- 31 files changed, 251 insertions(+), 95 deletions(-) create mode 100644 app/src/main/java/de/kuschku/quasseldroid/util/ui/ServiceBoundSettingsActivity.kt create mode 100644 app/src/main/java/de/kuschku/quasseldroid/util/ui/ThemedActivity.kt create mode 100644 app/src/main/res/menu/activity_setup.xml diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt index e61e55817..2b5bedf11 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.chat.info.channel import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class ChannelInfoActivity : SettingsActivity(ChannelInfoFragment()) { +class ChannelInfoActivity : ServiceBoundSettingsActivity(ChannelInfoFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt index d26e2b3c9..af902b81c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt @@ -4,9 +4,9 @@ import android.content.Context import android.content.Intent import de.kuschku.libquassel.protocol.BufferId import de.kuschku.libquassel.protocol.NetworkId -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class UserInfoActivity : SettingsActivity(UserInfoFragment()) { +class UserInfoActivity : ServiceBoundSettingsActivity(UserInfoFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt index bf935c2e6..6df8ee88a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.chat.topic import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class TopicActivity : SettingsActivity(TopicFragment()) { +class TopicActivity : ServiceBoundSettingsActivity(TopicFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt index 36831b076..b42b38709 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt @@ -2,31 +2,9 @@ package de.kuschku.quasseldroid.ui.clientsettings.app import android.content.Context import android.content.Intent -import android.view.Menu -import android.view.MenuItem -import de.kuschku.quasseldroid.R -import de.kuschku.quasseldroid.ui.clientsettings.about.AboutSettingsActivity -import de.kuschku.quasseldroid.ui.clientsettings.crash.CrashSettingsActivity import de.kuschku.quasseldroid.util.ui.SettingsActivity class AppSettingsActivity : SettingsActivity(AppSettingsFragment()) { - override fun onCreateOptionsMenu(menu: Menu?): Boolean { - menuInflater.inflate(R.menu.activity_settings, menu) - return super.onCreateOptionsMenu(menu) - } - - override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) { - R.id.action_about -> { - AboutSettingsActivity.launch(this) - true - } - R.id.action_crashes -> { - CrashSettingsActivity.launch(this) - true - } - else -> super.onOptionsItemSelected(item) - } - companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, AppSettingsActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsFragment.kt index e734b759a..db3ce7a5a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsFragment.kt @@ -5,9 +5,14 @@ import android.os.Bundle import android.support.v7.preference.ListPreference import android.support.v7.preference.Preference import android.support.v7.preference.PreferenceGroup +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.Settings +import de.kuschku.quasseldroid.ui.clientsettings.about.AboutSettingsActivity +import de.kuschku.quasseldroid.ui.clientsettings.crash.CrashSettingsActivity import de.kuschku.quasseldroid.util.backport.DaggerPreferenceFragmentCompat import javax.inject.Inject @@ -16,6 +21,11 @@ class AppSettingsFragment : DaggerPreferenceFragmentCompat(), @Inject lateinit var appearanceSettings: AppearanceSettings + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } @@ -51,4 +61,21 @@ class AppSettingsFragment : DaggerPreferenceFragmentCompat(), updateSummary(preference) } } + + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + inflater?.inflate(R.menu.activity_settings, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) { + R.id.action_about -> { + AboutSettingsActivity.launch(requireContext()) + true + } + R.id.action_crashes -> { + CrashSettingsActivity.launch(requireContext()) + true + } + else -> super.onOptionsItemSelected(item) + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsFragment.kt index b3e3fff99..6d8c9a90b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsFragment.kt @@ -13,13 +13,13 @@ import butterknife.BindView import butterknife.ButterKnife import com.google.gson.Gson import com.google.gson.GsonBuilder +import dagger.android.support.DaggerFragment import de.kuschku.malheur.data.Report import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.util.helper.fromJson -import de.kuschku.quasseldroid.util.service.ServiceBoundFragment import java.io.File -class CrashSettingsFragment : ServiceBoundFragment() { +class CrashSettingsFragment : DaggerFragment() { @BindView(R.id.list) lateinit var list: RecyclerView @@ -85,7 +85,7 @@ class CrashSettingsFragment : ServiceBoundFragment() { override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) { R.id.action_delete_all -> { - runInBackground { + handler.post { crashDir?.mkdirs() crashDir?.listFiles()?.forEach { it.delete() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt index e45c52096..604b7ccd9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class CoreSettingsActivity : SettingsActivity(CoreSettingsFragment()) { +class CoreSettingsActivity : ServiceBoundSettingsActivity(CoreSettingsFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, CoreSettingsActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemActivity.kt index 58311483b..afcb96641 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.aliasitem import android.content.Context import android.content.Intent import de.kuschku.libquassel.quassel.syncables.interfaces.IAliasManager -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class AliasItemActivity : SettingsActivity(AliasItemFragment()) { +class AliasItemActivity : ServiceBoundSettingsActivity(AliasItemFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListActivity.kt index c55e49397..7c2cfd135 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.aliaslist import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class AliasListActivity : SettingsActivity(AliasListFragment()) { +class AliasListActivity : ServiceBoundSettingsActivity(AliasListFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, AliasListActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistCreateActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistCreateActivity.kt index 9f5c304df..af707989f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistCreateActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistCreateActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.chatlist import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class ChatlistCreateActivity : SettingsActivity(ChatListCreateFragment()) { +class ChatlistCreateActivity : ServiceBoundSettingsActivity(ChatListCreateFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, ChatlistCreateActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistEditActivity.kt index 07d9c196c..de92cd964 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistEditActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatlistEditActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.chatlist import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class ChatlistEditActivity : SettingsActivity(ChatListEditFragment()) { +class ChatlistEditActivity : ServiceBoundSettingsActivity(ChatListEditFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListActivity.kt index cb731e56f..0faa06e1f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.highlightlist import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class HighlightListActivity : SettingsActivity(HighlightListFragment()) { +class HighlightListActivity : ServiceBoundSettingsActivity(HighlightListFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, HighlightListActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt index 91d3792c5..81cb99315 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.highlightrule import android.content.Context import android.content.Intent import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class HighlightRuleActivity : SettingsActivity(HighlightRuleFragment()) { +class HighlightRuleActivity : ServiceBoundSettingsActivity(HighlightRuleFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityCreateActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityCreateActivity.kt index f6a8239a6..715ef4302 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityCreateActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityCreateActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.identity import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class IdentityCreateActivity : SettingsActivity(IdentityCreateFragment()) { +class IdentityCreateActivity : ServiceBoundSettingsActivity(IdentityCreateFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, IdentityCreateActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityEditActivity.kt index c9ec38bdb..e0daff5ad 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityEditActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityEditActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.identity import android.content.Context import android.content.Intent import de.kuschku.libquassel.protocol.IdentityId -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class IdentityEditActivity : SettingsActivity(IdentityEditFragment()) { +class IdentityEditActivity : ServiceBoundSettingsActivity(IdentityEditFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt index b8275b5fd..ccc615456 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.ignoreitem import android.content.Context import android.content.Intent import de.kuschku.libquassel.quassel.syncables.IgnoreListManager -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class IgnoreItemActivity : SettingsActivity(IgnoreItemFragment()) { +class IgnoreItemActivity : ServiceBoundSettingsActivity(IgnoreItemFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt index 66c55a9b2..eec222b11 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.ignorelist import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class IgnoreListActivity : SettingsActivity(IgnoreListFragment()) { +class IgnoreListActivity : ServiceBoundSettingsActivity(IgnoreListFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, IgnoreListActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkCreateActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkCreateActivity.kt index 25ef7bf72..daa8c732c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkCreateActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkCreateActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.network import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class NetworkCreateActivity : SettingsActivity(NetworkCreateFragment()) { +class NetworkCreateActivity : ServiceBoundSettingsActivity(NetworkCreateFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, NetworkCreateActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditActivity.kt index f813c0565..0750a1b73 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.network import android.content.Context import android.content.Intent import de.kuschku.libquassel.protocol.NetworkId -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class NetworkEditActivity : SettingsActivity(NetworkEditFragment()) { +class NetworkEditActivity : ServiceBoundSettingsActivity(NetworkEditFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt index c7918c176..727bb1d36 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt @@ -2,9 +2,9 @@ package de.kuschku.quasseldroid.ui.coresettings.networkconfig import android.content.Context import android.content.Intent -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class NetworkConfigActivity : SettingsActivity(NetworkConfigFragment()) { +class NetworkConfigActivity : ServiceBoundSettingsActivity(NetworkConfigFragment()) { companion object { fun launch(context: Context) = context.startActivity(intent(context)) fun intent(context: Context) = Intent(context, NetworkConfigActivity::class.java) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/NetworkServerActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/NetworkServerActivity.kt index 9a9281c6f..d9a30d6bf 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/NetworkServerActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/NetworkServerActivity.kt @@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.networkserver import android.content.Context import android.content.Intent import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork -import de.kuschku.quasseldroid.util.ui.SettingsActivity +import de.kuschku.quasseldroid.util.ui.ServiceBoundSettingsActivity -class NetworkServerActivity : SettingsActivity(NetworkServerFragment()) { +class NetworkServerActivity : ServiceBoundSettingsActivity(NetworkServerFragment()) { companion object { fun launch( context: Context, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt index ee6e7bd9d..6eee73e76 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt @@ -10,18 +10,25 @@ import android.support.design.widget.FloatingActionButton import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentStatePagerAdapter import android.support.v4.view.ViewPager +import android.support.v7.widget.ActionMenuView import android.util.SparseArray import android.view.ViewGroup import butterknife.BindView import butterknife.ButterKnife import dagger.android.support.DaggerAppCompatActivity import de.kuschku.quasseldroid.R +import de.kuschku.quasseldroid.ui.clientsettings.about.AboutSettingsActivity +import de.kuschku.quasseldroid.ui.clientsettings.app.AppSettingsActivity +import de.kuschku.quasseldroid.ui.clientsettings.crash.CrashSettingsActivity import de.kuschku.quasseldroid.util.helper.observeSticky import de.kuschku.quasseldroid.util.helper.or import de.kuschku.quasseldroid.util.helper.switchMap import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting abstract class SetupActivity : DaggerAppCompatActivity() { + @BindView(R.id.menu_view) + lateinit var menuView: ActionMenuView + @BindView(R.id.view_pager) lateinit var viewPager: ViewPager @@ -80,6 +87,26 @@ abstract class SetupActivity : DaggerAppCompatActivity() { setContentView(R.layout.activity_setup) ButterKnife.bind(this) + menuView.popupTheme = R.style.Widget_PopupOverlay_Light + menuInflater.inflate(R.menu.activity_setup, menuView.menu) + menuView.setOnMenuItemClickListener { + when (it.itemId) { + R.id.action_client_settings -> { + AppSettingsActivity.launch(this) + true + } + R.id.action_crashes -> { + CrashSettingsActivity.launch(this) + true + } + R.id.action_about -> { + AboutSettingsActivity.launch(this) + true + } + else -> false + } + } + adapter = SlidePagerAdapter(supportFragmentManager) fragments.forEach(adapter::addFragment) viewPager.adapter = adapter diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt index 15ee758d7..436508774 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt @@ -8,32 +8,23 @@ import android.content.SharedPreferences import android.os.Bundle import android.support.annotation.ColorRes import android.support.annotation.DrawableRes -import android.support.v4.app.Fragment -import android.support.v7.app.AppCompatActivity -import dagger.android.AndroidInjection -import dagger.android.AndroidInjector -import dagger.android.DispatchingAndroidInjector -import dagger.android.HasFragmentInjector -import dagger.android.support.HasSupportFragmentInjector import de.kuschku.libquassel.session.Backend import de.kuschku.libquassel.util.Optional import de.kuschku.quasseldroid.Keys import de.kuschku.quasseldroid.R -import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.AutoCompleteSettings import de.kuschku.quasseldroid.settings.ConnectionSettings import de.kuschku.quasseldroid.settings.Settings import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity import de.kuschku.quasseldroid.util.helper.sharedPreferences import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting +import de.kuschku.quasseldroid.util.ui.ThemedActivity import de.kuschku.quasseldroid.viewmodel.QuasselViewModel import io.reactivex.subjects.BehaviorSubject import javax.inject.Inject -abstract class ServiceBoundActivity : AppCompatActivity(), - SharedPreferences.OnSharedPreferenceChangeListener, - HasSupportFragmentInjector, - HasFragmentInjector { +abstract class ServiceBoundActivity : ThemedActivity(), + SharedPreferences.OnSharedPreferenceChangeListener { @DrawableRes protected val icon: Int = R.mipmap.ic_launcher_recents @ColorRes @@ -43,20 +34,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(), protected val backend: BehaviorSubject<Optional<Backend>> get() = connection.backend - @Inject - lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment> - - @Inject - lateinit var frameworkFragmentInjector: DispatchingAndroidInjector<android.app.Fragment> - - override fun supportFragmentInjector(): AndroidInjector<Fragment>? { - return supportFragmentInjector - } - - override fun fragmentInjector(): AndroidInjector<android.app.Fragment>? { - return frameworkFragmentInjector - } - protected fun runInBackground(f: () -> Unit) { connection.backend.value.ifPresent { it.sessionManager().handlerService.backend(f) @@ -69,9 +46,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(), } } - @Inject - lateinit var appearanceSettings: AppearanceSettings - @Inject lateinit var autoCompleteSettings: AutoCompleteSettings @@ -85,10 +59,8 @@ abstract class ServiceBoundActivity : AppCompatActivity(), private var startedSelection = false override fun onCreate(savedInstanceState: Bundle?) { - AndroidInjection.inject(this) connection.context = this checkConnection() - setTheme(appearanceSettings.theme.style) super.onCreate(savedInstanceState) viewModel = ViewModelProviders.of(this)[QuasselViewModel::class.java] viewModel.backendWrapper.onNext(this.backend) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ServiceBoundSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ServiceBoundSettingsActivity.kt new file mode 100644 index 000000000..30d155037 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ServiceBoundSettingsActivity.kt @@ -0,0 +1,79 @@ +package de.kuschku.quasseldroid.util.ui + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.Toolbar +import android.view.MenuItem +import butterknife.BindView +import butterknife.ButterKnife +import com.afollestad.materialdialogs.MaterialDialog +import de.kuschku.quasseldroid.R +import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment +import de.kuschku.quasseldroid.util.service.ServiceBoundActivity + +abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = null) : + ServiceBoundActivity() { + protected open fun fragment(): Fragment? = null + + private var changeable: SettingsFragment.Changeable? = null + + @BindView(R.id.toolbar) + lateinit var toolbar: Toolbar + + override fun onCreate(savedInstanceState: Bundle?) { + val arguments = intent.extras + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_settings) + ButterKnife.bind(this) + + setSupportActionBar(toolbar) + supportActionBar?.setDisplayHomeAsUpEnabled(true) + + val fragment = this.fragment ?: this.fragment() + if (fragment != null) { + val transaction = supportFragmentManager.beginTransaction() + fragment.arguments = arguments + transaction.replace(R.id.fragment_container, fragment) + transaction.commit() + } + + this.changeable = fragment as? SettingsFragment.Changeable + } + + private fun shouldNavigateAway(callback: () -> Unit) { + val changeable = this.changeable + if (changeable?.hasChanged() == true) { + MaterialDialog.Builder(this) + .content(R.string.cancel_confirmation) + .positiveText(R.string.label_yes) + .negativeText(R.string.label_no) + .negativeColorAttr(R.attr.colorTextPrimary) + .backgroundColorAttr(R.attr.colorBackgroundCard) + .contentColorAttr(R.attr.colorTextPrimary) + .onPositive { _, _ -> + callback() + } + .build() + .show() + } else callback() + } + + override fun onBackPressed() = shouldNavigateAway { + super.onBackPressed() + } + + override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) { + android.R.id.home -> { + shouldNavigateAway { + if (supportParentActivityIntent != null) { + startActivity(supportParentActivityIntent) + finish() + } else { + super.onBackPressed() + } + } + true + } + else -> super.onOptionsItemSelected(item) + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/SettingsActivity.kt index 9f52b3f5c..e2883e884 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/SettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/SettingsActivity.kt @@ -9,9 +9,8 @@ import butterknife.ButterKnife import com.afollestad.materialdialogs.MaterialDialog import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment -import de.kuschku.quasseldroid.util.service.ServiceBoundActivity -abstract class SettingsActivity(private val fragment: Fragment? = null) : ServiceBoundActivity() { +abstract class SettingsActivity(private val fragment: Fragment? = null) : ThemedActivity() { protected open fun fragment(): Fragment? = null private var changeable: SettingsFragment.Changeable? = null diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ThemedActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ThemedActivity.kt new file mode 100644 index 000000000..b61af035a --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ThemedActivity.kt @@ -0,0 +1,38 @@ +package de.kuschku.quasseldroid.util.ui + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.app.AppCompatActivity +import dagger.android.AndroidInjection +import dagger.android.AndroidInjector +import dagger.android.DispatchingAndroidInjector +import dagger.android.HasFragmentInjector +import dagger.android.support.HasSupportFragmentInjector +import de.kuschku.quasseldroid.settings.AppearanceSettings +import javax.inject.Inject + +abstract class ThemedActivity : AppCompatActivity(), HasSupportFragmentInjector, + HasFragmentInjector { + @Inject + lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment> + + @Inject + lateinit var frameworkFragmentInjector: DispatchingAndroidInjector<android.app.Fragment> + + @Inject + lateinit var appearanceSettings: AppearanceSettings + + override fun onCreate(savedInstanceState: Bundle?) { + AndroidInjection.inject(this) + setTheme(appearanceSettings.theme.style) + super.onCreate(savedInstanceState) + } + + override fun supportFragmentInjector(): AndroidInjector<Fragment>? { + return supportFragmentInjector + } + + override fun fragmentInjector(): AndroidInjector<android.app.Fragment>? { + return frameworkFragmentInjector + } +} diff --git a/app/src/main/res/layout-sw600dp-land/activity_setup.xml b/app/src/main/res/layout-sw600dp-land/activity_setup.xml index 31d62bdce..695362d64 100644 --- a/app/src/main/res/layout-sw600dp-land/activity_setup.xml +++ b/app/src/main/res/layout-sw600dp-land/activity_setup.xml @@ -9,6 +9,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + <android.support.v7.widget.ActionMenuView + android:id="@+id/menu_view" + android:layout_width="?actionBarSize" + android:layout_height="?actionBarSize" + android:layout_gravity="end|top" + android:theme="?attr/actionBarTheme" /> + <android.support.design.widget.FloatingActionButton android:id="@+id/next_button" android:layout_width="wrap_content" diff --git a/app/src/main/res/layout-sw600dp/activity_setup.xml b/app/src/main/res/layout-sw600dp/activity_setup.xml index 31d62bdce..695362d64 100644 --- a/app/src/main/res/layout-sw600dp/activity_setup.xml +++ b/app/src/main/res/layout-sw600dp/activity_setup.xml @@ -9,6 +9,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + <android.support.v7.widget.ActionMenuView + android:id="@+id/menu_view" + android:layout_width="?actionBarSize" + android:layout_height="?actionBarSize" + android:layout_gravity="end|top" + android:theme="?attr/actionBarTheme" /> + <android.support.design.widget.FloatingActionButton android:id="@+id/next_button" android:layout_width="wrap_content" diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml index a0a74dc86..6d982518a 100644 --- a/app/src/main/res/layout/activity_setup.xml +++ b/app/src/main/res/layout/activity_setup.xml @@ -9,6 +9,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + <android.support.v7.widget.ActionMenuView + android:id="@+id/menu_view" + android:layout_width="?actionBarSize" + android:layout_height="?actionBarSize" + android:layout_gravity="end|top" + android:theme="?attr/actionBarTheme" /> + <android.support.design.widget.FloatingActionButton android:id="@+id/next_button" android:layout_width="wrap_content" diff --git a/app/src/main/res/menu/activity_setup.xml b/app/src/main/res/menu/activity_setup.xml new file mode 100644 index 000000000..8e26096af --- /dev/null +++ b/app/src/main/res/menu/activity_setup.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:id="@+id/action_client_settings" + android:title="@string/label_settings_client" /> + <item + android:id="@+id/action_crashes" + android:title="@string/label_crashes" /> + <item + android:id="@+id/action_about" + android:title="@string/label_about" /> +</menu> diff --git a/app/src/main/res/values/themes_base.xml b/app/src/main/res/values/themes_base.xml index 90530c4b2..81a56512e 100644 --- a/app/src/main/res/values/themes_base.xml +++ b/app/src/main/res/values/themes_base.xml @@ -38,7 +38,10 @@ <style name="Theme.Base.ChatTheme.Light" parent="Theme.AppTheme.Light.NoActionBar" /> - <style name="Theme.SetupTheme" parent="Theme.AppTheme.Light.NoActionBar" /> + <style name="Theme.SetupTheme" parent="Theme.AppTheme.Light.NoActionBar"> + <item name="actionBarTheme">@style/Widget.AppBarOverlay</item> + <item name="actionBarPopupTheme">@style/Widget.PopupOverlay.Light</item> + </style> <style name="Theme.SplashTheme" parent="Theme.AppTheme.Light.NoActionBar"> <item name="android:windowBackground">@drawable/bg_splash</item> -- GitLab