108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal/* 208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * Copyright (C) 2015 The Android Open Source Project 308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * 408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * Licensed under the Apache License, Version 2.0 (the "License"); 508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * you may not use this file except in compliance with the License. 608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * You may obtain a copy of the License at 708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * 808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * http://www.apache.org/licenses/LICENSE-2.0 908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * 1008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * Unless required by applicable law or agreed to in writing, software 1108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * distributed under the License is distributed on an "AS IS" BASIS, 1208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * See the License for the specific language governing permissions and 1408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * limitations under the License. 1508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal */ 1608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 1708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalpackage android.support.customtabs; 1808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 1908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalimport android.content.ComponentName; 2008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalimport android.net.Uri; 2108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalimport android.os.Bundle; 22ee8b0611c54393060684c7cb6f8315b6365bb4b1Ian Wenimport android.os.IBinder; 2308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalimport android.os.RemoteException; 2408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 2508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysalimport java.util.List; 2608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 2708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal/** 2808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * A class to be used for Custom Tabs related communication. Clients that want to launch Custom Tabs 2908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * can use this class exclusively to handle all related communication. 3008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal */ 3197ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lizepublic final class CustomTabsSession { 3208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal private static final String TAG = "CustomTabsSession"; 3308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal private final ICustomTabsService mService; 3408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal private final ICustomTabsCallback mCallback; 3508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal private final ComponentName mComponentName; 3608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 3797ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize /* package */ CustomTabsSession( 3808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal ICustomTabsService service, ICustomTabsCallback callback, ComponentName componentName) { 3908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal mService = service; 4008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal mCallback = callback; 4108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal mComponentName = componentName; 4208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal } 4308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 4408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal /** 4508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * Tells the browser of a likely future navigation to a URL. 4608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * The most likely URL has to be specified first. Optionally, a list of 4708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * other likely URLs can be provided. They are treated as less likely than 4808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * the first one, and have to be sorted in decreasing priority order. These 4908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * additional URLs may be ignored. 5008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * All previous calls to this method will be deprioritized. 5108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * 5208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * @param url Most likely URL. 5308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * @param extras Reserved for future use. 5408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * @param otherLikelyBundles Other likely destinations, sorted in decreasing 5508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * likelihood order. Inside each Bundle, the client should provide a 5608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * {@link Uri} using {@link CustomTabsService#KEY_URL} with 5708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * {@link Bundle#putParcelable(String, android.os.Parcelable)}. 5808889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal * @return true for success. 5908889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal */ 6008889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal public boolean mayLaunchUrl(Uri url, Bundle extras, List<Bundle> otherLikelyBundles) { 6108889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal try { 6208889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal return mService.mayLaunchUrl(mCallback, url, extras, otherLikelyBundles); 6308889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal } catch (RemoteException e) { 6408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal return false; 6508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal } 6608889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal } 6708889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal 6897ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize /* package */ IBinder getBinder() { 6997ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize return mCallback.asBinder(); 7097ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize } 7197ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize 7297ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize /* package */ ComponentName getComponentName() { 7397ee4f3f353309991efd3ceca369548b485e9a5fBenoit Lize return mComponentName; 7408889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal } 7508889acbc842c73b64f94a761910154d9d42ee4cYusuf Ozuysal}