diff --git a/app/src/main/java/com/github/kr328/clash/FeedbackActivity.kt b/app/src/main/java/com/github/kr328/clash/FeedbackActivity.kt index f23d1e1..5f8ab06 100644 --- a/app/src/main/java/com/github/kr328/clash/FeedbackActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/FeedbackActivity.kt @@ -1,15 +1,37 @@ package com.github.kr328.clash +import android.content.ClipData +import android.content.ClipboardManager import android.os.Bundle +import android.widget.Toast import androidx.annotation.Keep +import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import kotlinx.android.synthetic.main.activity_feedback.* class FeedbackActivity : BaseActivity() { + companion object { + const val KEY_FEEDBACK_ID = "feedback_id" + } + @Keep class Fragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.feedback, rootKey) + + findPreference(KEY_FEEDBACK_ID)?.apply { + summary = MainApplication.userIdentifier + + onPreferenceClickListener = Preference.OnPreferenceClickListener { p -> + val data = ClipData.newPlainText("userIdentifier", summary) + + requireContext().getSystemService(ClipboardManager::class.java)?.setPrimaryClip(data) + + Toast.makeText(requireContext(), R.string.feedback_feedback_id_copied, Toast.LENGTH_LONG).show() + + true + } + } } } diff --git a/app/src/main/java/com/github/kr328/clash/MainApplication.kt b/app/src/main/java/com/github/kr328/clash/MainApplication.kt index 9561e2f..6bbb678 100644 --- a/app/src/main/java/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/java/com/github/kr328/clash/MainApplication.kt @@ -2,11 +2,14 @@ package com.github.kr328.clash import android.app.Application import android.content.Context +import android.os.Build import com.crashlytics.android.Crashlytics import com.github.kr328.clash.core.Constants import com.github.kr328.clash.core.utils.Log import com.google.firebase.FirebaseApp import io.fabric.sdk.android.Fabric +import java.security.MessageDigest +import kotlin.experimental.and class MainApplication : Application() { @@ -16,10 +19,28 @@ class MainApplication : Application() { const val PROXY_MODE_PROXY_ONLY = "proxy_only" val GOOGLE_PLAY_INSTALLER = listOf("com.android.vending", "com.google.android.feedback") - const val CRASHLYTICS_GOOGLE_PLAY_KEY = "install_from_google" + const val CRASHLYTICS_FROM_PLAY_KEY = "install_from_google" const val CRASHLYTICS_SPLIT_APK_KEY = "split_apk" + val userIdentifier: String by lazy { + val archive = instance.packageManager.getPackageInfo(instance.packageName, 0) + val encoder = MessageDigest.getInstance("md5") + + encoder.digest((Build.ID + archive.lastUpdateTime).toByteArray()).toHexString() + } + lateinit var instance: MainApplication + + private fun ByteArray.toHexString(): String { + return this.map { + Integer.toHexString(it.toInt() and 0xff) + }.map { + if ( it.length < 2 ) + "0$it" + else + it + }.joinToString(separator = "") + } } override fun attachBaseContext(base: Context?) { @@ -38,8 +59,9 @@ class MainApplication : Application() { Fabric.with(this, Crashlytics()) } - Crashlytics.setBool(CRASHLYTICS_GOOGLE_PLAY_KEY, detectFromPlay()) + Crashlytics.setBool(CRASHLYTICS_FROM_PLAY_KEY, detectFromPlay()) Crashlytics.setBool(CRASHLYTICS_SPLIT_APK_KEY, detectSplitArchive()) + Crashlytics.setUserIdentifier(userIdentifier) Log.handler = object: Log.LogHandler { override fun info(message: String, throwable: Throwable?) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e78064..63624bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -94,6 +94,11 @@ Not Implemented + ID + Feedback ID + Unknown + Copied + Source & Issues Upstream Github diff --git a/app/src/main/res/xml-zh/feedback.xml b/app/src/main/res/xml-zh/feedback.xml index 8a0d439..78428e9 100644 --- a/app/src/main/res/xml-zh/feedback.xml +++ b/app/src/main/res/xml-zh/feedback.xml @@ -1,5 +1,10 @@ + + + diff --git a/app/src/main/res/xml/feedback.xml b/app/src/main/res/xml/feedback.xml index b76a61b..8e4ba50 100644 --- a/app/src/main/res/xml/feedback.xml +++ b/app/src/main/res/xml/feedback.xml @@ -1,5 +1,10 @@ + + +