1dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev/** 2dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Copyright (C) 2016 The Android Open Source Project 3dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 4dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Licensed under the Apache License, Version 2.0 (the "License"); 5dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * you may not use this file except in compliance with the License. 6dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * You may obtain a copy of the License at 7dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 8dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * http://www.apache.org/licenses/LICENSE-2.0 9dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 10dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Unless required by applicable law or agreed to in writing, software 11dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * distributed under the License is distributed on an "AS IS" BASIS, 12dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * See the License for the specific language governing permissions and 14dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * limitations under the License. 15dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 16dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 17dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevpackage android.support.v4.view; 18dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 19dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevimport android.content.Context; 20dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevimport android.content.res.Resources; 21dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevimport android.graphics.Bitmap; 22dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevimport android.support.v4.os.BuildCompat; 23dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 24dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev/** 25dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Helper for accessing features in {@link android.view.PointerIcon} introduced after API 26dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * level 4 in a backwards compatible fashion. 27dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 28dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheevpublic final class PointerIconCompat { 2922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_NULL} */ 3022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_NULL = 0; 31dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 3222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_ARROW} */ 3322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_ARROW = 1000; 34dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 3522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_CONTEXT_MENU} */ 3622ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_CONTEXT_MENU = 1001; 37dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 3822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_HAND} */ 3922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_HAND = 1002; 40dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 4122ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_HELP} */ 4222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_HELP = 1003; 43dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 4422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_WAIT} */ 4522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_WAIT = 1004; 46dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 4722ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_CELL} */ 4822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_CELL = 1006; 49dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 5022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_CROSSHAIR} */ 5122ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_CROSSHAIR = 1007; 52dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 5322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_TEXT} */ 5422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_TEXT = 1008; 55dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 5622ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_VERTICAL_TEXT} */ 5722ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_VERTICAL_TEXT = 1009; 58dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 5922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_ALIAS} */ 6022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_ALIAS = 1010; 61dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 6222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_COPY} */ 6322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_COPY = 1011; 64dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 6522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_NO_DROP} */ 6622ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_NO_DROP = 1012; 67dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 6822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_ALL_SCROLL} */ 6922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_ALL_SCROLL = 1013; 70dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 7122ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_HORIZONTAL_DOUBLE_ARROW} */ 7222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; 73dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 7422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_VERTICAL_DOUBLE_ARROW} */ 7522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; 76dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 7722ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW} */ 7822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; 79dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 8022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW} */ 8122ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; 82dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 8322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_ZOOM_IN} */ 8422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_ZOOM_IN = 1018; 85dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 8622ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_ZOOM_OUT} */ 8722ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_ZOOM_OUT = 1019; 88dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 8922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_GRAB} */ 9022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_GRAB = 1020; 91dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 9222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_GRABBING} */ 9322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_GRABBING = 1021; 94dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 9522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright /** Synonym for {@link android.view.PointerIcon#TYPE_DEFAULT} */ 9622ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static final int TYPE_DEFAULT = TYPE_ARROW; 97dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 98dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 99dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev private Object mPointerIcon; 100dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 101dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev private PointerIconCompat(Object pointerIcon) { 102dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev mPointerIcon = pointerIcon; 103dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 104dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 105dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev /** 106dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @hide 107dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 108dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev public Object getPointerIcon() { 109dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev return mPointerIcon; 110dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 111dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 112dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev interface PointerIconCompatImpl { 113dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev Object getSystemIcon(Context context, int style); 11422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright Object create(Bitmap bitmap, float hotSpotX, float hotSpotY); 11522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright Object load(Resources resources, int resourceId); 116dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 117dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 118dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev static class BasePointerIconCompatImpl implements PointerIconCompatImpl { 119dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 120dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev public Object getSystemIcon(Context context, int style) { 121dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev return null; 122dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 123dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 124dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 12522ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public Object create(Bitmap bitmap, float hotSpotX, float hotSpotY) { 126dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev return null; 127dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 128dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 129dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 13022ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public Object load(Resources resources, int resourceId) { 131dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev return null; 132dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 133dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 134dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 135dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev static class Api24PointerIconCompatImpl extends BasePointerIconCompatImpl { 136dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 137dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev public Object getSystemIcon(Context context, int style) { 138dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev return PointerIconCompatApi24.getSystemIcon(context, style); 139dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 140dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 141dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 14222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public Object create(Bitmap bitmap, float hotSpotX, float hotSpotY) { 14322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright return PointerIconCompatApi24.create(bitmap, hotSpotX, hotSpotY); 144dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 145dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 146dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev @Override 14722ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public Object load(Resources resources, int resourceId) { 14822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright return PointerIconCompatApi24.load(resources, resourceId); 149dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 150dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 151dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 152dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev static final PointerIconCompatImpl IMPL; 153dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev static { 154dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev if (BuildCompat.isAtLeastN()) { 155dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev IMPL = new Api24PointerIconCompatImpl(); 156dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } else { 157dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev IMPL = new BasePointerIconCompatImpl(); 158dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 159dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 160dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 161dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev /** 162dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Gets a system pointer icon for the given style. 163dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * If style is not recognized, returns the default pointer icon. 164dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 165dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param context The context. 166dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param style The pointer icon style. 167dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @return The pointer icon. 168dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 169dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @throws IllegalArgumentException if context is null. 170dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 171dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev public static PointerIconCompat getSystemIcon(Context context, int style) { 17222ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright return new PointerIconCompat(IMPL.getSystemIcon(context, style)); 173dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 174dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 175dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev /** 176dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Creates a custom pointer from the given bitmap and hotspot information. 177dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 178dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param bitmap The bitmap for the icon. 179dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param hotSpotX The X offset of the pointer icon hotspot in the bitmap. 180dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Must be within the [0, bitmap.getWidth()) range. 181dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param hotSpotY The Y offset of the pointer icon hotspot in the bitmap. 182dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Must be within the [0, bitmap.getHeight()) range. 183dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @return A pointer icon for this bitmap. 184dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 185dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @throws IllegalArgumentException if bitmap is null, or if the x/y hotspot 186dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * parameters are invalid. 187dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 18822ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static PointerIconCompat create(Bitmap bitmap, float hotSpotX, float hotSpotY) { 18922ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright return new PointerIconCompat(IMPL.create(bitmap, hotSpotX, hotSpotY)); 190dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 191dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev 192dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev /** 193dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * Loads a custom pointer icon from an XML resource. 194dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * <p> 195dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * The XML resource should have the following form: 196dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * <code> 197dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * <?xml version="1.0" encoding="utf-8"?> 198dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * <pointer-icon xmlns:android="http://schemas.android.com/apk/res/android" 199dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * android:bitmap="@drawable/my_pointer_bitmap" 200dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * android:hotSpotX="24" 201dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * android:hotSpotY="24" /> 202dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * </code> 203dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * </p> 204dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 205dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param resources The resources object. 206dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @param resourceId The resource id. 207dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @return The pointer icon. 208dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * 209dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @throws IllegalArgumentException if resources is null. 210dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * @throws Resources.NotFoundException if the resource was not found or the drawable 211dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev * linked in the resource was not found. 212dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev */ 21322ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright public static PointerIconCompat load(Resources resources, int resourceId) { 21422ed5f47a60f6b78f955b0ba4fcbc9cb31167a76Michael Wright return new PointerIconCompat(IMPL.load(resources, resourceId)); 215dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev } 216dd6652c3b47a245703ea2156b5b5712e2bbed23aVladislav Kaznacheev} 217