diff --git a/autofill/src/main/kotlin/com/jeeldobariya/passcodes/autofill/PasswordAutofillService.kt b/autofill/src/main/kotlin/com/jeeldobariya/passcodes/autofill/PasswordAutofillService.kt index a5d30837..37042437 100644 --- a/autofill/src/main/kotlin/com/jeeldobariya/passcodes/autofill/PasswordAutofillService.kt +++ b/autofill/src/main/kotlin/com/jeeldobariya/passcodes/autofill/PasswordAutofillService.kt @@ -7,10 +7,10 @@ import android.service.autofill.FillCallback import android.service.autofill.FillRequest import android.service.autofill.FillResponse import android.service.autofill.SaveCallback +import android.service.autofill.SaveInfo import android.service.autofill.SaveRequest import android.view.autofill.AutofillValue import android.widget.RemoteViews -import android.widget.Toast import com.jeeldobariya.passcodes.database.master.PasswordEntity import com.jeeldobariya.passcodes.database.master.PasswordsDao import kotlinx.coroutines.CoroutineScope @@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import org.koin.android.ext.android.inject -// TODO: currently the code here serves as a foundation for autofill features.. +// TODO: Docs for this autofill is need in @github:PasscodesApp/Passcodes-Docs class PasswordAutofillService : AutofillService() { private val serviceScope = CoroutineScope(Dispatchers.IO) @@ -35,6 +35,8 @@ class PasswordAutofillService : AutofillService() { val viewNodes = mutableMapOf() parseStructure(structure.getWindowNodeAt(0).rootViewNode, viewNodes) + // TODO: Add support for newUsername & newPassword autofill hints. + // https://developer.android.com/reference/androidx/autofill/HintConstants#AUTOFILL_HINT_NEW_USERNAME() val usernameNode = viewNodes["username"] ?: viewNodes["emailAddress"] val passwordNode = viewNodes["password"] @@ -47,16 +49,10 @@ class PasswordAutofillService : AutofillService() { val passwordId = passwordNode.autofillId!! cancellationSignal.setOnCancelListener { - // Handle cancellation + // TODO: Handle cancellation } serviceScope.launch { - Toast.makeText( - applicationContext, - "Passcodes autofill is preview feature!!!", - Toast.LENGTH_LONG - ).show() - val passwordsDao by inject() val passwords = passwordsDao.getAllPasswords().first() val responseBuilder = FillResponse.Builder() @@ -73,6 +69,8 @@ class PasswordAutofillService : AutofillService() { ) } + // TODO: Migrate to Presentations + // @docs:developer.android.com/reference/android/service/autofill/Presentations.Builder val dataset = android.service.autofill.Dataset.Builder(presentation) .setValue(usernameId, AutofillValue.forText(password.username)) .setValue(passwordId, AutofillValue.forText(password.password)) @@ -80,6 +78,13 @@ class PasswordAutofillService : AutofillService() { responseBuilder.addDataset(dataset) } + responseBuilder.setSaveInfo( + SaveInfo.Builder( + SaveInfo.SAVE_DATA_TYPE_EMAIL_ADDRESS or SaveInfo.SAVE_DATA_TYPE_USERNAME or SaveInfo.SAVE_DATA_TYPE_PASSWORD, + arrayOf(usernameId, passwordId) + ).build() + ) + callback.onSuccess(responseBuilder.build()) } } @@ -91,6 +96,7 @@ class PasswordAutofillService : AutofillService() { val viewNodes = mutableMapOf() parseStructure(structure.getWindowNodeAt(0).rootViewNode, viewNodes) + // TODO: Add support for newUsername & newPassword autofill hints. val usernameNode = viewNodes["username"] ?: viewNodes["emailAddress"] val passwordNode = viewNodes["password"] @@ -108,11 +114,6 @@ class PasswordAutofillService : AutofillService() { notes = "Save using autofill service..." ) ) - Toast.makeText( - applicationContext, - "Open passcodes app and configure the saved password!!!", - Toast.LENGTH_LONG - ).show() } callback.onSuccess()