19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.style; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 197bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDanielimport android.content.ActivityNotFoundException; 20ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 24ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.provider.Browser; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.ParcelableSpan; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 277bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDanielimport android.util.Log; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class URLSpan extends ClickableSpan implements ParcelableSpan { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final String mURL; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public URLSpan(String url) { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mURL = url; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public URLSpan(Parcel src) { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mURL = src.readString(); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSpanTypeId() { 43a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette return getSpanTypeIdInternal(); 44a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette } 45a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette 46a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette /** @hide */ 47a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette public int getSpanTypeIdInternal() { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return TextUtils.URL_SPAN; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 56a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette writeToParcelInternal(dest, flags); 57a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette } 58a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette 59a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette /** @hide */ 60a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette public void writeToParcelInternal(Parcel dest, int flags) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mURL); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getURL() { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mURL; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onClick(View widget) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Uri.parse(getURL()); 71ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Context context = widget.getContext(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent intent = new Intent(Intent.ACTION_VIEW, uri); 73ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); 747bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDaniel try { 757bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDaniel context.startActivity(intent); 767bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDaniel } catch (ActivityNotFoundException e) { 777bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDaniel Log.w("URLSpan", "Actvity was not found for intent, " + intent.toString()); 787bd9b7f73d2acead67a2bd5995bd56140ae3c4dfDaniel } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 81