Merge pull request #233 from vector-im/feature/suggestion
Feature suggestion
This commit is contained in:
commit
83ceb36a12
|
@ -29,4 +29,8 @@ fun Session.configureAndStart(pushRuleTriggerListener: PushRuleTriggerListener)
|
||||||
refreshPushers()
|
refreshPushers()
|
||||||
pushRuleTriggerListener.startWithSession(this)
|
pushRuleTriggerListener.startWithSession(this)
|
||||||
fetchPushRules()
|
fetchPushRules()
|
||||||
|
|
||||||
|
// TODO P1 From HomeActivity
|
||||||
|
// @Inject lateinit var incomingVerificationRequestHandler: IncomingVerificationRequestHandler
|
||||||
|
// @Inject lateinit var keyRequestHandler: KeyRequestHandler
|
||||||
}
|
}
|
|
@ -29,7 +29,6 @@ import androidx.fragment.app.FragmentManager
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import com.airbnb.mvrx.viewModel
|
import com.airbnb.mvrx.viewModel
|
||||||
import im.vector.matrix.android.api.Matrix
|
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.di.ActiveSessionHolder
|
import im.vector.riotredesign.core.di.ActiveSessionHolder
|
||||||
import im.vector.riotredesign.core.di.ScreenComponent
|
import im.vector.riotredesign.core.di.ScreenComponent
|
||||||
|
@ -44,9 +43,7 @@ import im.vector.riotredesign.features.crypto.keysrequest.KeyRequestHandler
|
||||||
import im.vector.riotredesign.features.crypto.verification.IncomingVerificationRequestHandler
|
import im.vector.riotredesign.features.crypto.verification.IncomingVerificationRequestHandler
|
||||||
import im.vector.riotredesign.features.disclaimer.showDisclaimerDialog
|
import im.vector.riotredesign.features.disclaimer.showDisclaimerDialog
|
||||||
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.riotredesign.features.rageshake.BugReporter
|
|
||||||
import im.vector.riotredesign.features.rageshake.VectorUncaughtExceptionHandler
|
import im.vector.riotredesign.features.rageshake.VectorUncaughtExceptionHandler
|
||||||
import im.vector.riotredesign.features.workers.signout.SignOutUiWorker
|
|
||||||
import im.vector.riotredesign.features.workers.signout.SignOutViewModel
|
import im.vector.riotredesign.features.workers.signout.SignOutViewModel
|
||||||
import im.vector.riotredesign.push.fcm.FcmHelper
|
import im.vector.riotredesign.push.fcm.FcmHelper
|
||||||
import kotlinx.android.synthetic.main.activity_home.*
|
import kotlinx.android.synthetic.main.activity_home.*
|
||||||
|
@ -168,8 +165,12 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable {
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.sliding_menu_sign_out -> {
|
R.id.menu_home_suggestion -> {
|
||||||
SignOutUiWorker(this, notificationDrawerManager).perform(activeSessionHolder.getActiveSession())
|
bugReporter.openBugReportScreen(this, true)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
R.id.menu_home_report_bug -> {
|
||||||
|
bugReporter.openBugReportScreen(this, false)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ import im.vector.riotredesign.core.di.ScreenComponent
|
||||||
import im.vector.riotredesign.core.platform.VectorBaseActivity
|
import im.vector.riotredesign.core.platform.VectorBaseActivity
|
||||||
import kotlinx.android.synthetic.main.activity_bug_report.*
|
import kotlinx.android.synthetic.main.activity_bug_report.*
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Form to send a bug report
|
* Form to send a bug report
|
||||||
|
@ -42,6 +41,8 @@ class BugReportActivity : VectorBaseActivity() {
|
||||||
|
|
||||||
override fun getLayoutRes() = R.layout.activity_bug_report
|
override fun getLayoutRes() = R.layout.activity_bug_report
|
||||||
|
|
||||||
|
private var forSuggestion: Boolean = false
|
||||||
|
|
||||||
override fun initUiAndData() {
|
override fun initUiAndData() {
|
||||||
configureToolbar(bugReportToolbar)
|
configureToolbar(bugReportToolbar)
|
||||||
|
|
||||||
|
@ -52,6 +53,26 @@ class BugReportActivity : VectorBaseActivity() {
|
||||||
bug_report_button_include_screenshot.isChecked = false
|
bug_report_button_include_screenshot.isChecked = false
|
||||||
bug_report_button_include_screenshot.isEnabled = false
|
bug_report_button_include_screenshot.isEnabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forSuggestion = intent.getBooleanExtra("FOR_SUGGESTION", false)
|
||||||
|
|
||||||
|
// Default screen is for bug report, so modify it for suggestion
|
||||||
|
if (forSuggestion) {
|
||||||
|
supportActionBar?.setTitle(R.string.send_suggestion)
|
||||||
|
|
||||||
|
bug_report_first_text.setText(R.string.send_suggestion_content)
|
||||||
|
bug_report_text_input_layout.hint = getString(R.string.send_suggestion_report_placeholder)
|
||||||
|
|
||||||
|
bug_report_logs_description.isVisible = false
|
||||||
|
|
||||||
|
bug_report_button_include_logs.isChecked = false
|
||||||
|
bug_report_button_include_logs.isVisible = false
|
||||||
|
|
||||||
|
bug_report_button_include_crash_logs.isChecked = false
|
||||||
|
bug_report_button_include_crash_logs.isVisible = false
|
||||||
|
|
||||||
|
// Keep the screenshot
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMenuRes() = R.menu.bug_report
|
override fun getMenuRes() = R.menu.bug_report
|
||||||
|
@ -95,6 +116,7 @@ class BugReportActivity : VectorBaseActivity() {
|
||||||
bug_report_progress_view.progress = 0
|
bug_report_progress_view.progress = 0
|
||||||
|
|
||||||
bugReporter.sendBugReport(this,
|
bugReporter.sendBugReport(this,
|
||||||
|
forSuggestion,
|
||||||
bug_report_button_include_logs.isChecked,
|
bug_report_button_include_logs.isChecked,
|
||||||
bug_report_button_include_crash_logs.isChecked,
|
bug_report_button_include_crash_logs.isChecked,
|
||||||
bug_report_button_include_screenshot.isChecked,
|
bug_report_button_include_screenshot.isChecked,
|
||||||
|
@ -103,8 +125,13 @@ class BugReportActivity : VectorBaseActivity() {
|
||||||
override fun onUploadFailed(reason: String?) {
|
override fun onUploadFailed(reason: String?) {
|
||||||
try {
|
try {
|
||||||
if (!TextUtils.isEmpty(reason)) {
|
if (!TextUtils.isEmpty(reason)) {
|
||||||
Toast.makeText(this@BugReportActivity,
|
if (forSuggestion) {
|
||||||
getString(R.string.send_bug_report_failed, reason), Toast.LENGTH_LONG).show()
|
Toast.makeText(this@BugReportActivity,
|
||||||
|
getString(R.string.send_suggestion_failed, reason), Toast.LENGTH_LONG).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@BugReportActivity,
|
||||||
|
getString(R.string.send_bug_report_failed, reason), Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.e(e, "## onUploadFailed() : failed to display the toast " + e.message)
|
Timber.e(e, "## onUploadFailed() : failed to display the toast " + e.message)
|
||||||
|
@ -131,7 +158,11 @@ class BugReportActivity : VectorBaseActivity() {
|
||||||
|
|
||||||
override fun onUploadSucceed() {
|
override fun onUploadSucceed() {
|
||||||
try {
|
try {
|
||||||
Toast.makeText(this@BugReportActivity, R.string.send_bug_report_sent, Toast.LENGTH_LONG).show()
|
if (forSuggestion) {
|
||||||
|
Toast.makeText(this@BugReportActivity, R.string.send_suggestion_sent, Toast.LENGTH_LONG).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@BugReportActivity, R.string.send_bug_report_sent, Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.e(e, "## onUploadSucceed() : failed to dismiss the toast " + e.message)
|
Timber.e(e, "## onUploadSucceed() : failed to dismiss the toast " + e.message)
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,6 +128,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
* Send a bug report.
|
* Send a bug report.
|
||||||
*
|
*
|
||||||
* @param context the application context
|
* @param context the application context
|
||||||
|
* @param forSuggestion true to send a suggestion
|
||||||
* @param withDevicesLogs true to include the device log
|
* @param withDevicesLogs true to include the device log
|
||||||
* @param withCrashLogs true to include the crash logs
|
* @param withCrashLogs true to include the crash logs
|
||||||
* @param withScreenshot true to include the screenshot
|
* @param withScreenshot true to include the screenshot
|
||||||
|
@ -136,6 +137,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
*/
|
*/
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
fun sendBugReport(context: Context,
|
fun sendBugReport(context: Context,
|
||||||
|
forSuggestion: Boolean,
|
||||||
withDevicesLogs: Boolean,
|
withDevicesLogs: Boolean,
|
||||||
withCrashLogs: Boolean,
|
withCrashLogs: Boolean,
|
||||||
withScreenshot: Boolean,
|
withScreenshot: Boolean,
|
||||||
|
@ -208,9 +210,17 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mIsCancelled) {
|
if (!mIsCancelled) {
|
||||||
|
val text = "[RiotX] " +
|
||||||
|
if (forSuggestion) {
|
||||||
|
"[Suggestion] "
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
} +
|
||||||
|
bugDescription
|
||||||
|
|
||||||
// build the multi part request
|
// build the multi part request
|
||||||
val builder = BugReporterMultipartBody.Builder()
|
val builder = BugReporterMultipartBody.Builder()
|
||||||
.addFormDataPart("text", "[RiotX] $bugDescription")
|
.addFormDataPart("text", text)
|
||||||
.addFormDataPart("app", "riot-android")
|
.addFormDataPart("app", "riot-android")
|
||||||
.addFormDataPart("user_agent", Matrix.getInstance(context).getUserAgent())
|
.addFormDataPart("user_agent", Matrix.getInstance(context).getUserAgent())
|
||||||
.addFormDataPart("user_id", userId)
|
.addFormDataPart("user_id", userId)
|
||||||
|
@ -276,6 +286,11 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
// Special for RiotX
|
// Special for RiotX
|
||||||
builder.addFormDataPart("label", "[RiotX]")
|
builder.addFormDataPart("label", "[RiotX]")
|
||||||
|
|
||||||
|
// Suggestion
|
||||||
|
if (forSuggestion) {
|
||||||
|
builder.addFormDataPart("label", "[Suggestion]")
|
||||||
|
}
|
||||||
|
|
||||||
if (getCrashFile(context).exists()) {
|
if (getCrashFile(context).exists()) {
|
||||||
builder.addFormDataPart("label", "crash")
|
builder.addFormDataPart("label", "crash")
|
||||||
deleteCrashFile(context)
|
deleteCrashFile(context)
|
||||||
|
@ -418,10 +433,11 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
/**
|
/**
|
||||||
* Send a bug report either with email or with Vector.
|
* Send a bug report either with email or with Vector.
|
||||||
*/
|
*/
|
||||||
fun openBugReportScreen(activity: Activity) {
|
fun openBugReportScreen(activity: Activity, forSuggestion: Boolean = true) {
|
||||||
screenshot = takeScreenshot(activity)
|
screenshot = takeScreenshot(activity)
|
||||||
|
|
||||||
val intent = Intent(activity, BugReportActivity::class.java)
|
val intent = Intent(activity, BugReportActivity::class.java)
|
||||||
|
intent.putExtra("FOR_SUGGESTION", forSuggestion)
|
||||||
activity.startActivity(intent)
|
activity.startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,9 @@ import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceCategory
|
import androidx.preference.PreferenceCategory
|
||||||
import com.google.android.material.textfield.TextInputEditText
|
import com.google.android.material.textfield.TextInputEditText
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
|
import im.vector.matrix.android.api.Matrix
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
|
import im.vector.riotredesign.core.di.ActiveSessionHolder
|
||||||
import im.vector.riotredesign.core.extensions.showPassword
|
import im.vector.riotredesign.core.extensions.showPassword
|
||||||
import im.vector.riotredesign.core.platform.SimpleTextWatcher
|
import im.vector.riotredesign.core.platform.SimpleTextWatcher
|
||||||
import im.vector.riotredesign.core.preference.UserAvatarPreference
|
import im.vector.riotredesign.core.preference.UserAvatarPreference
|
||||||
|
@ -44,15 +46,21 @@ import im.vector.riotredesign.core.utils.allGranted
|
||||||
import im.vector.riotredesign.core.utils.copyToClipboard
|
import im.vector.riotredesign.core.utils.copyToClipboard
|
||||||
import im.vector.riotredesign.core.utils.toast
|
import im.vector.riotredesign.core.utils.toast
|
||||||
import im.vector.riotredesign.features.MainActivity
|
import im.vector.riotredesign.features.MainActivity
|
||||||
|
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.riotredesign.features.themes.ThemeUtils
|
import im.vector.riotredesign.features.themes.ThemeUtils
|
||||||
|
import im.vector.riotredesign.features.workers.signout.SignOutUiWorker
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() {
|
class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() {
|
||||||
|
|
||||||
override var titleRes = R.string.settings_general_title
|
override var titleRes = R.string.settings_general_title
|
||||||
override val preferenceXmlRes = R.xml.vector_settings_general
|
override val preferenceXmlRes = R.xml.vector_settings_general
|
||||||
|
|
||||||
|
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
|
||||||
|
@Inject lateinit var notificationDrawerManager: NotificationDrawerManager
|
||||||
|
|
||||||
private var mDisplayedEmails = ArrayList<String>()
|
private var mDisplayedEmails = ArrayList<String>()
|
||||||
private var mDisplayedPhoneNumber = ArrayList<String>()
|
private var mDisplayedPhoneNumber = ArrayList<String>()
|
||||||
|
|
||||||
|
@ -227,6 +235,18 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sign out
|
||||||
|
findPreference("SETTINGS_SIGN_OUT_KEY")
|
||||||
|
.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||||
|
activity?.let {
|
||||||
|
SignOutUiWorker(requireActivity(), notificationDrawerManager)
|
||||||
|
.perform(activeSessionHolder.getActiveSession())
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Deactivate account section
|
// Deactivate account section
|
||||||
|
|
||||||
// deactivate account
|
// deactivate account
|
||||||
|
|
|
@ -17,13 +17,13 @@
|
||||||
package im.vector.riotredesign.features.workers.signout
|
package im.vector.riotredesign.features.workers.signout
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.platform.VectorBaseActivity
|
|
||||||
import im.vector.riotredesign.features.MainActivity
|
import im.vector.riotredesign.features.MainActivity
|
||||||
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
||||||
|
|
||||||
class SignOutUiWorker(private val activity: VectorBaseActivity,
|
class SignOutUiWorker(private val activity: FragmentActivity,
|
||||||
private val notificationDrawerManager: NotificationDrawerManager) {
|
private val notificationDrawerManager: NotificationDrawerManager) {
|
||||||
|
|
||||||
fun perform(session: Session) {
|
fun perform(session: Session) {
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/bug_report_first_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
android:textColor="?riotx_text_primary" />
|
android:textColor="?riotx_text_primary" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:id="@+id/bug_report_text_input_layout"
|
||||||
style="@style/VectorTextInputLayout"
|
style="@style/VectorTextInputLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -79,13 +81,13 @@
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
|
android:hint="@string/send_bug_report_placeholder"
|
||||||
android:textColorHint="?attr/vctr_default_text_hint_color">
|
android:textColorHint="?attr/vctr_default_text_hint_color">
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:id="@+id/bug_report_edit_text"
|
android:id="@+id/bug_report_edit_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/send_bug_report_placeholder"
|
|
||||||
android:minHeight="40dp"
|
android:minHeight="40dp"
|
||||||
android:textColor="?riotx_text_primary" />
|
android:textColor="?riotx_text_primary" />
|
||||||
|
|
||||||
|
@ -103,6 +105,7 @@
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/bug_report_logs_description"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:contentDescription="@string/room_sliding_menu_settings"
|
||||||
android:padding="16dp"
|
android:padding="16dp"
|
||||||
android:src="@drawable/ic_settings_x"
|
android:src="@drawable/ic_settings_x"
|
||||||
android:tint="@android:color/white"
|
android:tint="@android:color/white"
|
||||||
|
|
|
@ -2,8 +2,13 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/sliding_menu_sign_out"
|
android:id="@+id/menu_home_suggestion"
|
||||||
android:icon="@drawable/ic_material_exit_to_app"
|
android:icon="@drawable/ic_material_bug_report"
|
||||||
android:title="@string/action_sign_out" />
|
android:title="@string/send_suggestion" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_home_report_bug"
|
||||||
|
android:icon="@drawable/ic_material_bug_report"
|
||||||
|
android:title="@string/send_bug_report" />
|
||||||
|
|
||||||
</menu>
|
</menu>
|
|
@ -1,58 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<group android:id="@+id/account_group">
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_messages"
|
|
||||||
android:icon="@drawable/logo_transparent"
|
|
||||||
android:title="@string/room_sliding_menu_messages" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_settings"
|
|
||||||
android:icon="@drawable/ic_settings_x"
|
|
||||||
android:title="@string/room_sliding_menu_settings" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_send_bug_report"
|
|
||||||
android:icon="@drawable/ic_material_bug_report"
|
|
||||||
android:title="@string/send_bug_report" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_exit"
|
|
||||||
android:icon="@drawable/ic_power_settings"
|
|
||||||
android:title="@string/action_exit" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_sign_out"
|
|
||||||
android:icon="@drawable/ic_material_exit_to_app"
|
|
||||||
android:title="@string/action_sign_out" />
|
|
||||||
</group>
|
|
||||||
|
|
||||||
<group android:id="@+id/app_group">
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_version"
|
|
||||||
android:title="@string/room_sliding_menu_version" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_copyright_terms"
|
|
||||||
android:title="@string/room_sliding_menu_copyright" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_app_tac"
|
|
||||||
android:title="@string/room_sliding_menu_term_and_conditions" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_privacy_policy"
|
|
||||||
android:title="@string/room_sliding_menu_privacy_policy" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_third_party_notices"
|
|
||||||
android:title="@string/room_sliding_menu_third_party_notices" />
|
|
||||||
</group>
|
|
||||||
|
|
||||||
<group android:visible="@bool/debug_mode">
|
|
||||||
<item
|
|
||||||
android:id="@+id/sliding_menu_debug"
|
|
||||||
android:title="@string/debug_screen" />
|
|
||||||
</group>
|
|
||||||
</menu>
|
|
|
@ -40,4 +40,10 @@
|
||||||
|
|
||||||
<string name="settings_troubleshoot_test_token_registration_quick_fix">Register token</string>
|
<string name="settings_troubleshoot_test_token_registration_quick_fix">Register token</string>
|
||||||
|
|
||||||
|
<string name="send_suggestion">Propose a suggestion</string>
|
||||||
|
<string name="send_suggestion_content">Please write your suggestion below.</string>
|
||||||
|
<string name="send_suggestion_report_placeholder">Describe your suggestion here</string>
|
||||||
|
<string name="send_suggestion_sent">Thanks, the suggestion has been successfully sent</string>
|
||||||
|
<string name="send_suggestion_failed">The suggestion failed to be sent (%s)</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -93,6 +93,15 @@
|
||||||
|
|
||||||
<im.vector.riotredesign.core.preference.VectorPreferenceDivider />
|
<im.vector.riotredesign.core.preference.VectorPreferenceDivider />
|
||||||
|
|
||||||
|
<im.vector.riotredesign.core.preference.VectorPreferenceCategory
|
||||||
|
android:title="@string/action_sign_out">
|
||||||
|
|
||||||
|
<im.vector.riotredesign.core.preference.VectorPreference
|
||||||
|
android:key="SETTINGS_SIGN_OUT_KEY"
|
||||||
|
android:title="@string/action_sign_out" />
|
||||||
|
|
||||||
|
</im.vector.riotredesign.core.preference.VectorPreferenceCategory>
|
||||||
|
|
||||||
<im.vector.riotredesign.core.preference.VectorPreferenceCategory
|
<im.vector.riotredesign.core.preference.VectorPreferenceCategory
|
||||||
android:key="SETTINGS_DEACTIVATE_ACCOUNT_CATEGORY_KEY"
|
android:key="SETTINGS_DEACTIVATE_ACCOUNT_CATEGORY_KEY"
|
||||||
android:title="@string/settings_deactivate_account_section">
|
android:title="@string/settings_deactivate_account_section">
|
||||||
|
|
Loading…
Reference in New Issue