diff --git a/app/build.gradle b/app/build.gradle index a11f15079..50c5042c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -161,7 +161,6 @@ dependencies { implementation "dev.chrisbanes.insetter:insetter:0.6.1" - implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5' implementation 'com.github.Adonai:jaudiotagger:2.3.15' normalImplementation 'com.anjlab.android.iab.v3:library:2.0.3' implementation 'com.r0adkll:slidableactivity:2.1.0' diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 68494eeea..44482f76d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -19,53 +19,17 @@ import android.content.ClipboardManager import android.content.Intent import android.os.Bundle import android.view.MenuItem -import android.view.inputmethod.EditorInfo -import androidx.annotation.StringDef -import androidx.annotation.StringRes import androidx.core.content.getSystemService import androidx.core.net.toUri -import androidx.lifecycle.lifecycleScope -import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.activities.bugreport.model.DeviceInfo -import code.name.monkey.retromusic.activities.bugreport.model.Report -import code.name.monkey.retromusic.activities.bugreport.model.github.ExtraInfo -import code.name.monkey.retromusic.activities.bugreport.model.github.GithubLogin -import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarget import code.name.monkey.retromusic.databinding.ActivityBugReportBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto import code.name.monkey.retromusic.extensions.showToast -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.google.android.material.textfield.TextInputLayout -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import org.eclipse.egit.github.core.Issue -import org.eclipse.egit.github.core.client.GitHubClient -import org.eclipse.egit.github.core.client.RequestException -import org.eclipse.egit.github.core.service.IssueService -import java.io.IOException - -private const val RESULT_SUCCESS = "RESULT_OK" -private const val RESULT_BAD_CREDENTIALS = "RESULT_BAD_CREDENTIALS" -private const val RESULT_INVALID_TOKEN = "RESULT_INVALID_TOKEN" -private const val RESULT_ISSUES_NOT_ENABLED = "RESULT_ISSUES_NOT_ENABLED" -private const val RESULT_UNKNOWN = "RESULT_UNKNOWN" - -@StringDef( - RESULT_SUCCESS, - RESULT_BAD_CREDENTIALS, - RESULT_INVALID_TOKEN, - RESULT_ISSUES_NOT_ENABLED, - RESULT_UNKNOWN -) -@Retention(AnnotationRetention.SOURCE) -private annotation class Result open class BugReportActivity : AbsThemeActivity() { @@ -91,72 +55,19 @@ open class BugReportActivity : AbsThemeActivity() { setSupportActionBar(binding.toolbar) ToolbarContentTintHelper.colorBackButton(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) - TintHelper.setTintAuto(binding.cardReport.optionUseAccount, accentColor, false) - binding.cardReport.optionUseAccount.setOnClickListener { - binding.cardReport.inputTitle.isEnabled = true - binding.cardReport.inputDescription.isEnabled = true - binding.cardReport.inputUsername.isEnabled = true - binding.cardReport.inputPassword.isEnabled = true - - binding.cardReport.optionAnonymous.isChecked = false - binding.sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { - override fun onHidden(fab: FloatingActionButton?) { - super.onHidden(fab) - binding.sendFab.setImageResource(R.drawable.ic_send) - binding.sendFab.show() - } - }) - } - TintHelper.setTintAuto(binding.cardReport.optionAnonymous, accentColor, false) - binding.cardReport.optionAnonymous.setOnClickListener { - binding.cardReport.inputTitle.isEnabled = false - binding.cardReport.inputDescription.isEnabled = false - binding.cardReport.inputUsername.isEnabled = false - binding.cardReport.inputPassword.isEnabled = false - - binding.cardReport.optionUseAccount.isChecked = false - binding.sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { - override fun onHidden(fab: FloatingActionButton?) { - super.onHidden(fab) - binding.sendFab.setImageResource(R.drawable.ic_open_in_browser) - binding.sendFab.show() - } - }) - } - - binding.cardReport.inputPassword.setOnEditorActionListener { _, actionId, _ -> - if (actionId == EditorInfo.IME_ACTION_SEND) { - reportIssue() - return@setOnEditorActionListener true - } - false - } binding.cardDeviceInfo.airTextDeviceInfo.setOnClickListener { copyDeviceInfoToClipBoard() } TintHelper.setTintAuto(binding.sendFab, accentColor, true) binding.sendFab.setOnClickListener { reportIssue() } - - MaterialUtil.setTint(binding.cardReport.inputLayoutTitle, false) - MaterialUtil.setTint(binding.cardReport.inputLayoutDescription, false) - MaterialUtil.setTint(binding.cardReport.inputLayoutUsername, false) - MaterialUtil.setTint(binding.cardReport.inputLayoutPassword, false) } private fun reportIssue() { - if (binding.cardReport.optionUseAccount.isChecked) { - if (!validateInput()) return - val username = binding.cardReport.inputUsername.text.toString() - val password = binding.cardReport.inputPassword.text.toString() - sendBugReport(GithubLogin(username, password)) - } else { - copyDeviceInfoToClipBoard() - - val i = Intent(Intent.ACTION_VIEW) - i.data = ISSUE_TRACKER_LINK.toUri() - i.flags = Intent.FLAG_ACTIVITY_NEW_TASK - startActivity(i) - } + copyDeviceInfoToClipBoard() + val i = Intent(Intent.ACTION_VIEW) + i.data = ISSUE_TRACKER_LINK.toUri() + i.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(i) } private fun copyDeviceInfoToClipBoard() { @@ -166,67 +77,6 @@ open class BugReportActivity : AbsThemeActivity() { showToast(R.string.copied_device_info_to_clipboard) } - private fun validateInput(): Boolean { - var hasErrors = false - - if (binding.cardReport.optionUseAccount.isChecked) { - if (binding.cardReport.inputUsername.text.isNullOrEmpty()) { - setError(binding.cardReport.inputLayoutUsername, R.string.bug_report_no_username) - hasErrors = true - } else { - removeError(binding.cardReport.inputLayoutUsername) - } - - if (binding.cardReport.inputPassword.text.isNullOrEmpty()) { - setError(binding.cardReport.inputLayoutPassword, R.string.bug_report_no_password) - hasErrors = true - } else { - removeError(binding.cardReport.inputLayoutPassword) - } - } - - if (binding.cardReport.inputTitle.text.isNullOrEmpty()) { - setError(binding.cardReport.inputLayoutTitle, R.string.bug_report_no_title) - hasErrors = true - } else { - removeError(binding.cardReport.inputLayoutTitle) - } - - if (binding.cardReport.inputDescription.text.isNullOrEmpty()) { - setError(binding.cardReport.inputLayoutDescription, R.string.bug_report_no_description) - hasErrors = true - } else { - removeError(binding.cardReport.inputLayoutDescription) - } - - return !hasErrors - } - - private fun setError(editTextLayout: TextInputLayout, @StringRes errorRes: Int) { - editTextLayout.error = getString(errorRes) - } - - private fun removeError(editTextLayout: TextInputLayout) { - editTextLayout.error = null - } - - private fun sendBugReport(login: GithubLogin) { - if (!validateInput()) return - - val bugTitle = binding.cardReport.inputTitle.text.toString() - val bugDescription = binding.cardReport.inputDescription.text.toString() - - val extraInfo = ExtraInfo() - onSaveExtraInfo() - - val report = Report(bugTitle, bugDescription, deviceInfo, extraInfo) - val target = GithubTarget("RetroMusicPlayer", "RetroMusicPlayer") - - reportIssue(report, target, login) - } - - private fun onSaveExtraInfo() {} - override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { onBackPressed() @@ -234,83 +84,8 @@ open class BugReportActivity : AbsThemeActivity() { return super.onOptionsItemSelected(item) } - private fun reportIssue( - report: Report, - target: GithubTarget, - login: GithubLogin - ) { - val client: GitHubClient = if (login.shouldUseApiToken()) { - GitHubClient().setOAuth2Token(login.apiToken) - } else { - GitHubClient().setCredentials(login.username, login.password) - } - - val issue = Issue().setTitle(report.title).setBody(report.getDescription()) - - lifecycleScope.launch(Dispatchers.IO) { - val result = try { - IssueService(client).createIssue(target.username, target.repository, issue) - RESULT_SUCCESS - } catch (e: RequestException) { - when (e.status) { - STATUS_BAD_CREDENTIALS -> { - if (login.shouldUseApiToken()) RESULT_INVALID_TOKEN else RESULT_BAD_CREDENTIALS - } - STATUS_ISSUES_NOT_ENABLED -> RESULT_ISSUES_NOT_ENABLED - else -> { - RESULT_UNKNOWN - throw e - } - } - } catch (e: IOException) { - e.printStackTrace() - RESULT_UNKNOWN - } - - withContext(Dispatchers.Main) { - val activity = this@BugReportActivity - when (result) { - RESULT_SUCCESS -> MaterialAlertDialogBuilder(activity) - .setTitle(R.string.bug_report_success) - .setPositiveButton(android.R.string.ok) { _, _ -> tryToFinishActivity() } - .show() - RESULT_BAD_CREDENTIALS -> MaterialAlertDialogBuilder(activity) - .setTitle(R.string.bug_report_failed) - .setMessage(R.string.bug_report_failed_wrong_credentials) - .setPositiveButton(android.R.string.ok, null) - .show() - RESULT_INVALID_TOKEN -> MaterialAlertDialogBuilder(activity) - .setTitle(R.string.bug_report_failed) - .setMessage(R.string.bug_report_failed_invalid_token) - .setPositiveButton(android.R.string.ok, null) - .show() - RESULT_ISSUES_NOT_ENABLED -> MaterialAlertDialogBuilder(activity) - .setTitle(R.string.bug_report_failed) - .setMessage(R.string.bug_report_failed_issues_not_available) - .setPositiveButton(android.R.string.ok, null) - .show() - else -> MaterialAlertDialogBuilder(activity) - .setTitle(R.string.bug_report_failed) - .setMessage(R.string.bug_report_failed_unknown) - .setPositiveButton(android.R.string.ok) { _, _ -> tryToFinishActivity() } - .setNegativeButton(android.R.string.cancel) { _, _ -> tryToFinishActivity() } - .show() - } - } - } - } - - private fun tryToFinishActivity() { - if (!isFinishing) { - finish() - } - } - companion object { - - private const val STATUS_BAD_CREDENTIALS = 401 - private const val STATUS_ISSUES_NOT_ENABLED = 410 private const val ISSUE_TRACKER_LINK = - "https://github.com/RetroMusicPlayer/RetroMusicPlayer" + "https://github.com/RetroMusicPlayer/RetroMusicPlayer/issues" } } diff --git a/app/src/main/res/layout/activity_bug_report.xml b/app/src/main/res/layout/activity_bug_report.xml index 04f5b3568..3f52c6962 100644 --- a/app/src/main/res/layout/activity_bug_report.xml +++ b/app/src/main/res/layout/activity_bug_report.xml @@ -35,12 +35,28 @@ android:clipToPadding="false" android:orientation="vertical"> - + android:layout_marginStart="16dp" + android:orientation="vertical" + android:paddingTop="8dp" + android:paddingBottom="8dp"> + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file