120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen/*
220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Copyright (C) 2016 The Android Open Source Project
320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen *
420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Licensed under the Apache License, Version 2.0 (the "License");
520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * you may not use this file except in compliance with the License.
620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * You may obtain a copy of the License at
720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen *
820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen *      http://www.apache.org/licenses/LICENSE-2.0
920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen *
1020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Unless required by applicable law or agreed to in writing, software
1120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * distributed under the License is distributed on an "AS IS" BASIS,
1220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * See the License for the specific language governing permissions and
1420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * limitations under the License.
1520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */
1620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen
170849ded00879dc05175c079011aa038c5ba0770aEtan Cohenpackage android.net.wifi.aware;
1820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen
195e680daad8096611c9bd2e4fc788d099089b09ccEtan Cohenimport android.annotation.NonNull;
2051181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohenimport android.util.Log;
2151181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen
2220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen/**
230849ded00879dc05175c079011aa038c5ba0770aEtan Cohen * A class representing a Aware subscribe session. Created when
246831f93725f9efd9c13a278acac62a5d7dcf4a4dEtan Cohen * {@link WifiAwareSession#subscribe(SubscribeConfig,
253de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen * DiscoverySessionCallback, android.os.Handler)}
265542ccc59c8634af618348201f26f1b601661857Etan Cohen * is called and a discovery session is created and returned in
273de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen * {@link DiscoverySessionCallback#onSubscribeStarted(SubscribeDiscoverySession)}.
283de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen * See baseline functionality of all discovery sessions in {@link DiscoverySession}.
293855370c24b575e0943a9a3c146fda980cd71e24Etan Cohen * This object allows updating an existing/running subscribe discovery session using
303855370c24b575e0943a9a3c146fda980cd71e24Etan Cohen * {@link #updateSubscribe(SubscribeConfig)}.
3120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */
323de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohenpublic class SubscribeDiscoverySession extends DiscoverySession {
33b84ad8062dc7e7e0cbc87e6a6769741b66dd4568Etan Cohen    private static final String TAG = "SubscribeDiscSession";
3451181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen
3520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen    /**
3620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen     * {@hide}
3720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen     */
383de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen    public SubscribeDiscoverySession(WifiAwareManager manager, int clientId,
390849ded00879dc05175c079011aa038c5ba0770aEtan Cohen            int sessionId) {
40bd4bf35d22a04b0c5a39bdf6543cec0af9df2306Etan Cohen        super(manager, clientId, sessionId);
4120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen    }
4220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen
4320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen    /**
44b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     * Re-configure the currently active subscribe session. The
453de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen     * {@link DiscoverySessionCallback} is not replaced - the same listener used
46b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     * at creation is still used. The results of the configuration are returned using
473de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen     * {@link DiscoverySessionCallback}:
48b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     * <ul>
493de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen     *     <li>{@link DiscoverySessionCallback#onSessionConfigUpdated()}: configuration
503855370c24b575e0943a9a3c146fda980cd71e24Etan Cohen     *     update succeeded.
513de35a5e5573828838bfa6359a1ac1bf22b19303Etan Cohen     *     <li>{@link DiscoverySessionCallback#onSessionConfigFailed()}: configuration
523855370c24b575e0943a9a3c146fda980cd71e24Etan Cohen     *     update failed. The subscribe discovery session is still running using its previous
53b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     *     configuration (i.e. update failure does not terminate the session).
54b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     * </ul>
5520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen     *
56b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     * @param subscribeConfig The new discovery subscribe session configuration
57b0214c4cd56e26a26c2bec61c287fc008ed3e551Etan Cohen     *                        ({@link SubscribeConfig}).
5820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen     */
595e680daad8096611c9bd2e4fc788d099089b09ccEtan Cohen    public void updateSubscribe(@NonNull SubscribeConfig subscribeConfig) {
60231859c2aa3930892a81b2d3cc368a79fbcfaed0Etan Cohen        if (mTerminated) {
6151181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen            Log.w(TAG, "updateSubscribe: called on terminated session");
62231859c2aa3930892a81b2d3cc368a79fbcfaed0Etan Cohen            return;
63231859c2aa3930892a81b2d3cc368a79fbcfaed0Etan Cohen        } else {
640849ded00879dc05175c079011aa038c5ba0770aEtan Cohen            WifiAwareManager mgr = mMgr.get();
6551181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen            if (mgr == null) {
660849ded00879dc05175c079011aa038c5ba0770aEtan Cohen                Log.w(TAG, "updateSubscribe: called post GC on WifiAwareManager");
6751181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen                return;
6851181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen            }
6951181fb85d490b16fa3b8cff5ee3c906d148533bEtan Cohen
70bd4bf35d22a04b0c5a39bdf6543cec0af9df2306Etan Cohen            mgr.updateSubscribe(mClientId, mSessionId, subscribeConfig);
71231859c2aa3930892a81b2d3cc368a79fbcfaed0Etan Cohen        }
7220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen    }
7320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen}
74