Add Fast Pair to System Settings

Test: manual - took a screen capture https://photos.app.goo.gl/YgkVkAqxib4DwFs49 unit tests passed.
Bug: 203579197

Change-Id: Ie15ede111f7cdd1fc635fb9c475fe210d3f7f91b
This commit is contained in:
Xinyi Zhou
2021-11-02 14:04:46 -07:00
parent 9b639b759e
commit 7871ccff33
9 changed files with 272 additions and 1 deletions

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2022 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M20.65,19.27c-0.35,0-0.69-0.13-0.96-0.4l-8.66-8.66c-0.53-0.53-0.53-1.38,0-1.91 c0.53-0.53,1.38-0.53,1.91,0l8.66,8.66c0.53,0.53,0.53,1.38,0,1.91C21.34,19.14,20.99,19.27,20.65,19.27z" />
<path
android:fillColor="#FF000000"
android:pathData="M12.01,16.09c-0.35,0-0.69-0.13-0.96-0.4L2.4,7.04c-0.53-0.53-0.53-1.38,0-1.91s1.38-0.53,1.91,0l8.66,8.66 c0.53,0.53,0.53,1.38,0,1.91C12.7,15.96,12.36,16.09,12.01,16.09z" />
<path
android:fillColor="#FF000000"
android:pathData="M6.32,19.06c0-0.34,0.13-0.69,0.4-0.95l1.85-1.85c0.53-0.53,1.38-0.53,1.91,0c0.53,0.53,0.53,1.38,0,1.91 l-1.85,1.85c-0.53,0.53-1.38,0.53-1.91,0C6.45,19.75,6.32,19.4,6.32,19.06z" />
<path
android:fillColor="#FF000000"
android:pathData="M13.13,6.79c0-0.34,0.13-0.69,0.4-0.95l1.85-1.85c0.53-0.53,1.38-0.53,1.91,0c0.53,0.53,0.53,1.38,0,1.91 l-1.85,1.85c-0.53,0.53-1.38,0.53-1.91,0C13.27,7.48,13.13,7.13,13.13,6.79z" />
</vector>

View File

@@ -5945,6 +5945,15 @@
<!-- List of synonyms used in the settings search bar to find the “Voice Access”. [CHAR LIMIT=NONE] --> <!-- List of synonyms used in the settings search bar to find the “Voice Access”. [CHAR LIMIT=NONE] -->
<string name="keywords_voice_access"></string> <string name="keywords_voice_access"></string>
<!-- Fast Pair settings -->
<skip />
<!-- Title in main settings screen for Fast Pair settings [CHAR LIMIT=15] -->
<string name="fast_pair_settings">Fast Pair</string>
<!-- Fast Pair setting summary in settings screen [CHAR LIMIT=50] -->
<string name="fast_pair_settings_summary">Nearby detection of Fast Pair bluetooth devices.</string>
<!-- Printing settings --> <!-- Printing settings -->
<skip /> <skip />
@@ -8380,6 +8389,9 @@
<!-- List of synonyms for the Bluetooth setting, used to match in settings search [CHAR LIMIT=NONE] --> <!-- List of synonyms for the Bluetooth setting, used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_bluetooth_settings">connected, device, headphones, headset, speaker, wireless, pair, earbuds, music, media </string> <string name="keywords_bluetooth_settings">connected, device, headphones, headset, speaker, wireless, pair, earbuds, music, media </string>
<!-- List of synonyms for the Fast Pair setting, used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_fast_pair">pair, earbuds, bluetooth</string>
<!-- List of synonyms for the Wallpaper picker setting, used to match in settings search [CHAR LIMIT=NONE] --> <!-- List of synonyms for the Wallpaper picker setting, used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_wallpaper">background, theme, grid, customize, personalize</string> <string name="keywords_wallpaper">background, theme, grid, customize, personalize</string>

View File

@@ -67,6 +67,15 @@
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"
settings:controller="com.android.settings.uwb.UwbPreferenceController"/> settings:controller="com.android.settings.uwb.UwbPreferenceController"/>
<Preference
android:key="connected_device_fast_pair"
android:title="@string/fast_pair_settings"
android:summary="@string/fast_pair_settings_summary"
android:icon="@drawable/ic_fast_pair_24dp"
android:fragment="com.android.settings.nearby.FastPairSettingsFragment"
settings:controller="com.android.settings.nearby.FastPairPreferenceController"
android:order="-2"/>
<PreferenceCategory <PreferenceCategory
android:key="dashboard_tile_placeholder" android:key="dashboard_tile_placeholder"
android:order="-8"/> android:order="-8"/>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2022 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"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/fast_pair_settings"
settings:keywords="@string/keywords_fast_pair">
</PreferenceScreen>

View File

@@ -0,0 +1,41 @@
/*
* Copyright (C) 2022 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.nearby;
import android.content.Context;
import androidx.lifecycle.LifecycleObserver;
import com.android.settings.core.BasePreferenceController;
/**
* {@link BasePreferenceController} for Fast Pair settings.
*/
public class FastPairPreferenceController extends BasePreferenceController implements
LifecycleObserver {
public static final String TAG = "FastPairPrefController";
public static final String KEY_FAST_PAIR_SETTINGS = "connected_device_fast_pair";
public FastPairPreferenceController(Context context) {
super(context, KEY_FAST_PAIR_SETTINGS);
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (C) 2022 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.nearby;
import android.app.settings.SettingsEnums;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
/**
* Fragment with the top level fast pair settings.
*/
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class FastPairSettingsFragment extends SettingsPreferenceFragment {
@Override
public int getMetricsCategory() {
return SettingsEnums.CONNECTION_DEVICE_ADVANCED_FAST_PAIR;
}
@Override
public int getHelpResource() {
return 0;
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.fast_pair_settings;
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.fast_pair_settings);
}

View File

@@ -4,7 +4,7 @@ $ atest SettingsUnitTests
A single class can also be tested with the following command A single class can also be tested with the following command
$ atest -c <YourClassName> $ atest -c <YourClassName>
// The following instrutions show how to run the test suite using make + adb // // The following instructions show how to run the test suite using make + adb //
To build the tests you can use the following command at the root of your android source tree To build the tests you can use the following command at the root of your android source tree
$ make SettingsUnitTests $ make SettingsUnitTests

View File

@@ -0,0 +1,52 @@
/*
* Copyright (C) 2022 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.nearby;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.os.Looper;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class FastPairPreferenceControllerTest {
private Context mContext;
private FastPairPreferenceController mController;
@Before
public void setUp() {
mContext = spy(ApplicationProvider.getApplicationContext());
mController = new FastPairPreferenceController(mContext);
if (Looper.myLooper() == null) {
Looper.prepare();
}
}
@Test
public void isAvailable_shouldBeTrue() {
assertThat(mController.isAvailable()).isTrue();
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (C) 2022 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.nearby;
import static com.google.common.truth.Truth.assertThat;
import android.app.Instrumentation;
import android.app.settings.SettingsEnums;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class FastPairSettingsFragmentTest {
private FastPairSettingsFragment mFragment;
@Before
public void setUp() {
final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
instrumentation.runOnMainSync(() -> mFragment = new FastPairSettingsFragment());
}
@Test
public void getCategoryKey_isNetwork() {
assertThat(mFragment.getMetricsCategory())
.isEqualTo(SettingsEnums.CONNECTION_DEVICE_ADVANCED_FAST_PAIR);
}
}