├── .gitignore
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── it
│ │ └── sysdata
│ │ └── eventdispatcher
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── it
│ │ │ └── sysdata
│ │ │ └── eventdispatcher
│ │ │ ├── MainActivity.java
│ │ │ ├── MainActivityFragment.java
│ │ │ └── UIEvent.java
│ └── res
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── content_main.xml
│ │ └── fragment_main.xml
│ │ ├── menu
│ │ └── menu_main.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-v21
│ │ └── styles.xml
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── it
│ └── sysdata
│ └── eventdispatcher
│ └── ExampleUnitTest.java
├── baseandroid-busadapter
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── publishBintray.gradle
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── baseandroid
│ │ └── eventdispatcher
│ │ └── busadapter
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── baseandroid
│ │ │ └── events
│ │ │ ├── Event.java
│ │ │ ├── EventDispatcher.java
│ │ │ └── EventProcessor.java
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── baseandroid
│ └── eventdispatcher
│ └── busadapter
│ └── ExampleUnitTest.java
├── baseandroid-eventdispatcher
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── publishBintray.gradle
└── src
│ ├── androidTest
│ └── java
│ │ └── it
│ │ └── sysdata
│ │ └── eventdispatcher
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── baseandroid
│ │ │ └── events
│ │ │ └── otto
│ │ │ ├── MainThreadBus.java
│ │ │ └── OttoEventProcessor.java
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── it
│ └── sysdata
│ └── eventdispatcher
│ └── ExampleUnitTest.java
├── baseandroid-logadapter
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── baseandroid
│ │ └── eventdispatcher
│ │ └── logadapter
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── baseandroid
│ └── eventdispatcher
│ └── logadapter
│ └── ExampleUnitTest.java
├── baseandroid-rxeventdispatcher
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── example
│ │ └── baseandroid_rxbus
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── baseandroid
│ │ │ └── events
│ │ │ └── rx
│ │ │ ├── RxBus.java
│ │ │ ├── RxEventProcessor.java
│ │ │ └── annotations
│ │ │ ├── RxAnnotatedHandlerFinder.java
│ │ │ ├── RxEventHandler.java
│ │ │ ├── RxEventProducer.java
│ │ │ ├── RxProduce.java
│ │ │ └── RxSubscribe.java
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── example
│ └── baseandroid_rxbus
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # Intellij
36 | *.iml
37 | .idea/workspace.xml
38 |
39 | # Keystore files
40 | *.jks
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Universal Event Bus
2 | =============================
3 |
4 | The Universal Event Bus is an event dispatcher architecture which help you to use most common event bus implementation as Otto in a structured mode.
5 |
6 | An events is a bus designed to separate different parts of the application, while still allowing them to communicate efficiently.
7 | The operation of the EventDispatcher is based on the publish-subscribe pattern: the bus asked a series of events that will be collected by those who joined them.
8 |
9 | The publisher is, in this case, called Bus or RxBus and deals with post events using the Observable of RxJava. The event dispatcher contains two RxBuses: one dedicated to the UI thread, and the other for all the other events that have nothing to do with the UI (network calls, CRUD operations with the database etc.).
10 |
11 | The events that are posted by the Event dispatcher are heard by all those who sign up. To register, you must write down the method that the signing will take as an argument the type of object that the public EventDispatcher and will be annotated with the notation @Subscribe or @RxSubscribe
12 |
13 | 
14 |
15 | Usage
16 | --------
17 |
18 | 1) You've got to initialize the EventDispatcher with your favorite process.
19 | We suggest to do it in the MainApplication's onCreate() and use RxEventProcessor which use RxJava.
20 |
21 | ```java
22 | EventDispatcher.useEventProcessor(RxEventProcessor.newInstance());
23 | ```
24 | We also implemented an EventProcessor which use Otto as Event Bus.
25 |
26 | ```java
27 | EventDispatcher.useEventProcessor(EventProcessor.newInstance());
28 | ```
29 | 2) Register the EventDispatcher when the Activity/Fragment/Service is created and unregister it when it is destroyed.
30 |
31 | ```java
32 |
33 | @Override
34 | public void onCreate() {
35 | super.onCreate();
36 | // register the event dispatcher in order to receive
37 | // events that are posted on the Bus.
38 | EventDispatcher.register(this);
39 | }
40 |
41 | @Override
42 | public void onDestroy() {
43 | super.onDestroy();
44 | // unregister the event dispatcher
45 | EventDispatcher.unregister(this);
46 | }
47 | ```
48 | 3) Create events, post and receive them: Once the EventDispatcher is initialized and register in your Android component, you can post and receive events easily. Use `EventDispatcher.post()` to post the event you want to stream in the bus. Create a public method that has the same event type in its signature and annotate it with the `@RxSubscribe` signature in order to receive the Object that has been posted.
49 |
50 | ```java
51 | @Override
52 | public void onCreate() {
53 | super.onCreate();
54 | // post an example event
55 | EventDispatcher.post(new ExampleEvent());
56 | }
57 |
58 | @RxSubscribe
59 | public void onConsumeExampleEvent(ExampleEvent event) {
60 | // do what you want with the incoming event
61 | }
62 |
63 | /**
64 | * This is an example empty event: remember to add the "Event" annotation!!
65 | */
66 | @Event(type = Event.Type.UI)
67 | public class ExampleEvent {
68 |
69 | public ExampleEvent() {
70 | // empty constructor
71 | }
72 |
73 | }
74 | ```
75 |
76 | The posting class can be different from the receiving one: both must be registered to the EventDispatcher, though! Remember that each Class that you want to use as an event MUST have the `@Event` annotation. You can choose between 5 type of events based on which is the use of the designed event: GENERIC, DATA, NETWORK, CONTEXT and UI. The difference is that UI events will be posted on the UI thread, meanwhile the others will be posted in a separated Thread.
77 |
78 | Handle configuration changes
79 | --------
80 |
81 | EventDispatcher allows you to handle configuration changes easily. By using `EventDispatcher.loadPoint()` and `EventDispatcher.savePoint()` you will be able to receive posted events even after a configuration change (i.e. rotation or other lifecycle events).
82 |
83 | ```java
84 |
85 | private String mEventDispatcherTag;
86 |
87 | @Override
88 | public void onCreate() {
89 | super.onCreate();
90 | // retrieve the saved state, if present
91 | if (savedInstanceState != null && savedInstanceState.containsKey("ett")) {
92 | this.mEventDispatcherTag = savedInstanceState.getString("ett");
93 | }
94 | // loadPoint() is used to handle events' saved state between configuration changes
95 | EventDispatcher.loadPoint(this, this.mEventDispatcherTag);
96 | }
97 |
98 | @Override
99 | protected void onSaveInstanceState(Bundle outState) {
100 | super.onSaveInstanceState(outState);
101 | // save the EventDispatcher's tag
102 | outState.putString("ett", mEventDispatcherTag);
103 | }
104 |
105 | @Override
106 | public void onDestroy() {
107 | super.onDestroy();
108 | // save point is used to save the state in order to restore it later, after the configuration change.
109 | this.mEventDispatcherTag = EventDispatcher.savePoint(this);
110 | }
111 | ```
112 |
113 | Create custom EventProcessor
114 | --------
115 |
116 | You can implement your own EventProcessor if you want, you need to create a class which implements the interface EventProcessor
117 |
118 | ```java
119 | public interface EventProcessor {
120 |
121 | /**
122 | * Registers a given Object on both Buses
123 | *
124 | * @param o Object to register on the Buses
125 | */
126 | void onRegister(Object o);
127 |
128 | /**
129 | * Unregisters a given Object from both Buses
130 | *
131 | * @param o Object to unregister from the Buses
132 | */
133 | void onUnregister(Object o);
134 |
135 | /**
136 | * After checking whether the object being posted is annotated with the {@link Event} Annotation,
137 | * it will be placed in the corresponding queue and such queue will be then sorted by {@link Event.Priority}.
138 | *
139 | * NOTE: if an object being posted has not been annotated with the {@link Event} Annotation it will be disregarded!!!
140 | *
141 | *
142 | * @param o the Object we want to post as an event
143 | */
144 | void onPost(Object o);
145 |
146 | /**
147 | * This method return a string used by {@link EventProcessor} to save the state of the object in configuration changes.
148 | * You should use the string returned by this method with {@code EventDispatcher.loadPoint()}
149 | * This method must be called before {@code EventDispatcher.unregister(...)} (in {@code OnPause(...)} method for example)
150 | *
151 | * NOTE: this string should be saved on instance state in Activity and retrieved when it restart on OnCreate(...) method
152 | *
153 | *
154 | * @param object
155 | * @return
156 | */
157 | String onSavePoint(Object object);
158 |
159 | /**
160 | * This method load the configuration variables used by {@link EventDispatcher} to handle the configuration changes.
161 | * You should use this method in pair with {@code EventDispatcher.savePoint(...)}.
162 | * This method must be called before {@code EventDispatcher.register(...)} (in {@code OnResume(...)} method for example)
163 | *
164 | * @param object
165 | *
166 | */
167 | void onLoadPoint(Object object, String key);
168 | }
169 | ```
170 |
171 |
172 | Download
173 | --------
174 |
175 | Downloadable .jars can be found on the [Bintray download page][2].
176 |
177 | You can also depend on the .jar through Maven:
178 | ```xml
179 |
180 | com.baseandroid
181 | baseandroid-rxeventdispatcher
182 | 0.0.14
183 |
184 | ```
185 | or Gradle:
186 | ```groovy
187 | compile "com.baseandroid:baseandroid-rxeventdispatcher:0.0.14"
188 | // rxJava
189 | compile 'io.reactivex:rxandroid:1.2.1'
190 | // Because RxAndroid releases are few and far between, it is recommended you also
191 | // explicitly depend on RxJava's latest version for bug fixes and new features.
192 | compile 'io.reactivex:rxjava:1.2.6'
193 | ```
194 |
195 | Snapshots of the development version are available in [Sonatype's `snapshots` repository][snap].
196 |
197 |
198 |
199 | License
200 | -------
201 |
202 | Copyright (C) 2017 Sysdata, S.p.a.
203 |
204 | Licensed under the Apache License, Version 2.0 (the "License");
205 | you may not use this file except in compliance with the License.
206 | You may obtain a copy of the License at
207 |
208 | http://www.apache.org/licenses/LICENSE-2.0
209 |
210 | Unless required by applicable law or agreed to in writing, software
211 | distributed under the License is distributed on an "AS IS" BASIS,
212 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
213 | See the License for the specific language governing permissions and
214 | limitations under the License.
215 |
216 |
217 |
218 | [1]: http://square.github.com/otto/
219 | [2]: https://dl.bintray.com/sysdata/maven/com/baseandroid/baseandroid-eventdispatcher/
220 | [snap]: https://oss.sonatype.org/content/repositories/snapshots/
221 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion "23.0.3"
6 |
7 | defaultConfig {
8 | applicationId "it.sysdata.eventdispatcher"
9 | minSdkVersion 9
10 | targetSdkVersion 23
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | lintOptions {
21 | abortOnError false
22 | }
23 | }
24 |
25 | dependencies {
26 |
27 | def adapterVersionName = project.ext.libVersionName
28 |
29 | compile fileTree(dir: 'libs', include: ['*.jar'])
30 | testCompile 'junit:junit:4.12'
31 | compile 'com.android.support:appcompat-v7:23.3.0'
32 | compile 'com.android.support:design:23.3.0'
33 |
34 | // WITH THESE ONES YOU CAN TEST REMOTE LIBS
35 | // REMEMBER TO USE THESE AFTER TEST CAUSE JENKINS TROUBLES
36 | compile "com.baseandroid:baseandroid-busadapter:$adapterVersionName"
37 | compile "com.baseandroid:baseandroid-eventdispatcher:$adapterVersionName"
38 | // compile "com.baseandroid:baseandroid-rxeventdispatcher:$adapterVersionName'
39 |
40 | // WITH THESE ONES YOU CAN USE LOCAL PROJECTS
41 | // REMEMBER: COMMENT THESE ONES BEFOR PUSH ON DEVELOP CAUSE JENKINS TROUBLES
42 | //compile project(path: ':baseandroid-busadapter')
43 | //compile project(path: ':baseandroid-eventdispatcher')
44 | //compile project(path: ':baseandroid-rxeventdispatcher')
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Stefano\Sviluppo\ADT_bundle_windows\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/it/sysdata/eventdispatcher/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package it.sysdata.eventdispatcher;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/java/it/sysdata/eventdispatcher/MainActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package it.sysdata.eventdispatcher;
18 |
19 | import android.os.Bundle;
20 | import android.support.design.widget.FloatingActionButton;
21 | import android.support.v7.app.AppCompatActivity;
22 | import android.support.v7.widget.Toolbar;
23 | import android.view.Menu;
24 | import android.view.MenuItem;
25 | import android.view.View;
26 | import com.baseandroid.events.EventDispatcher;
27 |
28 | public class MainActivity extends AppCompatActivity {
29 |
30 | @Override
31 | protected void onCreate(Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 | setContentView(R.layout.activity_main);
34 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
35 | setSupportActionBar(toolbar);
36 | EventDispatcher.register(this);
37 | FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
38 | fab.setOnClickListener(new View.OnClickListener() {
39 | @Override
40 | public void onClick(View view) {
41 | EventDispatcher.post(new UIEvent());
42 | }
43 | });
44 | }
45 |
46 | @Override
47 | public boolean onCreateOptionsMenu(Menu menu) {
48 | // Inflate the menu; this adds items to the action bar if it is present.
49 | getMenuInflater().inflate(R.menu.menu_main, menu);
50 | return true;
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem item) {
55 | // Handle action bar item clicks here. The action bar will
56 | // automatically handle clicks on the Home/Up button, so long
57 | // as you specify a parent activity in AndroidManifest.xml.
58 | int id = item.getItemId();
59 |
60 | //noinspection SimplifiableIfStatement
61 | if (id == R.id.action_settings) {
62 | return true;
63 | }
64 |
65 | return super.onOptionsItemSelected(item);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/it/sysdata/eventdispatcher/MainActivityFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package it.sysdata.eventdispatcher;
18 |
19 | import android.os.Bundle;
20 | import android.support.v4.app.Fragment;
21 | import android.view.LayoutInflater;
22 | import android.view.View;
23 | import android.view.ViewGroup;
24 | import android.widget.Toast;
25 |
26 | import com.baseandroid.events.EventDispatcher;
27 | import com.squareup.otto.Subscribe;
28 |
29 | /**
30 | * A placeholder fragment containing a simple view.
31 | */
32 | public class MainActivityFragment extends Fragment {
33 |
34 | public MainActivityFragment() {
35 | }
36 |
37 | @Override
38 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
39 | Bundle savedInstanceState) {
40 | EventDispatcher.register(this);
41 | return inflater.inflate(R.layout.fragment_main, container, false);
42 | }
43 |
44 | @Subscribe
45 | public void onConsumePippo(final UIEvent UIEvent) {
46 | Toast.makeText(getActivity(), "received UIEvent", Toast.LENGTH_SHORT).show();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/it/sysdata/eventdispatcher/UIEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package it.sysdata.eventdispatcher;
18 |
19 | import com.baseandroid.events.Event;
20 |
21 | /**
22 | * @author Stefano
23 | * created on 24/11/2015.
24 | */
25 | @Event(type = Event.Type.UI)
26 | public class UIEvent {
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
26 |
27 |
31 |
32 |
38 |
39 |
40 |
41 |
42 |
43 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
27 |
28 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SysdataSpA/UniversalEventBus/3e3702d7ac06173799a17b12b324163b7929f044/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SysdataSpA/UniversalEventBus/3e3702d7ac06173799a17b12b324163b7929f044/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SysdataSpA/UniversalEventBus/3e3702d7ac06173799a17b12b324163b7929f044/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SysdataSpA/UniversalEventBus/3e3702d7ac06173799a17b12b324163b7929f044/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SysdataSpA/UniversalEventBus/3e3702d7ac06173799a17b12b324163b7929f044/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 | >
18 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
21 | 64dp
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | #3F51B5
20 | #303F9F
21 | #FF4081
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 | 16dp
20 | 16dp
21 | 16dp
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 | EventDispatcher
19 | Settings
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
26 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/test/java/it/sysdata/eventdispatcher/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package it.sysdata.eventdispatcher;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/baseandroid-busadapter/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | dependencies {
3 | repositories {
4 | mavenCentral()
5 | // serve per org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1
6 | maven { url "https://plugins.gradle.org/m2/" }
7 | maven { url 'https://oss.jfrog.org/libs-snapshot' }
8 | }
9 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
10 | classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1'
11 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
12 | classpath 'com.github.dcendents:android-maven-plugin:1.2'
13 | classpath 'me.tatarka:gradle-retrolambda:3.2.5'
14 | }
15 | }
16 |
17 | apply plugin: 'com.android.library'
18 | apply plugin: 'me.tatarka.retrolambda'
19 |
20 | def libName = "baseandroid-busadapter"
21 |
22 | android {
23 | compileSdkVersion 23
24 | buildToolsVersion "23.0.3"
25 |
26 | defaultConfig {
27 | minSdkVersion 9
28 | targetSdkVersion 23
29 | versionCode libVersionCode
30 | versionName libVersionName
31 | }
32 | buildTypes {
33 | release {
34 | minifyEnabled false
35 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
36 | }
37 | }
38 | compileOptions {
39 | targetCompatibility 1.8
40 | sourceCompatibility 1.8
41 | }
42 | lintOptions {
43 | abortOnError false
44 | }
45 | }
46 |
47 | dependencies {
48 | compile fileTree(dir: 'libs', include: ['*.jar'])
49 | testCompile 'junit:junit:4.12'
50 | compile 'com.android.support:appcompat-v7:23.3.0'
51 | }
52 |
53 | // pubblicazione maven
54 | if(project.rootProject.file('local.properties').exists()) {
55 | Properties properties = new Properties()
56 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
57 | ext {
58 | // GROUP_ID
59 | publishedGroupId = 'com.baseandroid'
60 | // ARTIFACT_ID
61 | artifact = libName
62 | // VERSION_ID
63 | libraryVersion = libVersionName
64 |
65 | developerId = properties.getProperty("bintray.developer.id")
66 | developerName = properties.getProperty("bintray.developer.name")
67 | developerEmail = properties.getProperty("bintray.developer.email")
68 |
69 | bintrayRepo = 'maven'
70 | bintrayName = 'baseandroid-busadapter'
71 | libraryName = 'baseandroid-busadapter'
72 | bintrayOrganization = 'sysdata'
73 | }
74 |
75 | apply from: 'publishBintray.gradle'
76 | }
77 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Stefano\Sviluppo\ADT_bundle_windows\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/publishBintray.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | ext {
4 | libraryDescription = ''
5 | siteUrl = ''
6 | gitUrl = ''
7 |
8 | licenseName = 'The Apache Software License, Version 2.0'
9 | licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
10 | allLicenses = ["Apache-2.0"]
11 | }
12 |
13 | //apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
14 | apply plugin: 'com.github.dcendents.android-maven'
15 |
16 | group = publishedGroupId // Maven Group ID for the artifact
17 |
18 | install {
19 | repositories.mavenInstaller {
20 | // This generates POM.xml with proper parameters
21 | pom {
22 | project {
23 | packaging 'aar'
24 | groupId publishedGroupId
25 | artifactId artifact
26 |
27 | // Add your description here
28 | name libraryName
29 | description libraryDescription
30 | url siteUrl
31 |
32 | // Set your license
33 | licenses {
34 | license {
35 | name licenseName
36 | url licenseUrl
37 | }
38 | }
39 | developers {
40 | developer {
41 | id developerId
42 | name developerName
43 | email developerEmail
44 | }
45 | }
46 | scm {
47 | connection gitUrl
48 | developerConnection gitUrl
49 | url siteUrl
50 |
51 | }
52 | }
53 | }
54 | }
55 | }
56 |
57 | //apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
58 | apply plugin: 'com.jfrog.bintray'
59 |
60 | version = libraryVersion
61 |
62 | task sourcesJar(type: Jar) {
63 | // dependsOn = ['test', 'connectedAndroidTest']
64 | from android.sourceSets.main.java.srcDirs
65 | classifier = 'sources'
66 | }
67 |
68 | task javadoc(type: Javadoc) {
69 | source = android.sourceSets.main.java.srcDirs
70 | classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
71 | }
72 |
73 | task javadocJar(type: Jar, dependsOn: javadoc) {
74 | classifier = 'javadoc'
75 | from javadoc.destinationDir
76 | }
77 | artifacts {
78 | archives javadocJar
79 | archives sourcesJar
80 | }
81 |
82 | // Bintray
83 | Properties properties = new Properties()
84 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
85 |
86 | bintray {
87 | user = properties.getProperty("bintray.user")
88 | key = properties.getProperty("bintray.apikey")
89 |
90 | configurations = ['archives']
91 | pkg {
92 | repo = bintrayRepo
93 | name = bintrayName
94 | desc = libraryDescription
95 | userOrg = bintrayOrganization
96 | websiteUrl = siteUrl
97 | vcsUrl = gitUrl
98 | licenses = allLicenses
99 | publish = true
100 | publicDownloadNumbers = true
101 | version {
102 | desc = libraryDescription
103 | gpg {
104 | sign = true //Determines whether to GPG sign the files. The default is false
105 | passphrase = properties.getProperty("bintray.gpg.password")
106 | //Optional. The passphrase for GPG signing'
107 | }
108 | }
109 | }
110 | }
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/androidTest/java/com/baseandroid/eventdispatcher/busadapter/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.baseandroid.eventdispatcher.busadapter;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/main/java/com/baseandroid/events/Event.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.baseandroid.events;
18 |
19 | import java.lang.annotation.ElementType;
20 | import java.lang.annotation.Retention;
21 | import java.lang.annotation.RetentionPolicy;
22 | import java.lang.annotation.Target;
23 | import java.util.Comparator;
24 |
25 | /**
26 | * Annotation used to define events.
27 | * Such events can have a {@link Type} and a {@link Priority}.
28 | *
29 | * Different Types and Priorities define the order in which the events will be managed and on which bus they will be posted.
30 | *
31 | *
32 | * @author Stefano Ciarcia'
33 | * created on 24/07/2015.
34 | */
35 | @Retention(RetentionPolicy.RUNTIME)
36 | @Target(ElementType.TYPE)
37 | public @interface Event {
38 |
39 | /**
40 | * Defines the priority this event will have. In order they are:
41 | *
42 | *
CRITICAL
43 | *
HIGH
44 | *
NORMAL
45 | *
LOW
46 | *
IRRELEVANT
47 | *
48 | */
49 | enum Priority {
50 | /**
51 | * this priority means that the event must be dealt with immediately,
52 | * because it's a life and death matter
53 | */
54 | CRITICAL(5),
55 | /**
56 | * this priority means that the event should be dealt with asap
57 | */
58 | HIGH(4),
59 | /**
60 | * this priority means that the event can be dealt with normally
61 | */
62 | NORMAL(3),
63 | /**
64 | * this priority means that the event can be dealt with when possible
65 | */
66 | LOW(2),
67 | /**
68 | * this priority means that it's irrelevant if the event is dealt with
69 | */
70 | IRRELEVANT(1);
71 |
72 | private final int priorityLevel;
73 |
74 | Priority(int p) {
75 | this.priorityLevel = p;
76 | }
77 | }
78 | Priority priority() default Priority.NORMAL;
79 |
80 | /**
81 | * Defines the type of this event.
82 | *
83 | * Events of type GENERIC, DATA and NETWORK will be posted on a Bus separated by the Android Main Thread.
84 | * Events of type UI will be posted on a Bus working on the Android Main Thread.
85 | *
86 | */
87 | enum Type {
88 | /**
89 | * generic type of event, not falling into one of the other types
90 | */
91 | GENERIC,
92 | /**
93 | * event representing a request or passing of data
94 | */
95 | DATA,
96 | /**
97 | * event representing a network request
98 | */
99 | NETWORK,
100 | /**
101 | * event representing a context request
102 | */
103 | CONTEXT,
104 | /**
105 | * event representing a UI event
106 | */
107 | UI
108 | }
109 | Type type();
110 |
111 | /**
112 | * This comparator sorts the Events by {@link Priority}.
113 | */
114 | Comparator COMPARATOR = (lhs, rhs) -> lhs.getClass().getAnnotation(Event.class).priority().priorityLevel - rhs.getClass().getAnnotation(Event.class).priority().priorityLevel;
115 | }
116 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/main/java/com/baseandroid/events/EventDispatcher.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.baseandroid.events;
18 |
19 | import android.util.Log;
20 |
21 | /**
22 | * Class managing the events used throughout the application.
23 | *
24 | * Events are stored in queues depending on their {@link Event.Type} and these queues are checked periodically in a specific order:
25 | *
26 | *
UI
27 | *
NETWORK
28 | *
DATA
29 | *
GENERIC
30 | *
CONTEXT
31 | *
32 | *
33 | *
34 | * @author Andrea Guitto
35 | * created on 12/04/2016.
36 | */
37 | public final class EventDispatcher {
38 |
39 | // Using Otto as default
40 | private static EventProcessor INSTANCE = StubEventProcessors.newInstance();
41 |
42 | private EventDispatcher() {
43 | // No instances.
44 | }
45 |
46 | /**
47 | * Setup an instance of {@link EventProcessor} to handle events.
48 | * @param processor
49 | */
50 | public static void useEventProcessor(EventProcessor processor) {
51 | INSTANCE = processor;
52 | }
53 |
54 | /**
55 | * Registers a given Object on both Buses
56 | *
57 | * @param o Object to register on the Buses
58 | */
59 | public static void register(Object o) {
60 | INSTANCE.onRegister(o);
61 | }
62 |
63 | /**
64 | * Unregisters a given Object from both Buses
65 | *
66 | * @param o Object to unregister from the Buses
67 | */
68 | public static void unregister(Object o) {
69 | INSTANCE.onUnregister(o);
70 | }
71 |
72 | /**
73 | * After checking whether the object being posted is annotated with the {@link Event} Annotation,
74 | * it will be placed in the corresponding queue and such queue will be then sorted by {@link Event.Priority}.
75 | *
76 | * NOTE: if an object being posted has not been annotated with the {@link Event} Annotation it will be disregarded!!!
77 | *
78 | *
79 | * @param o the Object we want to post as an event
80 | */
81 | public static void post(Object o) {
82 | INSTANCE.onPost(o);
83 | }
84 |
85 | /**
86 | * This method return a string used by event processor to save the state of the object in configuration changes.
87 | * You should use the string returned by this method with {@code EventDispatcher.loadPoint()}
88 | * This method must be called before {@code EventDispatcher.unregister(...)} (in {@code OnPause(...)} method for example)
89 | *
90 | * NOTE: this string should be saved on instance state in Activity and retrieved when it restart on OnCreate(...) method
91 | *
92 | *
93 | * @param object
94 | * @return
95 | */
96 | public static String savePoint(Object object) { return INSTANCE.onSavePoint(object); }
97 |
98 | /**
99 | * This method load the configuration variables used by EventDispatcher to handle the configuration changes.
100 | * You should use this method in pair with {@code EventDispatcher.savePoint(...)}.
101 | * This method must be called before {@code EventDispatcher.register(...)} (in {@code OnResume(...)} method for example)
102 | *
103 | * @param object
104 | *
105 | */
106 | public static void loadPoint(Object object, String tag) { INSTANCE.onLoadPoint(object, tag); }
107 |
108 | /**
109 | * This class is used to create a Stub event processors and alert developer about a wrond use of {@link EventDispatcher}
110 | */
111 | private static class StubEventProcessors implements EventProcessor {
112 | private static final String LOG_TAG = StubEventProcessors.class.getSimpleName();
113 |
114 | /**
115 | * This method return a new {@link StubEventProcessors} instance
116 | * @return
117 | */
118 | public static EventProcessor newInstance() {
119 | return new StubEventProcessors();
120 | }
121 |
122 | @Override
123 | public void onRegister(Object o) {
124 | Log.e(LOG_TAG, "onRegister: No EventProcessor declared, you should declare calling EventDispatcher.useEventProcessor(...)! All events will be misses!!");
125 | }
126 |
127 | @Override
128 | public void onUnregister(Object o) {
129 | Log.e(LOG_TAG, "onUnregister: No EventProcessor declared, you should declare calling EventDispatcher.useEventProcessor(...)! All events will be misses!!");
130 | }
131 |
132 | @Override
133 | public void onPost(Object o) {
134 | Log.e(LOG_TAG, "onPost: No EventProcessor declared, you should declare calling EventDispatcher.useEventProcessor(...)! Event of type "+o.getClass().getName()+" will be missed.");
135 | }
136 |
137 | @Override
138 | public String onSavePoint(Object object) {
139 | Log.e(LOG_TAG, "onSavePoint: No EventProcessor declared, you should declare calling EventDispatcher.useEventProcessor(...)!");
140 | return null;
141 | }
142 |
143 | @Override
144 | public void onLoadPoint(Object object, String key) {
145 | Log.e(LOG_TAG, "onLoadPoint: No EventProcessor declared, you should declare calling EventDispatcher.useEventProcessor(...)!");
146 | }
147 | }
148 | }
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/main/java/com/baseandroid/events/EventProcessor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.baseandroid.events;
18 |
19 | /**
20 | * Created by Andrea Guitto on 12/04/2016.
21 | */
22 | public interface EventProcessor {
23 |
24 | /**
25 | * Registers a given Object on both Buses
26 | *
27 | * @param o Object to register on the Buses
28 | */
29 | void onRegister(Object o);
30 |
31 | /**
32 | * Unregisters a given Object from both Buses
33 | *
34 | * @param o Object to unregister from the Buses
35 | */
36 | void onUnregister(Object o);
37 |
38 | /**
39 | * After checking whether the object being posted is annotated with the {@link Event} Annotation,
40 | * it will be placed in the corresponding queue and such queue will be then sorted by {@link Event.Priority}.
41 | *
42 | * NOTE: if an object being posted has not been annotated with the {@link Event} Annotation it will be disregarded!!!
43 | *
44 | *
45 | * @param o the Object we want to post as an event
46 | */
47 | void onPost(Object o);
48 |
49 | /**
50 | * This method return a string used by {@link EventProcessor} to save the state of the object in configuration changes.
51 | * You should use the string returned by this method with {@code EventDispatcher.loadPoint()}
52 | * This method must be called before {@code EventDispatcher.unregister(...)} (in {@code OnPause(...)} method for example)
53 | *
54 | * NOTE: this string should be saved on instance state in Activity and retrieved when it restart on OnCreate(...) method
55 | *
56 | *
57 | * @param object
58 | * @return
59 | */
60 | String onSavePoint(Object object);
61 |
62 | /**
63 | * This method load the configuration variables used by {@link EventDispatcher} to handle the configuration changes.
64 | * You should use this method in pair with {@code EventDispatcher.savePoint(...)}.
65 | * This method must be called before {@code EventDispatcher.register(...)} (in {@code OnResume(...)} method for example)
66 | *
67 | * @param object
68 | *
69 | */
70 | void onLoadPoint(Object object, String key);
71 | }
72 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 | BusAdapter
19 |
20 |
--------------------------------------------------------------------------------
/baseandroid-busadapter/src/test/java/com/baseandroid/eventdispatcher/busadapter/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.baseandroid.eventdispatcher.busadapter;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | dependencies {
3 | repositories {
4 | mavenCentral()
5 | // serve per org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1
6 | maven { url "https://plugins.gradle.org/m2/" }
7 | maven { url 'https://oss.jfrog.org/libs-snapshot' }
8 | maven { url 'https://dl.bintray.com/sysdata/maven' }
9 | }
10 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
11 | classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1'
12 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
13 | classpath 'com.github.dcendents:android-maven-plugin:1.2'
14 | classpath 'me.tatarka:gradle-retrolambda:3.2.5'
15 | }
16 | }
17 |
18 | apply plugin: 'com.android.library'
19 | apply plugin: 'me.tatarka.retrolambda'
20 |
21 | def libName = 'baseandroid-eventdispatcher'
22 |
23 | android {
24 | compileSdkVersion 23
25 | buildToolsVersion "23.0.3"
26 |
27 | defaultConfig {
28 | minSdkVersion 9
29 | targetSdkVersion 23
30 | versionCode libVersionCode
31 | versionName libVersionName
32 | }
33 |
34 | packagingOptions {
35 | exclude 'LICENSE.txt'
36 | }
37 |
38 | buildTypes {
39 | release {
40 | minifyEnabled false
41 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
42 | }
43 | }
44 | compileOptions {
45 | targetCompatibility 1.7
46 | sourceCompatibility 1.7
47 | }
48 | lintOptions {
49 | abortOnError false
50 | }
51 | }
52 |
53 | dependencies {
54 |
55 | def adapterVersionName = project.ext.libVersionName
56 |
57 | compile fileTree(dir: 'libs', include: ['*.jar'])
58 | testCompile 'junit:junit:4.12'
59 | compile 'com.android.support:appcompat-v7:23.3.0'
60 | //log
61 | compile 'org.slf4j:slf4j-api:1.7.12'
62 | compile 'com.github.tony19:logback-android-core:1.1.1-4'
63 | compile 'com.github.tony19:logback-android-classic:1.1.1-4'
64 | // otto
65 | compile 'com.squareup:otto:1.3.8'
66 |
67 | // BusAdapter
68 | compile "com.baseandroid:baseandroid-busadapter:$adapterVersionName"
69 |
70 | // rxJava
71 | compile 'io.reactivex:rxandroid:1.1.0'
72 | // Because RxAndroid releases are few and far between, it is recommended you also
73 | // explicitly depend on RxJava's latest version for bug fixes and new features.
74 | compile 'io.reactivex:rxjava:1.1.3'
75 | }
76 |
77 | // pubblicazione maven
78 | if(project.rootProject.file('local.properties').exists()) {
79 | Properties properties = new Properties()
80 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
81 | ext {
82 | // GROUP_ID
83 | publishedGroupId = 'com.baseandroid'
84 | // ARTIFACT_ID
85 | artifact = libName
86 | // VERSION_ID
87 | libraryVersion = libVersionName
88 |
89 | developerId = properties.getProperty("bintray.developer.id")
90 | developerName = properties.getProperty("bintray.developer.name")
91 | developerEmail = properties.getProperty("bintray.developer.email")
92 |
93 | bintrayRepo = 'maven'
94 | bintrayName = 'baseandroid-eventdispatcher'
95 | libraryName = 'baseandroid-eventdispatcher'
96 | bintrayOrganization = 'sysdata'
97 | }
98 |
99 | apply from: 'publishBintray.gradle'
100 | }
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Stefano\Sviluppo\ADT_bundle_windows\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/publishBintray.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | jcenter()
4 | mavenCentral()
5 | maven { url 'https://oss.jfrog.org/libs-snapshot' }
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.5.0'
9 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
10 | classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1'
11 | classpath 'me.tatarka:gradle-retrolambda:3.2.5'
12 | }
13 | }
14 |
15 | apply plugin: 'com.android.library'
16 | apply plugin: 'me.tatarka.retrolambda'
17 |
18 | ext {
19 | libraryDescription = ''
20 | siteUrl = ''
21 | gitUrl = ''
22 |
23 | licenseName = 'The Apache Software License, Version 2.0'
24 | licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
25 | allLicenses = ["Apache-2.0"]
26 | }
27 |
28 | //apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
29 | apply plugin: 'com.github.dcendents.android-maven'
30 |
31 | group = publishedGroupId // Maven Group ID for the artifact
32 |
33 | install {
34 | repositories.mavenInstaller {
35 | // This generates POM.xml with proper parameters
36 | pom {
37 | project {
38 | packaging 'aar'
39 | groupId publishedGroupId
40 | artifactId artifact
41 |
42 | // Add your description here
43 | name libraryName
44 | description libraryDescription
45 | url siteUrl
46 |
47 | // Set your license
48 | licenses {
49 | license {
50 | name licenseName
51 | url licenseUrl
52 | }
53 | }
54 | developers {
55 | developer {
56 | id developerId
57 | name developerName
58 | email developerEmail
59 | }
60 | }
61 | scm {
62 | connection gitUrl
63 | developerConnection gitUrl
64 | url siteUrl
65 |
66 | }
67 | }
68 | }
69 | }
70 | }
71 |
72 | //apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
73 | apply plugin: 'com.jfrog.bintray'
74 |
75 | version = libraryVersion
76 |
77 | task sourcesJar(type: Jar) {
78 | // dependsOn = ['test', 'connectedAndroidTest']
79 | from android.sourceSets.main.java.srcDirs
80 | classifier = 'sources'
81 | }
82 |
83 | task javadoc(type: Javadoc) {
84 | // source = android.sourceSets.main.java.srcDirs
85 | // classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
86 | }
87 |
88 | task javadocJar(type: Jar, dependsOn: javadoc) {
89 | classifier = 'javadoc'
90 | from javadoc.destinationDir
91 | }
92 | artifacts {
93 | archives javadocJar
94 | archives sourcesJar
95 | }
96 |
97 | // Bintray
98 | Properties properties = new Properties()
99 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
100 |
101 | bintray {
102 | user = properties.getProperty("bintray.user")
103 | key = properties.getProperty("bintray.apikey")
104 |
105 | configurations = ['archives']
106 | pkg {
107 | repo = bintrayRepo
108 | name = bintrayName
109 | desc = libraryDescription
110 | userOrg = bintrayOrganization
111 | websiteUrl = siteUrl
112 | vcsUrl = gitUrl
113 | licenses = allLicenses
114 | publish = true
115 | publicDownloadNumbers = true
116 | version {
117 | desc = libraryDescription
118 | gpg {
119 | sign = true //Determines whether to GPG sign the files. The default is false
120 | passphrase = properties.getProperty("bintray.gpg.password")
121 | //Optional. The passphrase for GPG signing'
122 | }
123 | }
124 | }
125 | }
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/src/androidTest/java/it/sysdata/eventdispatcher/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package it.sysdata.eventdispatcher;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/src/main/java/com/baseandroid/events/otto/MainThreadBus.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.baseandroid.events.otto;
18 |
19 | import android.os.Handler;
20 | import android.os.Looper;
21 |
22 | import com.squareup.otto.Bus;
23 | import com.squareup.otto.ThreadEnforcer;
24 |
25 | /**
26 | * Created by Enrico Tibaldi on 22/10/2015.
27 | * This {@link Bus} makes sure that events are always posted on the Main Thread
28 | * (useful to avoid crashes for event posted to the UI).
29 | * If {@link MainThreadBus#post(Object)} is called from a different thread,
30 | * (Looper.myLooper() == Looper.getMainLooper()) will return false, and the event
31 | * is delegated to an {@link Handler} running on the Main Thread.
32 | */
33 | public class MainThreadBus extends Bus {
34 | private final Handler mHandler = new Handler(Looper.getMainLooper());
35 |
36 | public MainThreadBus() {
37 | super(ThreadEnforcer.MAIN);
38 | }
39 |
40 | @Override
41 | public void post(final Object event) {
42 | if (Looper.myLooper() == Looper.getMainLooper()) {
43 | super.post(event);
44 | } else {
45 | mHandler.post(() -> MainThreadBus.super.post(event));
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/baseandroid-eventdispatcher/src/main/java/com/baseandroid/events/otto/OttoEventProcessor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Sysdata Digital, S.r.l.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.baseandroid.events.otto;
18 |
19 | import com.baseandroid.events.Event;
20 | import com.baseandroid.events.EventProcessor;
21 | import com.squareup.otto.Bus;
22 | import com.squareup.otto.DeadEvent;
23 | import com.squareup.otto.Subscribe;
24 | import com.squareup.otto.ThreadEnforcer;
25 |
26 | import org.slf4j.Logger;
27 | import org.slf4j.LoggerFactory;
28 |
29 | import java.util.ArrayList;
30 | import java.util.Collections;
31 | import java.util.List;
32 | import java.util.concurrent.TimeUnit;
33 |
34 | import rx.android.schedulers.AndroidSchedulers;
35 | import rx.schedulers.Schedulers;
36 |
37 | /**
38 | * Class managing the events used throughout the application.
39 | *
40 | * This class defines two {@link Bus}es:
41 | *
42 | *
{@link #BUS}: a Bus working on a thread separated by the Android Main Thread
43 | *
{@link #UI_BUS}: a Bus working on the Android Main Thread
44 | *
45 | *
46 | *
47 | * Events are stored in queues depending on their {@link Event.Type} and these queues are checked periodically in a specific order:
48 | *
49 | *
UI
50 | *
NETWORK
51 | *
DATA
52 | *
GENERIC
53 | *
CONTEXT
54 | *
55 | *
56 | *
57 | * If an Event is not caught by anybody, it will eventually be caught by the {@link DeadEventManager},
58 | * which will do nothing more than log that an event has not been managed.
59 | *
60 | *
61 | * @author Stefano Ciarcia'
62 | * created on 22/07/2015.
63 | */
64 | public final class OttoEventProcessor implements EventProcessor {
65 |
66 | /**
67 | * Bus working on the Android Main Thread
68 | */
69 | public static final Bus UI_BUS = new MainThreadBus();
70 | private static final Logger LOGGER = LoggerFactory.getLogger(OttoEventProcessor.class);
71 |
72 | /**
73 | * Defines the time interval (in milliseconds) used to poll the event queues
74 | */
75 | private static final long EVENT_CONSUMPTION_INTERVAL = 10; // 10ms
76 |
77 | /**
78 | * Bus working on a thread separated by the Android Main Thread
79 | */
80 | private static final Bus BUS = new Bus(ThreadEnforcer.ANY);
81 | /**
82 | * flag used to determine whether this EventDispatcher has been initialised
83 | */
84 | private static boolean mInitialised = false;
85 | /**
86 | * Synchronized Queues of NETWORK events
87 | */
88 | private static List