11d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi/* 21d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * Copyright (C) 2016 The Android Open Source Project 31d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 41d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * Licensed under the Apache License, Version 2.0 (the "License"); 51d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * you may not use this file except in compliance with the License. 61d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * You may obtain a copy of the License at 71d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 81d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * http://www.apache.org/licenses/LICENSE-2.0 91d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 101d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * Unless required by applicable law or agreed to in writing, software 111d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * distributed under the License is distributed on an "AS IS" BASIS, 121d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * See the License for the specific language governing permissions and 141d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * limitations under the License. 151d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 161d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 171d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshipackage android.hardware.location; 181d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 191d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 201d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshiimport android.annotation.SystemApi; 211d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshiimport android.os.Parcel; 221d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshiimport android.os.Parcelable; 23b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshiimport android.util.Log; 241d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 251d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi/** 261d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @hide 271d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 281d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi@SystemApi 291d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshipublic class NanoAppFilter { 301d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 31b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi private static final String TAG = "NanoAppFilter"; 32b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi 331d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // The appId, can be set to APP_ID_ANY 341d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private long mAppId; 351d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 361d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // Version to filter apps 371d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private int mAppVersion; 381d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 391d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // filtering spec for version 401d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private int mVersionRestrictionMask; 411d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 421d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // If APP_ID is any, then a match is performef with the vendor mask 431d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private long mAppIdVendorMask; 441d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 451d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // Id of the context hub this instance is expected on 461d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private int mContextHubId; 471d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 481d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 491d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * Flag indicating any version. With this flag set, all versions shall match provided version. 501d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 511d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int FLAGS_VERSION_ANY = -1; 521d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 531d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * If this flag is set, only versions strictly greater than the version specified shall match. 541d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 551d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int FLAGS_VERSION_GREAT_THAN = 2; 561d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 571d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * If this flag is set, only versions strictly less than the version specified shall match. 581d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 591d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int FLAGS_VERSION_LESS_THAN = 4; 60b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi /** 61b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi * If this flag is set, only versions strictly equal to the 62b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi * version specified shall match. 63b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi */ 641d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int FLAGS_VERSION_STRICTLY_EQUAL = 8; 651d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 661d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 671d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * If this flag is set, only versions strictly equal to the version specified shall match. 681d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 691d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int APP_ANY = -1; 701d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 711d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 721d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * If this flag is set, all vendors shall match. 731d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 741d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int VENDOR_ANY = -1; 751d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 761d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 771d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * If this flag is set, any hub shall match. 781d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 791d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final int HUB_ANY = -1; 801d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 811d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private NanoAppFilter(Parcel in) { 821d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppId = in.readLong(); 831d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppVersion = in.readInt(); 841d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mVersionRestrictionMask = in.readInt(); 851d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppIdVendorMask = in.readInt(); 861d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 871d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 881d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public int describeContents() { 891d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi return 0; 901d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 911d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 921d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public void writeToParcel(Parcel out, int flags) { 931d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 941d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi out.writeLong(mAppId); 951d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi out.writeInt(mAppVersion); 961d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi out.writeInt(mVersionRestrictionMask); 971d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi out.writeLong(mAppIdVendorMask); 981d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 991d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 1001d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 1011d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * Create a filter 1021d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 1031d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @param appId application id 1041d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @param appVersion application version 1051d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @param versionMask version 1061d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @param vendorMask vendor 1071d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 1081d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public NanoAppFilter(long appId, int appVersion, int versionMask, long vendorMask) { 1091d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppId = appId; 1101d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppVersion = appVersion; 1111d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mVersionRestrictionMask = versionMask; 1121d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi mAppIdVendorMask = vendorMask; 1131d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 1141d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 1151d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi private boolean versionsMatch(int versionRestrictionMask, int expected, int actual){ 1161d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi // some refactoring of version restriction mask is needed, until then, return all 1171d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi return true; 1181d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 1191d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi /** 1209ff7d2235427b211344fa58b608424805a21aa24Peng Xu * Test match method. 1211d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 1229ff7d2235427b211344fa58b608424805a21aa24Peng Xu * @param info nano app instance info 1231d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * 1241d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi * @return true if this is a match, false otherwise 1251d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi */ 1261d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public boolean testMatch(NanoAppInstanceInfo info) { 127b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi return (mContextHubId == HUB_ANY || info.getContexthubId() == mContextHubId) && 1281d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi (mAppId == APP_ANY || info.getAppId() == mAppId) && 129b741e3b374e7eebf96e2104dec5caccf723b2a39Ashutosh Joshi (versionsMatch(mVersionRestrictionMask, mAppVersion, info.getAppVersion())); 1301d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 1311d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 1321d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public static final Parcelable.Creator<NanoAppFilter> CREATOR 1331d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi = new Parcelable.Creator<NanoAppFilter>() { 1341d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public NanoAppFilter createFromParcel(Parcel in) { 1351d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi return new NanoAppFilter(in); 1361d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 1371d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi 1381d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi public NanoAppFilter[] newArray(int size) { 1391d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi return new NanoAppFilter[size]; 1401d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi } 1411d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi }; 1421d1ac5409597ef668e52c6f27293eaf9af575e33Ashutosh Joshi} 143