Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion buildSrc/src/main/java/dependencies/Dep.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package dependencies
@Suppress("unused")
object Dep {
object GradlePlugin {
val android = "com.android.tools.build:gradle:3.4.0-beta03"
val android = "com.android.tools.build:gradle:3.4.0-beta05"
val r8 = "com.android.tools:r8:1.3.52"
val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Kotlin.version}"
val kotlinSerialization = "org.jetbrains.kotlin:kotlin-serialization:${Kotlin.version}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,6 @@ sealed class Action {
data class SessionSurveyLoaded(val sessionFeedback: SessionFeedback) : Action()

class FloorMapLoadingStateChanged(val loadingState: LoadingState) : Action()

data class SettingContentsChanged(val contents : MutableMap<String, Boolean>) : Action()
}
1 change: 1 addition & 0 deletions feature/about/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ dependencies {
testImplementation Dep.Test.junit
androidTestImplementation Dep.Test.testRunner
androidTestImplementation Dep.Test.espressoCore
compile project(path: ':feature:system')
}

static def getCommitHash() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ import com.xwray.groupie.GroupAdapter
import com.xwray.groupie.ViewHolder
import dagger.Module
import dagger.Provides
import dagger.android.support.DaggerFragment
import io.github.droidkaigi.confsched2019.about.R
import io.github.droidkaigi.confsched2019.about.databinding.FragmentAboutBinding
import io.github.droidkaigi.confsched2019.about.ui.item.AboutSection
import io.github.droidkaigi.confsched2019.about.ui.widget.DaggerFragment
import io.github.droidkaigi.confsched2019.about.ui.widget.DottedItemDecoration
import io.github.droidkaigi.confsched2019.di.PageScope
import io.github.droidkaigi.confsched2019.ext.changed
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package io.github.droidkaigi.confsched2019.about.ui.widget
package io.github.droidkaigi.confsched2019.settings.ui

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.preference.PreferenceFragmentCompat
import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector
import dagger.android.support.AndroidSupportInjection
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.github.droidkaigi.confsched2019.settings.ui

import io.github.droidkaigi.confsched2019.action.Action
import io.github.droidkaigi.confsched2019.dispatcher.Dispatcher
import io.github.droidkaigi.confsched2019.model.SettingContents
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import kotlinx.coroutines.plus
import javax.inject.Inject

class PreferenceActionCreator @Inject constructor(
val dispatcher: Dispatcher)
: CoroutineScope by GlobalScope + SupervisorJob() {
fun submit(action: Action)=launch {
dispatcher.dispatch(action)

}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,95 @@
package io.github.droidkaigi.confsched2019.settings.ui

import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CheckBox
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import dagger.Module
import dagger.Provides
import io.github.droidkaigi.confsched2019.di.PageScope
import io.github.droidkaigi.confsched2019.model.SettingContents
import io.github.droidkaigi.confsched2019.settings.R
import java.lang.RuntimeException
import javax.inject.Inject

class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
class SettingsFragment : Fragment() {


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.settings_fragment, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val sessionTitleValue = android.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SESSION_TITLE, false)
val sessionUrlValue = android.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SESSION_URL, false)
val eventHashtagValue = android.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(EVENT_HUSHTAG, false)
val roomHashtagValue = android.preference.PreferenceManager.getDefaultSharedPreferences(context).getBoolean(ROOM_HUSHTAG, false)

val settingContents = SettingContents()
settingContents.preferences[SESSION_TITLE] = sessionTitleValue
settingContents.preferences[SESSION_URL] = sessionUrlValue
settingContents.preferences[EVENT_HUSHTAG] = eventHashtagValue
settingContents.preferences[ROOM_HUSHTAG] = roomHashtagValue

view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.session_title_key).isChecked = settingContents.preferences[SESSION_TITLE]!!
view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.session_title_key).setOnCheckedChangeListener { buttonView, isChecked ->
android.preference.PreferenceManager.getDefaultSharedPreferences(context).edit()
.putBoolean(SESSION_TITLE,isChecked)
.apply()
}
view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.session_url_key).isChecked = settingContents.preferences [SESSION_URL]!!
view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.session_url_key).setOnCheckedChangeListener { buttonView, isChecked ->
android.preference.PreferenceManager.getDefaultSharedPreferences(context).edit()
.putBoolean(SESSION_URL, isChecked)
.apply()
}

