diff options
author | Marvin Borner | 2018-09-03 18:27:17 +0200 |
---|---|---|
committer | Marvin Borner | 2018-09-03 18:27:17 +0200 |
commit | b1afdcd4ed57c43c3ecda2eaae1671c4a19abcc6 (patch) | |
tree | 548e7cc6da383a928c2758a1aa37c3a481a2eb71 | |
parent | 830bf7dff7ada51454ef020170cf07566aada513 (diff) |
Added bug reporting feature :sparkles: :construction:
-rw-r--r-- | app/src/main/java/me/texx/Texx/BugReportActivity.kt | 102 | ||||
-rw-r--r-- | app/src/main/java/me/texx/Texx/LoginActivity.kt | 2 | ||||
-rw-r--r-- | app/src/main/java/me/texx/Texx/MainActivity.kt | 4 | ||||
-rw-r--r-- | app/src/main/res/layout/activity_bug_report.xml | 88 | ||||
-rw-r--r-- | app/src/main/res/menu/menu_main.xml | 5 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 8 | ||||
-rw-r--r-- | app/src/main/res/values/styles.xml | 2 |
7 files changed, 197 insertions, 14 deletions
diff --git a/app/src/main/java/me/texx/Texx/BugReportActivity.kt b/app/src/main/java/me/texx/Texx/BugReportActivity.kt index 43e90b9..c5249cd 100644 --- a/app/src/main/java/me/texx/Texx/BugReportActivity.kt +++ b/app/src/main/java/me/texx/Texx/BugReportActivity.kt @@ -1,15 +1,97 @@ package me.texx.Texx import android.os.Bundle -import com.github.paolorotolo.gitty_reporter.GittyReporter - -class BugReportActivity : GittyReporter() { - override fun init(savedInstanceState: Bundle) { - setTargetRepository("texxme", "Texx-Android") - setGuestOAuth2Token("f4f048af0e3f2d36e78b98452d3398fb8c051088") - enableUserGitHubLogin(false) - enableGuestGitHubLogin(true) - setExtraInfo("Example string") - canEditDebugInfo(false) +import android.os.StrictMode +import android.support.v7.app.AppCompatActivity +import com.github.kittinunf.fuel.android.extension.responseJson +import com.github.kittinunf.fuel.core.FuelManager +import com.github.kittinunf.fuel.httpGet +import com.github.kittinunf.fuel.httpPost +import com.madapps.prefrences.EasyPrefrences +import daio.io.dresscode.dressCodeName +import daio.io.dresscode.matchDressCode +import kotlinx.android.synthetic.main.activity_bug_report.* +import me.texx.Texx.util.ThemeUtil +import org.jetbrains.anko.longToast +import org.json.JSONObject + +/** + * Activity to report bugs/issues directly on Github + */ +class BugReportActivity : AppCompatActivity() { + /** + * Set initial configuration + */ + override fun onCreate(savedInstanceState: Bundle?) { + matchDressCode() + super.onCreate(savedInstanceState) + dressCodeName = ThemeUtil.getThemeName(this) + setContentView(R.layout.activity_bug_report) + + val debugInformation = getDebugInformation() + debug_text.text = debugInformation + + fab.setOnClickListener { + submitToGithub(debugInformation) + } + } + + private fun submitToGithub(debugInformation: String) { + val accessToken = "f4f048af0e3f2d36e78b98452d3398fb8c051088" // TODO: Secure GitHub token + + val issueJson = JSONObject() + val issueTitle = edit_title.text.toString() + val issueDescription = edit_description.text.toString() + val username = getVerifiedUsername() + issueJson.put("title", issueTitle) + issueJson.put("body", "$issueDescription\n$debugInformation\n\nBy ${username.toString()}") + + // clear configuration for github api // TODO: Cleaner solution for fuel configuration + FuelManager.instance.baseHeaders = null + FuelManager.instance.basePath = null // TODO: Set IP as public variable + + username?.let { + val policy = StrictMode.ThreadPolicy.Builder() + .permitAll().build() + StrictMode.setThreadPolicy(policy) + val (_, response, res) = "https://api.github.com/repos/texxme/Texx-Android/issues/".httpPost() // verify by making request to user api // TODO: More secure way of verifying + .header("Authorization" to "token: $accessToken") + .body(issueJson.toString()) + .responseString() + longToast(if (response.httpStatusCode == 201) "Issue submitted" else "Something went wrong :(") + } ?: run { + longToast("Error verifying your account.") + } + + // set configuration again + val texxAccessToken: String? = SecureStorage(this@BugReportActivity).get("access_token") + if (texxAccessToken != null) + FuelManager.instance.baseHeaders = mapOf("Authorization" to "Bearer $accessToken") + FuelManager.instance.basePath = "http://192.168.137.1" // TODO: Set IP as public variable + } + + private fun getVerifiedUsername(): Any? { + val userID = EasyPrefrences(this@BugReportActivity).getString("user_id") + val policy = StrictMode.ThreadPolicy.Builder() + .permitAll().build() + StrictMode.setThreadPolicy(policy) + val (_, _, result) = "/users/$userID".httpGet() // verify by making request to user api // TODO: More secure way of verifying + .responseJson() + return (result.get().obj().get("user") as JSONObject).get("name") + } + + private fun getDebugInformation(): String { + return "Debug Information:" + + "\n OS Version: " + System.getProperty("os.version") + "(" + android.os.Build.VERSION.INCREMENTAL + ")" + + "\n OS API Level: " + android.os.Build.VERSION.SDK_INT + + "\n Device: " + android.os.Build.DEVICE + + "\n Model (and Product): " + android.os.Build.MODEL + " (" + android.os.Build.PRODUCT + ")" + + "\n RELEASE: " + android.os.Build.VERSION.RELEASE + + "\n BRAND: " + android.os.Build.BRAND + + "\n DISPLAY: " + android.os.Build.DISPLAY + + "\n CPU_ABI: " + android.os.Build.CPU_ABI + + "\n CPU_ABI2: " + android.os.Build.CPU_ABI2 + + "\n HARDWARE: " + android.os.Build.HARDWARE + + "\n MANUFACTURER: " + android.os.Build.MANUFACTURER } } diff --git a/app/src/main/java/me/texx/Texx/LoginActivity.kt b/app/src/main/java/me/texx/Texx/LoginActivity.kt index 27a4ca2..d177196 100644 --- a/app/src/main/java/me/texx/Texx/LoginActivity.kt +++ b/app/src/main/java/me/texx/Texx/LoginActivity.kt @@ -300,7 +300,7 @@ class LoginActivity : AppCompatActivity(), LoaderCallbacks<Cursor> { showProgress(false) if (success!!) { - startActivity<MainActivity>() + startActivity<RoutingActivity>() longToast("Successfully logged in.") } else { password.error = getString(R.string.error_incorrect_password) diff --git a/app/src/main/java/me/texx/Texx/MainActivity.kt b/app/src/main/java/me/texx/Texx/MainActivity.kt index 730f6b2..e621ef8 100644 --- a/app/src/main/java/me/texx/Texx/MainActivity.kt +++ b/app/src/main/java/me/texx/Texx/MainActivity.kt @@ -62,6 +62,10 @@ class MainActivity : AppCompatActivity() { startActivity<SettingsActivity>() true } + R.id.action_bug_report -> { + startActivity<BugReportActivity>() + true + } else -> super.onOptionsItemSelected(item) } } diff --git a/app/src/main/res/layout/activity_bug_report.xml b/app/src/main/res/layout/activity_bug_report.xml new file mode 100644 index 0000000..418aa95 --- /dev/null +++ b/app/src/main/res/layout/activity_bug_report.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/coordinatorLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".BugReportActivity"> + + <android.support.constraint.ConstraintLayout + android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <EditText + android:id="@+id/edit_title" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="24dp" + android:layout_marginStart="24dp" + android:ems="10" + android:hint="@string/bug_report_edit_title_hint" + android:inputType="text|textAutoCorrect" + app:layout_constraintBottom_toTopOf="@+id/edit_description" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/title" /> + + <TextView + android:id="@+id/debug_text" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="24dp" + android:layout_marginStart="24dp" + android:layout_marginTop="24dp" + app:layout_constraintBottom_toTopOf="@+id/fab" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/edit_description" /> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="16dp" + android:layout_marginEnd="16dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:srcCompat="@drawable/ic_send_black_24dp" /> + + <EditText + android:id="@+id/edit_description" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="24dp" + android:layout_marginStart="24dp" + android:layout_marginTop="24dp" + android:ems="10" + android:hint="@string/bug_report_edit_description" + android:inputType="textMultiLine" + app:layout_constraintBottom_toTopOf="@+id/debug_text" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/edit_title" /> + + <TextView + android:id="@+id/title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="24dp" + android:text="@string/bug_report_title" + android:textSize="24sp" + app:layout_constraintBottom_toTopOf="@+id/edit_title" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + </android.support.constraint.ConstraintLayout> + +</android.support.constraint.ConstraintLayout>
\ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index dc0c571..4c2cdb0 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -7,4 +7,9 @@ android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never" /> + <item + android:id="@+id/action_bug_report" + android:orderInCategory="100" + android:title="@string/action_bug_report" + app:showAsAction="never" /> </menu> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5c21dd9..573d20a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,7 @@ <resources> <string name="app_name">Texx</string> <string name="action_settings">Settings</string> + <string name="action_bug_report">Report issue</string> <string name="title_activity_login">Sign in</string> <!-- Strings related to login --> @@ -19,17 +20,18 @@ <string name="title_activity_app_settings">App Settings</string> <!-- Strings related to Settings --> - - <!-- Example General settings --> <string name="pref_header_general">General</string> <string name="pref_header_account">Account</string> - <string name="pref_title_dark_theme">Enable Dark theme</string> <string name="pref_description_dark_theme_on">Theme for nights or dark-theme lovers</string> <string name="pref_description_dark_theme_off">Theme for days or light-theme lovers</string> + <!-- Strings related to bug reporting --> <string name="pref_title_username">Username</string> <string name="pref_default_username">John Doe</string> + <string name="bug_report_title">Report an issue</string> + <string name="bug_report_edit_title_hint">Title</string> + <string name="bug_report_edit_description">Describe your issue</string> <!--<string name="pref_title_add_friends_to_messages">Add friends to messages</string> <string-array name="pref_example_list_titles"> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 85a68c6..749dc4f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,6 +7,7 @@ <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> + <item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item> </style> <style name="AppTheme.Dark" parent="Theme.AppCompat"> @@ -15,6 +16,7 @@ <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> + <item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item> </style> |