From d93d70c3c76a4ad31460221f84c940ce671da70d Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 25 Mar 2018 04:01:23 +0200
Subject: [PATCH] Make settings more modular

---
 app/src/main/AndroidManifest.xml              | 21 ++++++++++---------
 .../quasseldroid/dagger/ActivityModule.kt     |  8 +++----
 .../quasseldroid/ui/chat/ChatActivity.kt      |  4 ++--
 .../ui/settings/SettingsActivity.kt           |  9 +++++++-
 .../ui/settings/SettingsFragmentProvider.kt   | 10 ---------
 .../ui/settings/app/AppSettingsActivity.kt    |  7 +++++++
 .../AppSettingsFragment.kt}                   |  6 +++---
 .../app/AppSettingsFragmentProvider.kt        | 10 +++++++++
 .../res/layout-sw720dp/activity_settings.xml  |  9 +++-----
 app/src/main/res/layout/activity_settings.xml | 10 +++------
 10 files changed, 51 insertions(+), 43 deletions(-)
 delete mode 100644 app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragmentProvider.kt
 create mode 100644 app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
 rename app/src/main/java/de/kuschku/quasseldroid/ui/settings/{SettingsFragment.kt => app/AppSettingsFragment.kt} (89%)
 create mode 100644 app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragmentProvider.kt

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 90e58ffcb..22ee8f941 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,14 +8,14 @@
   <!--<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />-->
 
   <application
-    android:name="de.kuschku.quasseldroid.QuasselDroid"
+    android:name=".QuasselDroid"
     android:allowBackup="true"
     android:icon="@mipmap/ic_launcher"
     android:label="@string/app_name"
     android:supportsRtl="true"
     android:theme="@style/Theme.SplashTheme">
     <activity
-      android:name="de.kuschku.quasseldroid.ui.chat.ChatActivity"
+      android:name=".ui.chat.ChatActivity"
       android:exported="true"
       android:label="@string/app_name"
       android:launchMode="singleTask"
@@ -34,31 +34,32 @@
     </activity>
 
     <activity
-      android:name="de.kuschku.quasseldroid.ui.setup.accounts.setup.AccountSetupActivity"
+      android:name=".ui.setup.accounts.setup.AccountSetupActivity"
       android:exported="false"
       android:label="@string/app_name"
-      android:parentActivityName="de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity"
+      android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:windowSoftInputMode="adjustResize" />
     <activity
-      android:name="de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditActivity"
+      android:name=".ui.setup.accounts.edit.AccountEditActivity"
       android:exported="false"
       android:label="@string/app_name"
-      android:parentActivityName="de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity"
+      android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:windowSoftInputMode="adjustResize" />
     <activity
-      android:name="de.kuschku.quasseldroid.ui.settings.SettingsActivity"
+      android:name=".ui.settings.app.AppSettingsActivity"
       android:exported="false"
       android:label="@string/label_settings"
-      android:parentActivityName="de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity"
+      android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
     <activity
-      android:name="de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity"
+      android:name=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:exported="false"
       android:label="@string/app_name"
+      android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
 
     <service
-      android:name="de.kuschku.quasseldroid.service.QuasselService"
+      android:name=".service.QuasselService"
       android:description="@string/connection_service_description"
       android:exported="false"
       android:label="@string/connection_service_title" />
diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
index 91d1300d4..32b549b60 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
@@ -6,8 +6,8 @@ import de.kuschku.quasseldroid.service.QuasselService
 import de.kuschku.quasseldroid.ui.chat.ChatActivity
 import de.kuschku.quasseldroid.ui.chat.ChatActivityModule
 import de.kuschku.quasseldroid.ui.chat.ChatFragmentProvider
-import de.kuschku.quasseldroid.ui.settings.SettingsActivity
-import de.kuschku.quasseldroid.ui.settings.SettingsFragmentProvider
+import de.kuschku.quasseldroid.ui.settings.app.AppSettingsActivity
+import de.kuschku.quasseldroid.ui.settings.app.AppSettingsFragmentProvider
 import de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditActivity
 import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity
 import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionFragmentProvider
