Commit f884a504 authored by Mac's avatar Mac

Initial commit

parents
File added
MIT License
Copyright (c) 2018 Nuttawut Malee
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# React Native Bluetooth Serial Next :)
[![npm](https://img.shields.io/npm/v/react-native-bluetooth-serial-next.svg?style=popout-square)](https://www.npmjs.com/package/react-native-bluetooth-serial-next) [![NpmLicense](https://img.shields.io/npm/l/react-native-bluetooth-serial-next.svg?style=popout-square)](https://github.com/nuttawutmalee/react-native-bluetooth-serial-next) [![Dependency Status](https://img.shields.io/david/nuttawutmalee/react-native-bluetooth-serial-next.svg?style=popout-square)](https://david-dm.org/nuttawutmalee/react-native-bluetooth-serial-next) [![NPM Downloads](https://img.shields.io/npm/dt/react-native-bluetooth-serial-next.svg?style=popout-square)](https://www.npmjs.com/package/react-native-bluetooth-serial-next)
React Native version of [BluetoothSerial](https://github.com/don/BluetoothSerial) plugin for both Android and iOS. Pulled from [React Native Bluetooth Serial](https://github.com/rusel1989/react-native-bluetooth-serial).
For iOS, this module now support [service declaration](#service-declaration-for-ios), by default, those services are Read Bear Lab, Adafruit BLE, Bluegiga, Laird Virtual Serial Port, and Rongta.
## Table of Contents
- [Getting started](#getting-started)
- [Example](#example)
- [API References](#api-references)
- [Device object](#device-object)
- [Service object](#service-object)
- [High order component](#high-order-component)
- [Methods](#methods)
- [Multiple devices connection](#multiple-devices-connection)
- [Events](#events)
- [Todos](#todos)
## Getting started
```bash
npm install react-native-bluetooth-serial-next --save
react-native link react-native-bluetooth-serial-next
```
For Android, you need to put the following code to `AndroidManifest.xml` in `android/app/src/main` at your project root folder.
```xml
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
```
### Manual Installation
#### iOS
1. `npm install react-native-bluetooth-serial-next --save`
2. In XCode, in the project navigator, right click `Libraries``Add Files to [your project's name]`
3. Go to `node_modules``react-native-bluetooth-serial-next` and add `RCTBluetoothSerial.xcodeproj`
4. In XCode, in the project navigator, select your project. Add `libRCTBluetoothSerial.a` to your project's `Build Phases``Link Binary With Libraries`
5. Click `RCTBluetoothSerial.xcodeproj` in the project navigator and go the `Build Settings` tab. Make sure 'All' is toggled on (instead of 'Basic'). In the `Search Paths` section, look for `Header Search Paths` and make sure it contains both `$(SRCROOT)/../../react-native/React` and `$(SRCROOT)/../../../React` - mark both as `recursive`.
6. Run your project (`Cmd+R`)
#### Android
1. `npm install react-native-bluetooth-serial-next --save`
2. Open up `android/app/src/main/java/[...]/MainActivity.java` or `MainApplication.java` for React Native >= 0.29
<br />
- Add `import com.nuttawutmalee.RCTBluetoothSerial.*;` to the imports at the top of the file
- Add `new RCTBluetoothSerialPackage()` to the list returned by the `getPackages()` method
<br />
3. Append the following lines to `android/settings.gradle`
<br />
```groovy
include ':react-native-bluetooth-serial-next'
project(':react-native-bluetooth-serial-next').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bluetooth-serial-next/android')
```
4. Insert the following lines inside the dependencies block in `android/app/build.gradle`
<br />
```groovy
compile project(':react-native-bluetooth-serial-next')
```
## Example
1. `git clone https://github.com/nuttawutmalee/react-native-bluetooth-serial-next.git`
2. `cd react-native-bluetooth-serial-next/example`
3. `npm install && npm link ../`
4. `npm start`
5. `react-native run-ios` or `react-native run-android`
## API References
### Device object
This is basically the result object from API methods depending on operation system.
**iOS**
```js
{
id: '111-111-111-111',
uuid: '111-111-111-111',
name: 'Bluetooth Printer',
rssi: 'This field might not be present in the object',
}
```
**Android**
```js
{
id: '111-111-111-111',
address: '111-111-111-111',
name: 'Bluetooth Printer',
class: 'This field might not be present in the object',
}
```
### Service object
**iOS**
```js
{
name: 'This field might not be present in the object',
service: 'BLE service UUID string',
read: 'BLE read characteristic UUID string',
write: 'BLE write characteristic UUID string',
}
```
### High order component
#### withSubscription( options : <span style="color:#999;">Object</span> ) : <span style="color:#999;">React.Component</span>
This method will create an event listener and send it though as a component prop and it will remove all event listeners on `componentWillUnmount` as well.
- options : <span style="color:#999;">Object</span>
- subscriptionName : <span style="color:#999;">String</span> = `'subscription'`
The event listener prop name.
- destroyOnWillUnmount : <span style="color:#999;">Boolean</span> = `true`
Should event listeners remove all listeners and subscription
```js
class MyComponent extends React.Component {
...
}
export default withSubscription({
subscriptionName: 'events',
destroyOnWillUnmount: true,
})(MyComponent);
```
### Methods
- [Bluetooth adapter](#bluetooth-adapter)
- [Device pairing](#device-pairing)
- [Device connection](#device-connection)
- [Device IO](#device-io)
- [Device buffer](#device-buffer)
- [Service declaration for iOS](#service-declaration-for-ios)
#### Bluetooth adapter
##### requestEnable() : <span style="color:#999;">Promise\<Boolean></span>
Prompts the application device to enable bluetooth adapter.
- For iOS, this method will throw an error.
- For Android, if the user does not enable bluetooth upon request, it will throw an error.
```js
await BluetoothSerial.requestEnable();
```
##### enable() : <span style="color:#999;">Promise\<Boolean></span>
Enable bluetooth adapter service.
- For iOS, this method will throw an error.
```js
await BluetoothSerial.enable();
```
##### disable() : <span style="color:#999;">Promise\<Boolean></span>
Disable bluetooth adapter service.
- For iOS, this method will throw an error.
```js
await BluetoothSerial.disable();
```
##### isEnabled() : <span style="color:#999;">Promise\<Boolean></span>
Indicates bluetooth adapter service status.
```js
const isEnabled = await BluetoothSerial.isEnabled();
```
##### list() : <span style="color:#999;">Promise\<[Device](#device-object)[]></span>
List all paired (Android) or connected (iOS) bluetooth devices.
```js
const devices = await BluetoothSerial.list();
```
##### listUnpaired() : <span style="color:#999;">Promise\<[Device](#device-object)[]></span> | discoverUnpairedDevices() : <span style="color:#999;">Promise\<[Device](#device-object)[]></span>
List all unpaired bluetooth devices.
```js
const devices = await BluetoothSerial.listUnpaired();
const devices = await BluetoothSerial.discoverUnpairedDevices();
```
##### cancelDiscovery() : <span style="color:#999;">Promise\<Boolean></span> | stopScanning() : <span style="color:#999;">Promise\<Boolean></span>
Cancel bluetooth device discovery process.
```js
await BluetoothSerial.cancelDiscovery();
await BluetoothSerial.stopScanning();
```
##### setAdapterName( name : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<String></span>
Give bluetooth adapter a new name.
- name : <span style="color:#999;">String</span>
Bluetooth adapter new name.
- For iOS, this method will throw an error.
```js
const newName = await BluetoothSerial.setAdapterName("New Adapter Name");
```
---
#### Device pairing
##### pairDevice( id : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<[Device](#device-object) | null></span>
Pair with a bluetooth device.
- id : <span style="color:#999;">String</span>
Device id or uuid.
- For iOS, this method will throw an error.
```js
const device = await BluetoothSerial.pairDevice(id);
```
##### unpairDevice( id : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<[Device](#device-object) | null></span>
Unpair from a bluetooth device.
- id : <span style="color:#999;">String</span>
Device id or uuid.
- For iOS, this method will throw an error.
```js
const device = await BluetoothSerial.unpairDevice(id);
```
---
#### Device connection
##### connect( id : <span style="color:#999;">String</span> ): <span style="color:#999;">Promise\<[Device](#device-object)></span>
Connect to a specific bluetooth device.
- id : <span style="color:#999;">String</span>
Device id or uuid.
```js
const device = await BluetoothSerial.connect(id);
```
##### disconnect( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Boolean></span>
Disconnect from the specific connected bluetooth device. If `id` is omitted, the first connected device will be disconnected.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
await BluetoothSerial.disconnect();
```
##### disconnectAll() : <span style="color:#999;">Promise\<Boolean></span>
Disconnect all connected bluetooth devices.
```js
await BluetoothSerial.disconnectAll();
```
##### isConnected( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Boolean></span>
Indicates the specific connected bluetooth device connection status. If `id` is omitted, it will return the connection status of the first connected device.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const isConnected = await BluetoothSerial.isConnected();
```
---
#### Device IO
##### read( callback : <span style="color:#999;">Function</span>, delimiter? : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">void</span>
Listen and read data from the selected or first connected device.
- callback : <span style="color:#999;">Function</span>
- data : <span style="color:#999;">String</span>
- subscription : <span style="color:#999;">EmitterSubscription</span>
- delimiter? : <span style="color:#999;">String</span> = `''`
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
BluetoothSerial.read((data, subscription) => {
console.log(data);
if (this.imBoredNow && subscription) {
BluetoothSerial.removeSubscription(subscription);
}
}, "\r\n");
```
##### readOnce( delimiter? : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<String></span>
Read data from the selected or first connected device once.
- delimiter? : <span style="color:#999;">String</span> = `''`
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const data = await BluetoothSerial.readOnce("\r\n");
```
##### readEvery( callback : <span style="color:#999;">Function</span>, ms? : <span style="color:#999;">Number</span>, delimiter? : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">void</span>
Read data from the selected or first connected device every n ms.
- callback : <span style="color:#999;">Function</span>
- data : <span style="color:#999;">String</span>
- intervalId : <span style="color:#999;">Number</span>
- ms?: <span style="color:#999;">Number</span> = `1000`
- delimiter? : <span style="color:#999;">String</span> = `''`
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
BluetoothSerial.readEvery(
(data, intervalId) => {
console.log(data);
if (this.imBoredNow && intervalId) {
clearInterval(intervalId);
}
},
5000,
"\r\n"
);
```
##### readFromDevice( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<String></span>
Read all buffer data from the selected or first connected device.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const data = await BluetoothSerial.readFromDevice();
```
##### readUntilDelimiter( delimiter : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<String></span>
Read all buffer data up to certain delimiter from the selected or first connected device.
- delimiter : <span style="color:#999;">String</span>
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const data = await BluetoothSerial.readUntilDelimiter("\r\n");
```
##### write( data : <span style="color:#999;">Buffer | String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Boolean></span>
Write buffer or string to the selected or first connected device.
- data : <span style="color:#999;">Buffer | String</span>
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
await BluetoothSerial.write("This is the test message");
```
##### writeToDevice( data : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Boolean></span>
Write string to the selected or first connected device.
- data : <span style="color:#999;">String</span>
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
await BluetoothSerial.writeToDevice("This is the test message");
```
---
#### Device buffer
##### clear( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Boolean></span>
Clear all buffer data of the selected or first connected device.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
await BluetoothSerial.clear();
```
##### available( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<Number></span>
Get length of current buffer data of the selected or first connected device.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const bufferLength = await BluetoothSerial.available();
```
##### withDelimiter( delimiter : <span style="color:#999;">String</span>, id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Promise\<String | null></span>
Set delimiter that will split the buffer data when you are reading from device.
- delimiter : <span style="color:#999;">String</span>
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
```js
const deviceId = await BluetoothSerial.withDelimiter("\r\n");
```
---
#### Service declaration for iOS
You can get the default services which are Read Bear Lab, Adafruit BLE, Bluegiga, Laird Virtual Serial Port, and Rongta via `BluetoothSerial.DEFAULT_SERVICES` array.
##### setServices( services : <span style="color:#999;">[Service](#service-object)[]</span>, includeDefaultServices? : <span style="color:#999;">Boolean</span> ) : <span style="color:#999;">Promise\<[Service](#service-object)[]></span>
Set custom bluetooth services for filtering out the specific protocols that you need.
- For Android, this method has no effect and will return empty array.
- services : <span style="color:#999;">[Service](#service-object)[]</span>
Array of custom service object; each of them must have `service`, `read`, and `write` key-value.
- includeDefaultServices? : <span style="color:#999;">Boolean</span> = `true`
Should we include `BluetoothSerial.DEFAULT_SERVICES` in the services array?
```js
const updatedServices = await BluetoothSerial.setServices([
name: 'Custom Bluetooth Service',
service: '111-111-111-111-111-111',
read: '111-111-111-111-111-111',
write: '111-111-111-111-111-111',
], false);
```
##### getServices() : <span style="color:#999;">Promise\<[Service](#service-object)[]></span>
Get current services.
- For Android, this method has no effect and will return empty array.
```js
const currentServices = await BluetoothSerial.getServices();
```
##### restoreServices() : <span style="color:#999;">Promise\<[Service](#service-object)[]></span>
Restore services and set them to default services (`BluetoothSerial.DEFAULT_SERVICES`.)
- For Android, this method has no effect and will return empty array.
```js
const services = await BluetoothSerial.restoreServices();
```
### Multiple devices connection
This module supports multiple devices connection, as you can see in [API Methods](#methods), most of the connection, IO, and buffer methods have `id` parameter that you can pass and specify which bluetooth device that you want to control.
However, to keep it clean and simple, you can use the following method to simplify them.
#### device( id? : <span style="color:#999;">String</span> ) : <span style="color:#999;">Object</span>
This method gives the ability to call group of API methods instead of pass `id` parameter at the end of each methods.
- id? : <span style="color:#999;">String</span>
Optional device id or uuid.
The followings are group of methods that you can use with this method.
- `connect`
- `disconnect`
- `isConnected`
- `clear`
- `available`
- `withDelimiter`
- `read`
- `readOnce`
- `readEvery`
- `readUntilDelimiter`
- `readFromDevice`
- `write`
- `writeToDevice`
```js
const myDevice = BluetoothSerial.device(myId);
const yourDevice = BluetoothSerial.device(yourId);
await myDevice.connect();
await myDevice.write('This is a message for my device.');
let yourReadSubscription;
await yourDevice.connect();
await yourDevice.read((data, subscription) => {
yourReadSubscription = subscription;
console.log('Your data:', data);
if (/** */) {
BluetoothSerial.removeSubscription(subscription);
yourReadSubscription = null;
}
});
await myDevice.disconnect();
if (yourReadSubscription) {
BluetoothSerial.removeSubscription(yourReadSubscription);
}
await yourDevice.disconnect();
```
### Events
#### Types
- `bluetoothEnabled` : When bluetooth adapter is turned on.
- `bluetoothDisabled` : When bluetooth adapter is turned off.
- `connectionSuccess` : When device is connected. You get object of message and [device](#device-object).
```js
{
message: ...,
device: {
...
}
}
```
- `connectionFailed` : When you failed to connect to the device. You get object of message and [device](#device-object).
```js
{
message: ...,
device: {
...
}
}
```
- `connectionLost` : When the device connection is lost. You get object of message and [device](#device-object).
```js
{
message: ...,
device: {
...
}
}
```
- `read` or `data` : String of data from device. You get object of device id and data.
```js
{
id: ...,
data: ...
}
```
- `error` : Error message from native code.
```js
{
message: ...
}
```
#### Methods
##### once( eventName : <span style="color:#999;">String</span>, handler : <span style="color:#999;">Function</span> ) : <span style="color:#999;">EmitterSubscription</span>
##### on( eventName : <span style="color:#999;">String</span>, handler : <span style="color:#999;">Function</span> ) : <span style="color:#999;">EmitterSubscription</span>
##### addListener( eventName : <span style="color:#999;">String</span>, handler : <span style="color:#999;">Function</span> ) : <span style="color:#999;">EmitterSubscription</span>
##### off( eventName : <span style="color:#999;">String</span>, handler : <span style="color:#999;">Function</span> ) : <span style="color:#999;">void</span>
##### removeListener( eventName : <span style="color:#999;">String</span>, handler : <span style="color:#999;">Function</span> ) : <span style="color:#999;">void</span>
##### removeAllListeners( eventName? : <span style="color:#999;">String</span> ) : <span style="color:#999;">void</span>
##### removeSubscription( subscription : <span style="color:#999;">EmitterSubscription</span>) : <span style="color:#999;">void</span>
## Todos
- Write base64 image.
#Sat Nov 10 20:28:38 ICT 2018
gradle.version=4.6
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
</code_scheme>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: __local_aars__:/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/android/libs/btsdk.jar:unspecified@jar">
<CLASSES>
<root url="jar://$PROJECT_DIR$/libs/btsdk.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.android.support:appcompat-v7-23.0.1">
<ANNOTATIONS>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/appcompat-v7-23.0.1.aar/5a0504d86ec7c802f9b78583d9d45f30/annotations.zip!/" />
</ANNOTATIONS>
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/appcompat-v7-23.0.1.aar/5a0504d86ec7c802f9b78583d9d45f30/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/appcompat-v7-23.0.1.aar/5a0504d86ec7c802f9b78583d9d45f30/jars/classes.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/23.0.1/appcompat-v7-23.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/23.0.1/appcompat-v7-23.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.android.support:recyclerview-v7-23.0.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/recyclerview-v7-23.0.1.aar/5d5fffc474d035876a30a71ff475a790/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/recyclerview-v7-23.0.1.aar/5d5fffc474d035876a30a71ff475a790/res" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/recyclerview-v7/23.0.1/recyclerview-v7-23.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/recyclerview-v7/23.0.1/recyclerview-v7-23.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.android.support:support-annotations:23.0.1@jar">
<CLASSES>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/23.0.1/support-annotations-23.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/23.0.1/support-annotations-23.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/23.0.1/support-annotations-23.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.android.support:support-v4-23.0.1">
<ANNOTATIONS>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-23.0.1.aar/916375e7826d997272f9a39a7596249a/annotations.zip!/" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-23.0.1.aar/916375e7826d997272f9a39a7596249a/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-23.0.1.aar/916375e7826d997272f9a39a7596249a/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-23.0.1.aar/916375e7826d997272f9a39a7596249a/jars/libs/internal_impl-23.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-v4/23.0.1/support-v4-23.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-v4/23.0.1/support-v4-23.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.fresco:drawee-0.8.1">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/drawee-0.8.1.aar/d7ddbcf6a0bea6f06cfd7a9c497def15/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/drawee-0.8.1.aar/d7ddbcf6a0bea6f06cfd7a9c497def15/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fresco/drawee/0.8.1/52ad2393e92426a182609ccf741b266b654a5edf/drawee-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.fresco:fbcore-0.8.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/fbcore-0.8.1.aar/5c4ecb0d6907f4388a62c37f8edb510e/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/fbcore-0.8.1.aar/5c4ecb0d6907f4388a62c37f8edb510e/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fresco/fbcore/0.8.1/c177b792eb9b4e333b32a23d909ad1249cb9bc30/fbcore-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.fresco:fresco-0.8.1">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/fresco-0.8.1.aar/9927ce629a64446099813a17306dad2c/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/fresco-0.8.1.aar/9927ce629a64446099813a17306dad2c/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fresco/fresco/0.8.1/8a7967e8ee4adfa7b0d549bfcd6d0fea06517576/fresco-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.fresco:imagepipeline-0.8.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/imagepipeline-0.8.1.aar/f33b6208e67db123e3883e29cc40caf2/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/imagepipeline-0.8.1.aar/f33b6208e67db123e3883e29cc40caf2/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fresco/imagepipeline/0.8.1/e2da70443d289100ae6490fbddf0ff6bfbc2c5da/imagepipeline-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.fresco:imagepipeline-okhttp-0.8.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/imagepipeline-okhttp-0.8.1.aar/708a32d3d6a5b076e38cb9ad493d1f77/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/imagepipeline-okhttp-0.8.1.aar/708a32d3d6a5b076e38cb9ad493d1f77/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fresco/imagepipeline-okhttp/0.8.1/3728771840c2e71c5c598432fe1c0a617df81bb7/imagepipeline-okhttp-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.react:react-native-0.20.1">
<ANNOTATIONS>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/react-native-0.20.1.aar/8e2263f79994acbaa7cda8d3e8d5cd09/annotations.zip!/" />
</ANNOTATIONS>
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/react-native-0.20.1.aar/8e2263f79994acbaa7cda8d3e8d5cd09/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/react-native-0.20.1.aar/8e2263f79994acbaa7cda8d3e8d5cd09/jars/classes.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/react-native-0.20.1.aar/8e2263f79994acbaa7cda8d3e8d5cd09/jars/libs/infer-annotations-1.5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.react/react-native/0.20.1/aca865df36322fa13483c10dd4898f320b225ec0/react-native-0.20.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.stetho:stetho:1.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.2.0/1d6cdb8ce8185b8b23213fad48a83987fb6d2d67/stetho-1.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.2.0/21a9c64d90f22bcf39433aa39c2c0aa3ab2b6370/stetho-1.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.facebook.stetho:stetho-okhttp:1.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho-okhttp/1.2.0/6c5c9380e245c4ff5be2b2a49dcbb0200c39798e/stetho-okhttp-1.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho-okhttp/1.2.0/a82478de4c006934b92c7481da0df84a78432e4f/stetho-okhttp-1.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.fasterxml.jackson.core:jackson-core:2.2.3@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.2.3/1a0113da2cab5f4c216b4e5e7c1dbfaa67087e14/jackson-core-2.2.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.2.3/b1c4a6c3c26dfc425efd53c00217868b60d07de9/jackson-core-2.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.google.code.findbugs:jsr305:3.0.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.0/5871fb60dc68d67da54a663c3fd636a10a532948/jsr305-3.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.0/936f4430478909ed7b138d42f9ad73c919a87b26/jsr305-3.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.nineoldandroids:library:2.4.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.nineoldandroids/library/2.4.0/e9b63380f3a242dbdbf103a2355ad7e43bad17cb/library-2.4.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.nineoldandroids/library/2.4.0/83d41901478fa8795254244acbafd03f14224dab/library-2.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.parse.bolts:bolts-android:1.1.4@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.1.4/129874135e6081269ace2312092031558865de12/bolts-android-1.1.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.1.4/8bcc005d44a1cbc01c8458dbe125617a387036c0/bolts-android-1.1.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.squareup.okhttp:okhttp:2.5.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp/2.5.0/4de2b4ed3445c37ec1720a7d214712e845a24636/okhttp-2.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp/2.5.0/cd4ddf1fb4ad84ea5d67ee3b386aea25f02ea096/okhttp-2.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.squareup.okhttp:okhttp-ws:2.5.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp-ws/2.5.0/e9753b7dcae5deca92e871c5c759067070b07bc/okhttp-ws-2.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp-ws/2.5.0/11ea3308217730b76179c72dad396736ca151ab6/okhttp-ws-2.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: com.squareup.okio:okio:1.6.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.6.0/98476622f10715998eacf9240d6b479f12c66143/okio-1.6.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.6.0/fb6ec0fbaa0229088b0d3dfe3b1f9d24add3e775/okio-1.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: commons-cli:commons-cli:1.2@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/6c5459816530a1962ac18cd315cc775b1b384329/commons-cli-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Gradle: org.webkit:android-jsc-r174650">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/android-jsc-r174650.aar/6566167b43ba8d7e628fb7eaf8951b31/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/android-jsc-r174650.aar/6566167b43ba8d7e628fb7eaf8951b31/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="7">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="6">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/android.iml" filepath="$PROJECT_DIR$/android.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="android" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debug/generateDebugRFile/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debugAndroidTest/processDebugAndroidTestResources/r" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_typedef_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_zip" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/attr" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/consumer_proguard_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_and_local_jars_jni" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged-aidl" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packagedAssets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: com.nineoldandroids:library:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp:okhttp-ws:2.5.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:fresco-0.8.1" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-23.0.1" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-23.0.1" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:fbcore-0.8.1" level="project" />
<orderEntry type="library" name="Gradle: commons-cli:commons-cli:1.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.parse.bolts:bolts-android:1.1.4@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp:okhttp:2.5.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.react:react-native-0.20.1" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/android/libs/btsdk.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-v4-23.0.1" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.6.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-0.8.1" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.stetho:stetho-okhttp:1.2.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:23.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.fasterxml.jackson.core:jackson-core:2.2.3@jar" level="project" />
<orderEntry type="library" name="Gradle: org.webkit:android-jsc-r174650" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-okhttp-0.8.1" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.stetho:stetho:1.2.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:drawee-0.8.1" level="project" />
</component>
</module>
\ No newline at end of file
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
}
repositories {
jcenter()
google()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
dependencies {
implementation files('libs/btsdk.jar')
implementation 'com.facebook.react:react-native:+'
}
\ No newline at end of file
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.nuttawutmalee.RCTBluetoothSerial;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.nuttawutmalee.RCTBluetoothSerial";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.arch.core;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.arch.lifecycle;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.arch.lifecycle.livedata.core;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.arch.lifecycle.viewmodel;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.compat;
public final class R {
public static final class attr {
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int chronometer = 0x7f0c0021;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
}
public static final class styleable {
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.coreui;
public final class R {
public static final class attr {
public static int coordinatorLayoutStyle = 0x7f040063;
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
public static int keylines = 0x7f040092;
public static int layout_anchor = 0x7f040094;
public static int layout_anchorGravity = 0x7f040095;
public static int layout_behavior = 0x7f040096;
public static int layout_dodgeInsetEdges = 0x7f040097;
public static int layout_insetEdge = 0x7f040098;
public static int layout_keyline = 0x7f040099;
public static int statusBarBackground = 0x7f0400ea;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int bottom = 0x7f0c001a;
public static int chronometer = 0x7f0c0021;
public static int end = 0x7f0c0028;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int left = 0x7f0c0039;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int none = 0x7f0c0040;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right = 0x7f0c004a;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int start = 0x7f0c006c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
public static int top = 0x7f0c0079;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
public static int Widget_Support_CoordinatorLayout = 0x7f160168;
}
public static final class styleable {
public static int[] CoordinatorLayout = { 0x7f040092, 0x7f0400ea };
public static int CoordinatorLayout_keylines = 0;
public static int CoordinatorLayout_statusBarBackground = 1;
public static int[] CoordinatorLayout_Layout = { 0x010100b3, 0x7f040094, 0x7f040095, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099 };
public static int CoordinatorLayout_Layout_android_layout_gravity = 0;
public static int CoordinatorLayout_Layout_layout_anchor = 1;
public static int CoordinatorLayout_Layout_layout_anchorGravity = 2;
public static int CoordinatorLayout_Layout_layout_behavior = 3;
public static int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 4;
public static int CoordinatorLayout_Layout_layout_insetEdge = 5;
public static int CoordinatorLayout_Layout_layout_keyline = 6;
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.coreutils;
public final class R {
public static final class attr {
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int chronometer = 0x7f0c0021;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
}
public static final class styleable {
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.fragment;
public final class R {
public static final class attr {
public static int coordinatorLayoutStyle = 0x7f040063;
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
public static int keylines = 0x7f040092;
public static int layout_anchor = 0x7f040094;
public static int layout_anchorGravity = 0x7f040095;
public static int layout_behavior = 0x7f040096;
public static int layout_dodgeInsetEdges = 0x7f040097;
public static int layout_insetEdge = 0x7f040098;
public static int layout_keyline = 0x7f040099;
public static int statusBarBackground = 0x7f0400ea;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int bottom = 0x7f0c001a;
public static int chronometer = 0x7f0c0021;
public static int end = 0x7f0c0028;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int left = 0x7f0c0039;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int none = 0x7f0c0040;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right = 0x7f0c004a;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int start = 0x7f0c006c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
public static int top = 0x7f0c0079;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
public static int Widget_Support_CoordinatorLayout = 0x7f160168;
}
public static final class styleable {
public static int[] CoordinatorLayout = { 0x7f040092, 0x7f0400ea };
public static int CoordinatorLayout_keylines = 0;
public static int CoordinatorLayout_statusBarBackground = 1;
public static int[] CoordinatorLayout_Layout = { 0x010100b3, 0x7f040094, 0x7f040095, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099 };
public static int CoordinatorLayout_Layout_android_layout_gravity = 0;
public static int CoordinatorLayout_Layout_layout_anchor = 1;
public static int CoordinatorLayout_Layout_layout_anchorGravity = 2;
public static int CoordinatorLayout_Layout_layout_behavior = 3;
public static int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 4;
public static int CoordinatorLayout_Layout_layout_insetEdge = 5;
public static int CoordinatorLayout_Layout_layout_keyline = 6;
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.graphics.drawable;
public final class R {
public static final class attr {
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int chronometer = 0x7f0c0021;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
}
public static final class styleable {
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package android.support.graphics.drawable.animated;
public final class R {
public static final class attr {
public static int coordinatorLayoutStyle = 0x7f040063;
public static int font = 0x7f040079;
public static int fontProviderAuthority = 0x7f04007b;
public static int fontProviderCerts = 0x7f04007c;
public static int fontProviderFetchStrategy = 0x7f04007d;
public static int fontProviderFetchTimeout = 0x7f04007e;
public static int fontProviderPackage = 0x7f04007f;
public static int fontProviderQuery = 0x7f040080;
public static int fontStyle = 0x7f040081;
public static int fontWeight = 0x7f040082;
public static int keylines = 0x7f040092;
public static int layout_anchor = 0x7f040094;
public static int layout_anchorGravity = 0x7f040095;
public static int layout_behavior = 0x7f040096;
public static int layout_dodgeInsetEdges = 0x7f040097;
public static int layout_insetEdge = 0x7f040098;
public static int layout_keyline = 0x7f040099;
public static int statusBarBackground = 0x7f0400ea;
}
public static final class bool {
public static int abc_action_bar_embed_tabs = 0x7f050001;
}
public static final class color {
public static int notification_action_color_filter = 0x7f06003d;
public static int notification_icon_bg_color = 0x7f06003e;
public static int ripple_material_light = 0x7f060048;
public static int secondary_text_default_material_light = 0x7f06004a;
}
public static final class dimen {
public static int compat_button_inset_horizontal_material = 0x7f08004c;
public static int compat_button_inset_vertical_material = 0x7f08004d;
public static int compat_button_padding_horizontal_material = 0x7f08004e;
public static int compat_button_padding_vertical_material = 0x7f08004f;
public static int compat_control_corner_material = 0x7f080050;
public static int notification_action_icon_size = 0x7f08005a;
public static int notification_action_text_size = 0x7f08005b;
public static int notification_big_circle_margin = 0x7f08005c;
public static int notification_content_margin_start = 0x7f08005d;
public static int notification_large_icon_height = 0x7f08005e;
public static int notification_large_icon_width = 0x7f08005f;
public static int notification_main_column_padding_top = 0x7f080060;
public static int notification_media_narrow_margin = 0x7f080061;
public static int notification_right_icon_size = 0x7f080062;
public static int notification_right_side_padding_top = 0x7f080063;
public static int notification_small_icon_background_padding = 0x7f080064;
public static int notification_small_icon_size_as_large = 0x7f080065;
public static int notification_subtext_size = 0x7f080066;
public static int notification_top_pad = 0x7f080067;
public static int notification_top_pad_large_text = 0x7f080068;
}
public static final class drawable {
public static int notification_action_background = 0x7f090054;
public static int notification_bg = 0x7f090055;
public static int notification_bg_low = 0x7f090056;
public static int notification_bg_low_normal = 0x7f090057;
public static int notification_bg_low_pressed = 0x7f090058;
public static int notification_bg_normal = 0x7f090059;
public static int notification_bg_normal_pressed = 0x7f09005a;
public static int notification_icon_background = 0x7f09005b;
public static int notification_template_icon_bg = 0x7f09005c;
public static int notification_template_icon_low_bg = 0x7f09005d;
public static int notification_tile_bg = 0x7f09005e;
public static int notify_panel_notification_icon_bg = 0x7f09005f;
}
public static final class id {
public static int action_container = 0x7f0c000a;
public static int action_divider = 0x7f0c000c;
public static int action_image = 0x7f0c000d;
public static int action_text = 0x7f0c0013;
public static int actions = 0x7f0c0014;
public static int async = 0x7f0c0018;
public static int blocking = 0x7f0c0019;
public static int bottom = 0x7f0c001a;
public static int chronometer = 0x7f0c0021;
public static int end = 0x7f0c0028;
public static int forever = 0x7f0c0031;
public static int icon = 0x7f0c0034;
public static int icon_group = 0x7f0c0035;
public static int info = 0x7f0c0037;
public static int italic = 0x7f0c0038;
public static int left = 0x7f0c0039;
public static int line1 = 0x7f0c003a;
public static int line3 = 0x7f0c003b;
public static int none = 0x7f0c0040;
public static int normal = 0x7f0c0041;
public static int notification_background = 0x7f0c0042;
public static int notification_main_column = 0x7f0c0043;
public static int notification_main_column_container = 0x7f0c0044;
public static int right = 0x7f0c004a;
public static int right_icon = 0x7f0c004b;
public static int right_side = 0x7f0c004c;
public static int start = 0x7f0c006c;
public static int tag_transition_group = 0x7f0c0070;
public static int text = 0x7f0c0071;
public static int text2 = 0x7f0c0072;
public static int time = 0x7f0c0075;
public static int title = 0x7f0c0076;
public static int top = 0x7f0c0079;
}
public static final class integer {
public static int status_bar_notification_info_maxnum = 0x7f0d0005;
}
public static final class layout {
public static int notification_action = 0x7f0f001e;
public static int notification_action_tombstone = 0x7f0f001f;
public static int notification_template_custom_big = 0x7f0f0020;
public static int notification_template_icon_group = 0x7f0f0021;
public static int notification_template_part_chronometer = 0x7f0f0022;
public static int notification_template_part_time = 0x7f0f0023;
}
public static final class string {
public static int status_bar_notification_info_overflow = 0x7f15003c;
}
public static final class style {
public static int TextAppearance_Compat_Notification = 0x7f1600f2;
public static int TextAppearance_Compat_Notification_Info = 0x7f1600f3;
public static int TextAppearance_Compat_Notification_Line2 = 0x7f1600f4;
public static int TextAppearance_Compat_Notification_Time = 0x7f1600f5;
public static int TextAppearance_Compat_Notification_Title = 0x7f1600f6;
public static int Widget_Compat_NotificationActionContainer = 0x7f160166;
public static int Widget_Compat_NotificationActionText = 0x7f160167;
public static int Widget_Support_CoordinatorLayout = 0x7f160168;
}
public static final class styleable {
public static int[] CoordinatorLayout = { 0x7f040092, 0x7f0400ea };
public static int CoordinatorLayout_keylines = 0;
public static int CoordinatorLayout_statusBarBackground = 1;
public static int[] CoordinatorLayout_Layout = { 0x010100b3, 0x7f040094, 0x7f040095, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099 };
public static int CoordinatorLayout_Layout_android_layout_gravity = 0;
public static int CoordinatorLayout_Layout_layout_anchor = 1;
public static int CoordinatorLayout_Layout_layout_anchorGravity = 2;
public static int CoordinatorLayout_Layout_layout_behavior = 3;
public static int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 4;
public static int CoordinatorLayout_Layout_layout_insetEdge = 5;
public static int CoordinatorLayout_Layout_layout_keyline = 6;
public static int[] FontFamily = { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 };
public static int FontFamily_fontProviderAuthority = 0;
public static int FontFamily_fontProviderCerts = 1;
public static int FontFamily_fontProviderFetchStrategy = 2;
public static int FontFamily_fontProviderFetchTimeout = 3;
public static int FontFamily_fontProviderPackage = 4;
public static int FontFamily_fontProviderQuery = 5;
public static int[] FontFamilyFont = { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 };
public static int FontFamilyFont_android_font = 0;
public static int FontFamilyFont_android_fontStyle = 1;
public static int FontFamilyFont_android_fontWeight = 2;
public static int FontFamilyFont_font = 3;
public static int FontFamilyFont_fontStyle = 4;
public static int FontFamilyFont_fontWeight = 5;
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.drawee;
public final class R {
public static final class attr {
public static int actualImageResource = 0x7f040023;
public static int actualImageScaleType = 0x7f040024;
public static int actualImageUri = 0x7f040025;
public static int backgroundImage = 0x7f040036;
public static int fadeDuration = 0x7f040076;
public static int failureImage = 0x7f040077;
public static int failureImageScaleType = 0x7f040078;
public static int overlayImage = 0x7f0400af;
public static int placeholderImage = 0x7f0400b7;
public static int placeholderImageScaleType = 0x7f0400b8;
public static int pressedStateOverlayImage = 0x7f0400bd;
public static int progressBarAutoRotateInterval = 0x7f0400be;
public static int progressBarImage = 0x7f0400bf;
public static int progressBarImageScaleType = 0x7f0400c0;
public static int retryImage = 0x7f0400c9;
public static int retryImageScaleType = 0x7f0400ca;
public static int roundAsCircle = 0x7f0400cb;
public static int roundBottomEnd = 0x7f0400cc;
public static int roundBottomLeft = 0x7f0400cd;
public static int roundBottomRight = 0x7f0400ce;
public static int roundBottomStart = 0x7f0400cf;
public static int roundTopEnd = 0x7f0400d0;
public static int roundTopLeft = 0x7f0400d1;
public static int roundTopRight = 0x7f0400d2;
public static int roundTopStart = 0x7f0400d3;
public static int roundWithOverlayColor = 0x7f0400d4;
public static int roundedCornerRadius = 0x7f0400d5;
public static int roundingBorderColor = 0x7f0400d6;
public static int roundingBorderPadding = 0x7f0400d7;
public static int roundingBorderWidth = 0x7f0400d8;
public static int viewAspectRatio = 0x7f04011d;
}
public static final class id {
public static int center = 0x7f0c001d;
public static int centerCrop = 0x7f0c001e;
public static int centerInside = 0x7f0c001f;
public static int fitBottomStart = 0x7f0c002b;
public static int fitCenter = 0x7f0c002c;
public static int fitEnd = 0x7f0c002d;
public static int fitStart = 0x7f0c002e;
public static int fitXY = 0x7f0c002f;
public static int focusCrop = 0x7f0c0030;
public static int none = 0x7f0c0040;
}
public static final class styleable {
public static int[] GenericDraweeHierarchy = { 0x7f040024, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d };
public static int GenericDraweeHierarchy_actualImageScaleType = 0;
public static int GenericDraweeHierarchy_backgroundImage = 1;
public static int GenericDraweeHierarchy_fadeDuration = 2;
public static int GenericDraweeHierarchy_failureImage = 3;
public static int GenericDraweeHierarchy_failureImageScaleType = 4;
public static int GenericDraweeHierarchy_overlayImage = 5;
public static int GenericDraweeHierarchy_placeholderImage = 6;
public static int GenericDraweeHierarchy_placeholderImageScaleType = 7;
public static int GenericDraweeHierarchy_pressedStateOverlayImage = 8;
public static int GenericDraweeHierarchy_progressBarAutoRotateInterval = 9;
public static int GenericDraweeHierarchy_progressBarImage = 10;
public static int GenericDraweeHierarchy_progressBarImageScaleType = 11;
public static int GenericDraweeHierarchy_retryImage = 12;
public static int GenericDraweeHierarchy_retryImageScaleType = 13;
public static int GenericDraweeHierarchy_roundAsCircle = 14;
public static int GenericDraweeHierarchy_roundBottomEnd = 15;
public static int GenericDraweeHierarchy_roundBottomLeft = 16;
public static int GenericDraweeHierarchy_roundBottomRight = 17;
public static int GenericDraweeHierarchy_roundBottomStart = 18;
public static int GenericDraweeHierarchy_roundTopEnd = 19;
public static int GenericDraweeHierarchy_roundTopLeft = 20;
public static int GenericDraweeHierarchy_roundTopRight = 21;
public static int GenericDraweeHierarchy_roundTopStart = 22;
public static int GenericDraweeHierarchy_roundWithOverlayColor = 23;
public static int GenericDraweeHierarchy_roundedCornerRadius = 24;
public static int GenericDraweeHierarchy_roundingBorderColor = 25;
public static int GenericDraweeHierarchy_roundingBorderPadding = 26;
public static int GenericDraweeHierarchy_roundingBorderWidth = 27;
public static int GenericDraweeHierarchy_viewAspectRatio = 28;
public static int[] SimpleDraweeView = { 0x7f040023, 0x7f040024, 0x7f040025, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d };
public static int SimpleDraweeView_actualImageResource = 0;
public static int SimpleDraweeView_actualImageScaleType = 1;
public static int SimpleDraweeView_actualImageUri = 2;
public static int SimpleDraweeView_backgroundImage = 3;
public static int SimpleDraweeView_fadeDuration = 4;
public static int SimpleDraweeView_failureImage = 5;
public static int SimpleDraweeView_failureImageScaleType = 6;
public static int SimpleDraweeView_overlayImage = 7;
public static int SimpleDraweeView_placeholderImage = 8;
public static int SimpleDraweeView_placeholderImageScaleType = 9;
public static int SimpleDraweeView_pressedStateOverlayImage = 10;
public static int SimpleDraweeView_progressBarAutoRotateInterval = 11;
public static int SimpleDraweeView_progressBarImage = 12;
public static int SimpleDraweeView_progressBarImageScaleType = 13;
public static int SimpleDraweeView_retryImage = 14;
public static int SimpleDraweeView_retryImageScaleType = 15;
public static int SimpleDraweeView_roundAsCircle = 16;
public static int SimpleDraweeView_roundBottomEnd = 17;
public static int SimpleDraweeView_roundBottomLeft = 18;
public static int SimpleDraweeView_roundBottomRight = 19;
public static int SimpleDraweeView_roundBottomStart = 20;
public static int SimpleDraweeView_roundTopEnd = 21;
public static int SimpleDraweeView_roundTopLeft = 22;
public static int SimpleDraweeView_roundTopRight = 23;
public static int SimpleDraweeView_roundTopStart = 24;
public static int SimpleDraweeView_roundWithOverlayColor = 25;
public static int SimpleDraweeView_roundedCornerRadius = 26;
public static int SimpleDraweeView_roundingBorderColor = 27;
public static int SimpleDraweeView_roundingBorderPadding = 28;
public static int SimpleDraweeView_roundingBorderWidth = 29;
public static int SimpleDraweeView_viewAspectRatio = 30;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.drawee.backends.pipeline;
public final class R {
public static final class attr {
public static int actualImageResource = 0x7f040023;
public static int actualImageScaleType = 0x7f040024;
public static int actualImageUri = 0x7f040025;
public static int backgroundImage = 0x7f040036;
public static int fadeDuration = 0x7f040076;
public static int failureImage = 0x7f040077;
public static int failureImageScaleType = 0x7f040078;
public static int overlayImage = 0x7f0400af;
public static int placeholderImage = 0x7f0400b7;
public static int placeholderImageScaleType = 0x7f0400b8;
public static int pressedStateOverlayImage = 0x7f0400bd;
public static int progressBarAutoRotateInterval = 0x7f0400be;
public static int progressBarImage = 0x7f0400bf;
public static int progressBarImageScaleType = 0x7f0400c0;
public static int retryImage = 0x7f0400c9;
public static int retryImageScaleType = 0x7f0400ca;
public static int roundAsCircle = 0x7f0400cb;
public static int roundBottomEnd = 0x7f0400cc;
public static int roundBottomLeft = 0x7f0400cd;
public static int roundBottomRight = 0x7f0400ce;
public static int roundBottomStart = 0x7f0400cf;
public static int roundTopEnd = 0x7f0400d0;
public static int roundTopLeft = 0x7f0400d1;
public static int roundTopRight = 0x7f0400d2;
public static int roundTopStart = 0x7f0400d3;
public static int roundWithOverlayColor = 0x7f0400d4;
public static int roundedCornerRadius = 0x7f0400d5;
public static int roundingBorderColor = 0x7f0400d6;
public static int roundingBorderPadding = 0x7f0400d7;
public static int roundingBorderWidth = 0x7f0400d8;
public static int viewAspectRatio = 0x7f04011d;
}
public static final class id {
public static int center = 0x7f0c001d;
public static int centerCrop = 0x7f0c001e;
public static int centerInside = 0x7f0c001f;
public static int fitBottomStart = 0x7f0c002b;
public static int fitCenter = 0x7f0c002c;
public static int fitEnd = 0x7f0c002d;
public static int fitStart = 0x7f0c002e;
public static int fitXY = 0x7f0c002f;
public static int focusCrop = 0x7f0c0030;
public static int none = 0x7f0c0040;
}
public static final class styleable {
public static int[] GenericDraweeHierarchy = { 0x7f040024, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d };
public static int GenericDraweeHierarchy_actualImageScaleType = 0;
public static int GenericDraweeHierarchy_backgroundImage = 1;
public static int GenericDraweeHierarchy_fadeDuration = 2;
public static int GenericDraweeHierarchy_failureImage = 3;
public static int GenericDraweeHierarchy_failureImageScaleType = 4;
public static int GenericDraweeHierarchy_overlayImage = 5;
public static int GenericDraweeHierarchy_placeholderImage = 6;
public static int GenericDraweeHierarchy_placeholderImageScaleType = 7;
public static int GenericDraweeHierarchy_pressedStateOverlayImage = 8;
public static int GenericDraweeHierarchy_progressBarAutoRotateInterval = 9;
public static int GenericDraweeHierarchy_progressBarImage = 10;
public static int GenericDraweeHierarchy_progressBarImageScaleType = 11;
public static int GenericDraweeHierarchy_retryImage = 12;
public static int GenericDraweeHierarchy_retryImageScaleType = 13;
public static int GenericDraweeHierarchy_roundAsCircle = 14;
public static int GenericDraweeHierarchy_roundBottomEnd = 15;
public static int GenericDraweeHierarchy_roundBottomLeft = 16;
public static int GenericDraweeHierarchy_roundBottomRight = 17;
public static int GenericDraweeHierarchy_roundBottomStart = 18;
public static int GenericDraweeHierarchy_roundTopEnd = 19;
public static int GenericDraweeHierarchy_roundTopLeft = 20;
public static int GenericDraweeHierarchy_roundTopRight = 21;
public static int GenericDraweeHierarchy_roundTopStart = 22;
public static int GenericDraweeHierarchy_roundWithOverlayColor = 23;
public static int GenericDraweeHierarchy_roundedCornerRadius = 24;
public static int GenericDraweeHierarchy_roundingBorderColor = 25;
public static int GenericDraweeHierarchy_roundingBorderPadding = 26;
public static int GenericDraweeHierarchy_roundingBorderWidth = 27;
public static int GenericDraweeHierarchy_viewAspectRatio = 28;
public static int[] SimpleDraweeView = { 0x7f040023, 0x7f040024, 0x7f040025, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d };
public static int SimpleDraweeView_actualImageResource = 0;
public static int SimpleDraweeView_actualImageScaleType = 1;
public static int SimpleDraweeView_actualImageUri = 2;
public static int SimpleDraweeView_backgroundImage = 3;
public static int SimpleDraweeView_fadeDuration = 4;
public static int SimpleDraweeView_failureImage = 5;
public static int SimpleDraweeView_failureImageScaleType = 6;
public static int SimpleDraweeView_overlayImage = 7;
public static int SimpleDraweeView_placeholderImage = 8;
public static int SimpleDraweeView_placeholderImageScaleType = 9;
public static int SimpleDraweeView_pressedStateOverlayImage = 10;
public static int SimpleDraweeView_progressBarAutoRotateInterval = 11;
public static int SimpleDraweeView_progressBarImage = 12;
public static int SimpleDraweeView_progressBarImageScaleType = 13;
public static int SimpleDraweeView_retryImage = 14;
public static int SimpleDraweeView_retryImageScaleType = 15;
public static int SimpleDraweeView_roundAsCircle = 16;
public static int SimpleDraweeView_roundBottomEnd = 17;
public static int SimpleDraweeView_roundBottomLeft = 18;
public static int SimpleDraweeView_roundBottomRight = 19;
public static int SimpleDraweeView_roundBottomStart = 20;
public static int SimpleDraweeView_roundTopEnd = 21;
public static int SimpleDraweeView_roundTopLeft = 22;
public static int SimpleDraweeView_roundTopRight = 23;
public static int SimpleDraweeView_roundTopStart = 24;
public static int SimpleDraweeView_roundWithOverlayColor = 25;
public static int SimpleDraweeView_roundedCornerRadius = 26;
public static int SimpleDraweeView_roundingBorderColor = 27;
public static int SimpleDraweeView_roundingBorderPadding = 28;
public static int SimpleDraweeView_roundingBorderWidth = 29;
public static int SimpleDraweeView_viewAspectRatio = 30;
}
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.fbcore;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.imagepipeline;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.imagepipeline.backends.okhttp3;
public final class R {
}
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.imagepipelinebase;
public final class R {
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package com.facebook.soloader;
public final class R {
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* gradle plugin from the resource data it found. It
* should not be modified by hand.
*/
package org.webkit.android_jsc;
public final class R {
}
int attr absListViewStyle 0x0101006a
int attr accessibilityEventTypes 0x01010380
int attr accessibilityFeedbackType 0x01010382
int attr accessibilityFlags 0x01010384
int attr accessibilityLiveRegion 0x010103ee
int attr accessibilityTraversalAfter 0x010104d2
int attr accessibilityTraversalBefore 0x010104d1
int attr accountPreferences 0x0101029f
int attr accountType 0x0101028f
int attr action 0x0101002d
int attr actionBarDivider 0x0101039b
int attr actionBarItemBackground 0x0101039c
int attr actionBarPopupTheme 0x0101048d
int attr actionBarSize 0x010102eb
int attr actionBarSplitStyle 0x01010388
int attr actionBarStyle 0x010102ce
int attr actionBarTabBarStyle 0x010102f4
int attr actionBarTabStyle 0x010102f3
int attr actionBarTabTextStyle 0x010102f5
int attr actionBarTheme 0x01010431
int attr actionBarWidgetTheme 0x01010397
int attr actionButtonStyle 0x010102d8
int attr actionDropDownStyle 0x010102d7
int attr actionLayout 0x010102fb
int attr actionMenuTextAppearance 0x01010360
int attr actionMenuTextColor 0x01010361
int attr actionModeBackground 0x010102db
int attr actionModeCloseButtonStyle 0x010102f7
int attr actionModeCloseDrawable 0x010102dc
int attr actionModeCopyDrawable 0x01010312
int attr actionModeCutDrawable 0x01010311
int attr actionModeFindDrawable 0x0101047a
int attr actionModePasteDrawable 0x01010313
int attr actionModeSelectAllDrawable 0x0101037e
int attr actionModeShareDrawable 0x01010479
int attr actionModeSplitBackground 0x0101039d
int attr actionModeStyle 0x01010394
int attr actionModeWebSearchDrawable 0x0101047b
int attr actionOverflowButtonStyle 0x010102f6
int attr actionOverflowMenuStyle 0x01010444
int attr actionProviderClass 0x01010389
int attr actionViewClass 0x010102fc
int attr activatedBackgroundIndicator 0x010102fd
int attr activityCloseEnterAnimation 0x010100ba
int attr activityCloseExitAnimation 0x010100bb
int attr activityOpenEnterAnimation 0x010100b8
int attr activityOpenExitAnimation 0x010100b9
int attr addPrintersActivity 0x010103e6
int attr addStatesFromChildren 0x010100f0
int attr adjustViewBounds 0x0101011e
int attr advancedPrintOptionsActivity 0x010103f1
int attr alertDialogIcon 0x01010355
int attr alertDialogStyle 0x0101005d
int attr alertDialogTheme 0x01010309
int attr alignmentMode 0x0101037a
int attr allContactsName 0x010102cc
int attr allowBackup 0x01010280
int attr allowClearUserData 0x01010005
int attr allowEmbedded 0x010103f5
int attr allowParallelSyncs 0x01010332
int attr allowSingleTap 0x01010259
int attr allowTaskReparenting 0x01010204
int attr allowUndo 0x010104df
int attr alpha 0x0101031f
int attr alphabeticModifiers 0x0101054e
int attr alphabeticShortcut 0x010101e3
int attr alwaysDrawnWithCache 0x010100ef
int attr alwaysRetainTaskState 0x01010203
int attr amPmBackgroundColor 0x010104a5
int attr amPmTextColor 0x010104a4
int attr ambientShadowAlpha 0x010104be
int attr angle 0x010101a0
int attr animateFirstView 0x010102d5
int attr animateLayoutChanges 0x010102f2
int attr animateOnClick 0x0101025c
int attr animation 0x010101cd
int attr animationCache 0x010100ed
int attr animationDuration 0x01010112
int attr animationOrder 0x010101ce
int attr animationResolution 0x0101031a
int attr antialias 0x0101011a
int attr anyDensity 0x0101026c
int attr apduServiceBanner 0x010103ed
int attr apiKey 0x01010211
int attr appCategory 0x01010545
int attr author 0x010102b4
int attr authorities 0x01010018
int attr autoAdvanceViewId 0x0101030f
int attr autoCompleteTextViewStyle 0x0101006b
int attr autoLink 0x010100b0
int attr autoMirrored 0x010103ea
int attr autoRemoveFromRecents 0x01010447
int attr autoSizeMaxTextSize 0x01010546
int attr autoSizeMinTextSize 0x01010538
int attr autoSizePresetSizes 0x01010537
int attr autoSizeStepGranularity 0x01010536
int attr autoSizeTextType 0x01010535
int attr autoStart 0x010102b5
int attr autoText 0x0101016a
int attr autoUrlDetect 0x0101028c
int attr autoVerify 0x010104ee
int attr autofillHints 0x01010556
int attr autofilledHighlight 0x01010568
int attr background 0x010100d4
int attr backgroundDimAmount 0x01010032
int attr backgroundDimEnabled 0x0101021f
int attr backgroundSplit 0x0101038b
int attr backgroundStacked 0x0101038a
int attr backgroundTint 0x0101046b
int attr backgroundTintMode 0x0101046c
int attr backupAgent 0x0101027f
int attr backupInForeground 0x0101051a
int attr banner 0x010103f2
int attr baseline 0x0101031c
int attr baselineAlignBottom 0x01010122
int attr baselineAligned 0x01010126
int attr baselineAlignedChildIndex 0x01010127
int attr bitmap 0x01010516
int attr borderlessButtonStyle 0x0101032b
int attr bottom 0x010101b0
int attr bottomBright 0x010100cd
int attr bottomDark 0x010100c9
int attr bottomLeftRadius 0x010101ab
int attr bottomMedium 0x010100ce
int attr bottomOffset 0x01010257
int attr bottomRightRadius 0x010101ac
int attr breadCrumbShortTitle 0x01010304
int attr breadCrumbTitle 0x01010303
int attr breakStrategy 0x010104dd
int attr bufferType 0x0101014e
int attr button 0x01010107
int attr buttonBarButtonStyle 0x0101032f
int attr buttonBarNegativeButtonStyle 0x0101048b
int attr buttonBarNeutralButtonStyle 0x0101048a
int attr buttonBarPositiveButtonStyle 0x01010489
int attr buttonBarStyle 0x0101032e
int attr buttonGravity 0x010104fe
int attr buttonStyle 0x01010048
int attr buttonStyleInset 0x0101004a
int attr buttonStyleSmall 0x01010049
int attr buttonStyleToggle 0x0101004b
int attr buttonTint 0x0101046f
int attr buttonTintMode 0x01010470
int attr cacheColorHint 0x01010101
int attr calendarTextColor 0x0101049b
int attr calendarViewShown 0x0101034c
int attr calendarViewStyle 0x0101035d
int attr canControlMagnification 0x01010507
int attr canPerformGestures 0x0101050d
int attr canRecord 0x0101051c
int attr canRequestEnhancedWebAccessibility 0x010103d8
int attr canRequestFilterKeyEvents 0x010103d9
int attr canRequestFingerprintGestures 0x0101054d
int attr canRequestTouchExplorationMode 0x010103d7
int attr canRetrieveWindowContent 0x01010385
int attr candidatesTextStyleSpans 0x01010230
int attr capitalize 0x01010169
int attr category 0x010103e8
int attr centerBright 0x010100cc
int attr centerColor 0x0101020b
int attr centerDark 0x010100c8
int attr centerMedium 0x010100cf
int attr centerX 0x010101a2
int attr centerY 0x010101a3
int attr certDigest 0x01010548
int attr checkBoxPreferenceStyle 0x0101008f
int attr checkMark 0x01010108
int attr checkMarkTint 0x010104a7
int attr checkMarkTintMode 0x010104a8
int attr checkable 0x010101e5
int attr checkableBehavior 0x010101e0
int attr checkboxStyle 0x0101006c
int attr checked 0x01010106
int attr checkedButton 0x01010148
int attr checkedTextViewStyle 0x010103c8
int attr childDivider 0x01010111
int attr childIndicator 0x0101010c
int attr childIndicatorEnd 0x010103d4
int attr childIndicatorLeft 0x0101010f
int attr childIndicatorRight 0x01010110
int attr childIndicatorStart 0x010103d3
int attr choiceMode 0x0101012b
int attr classLoader 0x0101056b
int attr clearTaskOnLaunch 0x01010015
int attr clickable 0x010100e5
int attr clipChildren 0x010100ea
int attr clipOrientation 0x0101020a
int attr clipToPadding 0x010100eb
int attr closeIcon 0x01010481
int attr codes 0x01010242
int attr collapseColumns 0x0101014b
int attr collapseContentDescription 0x010104d0
int attr collapseIcon 0x010104ff
int attr color 0x010101a5
int attr colorAccent 0x01010435
int attr colorActivatedHighlight 0x01010390
int attr colorBackground 0x01010031
int attr colorBackgroundCacheHint 0x010102ab
int attr colorBackgroundFloating 0x010104e2
int attr colorButtonNormal 0x0101042b
int attr colorControlActivated 0x0101042a
int attr colorControlHighlight 0x0101042c
int attr colorControlNormal 0x01010429
int attr colorEdgeEffect 0x010104ce
int attr colorError 0x01010543
int attr colorFocusedHighlight 0x0101038f
int attr colorForeground 0x01010030
int attr colorForegroundInverse 0x01010206
int attr colorLongPressedHighlight 0x0101038e
int attr colorMode 0x0101054a
int attr colorMultiSelectHighlight 0x01010391
int attr colorPressedHighlight 0x0101038d
int attr colorPrimary 0x01010433
int attr colorPrimaryDark 0x01010434
int attr colorSecondary 0x01010530
int attr columnCount 0x01010377
int attr columnDelay 0x010101cf
int attr columnOrderPreserved 0x01010378
int attr columnWidth 0x01010117
int attr commitIcon 0x01010485
int attr compatibleWidthLimitDp 0x01010365
int attr completionHint 0x01010172
int attr completionHintView 0x01010173
int attr completionThreshold 0x01010174
int attr configChanges 0x0101001f
int attr configure 0x0101025d
int attr constantSize 0x01010196
int attr content 0x0101025b
int attr contentAgeHint 0x010104b9
int attr contentAuthority 0x01010290
int attr contentDescription 0x01010273
int attr contentInsetEnd 0x01010454
int attr contentInsetEndWithActions 0x01010523
int attr contentInsetLeft 0x01010455
int attr contentInsetRight 0x01010456
int attr contentInsetStart 0x01010453
int attr contentInsetStartWithNavigation 0x01010522
int attr contextClickable 0x010104e7
int attr contextDescription 0x0101052e
int attr contextPopupMenuStyle 0x01010501
int attr contextUri 0x0101052d
int attr controlX1 0x010103fc
int attr controlX2 0x010103fe
int attr controlY1 0x010103fd
int attr controlY2 0x010103ff
int attr countDown 0x0101051b
int attr country 0x010104ba
int attr cropToPadding 0x01010123
int attr cursorVisible 0x01010152
int attr customNavigationLayout 0x010102d2
int attr customTokens 0x0101033b
int attr cycles 0x010101d4
int attr dashGap 0x010101a7
int attr dashWidth 0x010101a6
int attr data 0x0101002e
int attr datePickerDialogTheme 0x010104ac
int attr datePickerMode 0x010104b3
int attr datePickerStyle 0x0101035c
int attr dateTextAppearance 0x01010349
int attr dayOfWeekBackground 0x01010494
int attr dayOfWeekTextAppearance 0x01010495
int attr debuggable 0x0101000f
int attr defaultFocusHighlightEnabled 0x01010562
int attr defaultHeight 0x010104f5
int attr defaultToDeviceProtectedStorage 0x01010504
int attr defaultValue 0x010101ed
int attr defaultWidth 0x010104f4
int attr delay 0x010101cc
int attr dependency 0x010101ec
int attr descendantFocusability 0x010100f1
int attr description 0x01010020
int attr detachWallpaper 0x010102a6
int attr detailColumn 0x010102a3
int attr detailSocialSummary 0x010102a4
int attr detailsElementBackground 0x0101034e
int attr dial 0x01010102
int attr dialogIcon 0x010101f4
int attr dialogLayout 0x010101f7
int attr dialogMessage 0x010101f3
int attr dialogPreferenceStyle 0x01010091
int attr dialogPreferredPadding 0x010104d3
int attr dialogTheme 0x01010308
int attr dialogTitle 0x010101f2
int attr digits 0x01010166
int attr directBootAware 0x01010505
int attr direction 0x010101d1
int attr directionDescriptions 0x010103a1
int attr directionPriority 0x010101d2
int attr disableDependentsState 0x010101f1
int attr disabledAlpha 0x01010033
int attr displayOptions 0x010102d0
int attr dither 0x0101011c
int attr divider 0x01010129
int attr dividerHeight 0x0101012a
int attr dividerHorizontal 0x0101032c
int attr dividerPadding 0x0101032a
int attr dividerVertical 0x0101030a
int attr documentLaunchMode 0x01010445
int attr drawSelectorOnTop 0x010100fc
int attr drawable 0x01010199
int attr drawableBottom 0x0101016e
int attr drawableEnd 0x01010393
int attr drawableLeft 0x0101016f
int attr drawablePadding 0x01010171
int attr drawableRight 0x01010170
int attr drawableStart 0x01010392
int attr drawableTint 0x010104d6
int attr drawableTintMode 0x010104d7
int attr drawableTop 0x0101016d
int attr drawingCacheQuality 0x010100e8
int attr dropDownAnchor 0x01010263
int attr dropDownHeight 0x01010283
int attr dropDownHintAppearance 0x01010088
int attr dropDownHorizontalOffset 0x010102ac
int attr dropDownItemStyle 0x01010086
int attr dropDownListViewStyle 0x0101006d
int attr dropDownSelector 0x01010175
int attr dropDownSpinnerStyle 0x010102d6
int attr dropDownVerticalOffset 0x010102ad
int attr dropDownWidth 0x01010262
int attr duplicateParentState 0x010100e9
int attr duration 0x01010198
int attr editTextBackground 0x01010352
int attr editTextColor 0x01010351
int attr editTextPreferenceStyle 0x01010092
int attr editTextStyle 0x0101006e
int attr editable 0x0101016b
int attr editorExtras 0x01010224
int attr elegantTextHeight 0x0101045d
int attr elevation 0x01010440
int attr ellipsize 0x010100ab
int attr ems 0x01010158
int attr enableVrMode 0x01010525
int attr enabled 0x0101000e
int attr end 0x010104dc
int attr endColor 0x0101019e
int attr endX 0x01010512
int attr endY 0x01010513
int attr endYear 0x0101017d
int attr enterFadeDuration 0x0101030c
int attr entries 0x010100b2
int attr entryValues 0x010101f8
int attr eventsInterceptionEnabled 0x0101027d
int attr excludeClass 0x01010442
int attr excludeFromRecents 0x01010017
int attr excludeId 0x01010441
int attr excludeName 0x0101044e
int attr exitFadeDuration 0x0101030d
int attr expandableListPreferredChildIndicatorLeft 0x01010052
int attr expandableListPreferredChildIndicatorRight 0x01010053
int attr expandableListPreferredChildPaddingLeft 0x0101004f
int attr expandableListPreferredItemIndicatorLeft 0x01010050
int attr expandableListPreferredItemIndicatorRight 0x01010051
int attr expandableListPreferredItemPaddingLeft 0x0101004e
int attr expandableListViewStyle 0x0101006f
int attr expandableListViewWhiteStyle 0x010102b6
int attr exported 0x01010010
int attr externalService 0x0101050e
int attr extraTension 0x0101026b
int attr extractNativeLibs 0x010104ea
int attr factor 0x010101d3
int attr fadeDuration 0x01010278
int attr fadeEnabled 0x0101027e
int attr fadeOffset 0x01010277
int attr fadeScrollbars 0x010102aa
int attr fadingEdge 0x010100df
int attr fadingEdgeLength 0x010100e0
int attr fadingMode 0x010103e1
int attr fastScrollAlwaysVisible 0x01010335
int attr fastScrollEnabled 0x01010226
int attr fastScrollOverlayPosition 0x0101033a
int attr fastScrollPreviewBackgroundLeft 0x01010337
int attr fastScrollPreviewBackgroundRight 0x01010338
int attr fastScrollStyle 0x010103f7
int attr fastScrollTextColor 0x01010359
int attr fastScrollThumbDrawable 0x01010336
int attr fastScrollTrackDrawable 0x01010339
int attr fillAfter 0x010101bd
int attr fillAlpha 0x010104cc
int attr fillBefore 0x010101bc
int attr fillColor 0x01010404
int attr fillEnabled 0x0101024f
int attr fillType 0x0101051e
int attr fillViewport 0x0101017a
int attr filter 0x0101011b
int attr filterTouchesWhenObscured 0x010102c4
int attr fingerprintAuthDrawable 0x010104e8
int attr finishOnCloseSystemDialogs 0x010102a7
int attr finishOnTaskLaunch 0x01010014
int attr firstDayOfWeek 0x0101033d
int attr fitsSystemWindows 0x010100dd
int attr flipInterval 0x01010179
int attr focusable 0x010100da
int attr focusableInTouchMode 0x010100db
int attr focusedByDefault 0x01010544
int attr focusedMonthDateColor 0x01010343
int attr font 0x01010532
int attr fontFamily 0x010103ac
int attr fontFeatureSettings 0x010104b7
int attr fontProviderAuthority 0x01010550
int attr fontProviderCerts 0x0101055d
int attr fontProviderPackage 0x01010557
int attr fontProviderQuery 0x01010551
int attr fontStyle 0x0101053f
int attr fontWeight 0x01010533
int attr footerDividersEnabled 0x0101022f
int attr forceHasOverlappingRendering 0x01010521
int attr foreground 0x01010109
int attr foregroundGravity 0x01010200
int attr foregroundTint 0x0101046d
int attr foregroundTintMode 0x0101046e
int attr format 0x01010105
int attr format12Hour 0x010103ca
int attr format24Hour 0x010103cb
int attr fraction 0x010104d8
int attr fragment 0x010102e3
int attr fragmentAllowEnterTransitionOverlap 0x010104c8
int attr fragmentAllowReturnTransitionOverlap 0x010104c9
int attr fragmentCloseEnterAnimation 0x010102e7
int attr fragmentCloseExitAnimation 0x010102e8
int attr fragmentEnterTransition 0x010104c3
int attr fragmentExitTransition 0x010104c2
int attr fragmentFadeEnterAnimation 0x010102e9
int attr fragmentFadeExitAnimation 0x010102ea
int attr fragmentOpenEnterAnimation 0x010102e5
int attr fragmentOpenExitAnimation 0x010102e6
int attr fragmentReenterTransition 0x010104c7
int attr fragmentReturnTransition 0x010104c5
int attr fragmentSharedElementEnterTransition 0x010104c4
int attr fragmentSharedElementReturnTransition 0x010104c6
int attr freezesText 0x0101016c
int attr fromAlpha 0x010101ca
int attr fromDegrees 0x010101b3
int attr fromId 0x0101044a
int attr fromScene 0x010103dd
int attr fromXDelta 0x010101c6
int attr fromXScale 0x010101c2
int attr fromYDelta 0x010101c8
int attr fromYScale 0x010101c4
int attr fullBackupContent 0x010104eb
int attr fullBackupOnly 0x01010473
int attr fullBright 0x010100ca
int attr fullDark 0x010100c6
int attr functionalTest 0x01010023
int attr galleryItemBackground 0x0101004c
int attr galleryStyle 0x01010070
int attr gestureColor 0x01010275
int attr gestureStrokeAngleThreshold 0x0101027c
int attr gestureStrokeLengthThreshold 0x0101027a
int attr gestureStrokeSquarenessThreshold 0x0101027b
int attr gestureStrokeType 0x01010279
int attr gestureStrokeWidth 0x01010274
int attr glEsVersion 0x01010281
int attr goIcon 0x01010482
int attr gradientRadius 0x010101a4
int attr grantUriPermissions 0x0101001b
int attr gravity 0x010100af
int attr gridViewStyle 0x01010071
int attr groupIndicator 0x0101010b
int attr hand_hour 0x01010103
int attr hand_minute 0x01010104
int attr handle 0x0101025a
int attr handleProfiling 0x01010022
int attr hapticFeedbackEnabled 0x0101025e
int attr hardwareAccelerated 0x010102d3
int attr hasCode 0x0101000c
int attr headerAmPmTextAppearance 0x010104a0
int attr headerBackground 0x0101012f
int attr headerDayOfMonthTextAppearance 0x01010497
int attr headerDividersEnabled 0x0101022e
int attr headerMonthTextAppearance 0x01010496
int attr headerTimeTextAppearance 0x0101049f
int attr headerYearTextAppearance 0x01010498
int attr height 0x01010155
int attr hideOnContentScroll 0x01010443
int attr hint 0x01010150
int attr homeAsUpIndicator 0x0101030b
int attr homeLayout 0x0101031d
int attr horizontalDivider 0x0101012d
int attr horizontalGap 0x0101023f
int attr horizontalScrollViewStyle 0x01010353
int attr horizontalSpacing 0x01010114
int attr host 0x01010028
int attr hotSpotX 0x01010517
int attr hotSpotY 0x01010518
int attr hyphenationFrequency 0x010104de
int attr icon 0x01010002
int attr iconPreview 0x01010249
int attr iconSpaceReserved 0x01010561
int attr iconTint 0x0101055e
int attr iconTintMode 0x0101055f
int attr iconifiedByDefault 0x010102fa
int attr id 0x010100d0
int attr ignoreGravity 0x010101ff
int attr imageButtonStyle 0x01010072
int attr imageWellStyle 0x01010073
int attr imeActionId 0x01010266
int attr imeActionLabel 0x01010265
int attr imeExtractEnterAnimation 0x01010268
int attr imeExtractExitAnimation 0x01010269
int attr imeFullscreenBackground 0x0101022c
int attr imeOptions 0x01010264
int attr imeSubtypeExtraValue 0x010102ee
int attr imeSubtypeLocale 0x010102ec
int attr imeSubtypeMode 0x010102ed
int attr immersive 0x010102c0
int attr importantForAccessibility 0x010103aa
int attr importantForAutofill 0x01010558
int attr inAnimation 0x01010177
int attr includeFontPadding 0x0101015f
int attr includeInGlobalSearch 0x0101026e
int attr indeterminate 0x01010139
int attr indeterminateBehavior 0x0101013e
int attr indeterminateDrawable 0x0101013b
int attr indeterminateDuration 0x0101013d
int attr indeterminateOnly 0x0101013a
int attr indeterminateProgressStyle 0x01010318
int attr indeterminateTint 0x01010469
int attr indeterminateTintMode 0x0101046a
int attr indicatorEnd 0x010103d2
int attr indicatorLeft 0x0101010d
int attr indicatorRight 0x0101010e
int attr indicatorStart 0x010103d1
int attr inflatedId 0x010100f3
int attr initOrder 0x0101001a
int attr initialKeyguardLayout 0x010103c2
int attr initialLayout 0x01010251
int attr innerRadius 0x0101025f
int attr innerRadiusRatio 0x0101019b
int attr inputMethod 0x01010168
int attr inputType 0x01010220
int attr inset 0x010104b5
int attr insetBottom 0x010101ba
int attr insetLeft 0x010101b7
int attr insetRight 0x010101b8
int attr insetTop 0x010101b9
int attr installLocation 0x010102b7
int attr interpolator 0x01010141
int attr isAlwaysSyncable 0x01010333
int attr isAsciiCapable 0x010103e9
int attr isAuxiliary 0x0101037f
int attr isDefault 0x01010221
int attr isFeatureSplit 0x0101055b
int attr isGame 0x010103f4
int attr isIndicator 0x01010147
int attr isModifier 0x01010246
int attr isRepeatable 0x01010248
int attr isScrollContainer 0x0101024e
int attr isStatic 0x0101055a
int attr isSticky 0x01010247
int attr isolatedProcess 0x010103a9
int attr isolatedSplits 0x0101054b
int attr itemBackground 0x01010130
int attr itemIconDisabledAlpha 0x01010131
int attr itemPadding 0x0101032d
int attr itemTextAppearance 0x0101012c
int attr justificationMode 0x01010567
int attr keepScreenOn 0x01010216
int attr key 0x010101e8
int attr keyBackground 0x01010233
int attr keyEdgeFlags 0x01010245
int attr keyHeight 0x0101023e
int attr keyIcon 0x0101024c
int attr keyLabel 0x0101024b
int attr keyOutputText 0x0101024a
int attr keyPreviewHeight 0x01010239
int attr keyPreviewLayout 0x01010237
int attr keyPreviewOffset 0x01010238
int attr keySet 0x010103db
int attr keyTextColor 0x01010236
int attr keyTextSize 0x01010234
int attr keyWidth 0x0101023d
int attr keyboardLayout 0x010103ab
int attr keyboardMode 0x0101024d
int attr keyboardNavigationCluster 0x01010540
int attr keycode 0x010100c5
int attr killAfterRestore 0x0101029c
int attr label 0x01010001
int attr labelFor 0x010103c6
int attr labelTextSize 0x01010235
int attr languageTag 0x01010508
int attr largeHeap 0x0101035a
int attr largeScreens 0x01010286
int attr largestWidthLimitDp 0x01010366
int attr launchMode 0x0101001d
int attr launchTaskBehindSourceAnimation 0x01010492
int attr launchTaskBehindTargetAnimation 0x01010491
int attr layerType 0x01010354
int attr layout 0x010100f2
int attr layoutAnimation 0x010100ec
int attr layoutDirection 0x010103b2
int attr layoutMode 0x010103da
int attr layout_above 0x01010184
int attr layout_alignBaseline 0x01010186
int attr layout_alignBottom 0x0101018a
int attr layout_alignEnd 0x010103ba
int attr layout_alignLeft 0x01010187
int attr layout_alignParentBottom 0x0101018e
int attr layout_alignParentEnd 0x010103bc
int attr layout_alignParentLeft 0x0101018b
int attr layout_alignParentRight 0x0101018d
int attr layout_alignParentStart 0x010103bb
int attr layout_alignParentTop 0x0101018c
int attr layout_alignRight 0x01010189
int attr layout_alignStart 0x010103b9
int attr layout_alignTop 0x01010188
int attr layout_alignWithParentIfMissing 0x01010192
int attr layout_below 0x01010185
int attr layout_centerHorizontal 0x01010190
int attr layout_centerInParent 0x0101018f
int attr layout_centerVertical 0x01010191
int attr layout_column 0x0101014c
int attr layout_columnSpan 0x0101037d
int attr layout_columnWeight 0x01010459
int attr layout_gravity 0x010100b3
int attr layout_height 0x010100f5
int attr layout_margin 0x010100f6
int attr layout_marginBottom 0x010100fa
int attr layout_marginEnd 0x010103b6
int attr layout_marginHorizontal 0x0101053b
int attr layout_marginLeft 0x010100f7
int attr layout_marginRight 0x010100f9
int attr layout_marginStart 0x010103b5
int attr layout_marginTop 0x010100f8
int attr layout_marginVertical 0x0101053c
int attr layout_row 0x0101037b
int attr layout_rowSpan 0x0101037c
int attr layout_rowWeight 0x01010458
int attr layout_scale 0x01010193
int attr layout_span 0x0101014d
int attr layout_toEndOf 0x010103b8
int attr layout_toLeftOf 0x01010182
int attr layout_toRightOf 0x01010183
int attr layout_toStartOf 0x010103b7
int attr layout_weight 0x01010181
int attr layout_width 0x010100f4
int attr layout_x 0x0101017f
int attr layout_y 0x01010180
int attr left 0x010101ad
int attr letterSpacing 0x010104b6
int attr level 0x01010500
int attr lineSpacingExtra 0x01010217
int attr lineSpacingMultiplier 0x01010218
int attr lines 0x01010154
int attr linksClickable 0x010100b1
int attr listChoiceBackgroundIndicator 0x010102f0
int attr listChoiceIndicatorMultiple 0x0101021a
int attr listChoiceIndicatorSingle 0x01010219
int attr listDivider 0x01010214
int attr listDividerAlertDialog 0x01010305
int attr listMenuViewStyle 0x010104f2
int attr listPopupWindowStyle 0x010102ff
int attr listPreferredItemHeight 0x0101004d
int attr listPreferredItemHeightLarge 0x01010386
int attr listPreferredItemHeightSmall 0x01010387
int attr listPreferredItemPaddingEnd 0x010103be
int attr listPreferredItemPaddingLeft 0x010103a3
int attr listPreferredItemPaddingRight 0x010103a4
int attr listPreferredItemPaddingStart 0x010103bd
int attr listSelector 0x010100fb
int attr listSeparatorTextViewStyle 0x01010208
int attr listViewStyle 0x01010074
int attr listViewWhiteStyle 0x01010075
int attr lockTaskMode 0x010104ed
int attr logo 0x010102be
int attr logoDescription 0x010104e9
int attr longClickable 0x010100e6
int attr loopViews 0x01010307
int attr manageSpaceActivity 0x01010004
int attr mapViewStyle 0x0101008a
int attr marqueeRepeatLimit 0x0101021d
int attr matchOrder 0x0101044f
int attr max 0x01010136
int attr maxAspectRatio 0x01010560
int attr maxButtonHeight 0x010104fd
int attr maxDate 0x01010340
int attr maxEms 0x01010157
int attr maxHeight 0x01010120
int attr maxItemsPerRow 0x01010134
int attr maxLength 0x01010160
int attr maxLevel 0x010101b2
int attr maxLines 0x01010153
int attr maxRecents 0x01010446
int attr maxRows 0x01010133
int attr maxSdkVersion 0x01010271
int attr maxWidth 0x0101011f
int attr maximumAngle 0x0101047f
int attr measureAllChildren 0x0101010a
int attr measureWithLargestChild 0x010102d4
int attr mediaRouteButtonStyle 0x010103ad
int attr mediaRouteTypes 0x010103ae
int attr menuCategory 0x010101de
int attr mimeType 0x01010026
int attr min 0x01010539
int attr minDate 0x0101033f
int attr minEms 0x0101015a
int attr minHeight 0x01010140
int attr minLevel 0x010101b1
int attr minLines 0x01010156
int attr minResizeHeight 0x01010396
int attr minResizeWidth 0x01010395
int attr minSdkVersion 0x0101020c
int attr minWidth 0x0101013f
int attr minimumHorizontalAngle 0x0101047d
int attr minimumVerticalAngle 0x0101047e
int attr mipMap 0x010103cd
int attr mirrorForRtl 0x010103ce
int attr mode 0x0101017e
int attr moreIcon 0x01010135
int attr multiArch 0x0101048e
int attr multiprocess 0x01010013
int attr name 0x01010003
int attr navigationBarColor 0x01010452
int attr navigationBarDividerColor 0x0101056d
int attr navigationContentDescription 0x010104c1
int attr navigationIcon 0x010104c0
int attr navigationMode 0x010102cf
int attr negativeButtonText 0x010101f6
int attr nestedScrollingEnabled 0x01010436
int attr networkSecurityConfig 0x01010527
int attr nextClusterForward 0x01010542
int attr nextFocusDown 0x010100e4
int attr nextFocusForward 0x0101033c
int attr nextFocusLeft 0x010100e1
int attr nextFocusRight 0x010100e2
int attr nextFocusUp 0x010100e3
int attr noHistory 0x0101022d
int attr normalScreens 0x01010285
int attr notificationTimeout 0x01010383
int attr numColumns 0x01010118
int attr numStars 0x01010144
int attr numberPickerStyle 0x01010524
int attr numbersBackgroundColor 0x010104a2
int attr numbersInnerTextColor 0x010104e1
int attr numbersSelectorColor 0x010104a3
int attr numbersTextColor 0x010104a1
int attr numeric 0x01010165
int attr numericModifiers 0x0101054f
int attr numericShortcut 0x010101e4
int attr offset 0x01010514
int attr onClick 0x0101026f
int attr oneshot 0x01010197
int attr opacity 0x0101031e
int attr order 0x010101ea
int attr orderInCategory 0x010101df
int attr ordering 0x010102e2
int attr orderingFromXml 0x010101e7
int attr orientation 0x010100c4
int attr outAnimation 0x01010178
int attr outlineProvider 0x010104b8
int attr overScrollFooter 0x010102c3
int attr overScrollHeader 0x010102c2
int attr overScrollMode 0x010102c1
int attr overlapAnchor 0x01010462
int attr overridesImplicitlyEnabledSubtype 0x010103a2
int attr packageNames 0x01010381
int attr padding 0x010100d5
int attr paddingBottom 0x010100d9
int attr paddingEnd 0x010103b4
int attr paddingHorizontal 0x0101053d
int attr paddingLeft 0x010100d6
int attr paddingMode 0x01010457
int attr paddingRight 0x010100d8
int attr paddingStart 0x010103b3
int attr paddingTop 0x010100d7
int attr paddingVertical 0x0101053e
int attr panelBackground 0x0101005e
int attr panelColorBackground 0x01010061
int attr panelColorForeground 0x01010060
int attr panelFullBackground 0x0101005f
int attr panelTextAppearance 0x01010062
int attr parentActivityName 0x010103a7
int attr password 0x0101015c
int attr path 0x0101002a
int attr pathData 0x01010405
int attr pathPattern 0x0101002c
int attr pathPrefix 0x0101002b
int attr patternPathData 0x010104ca
int attr permission 0x01010006
int attr permissionFlags 0x010103c7
int attr permissionGroup 0x0101000a
int attr permissionGroupFlags 0x010103c5
int attr persistableMode 0x0101042d
int attr persistent 0x0101000d
int attr persistentDrawingCache 0x010100ee
int attr persistentWhenFeatureAvailable 0x01010563
int attr phoneNumber 0x01010167
int attr pivotX 0x010101b5
int attr pivotY 0x010101b6
int attr pointerIcon 0x01010509
int attr popupAnimationStyle 0x010102c9
int attr popupBackground 0x01010176
int attr popupCharacters 0x01010244
int attr popupElevation 0x0101048c
int attr popupEnterTransition 0x0101051f
int attr popupExitTransition 0x01010520
int attr popupKeyboard 0x01010243
int attr popupLayout 0x0101023b
int attr popupMenuStyle 0x01010300
int attr popupTheme 0x010104a9
int attr popupWindowStyle 0x01010076
int attr port 0x01010029
int attr positiveButtonText 0x010101f5
int attr preferenceCategoryStyle 0x0101008c
int attr preferenceFragmentStyle 0x01010506
int attr preferenceInformationStyle 0x0101008d
int attr preferenceLayoutChild 0x01010094
int attr preferenceScreenStyle 0x0101008b
int attr preferenceStyle 0x0101008e
int attr presentationTheme 0x010103c0
int attr previewImage 0x010102da
int attr primaryContentAlpha 0x01010552
int attr priority 0x0101001c
int attr privateImeOptions 0x01010223
int attr process 0x01010011
int attr progress 0x01010137
int attr progressBackgroundTint 0x01010465
int attr progressBackgroundTintMode 0x01010466
int attr progressBarPadding 0x01010319
int attr progressBarStyle 0x01010077
int attr progressBarStyleHorizontal 0x01010078
int attr progressBarStyleInverse 0x01010287
int attr progressBarStyleLarge 0x0101007a
int attr progressBarStyleLargeInverse 0x01010289
int attr progressBarStyleSmall 0x01010079
int attr progressBarStyleSmallInverse 0x01010288
int attr progressBarStyleSmallTitle 0x0101020f
int attr progressDrawable 0x0101013c
int attr progressTint 0x01010463
int attr progressTintMode 0x01010464
int attr prompt 0x0101017b
int attr propertyName 0x010102e1
int attr propertyXName 0x01010474
int attr propertyYName 0x01010475
int attr protectionLevel 0x01010009
int attr publicKey 0x010103a6
int attr queryActionMsg 0x010101db
int attr queryAfterZeroResults 0x01010282
int attr queryBackground 0x01010487
int attr queryHint 0x01010358
int attr quickContactBadgeStyleSmallWindowLarge 0x010102b3
int attr quickContactBadgeStyleSmallWindowMedium 0x010102b2
int attr quickContactBadgeStyleSmallWindowSmall 0x010102b1
int attr quickContactBadgeStyleWindowLarge 0x010102b0
int attr quickContactBadgeStyleWindowMedium 0x010102af
int attr quickContactBadgeStyleWindowSmall 0x010102ae
int attr radioButtonStyle 0x0101007e
int attr radius 0x010101a8
int attr rating 0x01010145
int attr ratingBarStyle 0x0101007c
int attr ratingBarStyleIndicator 0x01010210
int attr ratingBarStyleSmall 0x0101007d
int attr readPermission 0x01010007
int attr recognitionService 0x0101049c
int attr recreateOnConfigChanges 0x01010547
int attr recycleEnabled 0x01010559
int attr relinquishTaskIdentity 0x01010476
int attr reparent 0x010104bc
int attr reparentWithOverlay 0x010104bd
int attr repeatCount 0x010101bf
int attr repeatMode 0x010101c0
int attr reqFiveWayNav 0x01010232
int attr reqHardKeyboard 0x01010229
int attr reqKeyboardType 0x01010228
int attr reqNavigation 0x0101022a
int attr reqTouchScreen 0x01010227
int attr requireDeviceUnlock 0x010103ec
int attr required 0x0101028e
int attr requiredAccountType 0x010103d6
int attr requiredFeature 0x01010554
int attr requiredForAllUsers 0x010103d0
int attr requiredNotFeature 0x01010555
int attr requiresFadingEdge 0x010103a5
int attr requiresSmallestWidthDp 0x01010364
int attr resizeClip 0x010104cf
int attr resizeMode 0x01010363
int attr resizeable 0x0101028d
int attr resizeableActivity 0x010104f6
int attr resource 0x01010025
int attr restoreAnyVersion 0x010102ba
int attr restoreNeedsApplication 0x0101029d
int attr restrictedAccountType 0x010103d5
int attr restrictionType 0x01010493
int attr resumeWhilePausing 0x010104b2
int attr reversible 0x0101044b
int attr revisionCode 0x010104d5
int attr right 0x010101af
int attr ringtonePreferenceStyle 0x01010093
int attr ringtoneType 0x010101f9
int attr rotation 0x01010326
int attr rotationAnimation 0x0101053a
int attr rotationX 0x01010327
int attr rotationY 0x01010328
int attr roundIcon 0x0101052c
int attr rowCount 0x01010375
int attr rowDelay 0x010101d0
int attr rowEdgeFlags 0x01010241
int attr rowHeight 0x01010132
int attr rowOrderPreserved 0x01010376
int attr saveEnabled 0x010100e7
int attr scaleGravity 0x010101fe
int attr scaleHeight 0x010101fd
int attr scaleType 0x0101011d
int attr scaleWidth 0x010101fc
int attr scaleX 0x01010324
int attr scaleY 0x01010325
int attr scheme 0x01010027
int attr screenDensity 0x010102cb
int attr screenOrientation 0x0101001e
int attr screenSize 0x010102ca
int attr scrollHorizontally 0x0101015b
int attr scrollIndicators 0x010104e6
int attr scrollViewStyle 0x01010080
int attr scrollX 0x010100d2
int attr scrollY 0x010100d3
int attr scrollbarAlwaysDrawHorizontalTrack 0x01010068
int attr scrollbarAlwaysDrawVerticalTrack 0x01010069
int attr scrollbarDefaultDelayBeforeFade 0x010102a9
int attr scrollbarFadeDuration 0x010102a8
int attr scrollbarSize 0x01010063
int attr scrollbarStyle 0x0101007f
int attr scrollbarThumbHorizontal 0x01010064
int attr scrollbarThumbVertical 0x01010065
int attr scrollbarTrackHorizontal 0x01010066
int attr scrollbarTrackVertical 0x01010067
int attr scrollbars 0x010100de
int attr scrollingCache 0x010100fe
int attr searchButtonText 0x01010205
int attr searchHintIcon 0x010104d4
int attr searchIcon 0x01010483
int attr searchMode 0x010101d5
int attr searchSettingsDescription 0x0101028a
int attr searchSuggestAuthority 0x010101d6
int attr searchSuggestIntentAction 0x010101d9
int attr searchSuggestIntentData 0x010101da
int attr searchSuggestPath 0x010101d7
int attr searchSuggestSelection 0x010101d8
int attr searchSuggestThreshold 0x0101026d
int attr searchViewStyle 0x01010480
int attr secondaryContentAlpha 0x01010553
int attr secondaryProgress 0x01010138
int attr secondaryProgressTint 0x01010467
int attr secondaryProgressTintMode 0x01010468
int attr seekBarStyle 0x0101007b
int attr segmentedButtonStyle 0x01010330
int attr selectAllOnFocus 0x0101015e
int attr selectable 0x010101e6
int attr selectableItemBackground 0x0101030e
int attr selectableItemBackgroundBorderless 0x0101045c
int attr selectedDateVerticalBar 0x01010347
int attr selectedWeekBackgroundColor 0x01010342
int attr sessionService 0x0101043d
int attr settingsActivity 0x01010225
int attr setupActivity 0x010103f6
int attr shadowColor 0x01010161
int attr shadowDx 0x01010162
int attr shadowDy 0x01010163
int attr shadowRadius 0x01010164
int attr shape 0x0101019a
int attr shareInterpolator 0x010101bb
int attr sharedUserId 0x0101000b
int attr sharedUserLabel 0x01010261
int attr shortcutDisabledMessage 0x0101052b
int attr shortcutId 0x01010528
int attr shortcutLongLabel 0x0101052a
int attr shortcutShortLabel 0x01010529
int attr shouldDisableView 0x010101ee
int attr showAsAction 0x010102d9
int attr showDefault 0x010101fa
int attr showDividers 0x01010329
int attr showForAllUsers 0x010104ef
int attr showMetadataInPreview 0x0101052f
int attr showOnLockScreen 0x010103c9
int attr showSilent 0x010101fb
int attr showText 0x010104ad
int attr showWeekNumber 0x0101033e
int attr showWhenLocked 0x01010569
int attr shownWeekCount 0x01010341
int attr shrinkColumns 0x0101014a
int attr singleLine 0x0101015d
int attr singleLineTitle 0x0101055c
int attr singleUser 0x010103bf
int attr slideEdge 0x01010430
int attr smallIcon 0x0101029e
int attr smallScreens 0x01010284
int attr smoothScrollbar 0x01010231
int attr soundEffectsEnabled 0x01010215
int attr spacing 0x01010113
int attr spinnerDropDownItemStyle 0x01010087
int attr spinnerItemStyle 0x01010089
int attr spinnerMode 0x010102f1
int attr spinnerStyle 0x01010081
int attr spinnersShown 0x0101034b
int attr splitMotionEvents 0x010102ef
int attr splitName 0x01010549
int attr splitTrack 0x0101044c
int attr spotShadowAlpha 0x010104bf
int attr src 0x01010119
int attr ssp 0x010103e3
int attr sspPattern 0x010103e5
int attr sspPrefix 0x010103e4
int attr stackFromBottom 0x010100fd
int attr stackViewStyle 0x0101043e
int attr starStyle 0x01010082
int attr start 0x010104db
int attr startColor 0x0101019d
int attr startDelay 0x010103e2
int attr startOffset 0x010101be
int attr startX 0x01010510
int attr startY 0x01010511
int attr startYear 0x0101017c
int attr stateListAnimator 0x01010448
int attr stateNotNeeded 0x01010016
int attr state_above_anchor 0x010100aa
int attr state_accelerated 0x0101031b
int attr state_activated 0x010102fe
int attr state_active 0x010100a2
int attr state_checkable 0x0101009f
int attr state_checked 0x010100a0
int attr state_drag_can_accept 0x01010368
int attr state_drag_hovered 0x01010369
int attr state_empty 0x010100a9
int attr state_enabled 0x0101009e
int attr state_expanded 0x010100a8
int attr state_first 0x010100a4
int attr state_focused 0x0101009c
int attr state_hovered 0x01010367
int attr state_last 0x010100a6
int attr state_long_pressable 0x0101023c
int attr state_middle 0x010100a5
int attr state_multiline 0x0101034d
int attr state_pressed 0x010100a7
int attr state_selected 0x010100a1
int attr state_single 0x010100a3
int attr state_window_focused 0x0101009d
int attr staticWallpaperPreview 0x01010331
int attr statusBarColor 0x01010451
int attr stepSize 0x01010146
int attr stopWithTask 0x0101036a
int attr streamType 0x01010209
int attr stretchColumns 0x01010149
int attr stretchMode 0x01010116
int attr strokeAlpha 0x010104cb
int attr strokeColor 0x01010406
int attr strokeLineCap 0x0101040b
int attr strokeLineJoin 0x0101040c
int attr strokeMiterLimit 0x0101040d
int attr strokeWidth 0x01010407
int attr subMenuArrow 0x010104f3
int attr submitBackground 0x01010488
int attr subtitle 0x010102d1
int attr subtitleTextAppearance 0x0101042f
int attr subtitleTextColor 0x010104e4
int attr subtitleTextStyle 0x010102f9
int attr subtypeExtraValue 0x0101039a
int attr subtypeId 0x010103c1
int attr subtypeLocale 0x01010399
int attr suggestActionMsg 0x010101dc
int attr suggestActionMsgColumn 0x010101dd
int attr suggestionRowLayout 0x01010486
int attr summary 0x010101e9
int attr summaryColumn 0x010102a2
int attr summaryOff 0x010101f0
int attr summaryOn 0x010101ef
int attr supportsAssist 0x010104f0
int attr supportsLaunchVoiceAssistFromKeyguard 0x010104f1
int attr supportsLocalInteraction 0x0101050f
int attr supportsPictureInPicture 0x010104f7
int attr supportsRtl 0x010103af
int attr supportsSwitchingToNextInputMethod 0x010103eb
int attr supportsUploading 0x0101029b
int attr switchMinWidth 0x01010370
int attr switchPadding 0x01010371
int attr switchPreferenceStyle 0x0101036d
int attr switchStyle 0x0101043f
int attr switchTextAppearance 0x0101036e
int attr switchTextOff 0x0101036c
int attr switchTextOn 0x0101036b
int attr syncable 0x01010019
int attr tabStripEnabled 0x010102bd
int attr tabStripLeft 0x010102bb
int attr tabStripRight 0x010102bc
int attr tabWidgetStyle 0x01010083
int attr tag 0x010100d1
int attr targetActivity 0x01010202
int attr targetClass 0x0101002f
int attr targetDescriptions 0x010103a0
int attr targetId 0x010103dc
int attr targetName 0x0101044d
int attr targetPackage 0x01010021
int attr targetProcesses 0x01010541
int attr targetSandboxVersion 0x0101054c
int attr targetSdkVersion 0x01010270
int attr taskAffinity 0x01010012
int attr taskCloseEnterAnimation 0x010100be
int attr taskCloseExitAnimation 0x010100bf
int attr taskOpenEnterAnimation 0x010100bc
int attr taskOpenExitAnimation 0x010100bd
int attr taskToBackEnterAnimation 0x010100c2
int attr taskToBackExitAnimation 0x010100c3
int attr taskToFrontEnterAnimation 0x010100c0
int attr taskToFrontExitAnimation 0x010100c1
int attr tension 0x0101026a
int attr testOnly 0x01010272
int attr text 0x0101014f
int attr textAlignment 0x010103b1
int attr textAllCaps 0x0101038c
int attr textAppearance 0x01010034
int attr textAppearanceButton 0x01010207
int attr textAppearanceInverse 0x01010035
int attr textAppearanceLarge 0x01010040
int attr textAppearanceLargeInverse 0x01010043
int attr textAppearanceLargePopupMenu 0x01010301
int attr textAppearanceListItem 0x0101039e
int attr textAppearanceListItemSecondary 0x01010432
int attr textAppearanceListItemSmall 0x0101039f
int attr textAppearanceMedium 0x01010041
int attr textAppearanceMediumInverse 0x01010044
int attr textAppearancePopupMenuHeader 0x01010502
int attr textAppearanceSearchResultSubtitle 0x010102a0
int attr textAppearanceSearchResultTitle 0x010102a1
int attr textAppearanceSmall 0x01010042
int attr textAppearanceSmallInverse 0x01010045
int attr textAppearanceSmallPopupMenu 0x01010302
int attr textCheckMark 0x01010046
int attr textCheckMarkInverse 0x01010047
int attr textColor 0x01010098
int attr textColorAlertDialogListItem 0x01010306
int attr textColorHighlight 0x01010099
int attr textColorHighlightInverse 0x0101034f
int attr textColorHint 0x0101009a
int attr textColorHintInverse 0x0101003f
int attr textColorLink 0x0101009b
int attr textColorLinkInverse 0x01010350
int attr textColorPrimary 0x01010036
int attr textColorPrimaryDisableOnly 0x01010037
int attr textColorPrimaryInverse 0x01010039
int attr textColorPrimaryInverseDisableOnly 0x0101028b
int attr textColorPrimaryInverseNoDisable 0x0101003d
int attr textColorPrimaryNoDisable 0x0101003b
int attr textColorSecondary 0x01010038
int attr textColorSecondaryInverse 0x0101003a
int attr textColorSecondaryInverseNoDisable 0x0101003e
int attr textColorSecondaryNoDisable 0x0101003c
int attr textColorTertiary 0x01010212
int attr textColorTertiaryInverse 0x01010213
int attr textCursorDrawable 0x01010362
int attr textDirection 0x010103b0
int attr textEditNoPasteWindowLayout 0x01010315
int attr textEditPasteWindowLayout 0x01010314
int attr textEditSideNoPasteWindowLayout 0x0101035f
int attr textEditSidePasteWindowLayout 0x0101035e
int attr textEditSuggestionItemLayout 0x01010374
int attr textFilterEnabled 0x010100ff
int attr textIsSelectable 0x01010316
int attr textOff 0x01010125
int attr textOn 0x01010124
int attr textScaleX 0x01010151
int attr textSelectHandle 0x010102c7
int attr textSelectHandleLeft 0x010102c5
int attr textSelectHandleRight 0x010102c6
int attr textSelectHandleWindowStyle 0x010102c8
int attr textSize 0x01010095
int attr textStyle 0x01010097
int attr textSuggestionsWindowStyle 0x01010373
int attr textViewStyle 0x01010084
int attr theme 0x01010000
int attr thickness 0x01010260
int attr thicknessRatio 0x0101019c
int attr thumb 0x01010142
int attr thumbOffset 0x01010143
int attr thumbPosition 0x010104e5
int attr thumbTextPadding 0x01010372
int attr thumbTint 0x01010471
int attr thumbTintMode 0x01010472
int attr thumbnail 0x010102a5
int attr tickMark 0x0101050a
int attr tickMarkTint 0x0101050b
int attr tickMarkTintMode 0x0101050c
int attr tileMode 0x01010201
int attr tileModeX 0x01010477
int attr tileModeY 0x01010478
int attr timePickerDialogTheme 0x0101049e
int attr timePickerMode 0x010104b4
int attr timePickerStyle 0x0101049d
int attr timeZone 0x010103cc
int attr tint 0x01010121
int attr tintMode 0x010103fb
int attr title 0x010101e1
int attr titleCondensed 0x010101e2
int attr titleMargin 0x010104f8
int attr titleMarginBottom 0x010104fc
int attr titleMarginEnd 0x010104fa
int attr titleMarginStart 0x010104f9
int attr titleMarginTop 0x010104fb
int attr titleTextAppearance 0x0101042e
int attr titleTextColor 0x010104e3
int attr titleTextStyle 0x010102f8
int attr toAlpha 0x010101cb
int attr toDegrees 0x010101b4
int attr toId 0x01010449
int attr toScene 0x010103de
int attr toXDelta 0x010101c7
int attr toXScale 0x010101c3
int attr toYDelta 0x010101c9
int attr toYScale 0x010101c5
int attr toolbarStyle 0x010104aa
int attr tooltipText 0x01010534
int attr top 0x010101ae
int attr topBright 0x010100cb
int attr topDark 0x010100c7
int attr topLeftRadius 0x010101a9
int attr topOffset 0x01010258
int attr topRightRadius 0x010101aa
int attr touchscreenBlocksFocus 0x0101048f
int attr track 0x0101036f
int attr trackTint 0x010104d9
int attr trackTintMode 0x010104da
int attr transcriptMode 0x01010100
int attr transformPivotX 0x01010320
int attr transformPivotY 0x01010321
int attr transition 0x010103df
int attr transitionGroup 0x01010401
int attr transitionName 0x01010400
int attr transitionOrdering 0x010103e0
int attr transitionVisibilityMode 0x0101047c
int attr translateX 0x0101045a
int attr translateY 0x0101045b
int attr translationX 0x01010322
int attr translationY 0x01010323
int attr translationZ 0x010103fa
int attr trimPathEnd 0x01010409
int attr trimPathOffset 0x0101040a
int attr trimPathStart 0x01010408
int attr tunerCount 0x0101051d
int attr turnScreenOn 0x0101056a
int attr type 0x010101a1
int attr typeface 0x01010096
int attr uiOptions 0x01010398
int attr uncertainGestureColor 0x01010276
int attr unfocusedMonthDateColor 0x01010344
int attr unselectedAlpha 0x0101020e
int attr updatePeriodMillis 0x01010250
int attr use32bitAbi 0x01010515
int attr useDefaultMargins 0x01010379
int attr useIntrinsicSizeAsMinimum 0x01010310
int attr useLevel 0x0101019f
int attr userVisible 0x01010291
int attr usesCleartextTraffic 0x010104ec
int attr value 0x01010024
int attr valueFrom 0x010102de
int attr valueTo 0x010102df
int attr valueType 0x010102e0
int attr variablePadding 0x01010195
int attr vendor 0x010103e7
int attr version 0x01010519
int attr versionCode 0x0101021b
int attr versionName 0x0101021c
int attr verticalCorrection 0x0101023a
int attr verticalDivider 0x0101012e
int attr verticalGap 0x01010240
int attr verticalScrollbarPosition 0x01010334
int attr verticalSpacing 0x01010115
int attr viewportHeight 0x01010403
int attr viewportWidth 0x01010402
int attr visibility 0x010100dc
int attr visible 0x01010194
int attr visibleToInstantApps 0x01010531
int attr vmSafeMode 0x010102b8
int attr voiceIcon 0x01010484
int attr voiceLanguage 0x01010255
int attr voiceLanguageModel 0x01010253
int attr voiceMaxResults 0x01010256
int attr voicePromptText 0x01010254
int attr voiceSearchMode 0x01010252
int attr wallpaperCloseEnterAnimation 0x01010295
int attr wallpaperCloseExitAnimation 0x01010296
int attr wallpaperIntraCloseEnterAnimation 0x01010299
int attr wallpaperIntraCloseExitAnimation 0x0101029a
int attr wallpaperIntraOpenEnterAnimation 0x01010297
int attr wallpaperIntraOpenExitAnimation 0x01010298
int attr wallpaperOpenEnterAnimation 0x01010293
int attr wallpaperOpenExitAnimation 0x01010294
int attr webTextViewStyle 0x010102b9
int attr webViewStyle 0x01010085
int attr weekDayTextAppearance 0x01010348
int attr weekNumberColor 0x01010345
int attr weekSeparatorLineColor 0x01010346
int attr weightSum 0x01010128
int attr widgetCategory 0x010103c4
int attr widgetLayout 0x010101eb
int attr width 0x01010159
int attr windowActionBar 0x010102cd
int attr windowActionBarOverlay 0x010102e4
int attr windowActionModeOverlay 0x010102dd
int attr windowActivityTransitions 0x010104cd
int attr windowAllowEnterTransitionOverlap 0x0101043c
int attr windowAllowReturnTransitionOverlap 0x0101043b
int attr windowAnimationStyle 0x010100ae
int attr windowBackground 0x01010054
int attr windowBackgroundFallback 0x01010503
int attr windowClipToOutline 0x010104ab
int attr windowCloseOnTouchOutside 0x0101035b
int attr windowContentOverlay 0x01010059
int attr windowContentTransitionManager 0x010103f9
int attr windowContentTransitions 0x010103f8
int attr windowDisablePreview 0x01010222
int attr windowDrawsSystemBarBackgrounds 0x01010450
int attr windowElevation 0x01010490
int attr windowEnableSplitTouch 0x01010317
int attr windowEnterAnimation 0x010100b4
int attr windowEnterTransition 0x01010437
int attr windowExitAnimation 0x010100b5
int attr windowExitTransition 0x01010438
int attr windowFrame 0x01010055
int attr windowFullscreen 0x0101020d
int attr windowHideAnimation 0x010100b7
int attr windowIsFloating 0x01010057
int attr windowIsTranslucent 0x01010058
int attr windowLayoutInDisplayCutoutMode 0x01010586
int attr windowLightNavigationBar 0x0101056c
int attr windowLightStatusBar 0x010104e0
int attr windowMinWidthMajor 0x01010356
int attr windowMinWidthMinor 0x01010357
int attr windowNoDisplay 0x0101021e
int attr windowNoTitle 0x01010056
int attr windowOverscan 0x010103cf
int attr windowReenterTransition 0x010104af
int attr windowReturnTransition 0x010104ae
int attr windowSharedElementEnterTransition 0x01010439
int attr windowSharedElementExitTransition 0x0101043a
int attr windowSharedElementReenterTransition 0x010104b1
int attr windowSharedElementReturnTransition 0x010104b0
int attr windowSharedElementsUseOverlay 0x010104bb
int attr windowShowAnimation 0x010100b6
int attr windowShowWallpaper 0x01010292
int attr windowSoftInputMode 0x0101022b
int attr windowSplashscreenContent 0x01010564
int attr windowSwipeToDismiss 0x010103f3
int attr windowTitleBackgroundStyle 0x0101005c
int attr windowTitleSize 0x0101005a
int attr windowTitleStyle 0x0101005b
int attr windowTransitionBackgroundFadeDuration 0x01010461
int attr windowTranslucentNavigation 0x010103f0
int attr windowTranslucentStatus 0x010103ef
int attr writePermission 0x01010008
int attr x 0x010100ac
int attr xlargeScreens 0x010102bf
int attr y 0x010100ad
int attr yearListItemTextAppearance 0x01010499
int attr yearListSelectorColor 0x0101049a
int attr yesNoPreferenceStyle 0x01010090
int attr zAdjustment 0x010101c1
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/jniLibs"/></dataSet><dataSet config="debug"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/debug/jniLibs"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/shaders"/></dataSet><dataSet config="debug"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/debug/shaders"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/assets"/><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/build/generated/assets/shaders/debug"/></dataSet><dataSet config="debug"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/debug/assets"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/res"/><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/rs/debug"/><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/resValues/debug"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/res"/><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/rs/debug"/><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug$Generated" generated="true"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/debug/res"/></dataSet><dataSet config="debug" generated-set="debug$Generated"><source path="/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/debug/res"/></dataSet><mergedItems/></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nuttawutmalee.RCTBluetoothSerial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="27" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
\ No newline at end of file
[{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"react-native-bluetooth-serial-next-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.nuttawutmalee.RCTBluetoothSerial","split":""}}]
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nuttawutmalee.RCTBluetoothSerial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="27" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
\ No newline at end of file
[{"outputType":{"type":"MERGED_MANIFESTS"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"react-native-bluetooth-serial-next-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.nuttawutmalee.RCTBluetoothSerial","split":""}}]
\ No newline at end of file
com.nuttawutmalee.RCTBluetoothSerial
int anim abc_fade_in 0x7f010001
int anim abc_fade_out 0x7f010002
int anim abc_grow_fade_in_from_bottom 0x7f010003
int anim abc_popup_enter 0x7f010004
int anim abc_popup_exit 0x7f010005
int anim abc_shrink_fade_out_from_bottom 0x7f010006
int anim abc_slide_in_bottom 0x7f010007
int anim abc_slide_in_top 0x7f010008
int anim abc_slide_out_bottom 0x7f010009
int anim abc_slide_out_top 0x7f01000a
int anim abc_tooltip_enter 0x7f01000b
int anim abc_tooltip_exit 0x7f01000c
int anim catalyst_fade_in 0x7f01000d
int anim catalyst_fade_out 0x7f01000e
int anim catalyst_push_up_in 0x7f01000f
int anim catalyst_push_up_out 0x7f010010
int anim catalyst_slide_down 0x7f010011
int anim catalyst_slide_up 0x7f010012
int attr actionBarDivider 0x7f040001
int attr actionBarItemBackground 0x7f040002
int attr actionBarPopupTheme 0x7f040003
int attr actionBarSize 0x7f040004
int attr actionBarSplitStyle 0x7f040005
int attr actionBarStyle 0x7f040006
int attr actionBarTabBarStyle 0x7f040007
int attr actionBarTabStyle 0x7f040008
int attr actionBarTabTextStyle 0x7f040009
int attr actionBarTheme 0x7f04000a
int attr actionBarWidgetTheme 0x7f04000b
int attr actionButtonStyle 0x7f04000c
int attr actionDropDownStyle 0x7f04000d
int attr actionLayout 0x7f04000e
int attr actionMenuTextAppearance 0x7f04000f
int attr actionMenuTextColor 0x7f040010
int attr actionModeBackground 0x7f040011
int attr actionModeCloseButtonStyle 0x7f040012
int attr actionModeCloseDrawable 0x7f040013
int attr actionModeCopyDrawable 0x7f040014
int attr actionModeCutDrawable 0x7f040015
int attr actionModeFindDrawable 0x7f040016
int attr actionModePasteDrawable 0x7f040017
int attr actionModePopupWindowStyle 0x7f040018
int attr actionModeSelectAllDrawable 0x7f040019
int attr actionModeShareDrawable 0x7f04001a
int attr actionModeSplitBackground 0x7f04001b
int attr actionModeStyle 0x7f04001c
int attr actionModeWebSearchDrawable 0x7f04001d
int attr actionOverflowButtonStyle 0x7f04001e
int attr actionOverflowMenuStyle 0x7f04001f
int attr actionProviderClass 0x7f040020
int attr actionViewClass 0x7f040021
int attr activityChooserViewStyle 0x7f040022
int attr actualImageResource 0x7f040023
int attr actualImageScaleType 0x7f040024
int attr actualImageUri 0x7f040025
int attr alertDialogButtonGroupStyle 0x7f040026
int attr alertDialogCenterButtons 0x7f040027
int attr alertDialogStyle 0x7f040028
int attr alertDialogTheme 0x7f040029
int attr allowStacking 0x7f04002a
int attr alpha 0x7f04002b
int attr alphabeticModifiers 0x7f04002c
int attr arrowHeadLength 0x7f04002d
int attr arrowShaftLength 0x7f04002e
int attr autoCompleteTextViewStyle 0x7f04002f
int attr autoSizeMaxTextSize 0x7f040030
int attr autoSizeMinTextSize 0x7f040031
int attr autoSizePresetSizes 0x7f040032
int attr autoSizeStepGranularity 0x7f040033
int attr autoSizeTextType 0x7f040034
int attr background 0x7f040035
int attr backgroundImage 0x7f040036
int attr backgroundSplit 0x7f040037
int attr backgroundStacked 0x7f040038
int attr backgroundTint 0x7f040039
int attr backgroundTintMode 0x7f04003a
int attr barLength 0x7f04003b
int attr borderlessButtonStyle 0x7f04003c
int attr buttonBarButtonStyle 0x7f04003d
int attr buttonBarNegativeButtonStyle 0x7f04003e
int attr buttonBarNeutralButtonStyle 0x7f04003f
int attr buttonBarPositiveButtonStyle 0x7f040040
int attr buttonBarStyle 0x7f040041
int attr buttonGravity 0x7f040042
int attr buttonIconDimen 0x7f040043
int attr buttonPanelSideLayout 0x7f040044
int attr buttonStyle 0x7f040045
int attr buttonStyleSmall 0x7f040046
int attr buttonTint 0x7f040047
int attr buttonTintMode 0x7f040048
int attr checkboxStyle 0x7f040049
int attr checkedTextViewStyle 0x7f04004a
int attr closeIcon 0x7f04004b
int attr closeItemLayout 0x7f04004c
int attr collapseContentDescription 0x7f04004d
int attr collapseIcon 0x7f04004e
int attr color 0x7f04004f
int attr colorAccent 0x7f040050
int attr colorBackgroundFloating 0x7f040051
int attr colorButtonNormal 0x7f040052
int attr colorControlActivated 0x7f040053
int attr colorControlHighlight 0x7f040054
int attr colorControlNormal 0x7f040055
int attr colorError 0x7f040056
int attr colorPrimary 0x7f040057
int attr colorPrimaryDark 0x7f040058
int attr colorSwitchThumbNormal 0x7f040059
int attr commitIcon 0x7f04005a
int attr contentDescription 0x7f04005b
int attr contentInsetEnd 0x7f04005c
int attr contentInsetEndWithActions 0x7f04005d
int attr contentInsetLeft 0x7f04005e
int attr contentInsetRight 0x7f04005f
int attr contentInsetStart 0x7f040060
int attr contentInsetStartWithNavigation 0x7f040061
int attr controlBackground 0x7f040062
int attr coordinatorLayoutStyle 0x7f040063
int attr customNavigationLayout 0x7f040064
int attr defaultQueryHint 0x7f040065
int attr dialogPreferredPadding 0x7f040066
int attr dialogTheme 0x7f040067
int attr displayOptions 0x7f040068
int attr divider 0x7f040069
int attr dividerHorizontal 0x7f04006a
int attr dividerPadding 0x7f04006b
int attr dividerVertical 0x7f04006c
int attr drawableSize 0x7f04006d
int attr drawerArrowStyle 0x7f04006e
int attr dropDownListViewStyle 0x7f04006f
int attr dropdownListPreferredItemHeight 0x7f040070
int attr editTextBackground 0x7f040071
int attr editTextColor 0x7f040072
int attr editTextStyle 0x7f040073
int attr elevation 0x7f040074
int attr expandActivityOverflowButtonDrawable 0x7f040075
int attr fadeDuration 0x7f040076
int attr failureImage 0x7f040077
int attr failureImageScaleType 0x7f040078
int attr font 0x7f040079
int attr fontFamily 0x7f04007a
int attr fontProviderAuthority 0x7f04007b
int attr fontProviderCerts 0x7f04007c
int attr fontProviderFetchStrategy 0x7f04007d
int attr fontProviderFetchTimeout 0x7f04007e
int attr fontProviderPackage 0x7f04007f
int attr fontProviderQuery 0x7f040080
int attr fontStyle 0x7f040081
int attr fontWeight 0x7f040082
int attr gapBetweenBars 0x7f040083
int attr goIcon 0x7f040084
int attr height 0x7f040085
int attr hideOnContentScroll 0x7f040086
int attr homeAsUpIndicator 0x7f040087
int attr homeLayout 0x7f040088
int attr icon 0x7f040089
int attr iconTint 0x7f04008a
int attr iconTintMode 0x7f04008b
int attr iconifiedByDefault 0x7f04008c
int attr imageButtonStyle 0x7f04008d
int attr indeterminateProgressStyle 0x7f04008e
int attr initialActivityCount 0x7f04008f
int attr isLightTheme 0x7f040090
int attr itemPadding 0x7f040091
int attr keylines 0x7f040092
int attr layout 0x7f040093
int attr layout_anchor 0x7f040094
int attr layout_anchorGravity 0x7f040095
int attr layout_behavior 0x7f040096
int attr layout_dodgeInsetEdges 0x7f040097
int attr layout_insetEdge 0x7f040098
int attr layout_keyline 0x7f040099
int attr listChoiceBackgroundIndicator 0x7f04009a
int attr listDividerAlertDialog 0x7f04009b
int attr listItemLayout 0x7f04009c
int attr listLayout 0x7f04009d
int attr listMenuViewStyle 0x7f04009e
int attr listPopupWindowStyle 0x7f04009f
int attr listPreferredItemHeight 0x7f0400a0
int attr listPreferredItemHeightLarge 0x7f0400a1
int attr listPreferredItemHeightSmall 0x7f0400a2
int attr listPreferredItemPaddingLeft 0x7f0400a3
int attr listPreferredItemPaddingRight 0x7f0400a4
int attr logo 0x7f0400a5
int attr logoDescription 0x7f0400a6
int attr maxButtonHeight 0x7f0400a7
int attr measureWithLargestChild 0x7f0400a8
int attr multiChoiceItemLayout 0x7f0400a9
int attr navigationContentDescription 0x7f0400aa
int attr navigationIcon 0x7f0400ab
int attr navigationMode 0x7f0400ac
int attr numericModifiers 0x7f0400ad
int attr overlapAnchor 0x7f0400ae
int attr overlayImage 0x7f0400af
int attr paddingBottomNoButtons 0x7f0400b0
int attr paddingEnd 0x7f0400b1
int attr paddingStart 0x7f0400b2
int attr paddingTopNoTitle 0x7f0400b3
int attr panelBackground 0x7f0400b4
int attr panelMenuListTheme 0x7f0400b5
int attr panelMenuListWidth 0x7f0400b6
int attr placeholderImage 0x7f0400b7
int attr placeholderImageScaleType 0x7f0400b8
int attr popupMenuStyle 0x7f0400b9
int attr popupTheme 0x7f0400ba
int attr popupWindowStyle 0x7f0400bb
int attr preserveIconSpacing 0x7f0400bc
int attr pressedStateOverlayImage 0x7f0400bd
int attr progressBarAutoRotateInterval 0x7f0400be
int attr progressBarImage 0x7f0400bf
int attr progressBarImageScaleType 0x7f0400c0
int attr progressBarPadding 0x7f0400c1
int attr progressBarStyle 0x7f0400c2
int attr queryBackground 0x7f0400c3
int attr queryHint 0x7f0400c4
int attr radioButtonStyle 0x7f0400c5
int attr ratingBarStyle 0x7f0400c6
int attr ratingBarStyleIndicator 0x7f0400c7
int attr ratingBarStyleSmall 0x7f0400c8
int attr retryImage 0x7f0400c9
int attr retryImageScaleType 0x7f0400ca
int attr roundAsCircle 0x7f0400cb
int attr roundBottomEnd 0x7f0400cc
int attr roundBottomLeft 0x7f0400cd
int attr roundBottomRight 0x7f0400ce
int attr roundBottomStart 0x7f0400cf
int attr roundTopEnd 0x7f0400d0
int attr roundTopLeft 0x7f0400d1
int attr roundTopRight 0x7f0400d2
int attr roundTopStart 0x7f0400d3
int attr roundWithOverlayColor 0x7f0400d4
int attr roundedCornerRadius 0x7f0400d5
int attr roundingBorderColor 0x7f0400d6
int attr roundingBorderPadding 0x7f0400d7
int attr roundingBorderWidth 0x7f0400d8
int attr searchHintIcon 0x7f0400d9
int attr searchIcon 0x7f0400da
int attr searchViewStyle 0x7f0400db
int attr seekBarStyle 0x7f0400dc
int attr selectableItemBackground 0x7f0400dd
int attr selectableItemBackgroundBorderless 0x7f0400de
int attr showAsAction 0x7f0400df
int attr showDividers 0x7f0400e0
int attr showText 0x7f0400e1
int attr showTitle 0x7f0400e2
int attr singleChoiceItemLayout 0x7f0400e3
int attr spinBars 0x7f0400e4
int attr spinnerDropDownItemStyle 0x7f0400e5
int attr spinnerStyle 0x7f0400e6
int attr splitTrack 0x7f0400e7
int attr srcCompat 0x7f0400e8
int attr state_above_anchor 0x7f0400e9
int attr statusBarBackground 0x7f0400ea
int attr subMenuArrow 0x7f0400eb
int attr submitBackground 0x7f0400ec
int attr subtitle 0x7f0400ed
int attr subtitleTextAppearance 0x7f0400ee
int attr subtitleTextColor 0x7f0400ef
int attr subtitleTextStyle 0x7f0400f0
int attr suggestionRowLayout 0x7f0400f1
int attr switchMinWidth 0x7f0400f2
int attr switchPadding 0x7f0400f3
int attr switchStyle 0x7f0400f4
int attr switchTextAppearance 0x7f0400f5
int attr textAllCaps 0x7f0400f6
int attr textAppearanceLargePopupMenu 0x7f0400f7
int attr textAppearanceListItem 0x7f0400f8
int attr textAppearanceListItemSecondary 0x7f0400f9
int attr textAppearanceListItemSmall 0x7f0400fa
int attr textAppearancePopupMenuHeader 0x7f0400fb
int attr textAppearanceSearchResultSubtitle 0x7f0400fc
int attr textAppearanceSearchResultTitle 0x7f0400fd
int attr textAppearanceSmallPopupMenu 0x7f0400fe
int attr textColorAlertDialogListItem 0x7f0400ff
int attr textColorSearchUrl 0x7f040100
int attr theme 0x7f040101
int attr thickness 0x7f040102
int attr thumbTextPadding 0x7f040103
int attr thumbTint 0x7f040104
int attr thumbTintMode 0x7f040105
int attr tickMark 0x7f040106
int attr tickMarkTint 0x7f040107
int attr tickMarkTintMode 0x7f040108
int attr tint 0x7f040109
int attr tintMode 0x7f04010a
int attr title 0x7f04010b
int attr titleMargin 0x7f04010c
int attr titleMarginBottom 0x7f04010d
int attr titleMarginEnd 0x7f04010e
int attr titleMarginStart 0x7f04010f
int attr titleMarginTop 0x7f040110
int attr titleMargins 0x7f040111
int attr titleTextAppearance 0x7f040112
int attr titleTextColor 0x7f040113
int attr titleTextStyle 0x7f040114
int attr toolbarNavigationButtonStyle 0x7f040115
int attr toolbarStyle 0x7f040116
int attr tooltipForegroundColor 0x7f040117
int attr tooltipFrameBackground 0x7f040118
int attr tooltipText 0x7f040119
int attr track 0x7f04011a
int attr trackTint 0x7f04011b
int attr trackTintMode 0x7f04011c
int attr viewAspectRatio 0x7f04011d
int attr viewInflaterClass 0x7f04011e
int attr voiceIcon 0x7f04011f
int attr windowActionBar 0x7f040120
int attr windowActionBarOverlay 0x7f040121
int attr windowActionModeOverlay 0x7f040122
int attr windowFixedHeightMajor 0x7f040123
int attr windowFixedHeightMinor 0x7f040124
int attr windowFixedWidthMajor 0x7f040125
int attr windowFixedWidthMinor 0x7f040126
int attr windowMinWidthMajor 0x7f040127
int attr windowMinWidthMinor 0x7f040128
int attr windowNoTitle 0x7f040129
int bool abc_action_bar_embed_tabs 0x7f050001
int bool abc_allow_stacked_button_bar 0x7f050002
int bool abc_config_actionMenuItemAllCaps 0x7f050003
int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f050004
int color abc_background_cache_hint_selector_material_dark 0x7f060001
int color abc_background_cache_hint_selector_material_light 0x7f060002
int color abc_btn_colored_borderless_text_material 0x7f060003
int color abc_btn_colored_text_material 0x7f060004
int color abc_color_highlight_material 0x7f060005
int color abc_hint_foreground_material_dark 0x7f060006
int color abc_hint_foreground_material_light 0x7f060007
int color abc_input_method_navigation_guard 0x7f060008
int color abc_primary_text_disable_only_material_dark 0x7f060009
int color abc_primary_text_disable_only_material_light 0x7f06000a
int color abc_primary_text_material_dark 0x7f06000b
int color abc_primary_text_material_light 0x7f06000c
int color abc_search_url_text 0x7f06000d
int color abc_search_url_text_normal 0x7f06000e
int color abc_search_url_text_pressed 0x7f06000f
int color abc_search_url_text_selected 0x7f060010
int color abc_secondary_text_material_dark 0x7f060011
int color abc_secondary_text_material_light 0x7f060012
int color abc_tint_btn_checkable 0x7f060013
int color abc_tint_default 0x7f060014
int color abc_tint_edittext 0x7f060015
int color abc_tint_seek_thumb 0x7f060016
int color abc_tint_spinner 0x7f060017
int color abc_tint_switch_track 0x7f060018
int color accent_material_dark 0x7f060019
int color accent_material_light 0x7f06001a
int color background_floating_material_dark 0x7f06001b
int color background_floating_material_light 0x7f06001c
int color background_material_dark 0x7f06001d
int color background_material_light 0x7f06001e
int color bright_foreground_disabled_material_dark 0x7f06001f
int color bright_foreground_disabled_material_light 0x7f060020
int color bright_foreground_inverse_material_dark 0x7f060021
int color bright_foreground_inverse_material_light 0x7f060022
int color bright_foreground_material_dark 0x7f060023
int color bright_foreground_material_light 0x7f060024
int color button_material_dark 0x7f060025
int color button_material_light 0x7f060026
int color catalyst_redbox_background 0x7f060027
int color dim_foreground_disabled_material_dark 0x7f060028
int color dim_foreground_disabled_material_light 0x7f060029
int color dim_foreground_material_dark 0x7f06002a
int color dim_foreground_material_light 0x7f06002b
int color error_color_material 0x7f06002c
int color foreground_material_dark 0x7f06002d
int color foreground_material_light 0x7f06002e
int color highlighted_text_material_dark 0x7f06002f
int color highlighted_text_material_light 0x7f060030
int color material_blue_grey_800 0x7f060031
int color material_blue_grey_900 0x7f060032
int color material_blue_grey_950 0x7f060033
int color material_deep_teal_200 0x7f060034
int color material_deep_teal_500 0x7f060035
int color material_grey_100 0x7f060036
int color material_grey_300 0x7f060037
int color material_grey_50 0x7f060038
int color material_grey_600 0x7f060039
int color material_grey_800 0x7f06003a
int color material_grey_850 0x7f06003b
int color material_grey_900 0x7f06003c
int color notification_action_color_filter 0x7f06003d
int color notification_icon_bg_color 0x7f06003e
int color primary_dark_material_dark 0x7f06003f
int color primary_dark_material_light 0x7f060040
int color primary_material_dark 0x7f060041
int color primary_material_light 0x7f060042
int color primary_text_default_material_dark 0x7f060043
int color primary_text_default_material_light 0x7f060044
int color primary_text_disabled_material_dark 0x7f060045
int color primary_text_disabled_material_light 0x7f060046
int color ripple_material_dark 0x7f060047
int color ripple_material_light 0x7f060048
int color secondary_text_default_material_dark 0x7f060049
int color secondary_text_default_material_light 0x7f06004a
int color secondary_text_disabled_material_dark 0x7f06004b
int color secondary_text_disabled_material_light 0x7f06004c
int color switch_thumb_disabled_material_dark 0x7f06004d
int color switch_thumb_disabled_material_light 0x7f06004e
int color switch_thumb_material_dark 0x7f06004f
int color switch_thumb_material_light 0x7f060050
int color switch_thumb_normal_material_dark 0x7f060051
int color switch_thumb_normal_material_light 0x7f060052
int color tooltip_background_dark 0x7f060053
int color tooltip_background_light 0x7f060054
int dimen abc_action_bar_content_inset_material 0x7f080001
int dimen abc_action_bar_content_inset_with_nav 0x7f080002
int dimen abc_action_bar_default_height_material 0x7f080003
int dimen abc_action_bar_default_padding_end_material 0x7f080004
int dimen abc_action_bar_default_padding_start_material 0x7f080005
int dimen abc_action_bar_elevation_material 0x7f080006
int dimen abc_action_bar_icon_vertical_padding_material 0x7f080007
int dimen abc_action_bar_overflow_padding_end_material 0x7f080008
int dimen abc_action_bar_overflow_padding_start_material 0x7f080009
int dimen abc_action_bar_progress_bar_size 0x7f08000a
int dimen abc_action_bar_stacked_max_height 0x7f08000b
int dimen abc_action_bar_stacked_tab_max_width 0x7f08000c
int dimen abc_action_bar_subtitle_bottom_margin_material 0x7f08000d
int dimen abc_action_bar_subtitle_top_margin_material 0x7f08000e
int dimen abc_action_button_min_height_material 0x7f08000f
int dimen abc_action_button_min_width_material 0x7f080010
int dimen abc_action_button_min_width_overflow_material 0x7f080011
int dimen abc_alert_dialog_button_bar_height 0x7f080012
int dimen abc_alert_dialog_button_dimen 0x7f080013
int dimen abc_button_inset_horizontal_material 0x7f080014
int dimen abc_button_inset_vertical_material 0x7f080015
int dimen abc_button_padding_horizontal_material 0x7f080016
int dimen abc_button_padding_vertical_material 0x7f080017
int dimen abc_cascading_menus_min_smallest_width 0x7f080018
int dimen abc_config_prefDialogWidth 0x7f080019
int dimen abc_control_corner_material 0x7f08001a
int dimen abc_control_inset_material 0x7f08001b
int dimen abc_control_padding_material 0x7f08001c
int dimen abc_dialog_fixed_height_major 0x7f08001d
int dimen abc_dialog_fixed_height_minor 0x7f08001e
int dimen abc_dialog_fixed_width_major 0x7f08001f
int dimen abc_dialog_fixed_width_minor 0x7f080020
int dimen abc_dialog_list_padding_bottom_no_buttons 0x7f080021
int dimen abc_dialog_list_padding_top_no_title 0x7f080022
int dimen abc_dialog_min_width_major 0x7f080023
int dimen abc_dialog_min_width_minor 0x7f080024
int dimen abc_dialog_padding_material 0x7f080025
int dimen abc_dialog_padding_top_material 0x7f080026
int dimen abc_dialog_title_divider_material 0x7f080027
int dimen abc_disabled_alpha_material_dark 0x7f080028
int dimen abc_disabled_alpha_material_light 0x7f080029
int dimen abc_dropdownitem_icon_width 0x7f08002a
int dimen abc_dropdownitem_text_padding_left 0x7f08002b
int dimen abc_dropdownitem_text_padding_right 0x7f08002c
int dimen abc_edit_text_inset_bottom_material 0x7f08002d
int dimen abc_edit_text_inset_horizontal_material 0x7f08002e
int dimen abc_edit_text_inset_top_material 0x7f08002f
int dimen abc_floating_window_z 0x7f080030
int dimen abc_list_item_padding_horizontal_material 0x7f080031
int dimen abc_panel_menu_list_width 0x7f080032
int dimen abc_progress_bar_height_material 0x7f080033
int dimen abc_search_view_preferred_height 0x7f080034
int dimen abc_search_view_preferred_width 0x7f080035
int dimen abc_seekbar_track_background_height_material 0x7f080036
int dimen abc_seekbar_track_progress_height_material 0x7f080037
int dimen abc_select_dialog_padding_start_material 0x7f080038
int dimen abc_switch_padding 0x7f080039
int dimen abc_text_size_body_1_material 0x7f08003a
int dimen abc_text_size_body_2_material 0x7f08003b
int dimen abc_text_size_button_material 0x7f08003c
int dimen abc_text_size_caption_material 0x7f08003d
int dimen abc_text_size_display_1_material 0x7f08003e
int dimen abc_text_size_display_2_material 0x7f08003f
int dimen abc_text_size_display_3_material 0x7f080040
int dimen abc_text_size_display_4_material 0x7f080041
int dimen abc_text_size_headline_material 0x7f080042
int dimen abc_text_size_large_material 0x7f080043
int dimen abc_text_size_medium_material 0x7f080044
int dimen abc_text_size_menu_header_material 0x7f080045
int dimen abc_text_size_menu_material 0x7f080046
int dimen abc_text_size_small_material 0x7f080047
int dimen abc_text_size_subhead_material 0x7f080048
int dimen abc_text_size_subtitle_material_toolbar 0x7f080049
int dimen abc_text_size_title_material 0x7f08004a
int dimen abc_text_size_title_material_toolbar 0x7f08004b
int dimen compat_button_inset_horizontal_material 0x7f08004c
int dimen compat_button_inset_vertical_material 0x7f08004d
int dimen compat_button_padding_horizontal_material 0x7f08004e
int dimen compat_button_padding_vertical_material 0x7f08004f
int dimen compat_control_corner_material 0x7f080050
int dimen disabled_alpha_material_dark 0x7f080051
int dimen disabled_alpha_material_light 0x7f080052
int dimen highlight_alpha_material_colored 0x7f080053
int dimen highlight_alpha_material_dark 0x7f080054
int dimen highlight_alpha_material_light 0x7f080055
int dimen hint_alpha_material_dark 0x7f080056
int dimen hint_alpha_material_light 0x7f080057
int dimen hint_pressed_alpha_material_dark 0x7f080058
int dimen hint_pressed_alpha_material_light 0x7f080059
int dimen notification_action_icon_size 0x7f08005a
int dimen notification_action_text_size 0x7f08005b
int dimen notification_big_circle_margin 0x7f08005c
int dimen notification_content_margin_start 0x7f08005d
int dimen notification_large_icon_height 0x7f08005e
int dimen notification_large_icon_width 0x7f08005f
int dimen notification_main_column_padding_top 0x7f080060
int dimen notification_media_narrow_margin 0x7f080061
int dimen notification_right_icon_size 0x7f080062
int dimen notification_right_side_padding_top 0x7f080063
int dimen notification_small_icon_background_padding 0x7f080064
int dimen notification_small_icon_size_as_large 0x7f080065
int dimen notification_subtext_size 0x7f080066
int dimen notification_top_pad 0x7f080067
int dimen notification_top_pad_large_text 0x7f080068
int dimen tooltip_corner_radius 0x7f080069
int dimen tooltip_horizontal_padding 0x7f08006a
int dimen tooltip_margin 0x7f08006b
int dimen tooltip_precise_anchor_extra_offset 0x7f08006c
int dimen tooltip_precise_anchor_threshold 0x7f08006d
int dimen tooltip_vertical_padding 0x7f08006e
int dimen tooltip_y_offset_non_touch 0x7f08006f
int dimen tooltip_y_offset_touch 0x7f080070
int drawable abc_ab_share_pack_mtrl_alpha 0x7f090001
int drawable abc_action_bar_item_background_material 0x7f090002
int drawable abc_btn_borderless_material 0x7f090003
int drawable abc_btn_check_material 0x7f090004
int drawable abc_btn_check_to_on_mtrl_000 0x7f090005
int drawable abc_btn_check_to_on_mtrl_015 0x7f090006
int drawable abc_btn_colored_material 0x7f090007
int drawable abc_btn_default_mtrl_shape 0x7f090008
int drawable abc_btn_radio_material 0x7f090009
int drawable abc_btn_radio_to_on_mtrl_000 0x7f09000a
int drawable abc_btn_radio_to_on_mtrl_015 0x7f09000b
int drawable abc_btn_switch_to_on_mtrl_00001 0x7f09000c
int drawable abc_btn_switch_to_on_mtrl_00012 0x7f09000d
int drawable abc_cab_background_internal_bg 0x7f09000e
int drawable abc_cab_background_top_material 0x7f09000f
int drawable abc_cab_background_top_mtrl_alpha 0x7f090010
int drawable abc_control_background_material 0x7f090011
int drawable abc_dialog_material_background 0x7f090012
int drawable abc_edit_text_material 0x7f090013
int drawable abc_ic_ab_back_material 0x7f090014
int drawable abc_ic_arrow_drop_right_black_24dp 0x7f090015
int drawable abc_ic_clear_material 0x7f090016
int drawable abc_ic_commit_search_api_mtrl_alpha 0x7f090017
int drawable abc_ic_go_search_api_material 0x7f090018
int drawable abc_ic_menu_copy_mtrl_am_alpha 0x7f090019
int drawable abc_ic_menu_cut_mtrl_alpha 0x7f09001a
int drawable abc_ic_menu_overflow_material 0x7f09001b
int drawable abc_ic_menu_paste_mtrl_am_alpha 0x7f09001c
int drawable abc_ic_menu_selectall_mtrl_alpha 0x7f09001d
int drawable abc_ic_menu_share_mtrl_alpha 0x7f09001e
int drawable abc_ic_search_api_material 0x7f09001f
int drawable abc_ic_star_black_16dp 0x7f090020
int drawable abc_ic_star_black_36dp 0x7f090021
int drawable abc_ic_star_black_48dp 0x7f090022
int drawable abc_ic_star_half_black_16dp 0x7f090023
int drawable abc_ic_star_half_black_36dp 0x7f090024
int drawable abc_ic_star_half_black_48dp 0x7f090025
int drawable abc_ic_voice_search_api_material 0x7f090026
int drawable abc_item_background_holo_dark 0x7f090027
int drawable abc_item_background_holo_light 0x7f090028
int drawable abc_list_divider_mtrl_alpha 0x7f090029
int drawable abc_list_focused_holo 0x7f09002a
int drawable abc_list_longpressed_holo 0x7f09002b
int drawable abc_list_pressed_holo_dark 0x7f09002c
int drawable abc_list_pressed_holo_light 0x7f09002d
int drawable abc_list_selector_background_transition_holo_dark 0x7f09002e
int drawable abc_list_selector_background_transition_holo_light 0x7f09002f
int drawable abc_list_selector_disabled_holo_dark 0x7f090030
int drawable abc_list_selector_disabled_holo_light 0x7f090031
int drawable abc_list_selector_holo_dark 0x7f090032
int drawable abc_list_selector_holo_light 0x7f090033
int drawable abc_menu_hardkey_panel_mtrl_mult 0x7f090034
int drawable abc_popup_background_mtrl_mult 0x7f090035
int drawable abc_ratingbar_indicator_material 0x7f090036
int drawable abc_ratingbar_material 0x7f090037
int drawable abc_ratingbar_small_material 0x7f090038
int drawable abc_scrubber_control_off_mtrl_alpha 0x7f090039
int drawable abc_scrubber_control_to_pressed_mtrl_000 0x7f09003a
int drawable abc_scrubber_control_to_pressed_mtrl_005 0x7f09003b
int drawable abc_scrubber_primary_mtrl_alpha 0x7f09003c
int drawable abc_scrubber_track_mtrl_alpha 0x7f09003d
int drawable abc_seekbar_thumb_material 0x7f09003e
int drawable abc_seekbar_tick_mark_material 0x7f09003f
int drawable abc_seekbar_track_material 0x7f090040
int drawable abc_spinner_mtrl_am_alpha 0x7f090041
int drawable abc_spinner_textfield_background_material 0x7f090042
int drawable abc_switch_thumb_material 0x7f090043
int drawable abc_switch_track_mtrl_alpha 0x7f090044
int drawable abc_tab_indicator_material 0x7f090045
int drawable abc_tab_indicator_mtrl_alpha 0x7f090046
int drawable abc_text_cursor_material 0x7f090047
int drawable abc_text_select_handle_left_mtrl_dark 0x7f090048
int drawable abc_text_select_handle_left_mtrl_light 0x7f090049
int drawable abc_text_select_handle_middle_mtrl_dark 0x7f09004a
int drawable abc_text_select_handle_middle_mtrl_light 0x7f09004b
int drawable abc_text_select_handle_right_mtrl_dark 0x7f09004c
int drawable abc_text_select_handle_right_mtrl_light 0x7f09004d
int drawable abc_textfield_activated_mtrl_alpha 0x7f09004e
int drawable abc_textfield_default_mtrl_alpha 0x7f09004f
int drawable abc_textfield_search_activated_mtrl_alpha 0x7f090050
int drawable abc_textfield_search_default_mtrl_alpha 0x7f090051
int drawable abc_textfield_search_material 0x7f090052
int drawable abc_vector_test 0x7f090053
int drawable notification_action_background 0x7f090054
int drawable notification_bg 0x7f090055
int drawable notification_bg_low 0x7f090056
int drawable notification_bg_low_normal 0x7f090057
int drawable notification_bg_low_pressed 0x7f090058
int drawable notification_bg_normal 0x7f090059
int drawable notification_bg_normal_pressed 0x7f09005a
int drawable notification_icon_background 0x7f09005b
int drawable notification_template_icon_bg 0x7f09005c
int drawable notification_template_icon_low_bg 0x7f09005d
int drawable notification_tile_bg 0x7f09005e
int drawable notify_panel_notification_icon_bg 0x7f09005f
int drawable tooltip_frame_dark 0x7f090060
int drawable tooltip_frame_light 0x7f090061
int id accessibility_hint 0x7f0c0001
int id accessibility_role 0x7f0c0002
int id action_bar 0x7f0c0003
int id action_bar_activity_content 0x7f0c0004
int id action_bar_container 0x7f0c0005
int id action_bar_root 0x7f0c0006
int id action_bar_spinner 0x7f0c0007
int id action_bar_subtitle 0x7f0c0008
int id action_bar_title 0x7f0c0009
int id action_container 0x7f0c000a
int id action_context_bar 0x7f0c000b
int id action_divider 0x7f0c000c
int id action_image 0x7f0c000d
int id action_menu_divider 0x7f0c000e
int id action_menu_presenter 0x7f0c000f
int id action_mode_bar 0x7f0c0010
int id action_mode_bar_stub 0x7f0c0011
int id action_mode_close_button 0x7f0c0012
int id action_text 0x7f0c0013
int id actions 0x7f0c0014
int id activity_chooser_view_content 0x7f0c0015
int id add 0x7f0c0016
int id alertTitle 0x7f0c0017
int id async 0x7f0c0018
int id blocking 0x7f0c0019
int id bottom 0x7f0c001a
int id buttonPanel 0x7f0c001b
int id catalyst_redbox_title 0x7f0c001c
int id center 0x7f0c001d
int id centerCrop 0x7f0c001e
int id centerInside 0x7f0c001f
int id checkbox 0x7f0c0020
int id chronometer 0x7f0c0021
int id contentPanel 0x7f0c0022
int id custom 0x7f0c0023
int id customPanel 0x7f0c0024
int id decor_content_parent 0x7f0c0025
int id default_activity_button 0x7f0c0026
int id edit_query 0x7f0c0027
int id end 0x7f0c0028
int id expand_activities_button 0x7f0c0029
int id expanded_menu 0x7f0c002a
int id fitBottomStart 0x7f0c002b
int id fitCenter 0x7f0c002c
int id fitEnd 0x7f0c002d
int id fitStart 0x7f0c002e
int id fitXY 0x7f0c002f
int id focusCrop 0x7f0c0030
int id forever 0x7f0c0031
int id fps_text 0x7f0c0032
int id home 0x7f0c0033
int id icon 0x7f0c0034
int id icon_group 0x7f0c0035
int id image 0x7f0c0036
int id info 0x7f0c0037
int id italic 0x7f0c0038
int id left 0x7f0c0039
int id line1 0x7f0c003a
int id line3 0x7f0c003b
int id listMode 0x7f0c003c
int id list_item 0x7f0c003d
int id message 0x7f0c003e
int id multiply 0x7f0c003f
int id none 0x7f0c0040
int id normal 0x7f0c0041
int id notification_background 0x7f0c0042
int id notification_main_column 0x7f0c0043
int id notification_main_column_container 0x7f0c0044
int id parentPanel 0x7f0c0045
int id progress_circular 0x7f0c0046
int id progress_horizontal 0x7f0c0047
int id radio 0x7f0c0048
int id react_test_id 0x7f0c0049
int id right 0x7f0c004a
int id right_icon 0x7f0c004b
int id right_side 0x7f0c004c
int id rn_frame_file 0x7f0c004d
int id rn_frame_method 0x7f0c004e
int id rn_redbox_copy_button 0x7f0c004f
int id rn_redbox_dismiss_button 0x7f0c0050
int id rn_redbox_line_separator 0x7f0c0051
int id rn_redbox_loading_indicator 0x7f0c0052
int id rn_redbox_reload_button 0x7f0c0053
int id rn_redbox_report_button 0x7f0c0054
int id rn_redbox_report_label 0x7f0c0055
int id rn_redbox_stack 0x7f0c0056
int id screen 0x7f0c0057
int id scrollIndicatorDown 0x7f0c0058
int id scrollIndicatorUp 0x7f0c0059
int id scrollView 0x7f0c005a
int id search_badge 0x7f0c005b
int id search_bar 0x7f0c005c
int id search_button 0x7f0c005d
int id search_close_btn 0x7f0c005e
int id search_edit_frame 0x7f0c005f
int id search_go_btn 0x7f0c0060
int id search_mag_icon 0x7f0c0061
int id search_plate 0x7f0c0062
int id search_src_text 0x7f0c0063
int id search_voice_btn 0x7f0c0064
int id select_dialog_listview 0x7f0c0065
int id shortcut 0x7f0c0066
int id spacer 0x7f0c0067
int id split_action_bar 0x7f0c0068
int id src_atop 0x7f0c0069
int id src_in 0x7f0c006a
int id src_over 0x7f0c006b
int id start 0x7f0c006c
int id submenuarrow 0x7f0c006d
int id submit_area 0x7f0c006e
int id tabMode 0x7f0c006f
int id tag_transition_group 0x7f0c0070
int id text 0x7f0c0071
int id text2 0x7f0c0072
int id textSpacerNoButtons 0x7f0c0073
int id textSpacerNoTitle 0x7f0c0074
int id time 0x7f0c0075
int id title 0x7f0c0076
int id titleDividerNoCustom 0x7f0c0077
int id title_template 0x7f0c0078
int id top 0x7f0c0079
int id topPanel 0x7f0c007a
int id uniform 0x7f0c007b
int id up 0x7f0c007c
int id view_tag_instance_handle 0x7f0c007d
int id view_tag_native_id 0x7f0c007e
int id wrap_content 0x7f0c007f
int integer abc_config_activityDefaultDur 0x7f0d0001
int integer abc_config_activityShortDur 0x7f0d0002
int integer cancel_button_image_alpha 0x7f0d0003
int integer config_tooltipAnimTime 0x7f0d0004
int integer status_bar_notification_info_maxnum 0x7f0d0005
int layout abc_action_bar_title_item 0x7f0f0001
int layout abc_action_bar_up_container 0x7f0f0002
int layout abc_action_menu_item_layout 0x7f0f0003
int layout abc_action_menu_layout 0x7f0f0004
int layout abc_action_mode_bar 0x7f0f0005
int layout abc_action_mode_close_item_material 0x7f0f0006
int layout abc_activity_chooser_view 0x7f0f0007
int layout abc_activity_chooser_view_list_item 0x7f0f0008
int layout abc_alert_dialog_button_bar_material 0x7f0f0009
int layout abc_alert_dialog_material 0x7f0f000a
int layout abc_alert_dialog_title_material 0x7f0f000b
int layout abc_dialog_title_material 0x7f0f000c
int layout abc_expanded_menu_layout 0x7f0f000d
int layout abc_list_menu_item_checkbox 0x7f0f000e
int layout abc_list_menu_item_icon 0x7f0f000f
int layout abc_list_menu_item_layout 0x7f0f0010
int layout abc_list_menu_item_radio 0x7f0f0011
int layout abc_popup_menu_header_item_layout 0x7f0f0012
int layout abc_popup_menu_item_layout 0x7f0f0013
int layout abc_screen_content_include 0x7f0f0014
int layout abc_screen_simple 0x7f0f0015
int layout abc_screen_simple_overlay_action_mode 0x7f0f0016
int layout abc_screen_toolbar 0x7f0f0017
int layout abc_search_dropdown_item_icons_2line 0x7f0f0018
int layout abc_search_view 0x7f0f0019
int layout abc_select_dialog_material 0x7f0f001a
int layout abc_tooltip 0x7f0f001b
int layout dev_loading_view 0x7f0f001c
int layout fps_view 0x7f0f001d
int layout notification_action 0x7f0f001e
int layout notification_action_tombstone 0x7f0f001f
int layout notification_template_custom_big 0x7f0f0020
int layout notification_template_icon_group 0x7f0f0021
int layout notification_template_part_chronometer 0x7f0f0022
int layout notification_template_part_time 0x7f0f0023
int layout redbox_item_frame 0x7f0f0024
int layout redbox_item_title 0x7f0f0025
int layout redbox_view 0x7f0f0026
int layout select_dialog_item_material 0x7f0f0027
int layout select_dialog_multichoice_material 0x7f0f0028
int layout select_dialog_singlechoice_material 0x7f0f0029
int layout support_simple_spinner_dropdown_item 0x7f0f002a
int string abc_action_bar_home_description 0x7f150001
int string abc_action_bar_up_description 0x7f150002
int string abc_action_menu_overflow_description 0x7f150003
int string abc_action_mode_done 0x7f150004
int string abc_activity_chooser_view_see_all 0x7f150005
int string abc_activitychooserview_choose_application 0x7f150006
int string abc_capital_off 0x7f150007
int string abc_capital_on 0x7f150008
int string abc_font_family_body_1_material 0x7f150009
int string abc_font_family_body_2_material 0x7f15000a
int string abc_font_family_button_material 0x7f15000b
int string abc_font_family_caption_material 0x7f15000c
int string abc_font_family_display_1_material 0x7f15000d
int string abc_font_family_display_2_material 0x7f15000e
int string abc_font_family_display_3_material 0x7f15000f
int string abc_font_family_display_4_material 0x7f150010
int string abc_font_family_headline_material 0x7f150011
int string abc_font_family_menu_material 0x7f150012
int string abc_font_family_subhead_material 0x7f150013
int string abc_font_family_title_material 0x7f150014
int string abc_search_hint 0x7f150015
int string abc_searchview_description_clear 0x7f150016
int string abc_searchview_description_query 0x7f150017
int string abc_searchview_description_search 0x7f150018
int string abc_searchview_description_submit 0x7f150019
int string abc_searchview_description_voice 0x7f15001a
int string abc_shareactionprovider_share_with 0x7f15001b
int string abc_shareactionprovider_share_with_application 0x7f15001c
int string abc_toolbar_collapse_description 0x7f15001d
int string adjustable_description 0x7f15001e
int string catalyst_copy_button 0x7f15001f
int string catalyst_debugjs 0x7f150020
int string catalyst_debugjs_nuclide 0x7f150021
int string catalyst_debugjs_nuclide_failure 0x7f150022
int string catalyst_debugjs_off 0x7f150023
int string catalyst_dismiss_button 0x7f150024
int string catalyst_element_inspector 0x7f150025
int string catalyst_heap_capture 0x7f150026
int string catalyst_hot_module_replacement 0x7f150027
int string catalyst_hot_module_replacement_off 0x7f150028
int string catalyst_jsload_error 0x7f150029
int string catalyst_live_reload 0x7f15002a
int string catalyst_live_reload_off 0x7f15002b
int string catalyst_loading_from_url 0x7f15002c
int string catalyst_perf_monitor 0x7f15002d
int string catalyst_perf_monitor_off 0x7f15002e
int string catalyst_poke_sampling_profiler 0x7f15002f
int string catalyst_reload_button 0x7f150030
int string catalyst_reloadjs 0x7f150031
int string catalyst_remotedbg_error 0x7f150032
int string catalyst_remotedbg_message 0x7f150033
int string catalyst_report_button 0x7f150034
int string catalyst_settings 0x7f150035
int string catalyst_settings_title 0x7f150036
int string image_button_description 0x7f150037
int string image_description 0x7f150038
int string link_description 0x7f150039
int string search_description 0x7f15003a
int string search_menu_title 0x7f15003b
int string status_bar_notification_info_overflow 0x7f15003c
int style AlertDialog_AppCompat 0x7f160001
int style AlertDialog_AppCompat_Light 0x7f160002
int style Animation_AppCompat_Dialog 0x7f160003
int style Animation_AppCompat_DropDownUp 0x7f160004
int style Animation_AppCompat_Tooltip 0x7f160005
int style Animation_Catalyst_RedBox 0x7f160006
int style Base_AlertDialog_AppCompat 0x7f160007
int style Base_AlertDialog_AppCompat_Light 0x7f160008
int style Base_Animation_AppCompat_Dialog 0x7f160009
int style Base_Animation_AppCompat_DropDownUp 0x7f16000a
int style Base_Animation_AppCompat_Tooltip 0x7f16000b
int style Base_DialogWindowTitleBackground_AppCompat 0x7f16000c
int style Base_DialogWindowTitle_AppCompat 0x7f16000d
int style Base_TextAppearance_AppCompat 0x7f16000e
int style Base_TextAppearance_AppCompat_Body1 0x7f16000f
int style Base_TextAppearance_AppCompat_Body2 0x7f160010
int style Base_TextAppearance_AppCompat_Button 0x7f160011
int style Base_TextAppearance_AppCompat_Caption 0x7f160012
int style Base_TextAppearance_AppCompat_Display1 0x7f160013
int style Base_TextAppearance_AppCompat_Display2 0x7f160014
int style Base_TextAppearance_AppCompat_Display3 0x7f160015
int style Base_TextAppearance_AppCompat_Display4 0x7f160016
int style Base_TextAppearance_AppCompat_Headline 0x7f160017
int style Base_TextAppearance_AppCompat_Inverse 0x7f160018
int style Base_TextAppearance_AppCompat_Large 0x7f160019
int style Base_TextAppearance_AppCompat_Large_Inverse 0x7f16001a
int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f16001b
int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f16001c
int style Base_TextAppearance_AppCompat_Medium 0x7f16001d
int style Base_TextAppearance_AppCompat_Medium_Inverse 0x7f16001e
int style Base_TextAppearance_AppCompat_Menu 0x7f16001f
int style Base_TextAppearance_AppCompat_SearchResult 0x7f160020
int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x7f160021
int style Base_TextAppearance_AppCompat_SearchResult_Title 0x7f160022
int style Base_TextAppearance_AppCompat_Small 0x7f160023
int style Base_TextAppearance_AppCompat_Small_Inverse 0x7f160024
int style Base_TextAppearance_AppCompat_Subhead 0x7f160025
int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x7f160026
int style Base_TextAppearance_AppCompat_Title 0x7f160027
int style Base_TextAppearance_AppCompat_Title_Inverse 0x7f160028
int style Base_TextAppearance_AppCompat_Tooltip 0x7f160029
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f16002a
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f16002b
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f16002c
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f16002d
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f16002e
int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f16002f
int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f160030
int style Base_TextAppearance_AppCompat_Widget_Button 0x7f160031
int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f160032
int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x7f160033
int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x7f160034
int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x7f160035
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f160036
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f160037
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f160038
int style Base_TextAppearance_AppCompat_Widget_Switch 0x7f160039
int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f16003a
int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f16003b
int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f16003c
int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f16003d
int style Base_ThemeOverlay_AppCompat 0x7f16003e
int style Base_ThemeOverlay_AppCompat_ActionBar 0x7f16003f
int style Base_ThemeOverlay_AppCompat_Dark 0x7f160040
int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x7f160041
int style Base_ThemeOverlay_AppCompat_Dialog 0x7f160042
int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x7f160043
int style Base_ThemeOverlay_AppCompat_Light 0x7f160044
int style Base_Theme_AppCompat 0x7f160045
int style Base_Theme_AppCompat_CompactMenu 0x7f160046
int style Base_Theme_AppCompat_Dialog 0x7f160047
int style Base_Theme_AppCompat_DialogWhenLarge 0x7f160048
int style Base_Theme_AppCompat_Dialog_Alert 0x7f160049
int style Base_Theme_AppCompat_Dialog_FixedSize 0x7f16004a
int style Base_Theme_AppCompat_Dialog_MinWidth 0x7f16004b
int style Base_Theme_AppCompat_Light 0x7f16004c
int style Base_Theme_AppCompat_Light_DarkActionBar 0x7f16004d
int style Base_Theme_AppCompat_Light_Dialog 0x7f16004e
int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x7f16004f
int style Base_Theme_AppCompat_Light_Dialog_Alert 0x7f160050
int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x7f160051
int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x7f160052
int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x7f160053
int style Base_V21_Theme_AppCompat 0x7f160054
int style Base_V21_Theme_AppCompat_Dialog 0x7f160055
int style Base_V21_Theme_AppCompat_Light 0x7f160056
int style Base_V21_Theme_AppCompat_Light_Dialog 0x7f160057
int style Base_V22_Theme_AppCompat 0x7f160058
int style Base_V22_Theme_AppCompat_Light 0x7f160059
int style Base_V23_Theme_AppCompat 0x7f16005a
int style Base_V23_Theme_AppCompat_Light 0x7f16005b
int style Base_V26_Theme_AppCompat 0x7f16005c
int style Base_V26_Theme_AppCompat_Light 0x7f16005d
int style Base_V26_Widget_AppCompat_Toolbar 0x7f16005e
int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x7f16005f
int style Base_V7_Theme_AppCompat 0x7f160060
int style Base_V7_Theme_AppCompat_Dialog 0x7f160061
int style Base_V7_Theme_AppCompat_Light 0x7f160062
int style Base_V7_Theme_AppCompat_Light_Dialog 0x7f160063
int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x7f160064
int style Base_V7_Widget_AppCompat_EditText 0x7f160065
int style Base_V7_Widget_AppCompat_Toolbar 0x7f160066
int style Base_Widget_AppCompat_ActionBar 0x7f160067
int style Base_Widget_AppCompat_ActionBar_Solid 0x7f160068
int style Base_Widget_AppCompat_ActionBar_TabBar 0x7f160069
int style Base_Widget_AppCompat_ActionBar_TabText 0x7f16006a
int style Base_Widget_AppCompat_ActionBar_TabView 0x7f16006b
int style Base_Widget_AppCompat_ActionButton 0x7f16006c
int style Base_Widget_AppCompat_ActionButton_CloseMode 0x7f16006d
int style Base_Widget_AppCompat_ActionButton_Overflow 0x7f16006e
int style Base_Widget_AppCompat_ActionMode 0x7f16006f
int style Base_Widget_AppCompat_ActivityChooserView 0x7f160070
int style Base_Widget_AppCompat_AutoCompleteTextView 0x7f160071
int style Base_Widget_AppCompat_Button 0x7f160072
int style Base_Widget_AppCompat_ButtonBar 0x7f160073
int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x7f160074
int style Base_Widget_AppCompat_Button_Borderless 0x7f160075
int style Base_Widget_AppCompat_Button_Borderless_Colored 0x7f160076
int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f160077
int style Base_Widget_AppCompat_Button_Colored 0x7f160078
int style Base_Widget_AppCompat_Button_Small 0x7f160079
int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x7f16007a
int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x7f16007b
int style Base_Widget_AppCompat_CompoundButton_Switch 0x7f16007c
int style Base_Widget_AppCompat_DrawerArrowToggle 0x7f16007d
int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x7f16007e
int style Base_Widget_AppCompat_DropDownItem_Spinner 0x7f16007f
int style Base_Widget_AppCompat_EditText 0x7f160080
int style Base_Widget_AppCompat_ImageButton 0x7f160081
int style Base_Widget_AppCompat_Light_ActionBar 0x7f160082
int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x7f160083
int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x7f160084
int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x7f160085
int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f160086
int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x7f160087
int style Base_Widget_AppCompat_Light_PopupMenu 0x7f160088
int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x7f160089
int style Base_Widget_AppCompat_ListMenuView 0x7f16008a
int style Base_Widget_AppCompat_ListPopupWindow 0x7f16008b
int style Base_Widget_AppCompat_ListView 0x7f16008c
int style Base_Widget_AppCompat_ListView_DropDown 0x7f16008d
int style Base_Widget_AppCompat_ListView_Menu 0x7f16008e
int style Base_Widget_AppCompat_PopupMenu 0x7f16008f
int style Base_Widget_AppCompat_PopupMenu_Overflow 0x7f160090
int style Base_Widget_AppCompat_PopupWindow 0x7f160091
int style Base_Widget_AppCompat_ProgressBar 0x7f160092
int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x7f160093
int style Base_Widget_AppCompat_RatingBar 0x7f160094
int style Base_Widget_AppCompat_RatingBar_Indicator 0x7f160095
int style Base_Widget_AppCompat_RatingBar_Small 0x7f160096
int style Base_Widget_AppCompat_SearchView 0x7f160097
int style Base_Widget_AppCompat_SearchView_ActionBar 0x7f160098
int style Base_Widget_AppCompat_SeekBar 0x7f160099
int style Base_Widget_AppCompat_SeekBar_Discrete 0x7f16009a
int style Base_Widget_AppCompat_Spinner 0x7f16009b
int style Base_Widget_AppCompat_Spinner_Underlined 0x7f16009c
int style Base_Widget_AppCompat_TextView_SpinnerItem 0x7f16009d
int style Base_Widget_AppCompat_Toolbar 0x7f16009e
int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x7f16009f
int style CalendarDatePickerDialog 0x7f1600a0
int style CalendarDatePickerStyle 0x7f1600a1
int style ClockTimePickerDialog 0x7f1600a2
int style ClockTimePickerStyle 0x7f1600a3
int style DialogAnimationFade 0x7f1600a4
int style DialogAnimationSlide 0x7f1600a5
int style Platform_AppCompat 0x7f1600a6
int style Platform_AppCompat_Light 0x7f1600a7
int style Platform_ThemeOverlay_AppCompat 0x7f1600a8
int style Platform_ThemeOverlay_AppCompat_Dark 0x7f1600a9
int style Platform_ThemeOverlay_AppCompat_Light 0x7f1600aa
int style Platform_V21_AppCompat 0x7f1600ab
int style Platform_V21_AppCompat_Light 0x7f1600ac
int style Platform_V25_AppCompat 0x7f1600ad
int style Platform_V25_AppCompat_Light 0x7f1600ae
int style Platform_Widget_AppCompat_Spinner 0x7f1600af
int style RtlOverlay_DialogWindowTitle_AppCompat 0x7f1600b0
int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x7f1600b1
int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x7f1600b2
int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x7f1600b3
int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x7f1600b4
int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x7f1600b5
int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x7f1600b6
int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x7f1600b7
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x7f1600b8
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x7f1600b9
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x7f1600ba
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x7f1600bb
int style RtlUnderlay_Widget_AppCompat_ActionButton 0x7f1600bc
int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x7f1600bd
int style SpinnerDatePickerDialog 0x7f1600be
int style SpinnerDatePickerStyle 0x7f1600bf
int style SpinnerTimePickerDialog 0x7f1600c0
int style SpinnerTimePickerStyle 0x7f1600c1
int style TextAppearance_AppCompat 0x7f1600c2
int style TextAppearance_AppCompat_Body1 0x7f1600c3
int style TextAppearance_AppCompat_Body2 0x7f1600c4
int style TextAppearance_AppCompat_Button 0x7f1600c5
int style TextAppearance_AppCompat_Caption 0x7f1600c6
int style TextAppearance_AppCompat_Display1 0x7f1600c7
int style TextAppearance_AppCompat_Display2 0x7f1600c8
int style TextAppearance_AppCompat_Display3 0x7f1600c9
int style TextAppearance_AppCompat_Display4 0x7f1600ca
int style TextAppearance_AppCompat_Headline 0x7f1600cb
int style TextAppearance_AppCompat_Inverse 0x7f1600cc
int style TextAppearance_AppCompat_Large 0x7f1600cd
int style TextAppearance_AppCompat_Large_Inverse 0x7f1600ce
int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f1600cf
int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f1600d0
int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f1600d1
int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f1600d2
int style TextAppearance_AppCompat_Medium 0x7f1600d3
int style TextAppearance_AppCompat_Medium_Inverse 0x7f1600d4
int style TextAppearance_AppCompat_Menu 0x7f1600d5
int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f1600d6
int style TextAppearance_AppCompat_SearchResult_Title 0x7f1600d7
int style TextAppearance_AppCompat_Small 0x7f1600d8
int style TextAppearance_AppCompat_Small_Inverse 0x7f1600d9
int style TextAppearance_AppCompat_Subhead 0x7f1600da
int style TextAppearance_AppCompat_Subhead_Inverse 0x7f1600db
int style TextAppearance_AppCompat_Title 0x7f1600dc
int style TextAppearance_AppCompat_Title_Inverse 0x7f1600dd
int style TextAppearance_AppCompat_Tooltip 0x7f1600de
int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f1600df
int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f1600e0
int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f1600e1
int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f1600e2
int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f1600e3
int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f1600e4
int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f1600e5
int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f1600e6
int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f1600e7
int style TextAppearance_AppCompat_Widget_Button 0x7f1600e8
int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f1600e9
int style TextAppearance_AppCompat_Widget_Button_Colored 0x7f1600ea
int style TextAppearance_AppCompat_Widget_Button_Inverse 0x7f1600eb
int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f1600ec
int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f1600ed
int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f1600ee
int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f1600ef
int style TextAppearance_AppCompat_Widget_Switch 0x7f1600f0
int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f1600f1
int style TextAppearance_Compat_Notification 0x7f1600f2
int style TextAppearance_Compat_Notification_Info 0x7f1600f3
int style TextAppearance_Compat_Notification_Line2 0x7f1600f4
int style TextAppearance_Compat_Notification_Time 0x7f1600f5
int style TextAppearance_Compat_Notification_Title 0x7f1600f6
int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f1600f7
int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f1600f8
int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f1600f9
int style Theme 0x7f1600fa
int style ThemeOverlay_AppCompat 0x7f1600fb
int style ThemeOverlay_AppCompat_ActionBar 0x7f1600fc
int style ThemeOverlay_AppCompat_Dark 0x7f1600fd
int style ThemeOverlay_AppCompat_Dark_ActionBar 0x7f1600fe
int style ThemeOverlay_AppCompat_Dialog 0x7f1600ff
int style ThemeOverlay_AppCompat_Dialog_Alert 0x7f160100
int style ThemeOverlay_AppCompat_Light 0x7f160101
int style Theme_AppCompat 0x7f160102
int style Theme_AppCompat_CompactMenu 0x7f160103
int style Theme_AppCompat_DayNight 0x7f160104
int style Theme_AppCompat_DayNight_DarkActionBar 0x7f160105
int style Theme_AppCompat_DayNight_Dialog 0x7f160106
int style Theme_AppCompat_DayNight_DialogWhenLarge 0x7f160107
int style Theme_AppCompat_DayNight_Dialog_Alert 0x7f160108
int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x7f160109
int style Theme_AppCompat_DayNight_NoActionBar 0x7f16010a
int style Theme_AppCompat_Dialog 0x7f16010b
int style Theme_AppCompat_DialogWhenLarge 0x7f16010c
int style Theme_AppCompat_Dialog_Alert 0x7f16010d
int style Theme_AppCompat_Dialog_MinWidth 0x7f16010e
int style Theme_AppCompat_Light 0x7f16010f
int style Theme_AppCompat_Light_DarkActionBar 0x7f160110
int style Theme_AppCompat_Light_Dialog 0x7f160111
int style Theme_AppCompat_Light_DialogWhenLarge 0x7f160112
int style Theme_AppCompat_Light_Dialog_Alert 0x7f160113
int style Theme_AppCompat_Light_Dialog_MinWidth 0x7f160114
int style Theme_AppCompat_Light_NoActionBar 0x7f160115
int style Theme_AppCompat_NoActionBar 0x7f160116
int style Theme_Catalyst 0x7f160117
int style Theme_Catalyst_RedBox 0x7f160118
int style Theme_FullScreenDialog 0x7f160119
int style Theme_FullScreenDialogAnimatedFade 0x7f16011a
int style Theme_FullScreenDialogAnimatedSlide 0x7f16011b
int style Theme_ReactNative_AppCompat_Light 0x7f16011c
int style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen 0x7f16011d
int style Widget_AppCompat_ActionBar 0x7f16011e
int style Widget_AppCompat_ActionBar_Solid 0x7f16011f
int style Widget_AppCompat_ActionBar_TabBar 0x7f160120
int style Widget_AppCompat_ActionBar_TabText 0x7f160121
int style Widget_AppCompat_ActionBar_TabView 0x7f160122
int style Widget_AppCompat_ActionButton 0x7f160123
int style Widget_AppCompat_ActionButton_CloseMode 0x7f160124
int style Widget_AppCompat_ActionButton_Overflow 0x7f160125
int style Widget_AppCompat_ActionMode 0x7f160126
int style Widget_AppCompat_ActivityChooserView 0x7f160127
int style Widget_AppCompat_AutoCompleteTextView 0x7f160128
int style Widget_AppCompat_Button 0x7f160129
int style Widget_AppCompat_ButtonBar 0x7f16012a
int style Widget_AppCompat_ButtonBar_AlertDialog 0x7f16012b
int style Widget_AppCompat_Button_Borderless 0x7f16012c
int style Widget_AppCompat_Button_Borderless_Colored 0x7f16012d
int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f16012e
int style Widget_AppCompat_Button_Colored 0x7f16012f
int style Widget_AppCompat_Button_Small 0x7f160130
int style Widget_AppCompat_CompoundButton_CheckBox 0x7f160131
int style Widget_AppCompat_CompoundButton_RadioButton 0x7f160132
int style Widget_AppCompat_CompoundButton_Switch 0x7f160133
int style Widget_AppCompat_DrawerArrowToggle 0x7f160134
int style Widget_AppCompat_DropDownItem_Spinner 0x7f160135
int style Widget_AppCompat_EditText 0x7f160136
int style Widget_AppCompat_ImageButton 0x7f160137
int style Widget_AppCompat_Light_ActionBar 0x7f160138
int style Widget_AppCompat_Light_ActionBar_Solid 0x7f160139
int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f16013a
int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f16013b
int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f16013c
int style Widget_AppCompat_Light_ActionBar_TabText 0x7f16013d
int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f16013e
int style Widget_AppCompat_Light_ActionBar_TabView 0x7f16013f
int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f160140
int style Widget_AppCompat_Light_ActionButton 0x7f160141
int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f160142
int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f160143
int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f160144
int style Widget_AppCompat_Light_ActivityChooserView 0x7f160145
int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f160146
int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f160147
int style Widget_AppCompat_Light_ListPopupWindow 0x7f160148
int style Widget_AppCompat_Light_ListView_DropDown 0x7f160149
int style Widget_AppCompat_Light_PopupMenu 0x7f16014a
int style Widget_AppCompat_Light_PopupMenu_Overflow 0x7f16014b
int style Widget_AppCompat_Light_SearchView 0x7f16014c
int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f16014d
int style Widget_AppCompat_ListMenuView 0x7f16014e
int style Widget_AppCompat_ListPopupWindow 0x7f16014f
int style Widget_AppCompat_ListView 0x7f160150
int style Widget_AppCompat_ListView_DropDown 0x7f160151
int style Widget_AppCompat_ListView_Menu 0x7f160152
int style Widget_AppCompat_PopupMenu 0x7f160153
int style Widget_AppCompat_PopupMenu_Overflow 0x7f160154
int style Widget_AppCompat_PopupWindow 0x7f160155
int style Widget_AppCompat_ProgressBar 0x7f160156
int style Widget_AppCompat_ProgressBar_Horizontal 0x7f160157
int style Widget_AppCompat_RatingBar 0x7f160158
int style Widget_AppCompat_RatingBar_Indicator 0x7f160159
int style Widget_AppCompat_RatingBar_Small 0x7f16015a
int style Widget_AppCompat_SearchView 0x7f16015b
int style Widget_AppCompat_SearchView_ActionBar 0x7f16015c
int style Widget_AppCompat_SeekBar 0x7f16015d
int style Widget_AppCompat_SeekBar_Discrete 0x7f16015e
int style Widget_AppCompat_Spinner 0x7f16015f
int style Widget_AppCompat_Spinner_DropDown 0x7f160160
int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f160161
int style Widget_AppCompat_Spinner_Underlined 0x7f160162
int style Widget_AppCompat_TextView_SpinnerItem 0x7f160163
int style Widget_AppCompat_Toolbar 0x7f160164
int style Widget_AppCompat_Toolbar_Button_Navigation 0x7f160165
int style Widget_Compat_NotificationActionContainer 0x7f160166
int style Widget_Compat_NotificationActionText 0x7f160167
int style Widget_Support_CoordinatorLayout 0x7f160168
int style redboxButton 0x7f160169
int[] styleable ActionBar { 0x7f040035, 0x7f040037, 0x7f040038, 0x7f04005c, 0x7f04005d, 0x7f04005e, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f040064, 0x7f040068, 0x7f040069, 0x7f040074, 0x7f040085, 0x7f040086, 0x7f040087, 0x7f040088, 0x7f040089, 0x7f04008e, 0x7f040091, 0x7f0400a5, 0x7f0400ac, 0x7f0400ba, 0x7f0400c1, 0x7f0400c2, 0x7f0400ed, 0x7f0400f0, 0x7f04010b, 0x7f040114 }
int styleable ActionBar_background 0
int styleable ActionBar_backgroundSplit 1
int styleable ActionBar_backgroundStacked 2
int styleable ActionBar_contentInsetEnd 3
int styleable ActionBar_contentInsetEndWithActions 4
int styleable ActionBar_contentInsetLeft 5
int styleable ActionBar_contentInsetRight 6
int styleable ActionBar_contentInsetStart 7
int styleable ActionBar_contentInsetStartWithNavigation 8
int styleable ActionBar_customNavigationLayout 9
int styleable ActionBar_displayOptions 10
int styleable ActionBar_divider 11
int styleable ActionBar_elevation 12
int styleable ActionBar_height 13
int styleable ActionBar_hideOnContentScroll 14
int styleable ActionBar_homeAsUpIndicator 15
int styleable ActionBar_homeLayout 16
int styleable ActionBar_icon 17
int styleable ActionBar_indeterminateProgressStyle 18
int styleable ActionBar_itemPadding 19
int styleable ActionBar_logo 20
int styleable ActionBar_navigationMode 21
int styleable ActionBar_popupTheme 22
int styleable ActionBar_progressBarPadding 23
int styleable ActionBar_progressBarStyle 24
int styleable ActionBar_subtitle 25
int styleable ActionBar_subtitleTextStyle 26
int styleable ActionBar_title 27
int styleable ActionBar_titleTextStyle 28
int[] styleable ActionBarLayout { 0x010100b3 }
int styleable ActionBarLayout_android_layout_gravity 0
int[] styleable ActionMenuItemView { 0x0101013f }
int styleable ActionMenuItemView_android_minWidth 0
int[] styleable ActionMode { 0x7f040035, 0x7f040037, 0x7f04004c, 0x7f040085, 0x7f0400f0, 0x7f040114 }
int styleable ActionMode_background 0
int styleable ActionMode_backgroundSplit 1
int styleable ActionMode_closeItemLayout 2
int styleable ActionMode_height 3
int styleable ActionMode_subtitleTextStyle 4
int styleable ActionMode_titleTextStyle 5
int[] styleable ActivityChooserView { 0x7f040075, 0x7f04008f }
int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0
int styleable ActivityChooserView_initialActivityCount 1
int[] styleable AlertDialog { 0x010100f2, 0x7f040043, 0x7f040044, 0x7f04009c, 0x7f04009d, 0x7f0400a9, 0x7f0400e2, 0x7f0400e3 }
int styleable AlertDialog_android_layout 0
int styleable AlertDialog_buttonIconDimen 1
int styleable AlertDialog_buttonPanelSideLayout 2
int styleable AlertDialog_listItemLayout 3
int styleable AlertDialog_listLayout 4
int styleable AlertDialog_multiChoiceItemLayout 5
int styleable AlertDialog_showTitle 6
int styleable AlertDialog_singleChoiceItemLayout 7
int[] styleable AppCompatImageView { 0x01010119, 0x7f0400e8, 0x7f040109, 0x7f04010a }
int styleable AppCompatImageView_android_src 0
int styleable AppCompatImageView_srcCompat 1
int styleable AppCompatImageView_tint 2
int styleable AppCompatImageView_tintMode 3
int[] styleable AppCompatSeekBar { 0x01010142, 0x7f040106, 0x7f040107, 0x7f040108 }
int styleable AppCompatSeekBar_android_thumb 0
int styleable AppCompatSeekBar_tickMark 1
int styleable AppCompatSeekBar_tickMarkTint 2
int styleable AppCompatSeekBar_tickMarkTintMode 3
int[] styleable AppCompatTextHelper { 0x0101016e, 0x01010393, 0x0101016f, 0x01010170, 0x01010392, 0x0101016d, 0x01010034 }
int styleable AppCompatTextHelper_android_drawableBottom 0
int styleable AppCompatTextHelper_android_drawableEnd 1
int styleable AppCompatTextHelper_android_drawableLeft 2
int styleable AppCompatTextHelper_android_drawableRight 3
int styleable AppCompatTextHelper_android_drawableStart 4
int styleable AppCompatTextHelper_android_drawableTop 5
int styleable AppCompatTextHelper_android_textAppearance 6
int[] styleable AppCompatTextView { 0x01010034, 0x7f040030, 0x7f040031, 0x7f040032, 0x7f040033, 0x7f040034, 0x7f04007a, 0x7f0400f6 }
int styleable AppCompatTextView_android_textAppearance 0
int styleable AppCompatTextView_autoSizeMaxTextSize 1
int styleable AppCompatTextView_autoSizeMinTextSize 2
int styleable AppCompatTextView_autoSizePresetSizes 3
int styleable AppCompatTextView_autoSizeStepGranularity 4
int styleable AppCompatTextView_autoSizeTextType 5
int styleable AppCompatTextView_fontFamily 6
int styleable AppCompatTextView_textAllCaps 7
int[] styleable AppCompatTheme { 0x7f040001, 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000f, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040022, 0x7f040026, 0x7f040027, 0x7f040028, 0x7f040029, 0x010100ae, 0x01010057, 0x7f04002f, 0x7f04003c, 0x7f04003d, 0x7f04003e, 0x7f04003f, 0x7f040040, 0x7f040041, 0x7f040045, 0x7f040046, 0x7f040049, 0x7f04004a, 0x7f040050, 0x7f040051, 0x7f040052, 0x7f040053, 0x7f040054, 0x7f040055, 0x7f040056, 0x7f040057, 0x7f040058, 0x7f040059, 0x7f040062, 0x7f040066, 0x7f040067, 0x7f04006a, 0x7f04006c, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040087, 0x7f04008d, 0x7f04009a, 0x7f04009b, 0x7f04009e, 0x7f04009f, 0x7f0400a0, 0x7f0400a1, 0x7f0400a2, 0x7f0400a3, 0x7f0400a4, 0x7f0400b4, 0x7f0400b5, 0x7f0400b6, 0x7f0400b9, 0x7f0400bb, 0x7f0400c5, 0x7f0400c6, 0x7f0400c7, 0x7f0400c8, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400e5, 0x7f0400e6, 0x7f0400f4, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040115, 0x7f040116, 0x7f040117, 0x7f040118, 0x7f04011e, 0x7f040120, 0x7f040121, 0x7f040122, 0x7f040123, 0x7f040124, 0x7f040125, 0x7f040126, 0x7f040127, 0x7f040128, 0x7f040129 }
int styleable AppCompatTheme_actionBarDivider 0
int styleable AppCompatTheme_actionBarItemBackground 1
int styleable AppCompatTheme_actionBarPopupTheme 2
int styleable AppCompatTheme_actionBarSize 3
int styleable AppCompatTheme_actionBarSplitStyle 4
int styleable AppCompatTheme_actionBarStyle 5
int styleable AppCompatTheme_actionBarTabBarStyle 6
int styleable AppCompatTheme_actionBarTabStyle 7
int styleable AppCompatTheme_actionBarTabTextStyle 8
int styleable AppCompatTheme_actionBarTheme 9
int styleable AppCompatTheme_actionBarWidgetTheme 10
int styleable AppCompatTheme_actionButtonStyle 11
int styleable AppCompatTheme_actionDropDownStyle 12
int styleable AppCompatTheme_actionMenuTextAppearance 13
int styleable AppCompatTheme_actionMenuTextColor 14
int styleable AppCompatTheme_actionModeBackground 15
int styleable AppCompatTheme_actionModeCloseButtonStyle 16
int styleable AppCompatTheme_actionModeCloseDrawable 17
int styleable AppCompatTheme_actionModeCopyDrawable 18
int styleable AppCompatTheme_actionModeCutDrawable 19
int styleable AppCompatTheme_actionModeFindDrawable 20
int styleable AppCompatTheme_actionModePasteDrawable 21
int styleable AppCompatTheme_actionModePopupWindowStyle 22
int styleable AppCompatTheme_actionModeSelectAllDrawable 23
int styleable AppCompatTheme_actionModeShareDrawable 24
int styleable AppCompatTheme_actionModeSplitBackground 25
int styleable AppCompatTheme_actionModeStyle 26
int styleable AppCompatTheme_actionModeWebSearchDrawable 27
int styleable AppCompatTheme_actionOverflowButtonStyle 28
int styleable AppCompatTheme_actionOverflowMenuStyle 29
int styleable AppCompatTheme_activityChooserViewStyle 30
int styleable AppCompatTheme_alertDialogButtonGroupStyle 31
int styleable AppCompatTheme_alertDialogCenterButtons 32
int styleable AppCompatTheme_alertDialogStyle 33
int styleable AppCompatTheme_alertDialogTheme 34
int styleable AppCompatTheme_android_windowAnimationStyle 35
int styleable AppCompatTheme_android_windowIsFloating 36
int styleable AppCompatTheme_autoCompleteTextViewStyle 37
int styleable AppCompatTheme_borderlessButtonStyle 38
int styleable AppCompatTheme_buttonBarButtonStyle 39
int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40
int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41
int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42
int styleable AppCompatTheme_buttonBarStyle 43
int styleable AppCompatTheme_buttonStyle 44
int styleable AppCompatTheme_buttonStyleSmall 45
int styleable AppCompatTheme_checkboxStyle 46
int styleable AppCompatTheme_checkedTextViewStyle 47
int styleable AppCompatTheme_colorAccent 48
int styleable AppCompatTheme_colorBackgroundFloating 49
int styleable AppCompatTheme_colorButtonNormal 50
int styleable AppCompatTheme_colorControlActivated 51
int styleable AppCompatTheme_colorControlHighlight 52
int styleable AppCompatTheme_colorControlNormal 53
int styleable AppCompatTheme_colorError 54
int styleable AppCompatTheme_colorPrimary 55
int styleable AppCompatTheme_colorPrimaryDark 56
int styleable AppCompatTheme_colorSwitchThumbNormal 57
int styleable AppCompatTheme_controlBackground 58
int styleable AppCompatTheme_dialogPreferredPadding 59
int styleable AppCompatTheme_dialogTheme 60
int styleable AppCompatTheme_dividerHorizontal 61
int styleable AppCompatTheme_dividerVertical 62
int styleable AppCompatTheme_dropDownListViewStyle 63
int styleable AppCompatTheme_dropdownListPreferredItemHeight 64
int styleable AppCompatTheme_editTextBackground 65
int styleable AppCompatTheme_editTextColor 66
int styleable AppCompatTheme_editTextStyle 67
int styleable AppCompatTheme_homeAsUpIndicator 68
int styleable AppCompatTheme_imageButtonStyle 69
int styleable AppCompatTheme_listChoiceBackgroundIndicator 70
int styleable AppCompatTheme_listDividerAlertDialog 71
int styleable AppCompatTheme_listMenuViewStyle 72
int styleable AppCompatTheme_listPopupWindowStyle 73
int styleable AppCompatTheme_listPreferredItemHeight 74
int styleable AppCompatTheme_listPreferredItemHeightLarge 75
int styleable AppCompatTheme_listPreferredItemHeightSmall 76
int styleable AppCompatTheme_listPreferredItemPaddingLeft 77
int styleable AppCompatTheme_listPreferredItemPaddingRight 78
int styleable AppCompatTheme_panelBackground 79
int styleable AppCompatTheme_panelMenuListTheme 80
int styleable AppCompatTheme_panelMenuListWidth 81
int styleable AppCompatTheme_popupMenuStyle 82
int styleable AppCompatTheme_popupWindowStyle 83
int styleable AppCompatTheme_radioButtonStyle 84
int styleable AppCompatTheme_ratingBarStyle 85
int styleable AppCompatTheme_ratingBarStyleIndicator 86
int styleable AppCompatTheme_ratingBarStyleSmall 87
int styleable AppCompatTheme_searchViewStyle 88
int styleable AppCompatTheme_seekBarStyle 89
int styleable AppCompatTheme_selectableItemBackground 90
int styleable AppCompatTheme_selectableItemBackgroundBorderless 91
int styleable AppCompatTheme_spinnerDropDownItemStyle 92
int styleable AppCompatTheme_spinnerStyle 93
int styleable AppCompatTheme_switchStyle 94
int styleable AppCompatTheme_textAppearanceLargePopupMenu 95
int styleable AppCompatTheme_textAppearanceListItem 96
int styleable AppCompatTheme_textAppearanceListItemSecondary 97
int styleable AppCompatTheme_textAppearanceListItemSmall 98
int styleable AppCompatTheme_textAppearancePopupMenuHeader 99
int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 100
int styleable AppCompatTheme_textAppearanceSearchResultTitle 101
int styleable AppCompatTheme_textAppearanceSmallPopupMenu 102
int styleable AppCompatTheme_textColorAlertDialogListItem 103
int styleable AppCompatTheme_textColorSearchUrl 104
int styleable AppCompatTheme_toolbarNavigationButtonStyle 105
int styleable AppCompatTheme_toolbarStyle 106
int styleable AppCompatTheme_tooltipForegroundColor 107
int styleable AppCompatTheme_tooltipFrameBackground 108
int styleable AppCompatTheme_viewInflaterClass 109
int styleable AppCompatTheme_windowActionBar 110
int styleable AppCompatTheme_windowActionBarOverlay 111
int styleable AppCompatTheme_windowActionModeOverlay 112
int styleable AppCompatTheme_windowFixedHeightMajor 113
int styleable AppCompatTheme_windowFixedHeightMinor 114
int styleable AppCompatTheme_windowFixedWidthMajor 115
int styleable AppCompatTheme_windowFixedWidthMinor 116
int styleable AppCompatTheme_windowMinWidthMajor 117
int styleable AppCompatTheme_windowMinWidthMinor 118
int styleable AppCompatTheme_windowNoTitle 119
int[] styleable ButtonBarLayout { 0x7f04002a }
int styleable ButtonBarLayout_allowStacking 0
int[] styleable ColorStateListItem { 0x7f04002b, 0x0101031f, 0x010101a5 }
int styleable ColorStateListItem_alpha 0
int styleable ColorStateListItem_android_alpha 1
int styleable ColorStateListItem_android_color 2
int[] styleable CompoundButton { 0x01010107, 0x7f040047, 0x7f040048 }
int styleable CompoundButton_android_button 0
int styleable CompoundButton_buttonTint 1
int styleable CompoundButton_buttonTintMode 2
int[] styleable CoordinatorLayout { 0x7f040092, 0x7f0400ea }
int styleable CoordinatorLayout_keylines 0
int styleable CoordinatorLayout_statusBarBackground 1
int[] styleable CoordinatorLayout_Layout { 0x010100b3, 0x7f040094, 0x7f040095, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099 }
int styleable CoordinatorLayout_Layout_android_layout_gravity 0
int styleable CoordinatorLayout_Layout_layout_anchor 1
int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
int styleable CoordinatorLayout_Layout_layout_behavior 3
int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
int styleable CoordinatorLayout_Layout_layout_insetEdge 5
int styleable CoordinatorLayout_Layout_layout_keyline 6
int[] styleable DrawerArrowToggle { 0x7f04002d, 0x7f04002e, 0x7f04003b, 0x7f04004f, 0x7f04006d, 0x7f040083, 0x7f0400e4, 0x7f040102 }
int styleable DrawerArrowToggle_arrowHeadLength 0
int styleable DrawerArrowToggle_arrowShaftLength 1
int styleable DrawerArrowToggle_barLength 2
int styleable DrawerArrowToggle_color 3
int styleable DrawerArrowToggle_drawableSize 4
int styleable DrawerArrowToggle_gapBetweenBars 5
int styleable DrawerArrowToggle_spinBars 6
int styleable DrawerArrowToggle_thickness 7
int[] styleable FontFamily { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 }
int styleable FontFamily_fontProviderAuthority 0
int styleable FontFamily_fontProviderCerts 1
int styleable FontFamily_fontProviderFetchStrategy 2
int styleable FontFamily_fontProviderFetchTimeout 3
int styleable FontFamily_fontProviderPackage 4
int styleable FontFamily_fontProviderQuery 5
int[] styleable FontFamilyFont { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 }
int styleable FontFamilyFont_android_font 0
int styleable FontFamilyFont_android_fontStyle 1
int styleable FontFamilyFont_android_fontWeight 2
int styleable FontFamilyFont_font 3
int styleable FontFamilyFont_fontStyle 4
int styleable FontFamilyFont_fontWeight 5
int[] styleable GenericDraweeHierarchy { 0x7f040024, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d }
int styleable GenericDraweeHierarchy_actualImageScaleType 0
int styleable GenericDraweeHierarchy_backgroundImage 1
int styleable GenericDraweeHierarchy_fadeDuration 2
int styleable GenericDraweeHierarchy_failureImage 3
int styleable GenericDraweeHierarchy_failureImageScaleType 4
int styleable GenericDraweeHierarchy_overlayImage 5
int styleable GenericDraweeHierarchy_placeholderImage 6
int styleable GenericDraweeHierarchy_placeholderImageScaleType 7
int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8
int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9
int styleable GenericDraweeHierarchy_progressBarImage 10
int styleable GenericDraweeHierarchy_progressBarImageScaleType 11
int styleable GenericDraweeHierarchy_retryImage 12
int styleable GenericDraweeHierarchy_retryImageScaleType 13
int styleable GenericDraweeHierarchy_roundAsCircle 14
int styleable GenericDraweeHierarchy_roundBottomEnd 15
int styleable GenericDraweeHierarchy_roundBottomLeft 16
int styleable GenericDraweeHierarchy_roundBottomRight 17
int styleable GenericDraweeHierarchy_roundBottomStart 18
int styleable GenericDraweeHierarchy_roundTopEnd 19
int styleable GenericDraweeHierarchy_roundTopLeft 20
int styleable GenericDraweeHierarchy_roundTopRight 21
int styleable GenericDraweeHierarchy_roundTopStart 22
int styleable GenericDraweeHierarchy_roundWithOverlayColor 23
int styleable GenericDraweeHierarchy_roundedCornerRadius 24
int styleable GenericDraweeHierarchy_roundingBorderColor 25
int styleable GenericDraweeHierarchy_roundingBorderPadding 26
int styleable GenericDraweeHierarchy_roundingBorderWidth 27
int styleable GenericDraweeHierarchy_viewAspectRatio 28
int[] styleable LinearLayoutCompat { 0x01010126, 0x01010127, 0x010100af, 0x010100c4, 0x01010128, 0x7f040069, 0x7f04006b, 0x7f0400a8, 0x7f0400e0 }
int styleable LinearLayoutCompat_android_baselineAligned 0
int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1
int styleable LinearLayoutCompat_android_gravity 2
int styleable LinearLayoutCompat_android_orientation 3
int styleable LinearLayoutCompat_android_weightSum 4
int styleable LinearLayoutCompat_divider 5
int styleable LinearLayoutCompat_dividerPadding 6
int styleable LinearLayoutCompat_measureWithLargestChild 7
int styleable LinearLayoutCompat_showDividers 8
int[] styleable LinearLayoutCompat_Layout { 0x010100b3, 0x010100f5, 0x01010181, 0x010100f4 }
int styleable LinearLayoutCompat_Layout_android_layout_gravity 0
int styleable LinearLayoutCompat_Layout_android_layout_height 1
int styleable LinearLayoutCompat_Layout_android_layout_weight 2
int styleable LinearLayoutCompat_Layout_android_layout_width 3
int[] styleable ListPopupWindow { 0x010102ac, 0x010102ad }
int styleable ListPopupWindow_android_dropDownHorizontalOffset 0
int styleable ListPopupWindow_android_dropDownVerticalOffset 1
int[] styleable MenuGroup { 0x010101e0, 0x0101000e, 0x010100d0, 0x010101de, 0x010101df, 0x01010194 }
int styleable MenuGroup_android_checkableBehavior 0
int styleable MenuGroup_android_enabled 1
int styleable MenuGroup_android_id 2
int styleable MenuGroup_android_menuCategory 3
int styleable MenuGroup_android_orderInCategory 4
int styleable MenuGroup_android_visible 5
int[] styleable MenuItem { 0x7f04000e, 0x7f040020, 0x7f040021, 0x7f04002c, 0x010101e3, 0x010101e5, 0x01010106, 0x0101000e, 0x01010002, 0x010100d0, 0x010101de, 0x010101e4, 0x0101026f, 0x010101df, 0x010101e1, 0x010101e2, 0x01010194, 0x7f04005b, 0x7f04008a, 0x7f04008b, 0x7f0400ad, 0x7f0400df, 0x7f040119 }
int styleable MenuItem_actionLayout 0
int styleable MenuItem_actionProviderClass 1
int styleable MenuItem_actionViewClass 2
int styleable MenuItem_alphabeticModifiers 3
int styleable MenuItem_android_alphabeticShortcut 4
int styleable MenuItem_android_checkable 5
int styleable MenuItem_android_checked 6
int styleable MenuItem_android_enabled 7
int styleable MenuItem_android_icon 8
int styleable MenuItem_android_id 9
int styleable MenuItem_android_menuCategory 10
int styleable MenuItem_android_numericShortcut 11
int styleable MenuItem_android_onClick 12
int styleable MenuItem_android_orderInCategory 13
int styleable MenuItem_android_title 14
int styleable MenuItem_android_titleCondensed 15
int styleable MenuItem_android_visible 16
int styleable MenuItem_contentDescription 17
int styleable MenuItem_iconTint 18
int styleable MenuItem_iconTintMode 19
int styleable MenuItem_numericModifiers 20
int styleable MenuItem_showAsAction 21
int styleable MenuItem_tooltipText 22
int[] styleable MenuView { 0x0101012f, 0x0101012d, 0x01010130, 0x01010131, 0x0101012c, 0x0101012e, 0x010100ae, 0x7f0400bc, 0x7f0400eb }
int styleable MenuView_android_headerBackground 0
int styleable MenuView_android_horizontalDivider 1
int styleable MenuView_android_itemBackground 2
int styleable MenuView_android_itemIconDisabledAlpha 3
int styleable MenuView_android_itemTextAppearance 4
int styleable MenuView_android_verticalDivider 5
int styleable MenuView_android_windowAnimationStyle 6
int styleable MenuView_preserveIconSpacing 7
int styleable MenuView_subMenuArrow 8
int[] styleable PopupWindow { 0x010102c9, 0x01010176, 0x7f0400ae }
int styleable PopupWindow_android_popupAnimationStyle 0
int styleable PopupWindow_android_popupBackground 1
int styleable PopupWindow_overlapAnchor 2
int[] styleable PopupWindowBackgroundState { 0x7f0400e9 }
int styleable PopupWindowBackgroundState_state_above_anchor 0
int[] styleable RecycleListView { 0x7f0400b0, 0x7f0400b3 }
int styleable RecycleListView_paddingBottomNoButtons 0
int styleable RecycleListView_paddingTopNoTitle 1
int[] styleable SearchView { 0x010100da, 0x01010264, 0x01010220, 0x0101011f, 0x7f04004b, 0x7f04005a, 0x7f040065, 0x7f040084, 0x7f04008c, 0x7f040093, 0x7f0400c3, 0x7f0400c4, 0x7f0400d9, 0x7f0400da, 0x7f0400ec, 0x7f0400f1, 0x7f04011f }
int styleable SearchView_android_focusable 0
int styleable SearchView_android_imeOptions 1
int styleable SearchView_android_inputType 2
int styleable SearchView_android_maxWidth 3
int styleable SearchView_closeIcon 4
int styleable SearchView_commitIcon 5
int styleable SearchView_defaultQueryHint 6
int styleable SearchView_goIcon 7
int styleable SearchView_iconifiedByDefault 8
int styleable SearchView_layout 9
int styleable SearchView_queryBackground 10
int styleable SearchView_queryHint 11
int styleable SearchView_searchHintIcon 12
int styleable SearchView_searchIcon 13
int styleable SearchView_submitBackground 14
int styleable SearchView_suggestionRowLayout 15
int styleable SearchView_voiceIcon 16
int[] styleable SimpleDraweeView { 0x7f040023, 0x7f040024, 0x7f040025, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d }
int styleable SimpleDraweeView_actualImageResource 0
int styleable SimpleDraweeView_actualImageScaleType 1
int styleable SimpleDraweeView_actualImageUri 2
int styleable SimpleDraweeView_backgroundImage 3
int styleable SimpleDraweeView_fadeDuration 4
int styleable SimpleDraweeView_failureImage 5
int styleable SimpleDraweeView_failureImageScaleType 6
int styleable SimpleDraweeView_overlayImage 7
int styleable SimpleDraweeView_placeholderImage 8
int styleable SimpleDraweeView_placeholderImageScaleType 9
int styleable SimpleDraweeView_pressedStateOverlayImage 10
int styleable SimpleDraweeView_progressBarAutoRotateInterval 11
int styleable SimpleDraweeView_progressBarImage 12
int styleable SimpleDraweeView_progressBarImageScaleType 13
int styleable SimpleDraweeView_retryImage 14
int styleable SimpleDraweeView_retryImageScaleType 15
int styleable SimpleDraweeView_roundAsCircle 16
int styleable SimpleDraweeView_roundBottomEnd 17
int styleable SimpleDraweeView_roundBottomLeft 18
int styleable SimpleDraweeView_roundBottomRight 19
int styleable SimpleDraweeView_roundBottomStart 20
int styleable SimpleDraweeView_roundTopEnd 21
int styleable SimpleDraweeView_roundTopLeft 22
int styleable SimpleDraweeView_roundTopRight 23
int styleable SimpleDraweeView_roundTopStart 24
int styleable SimpleDraweeView_roundWithOverlayColor 25
int styleable SimpleDraweeView_roundedCornerRadius 26
int styleable SimpleDraweeView_roundingBorderColor 27
int styleable SimpleDraweeView_roundingBorderPadding 28
int styleable SimpleDraweeView_roundingBorderWidth 29
int styleable SimpleDraweeView_viewAspectRatio 30
int[] styleable Spinner { 0x01010262, 0x010100b2, 0x01010176, 0x0101017b, 0x7f0400ba }
int styleable Spinner_android_dropDownWidth 0
int styleable Spinner_android_entries 1
int styleable Spinner_android_popupBackground 2
int styleable Spinner_android_prompt 3
int styleable Spinner_popupTheme 4
int[] styleable SwitchCompat { 0x01010125, 0x01010124, 0x01010142, 0x7f0400e1, 0x7f0400e7, 0x7f0400f2, 0x7f0400f3, 0x7f0400f5, 0x7f040103, 0x7f040104, 0x7f040105, 0x7f04011a, 0x7f04011b, 0x7f04011c }
int styleable SwitchCompat_android_textOff 0
int styleable SwitchCompat_android_textOn 1
int styleable SwitchCompat_android_thumb 2
int styleable SwitchCompat_showText 3
int styleable SwitchCompat_splitTrack 4
int styleable SwitchCompat_switchMinWidth 5
int styleable SwitchCompat_switchPadding 6
int styleable SwitchCompat_switchTextAppearance 7
int styleable SwitchCompat_thumbTextPadding 8
int styleable SwitchCompat_thumbTint 9
int styleable SwitchCompat_thumbTintMode 10
int styleable SwitchCompat_track 11
int styleable SwitchCompat_trackTint 12
int styleable SwitchCompat_trackTintMode 13
int[] styleable TextAppearance { 0x010103ac, 0x01010161, 0x01010162, 0x01010163, 0x01010164, 0x01010098, 0x0101009a, 0x0101009b, 0x01010095, 0x01010097, 0x01010096, 0x7f04007a, 0x7f0400f6 }
int styleable TextAppearance_android_fontFamily 0
int styleable TextAppearance_android_shadowColor 1
int styleable TextAppearance_android_shadowDx 2
int styleable TextAppearance_android_shadowDy 3
int styleable TextAppearance_android_shadowRadius 4
int styleable TextAppearance_android_textColor 5
int styleable TextAppearance_android_textColorHint 6
int styleable TextAppearance_android_textColorLink 7
int styleable TextAppearance_android_textSize 8
int styleable TextAppearance_android_textStyle 9
int styleable TextAppearance_android_typeface 10
int styleable TextAppearance_fontFamily 11
int styleable TextAppearance_textAllCaps 12
int[] styleable Toolbar { 0x010100af, 0x01010140, 0x7f040042, 0x7f04004d, 0x7f04004e, 0x7f04005c, 0x7f04005d, 0x7f04005e, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f0400a5, 0x7f0400a6, 0x7f0400a7, 0x7f0400aa, 0x7f0400ab, 0x7f0400ba, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f04010b, 0x7f04010c, 0x7f04010d, 0x7f04010e, 0x7f04010f, 0x7f040110, 0x7f040111, 0x7f040112, 0x7f040113 }
int styleable Toolbar_android_gravity 0
int styleable Toolbar_android_minHeight 1
int styleable Toolbar_buttonGravity 2
int styleable Toolbar_collapseContentDescription 3
int styleable Toolbar_collapseIcon 4
int styleable Toolbar_contentInsetEnd 5
int styleable Toolbar_contentInsetEndWithActions 6
int styleable Toolbar_contentInsetLeft 7
int styleable Toolbar_contentInsetRight 8
int styleable Toolbar_contentInsetStart 9
int styleable Toolbar_contentInsetStartWithNavigation 10
int styleable Toolbar_logo 11
int styleable Toolbar_logoDescription 12
int styleable Toolbar_maxButtonHeight 13
int styleable Toolbar_navigationContentDescription 14
int styleable Toolbar_navigationIcon 15
int styleable Toolbar_popupTheme 16
int styleable Toolbar_subtitle 17
int styleable Toolbar_subtitleTextAppearance 18
int styleable Toolbar_subtitleTextColor 19
int styleable Toolbar_title 20
int styleable Toolbar_titleMargin 21
int styleable Toolbar_titleMarginBottom 22
int styleable Toolbar_titleMarginEnd 23
int styleable Toolbar_titleMarginStart 24
int styleable Toolbar_titleMarginTop 25
int styleable Toolbar_titleMargins 26
int styleable Toolbar_titleTextAppearance 27
int styleable Toolbar_titleTextColor 28
int[] styleable View { 0x010100da, 0x01010000, 0x7f0400b1, 0x7f0400b2, 0x7f040101 }
int styleable View_android_focusable 0
int styleable View_android_theme 1
int styleable View_paddingEnd 2
int styleable View_paddingStart 3
int styleable View_theme 4
int[] styleable ViewBackgroundHelper { 0x010100d4, 0x7f040039, 0x7f04003a }
int styleable ViewBackgroundHelper_android_background 0
int styleable ViewBackgroundHelper_backgroundTint 1
int styleable ViewBackgroundHelper_backgroundTintMode 2
int[] styleable ViewStubCompat { 0x010100d0, 0x010100f3, 0x010100f2 }
int styleable ViewStubCompat_android_id 0
int styleable ViewStubCompat_android_inflatedId 1
int styleable ViewStubCompat_android_layout 2
int xml preferences 0x7f190001
int anim abc_fade_in 0x7f010001
int anim abc_fade_out 0x7f010002
int anim abc_grow_fade_in_from_bottom 0x7f010003
int anim abc_popup_enter 0x7f010004
int anim abc_popup_exit 0x7f010005
int anim abc_shrink_fade_out_from_bottom 0x7f010006
int anim abc_slide_in_bottom 0x7f010007
int anim abc_slide_in_top 0x7f010008
int anim abc_slide_out_bottom 0x7f010009
int anim abc_slide_out_top 0x7f01000a
int anim abc_tooltip_enter 0x7f01000b
int anim abc_tooltip_exit 0x7f01000c
int anim catalyst_fade_in 0x7f01000d
int anim catalyst_fade_out 0x7f01000e
int anim catalyst_push_up_in 0x7f01000f
int anim catalyst_push_up_out 0x7f010010
int anim catalyst_slide_down 0x7f010011
int anim catalyst_slide_up 0x7f010012
int attr actionBarDivider 0x7f040001
int attr actionBarItemBackground 0x7f040002
int attr actionBarPopupTheme 0x7f040003
int attr actionBarSize 0x7f040004
int attr actionBarSplitStyle 0x7f040005
int attr actionBarStyle 0x7f040006
int attr actionBarTabBarStyle 0x7f040007
int attr actionBarTabStyle 0x7f040008
int attr actionBarTabTextStyle 0x7f040009
int attr actionBarTheme 0x7f04000a
int attr actionBarWidgetTheme 0x7f04000b
int attr actionButtonStyle 0x7f04000c
int attr actionDropDownStyle 0x7f04000d
int attr actionLayout 0x7f04000e
int attr actionMenuTextAppearance 0x7f04000f
int attr actionMenuTextColor 0x7f040010
int attr actionModeBackground 0x7f040011
int attr actionModeCloseButtonStyle 0x7f040012
int attr actionModeCloseDrawable 0x7f040013
int attr actionModeCopyDrawable 0x7f040014
int attr actionModeCutDrawable 0x7f040015
int attr actionModeFindDrawable 0x7f040016
int attr actionModePasteDrawable 0x7f040017
int attr actionModePopupWindowStyle 0x7f040018
int attr actionModeSelectAllDrawable 0x7f040019
int attr actionModeShareDrawable 0x7f04001a
int attr actionModeSplitBackground 0x7f04001b
int attr actionModeStyle 0x7f04001c
int attr actionModeWebSearchDrawable 0x7f04001d
int attr actionOverflowButtonStyle 0x7f04001e
int attr actionOverflowMenuStyle 0x7f04001f
int attr actionProviderClass 0x7f040020
int attr actionViewClass 0x7f040021
int attr activityChooserViewStyle 0x7f040022
int attr actualImageResource 0x7f040023
int attr actualImageScaleType 0x7f040024
int attr actualImageUri 0x7f040025
int attr alertDialogButtonGroupStyle 0x7f040026
int attr alertDialogCenterButtons 0x7f040027
int attr alertDialogStyle 0x7f040028
int attr alertDialogTheme 0x7f040029
int attr allowStacking 0x7f04002a
int attr alpha 0x7f04002b
int attr alphabeticModifiers 0x7f04002c
int attr arrowHeadLength 0x7f04002d
int attr arrowShaftLength 0x7f04002e
int attr autoCompleteTextViewStyle 0x7f04002f
int attr autoSizeMaxTextSize 0x7f040030
int attr autoSizeMinTextSize 0x7f040031
int attr autoSizePresetSizes 0x7f040032
int attr autoSizeStepGranularity 0x7f040033
int attr autoSizeTextType 0x7f040034
int attr background 0x7f040035
int attr backgroundImage 0x7f040036
int attr backgroundSplit 0x7f040037
int attr backgroundStacked 0x7f040038
int attr backgroundTint 0x7f040039
int attr backgroundTintMode 0x7f04003a
int attr barLength 0x7f04003b
int attr borderlessButtonStyle 0x7f04003c
int attr buttonBarButtonStyle 0x7f04003d
int attr buttonBarNegativeButtonStyle 0x7f04003e
int attr buttonBarNeutralButtonStyle 0x7f04003f
int attr buttonBarPositiveButtonStyle 0x7f040040
int attr buttonBarStyle 0x7f040041
int attr buttonGravity 0x7f040042
int attr buttonIconDimen 0x7f040043
int attr buttonPanelSideLayout 0x7f040044
int attr buttonStyle 0x7f040045
int attr buttonStyleSmall 0x7f040046
int attr buttonTint 0x7f040047
int attr buttonTintMode 0x7f040048
int attr checkboxStyle 0x7f040049
int attr checkedTextViewStyle 0x7f04004a
int attr closeIcon 0x7f04004b
int attr closeItemLayout 0x7f04004c
int attr collapseContentDescription 0x7f04004d
int attr collapseIcon 0x7f04004e
int attr color 0x7f04004f
int attr colorAccent 0x7f040050
int attr colorBackgroundFloating 0x7f040051
int attr colorButtonNormal 0x7f040052
int attr colorControlActivated 0x7f040053
int attr colorControlHighlight 0x7f040054
int attr colorControlNormal 0x7f040055
int attr colorError 0x7f040056
int attr colorPrimary 0x7f040057
int attr colorPrimaryDark 0x7f040058
int attr colorSwitchThumbNormal 0x7f040059
int attr commitIcon 0x7f04005a
int attr contentDescription 0x7f04005b
int attr contentInsetEnd 0x7f04005c
int attr contentInsetEndWithActions 0x7f04005d
int attr contentInsetLeft 0x7f04005e
int attr contentInsetRight 0x7f04005f
int attr contentInsetStart 0x7f040060
int attr contentInsetStartWithNavigation 0x7f040061
int attr controlBackground 0x7f040062
int attr coordinatorLayoutStyle 0x7f040063
int attr customNavigationLayout 0x7f040064
int attr defaultQueryHint 0x7f040065
int attr dialogPreferredPadding 0x7f040066
int attr dialogTheme 0x7f040067
int attr displayOptions 0x7f040068
int attr divider 0x7f040069
int attr dividerHorizontal 0x7f04006a
int attr dividerPadding 0x7f04006b
int attr dividerVertical 0x7f04006c
int attr drawableSize 0x7f04006d
int attr drawerArrowStyle 0x7f04006e
int attr dropDownListViewStyle 0x7f04006f
int attr dropdownListPreferredItemHeight 0x7f040070
int attr editTextBackground 0x7f040071
int attr editTextColor 0x7f040072
int attr editTextStyle 0x7f040073
int attr elevation 0x7f040074
int attr expandActivityOverflowButtonDrawable 0x7f040075
int attr fadeDuration 0x7f040076
int attr failureImage 0x7f040077
int attr failureImageScaleType 0x7f040078
int attr font 0x7f040079
int attr fontFamily 0x7f04007a
int attr fontProviderAuthority 0x7f04007b
int attr fontProviderCerts 0x7f04007c
int attr fontProviderFetchStrategy 0x7f04007d
int attr fontProviderFetchTimeout 0x7f04007e
int attr fontProviderPackage 0x7f04007f
int attr fontProviderQuery 0x7f040080
int attr fontStyle 0x7f040081
int attr fontWeight 0x7f040082
int attr gapBetweenBars 0x7f040083
int attr goIcon 0x7f040084
int attr height 0x7f040085
int attr hideOnContentScroll 0x7f040086
int attr homeAsUpIndicator 0x7f040087
int attr homeLayout 0x7f040088
int attr icon 0x7f040089
int attr iconTint 0x7f04008a
int attr iconTintMode 0x7f04008b
int attr iconifiedByDefault 0x7f04008c
int attr imageButtonStyle 0x7f04008d
int attr indeterminateProgressStyle 0x7f04008e
int attr initialActivityCount 0x7f04008f
int attr isLightTheme 0x7f040090
int attr itemPadding 0x7f040091
int attr keylines 0x7f040092
int attr layout 0x7f040093
int attr layout_anchor 0x7f040094
int attr layout_anchorGravity 0x7f040095
int attr layout_behavior 0x7f040096
int attr layout_dodgeInsetEdges 0x7f040097
int attr layout_insetEdge 0x7f040098
int attr layout_keyline 0x7f040099
int attr listChoiceBackgroundIndicator 0x7f04009a
int attr listDividerAlertDialog 0x7f04009b
int attr listItemLayout 0x7f04009c
int attr listLayout 0x7f04009d
int attr listMenuViewStyle 0x7f04009e
int attr listPopupWindowStyle 0x7f04009f
int attr listPreferredItemHeight 0x7f0400a0
int attr listPreferredItemHeightLarge 0x7f0400a1
int attr listPreferredItemHeightSmall 0x7f0400a2
int attr listPreferredItemPaddingLeft 0x7f0400a3
int attr listPreferredItemPaddingRight 0x7f0400a4
int attr logo 0x7f0400a5
int attr logoDescription 0x7f0400a6
int attr maxButtonHeight 0x7f0400a7
int attr measureWithLargestChild 0x7f0400a8
int attr multiChoiceItemLayout 0x7f0400a9
int attr navigationContentDescription 0x7f0400aa
int attr navigationIcon 0x7f0400ab
int attr navigationMode 0x7f0400ac
int attr numericModifiers 0x7f0400ad
int attr overlapAnchor 0x7f0400ae
int attr overlayImage 0x7f0400af
int attr paddingBottomNoButtons 0x7f0400b0
int attr paddingEnd 0x7f0400b1
int attr paddingStart 0x7f0400b2
int attr paddingTopNoTitle 0x7f0400b3
int attr panelBackground 0x7f0400b4
int attr panelMenuListTheme 0x7f0400b5
int attr panelMenuListWidth 0x7f0400b6
int attr placeholderImage 0x7f0400b7
int attr placeholderImageScaleType 0x7f0400b8
int attr popupMenuStyle 0x7f0400b9
int attr popupTheme 0x7f0400ba
int attr popupWindowStyle 0x7f0400bb
int attr preserveIconSpacing 0x7f0400bc
int attr pressedStateOverlayImage 0x7f0400bd
int attr progressBarAutoRotateInterval 0x7f0400be
int attr progressBarImage 0x7f0400bf
int attr progressBarImageScaleType 0x7f0400c0
int attr progressBarPadding 0x7f0400c1
int attr progressBarStyle 0x7f0400c2
int attr queryBackground 0x7f0400c3
int attr queryHint 0x7f0400c4
int attr radioButtonStyle 0x7f0400c5
int attr ratingBarStyle 0x7f0400c6
int attr ratingBarStyleIndicator 0x7f0400c7
int attr ratingBarStyleSmall 0x7f0400c8
int attr retryImage 0x7f0400c9
int attr retryImageScaleType 0x7f0400ca
int attr roundAsCircle 0x7f0400cb
int attr roundBottomEnd 0x7f0400cc
int attr roundBottomLeft 0x7f0400cd
int attr roundBottomRight 0x7f0400ce
int attr roundBottomStart 0x7f0400cf
int attr roundTopEnd 0x7f0400d0
int attr roundTopLeft 0x7f0400d1
int attr roundTopRight 0x7f0400d2
int attr roundTopStart 0x7f0400d3
int attr roundWithOverlayColor 0x7f0400d4
int attr roundedCornerRadius 0x7f0400d5
int attr roundingBorderColor 0x7f0400d6
int attr roundingBorderPadding 0x7f0400d7
int attr roundingBorderWidth 0x7f0400d8
int attr searchHintIcon 0x7f0400d9
int attr searchIcon 0x7f0400da
int attr searchViewStyle 0x7f0400db
int attr seekBarStyle 0x7f0400dc
int attr selectableItemBackground 0x7f0400dd
int attr selectableItemBackgroundBorderless 0x7f0400de
int attr showAsAction 0x7f0400df
int attr showDividers 0x7f0400e0
int attr showText 0x7f0400e1
int attr showTitle 0x7f0400e2
int attr singleChoiceItemLayout 0x7f0400e3
int attr spinBars 0x7f0400e4
int attr spinnerDropDownItemStyle 0x7f0400e5
int attr spinnerStyle 0x7f0400e6
int attr splitTrack 0x7f0400e7
int attr srcCompat 0x7f0400e8
int attr state_above_anchor 0x7f0400e9
int attr statusBarBackground 0x7f0400ea
int attr subMenuArrow 0x7f0400eb
int attr submitBackground 0x7f0400ec
int attr subtitle 0x7f0400ed
int attr subtitleTextAppearance 0x7f0400ee
int attr subtitleTextColor 0x7f0400ef
int attr subtitleTextStyle 0x7f0400f0
int attr suggestionRowLayout 0x7f0400f1
int attr switchMinWidth 0x7f0400f2
int attr switchPadding 0x7f0400f3
int attr switchStyle 0x7f0400f4
int attr switchTextAppearance 0x7f0400f5
int attr textAllCaps 0x7f0400f6
int attr textAppearanceLargePopupMenu 0x7f0400f7
int attr textAppearanceListItem 0x7f0400f8
int attr textAppearanceListItemSecondary 0x7f0400f9
int attr textAppearanceListItemSmall 0x7f0400fa
int attr textAppearancePopupMenuHeader 0x7f0400fb
int attr textAppearanceSearchResultSubtitle 0x7f0400fc
int attr textAppearanceSearchResultTitle 0x7f0400fd
int attr textAppearanceSmallPopupMenu 0x7f0400fe
int attr textColorAlertDialogListItem 0x7f0400ff
int attr textColorSearchUrl 0x7f040100
int attr theme 0x7f040101
int attr thickness 0x7f040102
int attr thumbTextPadding 0x7f040103
int attr thumbTint 0x7f040104
int attr thumbTintMode 0x7f040105
int attr tickMark 0x7f040106
int attr tickMarkTint 0x7f040107
int attr tickMarkTintMode 0x7f040108
int attr tint 0x7f040109
int attr tintMode 0x7f04010a
int attr title 0x7f04010b
int attr titleMargin 0x7f04010c
int attr titleMarginBottom 0x7f04010d
int attr titleMarginEnd 0x7f04010e
int attr titleMarginStart 0x7f04010f
int attr titleMarginTop 0x7f040110
int attr titleMargins 0x7f040111
int attr titleTextAppearance 0x7f040112
int attr titleTextColor 0x7f040113
int attr titleTextStyle 0x7f040114
int attr toolbarNavigationButtonStyle 0x7f040115
int attr toolbarStyle 0x7f040116
int attr tooltipForegroundColor 0x7f040117
int attr tooltipFrameBackground 0x7f040118
int attr tooltipText 0x7f040119
int attr track 0x7f04011a
int attr trackTint 0x7f04011b
int attr trackTintMode 0x7f04011c
int attr viewAspectRatio 0x7f04011d
int attr viewInflaterClass 0x7f04011e
int attr voiceIcon 0x7f04011f
int attr windowActionBar 0x7f040120
int attr windowActionBarOverlay 0x7f040121
int attr windowActionModeOverlay 0x7f040122
int attr windowFixedHeightMajor 0x7f040123
int attr windowFixedHeightMinor 0x7f040124
int attr windowFixedWidthMajor 0x7f040125
int attr windowFixedWidthMinor 0x7f040126
int attr windowMinWidthMajor 0x7f040127
int attr windowMinWidthMinor 0x7f040128
int attr windowNoTitle 0x7f040129
int bool abc_action_bar_embed_tabs 0x7f050001
int bool abc_allow_stacked_button_bar 0x7f050002
int bool abc_config_actionMenuItemAllCaps 0x7f050003
int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f050004
int color abc_background_cache_hint_selector_material_dark 0x7f060001
int color abc_background_cache_hint_selector_material_light 0x7f060002
int color abc_btn_colored_borderless_text_material 0x7f060003
int color abc_btn_colored_text_material 0x7f060004
int color abc_color_highlight_material 0x7f060005
int color abc_hint_foreground_material_dark 0x7f060006
int color abc_hint_foreground_material_light 0x7f060007
int color abc_input_method_navigation_guard 0x7f060008
int color abc_primary_text_disable_only_material_dark 0x7f060009
int color abc_primary_text_disable_only_material_light 0x7f06000a
int color abc_primary_text_material_dark 0x7f06000b
int color abc_primary_text_material_light 0x7f06000c
int color abc_search_url_text 0x7f06000d
int color abc_search_url_text_normal 0x7f06000e
int color abc_search_url_text_pressed 0x7f06000f
int color abc_search_url_text_selected 0x7f060010
int color abc_secondary_text_material_dark 0x7f060011
int color abc_secondary_text_material_light 0x7f060012
int color abc_tint_btn_checkable 0x7f060013
int color abc_tint_default 0x7f060014
int color abc_tint_edittext 0x7f060015
int color abc_tint_seek_thumb 0x7f060016
int color abc_tint_spinner 0x7f060017
int color abc_tint_switch_track 0x7f060018
int color accent_material_dark 0x7f060019
int color accent_material_light 0x7f06001a
int color background_floating_material_dark 0x7f06001b
int color background_floating_material_light 0x7f06001c
int color background_material_dark 0x7f06001d
int color background_material_light 0x7f06001e
int color bright_foreground_disabled_material_dark 0x7f06001f
int color bright_foreground_disabled_material_light 0x7f060020
int color bright_foreground_inverse_material_dark 0x7f060021
int color bright_foreground_inverse_material_light 0x7f060022
int color bright_foreground_material_dark 0x7f060023
int color bright_foreground_material_light 0x7f060024
int color button_material_dark 0x7f060025
int color button_material_light 0x7f060026
int color catalyst_redbox_background 0x7f060027
int color dim_foreground_disabled_material_dark 0x7f060028
int color dim_foreground_disabled_material_light 0x7f060029
int color dim_foreground_material_dark 0x7f06002a
int color dim_foreground_material_light 0x7f06002b
int color error_color_material 0x7f06002c
int color foreground_material_dark 0x7f06002d
int color foreground_material_light 0x7f06002e
int color highlighted_text_material_dark 0x7f06002f
int color highlighted_text_material_light 0x7f060030
int color material_blue_grey_800 0x7f060031
int color material_blue_grey_900 0x7f060032
int color material_blue_grey_950 0x7f060033
int color material_deep_teal_200 0x7f060034
int color material_deep_teal_500 0x7f060035
int color material_grey_100 0x7f060036
int color material_grey_300 0x7f060037
int color material_grey_50 0x7f060038
int color material_grey_600 0x7f060039
int color material_grey_800 0x7f06003a
int color material_grey_850 0x7f06003b
int color material_grey_900 0x7f06003c
int color notification_action_color_filter 0x7f06003d
int color notification_icon_bg_color 0x7f06003e
int color primary_dark_material_dark 0x7f06003f
int color primary_dark_material_light 0x7f060040
int color primary_material_dark 0x7f060041
int color primary_material_light 0x7f060042
int color primary_text_default_material_dark 0x7f060043
int color primary_text_default_material_light 0x7f060044
int color primary_text_disabled_material_dark 0x7f060045
int color primary_text_disabled_material_light 0x7f060046
int color ripple_material_dark 0x7f060047
int color ripple_material_light 0x7f060048
int color secondary_text_default_material_dark 0x7f060049
int color secondary_text_default_material_light 0x7f06004a
int color secondary_text_disabled_material_dark 0x7f06004b
int color secondary_text_disabled_material_light 0x7f06004c
int color switch_thumb_disabled_material_dark 0x7f06004d
int color switch_thumb_disabled_material_light 0x7f06004e
int color switch_thumb_material_dark 0x7f06004f
int color switch_thumb_material_light 0x7f060050
int color switch_thumb_normal_material_dark 0x7f060051
int color switch_thumb_normal_material_light 0x7f060052
int color tooltip_background_dark 0x7f060053
int color tooltip_background_light 0x7f060054
int dimen abc_action_bar_content_inset_material 0x7f080001
int dimen abc_action_bar_content_inset_with_nav 0x7f080002
int dimen abc_action_bar_default_height_material 0x7f080003
int dimen abc_action_bar_default_padding_end_material 0x7f080004
int dimen abc_action_bar_default_padding_start_material 0x7f080005
int dimen abc_action_bar_elevation_material 0x7f080006
int dimen abc_action_bar_icon_vertical_padding_material 0x7f080007
int dimen abc_action_bar_overflow_padding_end_material 0x7f080008
int dimen abc_action_bar_overflow_padding_start_material 0x7f080009
int dimen abc_action_bar_progress_bar_size 0x7f08000a
int dimen abc_action_bar_stacked_max_height 0x7f08000b
int dimen abc_action_bar_stacked_tab_max_width 0x7f08000c
int dimen abc_action_bar_subtitle_bottom_margin_material 0x7f08000d
int dimen abc_action_bar_subtitle_top_margin_material 0x7f08000e
int dimen abc_action_button_min_height_material 0x7f08000f
int dimen abc_action_button_min_width_material 0x7f080010
int dimen abc_action_button_min_width_overflow_material 0x7f080011
int dimen abc_alert_dialog_button_bar_height 0x7f080012
int dimen abc_alert_dialog_button_dimen 0x7f080013
int dimen abc_button_inset_horizontal_material 0x7f080014
int dimen abc_button_inset_vertical_material 0x7f080015
int dimen abc_button_padding_horizontal_material 0x7f080016
int dimen abc_button_padding_vertical_material 0x7f080017
int dimen abc_cascading_menus_min_smallest_width 0x7f080018
int dimen abc_config_prefDialogWidth 0x7f080019
int dimen abc_control_corner_material 0x7f08001a
int dimen abc_control_inset_material 0x7f08001b
int dimen abc_control_padding_material 0x7f08001c
int dimen abc_dialog_fixed_height_major 0x7f08001d
int dimen abc_dialog_fixed_height_minor 0x7f08001e
int dimen abc_dialog_fixed_width_major 0x7f08001f
int dimen abc_dialog_fixed_width_minor 0x7f080020
int dimen abc_dialog_list_padding_bottom_no_buttons 0x7f080021
int dimen abc_dialog_list_padding_top_no_title 0x7f080022
int dimen abc_dialog_min_width_major 0x7f080023
int dimen abc_dialog_min_width_minor 0x7f080024
int dimen abc_dialog_padding_material 0x7f080025
int dimen abc_dialog_padding_top_material 0x7f080026
int dimen abc_dialog_title_divider_material 0x7f080027
int dimen abc_disabled_alpha_material_dark 0x7f080028
int dimen abc_disabled_alpha_material_light 0x7f080029
int dimen abc_dropdownitem_icon_width 0x7f08002a
int dimen abc_dropdownitem_text_padding_left 0x7f08002b
int dimen abc_dropdownitem_text_padding_right 0x7f08002c
int dimen abc_edit_text_inset_bottom_material 0x7f08002d
int dimen abc_edit_text_inset_horizontal_material 0x7f08002e
int dimen abc_edit_text_inset_top_material 0x7f08002f
int dimen abc_floating_window_z 0x7f080030
int dimen abc_list_item_padding_horizontal_material 0x7f080031
int dimen abc_panel_menu_list_width 0x7f080032
int dimen abc_progress_bar_height_material 0x7f080033
int dimen abc_search_view_preferred_height 0x7f080034
int dimen abc_search_view_preferred_width 0x7f080035
int dimen abc_seekbar_track_background_height_material 0x7f080036
int dimen abc_seekbar_track_progress_height_material 0x7f080037
int dimen abc_select_dialog_padding_start_material 0x7f080038
int dimen abc_switch_padding 0x7f080039
int dimen abc_text_size_body_1_material 0x7f08003a
int dimen abc_text_size_body_2_material 0x7f08003b
int dimen abc_text_size_button_material 0x7f08003c
int dimen abc_text_size_caption_material 0x7f08003d
int dimen abc_text_size_display_1_material 0x7f08003e
int dimen abc_text_size_display_2_material 0x7f08003f
int dimen abc_text_size_display_3_material 0x7f080040
int dimen abc_text_size_display_4_material 0x7f080041
int dimen abc_text_size_headline_material 0x7f080042
int dimen abc_text_size_large_material 0x7f080043
int dimen abc_text_size_medium_material 0x7f080044
int dimen abc_text_size_menu_header_material 0x7f080045
int dimen abc_text_size_menu_material 0x7f080046
int dimen abc_text_size_small_material 0x7f080047
int dimen abc_text_size_subhead_material 0x7f080048
int dimen abc_text_size_subtitle_material_toolbar 0x7f080049
int dimen abc_text_size_title_material 0x7f08004a
int dimen abc_text_size_title_material_toolbar 0x7f08004b
int dimen compat_button_inset_horizontal_material 0x7f08004c
int dimen compat_button_inset_vertical_material 0x7f08004d
int dimen compat_button_padding_horizontal_material 0x7f08004e
int dimen compat_button_padding_vertical_material 0x7f08004f
int dimen compat_control_corner_material 0x7f080050
int dimen disabled_alpha_material_dark 0x7f080051
int dimen disabled_alpha_material_light 0x7f080052
int dimen highlight_alpha_material_colored 0x7f080053
int dimen highlight_alpha_material_dark 0x7f080054
int dimen highlight_alpha_material_light 0x7f080055
int dimen hint_alpha_material_dark 0x7f080056
int dimen hint_alpha_material_light 0x7f080057
int dimen hint_pressed_alpha_material_dark 0x7f080058
int dimen hint_pressed_alpha_material_light 0x7f080059
int dimen notification_action_icon_size 0x7f08005a
int dimen notification_action_text_size 0x7f08005b
int dimen notification_big_circle_margin 0x7f08005c
int dimen notification_content_margin_start 0x7f08005d
int dimen notification_large_icon_height 0x7f08005e
int dimen notification_large_icon_width 0x7f08005f
int dimen notification_main_column_padding_top 0x7f080060
int dimen notification_media_narrow_margin 0x7f080061
int dimen notification_right_icon_size 0x7f080062
int dimen notification_right_side_padding_top 0x7f080063
int dimen notification_small_icon_background_padding 0x7f080064
int dimen notification_small_icon_size_as_large 0x7f080065
int dimen notification_subtext_size 0x7f080066
int dimen notification_top_pad 0x7f080067
int dimen notification_top_pad_large_text 0x7f080068
int dimen tooltip_corner_radius 0x7f080069
int dimen tooltip_horizontal_padding 0x7f08006a
int dimen tooltip_margin 0x7f08006b
int dimen tooltip_precise_anchor_extra_offset 0x7f08006c
int dimen tooltip_precise_anchor_threshold 0x7f08006d
int dimen tooltip_vertical_padding 0x7f08006e
int dimen tooltip_y_offset_non_touch 0x7f08006f
int dimen tooltip_y_offset_touch 0x7f080070
int drawable abc_ab_share_pack_mtrl_alpha 0x7f090001
int drawable abc_action_bar_item_background_material 0x7f090002
int drawable abc_btn_borderless_material 0x7f090003
int drawable abc_btn_check_material 0x7f090004
int drawable abc_btn_check_to_on_mtrl_000 0x7f090005
int drawable abc_btn_check_to_on_mtrl_015 0x7f090006
int drawable abc_btn_colored_material 0x7f090007
int drawable abc_btn_default_mtrl_shape 0x7f090008
int drawable abc_btn_radio_material 0x7f090009
int drawable abc_btn_radio_to_on_mtrl_000 0x7f09000a
int drawable abc_btn_radio_to_on_mtrl_015 0x7f09000b
int drawable abc_btn_switch_to_on_mtrl_00001 0x7f09000c
int drawable abc_btn_switch_to_on_mtrl_00012 0x7f09000d
int drawable abc_cab_background_internal_bg 0x7f09000e
int drawable abc_cab_background_top_material 0x7f09000f
int drawable abc_cab_background_top_mtrl_alpha 0x7f090010
int drawable abc_control_background_material 0x7f090011
int drawable abc_dialog_material_background 0x7f090012
int drawable abc_edit_text_material 0x7f090013
int drawable abc_ic_ab_back_material 0x7f090014
int drawable abc_ic_arrow_drop_right_black_24dp 0x7f090015
int drawable abc_ic_clear_material 0x7f090016
int drawable abc_ic_commit_search_api_mtrl_alpha 0x7f090017
int drawable abc_ic_go_search_api_material 0x7f090018
int drawable abc_ic_menu_copy_mtrl_am_alpha 0x7f090019
int drawable abc_ic_menu_cut_mtrl_alpha 0x7f09001a
int drawable abc_ic_menu_overflow_material 0x7f09001b
int drawable abc_ic_menu_paste_mtrl_am_alpha 0x7f09001c
int drawable abc_ic_menu_selectall_mtrl_alpha 0x7f09001d
int drawable abc_ic_menu_share_mtrl_alpha 0x7f09001e
int drawable abc_ic_search_api_material 0x7f09001f
int drawable abc_ic_star_black_16dp 0x7f090020
int drawable abc_ic_star_black_36dp 0x7f090021
int drawable abc_ic_star_black_48dp 0x7f090022
int drawable abc_ic_star_half_black_16dp 0x7f090023
int drawable abc_ic_star_half_black_36dp 0x7f090024
int drawable abc_ic_star_half_black_48dp 0x7f090025
int drawable abc_ic_voice_search_api_material 0x7f090026
int drawable abc_item_background_holo_dark 0x7f090027
int drawable abc_item_background_holo_light 0x7f090028
int drawable abc_list_divider_mtrl_alpha 0x7f090029
int drawable abc_list_focused_holo 0x7f09002a
int drawable abc_list_longpressed_holo 0x7f09002b
int drawable abc_list_pressed_holo_dark 0x7f09002c
int drawable abc_list_pressed_holo_light 0x7f09002d
int drawable abc_list_selector_background_transition_holo_dark 0x7f09002e
int drawable abc_list_selector_background_transition_holo_light 0x7f09002f
int drawable abc_list_selector_disabled_holo_dark 0x7f090030
int drawable abc_list_selector_disabled_holo_light 0x7f090031
int drawable abc_list_selector_holo_dark 0x7f090032
int drawable abc_list_selector_holo_light 0x7f090033
int drawable abc_menu_hardkey_panel_mtrl_mult 0x7f090034
int drawable abc_popup_background_mtrl_mult 0x7f090035
int drawable abc_ratingbar_indicator_material 0x7f090036
int drawable abc_ratingbar_material 0x7f090037
int drawable abc_ratingbar_small_material 0x7f090038
int drawable abc_scrubber_control_off_mtrl_alpha 0x7f090039
int drawable abc_scrubber_control_to_pressed_mtrl_000 0x7f09003a
int drawable abc_scrubber_control_to_pressed_mtrl_005 0x7f09003b
int drawable abc_scrubber_primary_mtrl_alpha 0x7f09003c
int drawable abc_scrubber_track_mtrl_alpha 0x7f09003d
int drawable abc_seekbar_thumb_material 0x7f09003e
int drawable abc_seekbar_tick_mark_material 0x7f09003f
int drawable abc_seekbar_track_material 0x7f090040
int drawable abc_spinner_mtrl_am_alpha 0x7f090041
int drawable abc_spinner_textfield_background_material 0x7f090042
int drawable abc_switch_thumb_material 0x7f090043
int drawable abc_switch_track_mtrl_alpha 0x7f090044
int drawable abc_tab_indicator_material 0x7f090045
int drawable abc_tab_indicator_mtrl_alpha 0x7f090046
int drawable abc_text_cursor_material 0x7f090047
int drawable abc_text_select_handle_left_mtrl_dark 0x7f090048
int drawable abc_text_select_handle_left_mtrl_light 0x7f090049
int drawable abc_text_select_handle_middle_mtrl_dark 0x7f09004a
int drawable abc_text_select_handle_middle_mtrl_light 0x7f09004b
int drawable abc_text_select_handle_right_mtrl_dark 0x7f09004c
int drawable abc_text_select_handle_right_mtrl_light 0x7f09004d
int drawable abc_textfield_activated_mtrl_alpha 0x7f09004e
int drawable abc_textfield_default_mtrl_alpha 0x7f09004f
int drawable abc_textfield_search_activated_mtrl_alpha 0x7f090050
int drawable abc_textfield_search_default_mtrl_alpha 0x7f090051
int drawable abc_textfield_search_material 0x7f090052
int drawable abc_vector_test 0x7f090053
int drawable notification_action_background 0x7f090054
int drawable notification_bg 0x7f090055
int drawable notification_bg_low 0x7f090056
int drawable notification_bg_low_normal 0x7f090057
int drawable notification_bg_low_pressed 0x7f090058
int drawable notification_bg_normal 0x7f090059
int drawable notification_bg_normal_pressed 0x7f09005a
int drawable notification_icon_background 0x7f09005b
int drawable notification_template_icon_bg 0x7f09005c
int drawable notification_template_icon_low_bg 0x7f09005d
int drawable notification_tile_bg 0x7f09005e
int drawable notify_panel_notification_icon_bg 0x7f09005f
int drawable tooltip_frame_dark 0x7f090060
int drawable tooltip_frame_light 0x7f090061
int id accessibility_hint 0x7f0c0001
int id accessibility_role 0x7f0c0002
int id action_bar 0x7f0c0003
int id action_bar_activity_content 0x7f0c0004
int id action_bar_container 0x7f0c0005
int id action_bar_root 0x7f0c0006
int id action_bar_spinner 0x7f0c0007
int id action_bar_subtitle 0x7f0c0008
int id action_bar_title 0x7f0c0009
int id action_container 0x7f0c000a
int id action_context_bar 0x7f0c000b
int id action_divider 0x7f0c000c
int id action_image 0x7f0c000d
int id action_menu_divider 0x7f0c000e
int id action_menu_presenter 0x7f0c000f
int id action_mode_bar 0x7f0c0010
int id action_mode_bar_stub 0x7f0c0011
int id action_mode_close_button 0x7f0c0012
int id action_text 0x7f0c0013
int id actions 0x7f0c0014
int id activity_chooser_view_content 0x7f0c0015
int id add 0x7f0c0016
int id alertTitle 0x7f0c0017
int id async 0x7f0c0018
int id blocking 0x7f0c0019
int id bottom 0x7f0c001a
int id buttonPanel 0x7f0c001b
int id catalyst_redbox_title 0x7f0c001c
int id center 0x7f0c001d
int id centerCrop 0x7f0c001e
int id centerInside 0x7f0c001f
int id checkbox 0x7f0c0020
int id chronometer 0x7f0c0021
int id contentPanel 0x7f0c0022
int id custom 0x7f0c0023
int id customPanel 0x7f0c0024
int id decor_content_parent 0x7f0c0025
int id default_activity_button 0x7f0c0026
int id edit_query 0x7f0c0027
int id end 0x7f0c0028
int id expand_activities_button 0x7f0c0029
int id expanded_menu 0x7f0c002a
int id fitBottomStart 0x7f0c002b
int id fitCenter 0x7f0c002c
int id fitEnd 0x7f0c002d
int id fitStart 0x7f0c002e
int id fitXY 0x7f0c002f
int id focusCrop 0x7f0c0030
int id forever 0x7f0c0031
int id fps_text 0x7f0c0032
int id home 0x7f0c0033
int id icon 0x7f0c0034
int id icon_group 0x7f0c0035
int id image 0x7f0c0036
int id info 0x7f0c0037
int id italic 0x7f0c0038
int id left 0x7f0c0039
int id line1 0x7f0c003a
int id line3 0x7f0c003b
int id listMode 0x7f0c003c
int id list_item 0x7f0c003d
int id message 0x7f0c003e
int id multiply 0x7f0c003f
int id none 0x7f0c0040
int id normal 0x7f0c0041
int id notification_background 0x7f0c0042
int id notification_main_column 0x7f0c0043
int id notification_main_column_container 0x7f0c0044
int id parentPanel 0x7f0c0045
int id progress_circular 0x7f0c0046
int id progress_horizontal 0x7f0c0047
int id radio 0x7f0c0048
int id react_test_id 0x7f0c0049
int id right 0x7f0c004a
int id right_icon 0x7f0c004b
int id right_side 0x7f0c004c
int id rn_frame_file 0x7f0c004d
int id rn_frame_method 0x7f0c004e
int id rn_redbox_copy_button 0x7f0c004f
int id rn_redbox_dismiss_button 0x7f0c0050
int id rn_redbox_line_separator 0x7f0c0051
int id rn_redbox_loading_indicator 0x7f0c0052
int id rn_redbox_reload_button 0x7f0c0053
int id rn_redbox_report_button 0x7f0c0054
int id rn_redbox_report_label 0x7f0c0055
int id rn_redbox_stack 0x7f0c0056
int id screen 0x7f0c0057
int id scrollIndicatorDown 0x7f0c0058
int id scrollIndicatorUp 0x7f0c0059
int id scrollView 0x7f0c005a
int id search_badge 0x7f0c005b
int id search_bar 0x7f0c005c
int id search_button 0x7f0c005d
int id search_close_btn 0x7f0c005e
int id search_edit_frame 0x7f0c005f
int id search_go_btn 0x7f0c0060
int id search_mag_icon 0x7f0c0061
int id search_plate 0x7f0c0062
int id search_src_text 0x7f0c0063
int id search_voice_btn 0x7f0c0064
int id select_dialog_listview 0x7f0c0065
int id shortcut 0x7f0c0066
int id spacer 0x7f0c0067
int id split_action_bar 0x7f0c0068
int id src_atop 0x7f0c0069
int id src_in 0x7f0c006a
int id src_over 0x7f0c006b
int id start 0x7f0c006c
int id submenuarrow 0x7f0c006d
int id submit_area 0x7f0c006e
int id tabMode 0x7f0c006f
int id tag_transition_group 0x7f0c0070
int id text 0x7f0c0071
int id text2 0x7f0c0072
int id textSpacerNoButtons 0x7f0c0073
int id textSpacerNoTitle 0x7f0c0074
int id time 0x7f0c0075
int id title 0x7f0c0076
int id titleDividerNoCustom 0x7f0c0077
int id title_template 0x7f0c0078
int id top 0x7f0c0079
int id topPanel 0x7f0c007a
int id uniform 0x7f0c007b
int id up 0x7f0c007c
int id view_tag_instance_handle 0x7f0c007d
int id view_tag_native_id 0x7f0c007e
int id wrap_content 0x7f0c007f
int integer abc_config_activityDefaultDur 0x7f0d0001
int integer abc_config_activityShortDur 0x7f0d0002
int integer cancel_button_image_alpha 0x7f0d0003
int integer config_tooltipAnimTime 0x7f0d0004
int integer status_bar_notification_info_maxnum 0x7f0d0005
int layout abc_action_bar_title_item 0x7f0f0001
int layout abc_action_bar_up_container 0x7f0f0002
int layout abc_action_menu_item_layout 0x7f0f0003
int layout abc_action_menu_layout 0x7f0f0004
int layout abc_action_mode_bar 0x7f0f0005
int layout abc_action_mode_close_item_material 0x7f0f0006
int layout abc_activity_chooser_view 0x7f0f0007
int layout abc_activity_chooser_view_list_item 0x7f0f0008
int layout abc_alert_dialog_button_bar_material 0x7f0f0009
int layout abc_alert_dialog_material 0x7f0f000a
int layout abc_alert_dialog_title_material 0x7f0f000b
int layout abc_dialog_title_material 0x7f0f000c
int layout abc_expanded_menu_layout 0x7f0f000d
int layout abc_list_menu_item_checkbox 0x7f0f000e
int layout abc_list_menu_item_icon 0x7f0f000f
int layout abc_list_menu_item_layout 0x7f0f0010
int layout abc_list_menu_item_radio 0x7f0f0011
int layout abc_popup_menu_header_item_layout 0x7f0f0012
int layout abc_popup_menu_item_layout 0x7f0f0013
int layout abc_screen_content_include 0x7f0f0014
int layout abc_screen_simple 0x7f0f0015
int layout abc_screen_simple_overlay_action_mode 0x7f0f0016
int layout abc_screen_toolbar 0x7f0f0017
int layout abc_search_dropdown_item_icons_2line 0x7f0f0018
int layout abc_search_view 0x7f0f0019
int layout abc_select_dialog_material 0x7f0f001a
int layout abc_tooltip 0x7f0f001b
int layout dev_loading_view 0x7f0f001c
int layout fps_view 0x7f0f001d
int layout notification_action 0x7f0f001e
int layout notification_action_tombstone 0x7f0f001f
int layout notification_template_custom_big 0x7f0f0020
int layout notification_template_icon_group 0x7f0f0021
int layout notification_template_part_chronometer 0x7f0f0022
int layout notification_template_part_time 0x7f0f0023
int layout redbox_item_frame 0x7f0f0024
int layout redbox_item_title 0x7f0f0025
int layout redbox_view 0x7f0f0026
int layout select_dialog_item_material 0x7f0f0027
int layout select_dialog_multichoice_material 0x7f0f0028
int layout select_dialog_singlechoice_material 0x7f0f0029
int layout support_simple_spinner_dropdown_item 0x7f0f002a
int string abc_action_bar_home_description 0x7f150001
int string abc_action_bar_up_description 0x7f150002
int string abc_action_menu_overflow_description 0x7f150003
int string abc_action_mode_done 0x7f150004
int string abc_activity_chooser_view_see_all 0x7f150005
int string abc_activitychooserview_choose_application 0x7f150006
int string abc_capital_off 0x7f150007
int string abc_capital_on 0x7f150008
int string abc_font_family_body_1_material 0x7f150009
int string abc_font_family_body_2_material 0x7f15000a
int string abc_font_family_button_material 0x7f15000b
int string abc_font_family_caption_material 0x7f15000c
int string abc_font_family_display_1_material 0x7f15000d
int string abc_font_family_display_2_material 0x7f15000e
int string abc_font_family_display_3_material 0x7f15000f
int string abc_font_family_display_4_material 0x7f150010
int string abc_font_family_headline_material 0x7f150011
int string abc_font_family_menu_material 0x7f150012
int string abc_font_family_subhead_material 0x7f150013
int string abc_font_family_title_material 0x7f150014
int string abc_search_hint 0x7f150015
int string abc_searchview_description_clear 0x7f150016
int string abc_searchview_description_query 0x7f150017
int string abc_searchview_description_search 0x7f150018
int string abc_searchview_description_submit 0x7f150019
int string abc_searchview_description_voice 0x7f15001a
int string abc_shareactionprovider_share_with 0x7f15001b
int string abc_shareactionprovider_share_with_application 0x7f15001c
int string abc_toolbar_collapse_description 0x7f15001d
int string adjustable_description 0x7f15001e
int string catalyst_copy_button 0x7f15001f
int string catalyst_debugjs 0x7f150020
int string catalyst_debugjs_nuclide 0x7f150021
int string catalyst_debugjs_nuclide_failure 0x7f150022
int string catalyst_debugjs_off 0x7f150023
int string catalyst_dismiss_button 0x7f150024
int string catalyst_element_inspector 0x7f150025
int string catalyst_heap_capture 0x7f150026
int string catalyst_hot_module_replacement 0x7f150027
int string catalyst_hot_module_replacement_off 0x7f150028
int string catalyst_jsload_error 0x7f150029
int string catalyst_live_reload 0x7f15002a
int string catalyst_live_reload_off 0x7f15002b
int string catalyst_loading_from_url 0x7f15002c
int string catalyst_perf_monitor 0x7f15002d
int string catalyst_perf_monitor_off 0x7f15002e
int string catalyst_poke_sampling_profiler 0x7f15002f
int string catalyst_reload_button 0x7f150030
int string catalyst_reloadjs 0x7f150031
int string catalyst_remotedbg_error 0x7f150032
int string catalyst_remotedbg_message 0x7f150033
int string catalyst_report_button 0x7f150034
int string catalyst_settings 0x7f150035
int string catalyst_settings_title 0x7f150036
int string image_button_description 0x7f150037
int string image_description 0x7f150038
int string link_description 0x7f150039
int string search_description 0x7f15003a
int string search_menu_title 0x7f15003b
int string status_bar_notification_info_overflow 0x7f15003c
int style AlertDialog_AppCompat 0x7f160001
int style AlertDialog_AppCompat_Light 0x7f160002
int style Animation_AppCompat_Dialog 0x7f160003
int style Animation_AppCompat_DropDownUp 0x7f160004
int style Animation_AppCompat_Tooltip 0x7f160005
int style Animation_Catalyst_RedBox 0x7f160006
int style Base_AlertDialog_AppCompat 0x7f160007
int style Base_AlertDialog_AppCompat_Light 0x7f160008
int style Base_Animation_AppCompat_Dialog 0x7f160009
int style Base_Animation_AppCompat_DropDownUp 0x7f16000a
int style Base_Animation_AppCompat_Tooltip 0x7f16000b
int style Base_DialogWindowTitleBackground_AppCompat 0x7f16000c
int style Base_DialogWindowTitle_AppCompat 0x7f16000d
int style Base_TextAppearance_AppCompat 0x7f16000e
int style Base_TextAppearance_AppCompat_Body1 0x7f16000f
int style Base_TextAppearance_AppCompat_Body2 0x7f160010
int style Base_TextAppearance_AppCompat_Button 0x7f160011
int style Base_TextAppearance_AppCompat_Caption 0x7f160012
int style Base_TextAppearance_AppCompat_Display1 0x7f160013
int style Base_TextAppearance_AppCompat_Display2 0x7f160014
int style Base_TextAppearance_AppCompat_Display3 0x7f160015
int style Base_TextAppearance_AppCompat_Display4 0x7f160016
int style Base_TextAppearance_AppCompat_Headline 0x7f160017
int style Base_TextAppearance_AppCompat_Inverse 0x7f160018
int style Base_TextAppearance_AppCompat_Large 0x7f160019
int style Base_TextAppearance_AppCompat_Large_Inverse 0x7f16001a
int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f16001b
int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f16001c
int style Base_TextAppearance_AppCompat_Medium 0x7f16001d
int style Base_TextAppearance_AppCompat_Medium_Inverse 0x7f16001e
int style Base_TextAppearance_AppCompat_Menu 0x7f16001f
int style Base_TextAppearance_AppCompat_SearchResult 0x7f160020
int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x7f160021
int style Base_TextAppearance_AppCompat_SearchResult_Title 0x7f160022
int style Base_TextAppearance_AppCompat_Small 0x7f160023
int style Base_TextAppearance_AppCompat_Small_Inverse 0x7f160024
int style Base_TextAppearance_AppCompat_Subhead 0x7f160025
int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x7f160026
int style Base_TextAppearance_AppCompat_Title 0x7f160027
int style Base_TextAppearance_AppCompat_Title_Inverse 0x7f160028
int style Base_TextAppearance_AppCompat_Tooltip 0x7f160029
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f16002a
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f16002b
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f16002c
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f16002d
int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f16002e
int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f16002f
int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f160030
int style Base_TextAppearance_AppCompat_Widget_Button 0x7f160031
int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f160032
int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x7f160033
int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x7f160034
int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x7f160035
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f160036
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f160037
int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f160038
int style Base_TextAppearance_AppCompat_Widget_Switch 0x7f160039
int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f16003a
int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f16003b
int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f16003c
int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f16003d
int style Base_ThemeOverlay_AppCompat 0x7f16003e
int style Base_ThemeOverlay_AppCompat_ActionBar 0x7f16003f
int style Base_ThemeOverlay_AppCompat_Dark 0x7f160040
int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x7f160041
int style Base_ThemeOverlay_AppCompat_Dialog 0x7f160042
int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x7f160043
int style Base_ThemeOverlay_AppCompat_Light 0x7f160044
int style Base_Theme_AppCompat 0x7f160045
int style Base_Theme_AppCompat_CompactMenu 0x7f160046
int style Base_Theme_AppCompat_Dialog 0x7f160047
int style Base_Theme_AppCompat_DialogWhenLarge 0x7f160048
int style Base_Theme_AppCompat_Dialog_Alert 0x7f160049
int style Base_Theme_AppCompat_Dialog_FixedSize 0x7f16004a
int style Base_Theme_AppCompat_Dialog_MinWidth 0x7f16004b
int style Base_Theme_AppCompat_Light 0x7f16004c
int style Base_Theme_AppCompat_Light_DarkActionBar 0x7f16004d
int style Base_Theme_AppCompat_Light_Dialog 0x7f16004e
int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x7f16004f
int style Base_Theme_AppCompat_Light_Dialog_Alert 0x7f160050
int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x7f160051
int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x7f160052
int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x7f160053
int style Base_V21_Theme_AppCompat 0x7f160054
int style Base_V21_Theme_AppCompat_Dialog 0x7f160055
int style Base_V21_Theme_AppCompat_Light 0x7f160056
int style Base_V21_Theme_AppCompat_Light_Dialog 0x7f160057
int style Base_V22_Theme_AppCompat 0x7f160058
int style Base_V22_Theme_AppCompat_Light 0x7f160059
int style Base_V23_Theme_AppCompat 0x7f16005a
int style Base_V23_Theme_AppCompat_Light 0x7f16005b
int style Base_V26_Theme_AppCompat 0x7f16005c
int style Base_V26_Theme_AppCompat_Light 0x7f16005d
int style Base_V26_Widget_AppCompat_Toolbar 0x7f16005e
int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x7f16005f
int style Base_V7_Theme_AppCompat 0x7f160060
int style Base_V7_Theme_AppCompat_Dialog 0x7f160061
int style Base_V7_Theme_AppCompat_Light 0x7f160062
int style Base_V7_Theme_AppCompat_Light_Dialog 0x7f160063
int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x7f160064
int style Base_V7_Widget_AppCompat_EditText 0x7f160065
int style Base_V7_Widget_AppCompat_Toolbar 0x7f160066
int style Base_Widget_AppCompat_ActionBar 0x7f160067
int style Base_Widget_AppCompat_ActionBar_Solid 0x7f160068
int style Base_Widget_AppCompat_ActionBar_TabBar 0x7f160069
int style Base_Widget_AppCompat_ActionBar_TabText 0x7f16006a
int style Base_Widget_AppCompat_ActionBar_TabView 0x7f16006b
int style Base_Widget_AppCompat_ActionButton 0x7f16006c
int style Base_Widget_AppCompat_ActionButton_CloseMode 0x7f16006d
int style Base_Widget_AppCompat_ActionButton_Overflow 0x7f16006e
int style Base_Widget_AppCompat_ActionMode 0x7f16006f
int style Base_Widget_AppCompat_ActivityChooserView 0x7f160070
int style Base_Widget_AppCompat_AutoCompleteTextView 0x7f160071
int style Base_Widget_AppCompat_Button 0x7f160072
int style Base_Widget_AppCompat_ButtonBar 0x7f160073
int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x7f160074
int style Base_Widget_AppCompat_Button_Borderless 0x7f160075
int style Base_Widget_AppCompat_Button_Borderless_Colored 0x7f160076
int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f160077
int style Base_Widget_AppCompat_Button_Colored 0x7f160078
int style Base_Widget_AppCompat_Button_Small 0x7f160079
int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x7f16007a
int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x7f16007b
int style Base_Widget_AppCompat_CompoundButton_Switch 0x7f16007c
int style Base_Widget_AppCompat_DrawerArrowToggle 0x7f16007d
int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x7f16007e
int style Base_Widget_AppCompat_DropDownItem_Spinner 0x7f16007f
int style Base_Widget_AppCompat_EditText 0x7f160080
int style Base_Widget_AppCompat_ImageButton 0x7f160081
int style Base_Widget_AppCompat_Light_ActionBar 0x7f160082
int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x7f160083
int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x7f160084
int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x7f160085
int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f160086
int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x7f160087
int style Base_Widget_AppCompat_Light_PopupMenu 0x7f160088
int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x7f160089
int style Base_Widget_AppCompat_ListMenuView 0x7f16008a
int style Base_Widget_AppCompat_ListPopupWindow 0x7f16008b
int style Base_Widget_AppCompat_ListView 0x7f16008c
int style Base_Widget_AppCompat_ListView_DropDown 0x7f16008d
int style Base_Widget_AppCompat_ListView_Menu 0x7f16008e
int style Base_Widget_AppCompat_PopupMenu 0x7f16008f
int style Base_Widget_AppCompat_PopupMenu_Overflow 0x7f160090
int style Base_Widget_AppCompat_PopupWindow 0x7f160091
int style Base_Widget_AppCompat_ProgressBar 0x7f160092
int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x7f160093
int style Base_Widget_AppCompat_RatingBar 0x7f160094
int style Base_Widget_AppCompat_RatingBar_Indicator 0x7f160095
int style Base_Widget_AppCompat_RatingBar_Small 0x7f160096
int style Base_Widget_AppCompat_SearchView 0x7f160097
int style Base_Widget_AppCompat_SearchView_ActionBar 0x7f160098
int style Base_Widget_AppCompat_SeekBar 0x7f160099
int style Base_Widget_AppCompat_SeekBar_Discrete 0x7f16009a
int style Base_Widget_AppCompat_Spinner 0x7f16009b
int style Base_Widget_AppCompat_Spinner_Underlined 0x7f16009c
int style Base_Widget_AppCompat_TextView_SpinnerItem 0x7f16009d
int style Base_Widget_AppCompat_Toolbar 0x7f16009e
int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x7f16009f
int style CalendarDatePickerDialog 0x7f1600a0
int style CalendarDatePickerStyle 0x7f1600a1
int style ClockTimePickerDialog 0x7f1600a2
int style ClockTimePickerStyle 0x7f1600a3
int style DialogAnimationFade 0x7f1600a4
int style DialogAnimationSlide 0x7f1600a5
int style Platform_AppCompat 0x7f1600a6
int style Platform_AppCompat_Light 0x7f1600a7
int style Platform_ThemeOverlay_AppCompat 0x7f1600a8
int style Platform_ThemeOverlay_AppCompat_Dark 0x7f1600a9
int style Platform_ThemeOverlay_AppCompat_Light 0x7f1600aa
int style Platform_V21_AppCompat 0x7f1600ab
int style Platform_V21_AppCompat_Light 0x7f1600ac
int style Platform_V25_AppCompat 0x7f1600ad
int style Platform_V25_AppCompat_Light 0x7f1600ae
int style Platform_Widget_AppCompat_Spinner 0x7f1600af
int style RtlOverlay_DialogWindowTitle_AppCompat 0x7f1600b0
int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x7f1600b1
int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x7f1600b2
int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x7f1600b3
int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x7f1600b4
int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x7f1600b5
int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x7f1600b6
int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x7f1600b7
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x7f1600b8
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x7f1600b9
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x7f1600ba
int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x7f1600bb
int style RtlUnderlay_Widget_AppCompat_ActionButton 0x7f1600bc
int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x7f1600bd
int style SpinnerDatePickerDialog 0x7f1600be
int style SpinnerDatePickerStyle 0x7f1600bf
int style SpinnerTimePickerDialog 0x7f1600c0
int style SpinnerTimePickerStyle 0x7f1600c1
int style TextAppearance_AppCompat 0x7f1600c2
int style TextAppearance_AppCompat_Body1 0x7f1600c3
int style TextAppearance_AppCompat_Body2 0x7f1600c4
int style TextAppearance_AppCompat_Button 0x7f1600c5
int style TextAppearance_AppCompat_Caption 0x7f1600c6
int style TextAppearance_AppCompat_Display1 0x7f1600c7
int style TextAppearance_AppCompat_Display2 0x7f1600c8
int style TextAppearance_AppCompat_Display3 0x7f1600c9
int style TextAppearance_AppCompat_Display4 0x7f1600ca
int style TextAppearance_AppCompat_Headline 0x7f1600cb
int style TextAppearance_AppCompat_Inverse 0x7f1600cc
int style TextAppearance_AppCompat_Large 0x7f1600cd
int style TextAppearance_AppCompat_Large_Inverse 0x7f1600ce
int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f1600cf
int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f1600d0
int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f1600d1
int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f1600d2
int style TextAppearance_AppCompat_Medium 0x7f1600d3
int style TextAppearance_AppCompat_Medium_Inverse 0x7f1600d4
int style TextAppearance_AppCompat_Menu 0x7f1600d5
int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f1600d6
int style TextAppearance_AppCompat_SearchResult_Title 0x7f1600d7
int style TextAppearance_AppCompat_Small 0x7f1600d8
int style TextAppearance_AppCompat_Small_Inverse 0x7f1600d9
int style TextAppearance_AppCompat_Subhead 0x7f1600da
int style TextAppearance_AppCompat_Subhead_Inverse 0x7f1600db
int style TextAppearance_AppCompat_Title 0x7f1600dc
int style TextAppearance_AppCompat_Title_Inverse 0x7f1600dd
int style TextAppearance_AppCompat_Tooltip 0x7f1600de
int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f1600df
int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f1600e0
int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f1600e1
int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f1600e2
int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f1600e3
int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f1600e4
int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f1600e5
int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f1600e6
int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f1600e7
int style TextAppearance_AppCompat_Widget_Button 0x7f1600e8
int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f1600e9
int style TextAppearance_AppCompat_Widget_Button_Colored 0x7f1600ea
int style TextAppearance_AppCompat_Widget_Button_Inverse 0x7f1600eb
int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f1600ec
int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f1600ed
int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f1600ee
int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f1600ef
int style TextAppearance_AppCompat_Widget_Switch 0x7f1600f0
int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f1600f1
int style TextAppearance_Compat_Notification 0x7f1600f2
int style TextAppearance_Compat_Notification_Info 0x7f1600f3
int style TextAppearance_Compat_Notification_Line2 0x7f1600f4
int style TextAppearance_Compat_Notification_Time 0x7f1600f5
int style TextAppearance_Compat_Notification_Title 0x7f1600f6
int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f1600f7
int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f1600f8
int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f1600f9
int style Theme 0x7f1600fa
int style ThemeOverlay_AppCompat 0x7f1600fb
int style ThemeOverlay_AppCompat_ActionBar 0x7f1600fc
int style ThemeOverlay_AppCompat_Dark 0x7f1600fd
int style ThemeOverlay_AppCompat_Dark_ActionBar 0x7f1600fe
int style ThemeOverlay_AppCompat_Dialog 0x7f1600ff
int style ThemeOverlay_AppCompat_Dialog_Alert 0x7f160100
int style ThemeOverlay_AppCompat_Light 0x7f160101
int style Theme_AppCompat 0x7f160102
int style Theme_AppCompat_CompactMenu 0x7f160103
int style Theme_AppCompat_DayNight 0x7f160104
int style Theme_AppCompat_DayNight_DarkActionBar 0x7f160105
int style Theme_AppCompat_DayNight_Dialog 0x7f160106
int style Theme_AppCompat_DayNight_DialogWhenLarge 0x7f160107
int style Theme_AppCompat_DayNight_Dialog_Alert 0x7f160108
int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x7f160109
int style Theme_AppCompat_DayNight_NoActionBar 0x7f16010a
int style Theme_AppCompat_Dialog 0x7f16010b
int style Theme_AppCompat_DialogWhenLarge 0x7f16010c
int style Theme_AppCompat_Dialog_Alert 0x7f16010d
int style Theme_AppCompat_Dialog_MinWidth 0x7f16010e
int style Theme_AppCompat_Light 0x7f16010f
int style Theme_AppCompat_Light_DarkActionBar 0x7f160110
int style Theme_AppCompat_Light_Dialog 0x7f160111
int style Theme_AppCompat_Light_DialogWhenLarge 0x7f160112
int style Theme_AppCompat_Light_Dialog_Alert 0x7f160113
int style Theme_AppCompat_Light_Dialog_MinWidth 0x7f160114
int style Theme_AppCompat_Light_NoActionBar 0x7f160115
int style Theme_AppCompat_NoActionBar 0x7f160116
int style Theme_Catalyst 0x7f160117
int style Theme_Catalyst_RedBox 0x7f160118
int style Theme_FullScreenDialog 0x7f160119
int style Theme_FullScreenDialogAnimatedFade 0x7f16011a
int style Theme_FullScreenDialogAnimatedSlide 0x7f16011b
int style Theme_ReactNative_AppCompat_Light 0x7f16011c
int style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen 0x7f16011d
int style Widget_AppCompat_ActionBar 0x7f16011e
int style Widget_AppCompat_ActionBar_Solid 0x7f16011f
int style Widget_AppCompat_ActionBar_TabBar 0x7f160120
int style Widget_AppCompat_ActionBar_TabText 0x7f160121
int style Widget_AppCompat_ActionBar_TabView 0x7f160122
int style Widget_AppCompat_ActionButton 0x7f160123
int style Widget_AppCompat_ActionButton_CloseMode 0x7f160124
int style Widget_AppCompat_ActionButton_Overflow 0x7f160125
int style Widget_AppCompat_ActionMode 0x7f160126
int style Widget_AppCompat_ActivityChooserView 0x7f160127
int style Widget_AppCompat_AutoCompleteTextView 0x7f160128
int style Widget_AppCompat_Button 0x7f160129
int style Widget_AppCompat_ButtonBar 0x7f16012a
int style Widget_AppCompat_ButtonBar_AlertDialog 0x7f16012b
int style Widget_AppCompat_Button_Borderless 0x7f16012c
int style Widget_AppCompat_Button_Borderless_Colored 0x7f16012d
int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f16012e
int style Widget_AppCompat_Button_Colored 0x7f16012f
int style Widget_AppCompat_Button_Small 0x7f160130
int style Widget_AppCompat_CompoundButton_CheckBox 0x7f160131
int style Widget_AppCompat_CompoundButton_RadioButton 0x7f160132
int style Widget_AppCompat_CompoundButton_Switch 0x7f160133
int style Widget_AppCompat_DrawerArrowToggle 0x7f160134
int style Widget_AppCompat_DropDownItem_Spinner 0x7f160135
int style Widget_AppCompat_EditText 0x7f160136
int style Widget_AppCompat_ImageButton 0x7f160137
int style Widget_AppCompat_Light_ActionBar 0x7f160138
int style Widget_AppCompat_Light_ActionBar_Solid 0x7f160139
int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f16013a
int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f16013b
int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f16013c
int style Widget_AppCompat_Light_ActionBar_TabText 0x7f16013d
int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f16013e
int style Widget_AppCompat_Light_ActionBar_TabView 0x7f16013f
int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f160140
int style Widget_AppCompat_Light_ActionButton 0x7f160141
int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f160142
int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f160143
int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f160144
int style Widget_AppCompat_Light_ActivityChooserView 0x7f160145
int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f160146
int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f160147
int style Widget_AppCompat_Light_ListPopupWindow 0x7f160148
int style Widget_AppCompat_Light_ListView_DropDown 0x7f160149
int style Widget_AppCompat_Light_PopupMenu 0x7f16014a
int style Widget_AppCompat_Light_PopupMenu_Overflow 0x7f16014b
int style Widget_AppCompat_Light_SearchView 0x7f16014c
int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f16014d
int style Widget_AppCompat_ListMenuView 0x7f16014e
int style Widget_AppCompat_ListPopupWindow 0x7f16014f
int style Widget_AppCompat_ListView 0x7f160150
int style Widget_AppCompat_ListView_DropDown 0x7f160151
int style Widget_AppCompat_ListView_Menu 0x7f160152
int style Widget_AppCompat_PopupMenu 0x7f160153
int style Widget_AppCompat_PopupMenu_Overflow 0x7f160154
int style Widget_AppCompat_PopupWindow 0x7f160155
int style Widget_AppCompat_ProgressBar 0x7f160156
int style Widget_AppCompat_ProgressBar_Horizontal 0x7f160157
int style Widget_AppCompat_RatingBar 0x7f160158
int style Widget_AppCompat_RatingBar_Indicator 0x7f160159
int style Widget_AppCompat_RatingBar_Small 0x7f16015a
int style Widget_AppCompat_SearchView 0x7f16015b
int style Widget_AppCompat_SearchView_ActionBar 0x7f16015c
int style Widget_AppCompat_SeekBar 0x7f16015d
int style Widget_AppCompat_SeekBar_Discrete 0x7f16015e
int style Widget_AppCompat_Spinner 0x7f16015f
int style Widget_AppCompat_Spinner_DropDown 0x7f160160
int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f160161
int style Widget_AppCompat_Spinner_Underlined 0x7f160162
int style Widget_AppCompat_TextView_SpinnerItem 0x7f160163
int style Widget_AppCompat_Toolbar 0x7f160164
int style Widget_AppCompat_Toolbar_Button_Navigation 0x7f160165
int style Widget_Compat_NotificationActionContainer 0x7f160166
int style Widget_Compat_NotificationActionText 0x7f160167
int style Widget_Support_CoordinatorLayout 0x7f160168
int style redboxButton 0x7f160169
int[] styleable ActionBar { 0x7f040035, 0x7f040037, 0x7f040038, 0x7f04005c, 0x7f04005d, 0x7f04005e, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f040064, 0x7f040068, 0x7f040069, 0x7f040074, 0x7f040085, 0x7f040086, 0x7f040087, 0x7f040088, 0x7f040089, 0x7f04008e, 0x7f040091, 0x7f0400a5, 0x7f0400ac, 0x7f0400ba, 0x7f0400c1, 0x7f0400c2, 0x7f0400ed, 0x7f0400f0, 0x7f04010b, 0x7f040114 }
int styleable ActionBar_background 0
int styleable ActionBar_backgroundSplit 1
int styleable ActionBar_backgroundStacked 2
int styleable ActionBar_contentInsetEnd 3
int styleable ActionBar_contentInsetEndWithActions 4
int styleable ActionBar_contentInsetLeft 5
int styleable ActionBar_contentInsetRight 6
int styleable ActionBar_contentInsetStart 7
int styleable ActionBar_contentInsetStartWithNavigation 8
int styleable ActionBar_customNavigationLayout 9
int styleable ActionBar_displayOptions 10
int styleable ActionBar_divider 11
int styleable ActionBar_elevation 12
int styleable ActionBar_height 13
int styleable ActionBar_hideOnContentScroll 14
int styleable ActionBar_homeAsUpIndicator 15
int styleable ActionBar_homeLayout 16
int styleable ActionBar_icon 17
int styleable ActionBar_indeterminateProgressStyle 18
int styleable ActionBar_itemPadding 19
int styleable ActionBar_logo 20
int styleable ActionBar_navigationMode 21
int styleable ActionBar_popupTheme 22
int styleable ActionBar_progressBarPadding 23
int styleable ActionBar_progressBarStyle 24
int styleable ActionBar_subtitle 25
int styleable ActionBar_subtitleTextStyle 26
int styleable ActionBar_title 27
int styleable ActionBar_titleTextStyle 28
int[] styleable ActionBarLayout { 0x010100b3 }
int styleable ActionBarLayout_android_layout_gravity 0
int[] styleable ActionMenuItemView { 0x0101013f }
int styleable ActionMenuItemView_android_minWidth 0
int[] styleable ActionMode { 0x7f040035, 0x7f040037, 0x7f04004c, 0x7f040085, 0x7f0400f0, 0x7f040114 }
int styleable ActionMode_background 0
int styleable ActionMode_backgroundSplit 1
int styleable ActionMode_closeItemLayout 2
int styleable ActionMode_height 3
int styleable ActionMode_subtitleTextStyle 4
int styleable ActionMode_titleTextStyle 5
int[] styleable ActivityChooserView { 0x7f040075, 0x7f04008f }
int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0
int styleable ActivityChooserView_initialActivityCount 1
int[] styleable AlertDialog { 0x010100f2, 0x7f040043, 0x7f040044, 0x7f04009c, 0x7f04009d, 0x7f0400a9, 0x7f0400e2, 0x7f0400e3 }
int styleable AlertDialog_android_layout 0
int styleable AlertDialog_buttonIconDimen 1
int styleable AlertDialog_buttonPanelSideLayout 2
int styleable AlertDialog_listItemLayout 3
int styleable AlertDialog_listLayout 4
int styleable AlertDialog_multiChoiceItemLayout 5
int styleable AlertDialog_showTitle 6
int styleable AlertDialog_singleChoiceItemLayout 7
int[] styleable AppCompatImageView { 0x01010119, 0x7f0400e8, 0x7f040109, 0x7f04010a }
int styleable AppCompatImageView_android_src 0
int styleable AppCompatImageView_srcCompat 1
int styleable AppCompatImageView_tint 2
int styleable AppCompatImageView_tintMode 3
int[] styleable AppCompatSeekBar { 0x01010142, 0x7f040106, 0x7f040107, 0x7f040108 }
int styleable AppCompatSeekBar_android_thumb 0
int styleable AppCompatSeekBar_tickMark 1
int styleable AppCompatSeekBar_tickMarkTint 2
int styleable AppCompatSeekBar_tickMarkTintMode 3
int[] styleable AppCompatTextHelper { 0x0101016e, 0x01010393, 0x0101016f, 0x01010170, 0x01010392, 0x0101016d, 0x01010034 }
int styleable AppCompatTextHelper_android_drawableBottom 0
int styleable AppCompatTextHelper_android_drawableEnd 1
int styleable AppCompatTextHelper_android_drawableLeft 2
int styleable AppCompatTextHelper_android_drawableRight 3
int styleable AppCompatTextHelper_android_drawableStart 4
int styleable AppCompatTextHelper_android_drawableTop 5
int styleable AppCompatTextHelper_android_textAppearance 6
int[] styleable AppCompatTextView { 0x01010034, 0x7f040030, 0x7f040031, 0x7f040032, 0x7f040033, 0x7f040034, 0x7f04007a, 0x7f0400f6 }
int styleable AppCompatTextView_android_textAppearance 0
int styleable AppCompatTextView_autoSizeMaxTextSize 1
int styleable AppCompatTextView_autoSizeMinTextSize 2
int styleable AppCompatTextView_autoSizePresetSizes 3
int styleable AppCompatTextView_autoSizeStepGranularity 4
int styleable AppCompatTextView_autoSizeTextType 5
int styleable AppCompatTextView_fontFamily 6
int styleable AppCompatTextView_textAllCaps 7
int[] styleable AppCompatTheme { 0x7f040001, 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000f, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040022, 0x7f040026, 0x7f040027, 0x7f040028, 0x7f040029, 0x010100ae, 0x01010057, 0x7f04002f, 0x7f04003c, 0x7f04003d, 0x7f04003e, 0x7f04003f, 0x7f040040, 0x7f040041, 0x7f040045, 0x7f040046, 0x7f040049, 0x7f04004a, 0x7f040050, 0x7f040051, 0x7f040052, 0x7f040053, 0x7f040054, 0x7f040055, 0x7f040056, 0x7f040057, 0x7f040058, 0x7f040059, 0x7f040062, 0x7f040066, 0x7f040067, 0x7f04006a, 0x7f04006c, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040087, 0x7f04008d, 0x7f04009a, 0x7f04009b, 0x7f04009e, 0x7f04009f, 0x7f0400a0, 0x7f0400a1, 0x7f0400a2, 0x7f0400a3, 0x7f0400a4, 0x7f0400b4, 0x7f0400b5, 0x7f0400b6, 0x7f0400b9, 0x7f0400bb, 0x7f0400c5, 0x7f0400c6, 0x7f0400c7, 0x7f0400c8, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400e5, 0x7f0400e6, 0x7f0400f4, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040115, 0x7f040116, 0x7f040117, 0x7f040118, 0x7f04011e, 0x7f040120, 0x7f040121, 0x7f040122, 0x7f040123, 0x7f040124, 0x7f040125, 0x7f040126, 0x7f040127, 0x7f040128, 0x7f040129 }
int styleable AppCompatTheme_actionBarDivider 0
int styleable AppCompatTheme_actionBarItemBackground 1
int styleable AppCompatTheme_actionBarPopupTheme 2
int styleable AppCompatTheme_actionBarSize 3
int styleable AppCompatTheme_actionBarSplitStyle 4
int styleable AppCompatTheme_actionBarStyle 5
int styleable AppCompatTheme_actionBarTabBarStyle 6
int styleable AppCompatTheme_actionBarTabStyle 7
int styleable AppCompatTheme_actionBarTabTextStyle 8
int styleable AppCompatTheme_actionBarTheme 9
int styleable AppCompatTheme_actionBarWidgetTheme 10
int styleable AppCompatTheme_actionButtonStyle 11
int styleable AppCompatTheme_actionDropDownStyle 12
int styleable AppCompatTheme_actionMenuTextAppearance 13
int styleable AppCompatTheme_actionMenuTextColor 14
int styleable AppCompatTheme_actionModeBackground 15
int styleable AppCompatTheme_actionModeCloseButtonStyle 16
int styleable AppCompatTheme_actionModeCloseDrawable 17
int styleable AppCompatTheme_actionModeCopyDrawable 18
int styleable AppCompatTheme_actionModeCutDrawable 19
int styleable AppCompatTheme_actionModeFindDrawable 20
int styleable AppCompatTheme_actionModePasteDrawable 21
int styleable AppCompatTheme_actionModePopupWindowStyle 22
int styleable AppCompatTheme_actionModeSelectAllDrawable 23
int styleable AppCompatTheme_actionModeShareDrawable 24
int styleable AppCompatTheme_actionModeSplitBackground 25
int styleable AppCompatTheme_actionModeStyle 26
int styleable AppCompatTheme_actionModeWebSearchDrawable 27
int styleable AppCompatTheme_actionOverflowButtonStyle 28
int styleable AppCompatTheme_actionOverflowMenuStyle 29
int styleable AppCompatTheme_activityChooserViewStyle 30
int styleable AppCompatTheme_alertDialogButtonGroupStyle 31
int styleable AppCompatTheme_alertDialogCenterButtons 32
int styleable AppCompatTheme_alertDialogStyle 33
int styleable AppCompatTheme_alertDialogTheme 34
int styleable AppCompatTheme_android_windowAnimationStyle 35
int styleable AppCompatTheme_android_windowIsFloating 36
int styleable AppCompatTheme_autoCompleteTextViewStyle 37
int styleable AppCompatTheme_borderlessButtonStyle 38
int styleable AppCompatTheme_buttonBarButtonStyle 39
int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40
int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41
int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42
int styleable AppCompatTheme_buttonBarStyle 43
int styleable AppCompatTheme_buttonStyle 44
int styleable AppCompatTheme_buttonStyleSmall 45
int styleable AppCompatTheme_checkboxStyle 46
int styleable AppCompatTheme_checkedTextViewStyle 47
int styleable AppCompatTheme_colorAccent 48
int styleable AppCompatTheme_colorBackgroundFloating 49
int styleable AppCompatTheme_colorButtonNormal 50
int styleable AppCompatTheme_colorControlActivated 51
int styleable AppCompatTheme_colorControlHighlight 52
int styleable AppCompatTheme_colorControlNormal 53
int styleable AppCompatTheme_colorError 54
int styleable AppCompatTheme_colorPrimary 55
int styleable AppCompatTheme_colorPrimaryDark 56
int styleable AppCompatTheme_colorSwitchThumbNormal 57
int styleable AppCompatTheme_controlBackground 58
int styleable AppCompatTheme_dialogPreferredPadding 59
int styleable AppCompatTheme_dialogTheme 60
int styleable AppCompatTheme_dividerHorizontal 61
int styleable AppCompatTheme_dividerVertical 62
int styleable AppCompatTheme_dropDownListViewStyle 63
int styleable AppCompatTheme_dropdownListPreferredItemHeight 64
int styleable AppCompatTheme_editTextBackground 65
int styleable AppCompatTheme_editTextColor 66
int styleable AppCompatTheme_editTextStyle 67
int styleable AppCompatTheme_homeAsUpIndicator 68
int styleable AppCompatTheme_imageButtonStyle 69
int styleable AppCompatTheme_listChoiceBackgroundIndicator 70
int styleable AppCompatTheme_listDividerAlertDialog 71
int styleable AppCompatTheme_listMenuViewStyle 72
int styleable AppCompatTheme_listPopupWindowStyle 73
int styleable AppCompatTheme_listPreferredItemHeight 74
int styleable AppCompatTheme_listPreferredItemHeightLarge 75
int styleable AppCompatTheme_listPreferredItemHeightSmall 76
int styleable AppCompatTheme_listPreferredItemPaddingLeft 77
int styleable AppCompatTheme_listPreferredItemPaddingRight 78
int styleable AppCompatTheme_panelBackground 79
int styleable AppCompatTheme_panelMenuListTheme 80
int styleable AppCompatTheme_panelMenuListWidth 81
int styleable AppCompatTheme_popupMenuStyle 82
int styleable AppCompatTheme_popupWindowStyle 83
int styleable AppCompatTheme_radioButtonStyle 84
int styleable AppCompatTheme_ratingBarStyle 85
int styleable AppCompatTheme_ratingBarStyleIndicator 86
int styleable AppCompatTheme_ratingBarStyleSmall 87
int styleable AppCompatTheme_searchViewStyle 88
int styleable AppCompatTheme_seekBarStyle 89
int styleable AppCompatTheme_selectableItemBackground 90
int styleable AppCompatTheme_selectableItemBackgroundBorderless 91
int styleable AppCompatTheme_spinnerDropDownItemStyle 92
int styleable AppCompatTheme_spinnerStyle 93
int styleable AppCompatTheme_switchStyle 94
int styleable AppCompatTheme_textAppearanceLargePopupMenu 95
int styleable AppCompatTheme_textAppearanceListItem 96
int styleable AppCompatTheme_textAppearanceListItemSecondary 97
int styleable AppCompatTheme_textAppearanceListItemSmall 98
int styleable AppCompatTheme_textAppearancePopupMenuHeader 99
int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 100
int styleable AppCompatTheme_textAppearanceSearchResultTitle 101
int styleable AppCompatTheme_textAppearanceSmallPopupMenu 102
int styleable AppCompatTheme_textColorAlertDialogListItem 103
int styleable AppCompatTheme_textColorSearchUrl 104
int styleable AppCompatTheme_toolbarNavigationButtonStyle 105
int styleable AppCompatTheme_toolbarStyle 106
int styleable AppCompatTheme_tooltipForegroundColor 107
int styleable AppCompatTheme_tooltipFrameBackground 108
int styleable AppCompatTheme_viewInflaterClass 109
int styleable AppCompatTheme_windowActionBar 110
int styleable AppCompatTheme_windowActionBarOverlay 111
int styleable AppCompatTheme_windowActionModeOverlay 112
int styleable AppCompatTheme_windowFixedHeightMajor 113
int styleable AppCompatTheme_windowFixedHeightMinor 114
int styleable AppCompatTheme_windowFixedWidthMajor 115
int styleable AppCompatTheme_windowFixedWidthMinor 116
int styleable AppCompatTheme_windowMinWidthMajor 117
int styleable AppCompatTheme_windowMinWidthMinor 118
int styleable AppCompatTheme_windowNoTitle 119
int[] styleable ButtonBarLayout { 0x7f04002a }
int styleable ButtonBarLayout_allowStacking 0
int[] styleable ColorStateListItem { 0x7f04002b, 0x0101031f, 0x010101a5 }
int styleable ColorStateListItem_alpha 0
int styleable ColorStateListItem_android_alpha 1
int styleable ColorStateListItem_android_color 2
int[] styleable CompoundButton { 0x01010107, 0x7f040047, 0x7f040048 }
int styleable CompoundButton_android_button 0
int styleable CompoundButton_buttonTint 1
int styleable CompoundButton_buttonTintMode 2
int[] styleable CoordinatorLayout { 0x7f040092, 0x7f0400ea }
int styleable CoordinatorLayout_keylines 0
int styleable CoordinatorLayout_statusBarBackground 1
int[] styleable CoordinatorLayout_Layout { 0x010100b3, 0x7f040094, 0x7f040095, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099 }
int styleable CoordinatorLayout_Layout_android_layout_gravity 0
int styleable CoordinatorLayout_Layout_layout_anchor 1
int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
int styleable CoordinatorLayout_Layout_layout_behavior 3
int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
int styleable CoordinatorLayout_Layout_layout_insetEdge 5
int styleable CoordinatorLayout_Layout_layout_keyline 6
int[] styleable DrawerArrowToggle { 0x7f04002d, 0x7f04002e, 0x7f04003b, 0x7f04004f, 0x7f04006d, 0x7f040083, 0x7f0400e4, 0x7f040102 }
int styleable DrawerArrowToggle_arrowHeadLength 0
int styleable DrawerArrowToggle_arrowShaftLength 1
int styleable DrawerArrowToggle_barLength 2
int styleable DrawerArrowToggle_color 3
int styleable DrawerArrowToggle_drawableSize 4
int styleable DrawerArrowToggle_gapBetweenBars 5
int styleable DrawerArrowToggle_spinBars 6
int styleable DrawerArrowToggle_thickness 7
int[] styleable FontFamily { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080 }
int styleable FontFamily_fontProviderAuthority 0
int styleable FontFamily_fontProviderCerts 1
int styleable FontFamily_fontProviderFetchStrategy 2
int styleable FontFamily_fontProviderFetchTimeout 3
int styleable FontFamily_fontProviderPackage 4
int styleable FontFamily_fontProviderQuery 5
int[] styleable FontFamilyFont { 0x01010532, 0x0101053f, 0x01010533, 0x7f040079, 0x7f040081, 0x7f040082 }
int styleable FontFamilyFont_android_font 0
int styleable FontFamilyFont_android_fontStyle 1
int styleable FontFamilyFont_android_fontWeight 2
int styleable FontFamilyFont_font 3
int styleable FontFamilyFont_fontStyle 4
int styleable FontFamilyFont_fontWeight 5
int[] styleable GenericDraweeHierarchy { 0x7f040024, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d }
int styleable GenericDraweeHierarchy_actualImageScaleType 0
int styleable GenericDraweeHierarchy_backgroundImage 1
int styleable GenericDraweeHierarchy_fadeDuration 2
int styleable GenericDraweeHierarchy_failureImage 3
int styleable GenericDraweeHierarchy_failureImageScaleType 4
int styleable GenericDraweeHierarchy_overlayImage 5
int styleable GenericDraweeHierarchy_placeholderImage 6
int styleable GenericDraweeHierarchy_placeholderImageScaleType 7
int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8
int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9
int styleable GenericDraweeHierarchy_progressBarImage 10
int styleable GenericDraweeHierarchy_progressBarImageScaleType 11
int styleable GenericDraweeHierarchy_retryImage 12
int styleable GenericDraweeHierarchy_retryImageScaleType 13
int styleable GenericDraweeHierarchy_roundAsCircle 14
int styleable GenericDraweeHierarchy_roundBottomEnd 15
int styleable GenericDraweeHierarchy_roundBottomLeft 16
int styleable GenericDraweeHierarchy_roundBottomRight 17
int styleable GenericDraweeHierarchy_roundBottomStart 18
int styleable GenericDraweeHierarchy_roundTopEnd 19
int styleable GenericDraweeHierarchy_roundTopLeft 20
int styleable GenericDraweeHierarchy_roundTopRight 21
int styleable GenericDraweeHierarchy_roundTopStart 22
int styleable GenericDraweeHierarchy_roundWithOverlayColor 23
int styleable GenericDraweeHierarchy_roundedCornerRadius 24
int styleable GenericDraweeHierarchy_roundingBorderColor 25
int styleable GenericDraweeHierarchy_roundingBorderPadding 26
int styleable GenericDraweeHierarchy_roundingBorderWidth 27
int styleable GenericDraweeHierarchy_viewAspectRatio 28
int[] styleable LinearLayoutCompat { 0x01010126, 0x01010127, 0x010100af, 0x010100c4, 0x01010128, 0x7f040069, 0x7f04006b, 0x7f0400a8, 0x7f0400e0 }
int styleable LinearLayoutCompat_android_baselineAligned 0
int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1
int styleable LinearLayoutCompat_android_gravity 2
int styleable LinearLayoutCompat_android_orientation 3
int styleable LinearLayoutCompat_android_weightSum 4
int styleable LinearLayoutCompat_divider 5
int styleable LinearLayoutCompat_dividerPadding 6
int styleable LinearLayoutCompat_measureWithLargestChild 7
int styleable LinearLayoutCompat_showDividers 8
int[] styleable LinearLayoutCompat_Layout { 0x010100b3, 0x010100f5, 0x01010181, 0x010100f4 }
int styleable LinearLayoutCompat_Layout_android_layout_gravity 0
int styleable LinearLayoutCompat_Layout_android_layout_height 1
int styleable LinearLayoutCompat_Layout_android_layout_weight 2
int styleable LinearLayoutCompat_Layout_android_layout_width 3
int[] styleable ListPopupWindow { 0x010102ac, 0x010102ad }
int styleable ListPopupWindow_android_dropDownHorizontalOffset 0
int styleable ListPopupWindow_android_dropDownVerticalOffset 1
int[] styleable MenuGroup { 0x010101e0, 0x0101000e, 0x010100d0, 0x010101de, 0x010101df, 0x01010194 }
int styleable MenuGroup_android_checkableBehavior 0
int styleable MenuGroup_android_enabled 1
int styleable MenuGroup_android_id 2
int styleable MenuGroup_android_menuCategory 3
int styleable MenuGroup_android_orderInCategory 4
int styleable MenuGroup_android_visible 5
int[] styleable MenuItem { 0x7f04000e, 0x7f040020, 0x7f040021, 0x7f04002c, 0x010101e3, 0x010101e5, 0x01010106, 0x0101000e, 0x01010002, 0x010100d0, 0x010101de, 0x010101e4, 0x0101026f, 0x010101df, 0x010101e1, 0x010101e2, 0x01010194, 0x7f04005b, 0x7f04008a, 0x7f04008b, 0x7f0400ad, 0x7f0400df, 0x7f040119 }
int styleable MenuItem_actionLayout 0
int styleable MenuItem_actionProviderClass 1
int styleable MenuItem_actionViewClass 2
int styleable MenuItem_alphabeticModifiers 3
int styleable MenuItem_android_alphabeticShortcut 4
int styleable MenuItem_android_checkable 5
int styleable MenuItem_android_checked 6
int styleable MenuItem_android_enabled 7
int styleable MenuItem_android_icon 8
int styleable MenuItem_android_id 9
int styleable MenuItem_android_menuCategory 10
int styleable MenuItem_android_numericShortcut 11
int styleable MenuItem_android_onClick 12
int styleable MenuItem_android_orderInCategory 13
int styleable MenuItem_android_title 14
int styleable MenuItem_android_titleCondensed 15
int styleable MenuItem_android_visible 16
int styleable MenuItem_contentDescription 17
int styleable MenuItem_iconTint 18
int styleable MenuItem_iconTintMode 19
int styleable MenuItem_numericModifiers 20
int styleable MenuItem_showAsAction 21
int styleable MenuItem_tooltipText 22
int[] styleable MenuView { 0x0101012f, 0x0101012d, 0x01010130, 0x01010131, 0x0101012c, 0x0101012e, 0x010100ae, 0x7f0400bc, 0x7f0400eb }
int styleable MenuView_android_headerBackground 0
int styleable MenuView_android_horizontalDivider 1
int styleable MenuView_android_itemBackground 2
int styleable MenuView_android_itemIconDisabledAlpha 3
int styleable MenuView_android_itemTextAppearance 4
int styleable MenuView_android_verticalDivider 5
int styleable MenuView_android_windowAnimationStyle 6
int styleable MenuView_preserveIconSpacing 7
int styleable MenuView_subMenuArrow 8
int[] styleable PopupWindow { 0x010102c9, 0x01010176, 0x7f0400ae }
int styleable PopupWindow_android_popupAnimationStyle 0
int styleable PopupWindow_android_popupBackground 1
int styleable PopupWindow_overlapAnchor 2
int[] styleable PopupWindowBackgroundState { 0x7f0400e9 }
int styleable PopupWindowBackgroundState_state_above_anchor 0
int[] styleable RecycleListView { 0x7f0400b0, 0x7f0400b3 }
int styleable RecycleListView_paddingBottomNoButtons 0
int styleable RecycleListView_paddingTopNoTitle 1
int[] styleable SearchView { 0x010100da, 0x01010264, 0x01010220, 0x0101011f, 0x7f04004b, 0x7f04005a, 0x7f040065, 0x7f040084, 0x7f04008c, 0x7f040093, 0x7f0400c3, 0x7f0400c4, 0x7f0400d9, 0x7f0400da, 0x7f0400ec, 0x7f0400f1, 0x7f04011f }
int styleable SearchView_android_focusable 0
int styleable SearchView_android_imeOptions 1
int styleable SearchView_android_inputType 2
int styleable SearchView_android_maxWidth 3
int styleable SearchView_closeIcon 4
int styleable SearchView_commitIcon 5
int styleable SearchView_defaultQueryHint 6
int styleable SearchView_goIcon 7
int styleable SearchView_iconifiedByDefault 8
int styleable SearchView_layout 9
int styleable SearchView_queryBackground 10
int styleable SearchView_queryHint 11
int styleable SearchView_searchHintIcon 12
int styleable SearchView_searchIcon 13
int styleable SearchView_submitBackground 14
int styleable SearchView_suggestionRowLayout 15
int styleable SearchView_voiceIcon 16
int[] styleable SimpleDraweeView { 0x7f040023, 0x7f040024, 0x7f040025, 0x7f040036, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f0400af, 0x7f0400b7, 0x7f0400b8, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400cd, 0x7f0400ce, 0x7f0400cf, 0x7f0400d0, 0x7f0400d1, 0x7f0400d2, 0x7f0400d3, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400d7, 0x7f0400d8, 0x7f04011d }
int styleable SimpleDraweeView_actualImageResource 0
int styleable SimpleDraweeView_actualImageScaleType 1
int styleable SimpleDraweeView_actualImageUri 2
int styleable SimpleDraweeView_backgroundImage 3
int styleable SimpleDraweeView_fadeDuration 4
int styleable SimpleDraweeView_failureImage 5
int styleable SimpleDraweeView_failureImageScaleType 6
int styleable SimpleDraweeView_overlayImage 7
int styleable SimpleDraweeView_placeholderImage 8
int styleable SimpleDraweeView_placeholderImageScaleType 9
int styleable SimpleDraweeView_pressedStateOverlayImage 10
int styleable SimpleDraweeView_progressBarAutoRotateInterval 11
int styleable SimpleDraweeView_progressBarImage 12
int styleable SimpleDraweeView_progressBarImageScaleType 13
int styleable SimpleDraweeView_retryImage 14
int styleable SimpleDraweeView_retryImageScaleType 15
int styleable SimpleDraweeView_roundAsCircle 16
int styleable SimpleDraweeView_roundBottomEnd 17
int styleable SimpleDraweeView_roundBottomLeft 18
int styleable SimpleDraweeView_roundBottomRight 19
int styleable SimpleDraweeView_roundBottomStart 20
int styleable SimpleDraweeView_roundTopEnd 21
int styleable SimpleDraweeView_roundTopLeft 22
int styleable SimpleDraweeView_roundTopRight 23
int styleable SimpleDraweeView_roundTopStart 24
int styleable SimpleDraweeView_roundWithOverlayColor 25
int styleable SimpleDraweeView_roundedCornerRadius 26
int styleable SimpleDraweeView_roundingBorderColor 27
int styleable SimpleDraweeView_roundingBorderPadding 28
int styleable SimpleDraweeView_roundingBorderWidth 29
int styleable SimpleDraweeView_viewAspectRatio 30
int[] styleable Spinner { 0x01010262, 0x010100b2, 0x01010176, 0x0101017b, 0x7f0400ba }
int styleable Spinner_android_dropDownWidth 0
int styleable Spinner_android_entries 1
int styleable Spinner_android_popupBackground 2
int styleable Spinner_android_prompt 3
int styleable Spinner_popupTheme 4
int[] styleable SwitchCompat { 0x01010125, 0x01010124, 0x01010142, 0x7f0400e1, 0x7f0400e7, 0x7f0400f2, 0x7f0400f3, 0x7f0400f5, 0x7f040103, 0x7f040104, 0x7f040105, 0x7f04011a, 0x7f04011b, 0x7f04011c }
int styleable SwitchCompat_android_textOff 0
int styleable SwitchCompat_android_textOn 1
int styleable SwitchCompat_android_thumb 2
int styleable SwitchCompat_showText 3
int styleable SwitchCompat_splitTrack 4
int styleable SwitchCompat_switchMinWidth 5
int styleable SwitchCompat_switchPadding 6
int styleable SwitchCompat_switchTextAppearance 7
int styleable SwitchCompat_thumbTextPadding 8
int styleable SwitchCompat_thumbTint 9
int styleable SwitchCompat_thumbTintMode 10
int styleable SwitchCompat_track 11
int styleable SwitchCompat_trackTint 12
int styleable SwitchCompat_trackTintMode 13
int[] styleable TextAppearance { 0x010103ac, 0x01010161, 0x01010162, 0x01010163, 0x01010164, 0x01010098, 0x0101009a, 0x0101009b, 0x01010095, 0x01010097, 0x01010096, 0x7f04007a, 0x7f0400f6 }
int styleable TextAppearance_android_fontFamily 0
int styleable TextAppearance_android_shadowColor 1
int styleable TextAppearance_android_shadowDx 2
int styleable TextAppearance_android_shadowDy 3
int styleable TextAppearance_android_shadowRadius 4
int styleable TextAppearance_android_textColor 5
int styleable TextAppearance_android_textColorHint 6
int styleable TextAppearance_android_textColorLink 7
int styleable TextAppearance_android_textSize 8
int styleable TextAppearance_android_textStyle 9
int styleable TextAppearance_android_typeface 10
int styleable TextAppearance_fontFamily 11
int styleable TextAppearance_textAllCaps 12
int[] styleable Toolbar { 0x010100af, 0x01010140, 0x7f040042, 0x7f04004d, 0x7f04004e, 0x7f04005c, 0x7f04005d, 0x7f04005e, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f0400a5, 0x7f0400a6, 0x7f0400a7, 0x7f0400aa, 0x7f0400ab, 0x7f0400ba, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f04010b, 0x7f04010c, 0x7f04010d, 0x7f04010e, 0x7f04010f, 0x7f040110, 0x7f040111, 0x7f040112, 0x7f040113 }
int styleable Toolbar_android_gravity 0
int styleable Toolbar_android_minHeight 1
int styleable Toolbar_buttonGravity 2
int styleable Toolbar_collapseContentDescription 3
int styleable Toolbar_collapseIcon 4
int styleable Toolbar_contentInsetEnd 5
int styleable Toolbar_contentInsetEndWithActions 6
int styleable Toolbar_contentInsetLeft 7
int styleable Toolbar_contentInsetRight 8
int styleable Toolbar_contentInsetStart 9
int styleable Toolbar_contentInsetStartWithNavigation 10
int styleable Toolbar_logo 11
int styleable Toolbar_logoDescription 12
int styleable Toolbar_maxButtonHeight 13
int styleable Toolbar_navigationContentDescription 14
int styleable Toolbar_navigationIcon 15
int styleable Toolbar_popupTheme 16
int styleable Toolbar_subtitle 17
int styleable Toolbar_subtitleTextAppearance 18
int styleable Toolbar_subtitleTextColor 19
int styleable Toolbar_title 20
int styleable Toolbar_titleMargin 21
int styleable Toolbar_titleMarginBottom 22
int styleable Toolbar_titleMarginEnd 23
int styleable Toolbar_titleMarginStart 24
int styleable Toolbar_titleMarginTop 25
int styleable Toolbar_titleMargins 26
int styleable Toolbar_titleTextAppearance 27
int styleable Toolbar_titleTextColor 28
int[] styleable View { 0x010100da, 0x01010000, 0x7f0400b1, 0x7f0400b2, 0x7f040101 }
int styleable View_android_focusable 0
int styleable View_android_theme 1
int styleable View_paddingEnd 2
int styleable View_paddingStart 3
int styleable View_theme 4
int[] styleable ViewBackgroundHelper { 0x010100d4, 0x7f040039, 0x7f04003a }
int styleable ViewBackgroundHelper_android_background 0
int styleable ViewBackgroundHelper_backgroundTint 1
int styleable ViewBackgroundHelper_backgroundTintMode 2
int[] styleable ViewStubCompat { 0x010100d0, 0x010100f3, 0x010100f2 }
int styleable ViewStubCompat_android_id 0
int styleable ViewStubCompat_android_inflatedId 1
int styleable ViewStubCompat_android_layout 2
int xml preferences 0x7f190001
[{"name":"resources","index":0,"scopes":["PROJECT"],"types":["NATIVE_LIBS"],"format":"DIRECTORY","present":false}]
\ No newline at end of file
-- Merging decision tree log ---
manifest
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
package
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:70-116
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
android:versionName
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
android:versionCode
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:1-5:12
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
xmlns:android
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:1:11-69
uses-permission#android.permission.BLUETOOTH
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:2:5-68
android:name
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:2:22-65
uses-permission#android.permission.BLUETOOTH_ADMIN
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:3:5-74
android:name
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:3:22-71
uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:4:5-81
android:name
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml:4:22-78
uses-sdk
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml reason: use-sdk injection requested
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
android:targetSdkVersion
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
android:minSdkVersion
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
ADDED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
INJECTED from /Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml
## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Thu Nov 24 08:03:52 CET 2016
android.useDeprecatedNdk=true
#Fri Nov 09 15:41:47 ICT 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Sat Nov 10 20:28:04 ICT 2018
sdk.dir=/Users/nuttawutmalee/Library/Android/sdk
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":react-native-bluetooth-serial-next" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../example/android" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":react-native-bluetooth-serial-next" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/classes/test/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$" />
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/annotations" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/attr" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/extractedTypedefs" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/intermediate-jars" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/javaPrecompile" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/library_and_local_jars_jni" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/packaged-aidl" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/packaged-classes" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/packagedAssets" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/packaged_res" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/public_res" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/publish-proguard" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/build/tmp" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/aidl" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/assets" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/java" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/res" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/resources" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/rs" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTest/shaders" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/aidl" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/assets" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/java" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/res" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/resources" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/rs" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/androidTestDebug/shaders" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/aidl" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/assets" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/java" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/res" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/resources" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/rs" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/debug/shaders" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/aidl" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/assets" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/java" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/res" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/resources" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/rs" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/main/shaders" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/aidl" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/assets" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/java" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/res" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/resources" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/rs" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/test/shaders" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/aidl">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/aidl" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/assets">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/assets" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/java">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/java" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/res">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/res" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/resources">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/resources" type="java-test-resource" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/rs">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/rs" isTestSource="true" />
</content>
<content url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/shaders">
<sourceFolder url="file://$MODULE_DIR$/../example/node_modules/react-native-bluetooth-serial-next/android/src/testDebug/shaders" isTestSource="true" />
</content>
<orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:fbcore-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:drawee-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:fresco-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-okhttp3-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-compat-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.parse.bolts:bolts-tasks:1.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp-urlconnection:3.11.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: org.webkit:android-jsc-r174650" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:/Users/nuttawutmalee/p/react-native-bluetooth-serial-next/example/node_modules/react-native-bluetooth-serial-next/android/libs/btsdk.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-fragment-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:runtime-1.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.soloader:soloader-0.5.1" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.infer.annotation:infer-annotation:0.11.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.react:react-native-0.57.4" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-27.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core-1.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-base-1.10.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" />
</component>
</module>
\ No newline at end of file
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.nuttawutmalee.RCTBluetoothSerial">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
\ No newline at end of file
package com.nuttawutmalee.RCTBluetoothSerial;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
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.Build;
import android.util.Log;
import android.util.Base64;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.Promise;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import static com.nuttawutmalee.RCTBluetoothSerial.RCTBluetoothSerialPackage.TAG;
@SuppressWarnings("unused")
public class RCTBluetoothSerialModule extends ReactContextBaseJavaModule
implements ActivityEventListener, LifecycleEventListener {
// Debugging
private static final boolean D = true;
// Constants
private static final String DEFAULT_SERVICES = "DEFAULT_SERVICES";
// Event names
private static final String BT_ENABLED = "bluetoothEnabled";
private static final String BT_DISABLED = "bluetoothDisabled";
private static final String CONN_SUCCESS = "connectionSuccess";
private static final String CONN_FAILED = "connectionFailed";
private static final String CONN_LOST = "connectionLost";
private static final String DEVICE_READ = "read";
private static final String DATA_READ = "data";
private static final String ERROR = "error";
// Other stuff
private static final int REQUEST_ENABLE_BLUETOOTH = 1;
private static final int REQUEST_PAIR_DEVICE = 2;
private static final String FIRST_DEVICE = "firstDevice";
// Members
private BluetoothAdapter mBluetoothAdapter;
private RCTBluetoothSerialService mBluetoothService;
private ReactApplicationContext mReactContext;
// Promises
private Promise mEnabledPromise;
private Promise mDeviceDiscoveryPromise;
private Promise mPairDevicePromise;
private HashMap<String, Promise> mConnectedPromises;
private HashMap<String, StringBuffer> mBuffers;
private HashMap<String, String> mDelimiters;
public RCTBluetoothSerialModule(ReactApplicationContext reactContext) {
super(reactContext);
if (D)
Log.d(TAG, "Bluetooth module started");
mReactContext = reactContext;
if (mBluetoothAdapter == null) {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}
if (mBluetoothService == null) {
mBluetoothService = new RCTBluetoothSerialService(this);
}
if (mConnectedPromises == null) {
mConnectedPromises = new HashMap<>();
}
if (mBuffers == null) {
mBuffers = new HashMap<>();
}
if (mDelimiters == null) {
mDelimiters = new HashMap<>();
}
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
sendEvent(BT_ENABLED, null);
} else {
sendEvent(BT_DISABLED, null);
}
mReactContext.addActivityEventListener(this);
mReactContext.addLifecycleEventListener(this);
registerBluetoothStateReceiver();
}
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put(DEFAULT_SERVICES, Arguments.createArray());
return constants;
}
@Override
public String getName() {
return "RCTBluetoothSerial";
}
// @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (D)
Log.d(TAG, "On activity result request: " + requestCode + ", result: " + resultCode);
if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
if (resultCode == Activity.RESULT_OK) {
if (D)
Log.d(TAG, "User enabled Bluetooth");
if (mEnabledPromise != null) {
mEnabledPromise.resolve(true);
mEnabledPromise = null;
}
} else {
if (D)
Log.d(TAG, "User did not enable Bluetooth");
if (mEnabledPromise != null) {
mEnabledPromise.reject(new Exception("User did not enable Bluetooth"));
mEnabledPromise = null;
}
}
}
if (requestCode == REQUEST_PAIR_DEVICE) {
if (resultCode == Activity.RESULT_OK) {
if (D)
Log.d(TAG, "Pairing ok");
} else {
if (D)
Log.d(TAG, "Pairing failed");
}
}
}
// @Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
if (D)
Log.d(TAG, "On activity result request: " + requestCode + ", result: " + resultCode);
if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
if (resultCode == Activity.RESULT_OK) {
if (D)
Log.d(TAG, "User enabled Bluetooth");
if (mEnabledPromise != null) {
mEnabledPromise.resolve(true);
mEnabledPromise = null;
}
} else {
if (D)
Log.d(TAG, "User did not enable Bluetooth");
if (mEnabledPromise != null) {
mEnabledPromise.reject(new Exception("User did not enable Bluetooth"));
mEnabledPromise = null;
}
}
}
if (requestCode == REQUEST_PAIR_DEVICE) {
if (resultCode == Activity.RESULT_OK) {
if (D)
Log.d(TAG, "Pairing ok");
} else {
if (D)
Log.d(TAG, "Pairing failed");
}
}
}
// @Override
public void onNewIntent(Intent intent) {
if (D)
Log.d(TAG, "On new intent");
}
@Override
public void onHostResume() {
if (D)
Log.d(TAG, "Host resume");
}
@Override
public void onHostPause() {
if (D)
Log.d(TAG, "Host pause");
}
@Override
public void onHostDestroy() {
if (D)
Log.d(TAG, "Host destroy");
mBluetoothService.stopAll();
}
@Override
public void onCatalystInstanceDestroy() {
if (D)
Log.d(TAG, "Catalyst instance destroyed");
super.onCatalystInstanceDestroy();
mBluetoothService.stopAll();
}
@ReactMethod
public void requestEnable(Promise promise) {
if (mBluetoothAdapter != null) {
if (mBluetoothAdapter.isEnabled()) {
// If bluetooth is already enabled resolve promise immediately
promise.resolve(true);
} else {
// Start new intent if bluetooth is note enabled
Activity activity = getCurrentActivity();
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
if (activity != null) {
mEnabledPromise = promise;
activity.startActivityForResult(intent, REQUEST_ENABLE_BLUETOOTH);
} else {
Exception e = new Exception("Cannot start activity");
Log.e(TAG, "Cannot start activity", e);
promise.reject(e);
onError(e);
}
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void enable(Promise promise) {
if (mBluetoothAdapter != null) {
if (mBluetoothAdapter.isEnabled()) {
if (D)
Log.d(TAG, "Bluetooth enabled");
promise.resolve(true);
} else {
try {
mBluetoothAdapter.enable();
if (D)
Log.d(TAG, "Bluetooth enabled");
promise.resolve(true);
} catch (Exception e) {
Log.e(TAG, "Cannot enable bluetooth");
promise.reject(e);
onError(e);
}
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void disable(Promise promise) {
if (mBluetoothAdapter != null) {
if (!mBluetoothAdapter.isEnabled()) {
if (D)
Log.d(TAG, "Bluetooth disabled");
promise.resolve(true);
} else {
try {
mBluetoothAdapter.disable();
if (D)
Log.d(TAG, "Bluetooth disabled");
promise.resolve(true);
} catch (Exception e) {
Log.e(TAG, "Cannot disable bluetooth");
promise.reject(e);
onError(e);
}
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void isEnabled(Promise promise) {
if (mBluetoothAdapter != null) {
promise.resolve(mBluetoothAdapter.isEnabled());
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void list(Promise promise) {
if (D)
Log.d(TAG, "List paired called");
if (mBluetoothAdapter != null) {
WritableArray deviceList = Arguments.createArray();
Set<BluetoothDevice> bondedDevices = mBluetoothAdapter.getBondedDevices();
for (BluetoothDevice rawDevice : bondedDevices) {
WritableMap device = deviceToWritableMap(rawDevice);
deviceList.pushMap(device);
}
promise.resolve(deviceList);
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void listUnpaired(Promise promise) {
if (D)
Log.d(TAG, "Discover unpaired called");
if (mBluetoothAdapter != null) {
mDeviceDiscoveryPromise = promise;
registerBluetoothDeviceDiscoveryReceiver();
mBluetoothAdapter.startDiscovery();
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void cancelDiscovery(Promise promise) {
if (D)
Log.d(TAG, "Cancel discovery called");
if (mBluetoothAdapter != null) {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}
promise.resolve(true);
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void pairDevice(String id, Promise promise) {
if (D)
Log.d(TAG, "Pair device: " + id);
if (mBluetoothAdapter != null) {
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(id);
if (device != null) {
mPairDevicePromise = promise;
pairDevice(device);
} else {
promise.reject(new Exception("Could not pair device " + id));
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void unpairDevice(String id, Promise promise) {
if (D)
Log.d(TAG, "Unpair device: " + id);
if (mBluetoothAdapter != null) {
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(id);
if (device != null) {
mPairDevicePromise = promise;
unpairDevice(device);
} else {
promise.reject(new Exception("Could not unpair device " + id));
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void connect(String id, Promise promise) {
if (D)
Log.d(TAG, "connect");
if (mBluetoothAdapter != null) {
BluetoothDevice rawDevice = mBluetoothAdapter.getRemoteDevice(id);
if (rawDevice != null) {
mConnectedPromises.put(id, promise);
mBluetoothService.connect(rawDevice);
} else {
mConnectedPromises.put(FIRST_DEVICE, promise);
registerFirstAvailableBluetoothDeviceDiscoveryReceiver();
}
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void disconnect(@Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (D)
Log.d(TAG, "Disconnect from device id " + id);
if (id != null) {
mBluetoothService.stop(id);
}
promise.resolve(true);
}
@ReactMethod
public void disconnectAll(Promise promise) {
mBluetoothService.stopAll();
promise.resolve(true);
}
@ReactMethod
public void isConnected(@Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (id == null) {
promise.resolve(false);
} else {
promise.resolve(mBluetoothService.isConnected(id));
}
}
@ReactMethod
public void writeToDevice(String message, @Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (D)
Log.d(TAG, "Write to device id " + id + " : " + message);
if (id != null) {
byte[] data = Base64.decode(message, Base64.DEFAULT);
mBluetoothService.write(id, data);
}
promise.resolve(true);
}
@ReactMethod
public void readFromDevice(@Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (D)
Log.d(TAG, "Read from device id " + id);
String data = "";
if (mBuffers.containsKey(id)) {
StringBuffer buffer = mBuffers.get(id);
int length = buffer.length();
data = buffer.substring(0, length);
buffer.delete(0, length);
mBuffers.put(id, buffer);
}
promise.resolve(data);
}
@ReactMethod
public void readUntilDelimiter(String delimiter, @Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
promise.resolve(readUntil(id, delimiter));
}
@ReactMethod
public void withDelimiter(String delimiter, @Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (D)
Log.d(TAG, "Set delimiter of device id " + id + " to " + delimiter);
if (id != null) {
mDelimiters.put(id, delimiter);
}
promise.resolve(id);
}
@ReactMethod
public void clear(@Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
if (mBuffers.containsKey(id)) {
StringBuffer buffer = mBuffers.get(id);
buffer.setLength(0);
mBuffers.put(id, buffer);
}
promise.resolve(true);
}
@ReactMethod
public void available(@Nullable String id, Promise promise) {
if (id == null) {
id = mBluetoothService.getFirstDeviceAddress();
}
int length = 0;
if (mBuffers.containsKey(id)) {
StringBuffer buffer = mBuffers.get(id);
length = buffer.length();
}
promise.resolve(length);
}
@ReactMethod
public void setAdapterName(String newName, Promise promise) {
if (mBluetoothAdapter != null) {
mBluetoothAdapter.setName(newName);
promise.resolve(mBluetoothAdapter.getName());
} else {
rejectNullBluetoothAdapter(promise);
}
}
@ReactMethod
public void setServices(ReadableArray services, Boolean includeDefaultServices, Promise promise) {
WritableArray updated = Arguments.createArray();
promise.resolve(updated);
}
@ReactMethod
public void getServices(Promise promise) {
WritableArray services = Arguments.createArray();
promise.resolve(services);
}
@ReactMethod
public void restoreServices(Promise promise) {
WritableArray services = Arguments.createArray();
promise.resolve(services);
}
/**
* Handle connection success
*
* @param msg Additional message
* @param connectedDevice Connected device
*/
void onConnectionSuccess(String msg, BluetoothDevice connectedDevice) {
String id = connectedDevice.getAddress();
if (!mDelimiters.containsKey(id)) {
mDelimiters.put(id, "");
}
if (!mBuffers.containsKey(id)) {
mBuffers.put(id, new StringBuffer());
}
if (mConnectedPromises.containsKey(id)) {
Promise promise = mConnectedPromises.get(id);
if (promise != null) {
WritableMap deviceForPromise = deviceToWritableMap(connectedDevice);
promise.resolve(deviceForPromise);
}
}
WritableMap device = deviceToWritableMap(connectedDevice);
WritableMap params = Arguments.createMap();
params.putMap("device", device);
params.putString("message", msg);
sendEvent(CONN_SUCCESS, params);
}
/**
* handle connection failure
*
* @param msg Additional message
* @param connectedDevice Connected device
*/
void onConnectionFailed(String msg, BluetoothDevice connectedDevice) {
WritableMap params = Arguments.createMap();
WritableMap device = deviceToWritableMap(connectedDevice);
params.putMap("device", device);
params.putString("message", msg);
String id = connectedDevice.getAddress();
if (mConnectedPromises.containsKey(id)) {
Promise promise = mConnectedPromises.get(id);
if (promise != null) {
promise.reject(new Exception(msg));
}
}
sendEvent(CONN_FAILED, params);
}
/**
* Handle lost connection
*
* @param msg Message
* @param connectedDevice Connected device
*/
void onConnectionLost(String msg, BluetoothDevice connectedDevice) {
WritableMap params = Arguments.createMap();
WritableMap device = deviceToWritableMap(connectedDevice);
params.putMap("device", device);
params.putString("message", msg);
mConnectedPromises.remove(connectedDevice.getAddress());
sendEvent(CONN_LOST, params);
}
/**
* Handle error
*
* @param e Exception
*/
void onError(Exception e) {
WritableMap params = Arguments.createMap();
params.putString("message", e.getMessage());
sendEvent(ERROR, params);
}
/**
* Handle read
*
* @param id Device address
* @param data Message
*/
void onData(String id, String data) {
if (mBuffers.containsKey(id)) {
StringBuffer buffer = mBuffers.get(id);
buffer.append(data);
mBuffers.put(id, buffer);
}
String delimiter = "";
if (mDelimiters.containsKey(id)) {
delimiter = mDelimiters.get(id);
}
String completeData = readUntil(id, delimiter);
if (completeData != null && completeData.length() > 0) {
WritableMap readParams = Arguments.createMap();
readParams.putString("id", id);
readParams.putString("data", completeData);
sendEvent(DEVICE_READ, readParams);
WritableMap dataParams = Arguments.createMap();
dataParams.putString("id", id);
dataParams.putString("data", completeData);
sendEvent(DATA_READ, dataParams);
}
}
/**
* Handle read until find a certain delimiter
*
* @param id Device address
* @param delimiter
* @return buffer data from device
*/
private String readUntil(String id, String delimiter) {
String data = "";
if (mBuffers.containsKey(id)) {
StringBuffer buffer = mBuffers.get(id);
int index = buffer.indexOf(delimiter, 0);
if (index > -1) {
data = buffer.substring(0, index + delimiter.length());
buffer.delete(0, index + delimiter.length());
mBuffers.put(id, buffer);
}
}
return data;
}
/**
* Check if is api level 19 or above
*
* @return is above api level 19
*/
private boolean isKitKatOrAbove() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}
/**
* Send event to javascript
*
* @param eventName Name of the event
* @param params Additional params
*/
private void sendEvent(String eventName, @Nullable WritableMap params) {
if (mReactContext.hasActiveCatalystInstance()) {
if (D)
Log.d(TAG, "Sending event: " + eventName);
mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
}
}
/**
* Convert BluetoothDevice into WritableMap
*
* @param device Bluetooth device
*/
private WritableMap deviceToWritableMap(BluetoothDevice device) {
if (D)
Log.d(TAG, "device" + device.toString());
WritableMap params = Arguments.createMap();
if (device != null) {
params.putString("name", device.getName());
params.putString("address", device.getAddress());
params.putString("id", device.getAddress());
if (device.getBluetoothClass() != null) {
params.putInt("class", device.getBluetoothClass().getDeviceClass());
}
}
return params;
}
/**
* Pair device before kitkat
*
* @param device Device
*/
private void pairDevice(BluetoothDevice device) {
try {
if (D)
Log.d(TAG, "Start Pairing...");
Method m = device.getClass().getMethod("createBond", (Class[]) null);
m.invoke(device, (Object[]) null);
registerDevicePairingReceiver(device, BluetoothDevice.BOND_BONDED);
} catch (Exception e) {
Log.e(TAG, "Cannot pair device", e);
if (mPairDevicePromise != null) {
mPairDevicePromise.reject(e);
mPairDevicePromise = null;
}
onError(e);
}
}
/**
* Unpair device
*
* @param device Device
*/
private void unpairDevice(BluetoothDevice device) {
try {
if (D)
Log.d(TAG, "Start Unpairing...");
Method m = device.getClass().getMethod("removeBond", (Class[]) null);
m.invoke(device, (Object[]) null);
registerDevicePairingReceiver(device, BluetoothDevice.BOND_NONE);
} catch (Exception e) {
Log.e(TAG, "Cannot unpair device", e);
if (mPairDevicePromise != null) {
mPairDevicePromise.reject(e);
mPairDevicePromise = null;
}
onError(e);
}
}
/**
* Return reject promise for null bluetooth adapter
*
* @param promise
*/
private void rejectNullBluetoothAdapter(Promise promise) {
Exception e = new Exception("Bluetooth adapter not found");
Log.e(TAG, "Bluetooth adapter not found");
promise.reject(e);
onError(e);
}
/**
* Register receiver for device pairing
*
* @param rawDevice Bluetooth device
* @param requiredState State that we require
*/
private void registerDevicePairingReceiver(final BluetoothDevice rawDevice, final int requiredState) {
final WritableMap device = deviceToWritableMap(rawDevice);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
final BroadcastReceiver devicePairingReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE,
BluetoothDevice.ERROR);
if (state == BluetoothDevice.BOND_BONDED && prevState == BluetoothDevice.BOND_BONDING) {
if (D)
Log.d(TAG, "Device paired");
if (mPairDevicePromise != null) {
mPairDevicePromise.resolve(device);
mPairDevicePromise = null;
}
try {
mReactContext.unregisterReceiver(this);
} catch (Exception e) {
Log.e(TAG, "Cannot unregister receiver", e);
onError(e);
}
} else if (state == BluetoothDevice.BOND_NONE && prevState == BluetoothDevice.BOND_BONDED) {
if (D)
Log.d(TAG, "Device unpaired");
if (mPairDevicePromise != null) {
mPairDevicePromise.resolve(device);
mPairDevicePromise = null;
}
try {
mReactContext.unregisterReceiver(this);
} catch (Exception e) {
Log.e(TAG, "Cannot unregister receiver", e);
onError(e);
}
}
}
}
};
mReactContext.registerReceiver(devicePairingReceiver, intentFilter);
}
/**
* Register receiver for bluetooth device discovery
*/
private void registerBluetoothDeviceDiscoveryReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
final BroadcastReceiver deviceDiscoveryReceiver = new BroadcastReceiver() {
private WritableArray unpairedDevices = Arguments.createArray();
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (D)
Log.d(TAG, "onReceive called");
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
if (D)
Log.d(TAG, "Discovery started");
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice rawDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (D)
Log.d(TAG, "Discovery extra device (device id: " + rawDevice.getAddress() + ")");
WritableMap device = deviceToWritableMap(rawDevice);
unpairedDevices.pushMap(device);
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
if (D)
Log.d(TAG, "Discovery finished");
if (mDeviceDiscoveryPromise != null) {
mDeviceDiscoveryPromise.resolve(unpairedDevices);
mDeviceDiscoveryPromise = null;
}
try {
mReactContext.unregisterReceiver(this);
} catch (Exception e) {
Log.e(TAG, "Unable to unregister receiver", e);
onError(e);
}
}
}
};
mReactContext.registerReceiver(deviceDiscoveryReceiver, intentFilter);
}
/**
* Register receiver for first available device discovery
*/
private void registerFirstAvailableBluetoothDeviceDiscoveryReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
final BroadcastReceiver deviceDiscoveryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (D)
Log.d(TAG, "onReceive called");
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
if (D)
Log.d(TAG, "Discovery started");
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice rawDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String id = rawDevice.getAddress();
if (D)
Log.d(TAG, "Discovery first available device (device id: " + id + ")");
mBluetoothService.connect(rawDevice);
if (mConnectedPromises.containsKey(FIRST_DEVICE)) {
Promise promise = mConnectedPromises.get(FIRST_DEVICE);
mConnectedPromises.remove(FIRST_DEVICE);
mConnectedPromises.put(id, promise);
if (promise != null) {
WritableMap device = deviceToWritableMap(rawDevice);
promise.resolve(device);
}
}
try {
mReactContext.unregisterReceiver(this);
} catch (Exception e) {
Log.e(TAG, "Unable to unregister receiver", e);
onError(e);
}
}
}
};
mReactContext.registerReceiver(deviceDiscoveryReceiver, intentFilter);
}
/**
* Register receiver for bluetooth state change
*/
private void registerBluetoothStateReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
final BroadcastReceiver bluetoothStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
if (D)
Log.d(TAG, "Bluetooth was disabled");
sendEvent(BT_DISABLED, null);
break;
case BluetoothAdapter.STATE_ON:
if (D)
Log.d(TAG, "Bluetooth was enabled");
sendEvent(BT_ENABLED, null);
break;
default:
break;
}
}
}
};
mReactContext.registerReceiver(bluetoothStateReceiver, intentFilter);
}
}
package com.nuttawutmalee.RCTBluetoothSerial;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.bridge.JavaScriptModule;
public class RCTBluetoothSerialPackage implements ReactPackage {
static final String TAG = "BluetoothSerial";
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new RCTBluetoothSerialModule(reactContext));
return modules;
}
// @Override - F**k this bitch
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
\ No newline at end of file
package com.nuttawutmalee.RCTBluetoothSerial;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Build;
import android.util.Log;
import static com.nuttawutmalee.RCTBluetoothSerial.RCTBluetoothSerialPackage.TAG;
/**
* This class does all the work for setting up and managing Bluetooth
* connections with other devices. It has a thread that listens for incoming
* connections, a thread for connecting with a device, and a thread for
* performing data transmissions when connected.
*
* This code was based on the Android SDK BluetoothChat Sample
* $ANDROID_SDK/samples/android-17/BluetoothChat
*/
class RCTBluetoothSerialService {
// Debugging
private static final boolean D = true;
// UUIDs
private static final UUID UUID_SPP = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
// Member fields
private BluetoothAdapter mAdapter;
private RCTBluetoothSerialModule mModule;
private String mFirstDeviceAddress = null;
private HashMap<String, ConnectThread> mConnectThreads;
private HashMap<String, ConnectedThread> mConnectedThreads;
private HashMap<String, String> mStates;
// Constants that indicate the current connection state
private static final String STATE_NONE = "none"; // we're doing nothing
private static final String STATE_CONNECTING = "connecting"; // now initiating an outgoing connection
private static final String STATE_CONNECTED = "connected"; // now connected to a remote device
/**
* Constructor. Prepares a new RCTBluetoothSerialModule session.
*
* @param module Module which handles service events
*/
RCTBluetoothSerialService(RCTBluetoothSerialModule module) {
mAdapter = BluetoothAdapter.getDefaultAdapter();
mModule = module;
if (mConnectThreads == null) {
mConnectThreads = new HashMap<>();
}
if (mConnectedThreads == null) {
mConnectedThreads = new HashMap<>();
}
if (mStates == null) {
mStates = new HashMap<>();
}
}
public String getFirstDeviceAddress() {
return mFirstDeviceAddress;
}
/**
* Start the ConnectThread to initiate a connection to a remote device.
*
* @param device The BluetoothDevice to connect
*/
synchronized void connect(BluetoothDevice device) {
if (D)
Log.d(TAG, "connect to: " + device);
String id = device.getAddress();
cancelConnectThread(id); // Cancel any thread attempting to make a connection
cancelConnectedThread(id); // Cancel any thread currently running a connection
// Start the thread to connect with the given device
ConnectThread thread = new ConnectThread(device);
thread.start();
if (mConnectedThreads.isEmpty()) {
mFirstDeviceAddress = id;
}
mConnectThreads.put(id, thread);
mStates.put(id, STATE_CONNECTING);
}
/**
* Check whether service is connected to device
*
* @param id Device address
* @return Is connected to device
*/
boolean isConnected(String id) {
return mStates.containsKey(id) && getState(id).equals(STATE_CONNECTED);
}
/**
* Write to the ConnectedThread in an unsynchronized manner
*
* @param id Device address
* @param out The bytes to write
* @see ConnectedThread#write(byte[])
*/
void write(String id, byte[] out) {
if (D)
Log.d(TAG, "Write in service of device id " + id + ", state is " + STATE_CONNECTED);
ConnectedThread r = null; // Create temporary object
// Synchronize a copy of the ConnectedThread
synchronized (this) {
if (!isConnected(id)) {
return;
}
if (mConnectedThreads.containsKey(id)) {
r = mConnectedThreads.get(id);
}
}
if (r != null) {
r.write(out); // Perform the write unsynchronized
} else {
Log.e(TAG, "Unable to write, connected thread is null");
mModule.onError(new Exception(("Unable to write, connected thread is null")));
}
}
/**
* Stop threads of a specific device
*
* @param id Device address
*/
synchronized void stop(String id) {
if (D)
Log.d(TAG, "Stop device id " + id);
cancelConnectThread(id);
cancelConnectedThread(id);
mStates.put(id, STATE_NONE);
if (id == mFirstDeviceAddress) {
mFirstDeviceAddress = null;
}
}
/**
* Stop all threads of all devices
*/
synchronized void stopAll() {
if (D)
Log.d(TAG, "Stop all devices");
for (Map.Entry<String, ConnectThread> item : mConnectThreads.entrySet()) {
ConnectThread thread = mConnectThreads.get(item.getKey());
if (thread != null) {
thread.cancel();
}
}
mConnectThreads.clear();
for (Map.Entry<String, ConnectedThread> item : mConnectedThreads.entrySet()) {
ConnectedThread thread = mConnectedThreads.get(item.getKey());
if (thread != null) {
thread.cancel();
}
}
mConnectedThreads.clear();
for (Map.Entry<String, String> item : mStates.entrySet()) {
mStates.put(item.getKey(), STATE_NONE);
}
mFirstDeviceAddress = null;
}
/**
* Return the current connection state.
*
* @param id Device address
*/
private synchronized String getState(String id) {
return mStates.get(id);
}
/**
* Start the ConnectedThread to begin managing a Bluetooth connection
*
* @param socket The BluetoothSocket on which the connection was made
* @param device The BluetoothDevice that has been connected
*/
private synchronized void connectionSuccess(BluetoothSocket socket, BluetoothDevice device) {
String id = device.getAddress();
if (D)
Log.d(TAG, "Connected to device id " + id);
cancelConnectThread(id); // Cancel any thread attempting to make a connection
cancelConnectedThread(id); // Cancel any thread currently running a connection
// Start the thread to manage the connection and perform transmissions
ConnectedThread thread = new ConnectedThread(socket, device);
thread.start();
mConnectedThreads.put(id, thread);
mModule.onConnectionSuccess("Connected to " + device.getName(), device);
if (mStates.containsKey(id)) {
String oldState = mStates.get(id);
if (D)
Log.d(TAG, "Device id " + id + " setState() " + oldState + " -> " + STATE_CONNECTED);
mStates.put(id, STATE_CONNECTED);
}
}
/**
* Indicate that the connection attempt failed and notify the UI Activity.
*
* @param device The BluetoothDevice that has been failed to connect
*/
private void connectionFailed(BluetoothDevice device) {
mModule.onConnectionFailed("Unable to connect to device", device); // Send a failure message with device
RCTBluetoothSerialService.this.stop(device.getAddress()); // Start the service over to restart listening mode
}
/**
* Indicate that the connection was lost and notify the UI Activity.
*
* @param device The BluetoothDevice that has been lost
*/
private void connectionLost(BluetoothDevice device) {
mModule.onConnectionLost("Device connection was lost", device); // Send a failure message
RCTBluetoothSerialService.this.stop(device.getAddress()); // Start the service over to restart listening mode
}
/**
* Cancel connect thread
*
* @param id Device address
*/
private void cancelConnectThread(String id) {
if (mConnectThreads.containsKey(id)) {
ConnectThread thread = mConnectThreads.get(id);
if (thread != null) {
thread.cancel();
mConnectThreads.remove(id);
}
}
}
/**
* Cancel connected thread
*
* @param id Device address
*/
private void cancelConnectedThread(String id) {
if (mConnectedThreads.containsKey(id)) {
ConnectedThread thread = mConnectedThreads.get(id);
if (thread != null) {
thread.cancel();
mConnectedThreads.remove(id);
}
}
}
/**
* This thread runs while attempting to make an outgoing connection with a
* device. It runs straight through; the connection either succeeds or fails.
*/
private class ConnectThread extends Thread {
private BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
ConnectThread(BluetoothDevice device) {
if (D)
Log.d(TAG, "Create ConnectThread");
mmDevice = device;
BluetoothSocket tmp = null;
// Get a BluetoothSocket for a connection with the given BluetoothDevice
try {
tmp = device.createRfcommSocketToServiceRecord(UUID_SPP);
} catch (Exception e) {
mModule.onError(e);
Log.e(TAG, "Socket create() failed", e);
}
mmSocket = tmp;
}
public void run() {
if (D)
Log.d(TAG, "Begin mConnectThread");
setName("ConnectThread");
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a successful connection
// or an exception
if (D)
Log.d(TAG, "Connecting to socket...");
mmSocket.connect();
if (D)
Log.d(TAG, "Connected");
} catch (Exception e) {
Log.e(TAG, e.toString());
mModule.onError(e);
// Some 4.1 devices have problems, try an alternative way to connect
// See https://github.com/don/RCTBluetoothSerialModule/issues/89
try {
Log.i(TAG, "Trying fallback...");
mmSocket = (BluetoothSocket) mmDevice.getClass()
.getMethod("createRfcommSocket", new Class[] { int.class }).invoke(mmDevice, 1);
mmSocket.connect();
Log.i(TAG, "Connected");
} catch (Exception e2) {
Log.e(TAG, e.toString());
mModule.onError(e);
// Fallback to insecure socket
try {
Log.i(TAG, "Trying fallback to insecure socket...");
mmSocket = createInsecureBluetoothSocket(mmDevice);
mmSocket.connect();
} catch (Exception e3) {
Log.e(TAG, "Couldn't establish a Bluetooth connection.");
mModule.onError(e3);
try {
mmSocket.close();
} catch (Exception e4) {
Log.e(TAG, "unable to close() socket during connection failure", e3);
mModule.onError(e4);
}
connectionFailed(mmDevice);
return;
}
}
}
// Reset the ConnectThread because we're done
synchronized (RCTBluetoothSerialService.this) {
mConnectThreads.remove(mmDevice.getAddress());
}
connectionSuccess(mmSocket, mmDevice); // Start the connected thread
}
void cancel() {
try {
mmSocket.close();
} catch (Exception e) {
Log.e(TAG, "close() of connect socket failed", e);
mModule.onError(e);
}
}
private BluetoothSocket createInsecureBluetoothSocket(BluetoothDevice device) throws IOException {
if (Build.VERSION.SDK_INT >= 10) {
try {
final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord",
new Class[] { UUID.class });
return (BluetoothSocket) m.invoke(device, UUID_SPP);
} catch (Exception e) {
Log.e(TAG, "Could not create Insecure RFComm Connection", e);
}
}
return device.createRfcommSocketToServiceRecord(UUID_SPP);
}
}
/**
* This thread runs during a connection with a remote device. It handles all
* incoming and outgoing transmissions.
*/
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
ConnectedThread(BluetoothSocket socket, BluetoothDevice device) {
if (D)
Log.d(TAG, "Create ConnectedThread");
mmSocket = socket;
mmDevice = device;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (Exception e) {
Log.e(TAG, "temp sockets not created", e);
mModule.onError(e);
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
Log.i(TAG, "Begin mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
String id = mmDevice.getAddress();
// Keep listening to the InputStream while connected
while (true) {
try {
bytes = mmInStream.read(buffer); // Read from the InputStream
String data = new String(buffer, 0, bytes, "ISO-8859-1");
mModule.onData(id, data); // Send the new data String to the UI Activity
} catch (Exception e) {
Log.e(TAG, "disconnected", e);
mModule.onError(e);
connectionLost(mmDevice);
break;
}
}
}
/**
* Write to the connected OutStream.
*
* @param buffer The bytes to write
*/
void write(byte[] buffer) {
try {
String str = new String(buffer, "UTF-8");
if (D)
Log.d(TAG, "Write in thread " + str);
mmOutStream.write(buffer);
} catch (Exception e) {
Log.e(TAG, "Exception during write", e);
mModule.onError(e);
}
}
void cancel() {
try {
mmSocket.close();
} catch (Exception e) {
Log.e(TAG, "close() of connect socket failed", e);
mModule.onError(e);
}
}
}
}
// Type definitions for react-native-bluetooth-serial-next 1.0.0
// Project: https://github.com/nuttawutmalee/react-native-bluetooth-serial-next
// Definitions by: Nuttawut Malee <https://github.com/nuttawutmalee>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.1.6
import * as ReactNative from "react-native";
import * as React from "react";
export type Buffer = (data: number[]) => void;
/**
* High order component that will
* attach native event emitter and
* send it as a props named subscription.
*
* It will create an emitter when component did mount
* and remove all listeners when component will unmount.
*
* @param options
*/
export function withSubscription(options: {
subscriptionName?: "subscription";
destroyOnWillUnmount?: true;
}): (WrappedComponent: React.Component) => React.Component;
declare namespace BluetoothSerial {
interface CommonDevice extends Object {
id: string;
name: string;
}
interface AndroidBluetoothDevice extends CommonDevice {
address: string;
class: string | undefined;
}
interface iOSBluetoothDevice extends CommonDevice {
uuid: string;
rssi: string | undefined;
}
interface Service extends Object {
name?: string;
service: string;
read: string;
write: string;
}
export const DEFAULT_SERVICES: Array<Service>;
/**
* Prompts user device to enable bluetooth adapter.
*
* @throws this will always throw an error in iOS,
* but in Android, only if the user does not enable
* the bluetooth service upon request.
*/
export function requestEnable(): Promise<boolean>;
/**
* Enable bluetooth adapter service.
*
* @throws this will always throw an error in iOS,
* but in Android, only if bluetooth adapter
* is missing.
*/
export function enable(): Promise<boolean>;
/**
* Disable bluetooth adapter service.
*
* @throws this will always throw an error in iOS,
* but in Android, only if bluetooth adapter
* is missing.
*/
export function disable(): Promise<boolean>;
/**
* Indicates bluetooth adapter service status.
*/
export function isEnabled(): Promise<boolean>;
/**
* Connect to certain bluetooth device / peripheral.
*
* @param id Device id or uuid
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
export function connect(
id: string
): Promise<AndroidBluetoothDevice | iOSBluetoothDevice>;
/**
* Disconnect from connected bluetooth device / peripheral.
*
* @param id Device id or uuid
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
export function disconnect(id?: string): Promise<boolean>;
/**
* Disconnect all connected bluetooth devices.
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
export function disconnectAll(): Promise<boolean>;
/**
* Indicates if you are connected to the active bluetooth device / peripheral or not.
*
* @param id Device id or uuid
*/
export function isConnected(id?: string): Promise<boolean>;
/**
* List all paired (Android) / connected (iOS) bluetooth devices.
*/
export function list(): Promise<
Array<AndroidBluetoothDevice> | Array<iOSBluetoothDevice>
>;
/**
* List all unpaired bluetooth devices.
*
* @alias discoverUnpairedDevices
*
* @throws this will always throws an error in iOS.
*/
export function listUnpaired(): Promise<
Array<AndroidBluetoothDevice> | Array<iOSBluetoothDevice>
>;
/**
* List all unpaired bluetooth devices.
*
* @alias listUnpaired
*
* @throws this will always throws an error in iOS.
*/
export function discoverUnpairedDevices(): Promise<
Array<AndroidBluetoothDevice> | Array<iOSBluetoothDevice>
>;
/**
* Cancel bluetooth device discovery.
*
* @alias stopScanning
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
export function cancelDiscovery(): Promise<boolean>;
/**
* Cancel bluetooth device discovery.
*
* @alias cancelDiscovery
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
export function stopScanning(): Promise<boolean>;
/**
* Pair with certain bluetooth device.
*
* @param id Device id
*
* @throws this will always throw an error in iOS,
* but in Android, only if bluetooth adapter
* is missing.
*/
export function pairDevice(
id: string
): Promise<AndroidBluetoothDevice | iOSBluetoothDevice | null>;
/**
* Unpair from certain bluetooth device.
*
* @param id Device id
*
* @throws this will always throw an error in iOS,
* but in Android, only if bluetooth adapter
* is missing.
*/
export function unpairDevice(
id: string
): Promise<AndroidBluetoothDevice | iOSBluetoothDevice | null>;
/**
* Listen and read data from connected device.
*
* @param callback
* @param delimiter
* @param id
*/
export function read(
callback: (
data: string,
subscription: ReactNative.EmitterSubscription
) => {},
delimiter?: "",
id?: string
): void;
/**
* Read data from connected device once.
*
* @param delimiter
* @param id
*/
export function readOnce(delimiter?: "", id?: string): Promise<string>;
/**
* Read data from connected device every n ms.
*
* @param callback
* @param ms
* @param delimiter
* @param id
*/
export function readEvery(
callback: (data: string, intervalId: number) => {},
ms?: 1000,
delimiter?: "",
id?: string
): void;
/**
* Read all buffer data from connected device.
*
* @param id Device id or uuid
*/
export function readFromDevice(id?: string): Promise<string>;
/**
* Read all buffer data up to particular delimiter
* from connected device.
*
* @param delimiter
* @param id Device id or uuid
*/
export function readUntilDelimiter(
delimiter: string,
id?: string
): Promise<string>;
/**
* Write data to device, you can pass string or buffer,
*
* @param data
* @param id Device id or uuid
*/
export function write(data: Buffer | string, id?: string): Promise<boolean>;
/**
* Write string to device.
*
* @param data
* @param id Device id or uuid
*/
export function writeToDevice(data: string, id?: string): Promise<boolean>;
/**
* Clear all buffer data.
*
* @param id Device id or uuid
*/
export function clear(id?: string): Promise<boolean>;
/**
* Get length of buffer data.
*
* @param id Device id or uuid
*/
export function available(id?: string): Promise<number>;
/**
* Set bluetooth adapter a new name.
*
* @param name
*
* @throws this will always throw an error in iOS,
* but in Android, only if bluetooth adapter
* is missing.
*/
export function setAdapterName(name: string): Promise<string>;
/**
* Set delimiter split the buffer data
* when you are reading from device.
*
* @param delimiter
* @param id Device id or uuid
*/
export function withDelimiter(
delimiter: string,
id?: string
): Promise<string>;
/**
* [iOS] Set custom services (read and write characteristics.)
*
* @param services
* @param includeDefaultServices
*
* @throws this will throws an error if each service object in the array
* is invalid; each of them needs to have
* `service`, `read`, and `write` key-value.
*/
export function setServices(
services: Array<Service>,
includeDefaultServices?: true
): Promise<Array<Service>>;
/**
* [iOS] Get current services (read and write characteristics.)
*/
export function getServices(): Promise<Array<Service>>;
/**
* [iOS] Set current services to the default ones.
*/
export function restoreServices(): Promise<Array<Service>>;
/**
* Select a specific bluetooth device and
* give you the ability to read / write from
* that device.
*
* @param id Device id or uuid
*/
export function device(
id?: string
): {
/**
* Connect to certain bluetooth device / peripheral.
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
connect(): Promise<AndroidBluetoothDevice | iOSBluetoothDevice>;
/**
* Disconnect from the selected bluetooth device / peripheral.
*
* @throws this will throws an error if Android bluetooth adapter
* is missing.
*/
disconnect: () => Promise<boolean>;
/**
* Indicates if you are connected to the selected bluetooth device / peripheral or not.
*/
isConnected: () => Promise<boolean>;
/**
* Clear all buffer data of the selected bluetooth device / peripheral.
*/
clear: () => Promise<boolean>;
/**
* Get length of buffer data from the selected bluetooth device / peripheral.
*/
available: () => Promise<number>;
/**
* Set delimiter split the buffer data
* when you are reading from the selected device.
*
* @param delimiter
*/
withDelimiter: (delimiter: string) => Promise<string>;
/**
* Listen and read data from the selected device.
*
* @param callback
* @param delimiter
*/
read: (
callback: (
data: string,
subscription: ReactNative.EmitterSubscription
) => {},
delimiter?: ""
) => void;
/**
* Read data from the selected device once.
*
* @param delimiter
*/
readOnce: (delimiter?: "") => Promise<string>;
/**
* Read data from the selected device every n ms.
*
* @param callback
* @param ms
* @param delimiter
*/
readEvery: (
callback: (data: string, intervalId: number) => {},
ms?: 1000,
delimiter?: ""
) => void;
/**
* Read all buffer data up to particular delimiter
* from the selected device.
*
* @param delimiter
*/
readUntilDelimiter: (delimiter: string) => Promise<string>;
/**
* Read all buffer data from connected device.
*/
readFromDevice: () => Promise<string>;
/**
* Write data to the selected device, you can pass string or buffer,
* We must convert to base64 in RN there is no way to pass buffer directly.
*
* @param data
*/
write: (data: Buffer | string) => Promise<boolean>;
/**
* Write string to the selected device.
*
* @param data
*/
writeToDevice: (data: string) => Promise<boolean>;
};
/**
* Similar to addListener, except that the listener is removed after it is
* invoked once.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
export function once(
eventName: string,
listener: (...args: any[]) => any,
context: any
): ReactNative.EmitterSubscription;
/**
* Attach listener to a certain event name.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
export function on(
eventName: string,
listener: (...args: any[]) => any,
context?: any
): ReactNative.EmitterSubscription;
/**
* Attach listener to a certain event name.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
export function addListener(
eventName: string,
listener: (...args: any[]) => any,
context?: any
): ReactNative.EmitterSubscription;
/**
* Removes the given listener for event of specific type.
*
* @param eventName - Name of the event to emit
* @param listener - Function to invoke when the specified event is
* emitted
*
* @example
* emitter.removeListener('someEvent', export function(message) {
* console.log(message);
* }); // removes the listener if already registered
*
*/
export function off(
eventName: string,
listener: (...args: any[]) => any
): void;
/**
* Removes the given listener for event of specific type.
*
* @param eventName - Name of the event to emit
* @param listener - Function to invoke when the specified event is
* emitted
*
* @example
* emitter.removeListener('someEvent', export function(message) {
* console.log(message);
* }); // removes the listener if already registered
*
*/
export function removeListener(
eventName: string,
listener: (...args: any[]) => any
): void;
/**
* Removes all of the registered listeners, including those registered as
* listener maps.
*
* @param eventName - Optional name of the event whose registered
* listeners to remove
*/
export function removeAllListeners(eventName?: string): void;
/**
* Removes a specific subscription. Called by the `remove()` method of the
* subscription itself to ensure any necessary cleanup is performed.
*/
export function removeSubscription(
subscription: ReactNative.EmitterSubscription
): void;
}
// tslint:disable-next-line:export-just-namespace
export = BluetoothSerial;
export as namespace BluetoothSerial;
const ReactNative = require("react-native");
const React = require("react");
const { Buffer } = require("buffer");
const { NativeModules, DeviceEventEmitter } = ReactNative;
const { BluetoothSerial } = NativeModules;
/**
* High order component that will
* attach native event emitter and
* send it as a props named subscription.
*
* It will create an emitter when component did mount
* and remove all listeners when component will unmount.
*
* @param {Object} [options]
* @param {String} [options.subscriptionName=subscription]
* @param {Boolean} [options.destroyOnWilUnmount=true]
* @return {React.Component}
*/
export const withSubscription = (
options = {
subscriptionName: "subscription",
destroyOnWilUnmount: true
}
) => WrappedComponent => {
const subscriptionName =
typeof options.subscriptionName === "string" &&
options.subscriptionName !== ""
? options.subscriptionName
: "subscription";
const destroyOnWilUnmount =
typeof options.destroyOnWilUnmount === "boolean"
? options.destroyOnWilUnmount
: true;
const subscription = DeviceEventEmitter;
subscription.on = DeviceEventEmitter.addListener;
subscription.off = DeviceEventEmitter.removeListener;
subscription.remove = DeviceEventEmitter.removeAllListeners;
return class RTCBluetoothSerialComponent extends React.Component {
componentWillUnmount() {
if (destroyOnWilUnmount && subscription) {
if (typeof subscription.remove === "function") {
subscription.remove();
}
if (typeof subscription.removeAllListeners === "function") {
subscription.removeAllListeners();
}
}
}
render() {
return (
<WrappedComponent
{...this.props}
{...{ [subscriptionName]: subscription }}
>
{this.props.children}
</WrappedComponent>
);
}
};
};
// Overloading
const {
disconnect,
isConnected,
readFromDevice,
readUntilDelimiter,
writeToDevice,
clear,
available,
withDelimiter,
listUnpaired,
cancelDiscovery,
setServices
} = BluetoothSerial;
BluetoothSerial.disconnect = (id = null) => disconnect(id);
BluetoothSerial.isConnected = (id = null) => isConnected(id);
BluetoothSerial.readFromDevice = (id = null) => readFromDevice(id);
BluetoothSerial.readUntilDelimiter = (delimiter, id = null) =>
readUntilDelimiter(delimiter, id);
BluetoothSerial.writeToDevice = (data, id = null) => writeToDevice(data, id);
BluetoothSerial.clear = (id = null) => clear(id);
BluetoothSerial.available = (id = null) => available(id);
BluetoothSerial.withDelimiter = (delimiter, id = null) =>
withDelimiter(delimiter, id);
BluetoothSerial.setServices = (services, includeDefaultServices = true) =>
setServices(services, includeDefaultServices);
BluetoothSerial.discoverUnpairedDevices = listUnpaired;
BluetoothSerial.stopScanning = cancelDiscovery;
/**
* Select a specific bluetooth device and
* give you the ability to read / write from
* that device.
*
* @param {String} [id]
* @return {Object}
*/
BluetoothSerial.device = (id = null) => ({
/**
* Connect to certain bluetooth device / peripheral.
*
* @return {Promise<Object>}
*
* @throws this will throws an error if android bluetooth adapter
* is missing.
*/
connect: () => BluetoothSerial.connect(id),
/**
* Disconnect from the selected bluetooth device / peripheral.
*
* @return {Promise<Boolean>}
*
* @throws this will throws an error if android bluetooth adapter
* is missing.
*/
disconnect: () => BluetoothSerial.disconnect(id),
/**
* Indicates if you are connected to the selected bluetooth device / peripheral or not.
*
* @return {Promise<Boolean>}
*/
isConnected: () => BluetoothSerial.isConnected(id),
/**
* Clear all buffer data of the selected bluetooth device / peripheral.
*
* @return {Promise<Boolean>}
*/
clear: () => BluetoothSerial.clear(id),
/**
* Get length of buffer data from the selected bluetooth device / peripheral.
*
* @return {Promise<Number>}
*/
available: () => BluetoothSerial.available(id),
/**
* Set delimiter split the buffer data
* when you are reading from the selected device.
*
* @param delimiter
* @return {Promise<String>}
*/
withDelimiter: delimiter => BluetoothSerial.withDelimiter(delimiter, id),
/**
* Listen and read data from the selected device.
*
* @param {Function} [callback=() => {}]
* @param {String} [delimiter=""]
*/
read: (callback = () => {}, delimiter = "") => {
if (typeof callback !== "function") {
return;
}
BluetoothSerial.withDelimiter(delimiter, id).then(deviceId => {
const subscription = BluetoothSerial.addListener("read", result => {
const { id: readDeviceId, data } = result;
if (readDeviceId === deviceId) {
callback(data, subscription);
}
});
});
},
/**
* Read data from the selected device once.
*
* @param {String} [delimiter=""]
* @return {Promise<String>}
*/
readOnce: (delimiter = "") =>
typeof delimiter === "string"
? BluetoothSerial.readUntilDelimiter(delimiter, id)
: BluetoothSerial.readFromDevice(id),
/**
* Read data from the selected device every n ms.
*
* @param {Function} [callback=() => {}]
* @param {Number} [ms=1000]
* @param {String} [delimiter=""]
*/
readEvery: (callback = () => {}, ms = 1000, delimiter = "") => {
if (typeof callback !== "function") {
return;
}
const intervalId = setInterval(async () => {
const data =
typeof delimiter === "string"
? await BluetoothSerial.readUntilDelimiter(delimiter, id)
: await BluetoothSerial.readFromDevice(id);
callback(data, intervalId);
}, ms);
},
/**
* Read all buffer data up to particular delimiter
* from the selected device.
*
* @param delimiter
* @return {Promise<String>}
*/
readUntilDelimiter: delimiter =>
BluetoothSerial.readUntilDelimiter(delimiter, id),
/**
* Read all buffer data from connected device.
*
* @return {Promise<String>}
*/
readFromDevice: () => BluetoothSerial.readFromDevice(id),
/**
* Write data to the selected device, you can pass string or buffer,
* We must convert to base64 in RN there is no way to pass buffer directly.
*
* @param {Buffer|String} data
* @return {Promise<Boolean>}
*/
write: data => {
if (typeof data === "string") {
data = new Buffer(data);
}
return BluetoothSerial.writeToDevice(data.toString("base64"), id);
},
/**
* Write string to the selected device.
*
* @param {String} data
* @return {Promise<Boolean>}
*/
writeToDevice: data => BluetoothSerial.writeToDevice(data, id)
});
/**
* Similar to addListener, except that the listener is removed after it is
* invoked once.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
BluetoothSerial.once = (eventName, handler, context) =>
DeviceEventEmitter.once(eventName, handler, context);
/**
* Attach listener to a certain event name.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
BluetoothSerial.addListener = (eventName, handler, context) =>
DeviceEventEmitter.addListener(eventName, handler, context);
/**
* Attach listener to a certain event name.
*
* @param eventName - Name of the event to listen to
* @param listener - Function to invoke only once when the
* specified event is emitted
* @param context - Optional context object to use when invoking the
* listener
*/
BluetoothSerial.on = (eventName, handler, context) =>
DeviceEventEmitter.addListener(eventName, handler, context);
/**
* Removes the given listener for event of specific type.
*
* @param eventName - Name of the event to emit
* @param listener - Function to invoke when the specified event is
* emitted
*
* @example
* emitter.removeListener('someEvent', function(message) {
* console.log(message);
* }); // removes the listener if already registered
*
*/
BluetoothSerial.removeListener = (eventName, handler) =>
DeviceEventEmitter.removeListener(eventName, handler);
/**
* Removes the given listener for event of specific type.
*
* @param eventName - Name of the event to emit
* @param listener - Function to invoke when the specified event is
* emitted
*
* @example
* emitter.removeListener('someEvent', function(message) {
* console.log(message);
* }); // removes the listener if already registered
*
*/
BluetoothSerial.off = (eventName, handler) =>
DeviceEventEmitter.removeListener(eventName, handler);
/**
* Removes all of the registered listeners, including those registered as
* listener maps.
*
* @param eventName - Optional name of the event whose registered
* listeners to remove
*/
BluetoothSerial.removeAllListeners = eventName =>
DeviceEventEmitter.removeAllListeners(eventName);
/**
* Removes a specific subscription. Called by the `remove()` method of the
* subscription itself to ensure any necessary cleanup is performed.
*/
BluetoothSerial.removeSubscription = subscription =>
DeviceEventEmitter.removeSubscription(subscription);
/**
* Listen and read data from device.
*
* @param {Function} callback
* @param {String} [delimiter=""]
* @param {String} [id]
*/
BluetoothSerial.read = (callback, delimiter = "", id = null) => {
if (typeof callback !== "function") {
return;
}
BluetoothSerial.withDelimiter(delimiter, id).then(deviceId => {
const subscription = BluetoothSerial.addListener("read", result => {
const { id: readDeviceId, data } = result;
if (readDeviceId === deviceId) {
callback(data, subscription);
}
});
});
};
/**
* Read data from device once.
*
* @param {String} [delimiter=""]
* @param {String} [id]
* @return {Promise<String>}
*/
BluetoothSerial.readOnce = (delimiter = "", id = null) =>
typeof delimiter === "string"
? BluetoothSerial.readUntilDelimiter(delimiter, id)
: BluetoothSerial.readFromDevice(id);
/**
* Read data from device every n ms.
*
* @param {Function} callback
* @param {Number} [ms=1000]
* @param {String} [delimiter=""]
* @param {String} [id]
*/
BluetoothSerial.readEvery = (
callback = () => {},
ms = 1000,
delimiter = "",
id = null
) => {
if (typeof callback !== "function") {
return;
}
const intervalId = setInterval(async () => {
const data =
typeof delimiter === "string"
? await BluetoothSerial.readUntilDelimiter(delimiter, id)
: await BluetoothSerial.readFromDevice(id);
callback(data, intervalId);
}, ms);
};
/**
* Write data to device, you can pass string or buffer,
* We must convert to base64 in RN there is no way to pass buffer directly.
*
* @param {Buffer|String} data
* @param {String} [id]
* @return {Promise<Boolean>}
*/
BluetoothSerial.write = (data, id = null) => {
if (typeof data === "string") {
data = new Buffer(data);
}
return BluetoothSerial.writeToDevice(data.toString("base64"), id);
};
export default BluetoothSerial;
File added
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
042C1F762380175A00B86911 /* EADSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 042C1F742380175A00B86911 /* EADSessionController.m */; };
69CA06071CC43C2900AF6479 /* RCTBluetoothSerial.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 69CA06061CC43C2900AF6479 /* RCTBluetoothSerial.h */; };
69CA06091CC43C2900AF6479 /* RCTBluetoothSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CA06081CC43C2900AF6479 /* RCTBluetoothSerial.m */; };
69CA06161CC49D5E00AF6479 /* BLE.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CA06101CC49D5E00AF6479 /* BLE.m */; };
69CA06171CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CA06131CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
69CA06011CC43C2900AF6479 /* Copy Files */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "include/$(PRODUCT_NAME)";
dstSubfolderSpec = 16;
files = (
69CA06071CC43C2900AF6479 /* RCTBluetoothSerial.h in Copy Files */,
);
name = "Copy Files";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
041CD6B2238010160016A1C2 /* ExternalAccessory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExternalAccessory.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/ExternalAccessory.framework; sourceTree = DEVELOPER_DIR; };
042C1F742380175A00B86911 /* EADSessionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EADSessionController.m; sourceTree = "<group>"; };
042C1F752380175A00B86911 /* EADSessionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EADSessionController.h; sourceTree = "<group>"; };
69CA06031CC43C2900AF6479 /* libRCTBluetoothSerial.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTBluetoothSerial.a; sourceTree = BUILT_PRODUCTS_DIR; };
69CA06061CC43C2900AF6479 /* RCTBluetoothSerial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTBluetoothSerial.h; sourceTree = "<group>"; };
69CA06081CC43C2900AF6479 /* RCTBluetoothSerial.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTBluetoothSerial.m; sourceTree = "<group>"; };
69CA060F1CC49D5E00AF6479 /* BLE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BLE.h; sourceTree = "<group>"; };
69CA06101CC49D5E00AF6479 /* BLE.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BLE.m; sourceTree = "<group>"; };
69CA06111CC49D5E00AF6479 /* BLEDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BLEDefines.h; sourceTree = "<group>"; };
69CA06121CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CBPeripheral+BTSExtensions.h"; sourceTree = "<group>"; };
69CA06131CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CBPeripheral+BTSExtensions.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
69CA06001CC43C2900AF6479 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
041CD6B1238010160016A1C2 /* Frameworks */ = {
isa = PBXGroup;
children = (
041CD6B2238010160016A1C2 /* ExternalAccessory.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
69CA05FA1CC43C2900AF6479 = {
isa = PBXGroup;
children = (
69CA06051CC43C2900AF6479 /* RCTBluetoothSerial */,
69CA06041CC43C2900AF6479 /* Products */,
041CD6B1238010160016A1C2 /* Frameworks */,
);
sourceTree = "<group>";
};
69CA06041CC43C2900AF6479 /* Products */ = {
isa = PBXGroup;
children = (
69CA06031CC43C2900AF6479 /* libRCTBluetoothSerial.a */,
);
name = Products;
sourceTree = "<group>";
};
69CA06051CC43C2900AF6479 /* RCTBluetoothSerial */ = {
isa = PBXGroup;
children = (
042C1F752380175A00B86911 /* EADSessionController.h */,
042C1F742380175A00B86911 /* EADSessionController.m */,
69CA060F1CC49D5E00AF6479 /* BLE.h */,
69CA06101CC49D5E00AF6479 /* BLE.m */,
69CA06111CC49D5E00AF6479 /* BLEDefines.h */,
69CA06121CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.h */,
69CA06131CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.m */,
69CA06061CC43C2900AF6479 /* RCTBluetoothSerial.h */,
69CA06081CC43C2900AF6479 /* RCTBluetoothSerial.m */,
);
path = RCTBluetoothSerial;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
69CA06021CC43C2900AF6479 /* RCTBluetoothSerial */ = {
isa = PBXNativeTarget;
buildConfigurationList = 69CA060C1CC43C2900AF6479 /* Build configuration list for PBXNativeTarget "RCTBluetoothSerial" */;
buildPhases = (
69CA05FF1CC43C2900AF6479 /* Sources */,
69CA06001CC43C2900AF6479 /* Frameworks */,
69CA06011CC43C2900AF6479 /* Copy Files */,
);
buildRules = (
);
dependencies = (
);
name = RCTBluetoothSerial;
productName = RCTBluetoothSerial;
productReference = 69CA06031CC43C2900AF6479 /* libRCTBluetoothSerial.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
69CA05FB1CC43C2900AF6479 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1010;
ORGANIZATIONNAME = "Nuttawut Malee";
TargetAttributes = {
69CA06021CC43C2900AF6479 = {
CreatedOnToolsVersion = 7.3;
};
};
};
buildConfigurationList = 69CA05FE1CC43C2900AF6479 /* Build configuration list for PBXProject "RCTBluetoothSerial" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
);
mainGroup = 69CA05FA1CC43C2900AF6479;
productRefGroup = 69CA06041CC43C2900AF6479 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
69CA06021CC43C2900AF6479 /* RCTBluetoothSerial */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
69CA05FF1CC43C2900AF6479 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
69CA06091CC43C2900AF6479 /* RCTBluetoothSerial.m in Sources */,
69CA06161CC49D5E00AF6479 /* BLE.m in Sources */,
69CA06171CC49D5E00AF6479 /* CBPeripheral+BTSExtensions.m in Sources */,
042C1F762380175A00B86911 /* EADSessionController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
69CA060A1CC43C2900AF6479 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../ios/Pods/Headers/Public/**";
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
69CA060B1CC43C2900AF6479 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../ios/Pods/Headers/Public/**";
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
69CA060D1CC43C2900AF6479 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../ios/Pods/Headers/Public/**";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
69CA060E1CC43C2900AF6479 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../ios/Pods/Headers/Public/**";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
69CA05FE1CC43C2900AF6479 /* Build configuration list for PBXProject "RCTBluetoothSerial" */ = {
isa = XCConfigurationList;
buildConfigurations = (
69CA060A1CC43C2900AF6479 /* Debug */,
69CA060B1CC43C2900AF6479 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
69CA060C1CC43C2900AF6479 /* Build configuration list for PBXNativeTarget "RCTBluetoothSerial" */ = {
isa = XCConfigurationList;
buildConfigurations = (
69CA060D1CC43C2900AF6479 /* Debug */,
69CA060E1CC43C2900AF6479 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 69CA05FB1CC43C2900AF6479 /* Project object */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "69CA06021CC43C2900AF6479"
BuildableName = "libRCTBluetoothSerial.a"
BlueprintName = "RCTBluetoothSerial"
ReferencedContainer = "container:RCTBluetoothSerial.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "69CA06021CC43C2900AF6479"
BuildableName = "libRCTBluetoothSerial.a"
BlueprintName = "RCTBluetoothSerial"
ReferencedContainer = "container:RCTBluetoothSerial.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "69CA06021CC43C2900AF6479"
BuildableName = "libRCTBluetoothSerial.a"
BlueprintName = "RCTBluetoothSerial"
ReferencedContainer = "container:RCTBluetoothSerial.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>RCTBluetoothSerial.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
</dict>
</dict>
</plist>
/*
Edited by Nuttawut Malee on 10.11.18
Copyright (c) 2013 RedBearLab
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
#import <CoreBluetooth/CoreBluetooth.h>
#else
#import <IOBluetooth/IOBluetooth.h>
#endif
#import "CBPeripheral+BTSExtensions.h"
typedef void (^CentralManagerDiscoverPeripheralsCallback) (NSMutableArray *peripherals);
/*!
* BLE delegate event to send data
* to delegate class.
*/
@protocol BLEDelegate
@required
/*!
* @method didPowerOn
*
* @discussion Delegate bluetooth enabled.
*
*/
- (void)didPowerOn;
/*!
* @method didPowerOff
*
* @discussion Delegate bluetooth disabled.
*
*/
- (void)didPowerOff;
/*!
* @method didError
*
* @param error The error that will be delegated to delegate class.
*
*/
- (void)didError:(NSError *)error;
/*!
* @method didConnect
*
* @param peripheral The connected peripheral.
*
*/
- (void)didConnect:(CBPeripheral *) peripheral;
/*!
* @method didFailToConnect
*
* @param peripheral The connected peripheral.
*
*/
- (void)didFailToConnect:(CBPeripheral *) peripheral;
/*!
* @method didConnectionLost
*
* @param peripheral The connected peripheral.
*
*/
- (void)didConnectionLost:(CBPeripheral *) peripheral;
/*!
* @method didReceiveData:length:
*
* @param uuid The UUID string of the peripheral.
* @param data The received data from peripheral buffer.
* @param length The length of received data.
*
*/
- (void)didReceiveData:(NSString *)uuid data:(unsigned char *) data length:(NSInteger) length;
@end
/*!
* BLE wrapper class that implement
* common central manager and peripheral instance.
*/
@interface BLE : NSObject <CBCentralManagerDelegate, CBPeripheralDelegate>
/*!
* The delegate object that will receive BLE central events.
*/
@property (nonatomic, assign) id<BLEDelegate> delegate;
/*!
* Core bluetooth's Central manager, for implementing central role.
*/
@property (strong, nonatomic) CBCentralManager *manager;
/*!
* Peripherals that are nearby (sorted descending by RSSI values).
*/
@property (weak, nonatomic, readonly) NSArray *peripherals;
/*!
* List of scanned peripherals.
*/
@property (strong, nonatomic) NSMutableArray *scannedPeripherals;
/*!
* The active peripherals that each has been paired and connected.
*/
@property (nonatomic, copy) NSMutableDictionary *activePeripherals;
/*!
* CBCentralManager's state updated by centralManagerDidUpdateState:
*/
@property(nonatomic) CBCentralManagerState cbCentralManagerState;
/*!
* Threshould to stop scanning for peripherals.
* When the number of discovered peripherals exceeds this value, scanning will be
* stopped even before the scan-interval.
*/
@property (assign, nonatomic) NSUInteger peripheralsCountToStop;
/*!
* Indicates if central manager is ready for core bluetooth tasks. KVO observable.
*/
@property (assign, nonatomic, readonly, getter = isCentralReady) BOOL centralReady;
/*!
* Available BLE services, read and write characteristics.
*/
@property (strong, nonatomic) NSDictionary *bleServices;
/*!
* Completion block for peripheral scanning.
*/
@property (copy, nonatomic) CentralManagerDiscoverPeripheralsCallback scanBlock;
/*!
* KVO for centralReady and centralNotReadyReason
*/
+ (NSSet *)keyPathsForValuesAffectingCentralReady;
+ (NSSet *)keyPathsForValuesAffectingCentralNotReadyReason;
/*!
* @method isConnected
*
* @param uuid
*
* @discussion Indicates selected peripheral connection status.
*
*/
- (BOOL)isConnected:(NSString *)uuid;
/*!
* @method peripheralToDictionary
*
* @param peripheral
*
* @discussion Get NSMutableDictionary info of a peripheral.
*
*/
- (NSMutableDictionary *)peripheralToDictionary:(CBPeripheral *)peripheral;
/*!
* @method readActivePeripheralRSSI
*
* @param uuid CBPeripheral id.
*
* @discussion Retrieves and delegate current RSSI of current
* active peripheral that connected to central manager.
*
*/
- (void)readActivePeripheralRSSI:(NSString *)uuid;
/*!
* @method enableReadNotification
*
* @param peripheral
*
* @discussion Notify peripheral read for a certain characteristic.
*/
- (void)enableReadNotification:(CBPeripheral *)peripheral;
/*!
* @method read
*
* @param uuid Id of one of the active peripherals.
*
* @discussion Read value from active peripheral
* for a certain characteristic.
*/
- (void)read:(NSString *)uuid;
/*!
* @method write
*
* @param uuid Id of one of the active peripherals.
* @param data Data to be written to an active peripheral.
*
* @discussion Write value to active peripheral
* for a certain characteristic.
*
*/
- (void)write:(NSString *)uuid data:(NSData *)data;
/*!
* @method scanForPeripheralsByInterval
*
* @param interval Interval by which scan will be stopped.
* @param callback Completion block will be called after
* <i>interval</i> with nearby peripherals.
*
* @discussion Scans for nearby peripherals
* and fills the - NSArray *peripherals.
* Scan will be stoped after input interaval.
*
*/
- (void)scanForPeripheralsByInterval:(NSUInteger)interval
completion:(CentralManagerDiscoverPeripheralsCallback)callback;
/*!
* @method stopScanForPeripheral
*
* @discussion Stops ongoing scan proccess
*
*/
- (void)stopScanForPeripherals;
/*!
* @method connectToPeripheral
*
* @param peripheral
*
* @discussion Connect to certain peripheral
* and assign activePeripheral to it.
*
*/
- (void)connectToPeripheral:(CBPeripheral *)peripheral;
/*!
* @method disconnectFromPeripheral
*
* @param peripheral
*
*/
- (void)disconnectFromPeripheral:(CBPeripheral *)peripheral;
/*!
* @method centralManagerSetup
*
* @discussion Request bluetooth enable settings.
*
*/
- (void)centralManagerSetup;
/*!
* @method getActivePeripheral
*
* @discussion Get active peripheral from uuid or the first connected one.
*
*/
- (CBPeripheral *)getActivePeripheral:(NSString *)uuid;
/*!
* @method validateServices
*
* @discussion Validate service object to contain certain keys.
*/
- (BOOL)validateServices:(NSArray *)services;
/*!
* @method servicesArrayToDictionary
*
* @discussion Convert services array to dictionary; key is service.
*/
- (NSDictionary *)servicesArrayToDictionary:(NSArray *)services;
/*!
* @method servicesDictionaryToArray
*
* @discussion Convert services dictionary to array.
*/
- (NSArray *)servicesDictionaryToArray:(NSDictionary *)services;
/*!
* @method getDefaultServices
*
* @discussion Get default BLE service array from BLEDefines.h.
*/
- (NSArray *)getDefaultServices;
/*!
* @method includeDefaultServices.
*
* @discussion Include default BLE service array from BLEDefines.h into services array.
*/
- (NSArray *)includeDefaultServices:(NSArray *)services;
@end
/*
Edited by Nuttawut Malee on 10.11.18
Copyright (c) 2013 RedBearLab
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "BLE.h"
#import "BLEDefines.h"
@implementation BLE
static const int MAX_BUFFER_LENGTH = 100;
/**
* Default services.
*/
NSDictionary *redBearLabsService;
NSDictionary *adafruitService;
NSDictionary *lairdService;
NSDictionary *blueGigaService;
NSDictionary *rongtaService;
NSDictionary *posnetService;
/*----------------------------------------------------*/
#pragma mark - Lifecycle -
/*----------------------------------------------------*/
- (instancetype)init
{
self = [super init];
if (self) {
_activePeripherals = [NSMutableDictionary dictionary];
_scannedPeripherals = [NSMutableArray new];
_peripheralsCountToStop = NSUIntegerMax;
redBearLabsService = @{@"name": @"Red Bear Labs Service",
@"service": @RBL_SERVICE_UUID,
@"read": @RBL_CHAR_TX_UUID,
@"write": @RBL_CHAR_RX_UUID};
adafruitService = @{@"name": @"Adafruit Service",
@"service": @ADAFRUIT_SERVICE_UUID,
@"read": @ADAFRUIT_CHAR_TX_UUID,
@"write": @ADAFRUIT_CHAR_RX_UUID};
lairdService = @{@"name": @"Laird Service",
@"service": @LAIRD_SERVICE_UUID,
@"read": @LAIRD_CHAR_TX_UUID,
@"write": @LAIRD_CHAR_RX_UUID};
blueGigaService = @{@"name": @"Blue Giga Service",
@"service": @ADAFRUIT_SERVICE_UUID,
@"read": @ADAFRUIT_CHAR_TX_UUID,
@"write": @ADAFRUIT_CHAR_RX_UUID};
rongtaService = @{@"name": @"Rongta Service",
@"service": @RONGTA_SERVICE_UUID,
@"read": @RONGTA_CHAR_TX_UUID,
@"write": @RONGTA_CHAR_RX_UUID};
posnetService = @{@"name": @"POSNET Service",
@"service": @POSNET_SERVICE_UUID,
@"read": @POSNET_CHAR_TX_UUID,
@"write": @POSNET_CHAR_RX_UUID};
_bleServices = [self servicesArrayToDictionary:[self getDefaultServices]];
_manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerOptionShowPowerAlertKey]];
}
return self;
}
/*----------------------------------------------------*/
#pragma mark - Getter/Setter -
/*----------------------------------------------------*/
- (BOOL)isCentralReady
{
return (self.manager.state == CBCentralManagerStatePoweredOn);;
}
- (NSArray *)peripherals
{
// Sorting peripherals by RSSI values
NSArray *sortedArray = [_scannedPeripherals sortedArrayUsingComparator:^NSComparisonResult(CBPeripheral *a, CBPeripheral *b) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return a.RSSI < b.RSSI;
#pragma clang diagnostic pop
}];
return sortedArray;
}
/*----------------------------------------------------*/
#pragma mark - KVO -
/*----------------------------------------------------*/
+ (NSSet *)keyPathsForValuesAffectingCentralReady
{
return [NSSet setWithObject:@"cbCentralManagerState"];
}
+ (NSSet *)keyPathsForValuesAffectingCentralNotReadyReason
{
return [NSSet setWithObject:@"cbCentralManagerState"];
}
/*----------------------------------------------------*/
#pragma mark - Public Methods -
/*----------------------------------------------------*/
- (NSMutableDictionary *)peripheralToDictionary:(CBPeripheral *)peripheral
{
NSMutableDictionary *result = [NSMutableDictionary dictionary];
NSString *uuid = peripheral.identifier.UUIDString;
NSString *name = peripheral.name;
NSNumber *rssi = peripheral.btsAdvertisementRSSI;
[result setObject:uuid forKey:@"uuid"];
[result setObject:uuid forKey:@"id"];
if (!name) {
name = [result objectForKey:@"uuid"];
}
[result setObject:name forKey:@"name"];
if (rssi) {
[result setObject:rssi forKey:@"rssi"];
}
return result;
}
- (void)readActivePeripheralRSSI:(NSString *)uuid
{
NSMutableDictionary *dict = [self getFirstPeripheralDictionary:uuid];
if (dict) {
CBPeripheral *peripheral = [dict objectForKey:@"peripheral"];
if (peripheral) {
[peripheral readRSSI];
}
}
}
- (void)enableReadNotification:(CBPeripheral *)peripheral
{
NSMutableDictionary *activePeripheral = [self.activePeripherals objectForKey:peripheral.identifier.UUIDString];
if (!activePeripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBUUID *serviceUUID = [activePeripheral objectForKey:@"service"];
CBService *service = [self findServiceFromUUID:serviceUUID peripheral:peripheral];
if (!service) {
NSString *message = [NSString stringWithFormat:@"Could not find service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_service" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBUUID *readUUID = [activePeripheral objectForKey:@"read"];
CBCharacteristic *characteristic = [self findCharacteristicFromUUID:readUUID service:service];
if (!characteristic) {
NSString *message = [NSString stringWithFormat:
@"Could not find characteristic with UUID %@ on service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:readUUID],
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_characteristic" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
}
- (BOOL)isConnected:(NSString *)uuid
{
NSMutableDictionary *dict = [self getFirstPeripheralDictionary:uuid];
if (dict) {
return (BOOL)[dict valueForKey:@"connected"];
}
return FALSE;
}
- (void)read:(NSString *)uuid
{
NSMutableDictionary *activePeripheral = [self getFirstPeripheralDictionary:uuid];
if (!activePeripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", uuid];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBPeripheral *peripheral = [activePeripheral objectForKey:@"peripheral"];
if (!peripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", uuid];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBUUID *serviceUUID = [activePeripheral objectForKey:@"service"];
CBService *service = [self findServiceFromUUID:serviceUUID peripheral:peripheral];
if (!service) {
NSString *message = [NSString stringWithFormat:
@"Could not find service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_service" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBUUID *readUUID = [activePeripheral objectForKey:@"read"];
CBCharacteristic *characteristic = [self findCharacteristicFromUUID:readUUID service:service];
if (!characteristic) {
NSString *message = [NSString stringWithFormat:
@"Could not find characteristic with UUID %@ on service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:readUUID],
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_characteristic" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
[peripheral readValueForCharacteristic:characteristic];
}
- (void)write:(NSString *)uuid data:(NSData *)data
{
NSMutableDictionary *activePeripheral = [self getFirstPeripheralDictionary:uuid];
if (!activePeripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", uuid];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBPeripheral *peripheral = [activePeripheral objectForKey:@"peripheral"];
if (!peripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", uuid];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
NSLog(@"Write data to peripheral with UUID %@", uuid);
NSInteger dataLength = data.length;
NSData *buffer;
CBUUID *serviceUUID = [activePeripheral objectForKey:@"service"];
CBUUID *writeUUID = [activePeripheral objectForKey:@"write"];
for (int i = 0; i < dataLength; i += MAX_BUFFER_LENGTH) {
NSInteger remainLength = dataLength - i;
NSInteger bufferLength = (remainLength > MAX_BUFFER_LENGTH) ? MAX_BUFFER_LENGTH : remainLength;
buffer = [data subdataWithRange:NSMakeRange(i, bufferLength)];
NSLog(@"Buffer data %li %i %@", (long)remainLength, i, [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding]);
[self writeValue:serviceUUID characteristicUUID:writeUUID peripheral:peripheral data:buffer];
}
}
- (void)scanForPeripheralsByInterval:(NSUInteger)interval completion:(CentralManagerDiscoverPeripheralsCallback)callback
{
if (!self.isCentralReady) {
NSString *message = [NSString stringWithFormat:
@"CoreBluetooth not correctly initialized! State = %ld (%@)",
(long)self.manager.state,
[self centralManagerStateToString:self.manager.state]];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_bluetooth_initialized" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
callback([NSMutableArray new]);
return;
}
self.scanBlock = callback;
[self scanForPeripheralsByServices];
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(stopScanForPeripherals)
object:nil];
[self performSelector:@selector(stopScanForPeripherals)
withObject:nil
afterDelay:interval];
}
- (void)stopScanForPeripherals
{
[self.manager stopScan];
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(stopScanForPeripherals)
object:nil];
NSLog(@"Stopped Scanning");
NSLog(@"Known peripherals : %lu", (unsigned long)[self.peripherals count]);
[self printKnownPeripherals];
if (self.scanBlock) {
self.scanBlock(self.scannedPeripherals);
}
self.scanBlock = nil;
}
- (void)connectToPeripheral:(CBPeripheral *)peripheral
{
NSLog(@"Connecting to peripheral with UUID : %@", peripheral.identifier.UUIDString);
CBPeripheral *activePeripheral = [peripheral copy];
activePeripheral.delegate = self;
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:[NSNumber numberWithBool:FALSE] forKey:@"connected"];
[dict setObject:activePeripheral forKey:@"peripheral"];
[dict setObject:@"" forKey:@"service"];
[dict setObject:@"" forKey:@"read"];
[dict setObject:@"" forKey:@"write"];
if ([self.activePeripherals count] <= 0) {
[dict setValue:[NSNumber numberWithBool:TRUE] forKey:@"first"];
} else {
[dict setValue:[NSNumber numberWithBool:FALSE] forKey:@"first"];
}
[self.activePeripherals setObject:dict forKey:activePeripheral.identifier.UUIDString];
[self.manager connectPeripheral:activePeripheral options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]];
}
- (void)disconnectFromPeripheral:(CBPeripheral *)peripheral
{
NSLog(@"Disconnecting peripheral with UUID : %@", peripheral.identifier.UUIDString);
[self.manager cancelPeripheralConnection:peripheral];
}
- (void)centralManagerSetup
{
self.manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerOptionShowPowerAlertKey]];
}
- (CBPeripheral *)getActivePeripheral:(NSString *)uuid
{
NSMutableDictionary *dict = [self getFirstPeripheralDictionary:uuid];
if (dict) {
return (CBPeripheral *)[dict objectForKey:@"peripheral"];
}
return nil;
}
- (NSArray *)getDefaultServices
{
return @[redBearLabsService, adafruitService, lairdService, blueGigaService, rongtaService, posnetService];
}
- (NSArray *)includeDefaultServices:(NSArray *)services
{
NSMutableSet *mergedSet = [NSMutableSet setWithArray:services];
[mergedSet unionSet:[NSSet setWithArray:[self getDefaultServices]]];
NSArray *merged = [mergedSet allObjects];
return merged;
}
- (BOOL)validateServices:(NSArray *)services
{
if ([services isKindOfClass:[NSNull class]] | ([services count] <= 0) | (services == nil)) {
return TRUE;
}
for (NSDictionary *service in services) {
NSString *s = [service objectForKey:@"service"];
NSString *r = [service objectForKey:@"read"];
NSString *w = [service objectForKey:@"write"];
if ([self validateCBUUIDString:s] & [self validateCBUUIDString:r] & [self validateCBUUIDString:w]) {
continue;
}
return FALSE;
}
return TRUE;
}
- (NSDictionary *)servicesArrayToDictionary:(NSArray *)services
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
if ([services count] > 0) {
for (NSDictionary *s in services) {
NSMutableDictionary *obj = [[NSMutableDictionary alloc] initWithDictionary:s];
NSString *service = [obj objectForKey:@"service"];
[dict setObject:obj forKey:service];
}
}
return dict;
}
- (NSArray *)servicesDictionaryToArray:(NSDictionary *)services
{
NSMutableArray *array = [NSMutableArray array];
if ([services count] > 0) {
NSArray *keys = [services allKeys];
for (NSString *key in keys) {
NSMutableDictionary *service = [[NSMutableDictionary alloc] initWithDictionary:[services objectForKey:key]];
[service setObject:key forKey:@"service"];
[array addObject:service];
}
}
return array;
}
/*----------------------------------------------------*/
#pragma mark - Private Methods -
/*----------------------------------------------------*/
-(void)scanForPeripheralsByServices
{
// Clear all peripherals
[self.scannedPeripherals removeAllObjects];
#if TARGET_OS_IPHONE
NSMutableArray *services = [[NSMutableArray alloc] init];
if ([self.bleServices count] > 0) {
NSArray *keys = [self.bleServices allKeys];
for (NSString *key in keys) {
[services addObject:[CBUUID UUIDWithString:key]];
}
}
[self.manager scanForPeripheralsWithServices:nil options:nil];
#else
[self.manager scanForPeripheralsWithServices:nil options:nil];
#endif
// NSLog(@"Scan for peripherals with services");
}
- (NSString *)centralManagerStateToString:(int)state
{
switch(state) {
case CBCentralManagerStateUnknown:
return @"State unknown (CBCentralManagerStateUnknown)";
case CBCentralManagerStateResetting:
return @"State resetting (CBCentralManagerStateUnknown)";
case CBCentralManagerStateUnsupported:
return @"State BLE unsupported (CBCentralManagerStateResetting)";
case CBCentralManagerStateUnauthorized:
return @"State unauthorized (CBCentralManagerStateUnauthorized)";
case CBCentralManagerStatePoweredOff:
return @"State BLE powered off (CBCentralManagerStatePoweredOff)";
case CBCentralManagerStatePoweredOn:
return @"State powered up and ready (CBCentralManagerStatePoweredOn)";
default:
return @"State unknown";
}
return @"Unknown state";
}
- (void)writeValue:(CBUUID *)serviceUUID
characteristicUUID:(CBUUID *)characteristicUUID
peripheral:(CBPeripheral *)peripheral
data:(NSData *)data
{
CBService *service = [self findServiceFromUUID:serviceUUID peripheral:peripheral];
if (!service) {
NSString *message = [NSString stringWithFormat:@"Could not find service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_service" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
CBCharacteristic *characteristic = [self findCharacteristicFromUUID:characteristicUUID service:service];
if (!characteristic) {
NSString *message = [NSString stringWithFormat:
@"Could not find characteristic with UUID %@ on service with UUID %@ on peripheral with UUID %@",
[self CBUUIDToString:characteristicUUID],
[self CBUUIDToString:serviceUUID],
peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_characteristic" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
NSLog(@"Write value in ble.m\n");
NSLog(@"Buffer data %li", (long)data.length);
if ((characteristic.properties & CBCharacteristicPropertyWrite) == CBCharacteristicPropertyWrite) {
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
} else if ((characteristic.properties & CBCharacteristicPropertyWriteWithoutResponse) == CBCharacteristicPropertyWriteWithoutResponse) {
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];
}
}
- (BOOL)validateCBUUIDString:(NSString *)CBUUIDString
{
if ([CBUUIDString isKindOfClass:[NSNull class]] | [CBUUIDString isEqualToString:@""] | (CBUUIDString == nil)) {
return FALSE;
}
return (BOOL)[CBUUID UUIDWithString:CBUUIDString];
}
- (CBCharacteristic *)findCharacteristicFromUUID:(CBUUID *)UUID service:(CBService*)service
{
for (int i = 0; i < service.characteristics.count; i++) {
CBCharacteristic *c = [service.characteristics objectAtIndex:i];
if ([self compareCBUUID:c.UUID UUID2:UUID]) {
return c;
}
}
return nil;
}
- (CBService *)findServiceFromUUID:(CBUUID *)UUID peripheral:(CBPeripheral *)peripheral
{
for (int i = 0; i < peripheral.services.count; i++) {
CBService *s = [peripheral.services objectAtIndex:i];
if ([self compareCBUUID:s.UUID UUID2:UUID]) {
return s;
}
}
return nil;
}
- (UInt16)swap:(UInt16)s
{
UInt16 temp = s << 8;
temp |= (s >> 8);
return temp;
}
- (NSString *)CBUUIDToString:(CBUUID *)UUID
{
NSData *data = UUID.data;
if ([data length] == 2) {
const unsigned char *tokenBytes = [data bytes];
return [NSString stringWithFormat:@"%02x%02x", tokenBytes[0], tokenBytes[1]];
} else if ([data length] == 16) {
NSUUID* nsuuid = [[NSUUID alloc] initWithUUIDBytes:[data bytes]];
return [nsuuid UUIDString];
}
return [UUID description];
}
- (UInt16)CBUUIDToInt:(CBUUID *)UUID
{
char b[16];
[UUID.data getBytes:b length:UUID.data.length];
return ((b[0] << 8) | b[1]);
}
- (int)compareCBUUID:(CBUUID *)UUID1 UUID2:(CBUUID *)UUID2
{
char b1[16];
char b2[16];
[UUID1.data getBytes:b1 length:UUID1.data.length];
[UUID2.data getBytes:b2 length:UUID2.data.length];
if (memcmp(b1, b2, UUID1.data.length) == 0) {
return 1;
} else {
return 0;
}
}
- (int)compareCBUUIDToInt:(CBUUID *)UUID1 UUID2:(UInt16)UUID2
{
char b1[16];
[UUID1.data getBytes:b1 length:UUID1.data.length];
UInt16 b2 = [self swap:UUID2];
if (memcmp(b1, (char *)&b2, 2) == 0) {
return 1;
} else {
return 0;
}
}
- (BOOL)UUIDSAreEqual:(NSUUID *)UUID1 UUID2:(NSUUID *)UUID2
{
if ([UUID1.UUIDString isEqualToString:UUID2.UUIDString]) {
return TRUE;
} else {
return FALSE;
}
}
- (CBUUID *)IntToCBUUID:(UInt16)UUID
{
char t[16];
t[0] = ((UUID >> 8) & 0xff); t[1] = (UUID & 0xff);
NSData *data = [[NSData alloc] initWithBytes:t length:16];
return [CBUUID UUIDWithData:data];
}
#if TARGET_OS_IPHONE
//-- no need for iOS
#else
- (BOOL)isLECapableHardware
{
NSString *state = @"";
switch ([self.manager state]) {
case CBCentralManagerStateUnsupported:
state = @"The platform/hardware doesn't support Bluetooth Low Energy.";
break;
case CBCentralManagerStateUnauthorized:
state = @"The app is not authorized to use Bluetooth Low Energy.";
break;
case CBCentralManagerStatePoweredOff:
state = @"Bluetooth is currently powered off.";
break;
case CBCentralManagerStatePoweredOn:
return TRUE;
case CBCentralManagerStateUnknown:
default:
return FALSE;
}
NSLog(@"Central manager state: %@", state);
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:state];
[alert addButtonWithTitle:@"OK"];
[alert setIcon:[[NSImage alloc] initWithContentsOfFile:@"AppIcon"]];
[alert beginSheetModalForWindow:nil modalDelegate:self didEndSelector:nil contextInfo:nil];
return FALSE;
}
#endif
- (void)printKnownPeripherals
{
/*NSLog(@"List of currently known peripherals :");
for (int i = 0; i < self.peripherals.count; i++) {
CBPeripheral *peripheral = [self.peripherals objectAtIndex:i];
NSLog(@"%d | %@", i, peripheral.identifier.UUIDString);
[self printPeripheralInfo:peripheral];
}*/
}
- (void)printPeripheralInfo:(CBPeripheral*)peripheral
{
NSLog(@"------------------------------------");
NSLog(@"Peripheral Info :");
NSLog(@"UUID : %@", peripheral.identifier.UUIDString);
NSLog(@"Name : %@", peripheral.name);
NSLog(@"-------------------------------------");
}
- (NSMutableDictionary *)getFirstPeripheralDictionary:(NSString *)uuid
{
if (([uuid length] <= 0) | [uuid isEqualToString:@""] | [uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
for (NSString *key in self.activePeripherals) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:key]];
if (!dict) {
continue;
}
if ((BOOL)[dict valueForKey:@"first"]) {
return dict;
}
}
return nil;
}
if ([[self.activePeripherals allKeys] containsObject:uuid]) {
return [self.activePeripherals objectForKey:uuid];
}
return nil;
}
/*----------------------------------------------------*/
#pragma mark - Central Manager Delegate -
/*----------------------------------------------------*/
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
self.cbCentralManagerState = (CBCentralManagerState)central.state;
#if TARGET_OS_IPHONE
NSString *state = [self centralManagerStateToString:central.state];
NSLog(@"Status of CoreBluetooth central manager changed %ld (%@)", (long)central.state, state);
if (self.isCentralReady) {
[[self delegate] didPowerOn];
} else {
[[self delegate] didPowerOff];
if ([self.activePeripherals count] > 0) {
for (NSString *key in self.activePeripherals) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:key]];
if (!dict) {
continue;
}
if ((BOOL)[dict valueForKey:@"connected"]) {
CBPeripheral *peripheral = [dict objectForKey:@"peripheral"];
[[self delegate] didConnectionLost:peripheral];
}
}
}
}
#else
[self isLECapableHardware];
#endif
}
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
NSLog(@"Connected to %@ successful", peripheral.identifier.UUIDString);
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:peripheral.identifier.UUIDString]];
if (dict) {
[dict setObject:peripheral forKey:@"peripheral"];
[self.activePeripherals setObject:dict forKey:peripheral.identifier.UUIDString];
}
[peripheral discoverServices:nil];
}
- (void)centralManager:(CBCentralManager *)central
didFailToConnectPeripheral:(CBPeripheral *)peripheral
error:(NSError *)error
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:peripheral.identifier.UUIDString]];
if (dict) {
CBPeripheral *activePeripheral = [dict objectForKey:@"peripheral"];
activePeripheral.delegate = nil;
[self.activePeripherals removeObjectForKey:peripheral.identifier.UUIDString];
}
NSLog(@"Failed to connect to %@", peripheral.identifier.UUIDString);
if (error) {
NSString *message = [error localizedDescription];
NSLog(@"%@", message);
[[self delegate] didError:error];
}
[[self delegate] didFailToConnect:peripheral];
}
- (void)centralManager:(CBCentralManager *)central
didDisconnectPeripheral:(CBPeripheral *)peripheral
error:(NSError *)error
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:peripheral.identifier.UUIDString]];
if (dict) {
CBPeripheral *activePeripheral = [dict objectForKey:@"peripheral"];
activePeripheral.delegate = nil;
[self.activePeripherals removeObjectForKey:peripheral.identifier.UUIDString];
}
NSLog(@"Disconnected to %@ successful", peripheral.identifier.UUIDString);
if (error) {
NSString *message = [error localizedDescription];
NSLog(@"%@", message);
[[self delegate] didError:error];
}
[[self delegate] didConnectionLost:peripheral];
}
-(void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
if (!self.scannedPeripherals) {
// Initiate peripherals with a new peripheral
self.scannedPeripherals = [[NSMutableArray alloc] initWithObjects:peripheral, nil];
} else {
// Replace a duplicate peripheral
for (int i = 0; i < self.scannedPeripherals.count; i++) {
CBPeripheral *p = [self.scannedPeripherals objectAtIndex:i];
[p bts_setAdvertisementData:advertisementData RSSI:RSSI];
if ((p.identifier == NULL) || (peripheral.identifier) == NULL) {
continue;
}
if ([self UUIDSAreEqual:p.identifier UUID2:peripheral.identifier]) {
[self.scannedPeripherals replaceObjectAtIndex:i withObject:peripheral];
NSLog(@"Updating duplicate UUID (%@) peripheral", peripheral.identifier.UUIDString);
return;
}
}
// Add a new peripheral
[self.scannedPeripherals addObject:peripheral];
// NSLog(@"Adding new UUID (%@) peripheral", peripheral.identifier.UUIDString);
}
// NSLog(@"didDiscoverPeripheral");
if ([self.scannedPeripherals count] >= self.peripheralsCountToStop) {
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(stopScanForPeripherals)
object:nil];
[self stopScanForPeripherals];
}
}
/*----------------------------------------------------*/
#pragma mark - Peripheral Delegate -
/*----------------------------------------------------*/
- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverCharacteristicsForService:(CBService *)service
error:(NSError *)error
{
if (error) {
NSString *message = @"Characteristic discovery unsuccessful!";
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_characteristic_discovery" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
NSLog(@"Characteristics of service with UUID : %@ found\n", [self CBUUIDToString:service.UUID]);
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:peripheral.identifier.UUIDString]];
if (dict) {
CBPeripheral *activePeripheral = [dict objectForKey:@"peripheral"];
if (activePeripheral) {
[self enableReadNotification:activePeripheral];
[[self delegate] didConnect:activePeripheral];
[dict setValue:[NSNumber numberWithBool:TRUE] forKey:@"connected"];
[self.activePeripherals setObject:dict forKey:peripheral.identifier.UUIDString];
NSLog(@"Connection with %@ completed", peripheral.identifier.UUIDString);
return;
}
}
}
- (void)peripheral:(CBPeripheral *)peripheral
didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error
{
if (error) {
NSString *message = @"Update value for characteristic unsuccessful!";
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_characteristic_update" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
NSMutableDictionary *activePeripheral = [self getFirstPeripheralDictionary:peripheral.identifier.UUIDString];
if (!activePeripheral) {
NSString *message = [NSString stringWithFormat:@"Could not find active peripheral with UUID %@", peripheral.identifier.UUIDString];
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_peripheral" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
static unsigned char buffer[512];
NSInteger dataLength;
CBPeripheral *readUUID = [activePeripheral objectForKey:@"read"];
if ([characteristic.UUID isEqual:readUUID]) {
dataLength = characteristic.value.length;
[characteristic.value getBytes:buffer length:dataLength];
[[self delegate] didReceiveData:peripheral.identifier.UUIDString data:buffer length:dataLength];
}
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
if (error) {
NSString *message = @"Service discovery unsuccessful!";
NSLog(@"%@", message);
NSError *error = [NSError errorWithDomain:@"no_service_discovery" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[[self delegate] didError:error];
return;
}
NSLog(@"Service discovery for %@ successful", peripheral.identifier.UUIDString);
NSMutableDictionary *activePeripheral = [[NSMutableDictionary alloc] initWithDictionary:[self.activePeripherals objectForKey:peripheral.identifier.UUIDString]];
for (CBService *service in peripheral.services) {
NSString *uuid = [self CBUUIDToString:service.UUID];
NSDictionary *dict = [self.bleServices objectForKey:uuid];
if (dict) {
NSString *name = [dict objectForKey:@"name"];
if (name) {
NSLog(@"Discovered service : %@", name);
}
CBUUID *readCharacteristic = [CBUUID UUIDWithString:[dict objectForKey:@"read"]];
CBUUID *writeCharacteristic = [CBUUID UUIDWithString:[dict objectForKey:@"write"]];
if (activePeripheral) {
[activePeripheral setObject:service.UUID forKey:@"service"];
[activePeripheral setObject:readCharacteristic forKey:@"read"];
[activePeripheral setObject:writeCharacteristic forKey:@"write"];
[self.activePeripherals setObject:activePeripheral forKey:peripheral.identifier.UUIDString];
}
[peripheral discoverCharacteristics:@[readCharacteristic, writeCharacteristic] forService:service];
break;
}
}
}
@end
/*
Copyright (c) 2013 RedBearLab
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
// BlueGiga Service
#define BLUEGIGA_SERVICE_UUID "1D5688DE-866D-3AA4-EC46-A1BDDB37ECF6"
#define BLUEGIGA_CHAR_TX_UUID "AF20fBAC-2518-4998-9AF7-AF42540731B3"
#define BLUEGIGA_CHAR_RX_UUID "AF20fBAC-2518-4998-9AF7-AF42540731B3"
// RBL Service
#define RBL_SERVICE_UUID "713D0000-503E-4C75-BA94-3148F18D941E"
#define RBL_CHAR_TX_UUID "713D0002-503E-4C75-BA94-3148F18D941E"
#define RBL_CHAR_RX_UUID "713D0003-503E-4C75-BA94-3148F18D941E"
// Adafruit BLE
// http://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support
// Adafruit | Nordic's TX and RX are the opposite of RBL. This code uses RBL perspective for naming.
#define ADAFRUIT_SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define ADAFRUIT_CHAR_TX_UUID "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
#define ADAFRUIT_CHAR_RX_UUID "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
// Laird Virtual Serial Port (vSP) service for BL600 http://www.lairdtech.com/DownloadAsset.aspx?id=2147489885
#define LAIRD_SERVICE_UUID "569a1101-b87f-490c-92cb-11ba5ea5167c"
#define LAIRD_CHAR_TX_UUID "569a2000-b87f-490c-92cb-11ba5ea5167c"
#define LAIRD_CHAR_RX_UUID "569a2001-b87f-490c-92cb-11ba5ea5167c"
#define RONGTA_SERVICE_UUID "E7810A71-73AE-499D-8C15-FAA9AEF0C3F2"
#define RONGTA_CHAR_TX_UUID "BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F"
#define RONGTA_CHAR_RX_UUID "BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F"
#define POSNET_SERVICE_UUID "53544D54-4552-494F-5345-525631303030"
#define POSNET_CHAR_TX_UUID "53544F55-4152-5449-4E20-205630303031"
#define POSNET_CHAR_RX_UUID "53544F55-4152-5449-4E20-205630303031"
#define RBL_BLE_FRAMEWORK_VER 0x0200
//
// CBPeripheral+BTSExtensions.h
// BluetoothSerial Cordova Plugin
//
// (c) 2103-2015 Don Coleman
//
// 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.
#import <objc/runtime.h>
#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
@interface CBPeripheral(com_megster_bluetoothserial_extension)
@property (nonatomic, retain) NSString *btsAdvertising;
@property (nonatomic, retain) NSNumber *btsAdvertisementRSSI;
-(void)bts_setAdvertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber*)rssi;
@end
//
// CBPeripheral+BTSExtensions.m
// BluetoothSerial Cordova Plugin
//
// (c) 2103-2015 Don Coleman
//
// 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.
#import "CBPeripheral+BTSExtensions.h"
static char BTS_ADVERTISING_IDENTIFER;
static char BTS_ADVERTISEMENT_RSSI_IDENTIFER;
@implementation CBPeripheral(com_megster_bluetoothserial_extension)
// AdvertisementData and RSSI are from didDiscoverPeripheral.
// Save the manufacturerData so we can pass to Cordova in the peripheral
-(void)bts_setAdvertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)rssi{
if (advertisementData) {
id manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
if (manufacturerData) {
const uint8_t *bytes = [manufacturerData bytes];
long len = [manufacturerData length];
// skip manufacturer uuid
NSData *data = [NSData dataWithBytes:bytes+2 length:len-2];
[self setBtsAdvertising: [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]];
}
}
[self setBtsAdvertisementRSSI: rssi];
}
-(void)setBtsAdvertising:(NSString *)newAdvertisingValue{
objc_setAssociatedObject(self, &BTS_ADVERTISING_IDENTIFER, newAdvertisingValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString*)btsAdvertising{
return objc_getAssociatedObject(self, &BTS_ADVERTISING_IDENTIFER);
}
-(void)setBtsAdvertisementRSSI:(NSNumber *)newAdvertisementRSSIValue {
objc_setAssociatedObject(self, &BTS_ADVERTISEMENT_RSSI_IDENTIFER, newAdvertisementRSSIValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString*)btsAdvertisementRSSI{
return objc_getAssociatedObject(self, &BTS_ADVERTISEMENT_RSSI_IDENTIFER);
}
@end
/*
File: EADSessionController.h
Abstract: n/a
Version: 1.1
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2010 Apple Inc. All Rights Reserved.
*/
#import <Foundation/Foundation.h>
#import <ExternalAccessory/ExternalAccessory.h>
extern NSString *EADSessionDataReceivedNotification;
// NOTE: EADSessionController is not threadsafe, calling methods from different threads will lead to unpredictable results
@interface EADSessionController : NSObject <EAAccessoryDelegate, NSStreamDelegate> {
EAAccessory *_accessory;
EASession *_session;
NSString *_protocolString;
NSMutableData *_writeData;
NSMutableData *_readData;
}
+ (EADSessionController *)sharedController;
- (void)setupControllerForAccessory:(EAAccessory *)accessory withProtocolString:(NSString *)protocolString;
- (BOOL)openSession;
- (void)closeSession;
- (void)writeData:(NSData *)data;
- (NSUInteger)readBytesAvailable;
- (NSData *)readData:(NSUInteger)bytesToRead;
@property (nonatomic, readonly) EAAccessory *accessory;
@property (nonatomic, readonly) NSString *protocolString;
@end
/*
File: EADSessionController.m
Abstract: n/a
Version: 1.1
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2010 Apple Inc. All Rights Reserved.
*/
#import "EADSessionController.h"
NSString *EADSessionDataReceivedNotification = @"EADSessionDataReceivedNotification";
@implementation EADSessionController
@synthesize accessory = _accessory;
@synthesize protocolString = _protocolString;
#pragma mark Internal
// low level write method - write data to the accessory while there is space available and data to write
- (void)_writeData {
if(_session == nil)
{
NSLog(@"No session!");
}
if(![[_session outputStream] hasSpaceAvailable])
{
NSLog(@"Has no space");
}
while (([[_session outputStream] hasSpaceAvailable]) && ([_writeData length] > 0))
{
NSInteger bytesWritten = [[_session outputStream] write:[_writeData bytes] maxLength:[_writeData length]];
if (bytesWritten == -1)
{
NSLog( @"write error");
break;
}
else if (bytesWritten > 0)
{
[_writeData replaceBytesInRange:NSMakeRange(0, bytesWritten) withBytes:NULL length:0];
NSLog(@"Written!%d",(int)bytesWritten);
}
}
}
// low level read method - read data while there is data and space available in the input buffer
- (void)_readData {
#define EAD_INPUT_BUFFER_SIZE 128
uint8_t buf[EAD_INPUT_BUFFER_SIZE];
while ([[_session inputStream] hasBytesAvailable])
{
NSInteger bytesRead = [[_session inputStream] read:buf maxLength:EAD_INPUT_BUFFER_SIZE];
if (_readData == nil) {
_readData = [[NSMutableData alloc] init];
}
[_readData appendBytes:(void *)buf length:bytesRead];
//NSLog(@"read %d bytes from input stream", bytesRead);
}
[[NSNotificationCenter defaultCenter] postNotificationName:EADSessionDataReceivedNotification object:self userInfo:nil];
}
#pragma mark Public Methods
+ (EADSessionController *)sharedController
{
static EADSessionController *sessionController = nil;
if (sessionController == nil) {
sessionController = [[EADSessionController alloc] init];
}
return sessionController;
}
- (void)dealloc
{
[self closeSession];
[self setupControllerForAccessory:nil withProtocolString:nil];
}
// initialize the accessory with the protocolString
- (void)setupControllerForAccessory:(EAAccessory *)accessory withProtocolString:(NSString *)protocolString
{
_protocolString = [protocolString copy];
_accessory = accessory;
}
// open a session with the accessory and set up the input and output stream on the default run loop
- (BOOL)openSession
{
[_accessory setDelegate:self];
_session = [[EASession alloc] initWithAccessory:_accessory forProtocol:_protocolString];
if (_session)
{
[[_session inputStream] setDelegate:self];
[[_session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session inputStream] open];
[[_session outputStream] setDelegate:self];
[[_session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session outputStream] open];
}
else
{
NSLog(@"creating session failed");
}
return (_session != nil);
}
// close the session with the accessory.
- (void)closeSession
{
[[_session inputStream] close];
[[_session inputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session inputStream] setDelegate:nil];
[[_session outputStream] close];
[[_session outputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session outputStream] setDelegate:nil];
_session = nil;
_writeData = nil;
_readData = nil;
}
// high level write data method
- (void)writeData:(NSData *)data
{
if (_writeData == nil) {
_writeData = [[NSMutableData alloc] init];
}
[_writeData appendData:data];
[self _writeData];
}
// high level read method
- (NSData *)readData:(NSUInteger)bytesToRead
{
NSData *data = nil;
if ([_readData length] >= bytesToRead) {
NSRange range = NSMakeRange(0, bytesToRead);
data = [_readData subdataWithRange:range];
[_readData replaceBytesInRange:range withBytes:NULL length:0];
}
return data;
}
// get number of bytes read into local buffer
- (NSUInteger)readBytesAvailable
{
return [_readData length];
}
#pragma mark EAAccessoryDelegate
- (void)accessoryDidDisconnect:(EAAccessory *)accessory
{
// do something ...
}
#pragma mark NSStreamDelegateEventExtensions
// asynchronous NSStream handleEvent method
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventNone:
break;
case NSStreamEventOpenCompleted:
break;
case NSStreamEventHasBytesAvailable:
[self _readData];
break;
case NSStreamEventHasSpaceAvailable:
[self _writeData];
break;
case NSStreamEventErrorOccurred:
break;
case NSStreamEventEndEncountered:
break;
default:
break;
}
}
@end
/*
Created by Nuttawut Malee on 10.11.18.
Copyright © 2016 Nuttawut Malee. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#import "BLE.h"
#import "EADSessionController.h"
#import <ExternalAccessory/ExternalAccessory.h>
typedef void (^RCTBluetoothSerialPeripheralCallback) (CBPeripheral *_Nullable peripheral);
/*!
* RCTBluetoothSerial is an abstract base class to be used for module that connect,
* read and write data from active peripheral.
*/
@interface RCTBluetoothSerial : RCTEventEmitter <RCTBridgeModule, BLEDelegate, EAAccessoryDelegate>
/*!
* BLE central manager, for scanning and connection events.
*/
@property (strong, nonatomic, readonly) BLE *ble;
/*!
* Indicates if there are at least one listeners from RCTEventEmitter.
*/
@property (assign, nonatomic) BOOL doesHaveListeners;
/*!
* Dictionary of buffer from each active peripherals read value.
*/
@property (strong, nonatomic) NSMutableDictionary *buffers;
/*!
* Dictionary of certain delimiter to indicate the end of sliced buffer.
*/
@property (strong, nonatomic) NSMutableDictionary *delimiters;
/*!
* Resolvers an rejectors for connection related function.
*/
@property (strong, nonatomic) NSMutableDictionary *connectionPromises;
/**
* @method bluetoothPowerStateTimer
*
* @param timer
*
* @discussion Indicates central manager power state.
*
*/
- (void)bluetoothPowerStateTimer:(NSTimer *)timer;
@property (strong, nonatomic) NSMutableArray *accessoryList;
@property(nonatomic,retain)EADSessionController *glucoseEADSessionController;
@end
/*
Created by Nuttawut Malee on 10.11.18.
Copyright © 2016 Nuttawut Malee. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "RCTBluetoothSerial.h"
@implementation RCTBluetoothSerial
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge;
/*----------------------------------------------------*/
#pragma mark - Lifecycle -
/*----------------------------------------------------*/
- (instancetype)init
{
self = [super init];
if (self) {
_buffers = [NSMutableDictionary dictionary];
_delimiters = [NSMutableDictionary dictionary];
_connectionPromises = [NSMutableDictionary dictionary];
_doesHaveListeners = FALSE;
_ble = [[BLE alloc] init];
[_ble setDelegate:self];
}
return self;
}
- (dispatch_queue_t)methodQueue
{
// run all module methods in main thread
// if we don't no timer callbacks got called
return dispatch_get_main_queue();
}
+ (BOOL)requiresMainQueueSetup
{
return NO;
}
/*----------------------------------------------------*/
#pragma mark - React Native Methods Available in Javascript -
/*----------------------------------------------------*/
- (NSDictionary *)constantsToExport
{
return @{@"DEFAULT_SERVICES":[self.ble getDefaultServices]};
}
RCT_EXPORT_METHOD(requestEnable:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically requesting enable central manager
NSString *message = @"Require enable bluetooth service; Apple does not support this function";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(enable:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically enabling central manager
NSString *message = @"Enable bluetooth service; Apple does not support this function";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(disable:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically disabling central manager
NSString *message = @"Disable bluetooth service; Apple does not support this function";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(isEnabled:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Short delay so CBCentralManger can spin up bluetooth
[NSTimer scheduledTimerWithTimeInterval:(float)0.2
target:self
selector:@selector(bluetoothPowerStateTimer:)
userInfo:resolve
repeats:NO];
}
- (void)_accessoryDidConnect:(NSNotification *)notification
{
EAAccessory *connectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey];
// NSLog(@"Connected Accessory = %@", connectedAccessory);
[_accessoryList addObject:connectedAccessory];
NSLog(@"ConnectedAccessories = %@", _accessoryList);
}
- (void)_accessoryDidDisconnect:(NSNotification *)notification
{
EAAccessory *disconnectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey];
int disconnectedAccessoryIndex = 0;
for(EAAccessory *accessory in _accessoryList) {
if ([disconnectedAccessory connectionID] == [accessory connectionID]) {
break;
}
disconnectedAccessoryIndex++;
}
if (disconnectedAccessoryIndex < [_accessoryList count]) {
[_accessoryList removeObjectAtIndex:disconnectedAccessoryIndex];
} else {
NSLog(@"could not find disconnected accessory in accessory list");
}
NSLog(@"ConnectedAccessories = %@", _accessoryList);
}
// Data was received from the accessory, real apps should do something with this data but currently:
- (void)_sessionDataReceived:(NSNotification *)notification
{
// NSLog(@"_sessionDataReceived %@", notification);
EADSessionController *sessionController = (EADSessionController *)[notification object];
NSInteger bytesAvailable = 0;
NSString *uuid = [NSString stringWithFormat: @"%ld", (long)sessionController.accessory.connectionID];
NSLog(@"Received uuid %@", uuid);
while ((bytesAvailable = [sessionController readBytesAvailable]) > 0) {
NSData *d = [sessionController readData:bytesAvailable];
NSString *s = [[NSString alloc] initWithData:d encoding:NSISOLatin1StringEncoding];
if (s) {
// NSLog(@"Received string %@", s);
// Append buffers
if ([[self.buffers allKeys] containsObject:uuid]) {
NSMutableString *buffer = [self.buffers valueForKey:uuid];
[buffer appendString:s];
[self.buffers setValue:buffer forKey:uuid];
} else {
NSMutableString *buffer = [[NSMutableString alloc] init];
[buffer appendString:s];
[self.buffers setValue:buffer forKey:uuid];
}
NSMutableString *delimiter = [[NSMutableString alloc] initWithString:@""];
if ([[self.delimiters allKeys] containsObject:uuid]) {
[delimiter setString:[self.delimiters valueForKey:uuid]];
}
NSLog(@"Read until delimiter : %@", delimiter);
NSString *message = [self readUntil:uuid delimiter:delimiter];
if ([message length] > 0) {
if (self.doesHaveListeners) {
[self sendEventWithName:@"read" body:@{@"id":uuid, @"data":message}];
[self sendEventWithName:@"data" body:@{@"id":uuid, @"data":message}];
}
}
} else {
[self onError:@"Error converting received data into a string"];
}
}
}
RCT_EXPORT_METHOD(list:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"List peripherals");
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil];
_accessoryList = nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil];
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionDataReceived:) name:EADSessionDataReceivedNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
_accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];
// NSLog(@"ConnectedAccessories = %@", _accessoryList);
NSMutableArray *devices = [[NSMutableArray alloc]init];
for(int i=0;i<_accessoryList.count;i++)
{
/*if([[[_accessoryList objectAtIndex:i] name] isEqualToString:@"TD_MFI_BT"])
{
self.glucoseEADSessionController = [EADSessionController sharedController];
[self.glucoseEADSessionController setupControllerForAccessory:[_accessoryList objectAtIndex:i] withProtocolString:@"com.taidoc.taidocbus.ec"];
[self.glucoseEADSessionController openSession];
}*/
NSDictionary *device = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSString stringWithFormat: @"%ld", (long)[[_accessoryList objectAtIndex:i] connectionID]], @"id",
@"", @"rssi",
[[_accessoryList objectAtIndex:i] name], @"uuid",
// [[[_accessoryList objectAtIndex:i] protocolStrings] objectAtIndex:0], @"name", nil];
@"TAIDOC TD2202", @"name", nil];
[devices addObject:device];
}
resolve(devices);
// Byte byte[] = {0x51, 0x48, 0x1b, 0x01, 0x01, 0x01, 0xa3, 0x5a};
// NSData *data = [[NSData alloc] initWithBytes:byte length:24];
// [[EADSessionController sharedController] writeData:data];
/*[self.ble scanForPeripheralsByInterval:(float)10.0 completion:^(NSMutableArray *peripherals) {
NSMutableArray *result = [self getPeripheralList:peripherals];
resolve(result);
}];*/
}
RCT_EXPORT_METHOD(listUnpaired:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically enabling central manager
NSString *message = @"List unpaired peripherals; Apple does not support this function";
[self onError:message];
resolve([NSMutableArray new]);
}
RCT_EXPORT_METHOD(cancelDiscovery:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"Cancel discovery called");
[self.ble stopScanForPeripherals];
resolve((id)kCFBooleanTrue);
}
RCT_EXPORT_METHOD(pairDevice:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically pairing.
NSString *message = @"Pair to peripheral (UUID : %@); Apple does not support this function";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(unpairDevice:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically unpairing.
NSString *message = @"Unpair to peripheral (UUID : %@); Apple does not support this function";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(connect:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"Connect to peripheral");
NSUInteger connectionID = (NSUInteger)uuid.longLongValue;
NSDictionary *device = nil;
for(int i=0;i<_accessoryList.count;i++)
{
if([[_accessoryList objectAtIndex:i] connectionID] == connectionID)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionDataReceived:) name:EADSessionDataReceivedNotification object:nil];
self.glucoseEADSessionController = [EADSessionController sharedController];
[self.glucoseEADSessionController setupControllerForAccessory:[_accessoryList objectAtIndex:i] withProtocolString:[[[_accessoryList objectAtIndex:i] protocolStrings] objectAtIndex:0]];
[self.glucoseEADSessionController openSession];
device = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSString stringWithFormat: @"%ld", (long)[[_accessoryList objectAtIndex:i] connectionID]], @"id",
@"", @"rssi",
[[_accessoryList objectAtIndex:i] name], @"uuid",
[[[_accessoryList objectAtIndex:i] protocolStrings] objectAtIndex:0], @"name", nil];
// [self.buffers ]
NSLog(@"Connected Accessory = %@", device);
}
}
if (device != nil) {
resolve(device);
} else {
NSString *message = [NSString stringWithFormat:@"Could not find peripheral %@.", uuid];
NSError *err = [NSError errorWithDomain:@"wrong_uuid" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"wrong_uuid", message, err);
}
/*
// Disconnect from selected active peripheral
NSMutableDictionary *dict = [self.ble.activePeripherals objectForKey:uuid];
if (dict) {
CBPeripheral *peripheral = [dict objectForKey:@"peripheral"];
if (peripheral) {
if (peripheral.state == CBPeripheralStateConnected) {
[self.ble disconnectFromPeripheral:peripheral];
}
}
}
NSMutableDictionary *promises = [NSMutableDictionary dictionary];
[promises setObject:resolve forKey:@"resolver"];
[promises setObject:reject forKey:@"rejector"];
[self.connectionPromises setObject:promises forKey:uuid];
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(findBLEPeripheralByUUID:completion:)
object:nil];
[self findBLEPeripheralByUUID:uuid completion:^(CBPeripheral *peripheral) {
if (peripheral) {
NSLog(@"Connecting to device (UUID : %@)", peripheral.identifier.UUIDString);
if (![[self.delimiters allKeys] containsObject:peripheral.identifier.UUIDString]) {
[self.delimiters setValue:[[NSMutableString alloc] initWithString:@""] forKey:peripheral.identifier.UUIDString];
}
if (![[self.buffers allKeys] containsObject:peripheral.identifier.UUIDString]) {
[self.buffers setValue:[[NSMutableString alloc] init] forKey:peripheral.identifier.UUIDString];
}
[self.ble connectToPeripheral:peripheral];
} else {
NSString *message = [NSString stringWithFormat:@"Could not find peripheral %@.", uuid];
NSError *err = [NSError errorWithDomain:@"wrong_uuid" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"wrong_uuid", message, err);
}
}];
*/
}
RCT_EXPORT_METHOD(disconnect:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"Disconnect from peripheral");
CBPeripheral *activePeripheral = [self.ble getActivePeripheral:uuid];
// Disconnect from selected active peripheral
if (activePeripheral) {
if (activePeripheral.state == CBPeripheralStateConnected) {
[self.ble disconnectFromPeripheral:activePeripheral];
}
}
resolve((id)kCFBooleanTrue);
}
RCT_EXPORT_METHOD(disconnectAll:(RCTPromiseResolveBlock)resolve rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"Disconnect from all peripherals");
NSMutableDictionary *peripherals = [[NSMutableDictionary alloc] initWithDictionary:self.ble.activePeripherals];
if ([peripherals count] > 0) {
NSArray *keys = [peripherals allKeys];
for (NSString *key in keys) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[peripherals objectForKey:key]];
if (dict) {
CBPeripheral *p = [dict objectForKey:@"peripheral"];
if (p) {
if (p.state == CBPeripheralStateConnected) {
[self.ble disconnectFromPeripheral:p];
}
}
}
}
}
resolve((id)kCFBooleanTrue);
}
RCT_EXPORT_METHOD(isConnected:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
if ([self.ble isConnected:uuid]) {
resolve((id)kCFBooleanTrue);
} else {
resolve((id)kCFBooleanFalse);
}
}
RCT_EXPORT_METHOD(withDelimiter:(NSString *)delimiter
uuid:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSMutableString *deviceUUID = nil;
if (![delimiter isKindOfClass:[NSNull class]] | (uuid == nil)) {
NSMutableString *newDelimiter = [[NSMutableString alloc] initWithString:delimiter];
NSLog(@"Set delimiter to %@ for UUID : %@", newDelimiter, uuid);
if ([uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
CBPeripheral *activePeripheral = [self.ble getActivePeripheral:uuid];
if (activePeripheral) {
[self.delimiters setValue:newDelimiter forKey:activePeripheral.identifier.UUIDString];
[deviceUUID setString:activePeripheral.identifier.UUIDString];
}
} else {
[self.delimiters setValue:newDelimiter forKey:uuid];
[deviceUUID setString:uuid];
}
}
resolve(deviceUUID);
}
RCT_EXPORT_METHOD(clear:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSMutableString *activeUUID = nil;
if ([uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
CBPeripheral *activePeripheral = [self.ble getActivePeripheral:uuid];
if (activePeripheral) {
[activeUUID setString:activePeripheral.identifier.UUIDString];
}
} else {
[activeUUID setString:uuid];
}
if ([[self.buffers allKeys] containsObject:activeUUID]) {
NSMutableString *buffer = [self.buffers valueForKey:activeUUID];
long end = [buffer length] - 1;
NSRange truncate = NSMakeRange(0, end);
[buffer deleteCharactersInRange:truncate];
[self.buffers setValue:buffer forKey:activeUUID];
}
resolve((id)kCFBooleanTrue);
}
RCT_EXPORT_METHOD(available:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSMutableString *activeUUID = nil;
if ([uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
CBPeripheral *activePeripheral = [self.ble getActivePeripheral:uuid];
if (activePeripheral) {
[activeUUID setString:activePeripheral.identifier.UUIDString];
}
} else {
[activeUUID setString:uuid];
}
NSNumber *bufferLength = 0;
if ([[self.buffers allKeys] containsObject:activeUUID]) {
NSMutableString *buffer = [self.buffers valueForKey:uuid];
bufferLength = [NSNumber numberWithInteger:[buffer length]];
}
resolve(bufferLength);
}
RCT_EXPORT_METHOD(setAdapterName:(NSString *)name
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
// Apple does not support programmatically adapter name setter.
NSString *message = @"Cannot set adapter name in iOS";
NSError *error = [NSError errorWithDomain:@"no_support" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
RCT_EXPORT_METHOD(setServices:(NSArray *)services
includeDefaultServices:(BOOL)includeDefault
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
if ([self.ble validateServices:services]) {
NSMutableArray *mutableServices = [[NSMutableArray alloc] initWithArray:services];
if (includeDefault) {
mutableServices = [[NSMutableArray alloc] initWithArray:[self.ble includeDefaultServices:mutableServices]];
}
[self.ble setBleServices:[self.ble servicesArrayToDictionary:mutableServices]];
NSArray *services = [self.ble servicesDictionaryToArray:self.ble.bleServices];
resolve(services);
} else {
NSString *message = @"Invalid array of service objects";
NSError *error = [NSError errorWithDomain:@"invalid_parameter" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
[self onError:message];
reject(@"", message, error);
}
}
RCT_EXPORT_METHOD(getServices:(RCTPromiseResolveBlock)resolve rejector:(RCTPromiseRejectBlock)reject)
{
NSArray *services = [self.ble servicesDictionaryToArray:self.ble.bleServices];
resolve(services);
}
RCT_EXPORT_METHOD(restoreServices:(RCTPromiseResolveBlock)resolve rejector:(RCTPromiseRejectBlock)reject)
{
[self.ble setBleServices:[self.ble servicesArrayToDictionary:[self.ble getDefaultServices]]];
NSArray *services = [self.ble servicesDictionaryToArray:self.ble.bleServices];
resolve(services);
}
RCT_EXPORT_METHOD(writeToDevice:(NSString *)message
uuid:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSData *data = [[NSData alloc] initWithBase64EncodedString:message options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSLog(@"Write to device : %@", data);
// Byte byte[] = {0x51, 0x48, 0x1b, 0x01, 0x01, 0x01, 0xa3, 0x5a};
// NSData *data = [[NSData alloc] initWithBytes:byte length:24];
if ([data length] > 0) {
[[EADSessionController sharedController] writeData:data];
} else {
NSLog(@"Data was null");
}
/*if ([data length] > 0) {
[self.ble write:uuid data:data];
} else {
NSLog(@"Data was null");
}*/
resolve((id)kCFBooleanTrue);
}
RCT_EXPORT_METHOD(readFromDevice:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSString *message = @"";
//NSMutableString *activeUUID = nil;
//[activeUUID setString:uuid];
// NSLog(@"Read from active device %@", uuid);
if ([[self.buffers allKeys] containsObject:uuid]) {
NSLog(@"Read from active device");
NSMutableString *buffer = [self.buffers valueForKey:uuid];
long end = [buffer length] - 1;
message = [buffer substringToIndex:end];
NSRange entireString = NSMakeRange(0, end);
[buffer deleteCharactersInRange:entireString];
[self.buffers setValue:buffer forKey:uuid];
}
resolve(message);
}
RCT_EXPORT_METHOD(readUntilDelimiter:(NSString *)delimiter
uuid:(NSString *)uuid
resolver:(RCTPromiseResolveBlock)resolve
rejector:(RCTPromiseRejectBlock)reject)
{
NSLog(@"Read until delimiter : %@", delimiter);
NSString *message = [self readUntil:uuid delimiter:delimiter];
resolve(message);
}
/*----------------------------------------------------*/
#pragma mark - Private Methods -
/*----------------------------------------------------*/
- (void)findBLEPeripheralByUUID: (NSString *)uuid
completion:(RCTBluetoothSerialPeripheralCallback)callback
{
NSLog(@"Scanning for BLE Peripherals: %@", uuid);
// Scan for peripherals.
// If the uuid is null or blank, scan and
// connect to the first available device.
[self.ble scanForPeripheralsByInterval:(float)3.0 completion:^(NSMutableArray *peripherals) {
CBPeripheral *peripheral = nil;
if ([peripherals count] < 1) {
[self onError:@"Did not find any BLE peripherals"];
} else {
if (([uuid length] <= 0) | [uuid isEqualToString:@""] | [uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
// First device found
peripheral = [peripherals objectAtIndex:0];
} else {
// Device by UUID
for (CBPeripheral *p in self.ble.peripherals) {
if ([uuid isEqualToString:p.identifier.UUIDString]) {
peripheral = p;
break;
}
}
}
}
if (callback) {
callback(peripheral);
}
}];
}
- (NSMutableArray *)getPeripheralList:(NSMutableArray *)peripherals
{
NSMutableArray *result = [NSMutableArray array];
if ([peripherals count] > 0) {
for (int i = 0; i < peripherals.count; i++) {
CBPeripheral *peripheral = [self.ble.peripherals objectAtIndex:i];
NSMutableDictionary *dict = [self.ble peripheralToDictionary:peripheral];
[result addObject:dict];
}
}
return result;
}
- (NSString *)readUntil:(NSString *)uuid delimiter:(NSString *)delimiter
{
NSMutableString *activeUUID = nil;
if ([uuid isKindOfClass:[NSNull class]] | (uuid == nil)) {
CBPeripheral *activePeripheral = [self.ble getActivePeripheral:uuid];
if (activePeripheral) {
[activeUUID setString:activePeripheral.identifier.UUIDString];
}
} else {
[activeUUID setString:uuid];
}
NSString *message = @"";
if ([[self.buffers allKeys] containsObject:activeUUID]) {
NSMutableString *buffer = [self.buffers valueForKey:activeUUID];
NSRange range = [buffer rangeOfString:delimiter];
if (range.location != NSNotFound) {
long end = range.location + range.length;
message = [buffer substringToIndex:end];
NSRange truncate = NSMakeRange(0, end);
[buffer deleteCharactersInRange:truncate];
[self.buffers setValue:buffer forKey:activeUUID];
}
}
return message;
}
- (void)onError:(NSString *)message
{
NSLog(@"%@", message);
if (self.doesHaveListeners) {
[self sendEventWithName:@"error" body:@{@"message":message}];
}
}
/*----------------------------------------------------*/
#pragma mark - Timers -
/*----------------------------------------------------*/
- (void)bluetoothPowerStateTimer:(NSTimer *)timer
{
RCTPromiseResolveBlock resolve = [timer userInfo];
if (self.ble.isCentralReady) {
resolve((id)kCFBooleanTrue);
} else {
resolve((id)kCFBooleanFalse);
}
}
/*----------------------------------------------------*/
#pragma mark - BLE Delegate -
/*----------------------------------------------------*/
- (void)didPowerOn
{
if (self.doesHaveListeners) {
[self sendEventWithName:@"bluetoothEnabled" body:nil];
}
}
- (void)didPowerOff
{
if (self.doesHaveListeners) {
[self sendEventWithName:@"bluetoothDisabled" body:nil];
}
}
- (void)didConnect:(CBPeripheral *)peripheral
{
NSMutableDictionary *device = [self.ble peripheralToDictionary:peripheral];
NSString *message = [NSString stringWithFormat:@"Connected to BLE peripheral (UUID : %@)", peripheral.identifier.UUIDString];
NSLog(@"%@", message);
if (self.doesHaveListeners) {
[self sendEventWithName:@"connectionSuccess" body:@{@"message":message, @"device":device}];
}
if ([[self.connectionPromises allKeys] containsObject:peripheral.identifier.UUIDString]) {
NSMutableDictionary *dict = [self.connectionPromises objectForKey:peripheral.identifier.UUIDString];
RCTPromiseResolveBlock resolver = [dict objectForKey:@"resolver"];
if (resolver) {
resolver(device);
}
}
}
- (void)didFailToConnect:(CBPeripheral *)peripheral
{
NSMutableDictionary *device = [self.ble peripheralToDictionary:peripheral];
NSString *message = [NSString stringWithFormat:@"Unable to connect to BLE peripheral (UUID : %@)", peripheral.identifier.UUIDString];
NSLog(@"%@", message);
if (self.doesHaveListeners) {
[self sendEventWithName:@"connectionFailed" body:@{@"message":message, @"device":device}];
}
if ([[self.connectionPromises allKeys] containsObject:peripheral.identifier.UUIDString]) {
NSMutableDictionary *dict = [self.connectionPromises objectForKey:peripheral.identifier.UUIDString];
RCTPromiseRejectBlock reject = [dict objectForKey:@"rejector"];
if (reject) {
NSError *err = [NSError errorWithDomain:@"fail_to_connect" code:500 userInfo:@{NSLocalizedDescriptionKey:message}];
reject(@"wrong_uuid", message, err);
}
}
}
- (void)didConnectionLost:(CBPeripheral *)peripheral
{
NSMutableDictionary *device = [self.ble peripheralToDictionary:peripheral];
NSString *message = [NSString stringWithFormat:@"BLE peripheral (UUID : %@) connection lost", peripheral.identifier.UUIDString];
NSLog(@"%@", message);
if (self.doesHaveListeners) {
[self sendEventWithName:@"connectionLost" body:@{@"message":message, @"device":device}];
}
[self.connectionPromises removeObjectForKey:peripheral.identifier.UUIDString];
}
- (void)didReceiveData:(NSString *)uuid data:(unsigned char *)data length:(NSInteger)length
{
NSLog(@"Received data from peripheral UUID : %@", uuid);
NSData *d = [NSData dataWithBytes:data length:length];
NSString *s = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
if (s) {
NSLog(@"Received %@", s);
// Append buffers
if ([[self.buffers allKeys] containsObject:uuid]) {
NSMutableString *buffer = [self.buffers valueForKey:uuid];
[buffer appendString:s];
[self.buffers setValue:buffer forKey:uuid];
}
NSMutableString *delimiter = [[NSMutableString alloc] initWithString:@""];
if ([[self.delimiters allKeys] containsObject:uuid]) {
[delimiter setString:[self.delimiters valueForKey:uuid]];
}
NSLog(@"Read until delimiter : %@", delimiter);
NSString *message = [self readUntil:uuid delimiter:delimiter];
if ([message length] > 0) {
if (self.doesHaveListeners) {
[self sendEventWithName:@"read" body:@{@"id":uuid, @"data":message}];
[self sendEventWithName:@"data" body:@{@"id":uuid, @"data":message}];
}
}
} else {
[self onError:@"Error converting received data into a string"];
}
}
- (void)didError:(NSError *)error
{
NSString *message = [error localizedDescription];
[self onError:message];
}
/*----------------------------------------------------*/
#pragma mark - RCT Event Emitter -
/*----------------------------------------------------*/
- (NSArray<NSString *> *)supportedEvents
{
return @[@"bluetoothEnabled", @"bluetoothDisabled", @"connectionSuccess", @"connectionFailed", @"connectionLost", @"read", @"data", @"error"];
}
- (void)startObserving
{
self.doesHaveListeners = TRUE;
}
- (void)stopObserving
{
self.doesHaveListeners = FALSE;
}
@end
{
"name": "react-native-bluetooth-serial-next",
"version": "1.2.3",
"description": "Bluetooth serial for react native",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/nuttawutmalee/react-native-bluetooth-serial-next.git"
},
"keywords": [
"bluetooth",
"ble",
"react",
"native",
"react-native"
],
"author": "Nuttawut Malee <nuttawutmalee@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/nuttawutmalee/react-native-bluetooth-serial-next/issues"
},
"homepage": "https://nuttawutmalee.github.io/react-native-bluetooth-serial-next/",
"dependencies": {
"@babel/runtime": "^7.1.5",
"buffer": "^5.2.1"
},
"peerDependencies": {
"react": "*",
"react-native": ">=0.40"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment