1193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver/* 2193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * Copyright (C) 2016 The Android Open Source Project 3193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * 4193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * Licensed under the Apache License, Version 2.0 (the "License"); 5193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * you may not use this file except in compliance with the License. 6193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * You may obtain a copy of the License at 7193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * 8193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * http://www.apache.org/licenses/LICENSE-2.0 9193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * 10193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * Unless required by applicable law or agreed to in writing, software 11193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * distributed under the License is distributed on an "AS IS" BASIS, 12193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * See the License for the specific language governing permissions and 14193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * limitations under the License. 15193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver */ 16193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverpackage android.text.style; 17193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 18193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverimport android.os.Parcel; 19193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverimport android.os.Parcelable; 20193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverimport android.text.TextUtils; 21193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverimport android.view.View; 22193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverimport android.view.accessibility.AccessibilityNodeInfo; 23193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 24193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver/** 25193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * URLSpan's onClick method does not work from an accessibility service. This version of it does. 26193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * It is used to replace URLSpans in {@link AccessibilityNodeInfo#setText(CharSequence)} 27193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * @hide 28193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver */ 29193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaverpublic class AccessibilityURLSpan extends URLSpan implements Parcelable { 30193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver final AccessibilityClickableSpan mAccessibilityClickableSpan; 31193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 32193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver /** 33193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * @param spanToReplace The original span 34193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver */ 35193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public AccessibilityURLSpan(URLSpan spanToReplace) { 36193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver super(spanToReplace.getURL()); 37193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver mAccessibilityClickableSpan = 38193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver new AccessibilityClickableSpan(spanToReplace.getId()); 39193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 40193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 41193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public AccessibilityURLSpan(Parcel p) { 42193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver super(p); 43193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver mAccessibilityClickableSpan = new AccessibilityClickableSpan(p); 44193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 45193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 46193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver @Override 47193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public int getSpanTypeId() { 48193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver return getSpanTypeIdInternal(); 49193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 50193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 51193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver @Override 52193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public int getSpanTypeIdInternal() { 53193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver return TextUtils.ACCESSIBILITY_URL_SPAN; 54193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 55193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 56193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver @Override 57193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public void writeToParcel(Parcel dest, int flags) { 58193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver writeToParcelInternal(dest, flags); 59193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 60193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 61193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver @Override 62193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public void writeToParcelInternal(Parcel dest, int flags) { 63193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver super.writeToParcelInternal(dest, flags); 64193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver mAccessibilityClickableSpan.writeToParcel(dest, flags); 65193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 66193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 67193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver @Override 68193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver public void onClick(View unused) { 69193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver mAccessibilityClickableSpan.onClick(unused); 70193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 71193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver 72193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver /** 73193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * Delegated to AccessibilityClickableSpan 74193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver * @param accessibilityNodeInfo 75193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver */ 7623161e7170ec2493ec830d04205f5696be159026Phil Weaver public void copyConnectionDataFrom(AccessibilityNodeInfo accessibilityNodeInfo) { 7723161e7170ec2493ec830d04205f5696be159026Phil Weaver mAccessibilityClickableSpan.copyConnectionDataFrom(accessibilityNodeInfo); 78193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver } 79193520e3dff5248ddcf8435203bf99d2ba667219Phil Weaver} 80