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