/*
|
* Copyright (C) 2016 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 android.hardware.location;
|
|
import android.annotation.SystemApi;
|
import android.os.Parcel;
|
import android.os.Parcelable;
|
|
/**
|
* @deprecated Use {@link android.hardware.location.ContextHubManager#queryNanoApps(ContextHubInfo)}
|
* to find loaded nanoapps, which doesn't require using this class as a parameter.
|
*
|
* @hide
|
*/
|
@SystemApi
|
@Deprecated
|
public class NanoAppFilter implements Parcelable {
|
|
private static final String TAG = "NanoAppFilter";
|
|
// The appId, can be set to APP_ID_ANY
|
private long mAppId;
|
|
// Version to filter apps
|
private int mAppVersion;
|
|
// filtering spec for version
|
private int mVersionRestrictionMask;
|
|
// If APP_ID is any, then a match is performef with the vendor mask
|
private long mAppIdVendorMask;
|
|
// Id of the context hub this instance is expected on
|
// TODO: Provide an API which will let us change this HubId.
|
private int mContextHubId = HUB_ANY;
|
|
/**
|
* Flag indicating any version. With this flag set, all versions shall match provided version.
|
*/
|
public static final int FLAGS_VERSION_ANY = -1;
|
/**
|
* If this flag is set, only versions strictly greater than the version specified shall match.
|
*/
|
public static final int FLAGS_VERSION_GREAT_THAN = 2;
|
/**
|
* If this flag is set, only versions strictly less than the version specified shall match.
|
*/
|
public static final int FLAGS_VERSION_LESS_THAN = 4;
|
/**
|
* If this flag is set, only versions strictly equal to the
|
* version specified shall match.
|
*/
|
public static final int FLAGS_VERSION_STRICTLY_EQUAL = 8;
|
|
/**
|
* If this flag is set, only versions strictly equal to the version specified shall match.
|
*/
|
public static final int APP_ANY = -1;
|
|
/**
|
* If this flag is set, all vendors shall match.
|
*/
|
public static final int VENDOR_ANY = -1;
|
|
/**
|
* If this flag is set, any hub shall match.
|
*/
|
public static final int HUB_ANY = -1;
|
|
private NanoAppFilter(Parcel in) {
|
mAppId = in.readLong();
|
mAppVersion = in.readInt();
|
mVersionRestrictionMask = in.readInt();
|
mAppIdVendorMask = in.readLong();
|
}
|
|
public int describeContents() {
|
return 0;
|
}
|
|
public void writeToParcel(Parcel out, int flags) {
|
out.writeLong(mAppId);
|
out.writeInt(mAppVersion);
|
out.writeInt(mVersionRestrictionMask);
|
out.writeLong(mAppIdVendorMask);
|
}
|
|
/**
|
* Create a filter
|
*
|
* @param appId application id
|
* @param appVersion application version
|
* @param versionMask version
|
* @param vendorMask vendor
|
*/
|
public NanoAppFilter(long appId, int appVersion, int versionMask, long vendorMask) {
|
mAppId = appId;
|
mAppVersion = appVersion;
|
mVersionRestrictionMask = versionMask;
|
mAppIdVendorMask = vendorMask;
|
}
|
|
private boolean versionsMatch(int versionRestrictionMask, int expected, int actual){
|
// some refactoring of version restriction mask is needed, until then, return all
|
return true;
|
}
|
/**
|
* Test match method.
|
*
|
* @param info nano app instance info
|
*
|
* @return true if this is a match, false otherwise
|
*/
|
public boolean testMatch(NanoAppInstanceInfo info) {
|
return (mContextHubId == HUB_ANY || info.getContexthubId() == mContextHubId) &&
|
(mAppId == APP_ANY || info.getAppId() == mAppId) &&
|
(versionsMatch(mVersionRestrictionMask, mAppVersion, info.getAppVersion()));
|
}
|
|
@Override
|
public String toString() {
|
return "nanoAppId: 0x" + Long.toHexString(mAppId)
|
+ ", nanoAppVersion: 0x" + Integer.toHexString(mAppVersion)
|
+ ", versionMask: " + mVersionRestrictionMask
|
+ ", vendorMask: " + mAppIdVendorMask;
|
}
|
|
public static final @android.annotation.NonNull Parcelable.Creator<NanoAppFilter> CREATOR
|
= new Parcelable.Creator<NanoAppFilter>() {
|
public NanoAppFilter createFromParcel(Parcel in) {
|
return new NanoAppFilter(in);
|
}
|
|
public NanoAppFilter[] newArray(int size) {
|
return new NanoAppFilter[size];
|
}
|
};
|
}
|