summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Cerqueira <cyanogenmod@cerqueira.org>2013-09-17 01:06:19 +0100
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2013-09-17 01:06:19 +0100
commit06a2014e0b4e12685f800be243c7d0acf38a603c (patch)
tree84b2d65e60200007656a061d651f17adb7d94fc0
parent1b246681b837014d4f8ab569b118737d33bb207f (diff)
parent583fc0990bcf055ceccfb31ad8d1f11715982bb8 (diff)
downloadandroid_development-06a2014e0b4e12685f800be243c7d0acf38a603c.tar.gz
android_development-06a2014e0b4e12685f800be243c7d0acf38a603c.tar.bz2
android_development-06a2014e0b4e12685f800be243c7d0acf38a603c.zip
Merge tag 'android-4.3_r3' into cm-10.2
Android 4.3 release 3.0 Change-Id: If83392c99908bf381d11dbecb006473ced9bb83f
-rw-r--r--build/sdk-darwin-x86.atree13
-rw-r--r--build/sdk-linux-x86.atree13
-rw-r--r--build/sdk-windows-x86.atree17
-rw-r--r--build/sdk.atree125
-rw-r--r--build/windows_sdk_whitelist.mk1
-rw-r--r--samples/AppLimits/Android.mk17
-rw-r--r--samples/AppLimits/AndroidManifest.xml42
-rw-r--r--samples/AppLimits/res/values/strings.xml48
-rw-r--r--samples/AppLimits/res/xml/custom_prefs.xml33
-rw-r--r--samples/AppLimits/src/com/example/android/applimits/CustomRestrictionsActivity.java159
-rw-r--r--samples/AppLimits/src/com/example/android/applimits/GetRestrictionsReceiver.java139
-rw-r--r--samples/BluetoothLeGatt/Android.mk16
-rw-r--r--samples/BluetoothLeGatt/AndroidManifest.xml45
-rwxr-xr-xsamples/BluetoothLeGatt/res/drawable-hdpi/ic_launcher.pngbin5170 -> 0 bytes
-rwxr-xr-xsamples/BluetoothLeGatt/res/drawable-mdpi/ic_launcher.pngbin3025 -> 0 bytes
-rwxr-xr-xsamples/BluetoothLeGatt/res/drawable-xhdpi/ic_launcher.pngbin7227 -> 0 bytes
-rwxr-xr-xsamples/BluetoothLeGatt/res/drawable-xxhdpi/ic_launcher.pngbin12800 -> 0 bytes
-rw-r--r--samples/BluetoothLeGatt/res/layout/actionbar_indeterminate_progress.xml23
-rw-r--r--samples/BluetoothLeGatt/res/layout/gatt_services_characteristics.xml71
-rw-r--r--samples/BluetoothLeGatt/res/layout/listitem_device.xml28
-rw-r--r--samples/BluetoothLeGatt/res/menu/gatt_services.xml29
-rw-r--r--samples/BluetoothLeGatt/res/menu/main.xml29
-rw-r--r--samples/BluetoothLeGatt/res/values/strings.xml37
-rw-r--r--samples/BluetoothLeGatt/src/com/example/bluetooth/le/BluetoothLeService.java319
-rw-r--r--samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceControlActivity.java309
-rw-r--r--samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceScanActivity.java269
-rw-r--r--samples/BluetoothLeGatt/src/com/example/bluetooth/le/SampleGattAttributes.java42
-rw-r--r--scripts/app_engine_server/memcache_zipserve.py5
-rw-r--r--scripts/app_engine_server/redirects.yaml5
-rw-r--r--sdk/build_tools_source.properties2
-rw-r--r--sdk/plat_tools_source.properties2
31 files changed, 131 insertions, 1707 deletions
diff --git a/build/sdk-darwin-x86.atree b/build/sdk-darwin-x86.atree
index 118ed1c50..53bbc1f3c 100644
--- a/build/sdk-darwin-x86.atree
+++ b/build/sdk-darwin-x86.atree
@@ -15,6 +15,19 @@
#
##############################################################################
+# Build Tools Component
+##############################################################################
+# Note that the build-tools sub-folder uses the platform-name as a placeholder
+# at build-time. Packaging will later change that to the actual build-tools
+# revision as specified in the source.properties.
+
+
+lib/libLLVM.dylib strip build-tools/${PLATFORM_NAME}/libLLVM.dylib
+lib/libbcc.dylib strip build-tools/${PLATFORM_NAME}/libbcc.dylib
+lib/libbcinfo.dylib strip build-tools/${PLATFORM_NAME}/libbcinfo.dylib
+lib/libclang.dylib strip build-tools/${PLATFORM_NAME}/libclang.dylib
+
+##############################################################################
# Docs Component
##############################################################################
diff --git a/build/sdk-linux-x86.atree b/build/sdk-linux-x86.atree
index e21785e4b..86f775493 100644
--- a/build/sdk-linux-x86.atree
+++ b/build/sdk-linux-x86.atree
@@ -14,4 +14,17 @@
# limitations under the License.
#
+##############################################################################
+# Build Tools Component
+##############################################################################
+# Note that the build-tools sub-folder uses the platform-name as a placeholder
+# at build-time. Packaging will later change that to the actual build-tools
+# revision as specified in the source.properties.
+
+
+lib/libLLVM.so strip build-tools/${PLATFORM_NAME}/libLLVM.so
+lib/libbcc.so strip build-tools/${PLATFORM_NAME}/libbcc.so
+lib/libbcinfo.so strip build-tools/${PLATFORM_NAME}/libbcinfo.so
+lib/libclang.so strip build-tools/${PLATFORM_NAME}/libclang.so
+
diff --git a/build/sdk-windows-x86.atree b/build/sdk-windows-x86.atree
index c9ec5f97a..44b7fcba3 100644
--- a/build/sdk-windows-x86.atree
+++ b/build/sdk-windows-x86.atree
@@ -41,6 +41,9 @@ bin/AdbWinApi.dll platform-tools/AdbWinApi.dll
##############################################################################
# Build Tools Component
##############################################################################
+# Note that the build-tools sub-folder uses the platform-name as a placeholder
+# at build-time. Packaging will later change that to the actual build-tools
+# revision as specified in the source.properties.
rm build-tools/${PLATFORM_NAME}/aapt
bin/aapt.exe strip build-tools/${PLATFORM_NAME}/aapt.exe
@@ -56,6 +59,20 @@ bin/dexdump.exe strip build-tools/${PLATFORM_NAME}/dexdu
rm build-tools/${PLATFORM_NAME}/llvm-rs-cc
bin/llvm-rs-cc.exe strip build-tools/${PLATFORM_NAME}/llvm-rs-cc.exe
+rm build-tools/${PLATFORM_NAME}/libLLVM.so
+lib/libLLVM.dll strip build-tools/${PLATFORM_NAME}/libLLVM.dll
+
+rm build-tools/${PLATFORM_NAME}/libclang.so
+lib/libclang.dll strip build-tools/${PLATFORM_NAME}/libclang.dll
+
+#bcc not yet compiled on windows
+
+rm build-tools/${PLATFORM_NAME}/libbcc.so
+#lib/libbcc.dll strip build-tools/${PLATFORM_NAME}/libbcc.dll
+
+rm build-tools/${PLATFORM_NAME}/libbcinfo.so
+#lib/libbcinfo.dll strip build-tools/${PLATFORM_NAME}/libbcinfo.dll
+
##############################################################################
diff --git a/build/sdk.atree b/build/sdk.atree
index 59681dfba..dc0e7060e 100644
--- a/build/sdk.atree
+++ b/build/sdk.atree
@@ -48,6 +48,17 @@ bin/fastboot strip platform-tools/fastboot
# API database for tools such as lint
development/sdk/api-versions.xml platform-tools/api/api-versions.xml
+# systrace
+external/chromium-trace/systrace.py platform-tools/systrace/systrace.py
+external/chromium-trace/systrace-legacy.py platform-tools/systrace/systrace-legacy.py
+external/chromium-trace/script.js platform-tools/systrace/script.js
+external/chromium-trace/style.css platform-tools/systrace/style.css
+external/chromium-trace/prefix.html platform-tools/systrace/prefix.html
+external/chromium-trace/suffix.html platform-tools/systrace/suffix.html
+external/chromium-trace/LICENSE platform-tools/systrace/LICENSE
+external/chromium-trace/AUTHORS platform-tools/systrace/AUTHORS
+external/chromium-trace/NOTICE platform-tools/systrace/NOTICE
+external/chromium-trace/UPSTREAM_REVISION platform-tools/systrace/UPSTREAM_REVISION
##############################################################################
# Build Tools Component
@@ -62,11 +73,14 @@ development/sdk/build_tools_source.properties build-tools/${PLATFORM_NAME}/sour
# build tools from out/host/$(HOST_OS)-$(HOST_ARCH)/
bin/aapt strip build-tools/${PLATFORM_NAME}/aapt
bin/aidl strip build-tools/${PLATFORM_NAME}/aidl
+
# renderscript (cc + headers)
bin/llvm-rs-cc strip build-tools/${PLATFORM_NAME}/llvm-rs-cc
frameworks/rs/scriptc build-tools/${PLATFORM_NAME}/renderscript/include
external/clang/lib/Headers build-tools/${PLATFORM_NAME}/renderscript/clang-include
external/clang/LICENSE.TXT build-tools/${PLATFORM_NAME}/renderscript/clang-include/LICENSE.TXT
+prebuilts/sdk/renderscript/lib build-tools/${PLATFORM_NAME}/renderscript/lib
+
# dx
bin/dx build-tools/${PLATFORM_NAME}/dx
framework/dx.jar build-tools/${PLATFORM_NAME}/lib/dx.jar
@@ -169,60 +183,70 @@ frameworks/base/docs/docs-samples-redirect.html docs/samples/index.html
#
# the list here should match the list of samples that we generate docs for,
# (see web_docs_sample_code_flags in frameworks/base/Android.mk)
-development/apps/GestureBuilder samples/${PLATFORM_NAME}/GestureBuilder
+development/apps/GestureBuilder samples/${PLATFORM_NAME}/legacy/GestureBuilder
development/samples/samples_source.properties samples/${PLATFORM_NAME}/source.properties
#
# PLEASE KEEP THE SAMPLES IN ALPHABETICAL ORDER.
#
-development/samples/AccelerometerPlay samples/${PLATFORM_NAME}/AccelerometerPlay
-development/samples/ActionBarCompat samples/${PLATFORM_NAME}/ActionBarCompat
-development/samples/AndroidBeamDemo samples/${PLATFORM_NAME}/AndroidBeamDemo
-development/samples/ApiDemos samples/${PLATFORM_NAME}/ApiDemos
-development/samples/AppNavigation samples/${PLATFORM_NAME}/AppNavigation
-development/samples/BackupRestore samples/${PLATFORM_NAME}/BackupRestore
-development/samples/BasicGLSurfaceView samples/${PLATFORM_NAME}/BasicGLSurfaceView
-development/samples/BluetoothChat samples/${PLATFORM_NAME}/BluetoothChat
-development/samples/BluetoothHDP samples/${PLATFORM_NAME}/BluetoothHDP
-development/samples/BluetoothLeGatt samples/${PLATFORM_NAME}/BluetoothLeGatt
-development/samples/ContactManager samples/${PLATFORM_NAME}/ContactManager
-development/samples/CrossCompatibility samples/${PLATFORM_NAME}/CrossCompatibility
-development/samples/CubeLiveWallpaper samples/${PLATFORM_NAME}/CubeLiveWallpaper
-development/samples/HelloEffects samples/${PLATFORM_NAME}/HelloEffects
-development/samples/Home samples/${PLATFORM_NAME}/Home
-development/samples/HoneycombGallery samples/${PLATFORM_NAME}/HoneycombGallery
-development/samples/JetBoy samples/${PLATFORM_NAME}/JetBoy
-development/samples/KeyChainDemo samples/${PLATFORM_NAME}/KeyChainDemo
-development/samples/LunarLander samples/${PLATFORM_NAME}/LunarLander
-development/samples/MultiResolution samples/${PLATFORM_NAME}/MultiResolution
-development/samples/NotePad samples/${PLATFORM_NAME}/NotePad
-development/samples/RandomMusicPlayer samples/${PLATFORM_NAME}/RandomMusicPlayer
-development/samples/SpellChecker/SampleSpellCheckerService samples/${PLATFORM_NAME}/SpellChecker/SampleSpellCheckerService
-development/samples/SpellChecker/HelloSpellChecker samples/${PLATFORM_NAME}/SpellChecker/HelloSpellChecker
-development/samples/SampleSyncAdapter samples/${PLATFORM_NAME}/SampleSyncAdapter
-development/samples/SearchableDictionary samples/${PLATFORM_NAME}/SearchableDictionary
-development/samples/SipDemo samples/${PLATFORM_NAME}/SipDemo
-development/samples/SkeletonApp samples/${PLATFORM_NAME}/SkeletonApp
-development/samples/Snake samples/${PLATFORM_NAME}/Snake
-development/samples/SoftKeyboard samples/${PLATFORM_NAME}/SoftKeyboard
-development/samples/Spinner samples/${PLATFORM_NAME}/Spinner
-development/samples/SpinnerTest samples/${PLATFORM_NAME}/SpinnerTest
-development/samples/TicTacToeLib samples/${PLATFORM_NAME}/TicTacToeLib
-development/samples/TicTacToeMain samples/${PLATFORM_NAME}/TicTacToeMain
-development/samples/TtsEngine samples/${PLATFORM_NAME}/TtsEngine
-development/samples/ToyVpn samples/${PLATFORM_NAME}/ToyVpn
-development/samples/UiAutomator samples/${PLATFORM_NAME}/UiAutomator
-development/samples/USB/MissileLauncher samples/${PLATFORM_NAME}/USB/MissileLauncher
-development/samples/USB/AdbTest samples/${PLATFORM_NAME}/USB/AdbTest
-development/samples/VoiceRecognitionService samples/${PLATFORM_NAME}/VoiceRecognitionService
-development/samples/VoicemailProviderDemo samples/${PLATFORM_NAME}/VoicemailProviderDemo
-development/samples/WeatherListWidget samples/${PLATFORM_NAME}/WeatherListWidget
-development/apps/WidgetPreview samples/${PLATFORM_NAME}/WidgetPreview
-development/samples/WiFiDirectDemo samples/${PLATFORM_NAME}/WiFiDirectDemo
-development/samples/WiFiDirectServiceDiscovery samples/${PLATFORM_NAME}/WiFiDirectServiceDiscovery
-development/samples/Wiktionary samples/${PLATFORM_NAME}/Wiktionary
-development/samples/WiktionarySimple samples/${PLATFORM_NAME}/WiktionarySimple
-development/samples/XmlAdapters samples/${PLATFORM_NAME}/XmlAdapters
-development/samples/RenderScript/HelloCompute samples/${PLATFORM_NAME}/RenderScript/HelloCompute
+
+# New sample tree
+developers/samples/android/connectivity samples/${PLATFORM_NAME}/connectivity
+developers/samples/android/content samples/${PLATFORM_NAME}/content
+developers/samples/android/input samples/${PLATFORM_NAME}/input
+developers/samples/android/media samples/${PLATFORM_NAME}/media
+developers/samples/android/security samples/${PLATFORM_NAME}/security
+developers/samples/android/testing samples/${PLATFORM_NAME}/testing
+developers/samples/android/ui samples/${PLATFORM_NAME}/ui
+
+# Old sample tree
+development/samples/AccelerometerPlay samples/${PLATFORM_NAME}/legacy/AccelerometerPlay
+development/samples/ActionBarCompat samples/${PLATFORM_NAME}/legacy/ActionBarCompat
+development/samples/AndroidBeamDemo samples/${PLATFORM_NAME}/legacy/AndroidBeamDemo
+development/samples/ApiDemos samples/${PLATFORM_NAME}/legacy/ApiDemos
+development/samples/AppNavigation samples/${PLATFORM_NAME}/legacy/AppNavigation
+development/samples/BackupRestore samples/${PLATFORM_NAME}/legacy/BackupRestore
+development/samples/BasicGLSurfaceView samples/${PLATFORM_NAME}/legacy/BasicGLSurfaceView
+development/samples/BluetoothChat samples/${PLATFORM_NAME}/legacy/BluetoothChat
+development/samples/BluetoothHDP samples/${PLATFORM_NAME}/legacy/BluetoothHDP
+development/samples/ContactManager samples/${PLATFORM_NAME}/legacy/ContactManager
+development/samples/CrossCompatibility samples/${PLATFORM_NAME}/legacy/CrossCompatibility
+development/samples/CubeLiveWallpaper samples/${PLATFORM_NAME}/legacy/CubeLiveWallpaper
+development/samples/HelloEffects samples/${PLATFORM_NAME}/legacy/HelloEffects
+development/samples/Home samples/${PLATFORM_NAME}/legacy/Home
+development/samples/HoneycombGallery samples/${PLATFORM_NAME}/legacy/HoneycombGallery
+development/samples/JetBoy samples/${PLATFORM_NAME}/legacy/JetBoy
+development/samples/KeyChainDemo samples/${PLATFORM_NAME}/legacy/KeyChainDemo
+development/samples/LunarLander samples/${PLATFORM_NAME}/legacy/LunarLander
+development/samples/MultiResolution samples/${PLATFORM_NAME}/legacy/MultiResolution
+development/samples/NotePad samples/${PLATFORM_NAME}/legacy/NotePad
+development/samples/RandomMusicPlayer samples/${PLATFORM_NAME}/legacy/RandomMusicPlayer
+development/samples/SpellChecker/SampleSpellCheckerService samples/${PLATFORM_NAME}/legacy/SpellChecker/SampleSpellCheckerService
+development/samples/SpellChecker/HelloSpellChecker samples/${PLATFORM_NAME}/legacy/SpellChecker/HelloSpellChecker
+development/samples/SampleSyncAdapter samples/${PLATFORM_NAME}/legacy/SampleSyncAdapter
+development/samples/SearchableDictionary samples/${PLATFORM_NAME}/legacy/SearchableDictionary
+development/samples/SipDemo samples/${PLATFORM_NAME}/legacy/SipDemo
+development/samples/SkeletonApp samples/${PLATFORM_NAME}/legacy/SkeletonApp
+development/samples/Snake samples/${PLATFORM_NAME}/legacy/Snake
+development/samples/SoftKeyboard samples/${PLATFORM_NAME}/legacy/SoftKeyboard
+development/samples/Spinner samples/${PLATFORM_NAME}/legacy/Spinner
+development/samples/SpinnerTest samples/${PLATFORM_NAME}/legacy/SpinnerTest
+development/samples/TicTacToeLib samples/${PLATFORM_NAME}/legacy/TicTacToeLib
+development/samples/TicTacToeMain samples/${PLATFORM_NAME}/legacy/TicTacToeMain
+development/samples/TtsEngine samples/${PLATFORM_NAME}/legacy/TtsEngine
+development/samples/ToyVpn samples/${PLATFORM_NAME}/legacy/ToyVpn
+development/samples/UiAutomator samples/${PLATFORM_NAME}/legacy/UiAutomator
+development/samples/USB/MissileLauncher samples/${PLATFORM_NAME}/legacy/USB/MissileLauncher
+development/samples/USB/AdbTest samples/${PLATFORM_NAME}/legacy/USB/AdbTest
+development/samples/VoiceRecognitionService samples/${PLATFORM_NAME}/legacy/VoiceRecognitionService
+development/samples/VoicemailProviderDemo samples/${PLATFORM_NAME}/legacy/VoicemailProviderDemo
+development/samples/WeatherListWidget samples/${PLATFORM_NAME}/legacy/WeatherListWidget
+development/apps/WidgetPreview samples/${PLATFORM_NAME}/legacy/WidgetPreview
+development/samples/WiFiDirectDemo samples/${PLATFORM_NAME}/legacy/WiFiDirectDemo
+development/samples/WiFiDirectServiceDiscovery samples/${PLATFORM_NAME}/legacy/WiFiDirectServiceDiscovery
+development/samples/Wiktionary samples/${PLATFORM_NAME}/legacy/Wiktionary
+development/samples/WiktionarySimple samples/${PLATFORM_NAME}/legacy/WiktionarySimple
+development/samples/XmlAdapters samples/${PLATFORM_NAME}/legacy/XmlAdapters
+development/samples/RenderScript/HelloCompute samples/${PLATFORM_NAME}/legacy/RenderScript/HelloCompute
development/samples/FmRadioReceiver samples/${PLATFORM_NAME}/FmRadioReceiver
development/samples/FmRadioTransmitter samples/${PLATFORM_NAME}/FmRadioTransmitter
@@ -271,6 +295,7 @@ frameworks/support/v7/appcompat/project.properties
frameworks/support/v7/appcompat/res extras/android/support/v7/appcompat/res
frameworks/support/v7/appcompat/src/.readme extras/android/support/v7/appcompat/src/.readme
${OUT_DIR}/target/common/obj/PACKAGING/android-support-v7-appcompat_intermediates/android-support-v7-appcompat.jar extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar
+${OUT_DIR}/target/common/obj/PACKAGING/android-support-v4_intermediates/android-support-v4.jar extras/android/support/v7/appcompat/libs/android-support-v4.jar
frameworks/support/v7/mediarouter/README.txt extras/android/support/v7/mediarouter/README.txt
frameworks/support/v7/mediarouter/.project extras/android/support/v7/mediarouter/.project
diff --git a/build/windows_sdk_whitelist.mk b/build/windows_sdk_whitelist.mk
index 523883a48..4ef2aec0b 100644
--- a/build/windows_sdk_whitelist.mk
+++ b/build/windows_sdk_whitelist.mk
@@ -65,6 +65,7 @@ subdirs += \
libcore \
development/apps \
development/tools/mkstubs \
+ frameworks/compile/libbcc \
packages
else
diff --git a/samples/AppLimits/Android.mk b/samples/AppLimits/Android.mk
deleted file mode 100644
index 27252761a..000000000
--- a/samples/AppLimits/Android.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := samples tests
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := AppLimits
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/AppLimits/AndroidManifest.xml b/samples/AppLimits/AndroidManifest.xml
deleted file mode 100644
index 8133fe9b3..000000000
--- a/samples/AppLimits/AndroidManifest.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest android:versionCode="1"
- android:versionName="1"
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.android.applimits">
-
- <application android:label="@string/app_name"
- android:requiredForAllUsers="true">
-
- <activity android:name="CustomRestrictionsActivity"
- android:exported="true"
- android:label="@string/restrictions_activity_label">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
-
- <receiver android:name="GetRestrictionsReceiver"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.GET_RESTRICTION_ENTRIES" />
- </intent-filter>
- </receiver>
-
- </application>
-</manifest>
diff --git a/samples/AppLimits/res/values/strings.xml b/samples/AppLimits/res/values/strings.xml
deleted file mode 100644
index d5b7721ba..000000000
--- a/samples/AppLimits/res/values/strings.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name">AppLimits Demo</string>
- <string name="restrictions_activity_label">Custom app restrictions</string>
- <string name="app_limits_main_label">App Limits</string>
- <string name="custom_or_not_title">Test Custom Restrictions</string>
- <string name="choice_entry_title">Test choice type</string>
- <string name="multi_entry_title">Test multi-select type</string>
-
- <string-array name="multi_entry_entries">
- <item>Ice Cream</item>
- <item>Jelly Bean</item>
- <item>More Jelly Bean</item>
- </string-array>
-
- <string-array name="multi_entry_values" translateable="false">
- <item>1</item>
- <item>2</item>
- <item>3</item>
- </string-array>
-
- <string-array name="choice_entry_entries">
- <item>Ice Cream</item>
- <item>Jelly Bean</item>
- <item>More Jelly Bean</item>
- </string-array>
-
- <string-array name="choice_entry_values" translateable="false">
- <item>1</item>
- <item>2</item>
- <item>3</item>
- </string-array>
-
-</resources> \ No newline at end of file
diff --git a/samples/AppLimits/res/xml/custom_prefs.xml b/samples/AppLimits/res/xml/custom_prefs.xml
deleted file mode 100644
index 2b4512582..000000000
--- a/samples/AppLimits/res/xml/custom_prefs.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/restrictions_activity_label">
-
- <CheckBoxPreference android:key="custom"
- android:title="@string/custom_or_not_title" />
-
- <ListPreference android:key="choice"
- android:title="@string/choice_entry_title"
- android:entries="@array/choice_entry_entries"
- android:entryValues="@array/choice_entry_values" />
-
- <MultiSelectListPreference android:key="multi"
- android:title="@string/multi_entry_title"
- android:entries="@array/multi_entry_entries"
- android:entryValues="@array/multi_entry_values" />
-
-</PreferenceScreen>
diff --git a/samples/AppLimits/src/com/example/android/applimits/CustomRestrictionsActivity.java b/samples/AppLimits/src/com/example/android/applimits/CustomRestrictionsActivity.java
deleted file mode 100644
index 963aa2171..000000000
--- a/samples/AppLimits/src/com/example/android/applimits/CustomRestrictionsActivity.java
+++ /dev/null
@@ -1,159 +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.example.android.applimits;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.RestrictionEntry;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.preference.CheckBoxPreference;
-import android.preference.ListPreference;
-import android.preference.MultiSelectListPreference;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceActivity;
-
-import com.example.android.applimits.GetRestrictionsReceiver;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class CustomRestrictionsActivity extends PreferenceActivity
- implements OnPreferenceChangeListener {
-
- private static final String KEY_CUSTOM_PREF = "custom";
- private static final String KEY_CHOICE_PREF = "choice";
- private static final String KEY_MULTI_PREF = "multi";
-
- List<RestrictionEntry> mRestrictions;
- private Bundle mRestrictionsBundle;
-
- CheckBoxPreference mCustomPref;
- ListPreference mChoicePref;
- MultiSelectListPreference mMultiPref;
-
- RestrictionEntry mCustomEntry;
- RestrictionEntry mChoiceEntry;
- RestrictionEntry mMultiEntry;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mRestrictionsBundle = getIntent().getBundleExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE);
- if (mRestrictionsBundle == null) {
- mRestrictionsBundle =
- ((UserManager) getSystemService(Context.USER_SERVICE))
- .getApplicationRestrictions(getPackageName());
- }
- if (mRestrictionsBundle == null) {
- mRestrictionsBundle = new Bundle();
- }
-
- if (savedInstanceState != null
- && savedInstanceState.containsKey(Intent.EXTRA_RESTRICTIONS_LIST)) {
- mRestrictions = savedInstanceState.getParcelableArrayList(
- Intent.EXTRA_RESTRICTIONS_LIST);
- }
-
- this.addPreferencesFromResource(R.xml.custom_prefs);
- mCustomPref = (CheckBoxPreference) findPreference(KEY_CUSTOM_PREF);
- mChoicePref = (ListPreference) findPreference(KEY_CHOICE_PREF);
- mMultiPref = (MultiSelectListPreference) findPreference(KEY_MULTI_PREF);
-
- // Transfer the saved values into the preference hierarchy
- if (mRestrictions != null) {
- for (RestrictionEntry entry : mRestrictions) {
- if (entry.getKey().equals(GetRestrictionsReceiver.KEY_CUSTOM)) {
- mCustomPref.setChecked(entry.getSelectedState());
- mCustomEntry = entry;
- } else if (entry.getKey().equals(GetRestrictionsReceiver.KEY_CHOICE)) {
- mChoicePref.setValue(entry.getSelectedString());
- mChoiceEntry = entry;
- } else if (entry.getKey().equals(GetRestrictionsReceiver.KEY_MULTI_SELECT)) {
- HashSet<String> set = new HashSet<String>();
- for (String value : entry.getAllSelectedStrings()) {
- set.add(value);
- }
- mMultiPref.setValues(set);
- mMultiEntry = entry;
- }
- }
- } else {
- mRestrictions = new ArrayList<RestrictionEntry>();
- mCustomEntry = new RestrictionEntry(GetRestrictionsReceiver.KEY_CUSTOM,
- mRestrictionsBundle.getBoolean(GetRestrictionsReceiver.KEY_CUSTOM, false));
- mCustomEntry.setType(RestrictionEntry.TYPE_BOOLEAN);
- mCustomPref.setChecked(mCustomEntry.getSelectedState());
- mChoiceEntry = new RestrictionEntry(GetRestrictionsReceiver.KEY_CHOICE,
- mRestrictionsBundle.getString(GetRestrictionsReceiver.KEY_CHOICE));
- mChoiceEntry.setType(RestrictionEntry.TYPE_CHOICE);
- mChoicePref.setValue(mChoiceEntry.getSelectedString());
- mMultiEntry = new RestrictionEntry(GetRestrictionsReceiver.KEY_MULTI_SELECT,
- mRestrictionsBundle.getStringArray(GetRestrictionsReceiver.KEY_MULTI_SELECT));
- mMultiEntry.setType(RestrictionEntry.TYPE_MULTI_SELECT);
- if (mMultiEntry.getAllSelectedStrings() != null) {
- HashSet<String> set = new HashSet<String>();
- for (String value : mRestrictionsBundle.getStringArray(
- GetRestrictionsReceiver.KEY_MULTI_SELECT)) {
- set.add(value);
- }
- mMultiPref.setValues(set);
- }
- mRestrictions.add(mCustomEntry);
- mRestrictions.add(mChoiceEntry);
- mRestrictions.add(mMultiEntry);
- }
- mCustomPref.setOnPreferenceChangeListener(this);
- mChoicePref.setOnPreferenceChangeListener(this);
- mMultiPref.setOnPreferenceChangeListener(this);
- Intent intent = new Intent(getIntent());
- intent.putParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS_LIST,
- new ArrayList<RestrictionEntry>(mRestrictions));
- setResult(RESULT_OK, intent);
- }
-
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST,
- new ArrayList<RestrictionEntry>(mRestrictions));
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (preference == mCustomPref) {
- mCustomEntry.setSelectedState((Boolean) newValue);
- } else if (preference == mChoicePref) {
- mChoiceEntry.setSelectedString((String) newValue);
- } else if (preference == mMultiPref) {
- String[] selectedStrings = new String[((Set<String>)newValue).size()];
- int i = 0;
- for (String value : (Set<String>) newValue) {
- selectedStrings[i++] = value;
- }
- mMultiEntry.setAllSelectedStrings(selectedStrings);
- }
- Intent intent = new Intent(getIntent());
- intent.putParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS_LIST,
- new ArrayList<RestrictionEntry>(mRestrictions));
- setResult(RESULT_OK, intent);
- return true;
- }
-}
diff --git a/samples/AppLimits/src/com/example/android/applimits/GetRestrictionsReceiver.java b/samples/AppLimits/src/com/example/android/applimits/GetRestrictionsReceiver.java
deleted file mode 100644
index 0249911e3..000000000
--- a/samples/AppLimits/src/com/example/android/applimits/GetRestrictionsReceiver.java
+++ /dev/null
@@ -1,139 +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.example.android.applimits;
-
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.RestrictionEntry;
-import android.content.BroadcastReceiver.PendingResult;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class GetRestrictionsReceiver extends BroadcastReceiver {
- private static final String TAG = "AppLimits$GetRestrictionsReceiver";
-
- static final String KEY_CUSTOM = "custom_or_not";
- static final String KEY_CHOICE = "choice";
- static final String KEY_MULTI_SELECT = "multi";
-
- @Override
- public void onReceive(final Context context, Intent intent) {
- final PendingResult result = goAsync();
- final Bundle oldRestrictions =
- intent.getBundleExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE);
- Log.i(TAG, "oldRestrictions = " + oldRestrictions);
- new Thread() {
- public void run() {
- createRestrictions(context, result, oldRestrictions);
- }
- }.start();
- }
-
- public static void populateCustomEntry(Resources res, RestrictionEntry entry) {
- entry.setType(RestrictionEntry.TYPE_BOOLEAN);
- entry.setTitle(res.getString(R.string.custom_or_not_title));
- }
-
- public static void populateChoiceEntry(Resources res, RestrictionEntry reSingleChoice) {
- String[] choiceEntries = res.getStringArray(R.array.choice_entry_entries);
- String[] choiceValues = res.getStringArray(R.array.choice_entry_values);
- if (reSingleChoice.getSelectedString() == null) {
- reSingleChoice.setSelectedString(choiceValues[0]);
- }
- reSingleChoice.setTitle(res.getString(R.string.choice_entry_title));
- reSingleChoice.setChoiceEntries(choiceEntries);
- reSingleChoice.setChoiceValues(choiceValues);
- reSingleChoice.setType(RestrictionEntry.TYPE_CHOICE);
- }
-
- public static void populateMultiEntry(Resources res, RestrictionEntry reMultiSelect) {
- String[] multiEntries = res.getStringArray(R.array.multi_entry_entries);
- String[] multiValues = res.getStringArray(R.array.multi_entry_values);
- if (reMultiSelect.getAllSelectedStrings() == null) {
- reMultiSelect.setAllSelectedStrings(new String[0]);
- }
- reMultiSelect.setTitle(res.getString(R.string.multi_entry_title));
- reMultiSelect.setChoiceEntries(multiEntries);
- reMultiSelect.setChoiceValues(multiValues);
- reMultiSelect.setType(RestrictionEntry.TYPE_MULTI_SELECT);
- }
-
- private ArrayList<RestrictionEntry> initRestrictions(Context context) {
- ArrayList<RestrictionEntry> newRestrictions = new ArrayList<RestrictionEntry>();
- Resources res = context.getResources();
-
- RestrictionEntry reCustomOrNot = new RestrictionEntry(KEY_CUSTOM, false);
- populateCustomEntry(res, reCustomOrNot);
- newRestrictions.add(reCustomOrNot);
-
- RestrictionEntry reSingleChoice = new RestrictionEntry(KEY_CHOICE, (String) null);
- populateChoiceEntry(res, reSingleChoice);
- newRestrictions.add(reSingleChoice);
-
- RestrictionEntry reMultiSelect = new RestrictionEntry(KEY_MULTI_SELECT, (String[]) null);
- populateMultiEntry(res, reMultiSelect);
- newRestrictions.add(reMultiSelect);
-
- return newRestrictions;
- }
-
- private void createRestrictions(Context context, PendingResult result, Bundle old) {
- Resources res = context.getResources();
-
- ArrayList<RestrictionEntry> newEntries = initRestrictions(context);
- // If this is the first time, create the default restrictions entries and return them.
- if (old == null) {
- Bundle extras = new Bundle();
- extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, newEntries);
- result.setResult(Activity.RESULT_OK, null, extras);
- result.finish();
- return;
- }
-
- boolean custom = old.getBoolean(KEY_CUSTOM, false);
- for (RestrictionEntry entry : newEntries) {
- final String key = entry.getKey();
- if (KEY_CUSTOM.equals(key)) {
- entry.setSelectedState(custom);
- } else if (KEY_CHOICE.equals(key)) {
- if (old.containsKey(KEY_CHOICE)) {
- entry.setSelectedString(old.getString(KEY_CHOICE));
- }
- } else if (KEY_MULTI_SELECT.equals(key)) {
- if (old.containsKey(KEY_MULTI_SELECT)) {
- entry.setAllSelectedStrings(old.getStringArray(key));
- }
- }
- }
-
- Bundle extras = new Bundle();
- if (custom) {
- Intent customIntent = new Intent();
- customIntent.setClass(context, CustomRestrictionsActivity.class);
- extras.putParcelable(Intent.EXTRA_RESTRICTIONS_INTENT, customIntent);
- }
- extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, newEntries);
- result.setResult(Activity.RESULT_OK, null, extras);
- result.finish();
- }
-}
diff --git a/samples/BluetoothLeGatt/Android.mk b/samples/BluetoothLeGatt/Android.mk
deleted file mode 100644
index 1e30b2242..000000000
--- a/samples/BluetoothLeGatt/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := samples
-
-# Only compile source java files in this apk.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := BluetoothLeGatt
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/BluetoothLeGatt/AndroidManifest.xml b/samples/BluetoothLeGatt/AndroidManifest.xml
deleted file mode 100644
index 019d2587d..000000000
--- a/samples/BluetoothLeGatt/AndroidManifest.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-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.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.bluetooth.le"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="18"
- android:targetSdkVersion="18"/>
- <!-- Declare this required feature if you want to make the app available to BLE-capable
- devices only. If you want to make your app available to devices that don't support BLE,
- you should omit this in the manifest. Instead, determine BLE capability by using
- PackageManager.hasSystemFeature(FEATURE_BLUETOOTH_LE) -->
- <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
-
- <uses-permission android:name="android.permission.BLUETOOTH"/>
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
-
- <application android:label="@string/app_name"
- android:icon="@drawable/ic_launcher"
- android:theme="@android:style/Theme.Holo.Light">
- <activity android:name=".DeviceScanActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <activity android:name=".DeviceControlActivity"/>
- <service android:name=".BluetoothLeService" android:enabled="true"/>
- </application>
-</manifest>
diff --git a/samples/BluetoothLeGatt/res/drawable-hdpi/ic_launcher.png b/samples/BluetoothLeGatt/res/drawable-hdpi/ic_launcher.png
deleted file mode 100755
index 15367c050..000000000
--- a/samples/BluetoothLeGatt/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/samples/BluetoothLeGatt/res/drawable-mdpi/ic_launcher.png b/samples/BluetoothLeGatt/res/drawable-mdpi/ic_launcher.png
deleted file mode 100755
index ba810a766..000000000
--- a/samples/BluetoothLeGatt/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/samples/BluetoothLeGatt/res/drawable-xhdpi/ic_launcher.png b/samples/BluetoothLeGatt/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100755
index 14f1d7467..000000000
--- a/samples/BluetoothLeGatt/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/samples/BluetoothLeGatt/res/drawable-xxhdpi/ic_launcher.png b/samples/BluetoothLeGatt/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100755
index 81ff9cc8b..000000000
--- a/samples/BluetoothLeGatt/res/drawable-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/samples/BluetoothLeGatt/res/layout/actionbar_indeterminate_progress.xml b/samples/BluetoothLeGatt/res/layout/actionbar_indeterminate_progress.xml
deleted file mode 100644
index a950833f8..000000000
--- a/samples/BluetoothLeGatt/res/layout/actionbar_indeterminate_progress.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
- Copyright 2013 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.
- -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:layout_width="56dp"
- android:minWidth="56dp">
- <ProgressBar android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_gravity="center"/>
-</FrameLayout>
diff --git a/samples/BluetoothLeGatt/res/layout/gatt_services_characteristics.xml b/samples/BluetoothLeGatt/res/layout/gatt_services_characteristics.xml
deleted file mode 100644
index 2f3106103..000000000
--- a/samples/BluetoothLeGatt/res/layout/gatt_services_characteristics.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp">
- <LinearLayout android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp">
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/label_device_address"
- android:textSize="18sp"/>
- <Space android:layout_width="5dp"
- android:layout_height="wrap_content"/>
- <TextView android:id="@+id/device_address"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"/>
- </LinearLayout>
- <LinearLayout android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp">
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/label_state"
- android:textSize="18sp"/>
- <Space android:layout_width="5dp"
- android:layout_height="wrap_content"/>
- <TextView android:id="@+id/connection_state"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/disconnected"
- android:textSize="18sp"/>
- </LinearLayout>
- <LinearLayout android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp">
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/label_data"
- android:textSize="18sp"/>
- <Space android:layout_width="5dp"
- android:layout_height="wrap_content"/>
- <TextView android:id="@+id/data_value"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/no_data"
- android:textSize="18sp"/>
- </LinearLayout>
- <ExpandableListView android:id="@+id/gatt_services_list"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-</LinearLayout> \ No newline at end of file
diff --git a/samples/BluetoothLeGatt/res/layout/listitem_device.xml b/samples/BluetoothLeGatt/res/layout/listitem_device.xml
deleted file mode 100644
index eff44fcdd..000000000
--- a/samples/BluetoothLeGatt/res/layout/listitem_device.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <TextView android:id="@+id/device_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="24dp"/>
- <TextView android:id="@+id/device_address"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="12dp"/>
-</LinearLayout> \ No newline at end of file
diff --git a/samples/BluetoothLeGatt/res/menu/gatt_services.xml b/samples/BluetoothLeGatt/res/menu/gatt_services.xml
deleted file mode 100644
index 464d32ff7..000000000
--- a/samples/BluetoothLeGatt/res/menu/gatt_services.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/menu_refresh"
- android:checkable="false"
- android:orderInCategory="1"
- android:showAsAction="ifRoom"/>
- <item android:id="@+id/menu_connect"
- android:title="@string/menu_connect"
- android:orderInCategory="100"
- android:showAsAction="ifRoom|withText"/>
- <item android:id="@+id/menu_disconnect"
- android:title="@string/menu_disconnect"
- android:orderInCategory="101"
- android:showAsAction="ifRoom|withText"/>
-</menu>
diff --git a/samples/BluetoothLeGatt/res/menu/main.xml b/samples/BluetoothLeGatt/res/menu/main.xml
deleted file mode 100644
index 39dd66aa4..000000000
--- a/samples/BluetoothLeGatt/res/menu/main.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/menu_refresh"
- android:checkable="false"
- android:orderInCategory="1"
- android:showAsAction="ifRoom"/>
- <item android:id="@+id/menu_scan"
- android:title="@string/menu_scan"
- android:orderInCategory="100"
- android:showAsAction="ifRoom|withText"/>
- <item android:id="@+id/menu_stop"
- android:title="@string/menu_stop"
- android:orderInCategory="101"
- android:showAsAction="ifRoom|withText"/>
-</menu>
diff --git a/samples/BluetoothLeGatt/res/values/strings.xml b/samples/BluetoothLeGatt/res/values/strings.xml
deleted file mode 100644
index d828aa018..000000000
--- a/samples/BluetoothLeGatt/res/values/strings.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<resources>
- <string name="app_name">BLE Sample</string>
- <string name="ble_not_supported">BLE is not supported</string>
- <string name="label_data">Data:</string>
- <string name="label_device_address">Device address:</string>
- <string name="label_state">State:</string>
- <string name="no_data">No data</string>
- <string name="connected">Connected</string>
- <string name="disconnected">Disconnected</string>
- <string name="title_devices">BLE Device Scan</string>
- <string name="error_bluetooth_not_supported">Bluetooth not supported.</string>
-
- <string name="unknown_device">Unknown device</string>
- <string name="unknown_characteristic">Unknown characteristic</string>
- <string name="unknown_service">Unknown service</string>
-
- <!-- Menu items -->
- <string name="menu_connect">Connect</string>
- <string name="menu_disconnect">Disconnect</string>
- <string name="menu_scan">Scan</string>
- <string name="menu_stop">Stop</string>
-</resources>
diff --git a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/BluetoothLeService.java b/samples/BluetoothLeGatt/src/com/example/bluetooth/le/BluetoothLeService.java
deleted file mode 100644
index 9e7aabd83..000000000
--- a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/BluetoothLeService.java
+++ /dev/null
@@ -1,319 +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.example.bluetooth.le;
-
-import android.app.Service;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattCallback;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattDescriptor;
-import android.bluetooth.BluetoothGattService;
-import android.bluetooth.BluetoothManager;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Binder;
-import android.os.IBinder;
-import android.util.Log;
-
-import java.util.List;
-import java.util.UUID;
-
-/**
- * Service for managing connection and data communication with a GATT server hosted on a
- * given Bluetooth LE device.
- */
-public class BluetoothLeService extends Service {
- private final static String TAG = BluetoothLeService.class.getSimpleName();
-
- private BluetoothManager mBluetoothManager;
- private BluetoothAdapter mBluetoothAdapter;
- private String mBluetoothDeviceAddress;
- private BluetoothGatt mBluetoothGatt;
- private int mConnectionState = STATE_DISCONNECTED;
-
- private static final int STATE_DISCONNECTED = 0;
- private static final int STATE_CONNECTING = 1;
- private static final int STATE_CONNECTED = 2;
-
- public final static String ACTION_GATT_CONNECTED =
- "com.example.bluetooth.le.ACTION_GATT_CONNECTED";
- public final static String ACTION_GATT_DISCONNECTED =
- "com.example.bluetooth.le.ACTION_GATT_DISCONNECTED";
- public final static String ACTION_GATT_SERVICES_DISCOVERED =
- "com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED";
- public final static String ACTION_DATA_AVAILABLE =
- "com.example.bluetooth.le.ACTION_DATA_AVAILABLE";
- public final static String EXTRA_DATA =
- "com.example.bluetooth.le.EXTRA_DATA";
-
- public final static UUID UUID_HEART_RATE_MEASUREMENT =
- UUID.fromString(SampleGattAttributes.HEART_RATE_MEASUREMENT);
-
- // Implements callback methods for GATT events that the app cares about. For example,
- // connection change and services discovered.
- private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
- @Override
- public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
- String intentAction;
- if (newState == BluetoothProfile.STATE_CONNECTED) {
- intentAction = ACTION_GATT_CONNECTED;
- mConnectionState = STATE_CONNECTED;
- broadcastUpdate(intentAction);
- Log.i(TAG, "Connected to GATT server.");
- // Attempts to discover services after successful connection.
- Log.i(TAG, "Attempting to start service discovery:" +
- mBluetoothGatt.discoverServices());
-
- } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
- intentAction = ACTION_GATT_DISCONNECTED;
- mConnectionState = STATE_DISCONNECTED;
- Log.i(TAG, "Disconnected from GATT server.");
- broadcastUpdate(intentAction);
- }
- }
-
- @Override
- public void onServicesDiscovered(BluetoothGatt gatt, int status) {
- if (status == BluetoothGatt.GATT_SUCCESS) {
- broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
- } else {
- Log.w(TAG, "onServicesDiscovered received: " + status);
- }
- }
-
- @Override
- public void onCharacteristicRead(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic,
- int status) {
- if (status == BluetoothGatt.GATT_SUCCESS) {
- broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
- }
- }
-
- @Override
- public void onCharacteristicChanged(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic) {
- broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
- }
- };
-
- private void broadcastUpdate(final String action) {
- final Intent intent = new Intent(action);
- sendBroadcast(intent);
- }
-
- private void broadcastUpdate(final String action,
- final BluetoothGattCharacteristic characteristic) {
- final Intent intent = new Intent(action);
-
- // This is special handling for the Heart Rate Measurement profile. Data parsing is
- // carried out as per profile specifications:
- // http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
- if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
- int flag = characteristic.getProperties();
- int format = -1;
- if ((flag & 0x01) != 0) {
- format = BluetoothGattCharacteristic.FORMAT_UINT16;
- Log.d(TAG, "Heart rate format UINT16.");
- } else {
- format = BluetoothGattCharacteristic.FORMAT_UINT8;
- Log.d(TAG, "Heart rate format UINT8.");
- }
- final int heartRate = characteristic.getIntValue(format, 1);
- Log.d(TAG, String.format("Received heart rate: %d", heartRate));
- intent.putExtra(EXTRA_DATA, String.valueOf(heartRate));
- } else {
- // For all other profiles, writes the data formatted in HEX.
- final byte[] data = characteristic.getValue();
- if (data != null && data.length > 0) {
- final StringBuilder stringBuilder = new StringBuilder(data.length);
- for(byte byteChar : data)
- stringBuilder.append(String.format("%02X ", byteChar));
- intent.putExtra(EXTRA_DATA, new String(data) + "\n" + stringBuilder.toString());
- }
- }
- sendBroadcast(intent);
- }
-
- public class LocalBinder extends Binder {
- BluetoothLeService getService() {
- return BluetoothLeService.this;
- }
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return mBinder;
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
- // After using a given device, you should make sure that BluetoothGatt.close() is called
- // such that resources are cleaned up properly. In this particular example, close() is
- // invoked when the UI is disconnected from the Service.
- close();
- return super.onUnbind(intent);
- }
-
- private final IBinder mBinder = new LocalBinder();
-
- /**
- * Initializes a reference to the local Bluetooth adapter.
- *
- * @return Return true if the initialization is successful.
- */
- public boolean initialize() {
- // For API level 18 and above, get a reference to BluetoothAdapter through
- // BluetoothManager.
- if (mBluetoothManager == null) {
- mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
- if (mBluetoothManager == null) {
- Log.e(TAG, "Unable to initialize BluetoothManager.");
- return false;
- }
- }
-
- mBluetoothAdapter = mBluetoothManager.getAdapter();
- if (mBluetoothAdapter == null) {
- Log.e(TAG, "Unable to obtain a BluetoothAdapter.");
- return false;
- }
-
- return true;
- }
-
- /**
- * Connects to the GATT server hosted on the Bluetooth LE device.
- *
- * @param address The device address of the destination device.
- *
- * @return Return true if the connection is initiated successfully. The connection result
- * is reported asynchronously through the
- * {@code BluetoothGattCallback#onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int)}
- * callback.
- */
- public boolean connect(final String address) {
- if (mBluetoothAdapter == null || address == null) {
- Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
- return false;
- }
-
- // Previously connected device. Try to reconnect.
- if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress)
- && mBluetoothGatt != null) {
- Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");
- if (mBluetoothGatt.connect()) {
- mConnectionState = STATE_CONNECTING;
- return true;
- } else {
- return false;
- }
- }
-
- final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
- if (device == null) {
- Log.w(TAG, "Device not found. Unable to connect.");
- return false;
- }
- // We want to directly connect to the device, so we are setting the autoConnect
- // parameter to false.
- mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
- Log.d(TAG, "Trying to create a new connection.");
- mBluetoothDeviceAddress = address;
- mConnectionState = STATE_CONNECTING;
- return true;
- }
-
- /**
- * Disconnects an existing connection or cancel a pending connection. The disconnection result
- * is reported asynchronously through the
- * {@code BluetoothGattCallback#onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int)}
- * callback.
- */
- public void disconnect() {
- if (mBluetoothAdapter == null || mBluetoothGatt == null) {
- Log.w(TAG, "BluetoothAdapter not initialized");
- return;
- }
- mBluetoothGatt.disconnect();
- }
-
- /**
- * After using a given BLE device, the app must call this method to ensure resources are
- * released properly.
- */
- public void close() {
- if (mBluetoothGatt == null) {
- return;
- }
- mBluetoothGatt.close();
- mBluetoothGatt = null;
- }
-
- /**
- * Request a read on a given {@code BluetoothGattCharacteristic}. The read result is reported
- * asynchronously through the {@code BluetoothGattCallback#onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int)}
- * callback.
- *
- * @param characteristic The characteristic to read from.
- */
- public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
- if (mBluetoothAdapter == null || mBluetoothGatt == null) {
- Log.w(TAG, "BluetoothAdapter not initialized");
- return;
- }
- mBluetoothGatt.readCharacteristic(characteristic);
- }
-
- /**
- * Enables or disables notification on a give characteristic.
- *
- * @param characteristic Characteristic to act on.
- * @param enabled If true, enable notification. False otherwise.
- */
- public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
- boolean enabled) {
- if (mBluetoothAdapter == null || mBluetoothGatt == null) {
- Log.w(TAG, "BluetoothAdapter not initialized");
- return;
- }
- mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
-
- // This is specific to Heart Rate Measurement.
- if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
- BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
- UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
- descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
- mBluetoothGatt.writeDescriptor(descriptor);
- }
- }
-
- /**
- * Retrieves a list of supported GATT services on the connected device. This should be
- * invoked only after {@code BluetoothGatt#discoverServices()} completes successfully.
- *
- * @return A {@code List} of supported services.
- */
- public List<BluetoothGattService> getSupportedGattServices() {
- if (mBluetoothGatt == null) return null;
-
- return mBluetoothGatt.getServices();
- }
-}
diff --git a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceControlActivity.java b/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceControlActivity.java
deleted file mode 100644
index 06b3bb465..000000000
--- a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceControlActivity.java
+++ /dev/null
@@ -1,309 +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.example.bluetooth.le;
-
-import android.app.Activity;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattService;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.ExpandableListView;
-import android.widget.SimpleExpandableListAdapter;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * For a given BLE device, this Activity provides the user interface to connect, display data,
- * and display GATT services and characteristics supported by the device. The Activity
- * communicates with {@code BluetoothLeService}, which in turn interacts with the
- * Bluetooth LE API.
- */
-public class DeviceControlActivity extends Activity {
- private final static String TAG = DeviceControlActivity.class.getSimpleName();
-
- public static final String EXTRAS_DEVICE_NAME = "DEVICE_NAME";
- public static final String EXTRAS_DEVICE_ADDRESS = "DEVICE_ADDRESS";
-
- private TextView mConnectionState;
- private TextView mDataField;
- private String mDeviceName;
- private String mDeviceAddress;
- private ExpandableListView mGattServicesList;
- private BluetoothLeService mBluetoothLeService;
- private ArrayList<ArrayList<BluetoothGattCharacteristic>> mGattCharacteristics =
- new ArrayList<ArrayList<BluetoothGattCharacteristic>>();
- private boolean mConnected = false;
- private BluetoothGattCharacteristic mNotifyCharacteristic;
-
- private final String LIST_NAME = "NAME";
- private final String LIST_UUID = "UUID";
-
- // Code to manage Service lifecycle.
- private final ServiceConnection mServiceConnection = new ServiceConnection() {
-
- @Override
- public void onServiceConnected(ComponentName componentName, IBinder service) {
- mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
- if (!mBluetoothLeService.initialize()) {
- Log.e(TAG, "Unable to initialize Bluetooth");
- finish();
- }
- // Automatically connects to the device upon successful start-up initialization.
- mBluetoothLeService.connect(mDeviceAddress);
- }
-
- @Override
- public void onServiceDisconnected(ComponentName componentName) {
- mBluetoothLeService = null;
- }
- };
-
- // Handles various events fired by the Service.
- // ACTION_GATT_CONNECTED: connected to a GATT server.
- // ACTION_GATT_DISCONNECTED: disconnected from a GATT server.
- // ACTION_GATT_SERVICES_DISCOVERED: discovered GATT services.
- // ACTION_DATA_AVAILABLE: received data from the device. This can be a result of read
- // or notification operations.
- private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
- mConnected = true;
- updateConnectionState(R.string.connected);
- invalidateOptionsMenu();
- } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {
- mConnected = false;
- updateConnectionState(R.string.disconnected);
- invalidateOptionsMenu();
- clearUI();
- } else if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
- // Show all the supported services and characteristics on the user interface.
- displayGattServices(mBluetoothLeService.getSupportedGattServices());
- } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
- displayData(intent.getStringExtra(BluetoothLeService.EXTRA_DATA));
- }
- }
- };
-
- // If a given GATT characteristic is selected, check for supported features. This sample
- // demonstrates 'Read' and 'Notify' features. See
- // http://d.android.com/reference/android/bluetooth/BluetoothGatt.html for the complete
- // list of supported characteristic features.
- private final ExpandableListView.OnChildClickListener servicesListClickListner =
- new ExpandableListView.OnChildClickListener() {
- @Override
- public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
- int childPosition, long id) {
- if (mGattCharacteristics != null) {
- final BluetoothGattCharacteristic characteristic =
- mGattCharacteristics.get(groupPosition).get(childPosition);
- final int charaProp = characteristic.getProperties();
- if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
- // If there is an active notification on a characteristic, clear
- // it first so it doesn't update the data field on the user interface.
- if (mNotifyCharacteristic != null) {
- mBluetoothLeService.setCharacteristicNotification(
- mNotifyCharacteristic, false);
- mNotifyCharacteristic = null;
- }
- mBluetoothLeService.readCharacteristic(characteristic);
- }
- if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
- mNotifyCharacteristic = characteristic;
- mBluetoothLeService.setCharacteristicNotification(
- characteristic, true);
- }
- return true;
- }
- return false;
- }
- };
-
- private void clearUI() {
- mGattServicesList.setAdapter((SimpleExpandableListAdapter) null);
- mDataField.setText(R.string.no_data);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.gatt_services_characteristics);
-
- final Intent intent = getIntent();
- mDeviceName = intent.getStringExtra(EXTRAS_DEVICE_NAME);
- mDeviceAddress = intent.getStringExtra(EXTRAS_DEVICE_ADDRESS);
-
- // Sets up UI references.
- ((TextView) findViewById(R.id.device_address)).setText(mDeviceAddress);
- mGattServicesList = (ExpandableListView) findViewById(R.id.gatt_services_list);
- mGattServicesList.setOnChildClickListener(servicesListClickListner);
- mConnectionState = (TextView) findViewById(R.id.connection_state);
- mDataField = (TextView) findViewById(R.id.data_value);
-
- getActionBar().setTitle(mDeviceName);
- getActionBar().setDisplayHomeAsUpEnabled(true);
- Intent gattServiceIntent = new Intent(this, BluetoothLeService.class);
- bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
- if (mBluetoothLeService != null) {
- final boolean result = mBluetoothLeService.connect(mDeviceAddress);
- Log.d(TAG, "Connect request result=" + result);
- }
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- unregisterReceiver(mGattUpdateReceiver);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- unbindService(mServiceConnection);
- mBluetoothLeService = null;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.gatt_services, menu);
- if (mConnected) {
- menu.findItem(R.id.menu_connect).setVisible(false);
- menu.findItem(R.id.menu_disconnect).setVisible(true);
- } else {
- menu.findItem(R.id.menu_connect).setVisible(true);
- menu.findItem(R.id.menu_disconnect).setVisible(false);
- }
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch(item.getItemId()) {
- case R.id.menu_connect:
- mBluetoothLeService.connect(mDeviceAddress);
- return true;
- case R.id.menu_disconnect:
- mBluetoothLeService.disconnect();
- return true;
- case android.R.id.home:
- onBackPressed();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- private void updateConnectionState(final int resourceId) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mConnectionState.setText(resourceId);
- }
- });
- }
-
- private void displayData(String data) {
- if (data != null) {
- mDataField.setText(data);
- }
- }
-
- // Demonstrates how to iterate through the supported GATT Services/Characteristics.
- // In this sample, we populate the data structure that is bound to the ExpandableListView
- // on the UI.
- private void displayGattServices(List<BluetoothGattService> gattServices) {
- if (gattServices == null) return;
- String uuid = null;
- String unknownServiceString = getResources().getString(R.string.unknown_service);
- String unknownCharaString = getResources().getString(R.string.unknown_characteristic);
- ArrayList<HashMap<String, String>> gattServiceData = new ArrayList<HashMap<String, String>>();
- ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData
- = new ArrayList<ArrayList<HashMap<String, String>>>();
- mGattCharacteristics = new ArrayList<ArrayList<BluetoothGattCharacteristic>>();
-
- // Loops through available GATT Services.
- for (BluetoothGattService gattService : gattServices) {
- HashMap<String, String> currentServiceData = new HashMap<String, String>();
- uuid = gattService.getUuid().toString();
- currentServiceData.put(
- LIST_NAME, SampleGattAttributes.lookup(uuid, unknownServiceString));
- currentServiceData.put(LIST_UUID, uuid);
- gattServiceData.add(currentServiceData);
-
- ArrayList<HashMap<String, String>> gattCharacteristicGroupData =
- new ArrayList<HashMap<String, String>>();
- List<BluetoothGattCharacteristic> gattCharacteristics =
- gattService.getCharacteristics();
- ArrayList<BluetoothGattCharacteristic> charas =
- new ArrayList<BluetoothGattCharacteristic>();
-
- // Loops through available Characteristics.
- for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {
- charas.add(gattCharacteristic);
- HashMap<String, String> currentCharaData = new HashMap<String, String>();
- uuid = gattCharacteristic.getUuid().toString();
- currentCharaData.put(
- LIST_NAME, SampleGattAttributes.lookup(uuid, unknownCharaString));
- currentCharaData.put(LIST_UUID, uuid);
- gattCharacteristicGroupData.add(currentCharaData);
- }
- mGattCharacteristics.add(charas);
- gattCharacteristicData.add(gattCharacteristicGroupData);
- }
-
- SimpleExpandableListAdapter gattServiceAdapter = new SimpleExpandableListAdapter(
- this,
- gattServiceData,
- android.R.layout.simple_expandable_list_item_2,
- new String[] {LIST_NAME, LIST_UUID},
- new int[] { android.R.id.text1, android.R.id.text2 },
- gattCharacteristicData,
- android.R.layout.simple_expandable_list_item_2,
- new String[] {LIST_NAME, LIST_UUID},
- new int[] { android.R.id.text1, android.R.id.text2 }
- );
- mGattServicesList.setAdapter(gattServiceAdapter);
- }
-
- private static IntentFilter makeGattUpdateIntentFilter() {
- final IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(BluetoothLeService.ACTION_GATT_CONNECTED);
- intentFilter.addAction(BluetoothLeService.ACTION_GATT_DISCONNECTED);
- intentFilter.addAction(BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED);
- intentFilter.addAction(BluetoothLeService.ACTION_DATA_AVAILABLE);
- return intentFilter;
- }
-}
diff --git a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceScanActivity.java b/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceScanActivity.java
deleted file mode 100644
index 1cc954df2..000000000
--- a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/DeviceScanActivity.java
+++ /dev/null
@@ -1,269 +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.example.bluetooth.le;
-
-import android.app.Activity;
-import android.app.ListActivity;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.util.ArrayList;
-import java.util.UUID;
-
-/**
- * Activity for scanning and displaying available Bluetooth LE devices.
- */
-public class DeviceScanActivity extends ListActivity {
- private LeDeviceListAdapter mLeDeviceListAdapter;
- private BluetoothAdapter mBluetoothAdapter;
- private boolean mScanning;
- private Handler mHandler;
-
- private static final int REQUEST_ENABLE_BT = 1;
- // Stops scanning after 10 seconds.
- private static final long SCAN_PERIOD = 10000;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getActionBar().setTitle(R.string.title_devices);
- mHandler = new Handler();
-
- // Use this check to determine whether BLE is supported on the device. Then you can
- // selectively disable BLE-related features.
- if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
- Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
- finish();
- }
-
- // Initializes a Bluetooth adapter. For API level 18 and above, get a reference to
- // BluetoothAdapter through BluetoothManager.
- final BluetoothManager bluetoothManager =
- (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
- mBluetoothAdapter = bluetoothManager.getAdapter();
-
- // Checks if Bluetooth is supported on the device.
- if (mBluetoothAdapter == null) {
- Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
- finish();
- return;
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- if (!mScanning) {
- menu.findItem(R.id.menu_stop).setVisible(false);
- menu.findItem(R.id.menu_scan).setVisible(true);
- menu.findItem(R.id.menu_refresh).setActionView(null);
- } else {
- menu.findItem(R.id.menu_stop).setVisible(true);
- menu.findItem(R.id.menu_scan).setVisible(false);
- menu.findItem(R.id.menu_refresh).setActionView(
- R.layout.actionbar_indeterminate_progress);
- }
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_scan:
- mLeDeviceListAdapter.clear();
- scanLeDevice(true);
- break;
- case R.id.menu_stop:
- scanLeDevice(false);
- break;
- }
- return true;
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- // Ensures Bluetooth is enabled on the device. If Bluetooth is not currently enabled,
- // fire an intent to display a dialog asking the user to grant permission to enable it.
- if (!mBluetoothAdapter.isEnabled()) {
- if (!mBluetoothAdapter.isEnabled()) {
- Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
- startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
- }
- }
-
- // Initializes list view adapter.
- mLeDeviceListAdapter = new LeDeviceListAdapter();
- setListAdapter(mLeDeviceListAdapter);
- scanLeDevice(true);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // User chose not to enable Bluetooth.
- if (requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_CANCELED) {
- finish();
- return;
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- scanLeDevice(false);
- mLeDeviceListAdapter.clear();
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position);
- if (device == null) return;
- final Intent intent = new Intent(this, DeviceControlActivity.class);
- intent.putExtra(DeviceControlActivity.EXTRAS_DEVICE_NAME, device.getName());
- intent.putExtra(DeviceControlActivity.EXTRAS_DEVICE_ADDRESS, device.getAddress());
- if (mScanning) {
- mBluetoothAdapter.stopLeScan(mLeScanCallback);
- mScanning = false;
- }
- startActivity(intent);
- }
-
- private void scanLeDevice(final boolean enable) {
- if (enable) {
- // Stops scanning after a pre-defined scan period.
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mScanning = false;
- mBluetoothAdapter.stopLeScan(mLeScanCallback);
- invalidateOptionsMenu();
- }
- }, SCAN_PERIOD);
-
- mScanning = true;
- mBluetoothAdapter.startLeScan(mLeScanCallback);
- } else {
- mScanning = false;
- mBluetoothAdapter.stopLeScan(mLeScanCallback);
- }
- invalidateOptionsMenu();
- }
-
- // Adapter for holding devices found through scanning.
- private class LeDeviceListAdapter extends BaseAdapter {
- private ArrayList<BluetoothDevice> mLeDevices;
- private LayoutInflater mInflator;
-
- public LeDeviceListAdapter() {
- super();
- mLeDevices = new ArrayList<BluetoothDevice>();
- mInflator = DeviceScanActivity.this.getLayoutInflater();
- }
-
- public void addDevice(BluetoothDevice device) {
- if(!mLeDevices.contains(device)) {
- mLeDevices.add(device);
- }
- }
-
- public BluetoothDevice getDevice(int position) {
- return mLeDevices.get(position);
- }
-
- public void clear() {
- mLeDevices.clear();
- }
-
- @Override
- public int getCount() {
- return mLeDevices.size();
- }
-
- @Override
- public Object getItem(int i) {
- return mLeDevices.get(i);
- }
-
- @Override
- public long getItemId(int i) {
- return i;
- }
-
- @Override
- public View getView(int i, View view, ViewGroup viewGroup) {
- ViewHolder viewHolder;
- // General ListView optimization code.
- if (view == null) {
- view = mInflator.inflate(R.layout.listitem_device, null);
- viewHolder = new ViewHolder();
- viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);
- viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
- view.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) view.getTag();
- }
-
- BluetoothDevice device = mLeDevices.get(i);
- final String deviceName = device.getName();
- if (deviceName != null && deviceName.length() > 0)
- viewHolder.deviceName.setText(deviceName);
- else
- viewHolder.deviceName.setText(R.string.unknown_device);
- viewHolder.deviceAddress.setText(device.getAddress());
-
- return view;
- }
- }
-
- // Device scan callback.
- private BluetoothAdapter.LeScanCallback mLeScanCallback =
- new BluetoothAdapter.LeScanCallback() {
-
- @Override
- public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mLeDeviceListAdapter.addDevice(device);
- mLeDeviceListAdapter.notifyDataSetChanged();
- }
- });
- }
- };
-
- static class ViewHolder {
- TextView deviceName;
- TextView deviceAddress;
- }
-} \ No newline at end of file
diff --git a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/SampleGattAttributes.java b/samples/BluetoothLeGatt/src/com/example/bluetooth/le/SampleGattAttributes.java
deleted file mode 100644
index 255653eb0..000000000
--- a/samples/BluetoothLeGatt/src/com/example/bluetooth/le/SampleGattAttributes.java
+++ /dev/null
@@ -1,42 +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.example.bluetooth.le;
-
-import java.util.HashMap;
-
-/**
- * This class includes a small subset of standard GATT attributes for demonstration purposes.
- */
-public class SampleGattAttributes {
- private static HashMap<String, String> attributes = new HashMap();
- public static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb";
- public static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb";
-
- static {
- // Sample Services.
- attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heart Rate Service");
- attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information Service");
- // Sample Characteristics.
- attributes.put(HEART_RATE_MEASUREMENT, "Heart Rate Measurement");
- attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String");
- }
-
- public static String lookup(String uuid, String defaultName) {
- String name = attributes.get(uuid);
- return name == null ? defaultName : name;
- }
-}
diff --git a/scripts/app_engine_server/memcache_zipserve.py b/scripts/app_engine_server/memcache_zipserve.py
index dfd7de9d0..9c6f42e5b 100644
--- a/scripts/app_engine_server/memcache_zipserve.py
+++ b/scripts/app_engine_server/memcache_zipserve.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
#
# Copyright 2009 Google Inc.
#
@@ -526,6 +527,10 @@ class MemcachedZipHandler(webapp.RequestHandler):
resp_data = None
file_itr = iter(self.zipfilenames)
+ # decode any escape characters in the URI
+ # Note: We are currenty just looking for '@' (%40)
+ file_path = file_path.replace('%40', '@')
+
# check the index, if we have one, to see what archive the file is in
archive_name = self.MapFileToArchive(file_path)
if not archive_name:
diff --git a/scripts/app_engine_server/redirects.yaml b/scripts/app_engine_server/redirects.yaml
index 7cb63792e..465d69225 100644
--- a/scripts/app_engine_server/redirects.yaml
+++ b/scripts/app_engine_server/redirects.yaml
@@ -279,6 +279,11 @@ redirects:
type: permanent
comment: Open Accessory Protocol content has moved to source.android.com.
+- src: /tools/extras/support-library.html
+ dst: /tools/support-library/index.html
+ type: permanent
+ comment: moved Support Library doc to its own directory
+
- src: /guide/topics/usb
dst: /guide/topics/connectivity/usb
type: permanent
diff --git a/sdk/build_tools_source.properties b/sdk/build_tools_source.properties
index c7c8a0537..1ac7da004 100644
--- a/sdk/build_tools_source.properties
+++ b/sdk/build_tools_source.properties
@@ -1,3 +1,3 @@
Pkg.UserSrc=false
-Pkg.Revision=18.0.0
+Pkg.Revision=18.0.1
diff --git a/sdk/plat_tools_source.properties b/sdk/plat_tools_source.properties
index c7c8a0537..1ac7da004 100644
--- a/sdk/plat_tools_source.properties
+++ b/sdk/plat_tools_source.properties
@@ -1,3 +1,3 @@
Pkg.UserSrc=false
-Pkg.Revision=18.0.0
+Pkg.Revision=18.0.1