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}