All Projects → patloew → Rxwear

patloew / Rxwear

Licence: other
⌚️ Reactive Wearable API Library for Android and RxJava

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Rxwear

Android Developer Roadmap
Android Developer Roadmap - A complete roadmap to learn Android App Development
Stars: ✭ 2,170 (+1231.29%)
Mutual labels:  rxjava, rxjava2
Reactivesensors
Android library monitoring device hardware sensors with RxJava
Stars: ✭ 161 (-1.23%)
Mutual labels:  rxjava, rxjava2
Rxlife
使用Jetpack、Kotlin实现的RxJava自动注销库,你值得拥有!
Stars: ✭ 92 (-43.56%)
Mutual labels:  rxjava, rxjava2
Rxbus
Android reactive event bus that simplifies communication between Presenters, Activities, Fragments, Threads, Services, etc.
Stars: ✭ 79 (-51.53%)
Mutual labels:  rxjava, rxjava2
Vertx Rx
Reactive Extensions for Vert.x
Stars: ✭ 137 (-15.95%)
Mutual labels:  rxjava, rxjava2
Freesound Android
Unofficial Android client for the Freesound Project
Stars: ✭ 81 (-50.31%)
Mutual labels:  rxjava, rxjava2
Featureadapter
FeatureAdapter (FA) is an Android Library providing an optimized way to display complex screens on Android.
Stars: ✭ 112 (-31.29%)
Mutual labels:  rxjava, rxjava2
Bigbang
Android base project used by Xmartlabs team
Stars: ✭ 47 (-71.17%)
Mutual labels:  rxjava, rxjava2
Rxlifecycle
Rx binding of stock Android Activities & Fragment Lifecycle, avoiding memory leak
Stars: ✭ 131 (-19.63%)
Mutual labels:  rxjava, rxjava2
Okhttp Okgo
OkGo - 3.0 震撼来袭,该库是基于 Http 协议,封装了 OkHttp 的网络请求框架,比 Retrofit 更简单易用,支持 RxJava,RxJava2,支持自定义缓存,支持批量断点下载管理和批量上传管理功能
Stars: ✭ 10,407 (+6284.66%)
Mutual labels:  rxjava, rxjava2
Aiyagirl
🔥 爱吖妹纸(含 Kotlin 分支版本)——Retrofit + RxJava + MVP 架构 APP 体验代码家的干货集中营 Gank.io,福利多多,不容错过
Stars: ✭ 1,109 (+580.37%)
Mutual labels:  rxjava, rxjava2
Android Clean Architecture Boilerplate
Apply clean architecture on Android
Stars: ✭ 141 (-13.5%)
Mutual labels:  rxjava, rxjava2
Thirtyinch
a MVP library for Android favoring a stateful Presenter
Stars: ✭ 1,052 (+545.4%)
Mutual labels:  rxjava, rxjava2
Jd Mall Master
一款高仿京东商城的UI,基于MVP的Retrofit2(okhttp3)+rxjava+dagger2+greendao+glide。该项目系仿京东商城,属于独立开发者作品,仅供参考学习,拒绝做一切商业用途,如有侵权,请告知删除
Stars: ✭ 151 (-7.36%)
Mutual labels:  rxjava, rxjava2
Rxjavaapp
学习RxJava操作符的APP,新增RxJava2.x介绍
Stars: ✭ 1,049 (+543.56%)
Mutual labels:  rxjava, rxjava2
Mvpframes
整合大量主流开源项目并且可高度配置化的 Android MVP 快速集成框架,支持 AndroidX
Stars: ✭ 100 (-38.65%)
Mutual labels:  rxjava, rxjava2
Rxschedulerrule
Simple JUnit rule for overriding RxJava/RxAndroid schedulers during unit tests
Stars: ✭ 35 (-78.53%)
Mutual labels:  rxjava, rxjava2
Graphql Retrofit Converter
A Retrofit 2 Converter.Factory for GraphQL.
Stars: ✭ 46 (-71.78%)
Mutual labels:  rxjava, rxjava2
Vertx Mqtt
Vert.x MQTT
Stars: ✭ 117 (-28.22%)
Mutual labels:  rxjava, rxjava2
Rxjavapriorityscheduler
RxPS - RxJavaPriorityScheduler - A RxJava Priority Scheduler library for Android and Java applications
Stars: ✭ 138 (-15.34%)
Mutual labels:  rxjava, rxjava2

Reactive Wearable API Library for Android

Build Status codecov Download Android Arsenal API

