diff --git a/vector/src/main/java/im/vector/riotredesign/core/extensions/Session.kt b/vector/src/main/java/im/vector/riotredesign/core/extensions/Session.kt index cc7ca45963..a3c90e3b93 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/extensions/Session.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/extensions/Session.kt @@ -29,4 +29,8 @@ fun Session.configureAndStart(pushRuleTriggerListener: PushRuleTriggerListener) refreshPushers() pushRuleTriggerListener.startWithSession(this) fetchPushRules() + + // TODO P1 From HomeActivity + // @Inject lateinit var incomingVerificationRequestHandler: IncomingVerificationRequestHandler + // @Inject lateinit var keyRequestHandler: KeyRequestHandler } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt index b1d1022125..71d40de54b 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt @@ -29,7 +29,6 @@ import androidx.fragment.app.FragmentManager import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.airbnb.mvrx.viewModel -import im.vector.matrix.android.api.Matrix import im.vector.riotredesign.R import im.vector.riotredesign.core.di.ActiveSessionHolder 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.disclaimer.showDisclaimerDialog 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.workers.signout.SignOutUiWorker import im.vector.riotredesign.features.workers.signout.SignOutViewModel import im.vector.riotredesign.push.fcm.FcmHelper import kotlinx.android.synthetic.main.activity_home.* @@ -168,8 +165,12 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.sliding_menu_sign_out -> { - SignOutUiWorker(this, notificationDrawerManager).perform(activeSessionHolder.getActiveSession()) + R.id.menu_home_suggestion -> { + bugReporter.openBugReportScreen(this, true) + return true + } + R.id.menu_home_report_bug -> { + bugReporter.openBugReportScreen(this, false) return true } } diff --git a/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReportActivity.kt b/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReportActivity.kt index 28e3f21236..45486ee12c 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReportActivity.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReportActivity.kt @@ -28,7 +28,6 @@ import im.vector.riotredesign.core.di.ScreenComponent import im.vector.riotredesign.core.platform.VectorBaseActivity import kotlinx.android.synthetic.main.activity_bug_report.* import timber.log.Timber -import javax.inject.Inject /** * Form to send a bug report @@ -42,6 +41,8 @@ class BugReportActivity : VectorBaseActivity() { override fun getLayoutRes() = R.layout.activity_bug_report + private var forSuggestion: Boolean = false + override fun initUiAndData() { configureToolbar(bugReportToolbar) @@ -52,6 +53,26 @@ class BugReportActivity : VectorBaseActivity() { bug_report_button_include_screenshot.isChecked = 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 @@ -95,6 +116,7 @@ class BugReportActivity : VectorBaseActivity() { bug_report_progress_view.progress = 0 bugReporter.sendBugReport(this, + forSuggestion, bug_report_button_include_logs.isChecked, bug_report_button_include_crash_logs.isChecked, bug_report_button_include_screenshot.isChecked, @@ -103,8 +125,13 @@ class BugReportActivity : VectorBaseActivity() { override fun onUploadFailed(reason: String?) { try { if (!TextUtils.isEmpty(reason)) { - Toast.makeText(this@BugReportActivity, - getString(R.string.send_bug_report_failed, reason), Toast.LENGTH_LONG).show() + if (forSuggestion) { + 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) { Timber.e(e, "## onUploadFailed() : failed to display the toast " + e.message) @@ -131,7 +158,11 @@ class BugReportActivity : VectorBaseActivity() { override fun onUploadSucceed() { 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) { Timber.e(e, "## onUploadSucceed() : failed to dismiss the toast " + e.message) } diff --git a/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReporter.kt b/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReporter.kt index 1808b47105..4b2a71502e 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReporter.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/rageshake/BugReporter.kt @@ -128,6 +128,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes * Send a bug report. * * @param context the application context + * @param forSuggestion true to send a suggestion * @param withDevicesLogs true to include the device log * @param withCrashLogs true to include the crash logs * @param withScreenshot true to include the screenshot @@ -136,6 +137,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes */ @SuppressLint("StaticFieldLeak") fun sendBugReport(context: Context, + forSuggestion: Boolean, withDevicesLogs: Boolean, withCrashLogs: Boolean, withScreenshot: Boolean, @@ -208,9 +210,17 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes } if (!mIsCancelled) { + val text = "[RiotX] " + + if (forSuggestion) { + "[Suggestion] " + } else { + "" + } + + bugDescription + // build the multi part request val builder = BugReporterMultipartBody.Builder() - .addFormDataPart("text", "[RiotX] $bugDescription") + .addFormDataPart("text", text) .addFormDataPart("app", "riot-android") .addFormDataPart("user_agent", Matrix.getInstance(context).getUserAgent()) .addFormDataPart("user_id", userId) @@ -276,6 +286,11 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes // Special for RiotX builder.addFormDataPart("label", "[RiotX]") + // Suggestion + if (forSuggestion) { + builder.addFormDataPart("label", "[Suggestion]") + } + if (getCrashFile(context).exists()) { builder.addFormDataPart("label", "crash") deleteCrashFile(context) @@ -418,10 +433,11 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes /** * Send a bug report either with email or with Vector. */ - fun openBugReportScreen(activity: Activity) { + fun openBugReportScreen(activity: Activity, forSuggestion: Boolean = true) { screenshot = takeScreenshot(activity) val intent = Intent(activity, BugReportActivity::class.java) + intent.putExtra("FOR_SUGGESTION", forSuggestion) activity.startActivity(intent) } diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsGeneralFragment.kt index 8b52cebc72..23c0ee7bc1 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsGeneralFragment.kt @@ -34,7 +34,9 @@ import androidx.preference.Preference import androidx.preference.PreferenceCategory import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout +import im.vector.matrix.android.api.Matrix import im.vector.riotredesign.R +import im.vector.riotredesign.core.di.ActiveSessionHolder import im.vector.riotredesign.core.extensions.showPassword import im.vector.riotredesign.core.platform.SimpleTextWatcher 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.toast 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.workers.signout.SignOutUiWorker import java.lang.ref.WeakReference import java.util.* +import javax.inject.Inject class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { override var titleRes = R.string.settings_general_title override val preferenceXmlRes = R.xml.vector_settings_general + @Inject lateinit var activeSessionHolder: ActiveSessionHolder + @Inject lateinit var notificationDrawerManager: NotificationDrawerManager + private var mDisplayedEmails = ArrayList() private var mDisplayedPhoneNumber = ArrayList() @@ -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 diff --git a/vector/src/main/java/im/vector/riotredesign/features/workers/signout/SignOutUiWorker.kt b/vector/src/main/java/im/vector/riotredesign/features/workers/signout/SignOutUiWorker.kt index 3257685186..6767dfece7 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/workers/signout/SignOutUiWorker.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/workers/signout/SignOutUiWorker.kt @@ -17,13 +17,13 @@ package im.vector.riotredesign.features.workers.signout import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.FragmentActivity import im.vector.matrix.android.api.session.Session import im.vector.riotredesign.R -import im.vector.riotredesign.core.platform.VectorBaseActivity import im.vector.riotredesign.features.MainActivity import im.vector.riotredesign.features.notifications.NotificationDrawerManager -class SignOutUiWorker(private val activity: VectorBaseActivity, +class SignOutUiWorker(private val activity: FragmentActivity, private val notificationDrawerManager: NotificationDrawerManager) { fun perform(session: Session) { diff --git a/vector/src/main/res/layout/activity_bug_report.xml b/vector/src/main/res/layout/activity_bug_report.xml index 4ccb9c5ec3..bbe819769a 100644 --- a/vector/src/main/res/layout/activity_bug_report.xml +++ b/vector/src/main/res/layout/activity_bug_report.xml @@ -61,6 +61,7 @@ android:orientation="vertical"> @@ -103,6 +105,7 @@ android:textSize="12sp" /> + android:id="@+id/menu_home_suggestion" + android:icon="@drawable/ic_material_bug_report" + android:title="@string/send_suggestion" /> + + \ No newline at end of file diff --git a/vector/src/main/res/menu/vector_home_sliding_menu.xml b/vector/src/main/res/menu/vector_home_sliding_menu.xml deleted file mode 100755 index a206bd09bf..0000000000 --- a/vector/src/main/res/menu/vector_home_sliding_menu.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index e2fd753e54..a338a2075b 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -40,4 +40,10 @@ Register token + Propose a suggestion + Please write your suggestion below. + Describe your suggestion here + Thanks, the suggestion has been successfully sent + The suggestion failed to be sent (%s) + \ No newline at end of file diff --git a/vector/src/main/res/xml/vector_settings_general.xml b/vector/src/main/res/xml/vector_settings_general.xml index 152bc64d4c..8bc15fefac 100644 --- a/vector/src/main/res/xml/vector_settings_general.xml +++ b/vector/src/main/res/xml/vector_settings_general.xml @@ -93,6 +93,15 @@ + + + + + +