public class

SliceStructure

extends java.lang.Object

 java.lang.Object

↳androidx.slice.SliceStructure

Gradle dependencies

compile group: 'androidx.slice', name: 'slice-view', version: '1.1.0-alpha02'

  • groupId: androidx.slice
  • artifactId: slice-view
  • version: 1.1.0-alpha02

Artifact androidx.slice:slice-view:1.1.0-alpha02 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.slice:slice-view com.android.support:slices-view

Overview

Class used to see if two Slices are structurally equivalent ignoring specific content such as text or icons. Two structures can be compared using SliceStructure.equals(Object).

Summary

Constructors
publicSliceStructure(Slice s)

Create a SliceStructure.

publicSliceStructure(SliceItem s)

Create a SliceStructure.

Methods
public booleanequals(java.lang.Object obj)

public UrigetUri()

public inthashCode()

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

Constructors

public SliceStructure(Slice s)

Create a SliceStructure.

public SliceStructure(SliceItem s)

Create a SliceStructure.

Methods

public Uri getUri()

Returns:

the Uri associated with this content item if one exists.

public int hashCode()

public boolean equals(java.lang.Object obj)

Source

/*
 * Copyright 2018 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.slice;

import static android.app.slice.Slice.SUBTYPE_RANGE;
import static android.app.slice.SliceItem.FORMAT_ACTION;
import static android.app.slice.SliceItem.FORMAT_BUNDLE;
import static android.app.slice.SliceItem.FORMAT_IMAGE;
import static android.app.slice.SliceItem.FORMAT_INT;
import static android.app.slice.SliceItem.FORMAT_LONG;
import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
import static android.app.slice.SliceItem.FORMAT_SLICE;
import static android.app.slice.SliceItem.FORMAT_TEXT;

import android.net.Uri;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;

/**
 * Class used to see if two Slices are structurally equivalent ignoring
 * specific content such as text or icons.
 *
 * Two structures can be compared using {@link #equals(Object)}.
 */
@RequiresApi(19)
public class SliceStructure {

    private final String mStructure;
    private final Uri mUri;

    /**
     * Create a SliceStructure.
     */
    public SliceStructure(Slice s) {
        StringBuilder str = new StringBuilder();
        getStructure(s, str);
        mStructure = str.toString();
        mUri = s.getUri();
    }

    /**
     * Create a SliceStructure.
     * @hide
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY)
    public SliceStructure(SliceItem s) {
        StringBuilder str = new StringBuilder();
        getStructure(s, str);
        mStructure = str.toString();
        if (FORMAT_ACTION.equals(s.getFormat()) || FORMAT_SLICE.equals(s.getFormat())) {
            mUri = s.getSlice().getUri();
        } else {
            mUri = null;
        }
    }

    /**
     * @return the Uri associated with this content item if one exists.
     * @hide
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY)
    @Nullable
    public Uri getUri() {
        return mUri;
    }

    @Override
    public int hashCode() {
        return mStructure.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof SliceStructure)) return false;
        SliceStructure other = (SliceStructure) obj;
        return mStructure.equals(other.mStructure);
    }

    private static void getStructure(Slice s, StringBuilder str) {
        str.append("s{");
        for (SliceItem item : s.getItems()) {
            getStructure(item, str);
        }
        str.append("}");
    }

    private static void getStructure(SliceItem item, StringBuilder str) {
        switch (item.getFormat()) {
            case FORMAT_SLICE:
                getStructure(item.getSlice(), str);
                break;
            case FORMAT_ACTION:
                str.append('a');
                if (SUBTYPE_RANGE.equals(item.getSubType())) {
                    str.append('r');
                }
                getStructure(item.getSlice(), str);
                break;
            case FORMAT_TEXT:
                str.append('t');
                break;
            case FORMAT_IMAGE:
                str.append('i');
                break;
            case FORMAT_INT:
            case FORMAT_LONG:
            case FORMAT_REMOTE_INPUT:
            case FORMAT_BUNDLE:
            default:
                // Generally adding or removing these types is ok.
                break;
        }
    }
}