Skip to content

Commit ecd6701

Browse files
authored
UI : Help Settings Compose (#1892)
* VM and initial UI * Export button in help * cleanups * Minor cleanup * Updated alignment to Center
1 parent 89ef451 commit ecd6701

File tree

12 files changed

+322
-426
lines changed

12 files changed

+322
-426
lines changed

app/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java

Lines changed: 0 additions & 174 deletions
This file was deleted.
Lines changed: 20 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,202 +1,33 @@
11
package org.thoughtcrime.securesms.preferences
22

3-
import android.Manifest
4-
import android.content.Intent
5-
import android.net.Uri
6-
import android.os.Build
7-
import android.os.Bundle
8-
import android.view.Gravity
9-
import android.view.LayoutInflater
10-
import android.view.View
11-
import android.view.ViewGroup
12-
import android.widget.FrameLayout
13-
import android.widget.ProgressBar
14-
import android.widget.TextView
15-
import android.widget.Toast
16-
import androidx.compose.runtime.getValue
17-
import androidx.compose.runtime.mutableStateOf
18-
import androidx.compose.runtime.setValue
19-
import androidx.compose.ui.platform.ComposeView
20-
import androidx.compose.ui.platform.ViewCompositionStrategy
21-
import androidx.compose.ui.res.stringResource
22-
import androidx.core.view.isInvisible
23-
import androidx.preference.Preference
24-
import com.squareup.phrase.Phrase
3+
import androidx.activity.viewModels
4+
import androidx.compose.runtime.Composable
255
import dagger.hilt.android.AndroidEntryPoint
26-
import network.loki.messenger.R
27-
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
28-
import org.session.libsignal.utilities.Log
29-
import org.thoughtcrime.securesms.ScreenLockActionBarActivity
6+
import org.thoughtcrime.securesms.FullComposeScreenLockActivity
307
import org.thoughtcrime.securesms.permissions.Permissions
31-
import org.thoughtcrime.securesms.ui.AlertDialog
32-
import org.thoughtcrime.securesms.ui.DialogButtonData
33-
import org.thoughtcrime.securesms.ui.GetString
34-
import org.thoughtcrime.securesms.ui.components.ExportLogsDialog
35-
import org.thoughtcrime.securesms.ui.components.LogExporter
36-
import org.thoughtcrime.securesms.ui.getSubbedCharSequence
37-
import org.thoughtcrime.securesms.ui.getSubbedString
38-
import org.thoughtcrime.securesms.ui.openUrl
39-
import org.thoughtcrime.securesms.ui.setThemedContent
40-
import javax.inject.Inject
8+
import org.thoughtcrime.securesms.preferences.compose.HelpSettingsScreen
9+
import org.thoughtcrime.securesms.preferences.compose.HelpSettingsViewModel
4110

4211
@AndroidEntryPoint
43-
class HelpSettingsActivity: ScreenLockActionBarActivity() {
12+
class HelpSettingsActivity: FullComposeScreenLockActivity() {
4413

45-
override val applyDefaultWindowInsets: Boolean
46-
get() = false
14+
@Composable
15+
override fun ComposeContent() {
16+
val viewModel: HelpSettingsViewModel by viewModels()
4717

48-
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
49-
super.onCreate(savedInstanceState, ready)
50-
setContentView(R.layout.activity_fragment_wrapper)
51-
supportFragmentManager.beginTransaction()
52-
.replace(R.id.fragmentContainer, HelpSettingsFragment())
53-
.commit()
54-
}
55-
}
56-
57-
@AndroidEntryPoint
58-
class HelpSettingsFragment: CorrectedPreferenceFragment() {
59-
60-
companion object {
61-
private const val EXPORT_LOGS = "export_logs"
62-
private const val TRANSLATE = "translate_session"
63-
private const val FEEDBACK = "feedback"
64-
private const val FAQ = "faq"
65-
private const val SUPPORT = "support"
66-
private const val CROWDIN_URL = "https://getsession.org/translate"
67-
private const val FEEDBACK_URL = "https://getsession.org/survey"
68-
private const val FAQ_URL = "https://getsession.org/faq"
69-
private const val SUPPORT_URL = "https://sessionapp.zendesk.com/hc/en-us"
70-
}
71-
72-
private var composeView: ComposeView? = null
73-
74-
private var showExportLogDialog by mutableStateOf(false)
75-
76-
@Inject
77-
lateinit var exporter: LogExporter
78-
79-
override fun onCreateView(
80-
inflater: LayoutInflater,
81-
container: ViewGroup?,
82-
savedInstanceState: Bundle?
83-
): View {
84-
// We will wrap the existing screen in a framelayout in order to add custom compose content
85-
val preferenceView = super.onCreateView(inflater, container, savedInstanceState)
86-
87-
val wrapper = FrameLayout(requireContext()).apply {
88-
layoutParams = ViewGroup.LayoutParams(
89-
ViewGroup.LayoutParams.MATCH_PARENT,
90-
ViewGroup.LayoutParams.MATCH_PARENT
91-
)
92-
}
93-
94-
wrapper.addView(
95-
preferenceView,
96-
FrameLayout.LayoutParams(
97-
FrameLayout.LayoutParams.MATCH_PARENT,
98-
FrameLayout.LayoutParams.MATCH_PARENT
99-
)
100-
)
101-
102-
composeView = ComposeView(requireContext())
103-
wrapper.addView(
104-
composeView,
105-
FrameLayout.LayoutParams(
106-
FrameLayout.LayoutParams.MATCH_PARENT,
107-
FrameLayout.LayoutParams.WRAP_CONTENT,
108-
Gravity.TOP
109-
)
18+
HelpSettingsScreen(
19+
viewModel = viewModel,
20+
onBackPressed = this::finish
11021
)
111-
112-
return wrapper
11322
}
11423

115-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
116-
super.onViewCreated(view, savedInstanceState)
117-
118-
//set up compose content
119-
composeView?.apply {
120-
setViewCompositionStrategy(
121-
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
122-
)
123-
setThemedContent {
124-
if(showExportLogDialog) {
125-
ExportLogsDialog(
126-
logExporter = exporter,
127-
onDismissRequest = {
128-
showExportLogDialog = false
129-
}
130-
)
131-
}
132-
}
133-
}
134-
}
135-
136-
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
137-
addPreferencesFromResource(R.xml.preferences_help)
138-
139-
// String sub the summary text of the `export_logs` element in preferences_help.xml
140-
val exportPref = preferenceScreen.findPreference<Preference>(EXPORT_LOGS)
141-
exportPref?.summary = context?.getSubbedCharSequence(R.string.helpReportABugExportLogsDescription, APP_NAME_KEY to getString(R.string.app_name))
142-
143-
// String sub the summary text of the `translate_session` element in preferences_help.xml
144-
val translatePref = preferenceScreen.findPreference<Preference>(TRANSLATE)
145-
translatePref?.title = context?.getSubbedCharSequence(R.string.helpHelpUsTranslateSession, APP_NAME_KEY to getString(R.string.app_name))
146-
}
147-
148-
override fun onPreferenceTreeClick(preference: Preference): Boolean {
149-
return when (preference.key) {
150-
EXPORT_LOGS -> {
151-
shareLogs()
152-
true
153-
}
154-
TRANSLATE -> {
155-
requireContext().openUrl(CROWDIN_URL)
156-
true
157-
}
158-
FEEDBACK -> {
159-
requireContext().openUrl(FEEDBACK_URL)
160-
true
161-
}
162-
FAQ -> {
163-
requireContext().openUrl(FAQ_URL)
164-
true
165-
}
166-
SUPPORT -> {
167-
requireContext().openUrl(SUPPORT_URL)
168-
true
169-
}
170-
else -> super.onPreferenceTreeClick(preference)
171-
}
172-
}
173-
174-
private fun updateExportButtonAndProgressBarUI(exportJobRunning: Boolean) {
175-
this.activity?.runOnUiThread(Runnable {
176-
// Change export logs button text
177-
val exportLogsButton = this.activity?.findViewById(R.id.export_logs_button) as TextView?
178-
if (exportLogsButton == null) { Log.w("Loki", "Could not find export logs button view.") }
179-
exportLogsButton?.text = if (exportJobRunning) getString(R.string.cancel) else getString(R.string.helpReportABugExportLogs)
180-
181-
// Show progress bar
182-
val exportProgressBar = this.activity?.findViewById(R.id.export_progress_bar) as ProgressBar?
183-
exportProgressBar?.isInvisible = !exportJobRunning
184-
})
24+
override fun onRequestPermissionsResult(
25+
requestCode: Int,
26+
permissions: Array<out String>,
27+
grantResults: IntArray
28+
) {
29+
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
30+
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
18531
}
32+
}
18633

187-
private fun shareLogs() {
188-
Permissions.with(this)
189-
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
190-
.maxSdkVersion(Build.VERSION_CODES.P)
191-
.withPermanentDenialDialog(requireContext().getSubbedString(R.string.permissionsStorageDeniedLegacy, APP_NAME_KEY to getString(R.string.app_name)))
192-
.onAnyDenied {
193-
val c = requireContext()
194-
val txt = c.getSubbedString(R.string.permissionsStorageDeniedLegacy, APP_NAME_KEY to getString(R.string.app_name))
195-
Toast.makeText(c, txt, Toast.LENGTH_LONG).show()
196-
}
197-
.onAllGranted {
198-
showExportLogDialog = true
199-
}
200-
.execute()
201-
}
202-
}

0 commit comments

Comments
 (0)