diff options
21 files changed, 0 insertions, 1612 deletions
diff --git a/SetupWizard/Android.mk b/SetupWizard/Android.mk deleted file mode 100644 index 3a151f2..0000000 --- a/SetupWizard/Android.mk +++ /dev/null @@ -1,45 +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. -# - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := CarSetupWizard - -LOCAL_CERTIFICATE := platform - -LOCAL_MODULE_TAGS := optional - -LOCAL_PRIVILEGED_MODULE := true - -# For setup wizard common lib -LOCAL_STATIC_JAVA_LIBRARIES += android-setup-wizard-common -LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.google.android.setupwizard.common -LOCAL_RESOURCE_DIR += vendor/google/apps/SetupWizard/libs/base/res - -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_DEX_PREOPT := false - -include frameworks/opt/setupwizard/library/common-gingerbread.mk -include frameworks/base/packages/SettingsLib/common.mk - -include $(BUILD_PACKAGE) diff --git a/SetupWizard/AndroidManifest.xml b/SetupWizard/AndroidManifest.xml deleted file mode 100644 index 0e7d0ca..0000000 --- a/SetupWizard/AndroidManifest.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - 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. - --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.car.setupwizard"> - <uses-sdk - android:minSdkVersion="23" - android:targetSdkVersion="23" /> - - <uses-permission android:name="android.permission.BLUETOOTH"/> - <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> - - <application - android:allowBackup="false" - android:supportsRtl="true" - android:allowClearUserData="false" - android:hardwareAccelerated="true" - android:label="@string/app_name" - android:theme="@style/SuwThemeGlif.Light"> - - <activity android:name=".bluetooth.BluetoothActivity" - android:enabled="true" - android:exported="true" - android:immersive="true" - android:label="@string/bluetooth_title" - android:windowSoftInputMode="adjustNothing"> - <intent-filter> - <action android:name="com.android.car.setupwizard.BLUETOOTH_SETTINGS" /> - <category android:name="android.intent.category.DEFAULT" /> - </intent-filter> - </activity> - </application> -</manifest> diff --git a/SetupWizard/res/drawable/ic_bluetooth.xml b/SetupWizard/res/drawable/ic_bluetooth.xml deleted file mode 100644 index 3e96002..0000000 --- a/SetupWizard/res/drawable/ic_bluetooth.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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="@dimen/glif_icon_size" - android:height="@dimen/glif_icon_size" - android:viewportWidth="48.0" - android:viewportHeight="48.0" - android:autoMirrored="true"> - <path - android:fillColor="?android:attr/colorPrimary" - android:pathData="M35.41,15.41L24,4h-2v15.17L12.83,10 10,12.83 21.17,24 10,35.17 12.83,38 22,28.83L22,44h2l11.41,-11.41L26.83,24l8.58,-8.59zM26,11.66l3.76,3.76L26,19.17v-7.51zM29.76,32.59L26,36.34v-7.52l3.76,3.77z" /> -</vector> diff --git a/SetupWizard/res/drawable/ic_bluetooth_connected.xml b/SetupWizard/res/drawable/ic_bluetooth_connected.xml deleted file mode 100644 index 7e08c89..0000000 --- a/SetupWizard/res/drawable/ic_bluetooth_connected.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (c) 2017 Google Inc. - - 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="48.0" - android:viewportHeight="48.0" - android:autoMirrored="true"> - <path - android:fillColor="?attr/suwListItemIconColor" - android:pathData="M7,12l-2,-2 -2,2 2,2 2,-2zM17.71,7.71L12,2h-1v7.59L6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 11,14.41L11,22h1l5.71,-5.71 -4.3,-4.29 4.3,-4.29zM13,5.83l1.88,1.88L13,9.59L13,5.83zM14.88,16.29L13,18.17v-3.76l1.88,1.88zM19,10l-2,2 2,2 2,-2 -2,-2z" /> -</vector> diff --git a/SetupWizard/res/drawable/ic_bluetooth_item.xml b/SetupWizard/res/drawable/ic_bluetooth_item.xml deleted file mode 100644 index a1841c0..0000000 --- a/SetupWizard/res/drawable/ic_bluetooth_item.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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="48.0" - android:viewportHeight="48.0" - android:autoMirrored="true"> - <path - android:fillColor="?android:attr/colorPrimary" - android:pathData="M35.41,15.41L24,4h-2v15.17L12.83,10 10,12.83 21.17,24 10,35.17 12.83,38 22,28.83L22,44h2l11.41,-11.41L26.83,24l8.58,-8.59zM26,11.66l3.76,3.76L26,19.17v-7.51zM29.76,32.59L26,36.34v-7.52l3.76,3.77z" /> -</vector> diff --git a/SetupWizard/res/drawable/ic_bluetooth_scanning.xml b/SetupWizard/res/drawable/ic_bluetooth_scanning.xml deleted file mode 100644 index 0a8d064..0000000 --- a/SetupWizard/res/drawable/ic_bluetooth_scanning.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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="48.0" - android:viewportHeight="48.0"> - <path - android:fillAlpha=".3" - android:fillColor="?attr/suwListItemIconColor" - android:pathData="M28.48,24.02l4.64,4.64c0.56,-1.45 0.88,-3.02 0.88,-4.66 0,-1.63 -0.31,-3.19 -0.86,-4.63l-4.66,4.65zM39.06,13.43l-2.53,2.53c1.25,2.41 1.97,5.14 1.97,8.05s-0.72,5.63 -1.97,8.05l2.4,2.4c1.93,-3.1 3.07,-6.73 3.07,-10.63 0,-3.82 -1.09,-7.37 -2.94,-10.4zM31.41,15.41L20,4h-2v15.17L8.83,10 6,12.83 17.17,24 6,35.17 8.83,38 18,28.83L18,44h2l11.41,-11.41L22.83,24l8.58,-8.59zM22,11.66l3.76,3.76L22,19.17v-7.51zM25.76,32.59L22,36.34v-7.52l3.76,3.77z" /> -</vector> diff --git a/SetupWizard/res/drawable/ic_computer.xml b/SetupWizard/res/drawable/ic_computer.xml deleted file mode 100644 index e7020ee..0000000 --- a/SetupWizard/res/drawable/ic_computer.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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.0" - android:viewportHeight="24.0"> - <path - android:pathData="M20,18c1.1,0 1.99,-0.9 1.99,-2L22,6c0,-1.1 -0.9,-2 -2,-2H4c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2H0v2h24v-2h-4zM4,6h16v10H4V6z" - android:fillColor="#000000"/> -</vector> diff --git a/SetupWizard/res/drawable/ic_headset.xml b/SetupWizard/res/drawable/ic_headset.xml deleted file mode 100644 index ef805c1..0000000 --- a/SetupWizard/res/drawable/ic_headset.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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.0" - android:viewportHeight="24.0"> - <path - android:pathData="M12,1c-4.97,0 -9,4.03 -9,9v7c0,1.66 1.34,3 3,3h3v-8H5v-2c0,-3.87 3.13,-7 7,-7s7,3.13 7,7v2h-4v8h3c1.66,0 3,-1.34 3,-3v-7c0,-4.97 -4.03,-9 -9,-9z" - android:fillColor="#000000"/> -</vector> diff --git a/SetupWizard/res/drawable/ic_refresh.xml b/SetupWizard/res/drawable/ic_refresh.xml deleted file mode 100644 index 5c39440..0000000 --- a/SetupWizard/res/drawable/ic_refresh.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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="48.0" - android:viewportHeight="48.0" - android:autoMirrored="true"> - <path - android:fillColor="?attr/suwListItemIconColor" - android:pathData="M35.3,12.7C32.41,9.8 28.42,8 24,8 15.16,8 8.02,15.16 8.02,24S15.16,40 24,40c7.45,0 13.69,-5.1 15.46,-12H35.3c-1.65,4.66 -6.07,8 -11.3,8 -6.63,0 -12,-5.37 -12,-12s5.37,-12 12,-12c3.31,0 6.28,1.38 8.45,3.55L26,22h14V8l-4.7,4.7z" /> -</vector> diff --git a/SetupWizard/res/drawable/ic_skip.xml b/SetupWizard/res/drawable/ic_skip.xml deleted file mode 100644 index 8707990..0000000 --- a/SetupWizard/res/drawable/ic_skip.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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:autoMirrored="true"> - <path - android:fillColor="?attr/suwListItemIconColor" - android:pathData="M18.4,10.6C16.55,8.99 14.15,8 11.5,8c-4.65,0 -8.58,3.03 -9.96,7.22L3.9,16c1.05,-3.19 4.05,-5.5 7.6,-5.5 1.95,0 3.73,0.72 5.12,1.88L13,16h9V7l-3.6,3.6z"/> -</vector> diff --git a/SetupWizard/res/drawable/ic_smartphone.xml b/SetupWizard/res/drawable/ic_smartphone.xml deleted file mode 100644 index 050d73c..0000000 --- a/SetupWizard/res/drawable/ic_smartphone.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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.0" - android:viewportHeight="24.0"> - <path - android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z" - android:fillColor="#000000"/> -</vector> diff --git a/SetupWizard/res/drawable/ic_watch.xml b/SetupWizard/res/drawable/ic_watch.xml deleted file mode 100644 index 1346e5b..0000000 --- a/SetupWizard/res/drawable/ic_watch.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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.0" - android:viewportHeight="24.0"> - <path - android:pathData="M20,12c0,-2.54 -1.19,-4.81 -3.04,-6.27L16,0H8l-0.95,5.73C5.19,7.19 4,9.45 4,12s1.19,4.81 3.05,6.27L8,24h8l0.96,-5.73C18.81,16.81 20,14.54 20,12zM6,12c0,-3.31 2.69,-6 6,-6s6,2.69 6,6 -2.69,6 -6,6 -6,-2.69 -6,-6z" - android:fillColor="#000000"/> -</vector> diff --git a/SetupWizard/res/layout/bluetooth_activity.xml b/SetupWizard/res/layout/bluetooth_activity.xml deleted file mode 100644 index 9e32b4d..0000000 --- a/SetupWizard/res/layout/bluetooth_activity.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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. ---> -<com.android.setupwizardlib.GlifRecyclerLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/setup_wizard_layout" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:entries="@xml/items_bluetooth" - android:icon="@drawable/ic_bluetooth" - app:suwDividerInset="@dimen/suw_items_glif_icon_divider_inset" - app:suwHeaderText="@string/bluetooth_title" /> diff --git a/SetupWizard/res/layout/items_greyed_out.xml b/SetupWizard/res/layout/items_greyed_out.xml deleted file mode 100644 index 0c190c5..0000000 --- a/SetupWizard/res/layout/items_greyed_out.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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. ---> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - style="@style/SuwItemContainer" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - - <FrameLayout - android:id="@+id/suw_items_icon_container" - android:layout_width="@dimen/suw_items_icon_container_width" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:gravity="start"> - - <ImageView - android:id="@+id/suw_items_icon" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - tools:ignore="ContentDescription" /> - - </FrameLayout> - - <LinearLayout - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:gravity="center_vertical" - android:orientation="vertical"> - - <TextView - android:id="@+id/suw_items_title" - style="@style/SuwItemTitle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="start" - android:textAlignment="viewStart" - android:textColor="?android:attr/textColorSecondary" - tools:ignore="UnusedAttribute" /> - - <TextView - android:id="@+id/suw_items_summary" - style="@style/SuwItemSummary" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/suw_items_padding_bottom_extra" - android:gravity="start" - android:textAlignment="viewStart" - android:visibility="gone" - tools:ignore="UnusedAttribute" /> - - </LinearLayout> - -</LinearLayout> diff --git a/SetupWizard/res/values/dimens.xml b/SetupWizard/res/values/dimens.xml deleted file mode 100644 index 6ce560c..0000000 --- a/SetupWizard/res/values/dimens.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (c) 2017 Google Inc. - - 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. ---> -<resources> - <dimen name="glif_icon_size">32dp</dimen> -</resources> diff --git a/SetupWizard/res/values/strings.xml b/SetupWizard/res/values/strings.xml deleted file mode 100644 index 8b55140..0000000 --- a/SetupWizard/res/values/strings.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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. ---> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- Title of the application. Usually not shown. Used as a fallback for TalkBack when activity label is not specified (an accessibility service). [CHAR LIMIT=NONE] --> - <string name="app_name">Setup Wizard</string> - - <!-- Title of bluetooth screen, allowing users to a device to pair to. [CHAR_LIMIT=40] --> - <string name="bluetooth_title">Pair a device</string> - - <!-- Message shown while the device is scanning for nearby bluetooth devices. [CHAR LIMIT=NONE] --> - <string name="bluetooth_scanning">Searching for Bluetooth devices\u2026</string> - - <!-- Skip connecting to any bluetooth devices. [CHAR LIMIT=80] --> - <string name="bluetooth_dont_connect">Don\u2019t pair to any bluetooth device</string> - - <!-- Initiate a re-scan for any nearby bluetooth devices. [CHAR LIMIT=80] --> - <string name="bluetooth_rescan">Refresh</string> - - <!-- Message displayed to convey to the user that a specific bluetooth device is being paired to. [CHAR LIMIT=80] --> - <string name="bluetooth_device_connecting">Pairing\u2026</string> - - <!-- Message when attempting to disconnect from a paired bluetooth device. [CHAR LIMIT=80] --> - <string name="bluetooth_device_disconnecting">Unpairing\u2026</string> - - <!-- Message when an in-progress connection to a bluetooth device is being cancelled. [CHAR LIMIT=80] --> - <string name="bluetooth_device_cancelling">Cancelling\u2026</string> - - <!-- Message displayed to convey to the user that a specific bluetooth device has been paired to. [CHAR LIMIT=80] --> - <string name="bluetooth_device_connected">Connected</string> - - <!-- Description of the bluetooth screen, telling the user to select a device to pair to it via bluetooth. [CHAR LIMIT=NONE] --> - <string name="bluetooth_description">Select a device from the list to pair to it via bluetooth.</string> -</resources> diff --git a/SetupWizard/res/xml/items_bluetooth.xml b/SetupWizard/res/xml/items_bluetooth.xml deleted file mode 100644 index ed538c8..0000000 --- a/SetupWizard/res/xml/items_bluetooth.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (c) 2017 Google Inc. - - 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. ---> -<ItemGroup xmlns:android="http://schemas.android.com/apk/res/android"> - - <Item - android:id="@+id/bluetooth_description" - android:enabled="false" - android:layout="@layout/suw_items_description" /> - - <Item - android:id="@+id/bluetooth_dont_connect" - android:icon="@drawable/ic_skip" - android:title="@string/bluetooth_dont_connect" /> - - <Item - android:id="@+id/bluetooth_scanning" - android:icon="@drawable/ic_bluetooth_scanning" - android:layout="@layout/items_greyed_out" - android:title="@string/bluetooth_scanning" /> - - <Item - android:id="@+id/bluetooth_rescan" - android:icon="@drawable/ic_refresh" - android:title="@string/bluetooth_rescan" - android:visible="false" /> - - <com.android.car.setupwizard.bluetooth.BluetoothDeviceHierarchy - android:id="@+id/bluetooth_device_list" /> - -</ItemGroup> diff --git a/SetupWizard/res/xml/wizard_script_setup_as_new_flow.xml b/SetupWizard/res/xml/wizard_script_setup_as_new_flow.xml deleted file mode 100644 index c55bebc..0000000 --- a/SetupWizard/res/xml/wizard_script_setup_as_new_flow.xml +++ /dev/null @@ -1,191 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (C) 2017 Google Inc. - - 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. ---> - -<!-- - The wizard:uris recorded here have the inconvenience of being generated by hand, but they allow - for the full spread of launch flags (we need FLAG_ACTIVITY_NEW_TASK [0x10000000]), where the - <intent> tag processed by Intent.parseIntent() does not. - - adb shell am to-intent-uri -a com.android.setupwizard.WELCOME -f 0x10000000 \-\-ez firstRun true ---> -<WizardScript xmlns:wizard="http://schemas.android.com/apk/res/com.android.car.setupwizard" - wizard:firstAction="device_owner_warning"> - - <!-- Security warning [RECOMMENDED] --> - <WizardAction id="device_owner_warning" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.DEVICE_OWNER_WARNING;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="check_frp" /> - <result wizard:action="factory_reset" /> - </WizardAction> - - <WizardAction id="factory_reset" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.FACTORY_RESET;end"> - <!-- Factory reset should cause a reboot, but if it returns unexpectedly, - continue on to check_frp --> - <result wizard:action="check_frp" /> - </WizardAction> - - - <!-- Wait to check factory reset protection status [RECOMMENDED] --> - <WizardAction id="check_frp" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.CHECK_FRP;end"> - <result wizard:action="bluetooth_settings" /> - </WizardAction> - - <!-- Bluetooth selection [REQUIRED, CUSTOMIZABLE] --> - <WizardAction id="bluetooth_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.BLUETOOTH_SETTINGS;end"> - <result wizard:action="network_settings" /> - </WizardAction> - - - <!-- Users must be given the opportunity to set up an internet connection, using the given - screens or a custom flow. --> - <!-- Network selection [REQUIRED, CUSTOMIZABLE] --> - <WizardAction id="network_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.NETWORK_SETTINGS;end"> - <result wizard:name="see_all_wifi" - wizard:resultCode="101" - wizard:action="wifi_settings" /> - <result wizard:name="use_cellular" - wizard:resultCode="102" - wizard:action="activate_mobile_data" /> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_network_flow" /> - <result wizard:action="captive_portal" /> - </WizardAction> - - <!-- Mobile data activation --> - <WizardAction id="activate_mobile_data" - wizard:uri="intent:#Intent;action=com.android.setupwizard.ACTIVATE_MOBILE_DATA;end"> - <result wizard:action="captive_portal" /> - </WizardAction> - - <!-- Wi-Fi setup --> - <WizardAction id="wifi_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.WIFI_SETTINGS;end"> - <result wizard:action="captive_portal" /> - </WizardAction> - - - <!-- Resolve captive portal access, and wait for check-in [REQUIRED] --> - <WizardAction id="captive_portal" - wizard:uri="intent:#Intent;action=com.android.setupwizard.CAPTIVE_PORTAL;end"> - <result wizard:action="gms_checkin" /> - </WizardAction> - <WizardAction id="gms_checkin" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_CHECKIN;end"> - <result wizard:action="ota_update" /> - </WizardAction> - - - <!-- Update system packages [REQUIRED] --> - <WizardAction id="ota_update" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.OTA_UPDATE;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="early_update" /> - <result wizard:action="system_update" /> - </WizardAction> - - <WizardAction id="system_update" - wizard:uri="intent:#Intent;action=android.settings.SYSTEM_UPDATE_SETTINGS;end"> - <!-- System update should cause a reboot, but if it returns unexpectedly, continue on to - early update --> - <result wizard:action="early_update" /> - </WizardAction> - - - <!-- Update other important packages [REQUIRED] --> - <WizardAction id="early_update" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.EARLY_UPDATE;end"> - <result wizard:action="zero_touch" /> - </WizardAction> - - - <!-- Zero touch provisioning (for enterprise) [RECOMMENDED] --> - <WizardAction id="zero_touch" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_zero_touch_flow" > - <result wizard:name="dpm_user_complete" - wizard:resultCode="111" /> - <result wizard:action="load_account_intent" /> - </WizardAction> - - - <!-- Add an account [REQUIRED] --> - <WizardAction id="load_account_intent" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.LOAD_ADD_ACCOUNT_INTENT;B.showTapAndGo=false;end"> - <result wizard:action="account_setup" /> - </WizardAction> - - <WizardAction id="account_setup" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_SETUP;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_account_flow" /> - <!-- Alternate flow if managed provisioning already set the user up (for enterprise) [RECOMMENDED] --> - <result wizard:name="dpm_user_complete" - wizard:resultCode="111" /> - <result wizard:action="gms_account_checkin" /> - </WizardAction> - - - <!-- Checkin with Gservices using account. If it fails, VPA will not be available. [REQUIRED] --> - <WizardAction id="gms_account_checkin" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_ACCOUNT_CHECKIN;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="mfm_check" /> - <result wizard:action="start_vpa" /> - </WizardAction> - - - <!-- Initiate VPA (required for Play Auto-Installs) [RECOMMENDED] --> - <WizardAction id="start_vpa" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.START_VPA;end"> - <result wizard:action="mfm_check" /> - </WizardAction> - - - <!-- Branch to script for setting up with or without an account [REQUIRED] --> - <WizardAction id="mfm_check" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_CHECK;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_account_flow" /> - <result wizard:action="account_flow" /> - </WizardAction> - - - <!-- Set up with an account [REQUIRED] --> - <WizardAction id="account_flow" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_new_device_account_flow" /> - - - <!-- Set up without an account [REQUIRED] --> - <WizardAction id="no_account_flow" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_no_account_flow" /> - - - <!-- Set up without a network connection [RECOMMENDED] --> - <WizardAction id="no_network_flow" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_no_network_flow" /> - -</WizardScript> diff --git a/SetupWizard/res/xml/wizard_script_user.xml b/SetupWizard/res/xml/wizard_script_user.xml deleted file mode 100644 index 10c91a7..0000000 --- a/SetupWizard/res/xml/wizard_script_user.xml +++ /dev/null @@ -1,163 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (c) 2014 Google Inc. - - 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. ---> - -<!-- - The wizard:uris recorded here have the inconvenience of being generated by hand, but they allow - for the full spread of launch flags (we need FLAG_ACTIVITY_NEW_TASK [0x10000000]), where the - <intent> tag processed by Intent.parseIntent() does not. - - adb shell am to-intent-uri -a com.android.setupwizard.WELCOME -f 0x10000000 \-\-ez firstRun true ---> -<WizardScript xmlns:wizard="http://schemas.android.com/apk/res/com.android.car.setupwizard" - wizard:firstAction="oem_pre_setup"> - - <!-- Preliminary setup for OEMs [CUSTOMIZABLE] --> - <WizardAction id="oem_pre_setup" - wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_PRE_SETUP;end"> - <result wizard:action="secondary_user_warning" /> - </WizardAction> - - - <!-- Secondary user warning [RECOMMENDED, CUSTOMIZABLE] --> - <WizardAction id="secondary_user_warning" - wizard:uri="intent:#Intent;action=com.android.setupwizard.USER_WARNING;end"> - <result wizard:name="dpm_user_complete" - wizard:resultCode="111" - wizard:action="check_user_unlock_dpm_user_complete" /> - <result wizard:action="check_user_unlock" /> - </WizardAction> - - <WizardAction id="check_user_unlock_dpm_user_complete" - wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"> - <result wizard:action="oem_post_setup" /> - </WizardAction> - - <WizardAction id="check_user_unlock" - wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"> - <result wizard:action="bluetooth_settings" /> - </WizardAction> - - <!-- Bluetooth selection [REQUIRED, CUSTOMIZABLE] --> - <WizardAction id="bluetooth_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.BLUETOOTH_SETTINGS;end"> - <result wizard:action="network_settings" /> - </WizardAction> - - <!-- Network selection [REQUIRED, CUSTOMIZABLE] --> - <WizardAction id="network_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.NETWORK_SETTINGS;end"> - <result wizard:name="see_all_wifi" - wizard:resultCode="101" - wizard:action="wifi_settings" /> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_account_flow" /> - <result wizard:action="captive_portal" /> - </WizardAction> - - - <!-- Wi-Fi setup [REQUIRED, CUSTOMIZABLE] --> - <WizardAction id="wifi_settings" - wizard:uri="intent:#Intent;action=com.android.setupwizard.WIFI_SETTINGS;end"> - <result wizard:action="captive_portal" /> - </WizardAction> - - - <!-- Resolve captive portal access, and wait for check-in [REQUIRED] --> - <WizardAction id="captive_portal" - wizard:uri="intent:#Intent;action=com.android.setupwizard.CAPTIVE_PORTAL;end"> - <result wizard:action="gms_checkin" /> - </WizardAction> - - <WizardAction id="gms_checkin" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_CHECKIN;end"> - <result wizard:action="load_account_intent" /> - </WizardAction> - - - <!-- Add an account [REQUIRED] --> - <WizardAction id="load_account_intent" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.LOAD_ADD_ACCOUNT_INTENT;end"> - <result wizard:action="account_setup" /> - </WizardAction> - - <WizardAction id="account_setup" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_SETUP;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_account_flow" /> - <!-- Alternate flow if managed provisioning already set the user up (for enterprise) [RECOMMENDED] --> - <result wizard:name="dpm_user_complete" - wizard:resultCode="111" - wizard:action="oem_post_setup" /> - <result wizard:action="gms_account_checkin" /> - </WizardAction> - - - <!-- Checkin with Gservices using account. If it fails, VPA will not be available. [REQUIRED] --> - <WizardAction id="gms_account_checkin" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_ACCOUNT_CHECKIN;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="mfm_check" /> - <result wizard:action="start_vpa" /> - </WizardAction> - - - <!-- Initiate VPA (required for Play Auto-Installs) [RECOMMENDED] --> - <WizardAction id="start_vpa" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.START_VPA;end"> - <result wizard:action="mfm_check" /> - </WizardAction> - - - <!-- Branch to script for setting up with or without an account [REQUIRED] --> - <WizardAction id="mfm_check" - wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_CHECK;end"> - <result wizard:name="skip" - wizard:resultCode="1" - wizard:action="no_account_flow" /> - <result wizard:action="account_flow" /> - </WizardAction> - - - <!-- Set up with an account [REQUIRED] --> - <WizardAction id="account_flow" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_user_account_flow"> - <result wizard:action="oem_post_setup" /> - </WizardAction> - - - <!-- Set up without an account [REQUIRED] --> - <WizardAction id="no_account_flow" - wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_user_no_account_flow"> - <result wizard:action="oem_post_setup" /> - </WizardAction> - - - <!-- OEM completion [CUSTOMIZABLE] --> - <WizardAction id="oem_post_setup" - wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_POST_SETUP;end"> - <result wizard:action="exit" /> - </WizardAction> - - - <!-- Leave Setup Wizard [REQUIRED] --> - <WizardAction id="exit" - wizard:uri="intent:#Intent;action=com.android.setupwizard.EXIT;end" /> - -</WizardScript> diff --git a/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothActivity.java b/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothActivity.java deleted file mode 100644 index 734e1ee..0000000 --- a/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothActivity.java +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Copyright (C) 2017 Google Inc. - * - * 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.car.setupwizard.bluetooth; - -import static com.android.setupwizardlib.util.ResultCodes.RESULT_SKIP; - -import android.app.Activity; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Bundle; -import android.os.Handler; -import android.util.Log; -import android.view.View; - -import com.android.car.setupwizard.R; -import com.android.car.setupwizard.bluetooth.BluetoothDeviceHierarchy.BluetoothItem; - -import com.android.setupwizardlib.GlifRecyclerLayout; -import com.android.setupwizardlib.items.IItem; -import com.android.setupwizardlib.items.Item; -import com.android.setupwizardlib.items.ItemGroup; -import com.android.setupwizardlib.items.RecyclerItemAdapter; -import com.android.setupwizardlib.util.ResultCodes; -import com.android.setupwizardlib.util.WizardManagerHelper; - -/** - * An Activity that presents the option for the user to pair the current device to a nearby - * bluetooth device. This screen will list the devices in the order that they are discovered - * as well as an option to not pair at all. - */ -public class BluetoothActivity extends Activity - implements RecyclerItemAdapter.OnItemSelectedListener { - private static final String TAG = "BluetoothActivity"; - - /** - * This value is copied from {@code com.google.android.setupwizard.BaseActivity}. Wizard - * Manager does not actually return an activity result, but if we invoke Wizard Manager without - * requesting a result, the framework will choose not to issue a call to onActivityResult with - * RESULT_CANCELED when navigating backward. - */ - private static final int REQUEST_CODE_NEXT = 10000; - - private static final int BLUETOOTH_SCAN_RETRY_DELAY = 1000; - private static final int MAX_BLUETOOTH_SCAN_RETRIES = 3; - - private final Handler mHandler = new Handler(); - private int mScanRetryCount; - - private BluetoothScanReceiver mScanReceiver; - private BluetoothAdapterReceiver mAdapterReceiver; - private BluetoothAdapter mAdapter; - private BluetoothDeviceHierarchy mBluetoothDeviceHierarchy; - - private GlifRecyclerLayout mLayout; - private Item mScanningIndicator; - private Item mRescanIndicator; - - /** - * The current {@link BluetoothDevice} that is being paired to. - */ - private BluetoothDevice mCurrentBondingDevice; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mAdapter = BluetoothAdapter.getDefaultAdapter(); - - if (mAdapter == null) { - Log.w(TAG, "No bluetooth adapter found on the device. Skipping to next action."); - nextAction(RESULT_SKIP); - return; - } - - setContentView(R.layout.bluetooth_activity); - - mLayout = (GlifRecyclerLayout) findViewById(R.id.setup_wizard_layout); - - RecyclerItemAdapter adapter = (RecyclerItemAdapter) mLayout.getAdapter(); - adapter.setOnItemSelectedListener(this); - - ItemGroup hierarchy = (ItemGroup) adapter.getRootItemHierarchy(); - mBluetoothDeviceHierarchy = - (BluetoothDeviceHierarchy) hierarchy.findItemById(R.id.bluetooth_device_list); - mScanningIndicator = (Item) hierarchy.findItemById(R.id.bluetooth_scanning); - mRescanIndicator = (Item) hierarchy.findItemById(R.id.bluetooth_rescan); - - Item descriptionItem = (Item) hierarchy.findItemById(R.id.bluetooth_description); - descriptionItem.setTitle(getText(R.string.bluetooth_description)); - - // Assume that a search will be started, so display the progress bar to let the user - // know that something is going on. - mLayout.setProgressBarShown(true); - - if (mAdapter.isEnabled()) { - setUpAndStartScan(); - } else { - mAdapterReceiver = new BluetoothAdapterReceiver(); - maybeRegisterAdapterReceiver(); - mAdapter.enable(); - } - } - - @Override - protected void onStart() { - super.onStart(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "onStart()"); - } - - if (mAdapter == null) { - Log.w(TAG, "No bluetooth adapter found on the device. Skipping to next action."); - nextAction(RESULT_SKIP); - return; - } - - maybeRegisterAdapterReceiver(); - registerScanReceiver(); - } - - @Override - protected void onStop() { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "onStop()"); - } - - stopScanning(); - - if (mScanReceiver != null) { - unregisterReceiver(mScanReceiver); - } - - if (mAdapterReceiver != null) { - unregisterReceiver(mAdapterReceiver); - } - - super.onStop(); - } - - /** - * Sets up an Intent filter to listen for bluetooth state changes and initiates a scan for - * nearby bluetooth devices. - */ - private void setUpAndStartScan() { - mBluetoothDeviceHierarchy.clearAllDevices(); - registerScanReceiver(); - startScanning(); - } - - /** - * Registers a receiver to be listen on changes to the {@link BluetoothAdapter}. This method - * will only register the receiver if {@link #mAdapterReceiver} is not {@code null}. - */ - private void maybeRegisterAdapterReceiver() { - if (mAdapterReceiver == null) { - return; - } - - IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); - registerReceiver(mAdapterReceiver, filter); - } - - /** - * Registers an Intent filter to listen for the results of a bluetooth discovery scan as well as - * changes to individual bluetooth devices. - */ - private void registerScanReceiver() { - if (mScanReceiver == null) { - mScanReceiver = new BluetoothScanReceiver(); - } - - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); - intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); - intentFilter.addAction(BluetoothDevice.ACTION_FOUND); - intentFilter.addAction(BluetoothDevice.ACTION_NAME_CHANGED); - intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); - registerReceiver(mScanReceiver, intentFilter); - } - - /** - * Start a scan for nearby bluetooth devices. If the call to - * {@link BluetoothAdapter#startDiscovery()} fails, then this method will retry the call after - * an exponential backoff period based on {@link #BLUETOOTH_SCAN_RETRY_DELAY}. - * - * <p>If there is already a bluetooth scan in progress when this function is called, then this - * function will do nothing. - */ - private void startScanning() { - if (mAdapter.isDiscovering()) { - return; - } - - boolean success = mAdapter.startDiscovery(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "startDiscovery() success: " + success); - } - - // If a scan fails, attempt to try again up to MAX_BLUETOOTH_SCAN_RETRIES tries. - if (success) { - mScanRetryCount = 0; - } else if (mScanRetryCount >= MAX_BLUETOOTH_SCAN_RETRIES) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Reached max retries to initiate a bluetooth scan. Moving onto next " - + "action"); - } - - nextAction(RESULT_SKIP); - } else { - mHandler.postDelayed(this::startScanning, - BLUETOOTH_SCAN_RETRY_DELAY * ++mScanRetryCount); - } - } - - /** - * Stops any scan in that is currently in progress for nearby bluetooth devices. - */ - private void stopScanning() { - if (mAdapter != null && mAdapter.isDiscovering()) { - mAdapter.cancelDiscovery(); - } - - mScanRetryCount = 0; - } - - @Override - public void onItemSelected(IItem item) { - if (item instanceof BluetoothItem) { - pairOrUnpairDevice((BluetoothItem) item); - return; - } - - if (!(item instanceof Item)) { - return; - } - - switch (((Item) item).getId()) { - case R.id.bluetooth_dont_connect: - nextAction(RESULT_SKIP); - break; - - case R.id.bluetooth_rescan: - stopScanning(); - startScanning(); - break; - - default: - Log.w(TAG, "Unknown item clicked: " + item); - } - } - - /** - * Starts a pairing or unpairing session with the given device based on its current bonded - * state. For example, if the current item is already paired, it is unpaired and vice versa. - */ - private void pairOrUnpairDevice(BluetoothItem item) { - // Pairing is unreliable while scanning, so cancel discovery. - stopScanning(); - - BluetoothDevice device = item.getBluetoothDevice(); - - boolean success; - switch (device.getBondState()) { - case BluetoothDevice.BOND_BONDED: - mCurrentBondingDevice = null; - success = device.removeBond(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "removeBond() to device (" + device + ") successful: " + success); - } - - // Immediately update the UI so that the user has feedback on their actions. - item.updateConnectionState(this /* context */, - BluetoothItem.CONNECTION_STATE_DISCONNECTING); - break; - - case BluetoothDevice.BOND_BONDING: - mCurrentBondingDevice = null; - success = device.cancelBondProcess(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "cancelBondProcess() to device (" + device + ") successful: " - + success); - } - - // Immediately update the UI so that the user has feedback on their actions. - item.updateConnectionState(this /* context */, - BluetoothItem.CONNECTION_STATE_CANCELLING); - break; - - case BluetoothDevice.BOND_NONE: - mCurrentBondingDevice = device; - success = device.createBond(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "createBond() to device (" + device + ") successful: " + success); - } - - // Immediately update the UI so that the user has feedback on their actions. - item.updateConnectionState(this /* context */, - BluetoothItem.CONNECTION_STATE_CONNECTING); - - default: - Log.w(TAG, "Encountered unknown bond state: " + device.getBondState()); - } - } - - private void nextAction(int resultCode) { - setResult(resultCode); - Intent nextIntent = WizardManagerHelper.getNextIntent(getIntent(), resultCode); - startActivityForResult(nextIntent, REQUEST_CODE_NEXT); - } - - /** - * A {@link BroadReceiver} that listens for when the bluetooth adapter has been turned on. - */ - private class BluetoothAdapterReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - - if (action != null && action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { - int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, - BluetoothAdapter.ERROR); - - if (state == BluetoothAdapter.STATE_ON) { - setUpAndStartScan(); - } - } - } - } - - /** - * Handles bluetooth scan responses and other indicators. - **/ - private class BluetoothScanReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - - if (action == null) { - return; - } - - BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Received device: " + device); - } - - switch (action) { - case BluetoothDevice.ACTION_FOUND: - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Bluetooth device found"); - } - - mLayout.setProgressBarShown(false); - mScanningIndicator.setVisible(false); - mRescanIndicator.setVisible(true); - mBluetoothDeviceHierarchy.addOrUpdateDevice(context, device); - break; - - case BluetoothAdapter.ACTION_DISCOVERY_STARTED: - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Bluetooth discovery started"); - } - - mLayout.setProgressBarShown(true); - mScanningIndicator.setVisible(true); - mRescanIndicator.setVisible(false); - mBluetoothDeviceHierarchy.clearAllDevices(); - break; - - case BluetoothAdapter.ACTION_DISCOVERY_FINISHED: - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Bluetooth discovery finished"); - } - break; - - case BluetoothDevice.ACTION_BOND_STATE_CHANGED: - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Bluetooth bond state changed"); - } - - mBluetoothDeviceHierarchy.addOrUpdateDevice(context, device); - - // When a bluetooth device has been paired, then move onto the next action so - // the user is not stuck on this screen for too long. - if (device.equals(mCurrentBondingDevice) - && device.getBondState() == BluetoothDevice.BOND_BONDED) { - nextAction(RESULT_OK); - } - break; - - case BluetoothDevice.ACTION_NAME_CHANGED: - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Bluetooth device name chaged"); - } - mBluetoothDeviceHierarchy.addOrUpdateDevice(context, device); - break; - - default: - Log.w(TAG, "Unknown action received: " + action); - } - } - } -} diff --git a/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothDeviceHierarchy.java b/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothDeviceHierarchy.java deleted file mode 100644 index 02f76bf..0000000 --- a/SetupWizard/src/com/android/car/setupwizard/bluetooth/BluetoothDeviceHierarchy.java +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright (C) 2017 Google Inc. - * - * 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.car.setupwizard.bluetooth; - -import android.bluetooth.BluetoothClass.Device; -import android.bluetooth.BluetoothDevice; -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.support.annotation.DrawableRes; -import android.support.annotation.IntDef; -import android.support.annotation.Nullable; -import android.support.annotation.VisibleForTesting; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; - -import com.android.car.setupwizard.R; - -import com.android.setupwizardlib.items.AbstractItemHierarchy; -import com.android.setupwizardlib.items.IItem; -import com.android.setupwizardlib.items.Item; -import com.android.setupwizardlib.items.ItemHierarchy; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -/** - * An item hierarchy that represents a list of Bluetooth devices. - */ -public class BluetoothDeviceHierarchy extends AbstractItemHierarchy { - private static final String TAG = "BtDeviceHierarchy"; - - /** - * A set of all discovered bluetooth devices. The key of this map is the device's MAC address. - */ - private final HashMap<String, BluetoothItem> mItems = new HashMap<>(); - - /** - * A list of all discovered bluetooth devices' MAC addresses. This list is sorted in the order - * that the devices were discovered in. - */ - private final List<String> mAddresses = new ArrayList<>(); - - public BluetoothDeviceHierarchy(Context context, AttributeSet attrs) { - super(context, attrs); - } - - /** - * Clears the current list of all bluetooth devices. - */ - public void clearAllDevices() { - mItems.clear(); - mAddresses.clear(); - notifyChanged(); - } - - /** - * Adds the given {@link BluetoothDevice} to be displayed. If the device has already been - * added before, its information is updated based on the given {@code BluetoothDevice}. - */ - public void addOrUpdateDevice(Context context, @Nullable BluetoothDevice device) { - if (device == null) { - return; - } - - String address = device.getAddress(); - BluetoothItem item; - - if (mItems.containsKey(address)) { - item = mItems.get(address); - } else { - // First time encountering this address, so keep track of it. - mAddresses.add(address); - - int id = View.generateViewId(); - if (id >= 0x00ffffff) { - // View.generateViewId returns an incrementing number from 1 to 0x00ffffff. - // Since we are generating view IDs without recycling, it is theoretically possible - // for the ID space to run out if the user encounters enough bluetooth devices. - // Just log if this happens. - Log.e(TAG, "Ran out of IDs to use for bluetooth item IDs"); - } - item = new BluetoothItem(id); - } - - item.update(context, device); - mItems.put(address, item); - - notifyChanged(); - } - - @Override - public ItemHierarchy findItemById(int id) { - if (id == getId()) { - return this; - } - - // Child items have generated hash code IDs. Don't try to find those. - return null; - } - - @Override - public int getCount() { - return mItems.size(); - } - - @Override - public IItem getItemAt(int position) { - return mItems.get(mAddresses.get(position)); - } - - /** - * A {@link Item} that is linked to a particular {@link BluetoothDevice} and is responsible - * for binding this information to a View to be displayed. - */ - public static class BluetoothItem extends Item { - private BluetoothDevice mDevice; - - /** - * Whether or not the icon for this particular BluetoothDevice has been updated to reflect - * the type of Bluetooth device this is. - */ - private boolean mIconUpdated; - - public static final int CONNECTION_STATE_DISCONNECTING = 0; - public static final int CONNECTION_STATE_CONNECTING = 1; - public static final int CONNECTION_STATE_CANCELLING = 2; - - @IntDef({ - CONNECTION_STATE_DISCONNECTING, - CONNECTION_STATE_CONNECTING, - CONNECTION_STATE_CANCELLING }) - public @interface ConnectionState {} - - public BluetoothItem(int id) { - setId(id); - } - - /** - * Immediately updates the connection state of the device that is represented by this - * {@link BluetoothItem}. This state is not necessarily tied to the bonded state that - * will be returned by the {@link BluetoothDevice} associated with this item. - */ - public void updateConnectionState(Context context, @ConnectionState int state) { - if (mDevice == null) { - return; - } - - switch (state) { - case CONNECTION_STATE_DISCONNECTING: - setSummary(context.getString(R.string.bluetooth_device_disconnecting)); - break; - - case CONNECTION_STATE_CONNECTING: - setSummary(context.getString(R.string.bluetooth_device_connecting)); - break; - - case CONNECTION_STATE_CANCELLING: - setSummary(context.getString(R.string.bluetooth_device_cancelling)); - break; - - default: - // Do nothing. - } - } - - /** - * Associate a {@link BluetoothDevice} with this {@link BluetoothItem}. - */ - public void update(Context context, BluetoothDevice device) { - mIconUpdated = false; - mDevice = device; - - String name = mDevice.getName(); - setTitle(TextUtils.isEmpty(name) ? mDevice.getAddress() : name); - - switch (mDevice.getBondState()) { - case BluetoothDevice.BOND_BONDED: - setSummary(context.getString(R.string.bluetooth_device_connected)); - break; - - case BluetoothDevice.BOND_BONDING: - setSummary(context.getString(R.string.bluetooth_device_connecting)); - break; - - default: - setSummary(null); - } - } - - /** - * Returns the {@link BluetoothDevice} set via {@link #update(Context, BluetoothDevice)}. - */ - public BluetoothDevice getBluetoothDevice() { - return mDevice; - } - - @Override - public void onBindView(View view) { - if (mIconUpdated && getIcon() != null) { - super.onBindView(view); - return; - } - - Context context = view.getContext(); - TypedArray a = context.obtainStyledAttributes( - new int[] { R.attr.suwListItemIconColor }); - - try { - ColorStateList bluetoothIconColor = a.getColorStateList(0); - Drawable bluetoothIcon = getDeviceIcon(context).mutate(); - bluetoothIcon.setTintList(bluetoothIconColor); - setIcon(bluetoothIcon); - } finally { - a.recycle(); - } - - mIconUpdated = true; - - super.onBindView(view); - } - - /** - * Returns an appropriate {@link Drawable} to use as the icon for the bluetooth device - * associated with this {@link BluetoothItem}. - */ - private Drawable getDeviceIcon(Context context) { - if (mDevice == null) { - return context.getDrawable(R.drawable.ic_bluetooth_item); - } - - @DrawableRes int deviceIcon; - switch (mDevice.getBluetoothClass().getDeviceClass()) { - case Device.AUDIO_VIDEO_HEADPHONES: - case Device.AUDIO_VIDEO_WEARABLE_HEADSET: - deviceIcon = R.drawable.ic_headset; - break; - - case Device.COMPUTER_DESKTOP: - case Device.COMPUTER_LAPTOP: - deviceIcon = R.drawable.ic_computer; - break; - - case Device.PHONE_SMART: - deviceIcon = R.drawable.ic_smartphone; - break; - - case Device.WEARABLE_WRIST_WATCH: - deviceIcon = R.drawable.ic_watch; - break; - - default: - deviceIcon = R.drawable.ic_bluetooth_item; - } - - return context.getDrawable(deviceIcon); - } - } -} |