This library wraps the Wearable API in RxJava Observables and Singles. No more managing GoogleApiClients! Also, there are some helper classes, which ease communication between phone and wear app.

See the 2.x branch for a RxJava 2 version of this library.

Usage

Create an RxWear instance once, preferably in your Application's onCreate() or by using a dependency injection framework. The RxWear class is very similar to the Wearable class provided by the Wearable API. Instead of Wearable.MessageApi.sendMessage(apiClient, nodeId, path, data) you can use rxWear.message().send(nodeId, path, data).

There are also some helper methods to ease the putting/sending of data.

  • rxWear.data().putDataMap(): Use this to put a DataItem containing a DataMap to a path or a pathPrefix with an auto appended ID.
  • rxWear.data().putSerializable(): Use this to put a DataItem containing a Serializable object to a path or a pathPrefix with an auto appended ID.
  • rxWear.message().sendDataMap(): Use this to send a message containing a DataMap to either one specific node or all remote nodes.
  • rxWear.message().sendSerializable(): Use this to send a message containing a Serializable object to either one specific node or all remote nodes.

A few Observable Transformers are included to ease fetching the data. Since these include filtering, they cannot operate on Singles by default, but you can use single.toObservable().compose(...).

  • DataEventGetDataMap: Use this Transformer to get the DataMap from a DataEvent and optionally filter the events.
  • DataEventGetSerializable: Use this Transformer to get a Serializable object from a DataEvent and optionally filter the events.
  • DataItemGetDataMap: Use this Transformer to get the DataMap from a DataItem and optionally filter the items.
  • DataItemGetSerializable: Use this Transformer to get a Serializable object from a DataItems and optionally filter the items.
  • MessageEventGetDataMap: Use this Transformer to get the DataMap from a MessageEvent and optionally filter the events.
  • MessageEventGetSerializable: Use this Transformer to get a Serializable object from a MessageEvent and optionally filter the events.

Example:

RxWear rxWear = rxWear.init(context);

// Phone App

rxWear.message().sendDataMapToAllRemoteNodes("/dataMap")
	    .putString("title", "Title")
	    .putString("message", "My message")
	    .toObservable()
	    .subscribe(requestId -> {
	    	/* do something */
	    });

rxWear.data().putSerializable(serializable).urgent().to("/serializable")
        .subscribe(dataItem -> {
	        /* do something */
        });

// Wear App

rxWear.message().listen("/dataMap", MessageApi.FILTER_LITERAL)
        .compose(MessageEventGetDataMap.noFilter())
        .subscribe(dataMap -> {
            String title = dataMap.getString("title", getString(R.string.no_message));
            String message = dataMap.getString("message", getString(R.string.no_message_info));
            /* do something */
        });

rxWear.data().listen("/serializable", DataApi.FILTER_LITERAL)
        .compose(DataEventGetSerializable.<MySerializableType>filterByType(DataEvent.TYPE_CHANGED))
        .subscribe(serializable -> {
            /* do something */
        });

An optional global default timeout for all Wearable API requests made through the library can be set via rxWear.setDefaultTimeout(...). In addition, timeouts can be set when creating a new Observable by providing timeout parameters, e.g. rxWear.message().send(nodeId, path, data, 15, TimeUnit.SECONDS). These parameters override the default timeout. When a timeout occurs, a StatusException is provided via onError(). The timeouts specified here are only used for calls to the Wearable API, e.g. a timeout will not occur when a listener does not emit an item within the specified timeout. The RxJava timeout operators can be used for this use case.

You can also obtain a Single<GoogleApiClient>, which connects on subscribe and disconnects on unsubscribe via GoogleAPIClientSingle.create(...).

The following Exceptions are thrown in the lib and provided via onError():

  • StatusException: When the call to the Wearable API was not successful or timed out
  • GoogleAPIConnectionException: When connecting to the GoogleAPIClient was not successful.
  • GoogleAPIConnectionSuspendedException: When the GoogleApiClient connection was suspended.

Sample

A basic sample app is available in the sample and wearsample projects.

Setup

The lib is available on jCenter. Add the following to your build.gradle:

dependencies {
    compile 'com.patloew.rxwear:rxwear:1.3.0'
    // or, for a RxJava 2 version of this library:
    compile 'com.patloew.rxwear:rxwear2:2.0.0'
}

Credits

The code for managing the GoogleApiClient is taken from the Android-ReactiveLocation library by Michał Charmas, which is licensed under the Apache License, Version 2.0.

License

Copyright 2016 Patrick Löwenstein

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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].