PasswordStore: onboard users to Oreo autofill
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
b0774febb1
commit
e6ea5f6a08
3 changed files with 44 additions and 0 deletions
|
@ -14,8 +14,10 @@ import android.content.pm.ShortcutInfo.Builder
|
||||||
import android.content.pm.ShortcutManager
|
import android.content.pm.ShortcutManager
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.Icon
|
import android.graphics.drawable.Icon
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.provider.Settings
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
|
@ -43,6 +45,8 @@ import com.github.ajalt.timberkt.w
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.zeapo.pwdstore.autofill.oreo.AutofillMatcher
|
import com.zeapo.pwdstore.autofill.oreo.AutofillMatcher
|
||||||
|
import com.zeapo.pwdstore.autofill.oreo.BrowserAutofillSupportLevel
|
||||||
|
import com.zeapo.pwdstore.autofill.oreo.getInstalledBrowsersWithAutofillSupportLevel
|
||||||
import com.zeapo.pwdstore.crypto.PgpActivity
|
import com.zeapo.pwdstore.crypto.PgpActivity
|
||||||
import com.zeapo.pwdstore.crypto.PgpActivity.Companion.getLongName
|
import com.zeapo.pwdstore.crypto.PgpActivity.Companion.getLongName
|
||||||
import com.zeapo.pwdstore.git.BaseGitActivity
|
import com.zeapo.pwdstore.git.BaseGitActivity
|
||||||
|
@ -122,6 +126,43 @@ class PasswordStore : AppCompatActivity() {
|
||||||
super.onCreate(savedInstance)
|
super.onCreate(savedInstance)
|
||||||
setContentView(R.layout.activity_pwdstore)
|
setContentView(R.layout.activity_pwdstore)
|
||||||
|
|
||||||
|
// If user is eligible for Oreo autofill, prompt them to switch.
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
|
||||||
|
!settings.getBoolean("seen_autofill_onboarding", false)) {
|
||||||
|
MaterialAlertDialogBuilder(this).run {
|
||||||
|
@SuppressLint("InflateParams")
|
||||||
|
val layout =
|
||||||
|
layoutInflater.inflate(R.layout.oreo_autofill_instructions, null)
|
||||||
|
layout.findViewById<AppCompatTextView>(R.id.intro_text).visibility = View.GONE
|
||||||
|
val supportedBrowsersTextView =
|
||||||
|
layout.findViewById<AppCompatTextView>(R.id.supportedBrowsers)
|
||||||
|
supportedBrowsersTextView.text =
|
||||||
|
getInstalledBrowsersWithAutofillSupportLevel(context).joinToString(
|
||||||
|
separator = "\n"
|
||||||
|
) {
|
||||||
|
val appLabel = it.first
|
||||||
|
val supportDescription = when (it.second) {
|
||||||
|
BrowserAutofillSupportLevel.None -> getString(R.string.oreo_autofill_no_support)
|
||||||
|
BrowserAutofillSupportLevel.FlakyFill -> getString(R.string.oreo_autofill_flaky_fill_support)
|
||||||
|
BrowserAutofillSupportLevel.PasswordFill -> getString(R.string.oreo_autofill_password_fill_support)
|
||||||
|
BrowserAutofillSupportLevel.GeneralFill -> getString(R.string.oreo_autofill_general_fill_support)
|
||||||
|
BrowserAutofillSupportLevel.GeneralFillAndSave -> getString(R.string.oreo_autofill_general_fill_and_save_support)
|
||||||
|
}
|
||||||
|
"$appLabel: $supportDescription"
|
||||||
|
}
|
||||||
|
setView(layout)
|
||||||
|
setTitle(getString(R.string.autofill_onboarding_dialog_title))
|
||||||
|
setMessage(getString(R.string.autofill_onboarding_dialog_message))
|
||||||
|
setPositiveButton(R.string.dialog_ok) { _, _ ->
|
||||||
|
settings.edit { putBoolean("seen_autofill_onboarding", true) }
|
||||||
|
startActivity(Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE).apply {
|
||||||
|
data = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
model.currentDir.observe(this) { dir ->
|
model.currentDir.observe(this) { dir ->
|
||||||
val basePath = getRepositoryDirectory(applicationContext).absoluteFile
|
val basePath = getRepositoryDirectory(applicationContext).absoluteFile
|
||||||
supportActionBar!!.apply {
|
supportActionBar!!.apply {
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
android:paddingTop="20dp">
|
android:paddingTop="20dp">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/intro_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/oreo_autofill_enable_dialog_description"
|
android:text="@string/oreo_autofill_enable_dialog_description"
|
||||||
|
|
|
@ -362,4 +362,6 @@
|
||||||
<string name="git_operation_wrong_passphrase">Wrong passphrase</string>
|
<string name="git_operation_wrong_passphrase">Wrong passphrase</string>
|
||||||
<string name="bottom_sheet_create_new_folder">Create new folder</string>
|
<string name="bottom_sheet_create_new_folder">Create new folder</string>
|
||||||
<string name="bottom_sheet_create_new_password">Create new password</string>
|
<string name="bottom_sheet_create_new_password">Create new password</string>
|
||||||
|
<string name="autofill_onboarding_dialog_title">New, revamped Autofill!</string>
|
||||||
|
<string name="autofill_onboarding_dialog_message">In this release, Autofill support has been massively improved with advanced features like anti-phishing protection and enhanced reliability. If you have been holding out on using it because of the shortcomings on the previous version, you\'ll likely love the new iteration. Give it a shot!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue