Adds activity and framework for displaying RangingResults for each AP.
Bug: 111830148
Test: Manually tested.
Change-Id: I50d10b41c947d3bf1be05ef0585c46d63a5daad5
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/AndroidManifest.xml b/connectivity/wifirtt/WifiRttScan/Application/src/main/AndroidManifest.xml
index 0315270..5f6b749 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/AndroidManifest.xml
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/AndroidManifest.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2013 The Android Open Source Project
@@ -48,7 +48,14 @@
<activity
android:name=".LocationPermissionRequestActivity"
android:label="@string/title_activity_location_permission_request"
- android:theme="@style/CustomAppTheme" >
+ android:parentActivityName=".MainActivity"
+ android:theme="@style/CustomAppTheme">
+ </activity>
+
+ <activity android:name=".AccessPointRangingResultsActivity"
+ android:label="@string/title_activity_access_point_ranging_results"
+ android:parentActivityName=".MainActivity"
+ android:theme="@style/CustomAppTheme">
</activity>
</application>
</manifest>
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/AccessPointRangingResultsActivity.java b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/AccessPointRangingResultsActivity.java
new file mode 100644
index 0000000..ca14774
--- /dev/null
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/AccessPointRangingResultsActivity.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2018 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.wifirttscan;
+
+import android.content.Intent;
+import android.net.wifi.ScanResult;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.widget.EditText;
+import android.widget.TextView;
+
+/** Displays ranging information about a particular access point chosen by the user. */
+public class AccessPointRangingResultsActivity extends AppCompatActivity {
+ private static final String TAG = "APRRActivity";
+
+ public static final String SCAN_RESULT_EXTRA =
+ "com.example.android.wifirttscan.extra.SCAN_RESULT";
+
+ private static final int STATISTIC_WINDOW_SIZE_DEFAULT = 50;
+ private static final int RANGING_PERIOD_MILLISECONDS_DEFAULT = 1000;
+
+ private ScanResult mScanResult;
+
+ private TextView mSsidTextView;
+ private TextView mBssidTextView;
+
+ private TextView mRange;
+ private TextView mRangeMean;
+ private TextView mRangeSD;
+ private TextView mRangeSDMean;
+ private TextView mRssi;
+ private TextView mSuccessesInBurst;
+ private TextView mSuccessRatio;
+
+ private EditText mStatsWindowSize;
+ private EditText mRangingPeriod;
+
+ private int mStatisticWindowSize;
+ private int mRangingPeriodMilliseconds;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_access_point_ranging_results);
+
+ mSsidTextView = findViewById(R.id.ssid);
+ mBssidTextView = findViewById(R.id.bssid);
+
+ mRange = findViewById(R.id.range_value);
+ mRangeMean = findViewById(R.id.range_mean_value);
+ mRangeSD = findViewById(R.id.range_sd_value);
+ mRangeSDMean = findViewById(R.id.range_sd_mean_value);
+ mRssi = findViewById(R.id.rssi_value);
+ mSuccessesInBurst = findViewById(R.id.successes_in_burst_value);
+ mSuccessRatio = findViewById(R.id.success_ratio_value);
+
+ mStatsWindowSize = findViewById(R.id.stats_window_size_edit_value);
+ mStatisticWindowSize = STATISTIC_WINDOW_SIZE_DEFAULT;
+ mStatsWindowSize.setText(mStatisticWindowSize + "");
+
+ mRangingPeriod = findViewById(R.id.ranging_period_edit_value);
+ mRangingPeriodMilliseconds = RANGING_PERIOD_MILLISECONDS_DEFAULT;
+ mRangingPeriod.setText(mRangingPeriodMilliseconds + "");
+
+ Intent intent = getIntent();
+ mScanResult = intent.getParcelableExtra(SCAN_RESULT_EXTRA);
+
+ mSsidTextView.setText(mScanResult.SSID);
+ mBssidTextView.setText(mScanResult.BSSID);
+
+ // TODO (jewalker): Implement Ranging Request.
+ }
+}
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/LocationPermissionRequestActivity.java b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/LocationPermissionRequestActivity.java
index 691109b..79e3071 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/LocationPermissionRequestActivity.java
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/LocationPermissionRequestActivity.java
@@ -27,14 +27,14 @@
/**
* This is a simple splash screen (activity) for giving more details on why the user should approve
- * fine location permissions. If they choose to move forward, the permission screen is
- * brought up. Either way (approve or disapprove), this will exit to the MainActivity after they are
- * finished with their final decision.
+ * fine location permissions. If they choose to move forward, the permission screen is brought up.
+ * Either way (approve or disapprove), this will exit to the MainActivity after they are finished
+ * with their final decision.
*/
public class LocationPermissionRequestActivity extends AppCompatActivity
implements ActivityCompat.OnRequestPermissionsResultCallback {
- private static final String TAG = "LocationRationale";
+ private static final String TAG = "LocationPermission";
/* Id to identify Location permission request. */
private static final int PERMISSION_REQUEST_FINE_LOCATION = 1;
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MainActivity.java b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MainActivity.java
index 7acf225..44be36d 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MainActivity.java
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MainActivity.java
@@ -15,6 +15,8 @@
*/
package com.example.android.wifirttscan;
+import static com.example.android.wifirttscan.AccessPointRangingResultsActivity.SCAN_RESULT_EXTRA;
+
import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
@@ -36,6 +38,8 @@
import android.view.View;
import android.widget.TextView;
+import com.example.android.wifirttscan.MyAdapter.ScanResultClickListener;
+
import java.util.ArrayList;
import java.util.List;
@@ -43,7 +47,7 @@
* Displays list of Access Points enabled with WifiRTT (to check distance). Requests location
* permissions if they are not approved via secondary splash screen explaining why they are needed.
*/
-public class MainActivity extends AppCompatActivity {
+public class MainActivity extends AppCompatActivity implements ScanResultClickListener {
private static final String TAG = "MainActivity";
@@ -59,14 +63,12 @@
private MyAdapter mAdapter;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mOutputTextView = findViewById(R.id.access_point_summary_text_view);
-
mRecyclerView = findViewById(R.id.recycler_view);
// Improve performance if you know that changes in content do not change the layout size
@@ -79,25 +81,13 @@
mAccessPointsSupporting80211mc = new ArrayList<>();
- mAdapter = new MyAdapter(mAccessPointsSupporting80211mc);
+ mAdapter = new MyAdapter(mAccessPointsSupporting80211mc, this);
mRecyclerView.setAdapter(mAdapter);
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiScanReceiver = new WifiScanReceiver();
}
- public void onClickFindDistancesToAccessPoints(View view) {
- if (mLocationPermissionApproved) {
- logToUi(getString(R.string.retrieving_access_points));
- mWifiManager.startScan();
-
- } else {
- // On 23+ (M+) devices, fine location permission not granted. Request permission.
- Intent startIntent = new Intent(this, LocationPermissionRequestActivity.class);
- startActivity(startIntent);
- }
- }
-
@Override
protected void onResume() {
Log.d(TAG, "onResume()");
@@ -125,6 +115,27 @@
}
}
+ @Override
+ public void onScanResultItemClick(ScanResult scanResult) {
+ Log.d(TAG, "onScanResultItemClick(): ssid: " + scanResult.SSID);
+
+ Intent intent = new Intent(this, AccessPointRangingResultsActivity.class);
+ intent.putExtra(SCAN_RESULT_EXTRA, scanResult);
+ startActivity(intent);
+ }
+
+ public void onClickFindDistancesToAccessPoints(View view) {
+ if (mLocationPermissionApproved) {
+ logToUi(getString(R.string.retrieving_access_points));
+ mWifiManager.startScan();
+
+ } else {
+ // On 23+ (M+) devices, fine location permission not granted. Request permission.
+ Intent startIntent = new Intent(this, LocationPermissionRequestActivity.class);
+ startActivity(startIntent);
+ }
+ }
+
private class WifiScanReceiver extends BroadcastReceiver {
private List<ScanResult> find80211mcSupportedAccessPoints(
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MyAdapter.java b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MyAdapter.java
index 29f84e8..2427f90 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MyAdapter.java
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/java/com/example/android/wifirttscan/MyAdapter.java
@@ -30,33 +30,44 @@
* the {@link RecyclerView} to label the data.
*/
public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
-
private static final int HEADER_POSITION = 0;
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
+ private static ScanResultClickListener sScanResultClickListener;
+
private List<ScanResult> mWifiAccessPointsWithRtt;
+ public MyAdapter(
+ List<ScanResult> list,
+ ScanResultClickListener scanResultClickListener) {
+ mWifiAccessPointsWithRtt = list;
+ sScanResultClickListener = scanResultClickListener;
+ }
+
public static class ViewHolderHeader extends RecyclerView.ViewHolder {
public ViewHolderHeader(View view) {
- super(view);;
+ super(view);
}
}
- public static class ViewHolderItem extends RecyclerView.ViewHolder {
+ public class ViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView mSsidTextView;
public TextView mBssidTextView;
public ViewHolderItem(View view) {
super(view);
+ view.setOnClickListener(this);
mSsidTextView = view.findViewById(R.id.ssid_text_view);
mBssidTextView = view.findViewById(R.id.bssid_text_view);
}
- }
- public MyAdapter(List<ScanResult> list) {
- mWifiAccessPointsWithRtt = list;
+ @Override
+ public void onClick(View view) {
+ sScanResultClickListener.onScanResultItemClick(
+ getItem(getAdapterPosition()));
+ }
}
public void swapData(List<ScanResult> list) {
@@ -77,12 +88,16 @@
ViewHolder viewHolder;
if (viewType == TYPE_HEADER) {
- viewHolder = new ViewHolderHeader(LayoutInflater.from(parent.getContext())
- .inflate(R.layout.recycler_row_header, parent, false));
+ viewHolder =
+ new ViewHolderHeader(
+ LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_row_header, parent, false));
} else if (viewType == TYPE_ITEM) {
- viewHolder = new ViewHolderItem(LayoutInflater.from(parent.getContext())
- .inflate(R.layout.recycler_row_item, parent, false));
+ viewHolder =
+ new ViewHolderItem(
+ LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_row_item, parent, false));
} else {
throw new RuntimeException(viewType + " isn't a valid view type.");
}
@@ -130,4 +145,10 @@
return TYPE_ITEM;
}
}
+
+ // Used to inform the class containing the RecyclerView that one of the ScanResult items in the
+ // list was clicked.
+ public interface ScanResultClickListener {
+ void onScanResultItemClick(ScanResult scanResult);
+ }
}
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/activity_access_point_ranging_results.xml b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/activity_access_point_ranging_results.xml
new file mode 100644
index 0000000..70abd39
--- /dev/null
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/activity_access_point_ranging_results.xml
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2018 Google Inc. All rights reserved.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<android.support.constraint.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".AccessPointRangingResultsActivity">
+
+ <TextView
+ android:id="@+id/ssid"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_title"
+ android:gravity="center_vertical"
+ tools:text="SSID"
+ android:textAlignment="center"
+ android:textSize="@dimen/activity_access_point_ranging_request_header_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/bssid"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_title"
+ android:gravity="center_vertical"
+ android:textAlignment="center"
+ android:textSize="@dimen/activity_access_point_ranging_request_header_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="BSSID" />
+
+ <View
+ android:id="@+id/divider1"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/activity_access_point_ranging_request_divider_height"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:background="?android:attr/listDivider"
+ android:visibility="visible"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/bssid" />
+
+ <TextView
+ android:id="@+id/range_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:gravity="start"
+ android:text="@string/range_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/divider1" />
+
+ <TextView
+ android:id="@+id/range_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/divider1" />
+
+ <TextView
+ android:id="@+id/range_mean_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/range_mean_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_label" />
+
+ <TextView
+ android:id="@+id/range_mean_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_value" />
+
+ <TextView
+ android:id="@+id/range_sd_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/range_sd_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_mean_label" />
+
+ <TextView
+ android:id="@+id/range_sd_value"
+ android:layout_width="176dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_mean_value" />
+
+ <TextView
+ android:id="@+id/range_sd_mean_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/range_sd_mean_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_sd_label" />
+
+ <TextView
+ android:id="@+id/range_sd_mean_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_sd_value" />
+
+ <TextView
+ android:id="@+id/rssi_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/rssi_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_sd_mean_label" />
+
+ <TextView
+ android:id="@+id/rssi_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/range_sd_mean_value" />
+
+ <TextView
+ android:id="@+id/successes_in_burst_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/successes_in_burst_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/rssi_label" />
+
+ <TextView
+ android:id="@+id/successes_in_burst_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/rssi_value" />
+
+ <TextView
+ android:id="@+id/success_ratio_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/success_ratio_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/successes_in_burst_label" />
+
+ <TextView
+ android:id="@+id/success_ratio_value"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="end"
+ android:text="@string/activity_access_point_ranging_results_requesting_default"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/successes_in_burst_value" />
+
+ <View
+ android:id="@+id/divider2"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/activity_access_point_ranging_request_divider_height"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:background="?android:attr/listDivider"
+ android:visibility="visible"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/success_ratio_value" />
+
+ <TextView
+ android:id="@+id/stats_window_size_label"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/activity_access_point_ranging_request_edit_view_height"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:gravity="start"
+ android:text="@string/stats_window_size_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/divider2" />
+
+ <EditText
+ android:id="@+id/stats_window_size_edit_value"
+ android:layout_width="@dimen/activity_access_point_ranging_request_edit_view_width"
+ android:layout_height="@dimen/activity_access_point_ranging_request_edit_view_height"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top_divider"
+ android:ems="10"
+ android:inputType="number"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/divider2"
+ tools:text="50" />
+
+ <TextView
+ android:id="@+id/ranging_period_label"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/activity_access_point_ranging_request_edit_view_height"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:gravity="start"
+ android:text="@string/ranging_period_label_activity_access_point_ranging_results"
+ android:textAlignment="textStart"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/stats_window_size_label" />
+
+ <EditText
+ android:id="@+id/ranging_period_edit_value"
+ android:layout_width="@dimen/activity_access_point_ranging_request_edit_view_width"
+ android:layout_height="@dimen/activity_access_point_ranging_request_edit_view_height"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginTop="@dimen/activity_access_point_ranging_request_margin_top"
+ android:ems="10"
+ android:inputType="number"
+ android:textAlignment="textEnd"
+ android:textSize="@dimen/activity_access_point_ranging_request_item_text_size"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/stats_window_size_edit_value"
+ tools:text="1000" />
+
+ <Button
+ android:id="@+id/reset_button"
+ android:layout_width="91dp"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:layout_marginEnd="@dimen/activity_access_point_ranging_request_margin_end"
+ android:layout_marginStart="@dimen/activity_access_point_ranging_request_margin_start"
+ android:text="@string/reset_label_activity_access_point_ranging_results"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+</android.support.constraint.ConstraintLayout>
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/recycler_row_item.xml b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/recycler_row_item.xml
index 268852a..fcf9176 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/recycler_row_item.xml
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/layout/recycler_row_item.xml
@@ -21,7 +21,8 @@
android:layout_gravity="center"
android:paddingTop="@dimen/recycler_row_padding"
android:paddingBottom="@dimen/recycler_row_padding"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:clickable="true">
<TextView
android:layout_width="0dp"
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/dimens.xml b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/dimens.xml
index 5103147..990b85d 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/dimens.xml
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/dimens.xml
@@ -15,4 +15,16 @@
<dimen name="recycler_row_padding">5dp</dimen>
<dimen name="recycler_row_header_text_size">30sp</dimen>
<dimen name="recycler_row_item_text_size">20sp</dimen>
+
+ <dimen name="activity_access_point_ranging_request_header_text_size">24sp</dimen>
+ <dimen name="activity_access_point_ranging_request_item_text_size">20sp</dimen>
+ <dimen name="activity_access_point_ranging_request_margin_end">16dp</dimen>
+ <dimen name="activity_access_point_ranging_request_margin_start">16dp</dimen>
+ <dimen name="activity_access_point_ranging_request_margin_top">8dp</dimen>
+ <dimen name="activity_access_point_ranging_request_margin_top_title">16dp</dimen>
+ <dimen name="activity_access_point_ranging_request_margin_top_divider">16dp</dimen>
+ <dimen name="activity_access_point_ranging_request_divider_height">1dp</dimen>
+ <dimen name="activity_access_point_ranging_request_edit_view_height">44dp</dimen>
+ <dimen name="activity_access_point_ranging_request_edit_view_width">116dp</dimen>
+
</resources>
diff --git a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/strings.xml b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/strings.xml
index 860f3dc..1bfda3e 100644
--- a/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/strings.xml
+++ b/connectivity/wifirtt/WifiRttScan/Application/src/main/res/values/strings.xml
@@ -15,15 +15,31 @@
<string name="action_settings">Settings</string>
<string name="title_activity_location_permission_request">Location Permission Required</string>
-
<string name="main_message_activity_location_permission_request">See distances to access points with Wifi RTT (permission required).</string>
<string name="details_message_activity_location_permission_request">This app needs access to your phone\'s location to show the distances between this device and Wifi RTT enabled access points.</string>
<string name="no_thanks_activity_location_permission_request">No Thanks</string>
<string name="continue_activity_location_permission_request">Continue</string>
+
<string name="recycler_row_header_label_ssid">SSID</string>
<string name="recycler_row_header_label_bssid">BSSID</string>
- <string name="retrieving_access_points">Retrieving Access Points...</string>
+ <string name="retrieving_access_points">Retrieving Access Points…</string>
<string name="scan_wifi_button_label">Scan WiFi</string>
<string name="introduction_text">Click the button below to scan access points.</string>
+ <!-- Strings for AccessPointRangingResultsActivity. -->
+ <string name="title_activity_access_point_ranging_results">Access Point Ranging Results</string>
+ <string name="activity_access_point_ranging_results_requesting_default">Requesting…</string>
+ <string name="range_label_activity_access_point_ranging_results">Range (m):</string>
+ <string name="range_mean_label_activity_access_point_ranging_results">Range-mean (m):</string>
+ <string name="range_sd_label_activity_access_point_ranging_results">RangeSD (m):</string>
+ <string name="range_sd_mean_activity_access_point_ranging_results">RangeSD-mean (m):</string>
+ <string name="rssi_label_activity_access_point_ranging_results">RSSI (dBm):</string>
+ <string name="successes_in_burst_label_activity_access_point_ranging_results">Successes in burst:</string>
+ <string name="success_ratio_label_activity_access_point_ranging_results">Success Ratio:</string>
+
+ <string name="stats_window_size_label_activity_access_point_ranging_results">Stats window size:</string>
+ <string name="ranging_period_label_activity_access_point_ranging_results">Ranging period (ms):</string>
+
+ <string name="reset_label_activity_access_point_ranging_results">Reset</string>
+
</resources>