Merge "Define custom equals method for bundles in the inline APIs" into rvc-dev am: 257aa916ac am: 8ab445a7a9
Change-Id: I03b161351e49dae841521f8262d9d48a11ad7e8e
This commit is contained in:
@@ -30,6 +30,7 @@ import android.widget.inline.InlinePresentationSpec;
|
||||
|
||||
import com.android.internal.util.DataClass;
|
||||
import com.android.internal.util.Preconditions;
|
||||
import com.android.internal.widget.InlinePresentationStyleUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -113,6 +114,10 @@ public final class InlineSuggestionsRequest implements Parcelable {
|
||||
mHostInputToken = hostInputToken;
|
||||
}
|
||||
|
||||
private boolean extrasEquals(@NonNull Bundle extras) {
|
||||
return InlinePresentationStyleUtils.bundleEquals(mExtras, extras);
|
||||
}
|
||||
|
||||
// TODO(b/149609075): remove once IBinder parcelling is natively supported
|
||||
private void parcelHostInputToken(@NonNull Parcel parcel, int flags) {
|
||||
parcel.writeStrongBinder(mHostInputToken);
|
||||
@@ -331,7 +336,7 @@ public final class InlineSuggestionsRequest implements Parcelable {
|
||||
&& java.util.Objects.equals(mInlinePresentationSpecs, that.mInlinePresentationSpecs)
|
||||
&& java.util.Objects.equals(mHostPackageName, that.mHostPackageName)
|
||||
&& java.util.Objects.equals(mSupportedLocales, that.mSupportedLocales)
|
||||
&& java.util.Objects.equals(mExtras, that.mExtras)
|
||||
&& extrasEquals(that.mExtras)
|
||||
&& java.util.Objects.equals(mHostInputToken, that.mHostInputToken)
|
||||
&& mHostDisplayId == that.mHostDisplayId;
|
||||
}
|
||||
@@ -603,10 +608,10 @@ public final class InlineSuggestionsRequest implements Parcelable {
|
||||
}
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1585691147541L,
|
||||
time = 1585768018462L,
|
||||
codegenVersion = "1.0.15",
|
||||
sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java",
|
||||
inputSignatures = "public static final int SUGGESTION_COUNT_UNLIMITED\nprivate final int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.widget.inline.InlinePresentationSpec> mInlinePresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.NonNull android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate int mHostDisplayId\npublic @android.compat.annotation.UnsupportedAppUsage @android.annotation.NonNull java.util.List<android.view.inline.InlinePresentationSpec> getPresentationSpecs()\npublic void setHostInputToken(android.os.IBinder)\nprivate void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic void setHostDisplayId(int)\nprivate void onConstructed()\nprivate static int defaultMaxSuggestionCount()\nprivate static java.lang.String defaultHostPackageName()\nprivate static android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.NonNull android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\npublic @android.compat.annotation.UnsupportedAppUsage @android.annotation.NonNull android.view.inputmethod.InlineSuggestionsRequest.Builder addPresentationSpecs(android.view.inline.InlinePresentationSpec)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
|
||||
inputSignatures = "public static final int SUGGESTION_COUNT_UNLIMITED\nprivate final int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.widget.inline.InlinePresentationSpec> mInlinePresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.NonNull android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate int mHostDisplayId\npublic @android.compat.annotation.UnsupportedAppUsage @android.annotation.NonNull java.util.List<android.view.inline.InlinePresentationSpec> getPresentationSpecs()\npublic void setHostInputToken(android.os.IBinder)\nprivate boolean extrasEquals(android.os.Bundle)\nprivate void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic void setHostDisplayId(int)\nprivate void onConstructed()\nprivate static int defaultMaxSuggestionCount()\nprivate static java.lang.String defaultHostPackageName()\nprivate static android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.NonNull android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\npublic @android.compat.annotation.UnsupportedAppUsage @android.annotation.NonNull android.view.inputmethod.InlineSuggestionsRequest.Builder addPresentationSpecs(android.view.inline.InlinePresentationSpec)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.os.Parcelable;
|
||||
import android.util.Size;
|
||||
|
||||
import com.android.internal.util.DataClass;
|
||||
import com.android.internal.widget.InlinePresentationStyleUtils;
|
||||
|
||||
/**
|
||||
* This class represents the presentation specification by which an inline suggestion
|
||||
@@ -52,6 +53,10 @@ public final class InlinePresentationSpec implements Parcelable {
|
||||
return Bundle.EMPTY;
|
||||
}
|
||||
|
||||
private boolean styleEquals(@NonNull Bundle style) {
|
||||
return InlinePresentationStyleUtils.bundleEquals(mStyle, style);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@DataClass.Suppress({"setMaxSize", "setMinSize"})
|
||||
abstract static class BaseBuilder {
|
||||
@@ -143,7 +148,7 @@ public final class InlinePresentationSpec implements Parcelable {
|
||||
return true
|
||||
&& java.util.Objects.equals(mMinSize, that.mMinSize)
|
||||
&& java.util.Objects.equals(mMaxSize, that.mMaxSize)
|
||||
&& java.util.Objects.equals(mStyle, that.mStyle);
|
||||
&& styleEquals(that.mStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -280,10 +285,10 @@ public final class InlinePresentationSpec implements Parcelable {
|
||||
}
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1585605466300L,
|
||||
time = 1585768046898L,
|
||||
codegenVersion = "1.0.15",
|
||||
sourceFile = "frameworks/base/core/java/android/widget/inline/InlinePresentationSpec.java",
|
||||
inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.NonNull android.os.Bundle mStyle\nprivate static @android.annotation.NonNull android.os.Bundle defaultStyle()\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []")
|
||||
inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.NonNull android.os.Bundle mStyle\nprivate static @android.annotation.NonNull android.os.Bundle defaultStyle()\nprivate boolean styleEquals(android.os.Bundle)\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 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 com.android.internal.widget;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.os.Bundle;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Utility methods relating to inline presentation UI.
|
||||
*/
|
||||
public final class InlinePresentationStyleUtils {
|
||||
|
||||
/**
|
||||
* Returns true if the two bundles are deeply equal.
|
||||
*
|
||||
* Each input bundle may represent a UI style in the
|
||||
* {@link android.widget.inline.InlinePresentationSpec} or the extra
|
||||
* request info in the {@link android.view.inputmethod.InlineSuggestionsRequest}
|
||||
*
|
||||
* Note: this method should not be called in the framework process for security reasons.
|
||||
*/
|
||||
public static boolean bundleEquals(@NonNull Bundle bundle1, @NonNull Bundle bundle2) {
|
||||
if (bundle1 == bundle2) {
|
||||
return true;
|
||||
}
|
||||
if (bundle1 == null || bundle2 == null) {
|
||||
return false;
|
||||
}
|
||||
if (bundle1.size() != bundle2.size()) {
|
||||
return false;
|
||||
}
|
||||
Set<String> keys = bundle1.keySet();
|
||||
for (String key : keys) {
|
||||
Object value1 = bundle1.get(key);
|
||||
Object value2 = bundle2.get(key);
|
||||
if (value1 instanceof Bundle && value2 instanceof Bundle
|
||||
&& !bundleEquals((Bundle) value1, (Bundle) value2)) {
|
||||
return false;
|
||||
} else if (!Objects.equals(value1, value2)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Private ctor to avoid constructing the class.
|
||||
*/
|
||||
private InlinePresentationStyleUtils() {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user