Skip to content

Commit 5fcb925

Browse files
committed
Feature: Notification support and handling.
App will notify users in case of the following events: - Node is connected or disconnected. - A new node is added. - Node is removed. - Received new sharing request. - Sharing of devices is accepted or declined. - Any alerts from node. Notifications are saved locally to be displayed in notification screen. Device parameters are also updated instantly when app will receive an event.
1 parent f725633 commit 5fcb925

38 files changed

+2219
-180
lines changed

.gitignore

-3
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ captures/
4949
# External native build folder generated in Android Studio 2.2 and later
5050
.externalNativeBuild
5151

52-
# Google Services (e.g. APIs or Firebase)
53-
google-services.json
54-
5552
# Freeline
5653
freeline.py
5754
freeline/

app/build.gradle

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
apply plugin: 'com.android.application'
22
apply plugin: 'com.google.protobuf'
3+
apply plugin: 'com.google.gms.google-services'
4+
apply plugin: 'com.google.firebase.crashlytics'
35

46
def getGitHash = { ->
57
def stdout = new ByteArrayOutputStream()
@@ -42,8 +44,8 @@ android {
4244
applicationId "com.espressif.rainmaker"
4345
minSdkVersion 23
4446
targetSdkVersion 30
45-
versionCode 29
46-
versionName "2.3.1 - ${getGitHash()}"
47+
versionCode 34
48+
versionName "2.4.0 - ${getGitHash()}"
4749
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4850

4951
buildConfigField "String", "GitHash", "\"${getGitHash()}\""
@@ -187,6 +189,16 @@ dependencies {
187189
implementation "android.arch.persistence.room:runtime:$room_version"
188190
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
189191

192+
def work_version = "2.5.0"
193+
implementation "androidx.work:work-runtime:$work_version"
194+
195+
// Import the BoM for the Firebase platform
196+
implementation platform('com.google.firebase:firebase-bom:28.4.0')
197+
implementation 'com.google.firebase:firebase-messaging'
198+
implementation 'com.google.firebase:firebase-analytics'
199+
implementation 'com.google.firebase:firebase-crashlytics'
200+
implementation 'com.google.android.gms:play-services-gcm:17.0.0'
201+
190202
testImplementation 'junit:junit:4.13.2'
191203
androidTestImplementation 'androidx.test:runner:1.4.0'
192204
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

app/google-services.json

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"project_info": {
3+
"project_number": "847141165224",
4+
"firebase_url": "https://esp-rainmaker.firebaseio.com",
5+
"project_id": "esp-rainmaker",
6+
"storage_bucket": "esp-rainmaker.appspot.com"
7+
},
8+
"client": [
9+
{
10+
"client_info": {
11+
"mobilesdk_app_id": "1:847141165224:android:631c1ad4f87e52e8264a9d",
12+
"android_client_info": {
13+
"package_name": "com.espressif.rainmaker"
14+
}
15+
},
16+
"oauth_client": [
17+
{
18+
"client_id": "847141165224-mfdjg1ju1r4t499gpc6bbb20vu35diaq.apps.googleusercontent.com",
19+
"client_type": 3
20+
}
21+
],
22+
"api_key": [
23+
{
24+
"current_key": "AIzaSyD03vVsPOFIaUc61aJrTpDg5Pd1Y4lIzgI"
25+
}
26+
],
27+
"services": {
28+
"appinvite_service": {
29+
"other_platform_oauth_client": [
30+
{
31+
"client_id": "847141165224-mfdjg1ju1r4t499gpc6bbb20vu35diaq.apps.googleusercontent.com",
32+
"client_type": 3
33+
}
34+
]
35+
}
36+
}
37+
}
38+
],
39+
"configuration_version": "1"
40+
}

app/src/main/AndroidManifest.xml

+11-1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@
7070
</intent-filter>
7171
</activity>
7272

73+
<service
74+
android:name="com.espressif.EspFcmService"
75+
android:exported="false">
76+
<intent-filter>
77+
<action android:name="com.google.firebase.MESSAGING_EVENT" />
78+
</intent-filter>
79+
</service>
80+
7381
<activity
7482
android:name="com.espressif.ui.activities.ProvisionLanding"
7583
android:label="@string/title_activity_provision_landing"
@@ -168,7 +176,7 @@
168176
android:screenOrientation="portrait"
169177
android:theme="@style/AppTheme.NoActionBar" />
170178
<activity
171-
android:name="com.espressif.ui.activities.SharingRequestsActivity"
179+
android:name="com.espressif.ui.activities.NotificationsActivity"
172180
android:label="@string/title_activity_sharing_requests"
173181
android:screenOrientation="portrait"
174182
android:theme="@style/AppTheme.NoActionBar" />
@@ -178,6 +186,8 @@
178186
android:screenOrientation="portrait"
179187
android:theme="@style/AppTheme.NoActionBar" />
180188

189+
<receiver android:name="com.espressif.NodeSharingActionReceiver" />
190+
181191
</application>
182192

183193
</manifest>

app/src/main/java/com/espressif/AppConstants.java

+37-1
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@ public class AppConstants {
3434
public static final String ESP_DATABASE_NAME = "esp_db";
3535
public static final String NODE_TABLE = "node_table";
3636
public static final String GROUP_TABLE = "group_table";
37+
public static final String NOTIFICATION_TABLE = "notification_table";
3738
public static final String MDNS_SERVICE_TYPE = "_esp_local_ctrl._tcp.";
3839
public static final String LOCAL_CONTROL_PATH = "esp_local_ctrl/control";
3940

4041
public enum UpdateEventType {
4142

4243
EVENT_DEVICE_ADDED,
4344
EVENT_DEVICE_REMOVED,
45+
EVENT_DEVICE_ONLINE,
46+
EVENT_DEVICE_OFFLINE,
4447
EVENT_ADD_DEVICE_TIME_OUT,
4548
EVENT_DEVICE_STATUS_UPDATE,
4649
EVENT_STATE_CHANGE_UPDATE,
@@ -115,7 +118,6 @@ public enum UpdateEventType {
115118
public static final String PARAM_TYPE_NAME = "esp.param.name";
116119
public static final String PARAM_TYPE_CCT = "esp.param.cct";
117120
public static final String PARAM_TYPE_POWER = "esp.param.power";
118-
public static final String PARAM_TYPE_OUTPUT = "esp.param.output";
119121
public static final String PARAM_TYPE_SATURATION = "esp.param.saturation";
120122
public static final String PARAM_TYPE_BRIGHTNESS = "esp.param.brightness";
121123
public static final String PARAM_TYPE_TEMPERATURE = "esp.param.temperature";
@@ -140,6 +142,11 @@ public enum UpdateEventType {
140142
public static final String KEY_SHOULD_SAVE_PWD = "save_password";
141143
public static final String KEY_NEW_PASSWORD = "newpassword";
142144
public static final String KEY_VERIFICATION_CODE = "verification_code";
145+
public static final String KEY_MOBILE_DEVICE_TOKEN = "mobile_device_token";
146+
public static final String KEY_PLATFORM = "platform";
147+
public static final String KEY_GCM = "GCM";
148+
public static final String KEY_MESSAGE_BODY = "message_body";
149+
public static final String KEY_ALERT_STRING = "esp.alert.str";
143150

144151
// Keys used in JSON responses and used to pass data between activities.
145152
public static final String KEY_NAME = "name";
@@ -212,12 +219,21 @@ public enum UpdateEventType {
212219
public static final String KEY_NEXT_REQ_ID = "next_request_id";
213220
public static final String KEY_NEXT_USER_NAME = "next_user_name";
214221
public static final String KEY_PRIMARY_USER_NAME = "primary_user_name";
222+
public static final String KEY_SECONDARY_USER_NAME = "secondary_user_name";
215223
public static final String KEY_USER_NAME = "user_name";
216224
public static final String KEY_REQ_ACCEPT = "accept";
217225
public static final String KEY_SHARING_REQUESTS = "sharing_requests";
218226
public static final String KEY_METADATA = "metadata";
219227
public static final String KEY_START_ID = "start_id";
220228
public static final String KEY_NEXT_ID = "next_id";
229+
public static final String KEY_EVENT_VERSION = "event_version";
230+
public static final String KEY_EVENT_TYPE = "event_type";
231+
public static final String KEY_EVENT_DATA = "event_data";
232+
public static final String KEY_TITLE = "title";
233+
public static final String KEY_BODY = "body";
234+
public static final String KEY_EVENT_DATA_PAYLOAD = "event_data_payload";
235+
public static final String KEY_NOTIFICATION_MSG = "notification_msg";
236+
public static final String KEY_PAYLOAD = "payload";
221237

222238
public static final String KEY_OPERATION = "operation";
223239
public static final String KEY_OPERATION_ADD = "add";
@@ -241,4 +257,24 @@ public enum UpdateEventType {
241257

242258
public static final String WIFI_SCAN_FROM_DEVICE = "Device";
243259
public static final String WIFI_SCAN_FROM_PHONE = "Phone";
260+
261+
// Event types
262+
public static final String EVENT_NODE_CONNECTED = "rmaker.event.node_connected";
263+
public static final String EVENT_NODE_DISCONNECTED = "rmaker.event.node_disconnected";
264+
public static final String EVENT_NODE_ADDED = "rmaker.event.user_node_added";
265+
public static final String EVENT_NODE_REMOVED = "rmaker.event.user_node_removed";
266+
public static final String EVENT_NODE_SHARING_ADD = "rmaker.event.user_node_sharing_add";
267+
public static final String EVENT_NODE_PARAM_MODIFIED = "rmaker.event.node_params_changed";
268+
public static final String EVENT_ALERT = "rmaker.event.alert";
269+
270+
// Notification channel IDs
271+
public static final String CHANNEL_NODE_ONLINE_ID = "notify_node_online_id";
272+
public static final String CHANNEL_NODE_OFFLINE_ID = "notify_node_offline_id";
273+
public static final String CHANNEL_NODE_ADDED = "notify_node_added_id";
274+
public static final String CHANNEL_NODE_REMOVED = "notify_node_removed_id";
275+
public static final String CHANNEL_ALERT = "notify_alert_id";
276+
public static final String CHANNEL_NODE_SHARING = "notify_node_sharing_id";
277+
278+
public static final String ACTION_ACCEPT = "com.espressif.rainmaker.ACTION_ACCEPT";
279+
public static final String ACTION_DECLINE = "com.espressif.rainmaker.ACTION_DECLINE";
244280
}

0 commit comments

Comments
 (0)