19553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski/* 29553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * Copyright (C) 2017 The Android Open Source Project 39553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * 49553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); you may not 59553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * use this file except in compliance with the License. You may obtain a copy 69553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * of the License at 79553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * 89553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 99553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * 109553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * Unless required by applicable law or agreed to in writing, software 119553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 129553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 139553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * License for the specific language governing permissions and limitations 149553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * under the License. 159553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski */ 169553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinskipackage android.content.res; 179553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski 189553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinskiimport android.annotation.AnyRes; 199553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski 209553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski/** 219553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * Provides a set of utility methods for dealing with Resource IDs. 229553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * @hide 239553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski */ 249553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinskipublic final class ResourceId { 259553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski 269553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski /** 279553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * The {@code null} resource ID. 289553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski */ 299553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski public static final @AnyRes int ID_NULL = 0; 309553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski 319553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski /** 329553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * Checks whether the integer {@code id} is a valid resource ID, as generated by AAPT. 339553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * <p>Note that a negative integer is not necessarily an invalid resource ID, and custom 349553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * validations that compare the {@code id} against {@code 0} are incorrect.</p> 359553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * @param id The integer to validate. 369553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski * @return {@code true} if the integer is a valid resource ID. 379553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski */ 389553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski public static boolean isValid(@AnyRes int id) { 399553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski // With the introduction of packages with IDs > 0x7f, resource IDs can be negative when 409553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski // represented as a signed Java int. Some legacy code assumes -1 is an invalid resource ID, 419553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski // despite the existing documentation. 429553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski return id != -1 && (id & 0xff000000) != 0 && (id & 0x00ff0000) != 0; 439553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski } 449553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski} 45