view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.event_hashtag_key).isChecked = settingContents.preferences [EVENT_HUSHTAG]!!
view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.event_hashtag_key).setOnCheckedChangeListener { buttonView, isChecked ->
android.preference.PreferenceManager.getDefaultSharedPreferences(context).edit()
.putBoolean(EVENT_HUSHTAG, isChecked)
.apply()
}


view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.room_hashtag_key).isChecked = settingContents.preferences [ROOM_HUSHTAG]!!
view.findViewById<CheckBox>(io.github.droidkaigi.confsched2019.settings.R.id.room_hashtag_key).setOnCheckedChangeListener { buttonView, isChecked ->
android.preference.PreferenceManager.getDefaultSharedPreferences(context).edit()
.putBoolean(ROOM_HUSHTAG, isChecked)
.apply()
}

}

companion object {
private const val SESSION_TITLE = "session_title_key"
private const val SESSION_URL = "session_url_key"
private const val EVENT_HUSHTAG = "event_hashtag_key"
private const val ROOM_HUSHTAG = "room_hashtag_key"
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
}
}

@Module
abstract class SettingsFragmentModule {
@Module
companion object {
@PageScope
@JvmStatic
@Provides
fun providesLifecycle(
settingsFragment: SettingsFragment
): Lifecycle {
return settingsFragment.viewLifecycleOwner.lifecycle
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.github.droidkaigi.confsched2019.settings.ui

import androidx.lifecycle.LiveData
import io.github.droidkaigi.confsched2019.action.Action
import io.github.droidkaigi.confsched2019.dispatcher.Dispatcher
import io.github.droidkaigi.confsched2019.ext.toLiveData
import io.github.droidkaigi.confsched2019.model.SettingContents
import io.github.droidkaigi.confsched2019.store.Store
import kotlinx.coroutines.channels.map
import javax.inject.Inject
import javax.inject.Singleton

class SettingsStore @Inject constructor(
dispatcher: Dispatcher
) : Store() {

val settingsResult : LiveData<SettingContents> = dispatcher

.subscribe<Action.SettingContentsChanged>()
.map { SettingContents(it.contents) }
.toLiveData(this, null)
}
121 changes: 121 additions & 0 deletions feature/settings/src/main/res/layout/settings_fragment.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<CheckBox
android:id="@+id/session_title_key"
android:layout_width="335dp"
android:layout_height="25dp"
android:layout_marginStart="32dp"
android:layout_marginTop="100dp"
android:contentDescription="@string/session_title_summary"
android:key="@string/session_title_key"
android:text="@string/session_title_title"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints"
/>

<CheckBox
android:id="@+id/session_url_key"
android:layout_width="333dp"
android:layout_height="29dp"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/session_url_summary"
android:key="@string/session_url_key"
android:text="@string/session_url_title"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
tools:ignore="MissingConstraints"
/>

<CheckBox
android:id="@+id/event_hashtag_key"
android:layout_width="334dp"
android:layout_height="28dp"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/event_hashtag_summary"
android:key="@string/event_hashtag_key"
android:text="@string/event_hashtag_title"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
tools:ignore="MissingConstraints"
/>

<CheckBox
android:id="@+id/room_hashtag_key"
android:layout_width="334dp"
android:layout_height="28dp"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/room_hashtag_summary"
android:key="@string/room_hashtag_key"
android:text="@string/room_hashtag_title"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
tools:ignore="MissingConstraints"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
android:layout_marginStart="16dp"
android:text="@string/share_setting_title"
android:textColor="@color/design_default_color_on_secondary"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/session_title_key"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/session_url_summary"
app:layout_constraintStart_toStartOf="@+id/textView4"
app:layout_constraintTop_toBottomOf="@+id/session_url_key"
/>

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="@string/event_hashtag_summary"
app:layout_constraintStart_toStartOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/event_hashtag_key"
/>

<TextView
android:id="@+id/textView4"
android:layout_width="242dp"
android:layout_height="38dp"
android:layout_marginStart="59dp"
android:text="@string/session_title_summary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/session_title_key"
/>

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/room_hashtag_summary"
app:layout_constraintStart_toStartOf="@+id/textView3"
app:layout_constraintTop_toBottomOf="@+id/room_hashtag_key"
/>

</androidx.constraintlayout.widget.ConstraintLayout>
7 changes: 7 additions & 0 deletions feature/settings/src/main/res/values/bools.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="session_title_default">true</bool>
<bool name="session_url_default">true</bool>
<bool name="event_hashtag_default">true</bool>
<bool name="room_hashtag_default">true</bool>
</resources>
19 changes: 19 additions & 0 deletions feature/settings/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name ="share_setting_title">Sharing Settings for Tweet</string>
<string name ="share_setting_key">share_setting</string>

<string name ="session_title_title">Session Title</string>
<string name ="session_title_key">session_title</string>
<string name ="session_title_summary">ex.What will be changed on tests in multi-module projects</string>

<string name ="session_url_title">Session URL</string>
<string name ="session_url_key">session_url</string>
<string name ="session_url_summary">ex.https://droidkaigi.jp/2019/..</string>

<string name ="event_hashtag_title">Event Hashtag</string>
<string name ="event_hashtag_key">event_hashtag</string>
<string name ="event_hashtag_summary">ex.#droidkaigi</string>

<string name ="room_hashtag_title">Room Hashtag</string>
<string name ="room_hashtag_key">room_hashtag</string>
<string name ="room_hashtag_summary">ex.#hallA, #room1</string>

</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import io.github.droidkaigi.confsched2019.announcement.ui.subscribeAnnouncementT
import io.github.droidkaigi.confsched2019.di.createAppComponent
import io.github.droidkaigi.confsched2019.ext.changedForever
import io.github.droidkaigi.confsched2019.model.SystemProperty
import io.github.droidkaigi.confsched2019.settings.ui.SettingsStore
import io.github.droidkaigi.confsched2019.system.actioncreator.SystemActionCreator
import io.github.droidkaigi.confsched2019.system.store.SystemStore
import timber.log.LogcatTree
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ import io.github.droidkaigi.confsched2019.session.ui.SpeakerFragment
import io.github.droidkaigi.confsched2019.session.ui.SpeakerFragmentModule
import io.github.droidkaigi.confsched2019.session.ui.TabularFormSessionPagesFragment
import io.github.droidkaigi.confsched2019.session.ui.TabularFromSessionPagesFragmentModule
import io.github.droidkaigi.confsched2019.settings.ui.SettingsFragment
import io.github.droidkaigi.confsched2019.settings.ui.SettingsFragmentModule
import io.github.droidkaigi.confsched2019.sponsor.ui.SponsorFragment
import io.github.droidkaigi.confsched2019.sponsor.ui.SponsorFragmentModule
import io.github.droidkaigi.confsched2019.staff.ui.StaffSearchFragment
Expand Down Expand Up @@ -126,8 +128,10 @@ class MainActivity : DaggerAppCompatActivity() {
}

private fun setupNavigation() {
val topLevelDestinationIds = setOf(R.id.main, R.id.about, R.id.announce, R.id.setting,
R.id.floormap, R.id.sponsor, R.id.contributor)
val topLevelDestinationIds = setOf(
R.id.main, R.id.about, R.id.announce, R.id.setting,
R.id.floormap, R.id.sponsor, R.id.contributor
)
val appBarConfiguration = AppBarConfiguration(
topLevelDestinationIds,
binding.drawerLayout
Expand Down Expand Up @@ -333,6 +337,10 @@ abstract class MainActivityModule {
)
abstract fun contrbutorContributorFragment(): ContributorFragment

@PageScope
@ContributesAndroidInjector(modules = [SettingsFragmentModule::class])
abstract fun contributeSettingsFragment(): SettingsFragment

@Module
companion object {
@JvmStatic @Provides fun provideNavController(mainActivity: MainActivity): NavController {
Expand Down
Loading