aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2018-09-03 18:27:17 +0200
committerMarvin Borner2018-09-03 18:27:17 +0200
commitb1afdcd4ed57c43c3ecda2eaae1671c4a19abcc6 (patch)
tree548e7cc6da383a928c2758a1aa37c3a481a2eb71
parent830bf7dff7ada51454ef020170cf07566aada513 (diff)
Added bug reporting feature :sparkles: :construction:
-rw-r--r--app/src/main/java/me/texx/Texx/BugReportActivity.kt102
-rw-r--r--app/src/main/java/me/texx/Texx/LoginActivity.kt2
-rw-r--r--app/src/main/java/me/texx/Texx/MainActivity.kt4
-rw-r--r--app/src/main/res/layout/activity_bug_report.xml88
-rw-r--r--app/src/main/res/menu/menu_main.xml5
-rw-r--r--app/src/main/res/values/strings.xml8
-rw-r--r--app/src/main/res/values/styles.xml2
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>