Remove location mode menu from location settings
Location modes were introduced in KitKat. It has made location settings over complicated. In P we are removing location modes to provide simple, meaningful and transparent controls for users. Bug: 63818349 Bug: 70350519 Test: Robo Test: Manual Change-Id: Ic8a168b8eeb3cd2c8b1536c378c92a5f377d3bba
This commit is contained in:
@@ -3391,16 +3391,6 @@
|
|||||||
<string name="location_title">My Location</string>
|
<string name="location_title">My Location</string>
|
||||||
<!-- [CHAR LIMIT=30] Title for managed profile location switch -->
|
<!-- [CHAR LIMIT=30] Title for managed profile location switch -->
|
||||||
<string name="managed_profile_location_switch_title">Location for work profile</string>
|
<string name="managed_profile_location_switch_title">Location for work profile</string>
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, setting preference screen box label for location mode -->
|
|
||||||
<string name="location_mode_title">Mode</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, high accuracy location mode -->
|
|
||||||
<string name="location_mode_high_accuracy_title">High accuracy</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, battery saving location mode -->
|
|
||||||
<string name="location_mode_battery_saving_title">Battery saving</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, device only location mode -->
|
|
||||||
<string name="location_mode_sensors_only_title">Device only</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, location off mode -->
|
|
||||||
<string name="location_mode_location_off_title">Location off</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen. It's a link that directs the user to a page that
|
<!-- [CHAR LIMIT=30] Location settings screen. It's a link that directs the user to a page that
|
||||||
shows the location permission setting for each installed app -->
|
shows the location permission setting for each installed app -->
|
||||||
<string name="location_app_level_permissions">App-level permissions</string>
|
<string name="location_app_level_permissions">App-level permissions</string>
|
||||||
@@ -3414,14 +3404,6 @@
|
|||||||
<string name="location_high_battery_use">High battery use</string>
|
<string name="location_high_battery_use">High battery use</string>
|
||||||
<!-- [CHAR LIMIT=30] Location settings screen, recent location requests low battery use-->
|
<!-- [CHAR LIMIT=30] Location settings screen, recent location requests low battery use-->
|
||||||
<string name="location_low_battery_use">Low battery use</string>
|
<string name="location_low_battery_use">Low battery use</string>
|
||||||
<!-- [CHAR LIMIT=30] Location mode screen, screen title -->
|
|
||||||
<string name="location_mode_screen_title">Location mode</string>
|
|
||||||
<!-- [CHAR LIMIT=130] Location mode screen, description for high accuracy mode -->
|
|
||||||
<string name="location_mode_high_accuracy_description">Use GPS, Wi\u2011Fi, Bluetooth, or mobile networks to determine location </string>
|
|
||||||
<!-- [CHAR LIMIT=130] Location mode screen, description for battery saving mode -->
|
|
||||||
<string name="location_mode_battery_saving_description">Use Wi\u2011Fi, Bluetooth, or mobile networks to determine location</string>
|
|
||||||
<!-- [CHAR LIMIT=130] Location mode screen, description for sensors only mode -->
|
|
||||||
<string name="location_mode_sensors_only_description">Use GPS and device sensors to determine location</string>
|
|
||||||
<!-- [CHAR LIMIT=30] Wireless background scanning settings screen, screen title -->
|
<!-- [CHAR LIMIT=30] Wireless background scanning settings screen, screen title -->
|
||||||
<string name="location_scanning_screen_title">Scanning</string>
|
<string name="location_scanning_screen_title">Scanning</string>
|
||||||
<!-- [CHAR LIMIT=130] Preference title for Wi-Fi always scanning -->
|
<!-- [CHAR LIMIT=130] Preference title for Wi-Fi always scanning -->
|
||||||
@@ -6709,7 +6691,6 @@
|
|||||||
<string name="keywords_sounds_and_notifications_interruptions">dont don\u2019t disturb, interrupt, interruption, break</string>
|
<string name="keywords_sounds_and_notifications_interruptions">dont don\u2019t disturb, interrupt, interruption, break</string>
|
||||||
<string name="keywords_app">RAM</string>
|
<string name="keywords_app">RAM</string>
|
||||||
<string name="keywords_location">nearby, location, history, reporting</string>
|
<string name="keywords_location">nearby, location, history, reporting</string>
|
||||||
<string name="keywords_location_mode">accuracy</string>
|
|
||||||
<string name="keywords_accounts">account</string>
|
<string name="keywords_accounts">account</string>
|
||||||
<string name="keywords_users">restriction, restrict, restricted</string>
|
<string name="keywords_users">restriction, restrict, restricted</string>
|
||||||
<string name="keywords_keyboard_and_ime">text correction, correct, sound, vibrate, auto, language, gesture, suggest, suggestion, theme, offensive, word, type, emoji, international</string>
|
<string name="keywords_keyboard_and_ime">text correction, correct, sound, vibrate, auto, language, gesture, suggest, suggestion, theme, offensive, word, type, emoji, international</string>
|
||||||
@@ -8346,8 +8327,8 @@
|
|||||||
<!-- Summary of payment screen [CHAR LIMIT=NONE] -->
|
<!-- Summary of payment screen [CHAR LIMIT=NONE] -->
|
||||||
<string name="payment_summary"><xliff:g id="app_name" example="Payment App">%1$s</xliff:g> is default</string>
|
<string name="payment_summary"><xliff:g id="app_name" example="Payment App">%1$s</xliff:g> is default</string>
|
||||||
|
|
||||||
<!-- Summary of location screen [CHAR LIMIT=NONE] -->
|
<!-- Summary of location on screen [CHAR LIMIT=NONE] -->
|
||||||
<string name="location_on_summary">ON / <xliff:g id="location_mode" example="High accuracy">%1$s</xliff:g></string>
|
<string name="location_on_summary">ON</string>
|
||||||
|
|
||||||
<!-- Location off [CHAR LIMIT=NONE] -->
|
<!-- Location off [CHAR LIMIT=NONE] -->
|
||||||
<string name="location_off_summary">OFF</string>
|
<string name="location_off_summary">OFF</string>
|
||||||
|
@@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2011 The Android Open Source Project
|
|
||||||
|
|
||||||
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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<PreferenceScreen
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:key="location_mode_settings"
|
|
||||||
android:title="@string/location_mode_screen_title">
|
|
||||||
|
|
||||||
<com.android.settings.widget.RadioButtonPreference
|
|
||||||
android:key="high_accuracy"
|
|
||||||
android:title="@string/location_mode_high_accuracy_title"
|
|
||||||
android:summary="@string/location_mode_high_accuracy_description" />
|
|
||||||
<com.android.settings.widget.RadioButtonPreference
|
|
||||||
android:key="battery_saving"
|
|
||||||
android:title="@string/location_mode_battery_saving_title"
|
|
||||||
android:summary="@string/location_mode_battery_saving_description" />
|
|
||||||
<com.android.settings.widget.RadioButtonPreference
|
|
||||||
android:key="sensors_only"
|
|
||||||
android:title="@string/location_mode_sensors_only_title"
|
|
||||||
android:summary="@string/location_mode_sensors_only_description" />
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
@@ -50,10 +50,4 @@
|
|||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="location_services"
|
android:key="location_services"
|
||||||
android:title="@string/location_category_location_services" />
|
android:title="@string/location_category_location_services" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="location_mode"
|
|
||||||
android:title="@string/location_mode_title"
|
|
||||||
settings:keywords="@string/keywords_location_mode"
|
|
||||||
android:summary="@string/summary_placeholder" />
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.SearchIndexableResource;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
|
||||||
import com.android.settings.search.Indexable;
|
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A page with 3 radio buttons to choose the location mode.
|
|
||||||
*
|
|
||||||
* There are 3 location modes when location access is enabled:
|
|
||||||
*
|
|
||||||
* High accuracy: use both GPS and network location.
|
|
||||||
*
|
|
||||||
* Battery saving: use network location only to reduce the power consumption.
|
|
||||||
*
|
|
||||||
* Sensors only: use GPS location only.
|
|
||||||
*/
|
|
||||||
public class LocationMode extends DashboardFragment {
|
|
||||||
|
|
||||||
private static final String TAG = "LocationMode";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsCategory() {
|
|
||||||
return MetricsEvent.LOCATION_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getPreferenceScreenResId() {
|
|
||||||
return R.xml.location_mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getLogTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
|
|
||||||
return buildPreferenceControllers(context, getLifecycle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getHelpResource() {
|
|
||||||
return R.string.help_url_location_access;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
|
||||||
Context context, Lifecycle lifecycle) {
|
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
|
||||||
controllers.add(new LocationModeHighAccuracyPreferenceController(context, lifecycle));
|
|
||||||
controllers.add(
|
|
||||||
new LocationModeBatterySavingPreferenceController(context, lifecycle));
|
|
||||||
controllers.add(new LocationModeSensorsOnlyPreferenceController(context, lifecycle));
|
|
||||||
return controllers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For Search.
|
|
||||||
*/
|
|
||||||
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
|
||||||
new BaseSearchIndexProvider() {
|
|
||||||
@Override
|
|
||||||
public List<SearchIndexableResource> getXmlResourcesToIndex(
|
|
||||||
Context context, boolean enabled) {
|
|
||||||
final SearchIndexableResource sir = new SearchIndexableResource(context);
|
|
||||||
sir.xmlResId = R.xml.location_mode;
|
|
||||||
return Arrays.asList(sir);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean isPageSearchEnabled(Context context) {
|
|
||||||
return context.getResources().getBoolean(R.bool.config_location_mode_available);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<AbstractPreferenceController> getPreferenceControllers(Context
|
|
||||||
context) {
|
|
||||||
return buildPreferenceControllers(context, null /* lifecycle */);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
public class LocationModeBatterySavingPreferenceController
|
|
||||||
extends LocationModeRadioButtonPreferenceController {
|
|
||||||
|
|
||||||
private static final String KEY_BATTERY_SAVING = "battery_saving";
|
|
||||||
|
|
||||||
public LocationModeBatterySavingPreferenceController(Context context,
|
|
||||||
Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return KEY_BATTERY_SAVING;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getLocationMode() {
|
|
||||||
return Settings.Secure.LOCATION_MODE_BATTERY_SAVING;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
public class LocationModeHighAccuracyPreferenceController
|
|
||||||
extends LocationModeRadioButtonPreferenceController {
|
|
||||||
|
|
||||||
private static final String KEY_HIGH_ACCURACY = "high_accuracy";
|
|
||||||
|
|
||||||
public LocationModeHighAccuracyPreferenceController(Context context,
|
|
||||||
Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return KEY_HIGH_ACCURACY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getLocationMode() {
|
|
||||||
return Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,76 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.SettingsActivity;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
public class LocationModePreferenceController extends LocationBasePreferenceController {
|
|
||||||
|
|
||||||
/** Key for preference screen "Mode" */
|
|
||||||
private static final String KEY_LOCATION_MODE = "location_mode";
|
|
||||||
|
|
||||||
private final LocationSettings mParentFragment;
|
|
||||||
private Preference mPreference;
|
|
||||||
|
|
||||||
public LocationModePreferenceController(Context context, LocationSettings parent,
|
|
||||||
Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
mParentFragment = parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return KEY_LOCATION_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAvailable() {
|
|
||||||
return mContext.getResources().getBoolean(R.bool.config_location_mode_available);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
|
||||||
super.displayPreference(screen);
|
|
||||||
mPreference = screen.findPreference(KEY_LOCATION_MODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
|
||||||
if (KEY_LOCATION_MODE.equals(preference.getKey())) {
|
|
||||||
final SettingsActivity activity = (SettingsActivity) mParentFragment.getActivity();
|
|
||||||
activity.startPreferencePanel(mParentFragment, LocationMode.class.getName(), null,
|
|
||||||
R.string.location_mode_screen_title, null, mParentFragment, 0);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocationModeChanged(int mode, boolean restricted) {
|
|
||||||
final int modeDescription = LocationPreferenceController.getLocationString(mode);
|
|
||||||
if (modeDescription != 0) {
|
|
||||||
mPreference.setSummary(modeDescription);
|
|
||||||
}
|
|
||||||
// Restricted user can't change the location mode, so disable the master switch. But in some
|
|
||||||
// corner cases, the location might still be enabled. In such case the master switch should
|
|
||||||
// be disabled but checked.
|
|
||||||
mPreference.setEnabled(mLocationEnabler.isEnabled(mode));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import com.android.settings.widget.RadioButtonPreference;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
public abstract class LocationModeRadioButtonPreferenceController
|
|
||||||
extends LocationBasePreferenceController
|
|
||||||
implements RadioButtonPreference.OnClickListener {
|
|
||||||
|
|
||||||
protected RadioButtonPreference mPreference;
|
|
||||||
|
|
||||||
public LocationModeRadioButtonPreferenceController(Context context, Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
|
||||||
super.displayPreference(screen);
|
|
||||||
mPreference = (RadioButtonPreference) screen.findPreference(getPreferenceKey());
|
|
||||||
mPreference.setOnClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRadioButtonClicked(RadioButtonPreference emiter) {
|
|
||||||
mLocationEnabler.setLocationMode(getLocationMode());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocationModeChanged(int mode, boolean restricted) {
|
|
||||||
mPreference.setChecked(mode == getLocationMode());
|
|
||||||
mPreference.setEnabled(mLocationEnabler.isEnabled(mode));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Gets the location mode that this controller monitors. */
|
|
||||||
protected abstract int getLocationMode();
|
|
||||||
|
|
||||||
}
|
|
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
public class LocationModeSensorsOnlyPreferenceController
|
|
||||||
extends LocationModeRadioButtonPreferenceController {
|
|
||||||
|
|
||||||
private static final String KEY_SENSORS_ONLY = "sensors_only";
|
|
||||||
|
|
||||||
public LocationModeSensorsOnlyPreferenceController(Context context,
|
|
||||||
Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return KEY_SENSORS_ONLY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getLocationMode() {
|
|
||||||
return Settings.Secure.LOCATION_MODE_SENSORS_ONLY;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -105,26 +105,11 @@ public class LocationPreferenceController extends AbstractPreferenceController
|
|||||||
int mode = Secure.getInt(context.getContentResolver(),
|
int mode = Secure.getInt(context.getContentResolver(),
|
||||||
Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF);
|
Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF);
|
||||||
if (mode != Secure.LOCATION_MODE_OFF) {
|
if (mode != Secure.LOCATION_MODE_OFF) {
|
||||||
return context.getString(R.string.location_on_summary,
|
return context.getString(R.string.location_on_summary);
|
||||||
context.getString(getLocationString(mode)));
|
|
||||||
}
|
}
|
||||||
return context.getString(R.string.location_off_summary);
|
return context.getString(R.string.location_off_summary);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getLocationString(int mode) {
|
|
||||||
switch (mode) {
|
|
||||||
case Secure.LOCATION_MODE_OFF:
|
|
||||||
return R.string.location_mode_location_off_title;
|
|
||||||
case Secure.LOCATION_MODE_SENSORS_ONLY:
|
|
||||||
return R.string.location_mode_sensors_only_title;
|
|
||||||
case Secure.LOCATION_MODE_BATTERY_SAVING:
|
|
||||||
return R.string.location_mode_battery_saving_title;
|
|
||||||
case Secure.LOCATION_MODE_HIGH_ACCURACY:
|
|
||||||
return R.string.location_mode_high_accuracy_title;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultPayload getResultPayload() {
|
public ResultPayload getResultPayload() {
|
||||||
final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
|
final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
|
||||||
|
@@ -127,7 +127,6 @@ public class LocationSettings extends DashboardFragment {
|
|||||||
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
||||||
Context context, LocationSettings fragment, Lifecycle lifecycle) {
|
Context context, LocationSettings fragment, Lifecycle lifecycle) {
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new LocationModePreferenceController(context, fragment, lifecycle));
|
|
||||||
controllers.add(new AppLocationPermissionPreferenceController(context));
|
controllers.add(new AppLocationPermissionPreferenceController(context));
|
||||||
controllers.add(new LocationForWorkPreferenceController(context, lifecycle));
|
controllers.add(new LocationForWorkPreferenceController(context, lifecycle));
|
||||||
controllers.add(
|
controllers.add(
|
||||||
|
@@ -62,7 +62,6 @@ import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
|
|||||||
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
|
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
|
||||||
import com.android.settings.inputmethod.VirtualKeyboardFragment;
|
import com.android.settings.inputmethod.VirtualKeyboardFragment;
|
||||||
import com.android.settings.language.LanguageAndInputSettings;
|
import com.android.settings.language.LanguageAndInputSettings;
|
||||||
import com.android.settings.location.LocationMode;
|
|
||||||
import com.android.settings.location.LocationSettings;
|
import com.android.settings.location.LocationSettings;
|
||||||
import com.android.settings.location.ScanningSettings;
|
import com.android.settings.location.ScanningSettings;
|
||||||
import com.android.settings.network.NetworkDashboardFragment;
|
import com.android.settings.network.NetworkDashboardFragment;
|
||||||
@@ -132,7 +131,6 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources {
|
|||||||
addIndex(GestureSettings.class);
|
addIndex(GestureSettings.class);
|
||||||
addIndex(LanguageAndInputSettings.class);
|
addIndex(LanguageAndInputSettings.class);
|
||||||
addIndex(LocationSettings.class);
|
addIndex(LocationSettings.class);
|
||||||
addIndex(LocationMode.class);
|
|
||||||
addIndex(ScanningSettings.class);
|
addIndex(ScanningSettings.class);
|
||||||
addIndex(SecuritySettingsV2.class);
|
addIndex(SecuritySettingsV2.class);
|
||||||
addIndex(ScreenLockSettings.class);
|
addIndex(ScreenLockSettings.class);
|
||||||
|
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
|
|
||||||
import android.arch.lifecycle.LifecycleOwner;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class LocationModeBatterySavingPreferenceControllerTest {
|
|
||||||
|
|
||||||
private LifecycleOwner mLifecycleOwner;
|
|
||||||
private Lifecycle mLifecycle;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
mLifecycleOwner = () -> mLifecycle;
|
|
||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getLocationMode_shouldReturnModeBatterySaving() {
|
|
||||||
final LocationModeBatterySavingPreferenceController controller =
|
|
||||||
new LocationModeBatterySavingPreferenceController(mock(Context.class), mLifecycle);
|
|
||||||
|
|
||||||
assertThat(controller.getLocationMode())
|
|
||||||
.isEqualTo(Settings.Secure.LOCATION_MODE_BATTERY_SAVING);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
|
|
||||||
import android.arch.lifecycle.LifecycleOwner;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class LocationModeHighAccuracyPreferenceControllerTest {
|
|
||||||
|
|
||||||
private LifecycleOwner mLifecycleOwner;
|
|
||||||
private Lifecycle mLifecycle;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
mLifecycleOwner = () -> mLifecycle;
|
|
||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getLocationMode_shouldReturnModeHighAccuracy() {
|
|
||||||
final LocationModeHighAccuracyPreferenceController controller =
|
|
||||||
new LocationModeHighAccuracyPreferenceController(mock(Context.class), mLifecycle);
|
|
||||||
|
|
||||||
assertThat(controller.getLocationMode())
|
|
||||||
.isEqualTo(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,141 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static junit.framework.Assert.assertFalse;
|
|
||||||
import static junit.framework.Assert.assertTrue;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.arch.lifecycle.LifecycleOwner;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.SettingsActivity;
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class LocationModePreferenceControllerTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private LocationSettings mFragment;
|
|
||||||
@Mock
|
|
||||||
private SettingsActivity mActivity;
|
|
||||||
@Mock
|
|
||||||
private Preference mPreference;
|
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private LocationModePreferenceController mController;
|
|
||||||
private LifecycleOwner mLifecycleOwner;
|
|
||||||
private Lifecycle mLifecycle;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
|
||||||
mLifecycleOwner = () -> mLifecycle;
|
|
||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
|
||||||
mController = new LocationModePreferenceController(mContext, mFragment, mLifecycle);
|
|
||||||
when(mFragment.getActivity()).thenReturn(mActivity);
|
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Config(qualifiers = "mcc999")
|
|
||||||
public void locationModePreference_ifXmlSetToFalse_shouldNotBeAvailable() {
|
|
||||||
assertFalse(mController.isAvailable());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void locationModePreference_ifXmlSetToTrue_shouldBeAvailable() {
|
|
||||||
assertTrue(mController.isAvailable());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_locationOff_shouldDisablePreference() {
|
|
||||||
when(mUserManager.hasUserRestriction(any())).thenReturn(false);
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_OFF, false);
|
|
||||||
|
|
||||||
verify(mPreference).setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_restricted_shouldDisablePreference() {
|
|
||||||
when(mUserManager.hasUserRestriction(any())).thenReturn(true);
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
|
|
||||||
|
|
||||||
verify(mPreference).setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_locationOnNotRestricted_shouldEnablePreference() {
|
|
||||||
when(mUserManager.hasUserRestriction(any())).thenReturn(false);
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
|
|
||||||
|
|
||||||
verify(mPreference).setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_shouldUpdateSummary() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
|
|
||||||
|
|
||||||
verify(mPreference).setSummary(anyInt());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void handlePreferenceTreeClick_shouldStartLocationModeFragment() {
|
|
||||||
final Preference preference = new Preference(mContext);
|
|
||||||
preference.setKey(mController.getPreferenceKey());
|
|
||||||
|
|
||||||
mController.handlePreferenceTreeClick(preference);
|
|
||||||
|
|
||||||
verify(mActivity).startPreferencePanel(any(), eq(LocationMode.class.getName()), any(),
|
|
||||||
eq(R.string.location_mode_screen_title), any(), any(), anyInt());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,140 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.arch.lifecycle.LifecycleOwner;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settings.testutils.shadow.ShadowSecureSettings;
|
|
||||||
import com.android.settings.widget.RadioButtonPreference;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(
|
|
||||||
manifest = TestConfig.MANIFEST_PATH,
|
|
||||||
sdk = TestConfig.SDK_VERSION,
|
|
||||||
shadows = {ShadowSecureSettings.class})
|
|
||||||
public class LocationModeRadioButtonPreferenceControllerTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private RadioButtonPreference mPreference;
|
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private LocationModeRadioButtonPreferenceController mController;
|
|
||||||
private LifecycleOwner mLifecycleOwner;
|
|
||||||
private Lifecycle mLifecycle;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = RuntimeEnvironment.application;
|
|
||||||
mLifecycleOwner = () -> mLifecycle;
|
|
||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
|
||||||
mController = new LocationModeRadioButtonPreferenceControllerTestable(mContext, mLifecycle);
|
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void displayPreference_shouldAddClickListener() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
verify(mPreference).setOnClickListener(mController);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onRadioButtonClicked_shouldSetLocationModeToOwnMode() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
|
||||||
Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
|
|
||||||
|
|
||||||
mController.onRadioButtonClicked(mPreference);
|
|
||||||
|
|
||||||
assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
|
|
||||||
Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF))
|
|
||||||
.isEqualTo(mController.getLocationMode());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_otherModeSelected_shouldUncheckPreference() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
|
|
||||||
|
|
||||||
verify(mPreference).setChecked(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_ownModeSelected_shouldCheckPreference() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(mController.getLocationMode(), false);
|
|
||||||
|
|
||||||
verify(mPreference).setChecked(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_locationOff_shouldDisablePreference() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_OFF, false);
|
|
||||||
|
|
||||||
verify(mPreference).setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onLocationModeChanged_locationOn_shouldDisablePreference() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
|
|
||||||
|
|
||||||
verify(mPreference).setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class LocationModeRadioButtonPreferenceControllerTestable
|
|
||||||
extends LocationModeRadioButtonPreferenceController {
|
|
||||||
|
|
||||||
public LocationModeRadioButtonPreferenceControllerTestable(Context context,
|
|
||||||
Lifecycle lifecycle) {
|
|
||||||
super(context, lifecycle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return "test";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getLocationMode() {
|
|
||||||
return Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
|
|
||||||
import android.arch.lifecycle.LifecycleOwner;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class LocationModeSensorsOnlyPreferenceControllerTest {
|
|
||||||
|
|
||||||
private LifecycleOwner mLifecycleOwner;
|
|
||||||
private Lifecycle mLifecycle;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
mLifecycleOwner = () -> mLifecycle;
|
|
||||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getLocationMode_shouldReturnModeSensorsOnly() {
|
|
||||||
final LocationModeSensorsOnlyPreferenceController controller =
|
|
||||||
new LocationModeSensorsOnlyPreferenceController(mock(Context.class), mLifecycle);
|
|
||||||
|
|
||||||
assertThat(controller.getLocationMode())
|
|
||||||
.isEqualTo(Settings.Secure.LOCATION_MODE_SENSORS_ONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* 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.android.settings.location;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.SearchIndexableResource;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
import com.android.settings.testutils.XmlTestUtils;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class LocationModeTest {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private LocationMode mFragment;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
mFragment = new LocationMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSearchIndexProvider_shouldIndexResource() {
|
|
||||||
final List<SearchIndexableResource> indexRes =
|
|
||||||
mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
|
|
||||||
true /* enabled */);
|
|
||||||
|
|
||||||
assertThat(indexRes).isNotNull();
|
|
||||||
assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Config(qualifiers = "mcc999")
|
|
||||||
public void testSearchIndexProvider_ifPageDisabled_shouldNotIndexResource() {
|
|
||||||
final List<String> niks = LocationMode.SEARCH_INDEX_DATA_PROVIDER
|
|
||||||
.getNonIndexableKeys(mContext);
|
|
||||||
final int xmlId = mFragment.getPreferenceScreenResId();
|
|
||||||
|
|
||||||
final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
|
|
||||||
assertThat(niks).containsAllIn(keys);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -109,45 +109,30 @@ public class LocationPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getLocationSummary_sensorsOnly_shouldSetSummarySensorsOnly() {
|
public void getLocationSummary_sensorsOnly_shouldSetSummaryOn() {
|
||||||
Secure.putInt(mContext.getContentResolver(),
|
Secure.putInt(mContext.getContentResolver(),
|
||||||
Secure.LOCATION_MODE, Secure.LOCATION_MODE_SENSORS_ONLY);
|
Secure.LOCATION_MODE, Secure.LOCATION_MODE_SENSORS_ONLY);
|
||||||
|
|
||||||
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
||||||
mContext.getString(R.string.location_on_summary,
|
mContext.getString(R.string.location_on_summary));
|
||||||
mContext.getString(R.string.location_mode_sensors_only_title)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getLocationSummary_highAccuracy_shouldSetSummarHighAccuracy() {
|
public void getLocationSummary_highAccuracy_shouldSetSummaryOn() {
|
||||||
Secure.putInt(mContext.getContentResolver(),
|
Secure.putInt(mContext.getContentResolver(),
|
||||||
Secure.LOCATION_MODE, Secure.LOCATION_MODE_HIGH_ACCURACY);
|
Secure.LOCATION_MODE, Secure.LOCATION_MODE_HIGH_ACCURACY);
|
||||||
|
|
||||||
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
||||||
mContext.getString(R.string.location_on_summary,
|
mContext.getString(R.string.location_on_summary));
|
||||||
mContext.getString(R.string.location_mode_high_accuracy_title)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getLocationSummary_batterySaving_shouldSetSummaryBatterySaving() {
|
public void getLocationSummary_batterySaving_shouldSetSummaryOn() {
|
||||||
Secure.putInt(mContext.getContentResolver(),
|
Secure.putInt(mContext.getContentResolver(),
|
||||||
Secure.LOCATION_MODE, Secure.LOCATION_MODE_BATTERY_SAVING);
|
Secure.LOCATION_MODE, Secure.LOCATION_MODE_BATTERY_SAVING);
|
||||||
|
|
||||||
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
assertThat(mController.getLocationSummary(mContext)).isEqualTo(
|
||||||
mContext.getString(R.string.location_on_summary,
|
mContext.getString(R.string.location_on_summary));
|
||||||
mContext.getString(R.string.location_mode_battery_saving_title)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getLocationString_shouldCorrectString() {
|
|
||||||
assertThat(mController.getLocationString(Secure.LOCATION_MODE_OFF)).isEqualTo(
|
|
||||||
R.string.location_mode_location_off_title);
|
|
||||||
assertThat(mController.getLocationString(Secure.LOCATION_MODE_SENSORS_ONLY)).isEqualTo(
|
|
||||||
R.string.location_mode_sensors_only_title);
|
|
||||||
assertThat(mController.getLocationString(Secure.LOCATION_MODE_BATTERY_SAVING)).isEqualTo(
|
|
||||||
R.string.location_mode_battery_saving_title);
|
|
||||||
assertThat(mController.getLocationString(Secure.LOCATION_MODE_HIGH_ACCURACY)).isEqualTo(
|
|
||||||
R.string.location_mode_high_accuracy_title);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Reference in New Issue
Block a user