public static void dumpStructure(AssistStructure structure) { int nodeCount = structure.getWindowNodeCount(); Log.v(TAG, "dumpStructure(): component=" + structure.getActivityComponent() + " numberNodes=" + nodeCount); for (int i = 0; i < nodeCount; i++) { Log.v(TAG, "node #" + i); WindowNode node = structure.getWindowNodeAt(i); dumpNode(" ", node.getRootViewNode()); } }
/** * Gets a node if it matches the filter criteria for the given id. */ public static ViewNode findNodeByFilter(@NonNull AssistStructure structure, @NonNull Object id, @NonNull NodeFilter filter) { logv("Parsing request for activity %s", structure.getActivityComponent()); final int nodes = structure.getWindowNodeCount(); for (int i = 0; i < nodes; i++) { final WindowNode windowNode = structure.getWindowNodeAt(i); final ViewNode rootNode = windowNode.getRootViewNode(); final ViewNode node = findNodeByFilter(rootNode, id, filter); if (node != null) { return node; } } return null; }
public static void dumpStructure(AssistStructure structure) { if (logVerboseEnabled()) { int nodeCount = structure.getWindowNodeCount(); logv("dumpStructure(): component=%s numberNodes=%d", structure.getActivityComponent(), nodeCount); for (int i = 0; i < nodeCount; i++) { logv("node #%d", i); WindowNode node = structure.getWindowNodeAt(i); dumpNode(new StringBuilder(), " ", node.getRootViewNode(), 0); } } }
@Override public void onLoaded( HashMap<String, FieldTypeWithHeuristics> fieldTypesByAutofillHint) { mAutofillDataBuilder = new ClientAutofillDataBuilder( fieldTypesByAutofillHint, getPackageName(), parser); ClientViewMetadataBuilder clientViewMetadataBuilder = new ClientViewMetadataBuilder(parser, fieldTypesByAutofillHint); mClientViewMetadata = clientViewMetadataBuilder.buildClientViewMetadata(); String packageName = latestStructure.getActivityComponent().getPackageName(); if (!mPackageVerificationRepository.putPackageSignatures(packageName)) { callback.onFailure(getString(R.string.invalid_package_signature)); return; } if (logVerboseEnabled()) { logv("onSaveRequest(): clientState=%s", bundleToString(request.getClientState())); } dumpStructure(latestStructure); checkWebDomainAndBuildAutofillData(packageName, callback); }
@Override public void onLoaded(HashMap<String, FieldTypeWithHeuristics> fieldTypesByAutofillHint) { DatasetAdapter datasetAdapter = new DatasetAdapter(parser); ClientViewMetadataBuilder clientViewMetadataBuilder = new ClientViewMetadataBuilder(parser, fieldTypesByAutofillHint); mClientViewMetadata = clientViewMetadataBuilder.buildClientViewMetadata(); mResponseAdapter = new ResponseAdapter(MyAutofillService.this, mClientViewMetadata, getPackageName(), datasetAdapter); String packageName = latestStructure.getActivityComponent().getPackageName(); if (!mPackageVerificationRepository.putPackageSignatures(packageName)) { callback.onFailure(getString(R.string.invalid_package_signature)); return; } if (logVerboseEnabled()) { logv("onFillRequest(): clientState=%s", bundleToString(request.getClientState())); dumpStructure(latestStructure); } cancellationSignal.setOnCancelListener(() -> logw("Cancel autofill not implemented in this sample.") ); fetchDataAndGenerateResponse(fieldTypesByAutofillHint, responseAuth, datasetAuth, manual, callback); }