149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen/* 249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Copyright (C) 2015 The Android Open Source Project 349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * 449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Licensed urnder the Apache License, Version 2.0 (the "License"); 549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * you may not use this file except in compliance with the License. 649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * You may obtain a copy of the License at 749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * 849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * http://www.apache.org/licenses/LICENSE-2.0 949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * 1049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Unless required by applicable law or agreed to in writing, software 1149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * distributed under the License is distributed on an "AS IS" BASIS, 1249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * See the License for the specific language governing permissions and 1449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * limitations under the License. 1549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen */ 1649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenpackage android.net; 1749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 1849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenimport android.os.IBinder; 1949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenimport android.os.Parcel; 2049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenimport android.os.Parcelable; 2149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenimport android.os.RemoteException; 2249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 2349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen/** 2449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * A class allowing apps handling the {@link ConnectivityManager#ACTION_CAPTIVE_PORTAL_SIGN_IN} 2549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * activity to indicate to the system different outcomes of captive portal sign in. This class is 2649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * passed as an extra named {@link ConnectivityManager#EXTRA_CAPTIVE_PORTAL} with the 2749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} activity. 2849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen */ 2949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensenpublic class CaptivePortal implements Parcelable { 3049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** @hide */ 3149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public static final int APP_RETURN_DISMISSED = 0; 3249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** @hide */ 3349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public static final int APP_RETURN_UNWANTED = 1; 3449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** @hide */ 3549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public static final int APP_RETURN_WANTED_AS_IS = 2; 3649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 3749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen private final IBinder mBinder; 3849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 3949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** @hide */ 4049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public CaptivePortal(IBinder binder) { 4149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen mBinder = binder; 4249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 4349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 4449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen @Override 4549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public int describeContents() { 4649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen return 0; 4749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 4849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 4949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen @Override 5049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public void writeToParcel(Parcel out, int flags) { 5149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen out.writeStrongBinder(mBinder); 5249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 5349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 5449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public static final Parcelable.Creator<CaptivePortal> CREATOR 5549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen = new Parcelable.Creator<CaptivePortal>() { 5649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen @Override 5749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public CaptivePortal createFromParcel(Parcel in) { 5849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen return new CaptivePortal(in.readStrongBinder()); 5949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 6049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 6149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen @Override 6249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public CaptivePortal[] newArray(int size) { 6349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen return new CaptivePortal[size]; 6449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 6549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen }; 6649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 6749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** 6849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Indicate to the system that the captive portal has been 6949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * dismissed. In response the framework will re-evaluate the network's 7049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * connectivity and might take further action thereafter. 7149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen */ 7249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public void reportCaptivePortalDismissed() { 7349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen try { 7449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_DISMISSED); 7549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } catch (RemoteException e) { 7649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 7749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 7849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 7949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** 8049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Indicate to the system that the user does not want to pursue signing in to the 8149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * captive portal and the system should continue to prefer other networks 8249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * without captive portals for use as the default active data network. The 8349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * system will not retest the network for a captive portal so as to avoid 8449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * disturbing the user with further sign in to network notifications. 8549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen */ 8649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public void ignoreNetwork() { 8749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen try { 8849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_UNWANTED); 8949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } catch (RemoteException e) { 9049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 9149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 9249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen 9349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen /** 9449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * Indicate to the system the user wants to use this network as is, even though 9549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * the captive portal is still in place. The system will treat the network 9649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * as if it did not have a captive portal when selecting the network to use 9749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * as the default active data network. This may result in this network 9849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * becoming the default active data network, which could disrupt network 9949e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * connectivity for apps because the captive portal is still in place. 10049e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen * @hide 10149e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen */ 10249e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen public void useNetwork() { 10349e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen try { 10449e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_WANTED_AS_IS); 10549e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } catch (RemoteException e) { 10649e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 10749e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen } 10849e3edff5156f471819e4ea2a88994bca70bd870Paul Jensen} 109