@@ -19,8 +19,8 @@ abstract class ActivityModule {
   @ContributesAndroidInjector(modules = [ChatActivityModule::class, ChatFragmentProvider::class])
   abstract fun bindChatActivity(): ChatActivity
 
-  @ContributesAndroidInjector(modules = [SettingsFragmentProvider::class])
-  abstract fun bindSettingsActivity(): SettingsActivity
+  @ContributesAndroidInjector(modules = [AppSettingsFragmentProvider::class])
+  abstract fun bindAppSettingsActivity(): AppSettingsActivity
 
   @ContributesAndroidInjector(modules = [AccountSetupFragmentProvider::class])
   abstract fun bindAccountSetupActivity(): AccountSetupActivity
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 f06944fd3..5365c3e40 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
@@ -37,7 +37,7 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.persistence.QuasselDatabase
 import de.kuschku.quasseldroid.ui.chat.input.Editor
 import de.kuschku.quasseldroid.ui.chat.input.MessageHistoryAdapter
-import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+import de.kuschku.quasseldroid.ui.settings.app.AppSettingsActivity
 import de.kuschku.quasseldroid.util.helper.editCommit
 import de.kuschku.quasseldroid.util.helper.invoke
 import de.kuschku.quasseldroid.util.helper.toLiveData
@@ -346,7 +346,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       true
     }
     R.id.settings        -> {
-      startActivity(Intent(applicationContext, SettingsActivity::class.java))
+      startActivity(Intent(applicationContext, AppSettingsActivity::class.java))
       true
     }
     R.id.disconnect      -> {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
index 9a5526a8c..99f2657f8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
@@ -1,13 +1,16 @@
 package de.kuschku.quasseldroid.ui.settings
 
 import android.os.Bundle
+import android.support.v4.app.Fragment
 import android.support.v7.widget.Toolbar
 import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.util.service.ServiceBoundActivity
 
-class SettingsActivity : ServiceBoundActivity() {
+abstract class SettingsActivity : ServiceBoundActivity() {
+  protected abstract val fragment: Fragment
+
   @BindView(R.id.toolbar)
   lateinit var toolbar: Toolbar
 
@@ -18,5 +21,9 @@ class SettingsActivity : ServiceBoundActivity() {
 
     setSupportActionBar(toolbar)
     supportActionBar?.setDisplayHomeAsUpEnabled(true)
+
+    val transaction = supportFragmentManager.beginTransaction()
+    transaction.add(R.id.fragment_container, fragment)
+    transaction.commit()
   }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragmentProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragmentProvider.kt
deleted file mode 100644
index 2011afc84..000000000
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragmentProvider.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package de.kuschku.quasseldroid.ui.settings
-
-import dagger.Module
-import dagger.android.ContributesAndroidInjector
-
-@Module
-abstract class SettingsFragmentProvider {
-  @ContributesAndroidInjector
-  abstract fun bindSettingsFragment(): SettingsFragment
-}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
new file mode 100644
index 000000000..d1127016e
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
@@ -0,0 +1,7 @@
+package de.kuschku.quasseldroid.ui.settings.app
+
+import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+
+class AppSettingsActivity : SettingsActivity() {
+  override val fragment = AppSettingsFragment()
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragment.kt
similarity index 89%
rename from app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragment.kt
rename to app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragment.kt
index 4f0203de6..08abd25c9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragment.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid.ui.settings
+package de.kuschku.quasseldroid.ui.settings.app
 
 import android.content.SharedPreferences
 import android.os.Bundle
@@ -11,8 +11,8 @@ import de.kuschku.quasseldroid.settings.Settings
 import de.kuschku.quasseldroid.util.backport.DaggerPreferenceFragmentCompat
 import javax.inject.Inject
 
-class SettingsFragment : DaggerPreferenceFragmentCompat(),
-                         SharedPreferences.OnSharedPreferenceChangeListener {
+class AppSettingsFragment : DaggerPreferenceFragmentCompat(),
+                            SharedPreferences.OnSharedPreferenceChangeListener {
   @Inject
   lateinit var appearanceSettings: AppearanceSettings
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragmentProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragmentProvider.kt
new file mode 100644
index 000000000..15b0a5bd5
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsFragmentProvider.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid.ui.settings.app
+
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class AppSettingsFragmentProvider {
+  @ContributesAndroidInjector
+  abstract fun bindAppSettingsFragment(): AppSettingsFragment
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw720dp/activity_settings.xml b/app/src/main/res/layout-sw720dp/activity_settings.xml
index 8e7395e7b..42e160571 100644
--- a/app/src/main/res/layout-sw720dp/activity_settings.xml
+++ b/app/src/main/res/layout-sw720dp/activity_settings.xml
@@ -1,6 +1,5 @@
 <android.support.v4.widget.DrawerLayout 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"
   android:background="#eeeeee"
@@ -41,12 +40,10 @@
         android:layout_height="match_parent"
         android:scrollbars="vertical">
 
-        <fragment
-          android:id="@+id/settingsFragment"
-          android:name="de.kuschku.quasseldroid.ui.settings.SettingsFragment"
+        <FrameLayout
+          android:id="@+id/fragment_container"
           android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          tools:layout="@xml/preferences" />
+          android:layout_height="wrap_content" />
       </android.support.v4.widget.NestedScrollView>
     </android.support.v7.widget.CardView>
 
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 7e6d5f030..a42c0cb50 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -1,13 +1,11 @@
 <android.support.v4.widget.DrawerLayout 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"
   android:fitsSystemWindows="true">
 
   <LinearLayout 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"
     android:fitsSystemWindows="true"
@@ -27,12 +25,10 @@
 
     </android.support.design.widget.AppBarLayout>
 
-    <fragment
-      android:id="@+id/settingsFragment"
-      android:name="de.kuschku.quasseldroid.ui.settings.SettingsFragment"
+    <FrameLayout
+      android:id="@+id/fragment_container"
       android:layout_width="fill_parent"
-      android:layout_height="fill_parent"
-      tools:layout="@xml/preferences" />
+      android:layout_height="fill_parent" />
   </LinearLayout>
 
 </android.support.v4.widget.DrawerLayout>
\ No newline at end of file
-- 
GitLab