Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java

Issue 2032273002: If location services are turned off, have the BT chooser prompt the user to turn them on. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java
index 2e555f5daecc66d3b2f6fdfedeea20178a588579..9c7a7cda798c98adf4712ed7e95e026f7563d66d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/BluetoothChooserDialogTest.java
@@ -6,7 +6,10 @@ package org.chromium.chrome.browser;
import android.Manifest;
import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageManager;
+import android.location.LocationManager;
import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
@@ -15,6 +18,7 @@ import android.widget.ListView;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.preferences.LocationSettings;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content.browser.test.util.Criteria;
@@ -39,6 +43,7 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
static class BluetoothChooserDialogWithFakeNatives extends BluetoothChooserDialog {
int mFinishedEventType = -1;
String mFinishedDeviceId;
+ int mRestartSearchCount = 0;
BluetoothChooserDialogWithFakeNatives(WindowAndroid windowAndroid, String origin,
int securityLevel, long nativeBluetoothChooserDialogPtr) {
@@ -55,7 +60,9 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
}
@Override
- void nativeRestartSearch(long nativeBluetoothChooserAndroid) {}
+ void nativeRestartSearch(long nativeBluetoothChooserAndroid) {
+ mRestartSearchCount++;
+ }
@Override
void nativeShowBluetoothOverviewLink(long nativeBluetoothChooserAndroid) {}
@@ -68,6 +75,7 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
}
private ActivityWindowAndroid mWindowAndroid;
+ private TestLocationSettings mLocationSettings;
private BluetoothChooserDialogWithFakeNatives mChooserDialog;
public BluetoothChooserDialogTest() {
@@ -79,10 +87,18 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
@Override
protected void setUp() throws Exception {
super.setUp();
+ mLocationSettings = new TestLocationSettings(getActivity());
+ LocationSettings.setInstanceForTesting(mLocationSettings);
mChooserDialog = createDialog();
}
@Override
+ protected void tearDown() throws Exception {
+ LocationSettings.setInstanceForTesting(null);
+ super.tearDown();
+ }
+
+ @Override
public void startMainActivity() throws InterruptedException {
startMainActivityOnBlankPage();
}
@@ -140,13 +156,11 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
}
/**
- * The messages include <link> ... </link> or <link1> ... </link1>, <link2> ... </link2>
- * sections that are used to create clickable spans. For testing the messages, this function
- * returns the raw string without the tags.
+ * The messages include <*link*> ... </*link*> sections that are used to create clickable spans.
+ * For testing the messages, this function returns the raw string without the tags.
*/
private static String removeLinkTags(String message) {
- return message.replaceAll("</?link1>", "").replaceAll(
- "</?link2>", "").replaceAll("</?link>", "");
+ return message.replaceAll("</?[^>]*link[^>]*>", "");
}
@SmallTest
@@ -270,12 +284,71 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
@Override
public void run() {
permissionDelegate.mCallback.onRequestPermissionsResult(
- new String[] {Manifest.permission.ACCESS_FINE_LOCATION},
+ new String[] {Manifest.permission.ACCESS_COARSE_LOCATION},
new int[] {PackageManager.PERMISSION_GRANTED});
}
});
- assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_adapter_off_help)),
+ assertEquals(1, mChooserDialog.mRestartSearchCount);
+ assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_searching)),
+ statusView.getText().toString());
+
+ mChooserDialog.closeDialog();
+ }
+
+ @SmallTest
+ public void testNoLocationServices() throws InterruptedException {
+ ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog;
+ Dialog dialog = itemChooser.getDialogForTesting();
+ assertTrue(dialog.isShowing());
+
+ final TextViewWithClickableSpans statusView =
+ (TextViewWithClickableSpans) dialog.findViewById(R.id.status);
+ final TextViewWithClickableSpans errorView =
+ (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_message);
+ final View items = dialog.findViewById(R.id.items);
+ final Button button = (Button) dialog.findViewById(R.id.positive);
+ final View progress = dialog.findViewById(R.id.progress);
+
+ final TestAndroidPermissionDelegate permissionDelegate =
+ new TestAndroidPermissionDelegate();
+ mWindowAndroid.setAndroidPermissionDelegate(permissionDelegate);
+
+ // Grant permissions, and turn off location services.
+ permissionDelegate.mLocationGranted = true;
+ mLocationSettings.mSystemLocationSettingsEnabled = false;
+
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mChooserDialog.notifyDiscoveryState(
+ BluetoothChooserDialog.DISCOVERY_FAILED_TO_START);
+ }
+ });
+
+ assertEquals(removeLinkTags(
+ getActivity().getString(R.string.bluetooth_need_location_services_on)),
+ errorView.getText().toString());
+ assertEquals(removeLinkTags(getActivity().getString(
+ R.string.bluetooth_need_location_permission_help)),
+ statusView.getText().toString());
+ assertFalse(button.isEnabled());
+ assertEquals(View.VISIBLE, errorView.getVisibility());
+ assertEquals(View.GONE, items.getVisibility());
+ assertEquals(View.GONE, progress.getVisibility());
+
+ // Turn on Location Services.
+ mLocationSettings.mSystemLocationSettingsEnabled = true;
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mChooserDialog.mLocationModeBroadcastReceiver.onReceive(
+ getActivity(), new Intent(LocationManager.MODE_CHANGED_ACTION));
+ }
+ });
+
+ assertEquals(1, mChooserDialog.mRestartSearchCount);
+ assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_searching)),
statusView.getText().toString());
mChooserDialog.closeDialog();
@@ -310,4 +383,17 @@ public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom
}
}
}
+
+ private static class TestLocationSettings extends LocationSettings {
+ public TestLocationSettings(Context context) {
+ super(context);
+ }
+
+ public boolean mSystemLocationSettingsEnabled = true;
+
+ @Override
+ public boolean isSystemLocationSettingEnabled() {
+ return mSystemLocationSettingsEnabled;
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698