public final class

Renderer

extends java.lang.Object

 java.lang.Object

↳androidx.autofill.inline.Renderer

Gradle dependencies

compile group: 'androidx.autofill', name: 'autofill', version: '1.3.0-alpha01'

  • groupId: androidx.autofill
  • artifactId: autofill
  • version: 1.3.0-alpha01

Artifact androidx.autofill:autofill:1.3.0-alpha01 it located at Google repository (https://maven.google.com/)

Overview

Renderer class responsible for rendering the inline suggestion UI.

Summary

Methods
public static PendingIntentgetAttributionIntent(Slice content)

Returns a PendingIntent that will be launched on long clicking the UI to show attribution information via a .

public static BundlegetSupportedInlineUiVersionsAsBundle()

Returns all the supported versions wrapped in a .

public static Viewrender(Context context, Slice content, Bundle styles)

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Methods

public static Bundle getSupportedInlineUiVersionsAsBundle()

Returns all the supported versions wrapped in a .

public static View render(Context context, Slice content, Bundle styles)

Parameters:

context: the context used to render the view
content: represents the UI content
styles: contains a mapping from UI version to corresponding UI style specification

Returns:

a view rendered based on the provided UI content and the style with corresponding version or null when the UI version indicated by the slice is either unsupported by the Renderer, or not provided in the styles.

public static PendingIntent getAttributionIntent(Slice content)

Returns a PendingIntent that will be launched on long clicking the UI to show attribution information via a .

The attribution UI indicates to the user the source of the UI content.

Parameters:

content: the UI content which contains a PendingIntent representing the attribution information

Source

/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.autofill.inline;

import android.app.PendingIntent;
import android.app.slice.Slice;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.autofill.inline.common.SlicedContent;
import androidx.autofill.inline.v1.InlineSuggestionUi;

/**
 * Renderer class responsible for rendering the inline suggestion UI.
 */
@RequiresApi(api = Build.VERSION_CODES.R)
public final class Renderer {

    private static final String TAG = "Renderer";

    /**
     * Returns all the supported versions wrapped in a {@link Bundle}.
     */
    @NonNull
    public static Bundle getSupportedInlineUiVersionsAsBundle() {
        Bundle bundle = new Bundle();
        VersionUtils.writeSupportedVersions(bundle);
        return bundle;
    }

    /**
     * @param context the context used to render the view
     * @param content represents the UI content
     * @param styles  contains a mapping from UI version to corresponding UI style specification
     * @return a view rendered based on the provided UI content and the style with corresponding
     * version or {@code null} when the UI version indicated by the slice is either unsupported
     * by the Renderer, or not provided in the {@code styles}.
     */
    @Nullable
    public static View render(@NonNull Context context, @NonNull Slice content,
            @NonNull Bundle styles) {
        String contentVersion = SlicedContent.getVersion(content);
        if (!VersionUtils.isVersionSupported(contentVersion)) {
            Log.w(TAG, "Content version unsupported.");
            return null;
        }
        Bundle styleForSliceVersion = VersionUtils.readStyleByVersion(styles, contentVersion);
        if (styleForSliceVersion == null) {
            Log.w(TAG, "Cannot find a style with the same version as the slice.");
            return null;
        }
        switch (contentVersion) {
            case UiVersions.INLINE_UI_VERSION_1:
                InlineSuggestionUi.Style style = InlineSuggestionUi.fromBundle(
                        styleForSliceVersion);
                InlineSuggestionUi.Content contentV1 = InlineSuggestionUi.fromSlice(content);
                if (style == null || content == null) {
                    return null;
                }
                return InlineSuggestionUi.render(context, contentV1, style);
        }
        Log.w(TAG, "Renderer does not support the style/content version: " + contentVersion);
        return null;
    }

    /**
     * Returns a {@link PendingIntent} that will be launched on long clicking the UI
     * to show attribution information via a {@link android.app.Dialog}.
     *
     * <p>The attribution UI indicates to the user the source of the UI content.
     *
     * @param content the UI content which contains a {@link PendingIntent} representing the
     *                attribution information
     */
    @Nullable
    public static PendingIntent getAttributionIntent(@NonNull Slice content) {
        String contentVersion = SlicedContent.getVersion(content);
        if (!VersionUtils.isVersionSupported(contentVersion)) {
            Log.w(TAG, "Content version unsupported.");
            return null;
        }
        switch (contentVersion) {
            case UiVersions.INLINE_UI_VERSION_1:
                InlineSuggestionUi.Content contentV1 = InlineSuggestionUi.fromSlice(content);
                if (contentV1 == null) {
                    return null;
                }
                return InlineSuggestionUi.getAttributionIntent(contentV1);
        }
        Log.w(TAG, "Renderer does not support the content version: " + contentVersion);
        return null;
    }

    private Renderer() {
    }
}