-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSplashActivity.java
More file actions
311 lines (257 loc) · 12.8 KB
/
SplashActivity.java
File metadata and controls
311 lines (257 loc) · 12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
package com.flybits.samples.context;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.flybits.core.api.Flybits;
import com.flybits.core.api.context.plugins.AvailablePlugins;
import com.flybits.core.api.context.plugins.fitness.FitnessProvider;
import com.flybits.core.api.context.v2.ContextManager;
import com.flybits.core.api.context.v2.FlybitsContextPlugin;
import com.flybits.core.api.exceptions.FeatureNotSupportedException;
import com.flybits.core.api.interfaces.IRequestCallback;
import com.flybits.core.api.interfaces.IRequestLoggedIn;
import com.flybits.core.api.models.User;
import com.flybits.core.api.utils.filters.LoginOptions;
import com.flybits.samples.context.utilities.ConnectivityUtils;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.fitness.Fitness;
public class SplashActivity extends AppCompatActivity {
private final int MY_PERMISSIONS_REQUEST_READ_LOCATION = 10;
//Need For Fitness Context Plugin
private GoogleApiClient mGoogleApiClient;
private boolean isLoggedIn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
/*
Initialize GoogleApiClient and Connect to it. This is only needed for the Fitness Context Plugin.
IMPORTANT NOTE: Make sure you register your application (even this sample) with
https://developers.google.com/fit/android/get-api-key . Without it your application and
this sample will not be able to be used. You do not need to add the Client ID anywhere but
the application will need to be registered through Google's API Console.
*/
initGooglePlayServices();
mGoogleApiClient.connect();
//Check that Location permissions have been granted. This is only needed for Location/Beacon Context Plugin.
checkForLoginPermissions();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
private void checkForLoginPermissions() {
if (Build.VERSION.SDK_INT < 23) {
//Device SDK is less 6.0 therefore permissions do not need to be asked for specifically.
checkIfUserIsAlreadyLoggedIn(true);
} else {
if (ContextCompat.checkSelfPermission(SplashActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
//Request the location permission as the User has not yet granted it to the application.
ActivityCompat.requestPermissions(SplashActivity.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
MY_PERMISSIONS_REQUEST_READ_LOCATION);
} else if (ContextCompat.checkSelfPermission(SplashActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
//User has already granted the location permission in a previous session.
checkIfUserIsAlreadyLoggedIn(true);
}
}
}
private void initGooglePlayServices() {
//Initialize GoogleApiClient for Fitness ContextPlugin -> Fitness.HISTORY_API & Scopes.FITNESS_ACTIVITY_READ_WRITE are mandatory.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.d("Testing", "You Are Connected!");
if (!isLoggedIn) {
isLoggedIn = true;
try {
FitnessProvider provider8 = new FitnessProvider(SplashActivity.this, 60000);
Flybits.include(SplashActivity.this).activateContext(mGoogleApiClient, provider8);
}catch (FeatureNotSupportedException exception){}
}
}
@Override
public void onConnectionSuspended(int i) {
Log.d("Testing", "onConnectionSuspended: " + i);
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d("Testing", "onConnectionFailed: " + connectionResult);
}
})
.enableAutoManage(this, 0, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d("Testing", "onConnectionFailed: " + result.getErrorMessage());
}
})
.build();
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_LOCATION: {
//Confirm the user has given permission for location to the application.
boolean isLocationActivated = (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED);
checkIfUserIsAlreadyLoggedIn(isLocationActivated);
return;
}
}
}
private void checkIfUserIsAlreadyLoggedIn(final boolean isLocationActivated) {
//Confirm that the user is currently connected to the Internet.
if (ConnectivityUtils.isOnline(this)) {
//Check to see if the application is already logged in. If so, there is no need to already login.
Flybits.include(SplashActivity.this).isUserLoggedIn(true, new IRequestLoggedIn() {
@Override
public void onLoggedIn(User user) {
/*
User is already logged in therefore, the application should activate context.
This must be done after the application has logged in.
*/
activateContextPlugins(isLocationActivated);
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onNotLoggedIn() {
//The application is not logged in therefore log the application in.
startLogin(isLocationActivated);
}
});
} else {
//No Internet is currently available hence display an error.
showAlertDialog(R.string.errorTitleNoInternet, R.string.errorMessageNoInternet, R.string.errorBtnPositive);
}
}
private void startLogin(final boolean isLocationActivated) {
//Log the application into Flybits anonymously
LoginOptions filterLogin = new LoginOptions.Builder(SplashActivity.this)
.loginAnonymously()
.setDeviceOSVersion()
.build();
Flybits.include(SplashActivity.this).login(filterLogin, new IRequestCallback<User>() {
@Override
public void onSuccess(User me) {
/*
User is already logged in therefore, the application should activate context.
This must be done after the application has logged in.
*/
activateContextPlugins(isLocationActivated);
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onFailed(String s) {}
@Override
public void onException(Exception e) {
showAlertDialog(getString(R.string.errorTitleLogin), e.getMessage(), getString(R.string.errorBtnPositive));
}
@Override
public void onCompleted() {}
});
}
private void activateContextPlugins(final boolean isLocationActivated){
FlybitsContextPlugin pluginActivity = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.ACTIVITY)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginBattery = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.BATTERY)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginCarrier = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.CARRIER)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginLanguage = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.LANGUAGE)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginNetwork = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.NETWORK_CONNECTIVITY)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginLocation = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.LOCATION)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
FlybitsContextPlugin pluginFitness = new FlybitsContextPlugin.Builder()
.setPlugin(AvailablePlugins.FITNESS)
.setRefreshTime(60)
.setRefreshTimeFlex(60)
.build();
ContextManager.include(SplashActivity.this).register(pluginActivity);
ContextManager.include(SplashActivity.this).register(pluginBattery);
ContextManager.include(SplashActivity.this).register(pluginCarrier);
ContextManager.include(SplashActivity.this).register(pluginLanguage);
ContextManager.include(SplashActivity.this).register(pluginNetwork);
if (isLocationActivated){
ContextManager.include(SplashActivity.this).register(pluginLocation);
}
//Only Allow Fitness Providers if the user has successfully connected to GoogleApiClient
if (mGoogleApiClient != null && mGoogleApiClient.isConnected() && !isLoggedIn){
isLoggedIn = true;
ContextManager.include(SplashActivity.this).register(pluginFitness);
}
}
private void showAlertDialog(int title, int message, int buttonPositive){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SplashActivity.this);
alertDialogBuilder.setTitle(title);
alertDialogBuilder
.setMessage(message)
.setCancelable(false)
.setPositiveButton(buttonPositive, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SplashActivity.this.finish();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
private void showAlertDialog(String title, String message, String buttonPositive){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SplashActivity.this);
alertDialogBuilder.setTitle(title);
alertDialogBuilder
.setMessage(message)
.setCancelable(false)
.setPositiveButton(buttonPositive, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SplashActivity.this.finish();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}