1
1
package com.allsoftdroid.audiobook.feature_settings
2
2
3
- import android.content.Intent
4
- import android.net.Uri
5
- import android.os.Build
6
3
import android.os.Bundle
7
- import androidx.preference.Preference
8
- import androidx.preference.PreferenceFragmentCompat
9
- import com.allsoftdroid.audiobook.feature_settings.model.Feedback
10
- import com.allsoftdroid.common.base.extension.Event
11
- import com.allsoftdroid.common.base.network.ArchiveUtils
12
- import com.allsoftdroid.common.base.store.userAction.OpenLicensesUI
13
- import com.allsoftdroid.common.base.store.userAction.UserActionEventStore
14
- import com.allsoftdroid.common.base.utils.SettingsPreferenceUtils
15
- import org.koin.core.KoinComponent
16
- import org.koin.core.inject
4
+ import android.view.LayoutInflater
5
+ import android.view.View
6
+ import android.view.ViewGroup
7
+ import androidx.activity.OnBackPressedCallback
8
+ import com.allsoftdroid.audiobook.feature_settings.databinding.LayoutSettingsFragmentBinding
9
+ import com.allsoftdroid.common.base.fragment.BaseUIFragment
17
10
11
+ class SettingsFragment : BaseUIFragment () {
18
12
19
- class SettingsFragment : PreferenceFragmentCompat (), KoinComponent {
20
-
21
- private val userActionEventStore: UserActionEventStore by inject()
22
-
23
- override fun onCreatePreferences (savedInstanceState : Bundle ? , rootKey : String? ) {
24
- setPreferencesFromResource(R .xml.settings_preferences,rootKey)
25
-
26
- setupDownloadPref()
27
- setupAboutPref()
28
- setupMiscellaneousPref()
29
- }
30
-
31
- private fun setupAboutPref () {
32
- activity?.let {
33
- val privacyPref = findPreference<Preference >(SettingsPreferenceUtils .PRIVACY_POLICY )
34
-
35
- privacyPref?.summary = getString(R .string.privacy_summary)
36
- privacyPref?.setOnPreferenceClickListener {
37
- openPrivacyPageOnBrowser()
38
- return @setOnPreferenceClickListener true
39
- }
40
-
41
- val feedbackPref = findPreference<Preference >(SettingsPreferenceUtils .FEEDBACK_KEY )
42
-
43
- feedbackPref?.summary = getString(R .string.feedback_summary)
44
- feedbackPref?.setOnPreferenceClickListener {
45
- emailFeedback()
46
- return @setOnPreferenceClickListener true
47
- }
48
- }
13
+ companion object {
14
+ private const val SETTINGS_FRAGMENT = " Settings_fragment"
49
15
}
50
16
51
- private fun emailFeedback () {
52
- val fragmentManager = childFragmentManager
17
+ override fun onCreateView (
18
+ inflater : LayoutInflater ,
19
+ container : ViewGroup ? ,
20
+ savedInstanceState : Bundle ?
21
+ ): View ? {
22
+ val dataBinding: LayoutSettingsFragmentBinding = inflateLayout(inflater,
23
+ R .layout.layout_settings_fragment,container,false )
53
24
54
- val oldFeedbackFragment = fragmentManager.findFragmentByTag(getString( R .string.feedback_fragment_tag_label))
25
+ dataBinding.lifecycleOwner = viewLifecycleOwner
55
26
56
- oldFeedbackFragment?. let {
57
- fragmentManager.beginTransaction().remove(oldFeedbackFragment).commit ()
27
+ dataBinding.toolbarBackButton.setOnClickListener {
28
+ onBackPressed ()
58
29
}
59
30
60
- val feedbackFragment = FeedbackFragment (
61
- context = this ,
62
- feedbackListener = object : FeedbackFragment .FeedbackListener {
63
- override fun onFinishUserFeedback (data : Feedback ? ) {
64
- data?.let {
65
- val manufacturer = Build .MANUFACTURER
66
- val model = Build .MODEL
67
- val version = Build .VERSION .SDK_INT
68
- val versionRelease = Build .VERSION .RELEASE
69
-
70
- val bodyBuilder: StringBuilder = StringBuilder ()
31
+ loadSettingsUI()
71
32
72
- bodyBuilder.apply {
73
- append(it.body)
74
- append(" \n\n -----------------------------------------------------------------\n " )
75
- append(" \n User Device Details:\n " )
76
- append(" \n Manufacturer: $manufacturer " )
77
- append(" \n Model: $model " )
78
- append(" \n Device OS:$version /$versionRelease " )
79
- append(" \n App Version:${BuildConfig .VERSION_NAME } (${BuildConfig .VERSION_CODE } )" )
80
- }
81
-
82
- val emailIntent = Intent (Intent .ACTION_SENDTO ).apply {
83
- this .data = Uri .parse(" mailto:" )
84
- putExtra(Intent .EXTRA_EMAIL ,getString(R .string.developer_mail))
85
- putExtra(Intent .EXTRA_SUBJECT ,it.title)
86
- putExtra(Intent .EXTRA_TEXT ,bodyBuilder.toString())
87
- }
88
-
89
- startActivity(Intent .createChooser(emailIntent,getString(R .string.intent_chooser_send_mail_label)))
90
- }
91
- }
92
- }
93
- )
94
-
95
- feedbackFragment.show(fragmentManager,getString(R .string.feedback_fragment_tag_label))
96
- }
97
-
98
- private fun openPrivacyPageOnBrowser () {
99
- val uri = Uri .parse(getString(R .string.privacy_page_url))
100
- val intent = Intent (Intent .ACTION_VIEW ,uri)
101
- startActivity(Intent .createChooser(intent," Open URL with" ))
33
+ return dataBinding.root
102
34
}
103
35
104
- private fun setupMiscellaneousPref () {
105
- activity?.let {
106
- val licensePref = findPreference<Preference >(SettingsPreferenceUtils .LICENSES_KEY )
107
-
108
- licensePref?.summary = getString(R .string.licenses_summary)
109
- licensePref?.setOnPreferenceClickListener {
110
- userActionEventStore.publish(Event (OpenLicensesUI (this ::class .java.simpleName)))
111
- return @setOnPreferenceClickListener true
112
- }
113
-
114
- val versionPref = findPreference<Preference >(SettingsPreferenceUtils .VERSION_KEY )
115
- versionPref?.summary = " ${BuildConfig .VERSION_NAME } (${BuildConfig .VERSION_CODE } )"
36
+ private fun loadSettingsUI () {
37
+ val fragment = childFragmentManager.findFragmentByTag(SETTINGS_FRAGMENT )
38
+
39
+ if (fragment == null ){
40
+ childFragmentManager.beginTransaction()
41
+ .add(R .id.fragment_container,SettingsPreferenceFragment (), SETTINGS_FRAGMENT )
42
+ .commit()
43
+ }else {
44
+ childFragmentManager.beginTransaction()
45
+ .show(fragment)
46
+ .commit()
116
47
}
117
48
}
118
49
119
- private fun setupDownloadPref () {
120
- activity?.let {
121
- val downloadPref = findPreference<Preference >(SettingsPreferenceUtils .DOWNLOADS_KEY )
122
- val path = ArchiveUtils .getDownloadsRootFolder(it.application)
123
-
124
- val folder = " /$path /${ArchiveUtils .AppFolderName } /"
125
- downloadPref?.summary = folder
126
- }
50
+ override fun handleBackPressEvent (callback : OnBackPressedCallback ) {
51
+ callback.isEnabled = false
52
+ requireActivity().onBackPressed()
127
53
}
128
54
}
0 commit comments