diff --git a/app/src/main/java/me/phh/treble/app/EntryService.kt b/app/src/main/java/me/phh/treble/app/EntryService.kt
index be4b0fea91f5..ff6133d98e4e 100644
--- a/app/src/main/java/me/phh/treble/app/EntryService.kt
+++ b/app/src/main/java/me/phh/treble/app/EntryService.kt
@@ -42,6 +42,7 @@ class EntryService: Service() {
tryC { Samsung.startup(this) }
tryC { Hostapd.startup(this) }
tryC { Xiaomi.startup(this) }
+ tryC { Qin.startup(this) }
tryC { Qualcomm.startup(this) }
tryC { Vsmart.startup(this) }
tryC { Nubia.startup(this) }
diff --git a/app/src/main/java/me/phh/treble/app/Qin.kt b/app/src/main/java/me/phh/treble/app/Qin.kt
new file mode 100644
index 000000000000..45feb5dd9b39
--- /dev/null
+++ b/app/src/main/java/me/phh/treble/app/Qin.kt
@@ -0,0 +1,27 @@
+package me.phh.treble.app
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.preference.PreferenceManager
+import android.util.Log
+import java.io.File
+import java.lang.Exception
+
+object Qin: EntryStartup {
+ val spListener = SharedPreferences.OnSharedPreferenceChangeListener { sp, key ->
+ when(key) {
+ QinSettings.dt2w -> {
+ val b = sp.getBoolean(key, false)
+ val value = if(b) "1" else "0"
+ Misc.safeSetprop("persist.sys.phh.qin.dt2w", value)
+ }
+ }
+ }
+
+ override fun startup(ctxt: Context) {
+ if(!QinSettings.enabled()) return
+ Log.d("PHH", "Starting QIN service")
+ val sp = PreferenceManager.getDefaultSharedPreferences(ctxt)
+ sp.registerOnSharedPreferenceChangeListener(spListener)
+ }
+}
diff --git a/app/src/main/java/me/phh/treble/app/QinSettings.kt b/app/src/main/java/me/phh/treble/app/QinSettings.kt
new file mode 100644
index 000000000000..8e16c26a6110
--- /dev/null
+++ b/app/src/main/java/me/phh/treble/app/QinSettings.kt
@@ -0,0 +1,18 @@
+package me.phh.treble.app
+
+import android.os.Bundle
+
+object QinSettings : Settings {
+ val dt2w = "key_qin_dt2w"
+
+ override fun enabled() = Tools.vendorFp.contains("s9863a1h10_Natv")
+}
+
+class QinSettingsFragment : SettingsFragment() {
+ override val preferencesResId = R.xml.pref_qin
+
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ super.onCreatePreferences(savedInstanceState, rootKey)
+ android.util.Log.d("PHH", "Loading QIN fragment ${QinSettings.enabled()}")
+ }
+}
diff --git a/app/src/main/java/me/phh/treble/app/SettingsActivity.kt b/app/src/main/java/me/phh/treble/app/SettingsActivity.kt
index 561198341d05..39cc64a91ffb 100644
--- a/app/src/main/java/me/phh/treble/app/SettingsActivity.kt
+++ b/app/src/main/java/me/phh/treble/app/SettingsActivity.kt
@@ -55,6 +55,8 @@ class SettingsActivity : PreferenceActivity() {
target.removeIf { it.fragment == SamsungSettingsFragment::class.java.name }
if (!XiaomiSettings.enabled())
target.removeIf { it.fragment == XiaomiSettingsFragment::class.java.name }
+ if (!QinSettings.enabled())
+ target.removeIf { it.fragment == QinSettingsFragment::class.java.name }
if (!OppoSettings.enabled())
target.removeIf { it.fragment == OppoSettingsFragment::class.java.name }
if (!QualcommSettings.enabled())
@@ -80,6 +82,7 @@ class SettingsActivity : PreferenceActivity() {
|| MiscSettingsFragment::class.java.name == fragmentName
|| SamsungSettingsFragment::class.java.name == fragmentName
|| XiaomiSettingsFragment::class.java.name == fragmentName
+ || QinSettingsFragment::class.java.name == fragmentName
|| OppoSettingsFragment::class.java.name == fragmentName
|| QualcommSettingsFragment::class.java.name == fragmentName
|| VsmartSettingsFragment::class.java.name == fragmentName
diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml
index d7993bd9f907..95c8664dec19 100644
--- a/app/src/main/res/xml/pref_headers.xml
+++ b/app/src/main/res/xml/pref_headers.xml
@@ -26,6 +26,9 @@
+
diff --git a/app/src/main/res/xml/pref_qin.xml b/app/src/main/res/xml/pref_qin.xml
new file mode 100644
index 000000000000..59f93b83955a
--- /dev/null
+++ b/app/src/main/res/xml/pref_qin.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+