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

Access client settings, crashes and about from setup screen

parent 979a1d06
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 187 additions and 36 deletions
...@@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.networkserver ...@@ -3,9 +3,9 @@ package de.kuschku.quasseldroid.ui.coresettings.networkserver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork 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 { companion object {
fun launch( fun launch(
context: Context, context: Context,
......
...@@ -10,18 +10,25 @@ import android.support.design.widget.FloatingActionButton ...@@ -10,18 +10,25 @@ import android.support.design.widget.FloatingActionButton
import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter import android.support.v4.app.FragmentStatePagerAdapter
import android.support.v4.view.ViewPager import android.support.v4.view.ViewPager
import android.support.v7.widget.ActionMenuView
import android.util.SparseArray import android.util.SparseArray
import android.view.ViewGroup import android.view.ViewGroup
import butterknife.BindView import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import dagger.android.support.DaggerAppCompatActivity import dagger.android.support.DaggerAppCompatActivity
import de.kuschku.quasseldroid.R 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.observeSticky
import de.kuschku.quasseldroid.util.helper.or import de.kuschku.quasseldroid.util.helper.or
import de.kuschku.quasseldroid.util.helper.switchMap import de.kuschku.quasseldroid.util.helper.switchMap
import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting
abstract class SetupActivity : DaggerAppCompatActivity() { abstract class SetupActivity : DaggerAppCompatActivity() {
@BindView(R.id.menu_view)
lateinit var menuView: ActionMenuView
@BindView(R.id.view_pager) @BindView(R.id.view_pager)
lateinit var viewPager: ViewPager lateinit var viewPager: ViewPager
...@@ -80,6 +87,26 @@ abstract class SetupActivity : DaggerAppCompatActivity() { ...@@ -80,6 +87,26 @@ abstract class SetupActivity : DaggerAppCompatActivity() {
setContentView(R.layout.activity_setup) setContentView(R.layout.activity_setup)
ButterKnife.bind(this) 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) adapter = SlidePagerAdapter(supportFragmentManager)
fragments.forEach(adapter::addFragment) fragments.forEach(adapter::addFragment)
viewPager.adapter = adapter viewPager.adapter = adapter
......
...@@ -8,32 +8,23 @@ import android.content.SharedPreferences ...@@ -8,32 +8,23 @@ import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.support.annotation.ColorRes import android.support.annotation.ColorRes
import android.support.annotation.DrawableRes 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.session.Backend
import de.kuschku.libquassel.util.Optional import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.Keys import de.kuschku.quasseldroid.Keys
import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.settings.AppearanceSettings
import de.kuschku.quasseldroid.settings.AutoCompleteSettings import de.kuschku.quasseldroid.settings.AutoCompleteSettings
import de.kuschku.quasseldroid.settings.ConnectionSettings import de.kuschku.quasseldroid.settings.ConnectionSettings
import de.kuschku.quasseldroid.settings.Settings import de.kuschku.quasseldroid.settings.Settings
import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity
import de.kuschku.quasseldroid.util.helper.sharedPreferences import de.kuschku.quasseldroid.util.helper.sharedPreferences
import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting
import de.kuschku.quasseldroid.util.ui.ThemedActivity
import de.kuschku.quasseldroid.viewmodel.QuasselViewModel import de.kuschku.quasseldroid.viewmodel.QuasselViewModel
import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject
import javax.inject.Inject import javax.inject.Inject
abstract class ServiceBoundActivity : AppCompatActivity(), abstract class ServiceBoundActivity : ThemedActivity(),
SharedPreferences.OnSharedPreferenceChangeListener, SharedPreferences.OnSharedPreferenceChangeListener {
HasSupportFragmentInjector,
HasFragmentInjector {
@DrawableRes @DrawableRes
protected val icon: Int = R.mipmap.ic_launcher_recents protected val icon: Int = R.mipmap.ic_launcher_recents
@ColorRes @ColorRes
...@@ -43,20 +34,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(), ...@@ -43,20 +34,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(),
protected val backend: BehaviorSubject<Optional<Backend>> protected val backend: BehaviorSubject<Optional<Backend>>
get() = connection.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) { protected fun runInBackground(f: () -> Unit) {
connection.backend.value.ifPresent { connection.backend.value.ifPresent {
it.sessionManager().handlerService.backend(f) it.sessionManager().handlerService.backend(f)
...@@ -69,9 +46,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(), ...@@ -69,9 +46,6 @@ abstract class ServiceBoundActivity : AppCompatActivity(),
} }
} }
@Inject
lateinit var appearanceSettings: AppearanceSettings
@Inject @Inject
lateinit var autoCompleteSettings: AutoCompleteSettings lateinit var autoCompleteSettings: AutoCompleteSettings
...@@ -85,10 +59,8 @@ abstract class ServiceBoundActivity : AppCompatActivity(), ...@@ -85,10 +59,8 @@ abstract class ServiceBoundActivity : AppCompatActivity(),
private var startedSelection = false private var startedSelection = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
connection.context = this connection.context = this
checkConnection() checkConnection()
setTheme(appearanceSettings.theme.style)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(this)[QuasselViewModel::class.java] viewModel = ViewModelProviders.of(this)[QuasselViewModel::class.java]
viewModel.backendWrapper.onNext(this.backend) viewModel.backendWrapper.onNext(this.backend)
......
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)
}
}
...@@ -9,9 +9,8 @@ import butterknife.ButterKnife ...@@ -9,9 +9,8 @@ import butterknife.ButterKnife
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment 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 protected open fun fragment(): Fragment? = null
private var changeable: SettingsFragment.Changeable? = null private var changeable: SettingsFragment.Changeable? = null
......
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
}
}
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="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.support.design.widget.FloatingActionButton
android:id="@+id/next_button" android:id="@+id/next_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="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.support.design.widget.FloatingActionButton
android:id="@+id/next_button" android:id="@+id/next_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="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.support.design.widget.FloatingActionButton
android:id="@+id/next_button" android:id="@+id/next_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
<?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>
...@@ -38,7 +38,10 @@ ...@@ -38,7 +38,10 @@
<style name="Theme.Base.ChatTheme.Light" parent="Theme.AppTheme.Light.NoActionBar" /> <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"> <style name="Theme.SplashTheme" parent="Theme.AppTheme.Light.NoActionBar">
<item name="android:windowBackground">@drawable/bg_splash</item> <item name="android:windowBackground">@drawable/bg_splash</item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment