summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2014-05-28 13:03:41 -0700
committervandwalle <vandwalle@google.com>2014-07-10 13:50:08 -0700
commitb06e03add783c7f688240b7205441f9315a202f1 (patch)
tree8114e60daf5134c1c7ccf06faf25dd95a3f59f92 /apps
parentc7095947cbae1f55ef04a2357957b323e8b1ee64 (diff)
downloadandroid_development-b06e03add783c7f688240b7205441f9315a202f1.tar.gz
android_development-b06e03add783c7f688240b7205441f9315a202f1.tar.bz2
android_development-b06e03add783c7f688240b7205441f9315a202f1.zip
DevTools - add support for WifiScanner and Passpoint
cherry-pick from kwd: dfa4c2 Test for WifiScanner https://partner-android-review.googlesource.com/#/c/57807/ f07247 Test App for Passpoint https://partner-android-review.googlesource.com/#/c/59228/ ab64fe Test App for Passpoint - more HS20 functionalities https://partner-android-review.googlesource.com/#/c/170432/ bec3ee DevTools - Passpoint API rename https://partner-android-review.googlesource.com/#/c/170984/ 49e1f1 DevTools - add browser launch https://partner-android-review.googlesource.com/#/c/172190/ Change-Id: I0d6c6ab9e3289271922d5f10b7ed996437bd6f00
Diffstat (limited to 'apps')
-rw-r--r--apps/Development/res/layout/connectivity.xml60
-rw-r--r--apps/Development/res/values/strings.xml17
-rw-r--r--apps/Development/src/com/android/development/Connectivity.java375
3 files changed, 433 insertions, 19 deletions
diff --git a/apps/Development/res/layout/connectivity.xml b/apps/Development/res/layout/connectivity.xml
index 2aaf6c61f..dfe1f0194 100644
--- a/apps/Development/res/layout/connectivity.xml
+++ b/apps/Development/res/layout/connectivity.xml
@@ -29,6 +29,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
+
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
@@ -208,6 +209,25 @@
<!-- divider line -->
<View android:background="#FFFFFFFF"
+ android:layout_width="match_parent"
+ android:layout_height="3dip" />
+
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <Button android:id="@+id/startBackgroundScan"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/start_background_scan" />
+ <Button android:id="@+id/stopBackgroundScan"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/stop_background_scan" />
+ </LinearLayout>
+
+ <!-- divider line -->
+ <View android:background="#FFFFFFFF"
android:layout_width="match_parent"
android:layout_height="3dip" />
@@ -340,6 +360,46 @@
android:layout_height="wrap_content"
android:text="@string/routed_socket_request" />
</LinearLayout>
+
+ <!-- divider line -->
+ <View android:background="#FFFFFFFF"
+ android:layout_width="match_parent"
+ android:layout_height="3dip" />
+
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <Button android:id="@+id/hs20_state"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_state" />
+ <Button android:id="@+id/hs20_scan"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_scan" />
+ <Button android:id="@+id/hs20_anqp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_anqp" />
+ </LinearLayout>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <Button android:id="@+id/hs20_osu"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_osu" />
+ <Button android:id="@+id/hs20_rem"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_rem" />
+ <Button android:id="@+id/hs20_match"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hs20_match" />
+ </LinearLayout>
</LinearLayout>
</ScrollView>
diff --git a/apps/Development/res/values/strings.xml b/apps/Development/res/values/strings.xml
index 0c13987c4..de65673ee 100644
--- a/apps/Development/res/values/strings.xml
+++ b/apps/Development/res/values/strings.xml
@@ -31,9 +31,11 @@
<string name="start_screen_toggling">Start Screen Toggle</string>
<string name="stop_screen_toggling">Stop Screen Toggle</string>
<string name="start_scan">Start Scan</string>
+ <string name="start_background_scan">Start Bkgnd Scan</string>
<string name="scan_cycles">Scan Cycles: </string>
<string name="disconnect">Disconnect</string>
+ <string name="stop_background_scan">Stop Bkgnd Scan</string>
<string name="start_tdls">Start TDLS</string>
<string name="stop_tdls">Stop TDLS</string>
<string name="mac_tdls"> IP/MAC: </string>
@@ -53,11 +55,17 @@
<string name="routed_http_request">Make routed http request</string>
<string name="routed_socket_request">Make routed socket request</string>
+ <string name="hs20_state">HS20 State</string>
+ <string name="hs20_scan">HS20 Scan</string>
+ <string name="hs20_anqp">HS20 ANQP</string>
+ <string name="hs20_match">HS20 Match</string>
+ <string name="hs20_osu">HS20 OSU</string>
+ <string name="hs20_rem">HS20 Rem</string>
- <string name="device_info_default">unknown</string>
- <string name="device_info_uptime">Uptime</string>
- <string name="device_info_awaketime">Awake Time</string>
- <string name="device_info_asleeptime">Asleep Time</string>
+ <string name="device_info_default">unknown</string>
+ <string name="device_info_uptime">Uptime</string>
+ <string name="device_info_awaketime">Awake Time</string>
+ <string name="device_info_asleeptime">Asleep Time</string>
<string name="build_id_label">Build ID</string>
<string name="build_date_label">Build Date</string>
@@ -239,4 +247,5 @@
<string name="scancard">Scan SD card</string>
<string name="numsongs"># of albums</string>
<string name="insertbutton">Insert %1s albums</string>
+
</resources>
diff --git a/apps/Development/src/com/android/development/Connectivity.java b/apps/Development/src/com/android/development/Connectivity.java
index 93d199b15..bf3311a8a 100644
--- a/apps/Development/src/com/android/development/Connectivity.java
+++ b/apps/Development/src/com/android/development/Connectivity.java
@@ -18,51 +18,46 @@
package com.android.development;
import android.app.Activity;
-import android.app.ActivityManagerNative;
import android.app.AlarmManager;
+import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.LinkAddress;
import android.net.NetworkUtils;
import android.net.RouteInfo;
+import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiScanner;
+import android.net.wifi.passpoint.WifiPasspointInfo;
+import android.net.wifi.passpoint.WifiPasspointManager;
+import android.net.wifi.passpoint.WifiPasspointOsuProvider;
+import android.net.wifi.passpoint.WifiPasspointPolicy;
import android.os.RemoteException;
import android.os.Handler;
import android.os.Message;
import android.os.IBinder;
import android.os.INetworkManagementService;
-import android.os.Parcel;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.ServiceManager;
-import android.os.ServiceManagerNative;
import android.os.SystemClock;
-import android.provider.Settings;
import android.os.Bundle;
import android.util.Log;
-import android.view.IWindowManager;
import android.view.View;
-import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.EditText;
-import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
-import android.widget.AdapterView.OnItemSelectedListener;
import com.android.internal.telephony.Phone;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.NetworkInterface;
@@ -70,7 +65,6 @@ import java.net.Socket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
-import java.util.Map;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
@@ -121,10 +115,19 @@ public class Connectivity extends Activity {
private String mTdlsAddr = null;
private WifiManager mWm;
+ private WifiScanner mWs;
+ private WifiPasspointManager mPpm;
+ private WifiPasspointManager.Channel mPpmChannel;
private PowerManager mPm;
private ConnectivityManager mCm;
private INetworkManagementService mNetd;
+ private List<ScanResult> mHs20ScanResult;
+ private List<WifiPasspointOsuProvider> mHs20OsuList = new ArrayList<WifiPasspointOsuProvider>();
+ Hs20AnqpEventHandler mHs20AnqpRecv;
+ Hs20OsuEventHandler mHs20OsuRecv;
+ Hs20RemEventHandler mHs20RemRecv;
+
private WifiScanReceiver mScanRecv;
IntentFilter mIntentFilter;
@@ -258,6 +261,10 @@ public class Connectivity extends Activity {
setContentView(R.layout.connectivity);
mWm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
+ mWs = (WifiScanner)getSystemService(Context.WIFI_SCANNING_SERVICE);
+ mPpm = (WifiPasspointManager)getSystemService(Context.WIFI_PASSPOINT_SERVICE);
+ mPpmChannel = mPpm.initialize(getApplicationContext(), getMainLooper(), null);
+ if (mPpm == null || mPpmChannel == null) Log.d(TAG, "oops: null passpoint manager");
mPm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
@@ -300,6 +307,9 @@ public class Connectivity extends Activity {
findViewById(R.id.startTdls).setOnClickListener(mClickListener);
findViewById(R.id.stopTdls).setOnClickListener(mClickListener);
+ findViewById(R.id.startBackgroundScan).setOnClickListener(mClickListener);
+ findViewById(R.id.stopBackgroundScan).setOnClickListener(mClickListener);
+
findViewById(R.id.start_mms).setOnClickListener(mClickListener);
findViewById(R.id.stop_mms).setOnClickListener(mClickListener);
findViewById(R.id.start_hipri).setOnClickListener(mClickListener);
@@ -315,6 +325,17 @@ public class Connectivity extends Activity {
findViewById(R.id.default_request).setOnClickListener(mClickListener);
findViewById(R.id.default_socket).setOnClickListener(mClickListener);
+ mHs20AnqpRecv = new Hs20AnqpEventHandler();
+ mHs20OsuRecv = new Hs20OsuEventHandler();
+ mHs20RemRecv = new Hs20RemEventHandler();
+
+ findViewById(R.id.hs20_state).setOnClickListener(mClickListener);
+ findViewById(R.id.hs20_scan).setOnClickListener(mClickListener);
+ findViewById(R.id.hs20_anqp).setOnClickListener(mClickListener);
+ findViewById(R.id.hs20_match).setOnClickListener(mClickListener);
+ findViewById(R.id.hs20_osu).setOnClickListener(mClickListener);
+ findViewById(R.id.hs20_rem).setOnClickListener(mClickListener);
+
registerReceiver(mReceiver, new IntentFilter(CONNECTIVITY_TEST_ALARM));
}
@@ -355,6 +376,12 @@ public class Connectivity extends Activity {
case R.id.stopTdls:
onStopTdls();
break;
+ case R.id.startBackgroundScan:
+ onStartScan();
+ break;
+ case R.id.stopBackgroundScan:
+ onStopScan();
+ break;
case R.id.start_mms:
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
@@ -398,10 +425,195 @@ public class Connectivity extends Activity {
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
break;
+ case R.id.hs20_state:
+ onHs20State();
+ break;
+ case R.id.hs20_scan:
+ onHs20Scan();
+ break;
+ case R.id.hs20_anqp:
+ onHs20Anqp();
+ break;
+ case R.id.hs20_match:
+ onHs20Match();
+ break;
+ case R.id.hs20_osu:
+ onHs20Osu();
+ break;
+ case R.id.hs20_rem:
+ onHs20Rem();
+ break;
}
}
};
+ private class ScanEventHandler implements WifiScanner.ScanListener {
+ @Override
+ public void onFailure(int reason, String description) {
+ Log.d(TAG, "Failed to start scan :" + reason + " - " + description);
+ }
+
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Successfully started scan");
+ }
+
+ @Override
+ public void onPeriodChanged(int period) {
+ Log.d(TAG, "Period changed to " + period);
+ }
+
+ @Override
+ public void onResults(ScanResult[] results) {
+ Log.d(TAG, "Received " + results.length + " scan results");
+ for (int i = 0; i < results.length; i++) {
+ ScanResult result = results[i];
+ Log.d(TAG, "results[" + i + "] = " + result.SSID + "(" + result.BSSID + ")");
+ }
+ }
+
+ @Override
+ public void onFullResult(ScanResult fullScanResult) {
+ Log.d(TAG, "Full scan result event for SSID " + fullScanResult.SSID);
+
+ for (int i = 0; i < fullScanResult.informationElements.length; i++) {
+ ScanResult.InformationElement ie = fullScanResult.informationElements[i];
+ String str = new String();
+ for (int j = 0; j < ie.bytes.length; i++) {
+ str += ie.bytes.toString();
+ }
+ Log.d(TAG, "elem[" + i + "] = [" + ie.id + ", " + str + "]");
+ }
+ }
+ }
+
+ private class WifiChangeEventHandler implements WifiScanner.WifiChangeListener {
+ @Override
+ public void onFailure(int reason, String description) {
+ Log.d(TAG, "Failed to start tracking wifi change :" + reason + " - " + description);
+ }
+
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Successfully started tracking wifi change");
+ }
+
+
+ @Override
+ public void onChanging(ScanResult[] results) {
+ Log.d(TAG, "onChanging event has " + results.length + " scan results");
+ for (int i = 0; i < results.length; i++) {
+ ScanResult result = results[i];
+ Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
+ }
+ }
+
+ @Override
+ public void onQuiescence(ScanResult[] results) {
+ Log.d(TAG, "onQuiescence event has " + results.length + " scan results");
+ for (int i = 0; i < results.length; i++) {
+ ScanResult result = results[i];
+ Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
+ }
+ }
+ }
+
+ private class HotspotEventHandler implements WifiScanner.HotspotListener {
+ @Override
+ public void onFailure(int reason, String description) {
+ Log.d(TAG, "Failed to start tracking hotspots :" + reason + " - " + description);
+ }
+
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Successfully started tracking hotspots");
+ }
+
+ @Override
+ public void onFound(ScanResult[] results) {
+ Log.d(TAG, "onFound event has " + results.length + " scan results");
+ for (int i = 0; i < results.length; i++) {
+ ScanResult result = results[i];
+ Log.d(TAG, "bssid = " + result.BSSID + ", rssi = " + result.level);
+ }
+ }
+ }
+
+ ScanEventHandler mScanHandler1 = new ScanEventHandler();
+ ScanEventHandler mScanHandler2 = new ScanEventHandler();
+ WifiChangeEventHandler mWifiChangeHandler = new WifiChangeEventHandler();
+ HotspotEventHandler mHotspotHandler = new HotspotEventHandler();
+
+ private void onStartScan() {
+
+ WifiScanner.ScanSettings scanSettings = new WifiScanner.ScanSettings();
+ scanSettings.channels = new WifiScanner.ChannelSpec[] {
+ new WifiScanner.ChannelSpec(2412),
+ new WifiScanner.ChannelSpec(2437),
+ new WifiScanner.ChannelSpec(2462),
+ };
+
+ scanSettings.periodInMs = 5000;
+ // scanSettings.reportEvents = WifiScanner.REPORT_EVENT_AFTER_BUFFER_FULL;
+ mWs.startBackgroundScan(scanSettings, mScanHandler1);
+
+ scanSettings = new WifiScanner.ScanSettings();
+ scanSettings.channels = new WifiScanner.ChannelSpec[] {
+ new WifiScanner.ChannelSpec(5180),
+ new WifiScanner.ChannelSpec(5200),
+ new WifiScanner.ChannelSpec(5220),
+ new WifiScanner.ChannelSpec(5745),
+ new WifiScanner.ChannelSpec(5765),
+ new WifiScanner.ChannelSpec(5785),
+ new WifiScanner.ChannelSpec(5805),
+ new WifiScanner.ChannelSpec(5825)
+ };
+
+ scanSettings.periodInMs = 10000;
+ mWs.startBackgroundScan(scanSettings, mScanHandler2);
+
+ WifiScanner.HotspotInfo hotspotInfo[] = new WifiScanner.HotspotInfo[3];
+ hotspotInfo[0] = new WifiScanner.HotspotInfo();
+ hotspotInfo[0].bssid = "60:a4:4c:20:51:48";
+ hotspotInfo[0].low = -90;
+ hotspotInfo[0].high = -10;
+ hotspotInfo[0].frequencyHint = 2412;
+ hotspotInfo[1] = new WifiScanner.HotspotInfo();
+ hotspotInfo[1].bssid = "c0:4a:00:b6:18:87";
+ hotspotInfo[1].low = -90;
+ hotspotInfo[1].high = -10;
+ hotspotInfo[1].frequencyHint = 2412;
+ hotspotInfo[2] = new WifiScanner.HotspotInfo();
+ hotspotInfo[2].bssid = "ac:22:0b:24:70:70";
+ hotspotInfo[2].low = -90;
+ hotspotInfo[2].high = -10;
+ hotspotInfo[2].frequencyHint = 2412;
+
+ mWs.startTrackingHotspots(hotspotInfo, 3, mHotspotHandler);
+
+ Log.d(TAG, "Starting to track changes");
+ mWs.startTrackingWifiChange(mWifiChangeHandler);
+
+ /*
+ mWs.configureWifiChange(
+ 3, // rssiSampleSize
+ 3, // lostApSampleSize
+ 3, // unchangedSampleSize
+ 3, // minApsBreachingThreshold
+ 5000, // periodInMs
+ hotspotInfo);
+
+ */
+
+ Log.d(TAG, "Successfully started scan, waiting for events");
+ }
+
+ private void onStopScan() {
+ mWs.stopTrackingHotspots(mHotspotHandler);
+ mWs.stopTrackingWifiChange(mWifiChangeHandler);
+ mWs.stopBackgroundScan(mScanHandler2);
+ Log.d(TAG, "Successfully stopped all scans");
+ }
private void onStartDelayedCycle() {
if (!mDelayedCycleStarted) {
@@ -471,7 +683,7 @@ public class Connectivity extends Activity {
try {
mScanCur = Long.parseLong(mScanCyclesEdit.getText().toString());
mScanCycles = mScanCur;
- } catch (Exception e) { };
+ } catch (Exception e) { }
if (mScanCur <= 0) {
mScanCur = -1;
mScanCycles = SCAN_CYCLES;
@@ -713,4 +925,137 @@ public class Connectivity extends Activity {
return;
}
}
+
+ private void onHs20State() {
+ Log.d(TAG, "HS20 get passpoint state");
+ int state = mPpm.getPasspointState();
+ Log.d(TAG, "state=" + state);
+ }
+
+ private void onHs20Scan() {
+ Log.d(TAG, "HS20 start wifi scan");
+ mWm.startScan();
+ }
+
+ private void onHs20Anqp() {
+ Log.d(TAG, "HS20 request ANQP info");
+ mHs20ScanResult = mWm.getScanResults();
+ mPpm.requestAnqpInfo(mPpmChannel, mHs20ScanResult,
+ WifiPasspointInfo.PRESET_ALL, mHs20AnqpRecv);
+ }
+
+ private void onHs20Match() {
+ Log.d(TAG, "HS20 request credential match");
+ List<WifiPasspointPolicy> plist = mPpm.requestCredentialMatch(mHs20ScanResult);
+ if (plist == null) Log.d(TAG, "null policy list");
+ else Log.d(TAG, "policy list size=" + plist.size());
+ }
+
+ private void onHs20Osu() {
+ Log.d(TAG, "HS20 start OSU");
+ mHs20OsuList.clear();
+ if (mHs20ScanResult != null)
+ for (ScanResult sr : mHs20ScanResult)
+ if (sr.passpoint != null && sr.passpoint.osuProviderList != null)
+ for (WifiPasspointOsuProvider osu : sr.passpoint.osuProviderList)
+ mHs20OsuList.add(osu);
+ Log.d(TAG, "mHs20OsuList.size=" + mHs20OsuList.size());
+ if (mHs20OsuList.size() == 0) {
+ Log.d(TAG, "No OSUs found, please do ANQP again");
+ return;
+ }
+
+ String[] choice = new String[mHs20OsuList.size()];
+ for (int i = 0; i < mHs20OsuList.size(); i++) {
+ WifiPasspointOsuProvider osu = mHs20OsuList.get(i);
+ choice[i] = osu.friendlyName + " @ " + osu.ssid;
+ }
+ AlertDialog.Builder dialog = new AlertDialog.Builder(this);
+ dialog.setTitle("Select OSU");
+ dialog.setSingleChoiceItems(choice, -1, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ WifiPasspointOsuProvider osu = mHs20OsuList.get(which);
+ mPpm.startOsu(mPpmChannel, osu, mHs20OsuRecv);
+ }
+ });
+ dialog.show();
+ }
+
+ private void onHs20Rem() {
+ Log.d(TAG, "HS20 start remediation");
+ mPpm.startRemediation(mPpmChannel, mHs20RemRecv);
+ }
+
+ private class Hs20AnqpEventHandler implements WifiPasspointManager.ActionListener {
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Hs20AnqpEventHandler.onSuccess");
+ for (ScanResult sr : mHs20ScanResult) {
+ if (sr.passpoint != null)
+ Log.d(TAG, sr.passpoint.toString());
+ }
+ }
+
+ @Override
+ public void onFailure(int reason) {
+ Log.d(TAG, "Hs20AnqpEventHandler.onFailure reason=" + reason);
+ }
+ }
+
+ private class Hs20OsuEventHandler implements WifiPasspointManager.OsuRemListener {
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Hs20OsuEventHandler.onSuccess");
+ }
+
+ @Override
+ public void onFailure(int reason) {
+ Log.d(TAG, "Hs20OsuEventHandler.onFailure reason=" + reason);
+ }
+
+ @Override
+ public void onBrowserLaunch(String uri) {
+ Log.d(TAG, "Hs20OsuEventHandler.onBrowserLaunch uri=" + uri);
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
+ startActivity(browserIntent);
+ }
+
+ @Override
+ public void onBrowserDismiss() {
+ Log.d(TAG, "Hs20OsuEventHandler.onBrowserDismiss");
+ Toast.makeText(getApplicationContext(), "Please close your browser",
+ Toast.LENGTH_LONG).show();
+ }
+
+ }
+
+ private class Hs20RemEventHandler implements WifiPasspointManager.OsuRemListener {
+ @Override
+ public void onSuccess() {
+ Log.d(TAG, "Hs20RemEventHandler.onSuccess");
+ }
+
+ @Override
+ public void onFailure(int reason) {
+ Log.d(TAG, "Hs20RemEventHandler.onFailure reason=" + reason);
+ }
+
+ @Override
+ public void onBrowserLaunch(String uri) {
+ Log.d(TAG, "Hs20RemEventHandler.onBrowserLaunch uri=" + uri);
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
+ startActivity(browserIntent);
+ }
+
+ @Override
+ public void onBrowserDismiss() {
+ Log.d(TAG, "Hs20RemEventHandler.onBrowserDismiss");
+ Toast.makeText(getApplicationContext(), "Please close your browser",
+ Toast.LENGTH_LONG).show();
+ }
+
+ }
+
}