@@ -151,7 +151,14 @@ public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) {
151151 });
152152
153153 // TODO: check gateway status/api key/device validity and update UI accordingly
154- registerDeviceBtn .setOnClickListener (view -> handleRegisterDevice ());
154+ registerDeviceBtn .setOnClickListener (view -> {
155+ String _deviceId = SharedPreferenceHelper .getSharedPreferenceString (mContext , AppConstants .SHARED_PREFS_DEVICE_ID_KEY , "" );
156+ if (_deviceId == null || _deviceId .isEmpty ()) {
157+ handleRegisterDevice ();
158+ } else {
159+ handleUpdateDevice ();
160+ }
161+ });
155162 scanQRBtn .setOnClickListener (view -> {
156163 IntentIntegrator intentIntegrator = new IntentIntegrator (MainActivity .this );
157164 intentIntegrator .setPrompt ("Go to textbee.dev/dashboard and click Register Device to generate QR Code" );
@@ -278,6 +285,63 @@ public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) {
278285 });
279286 }
280287
288+ private void handleUpdateDevice () {
289+ String apiKey = apiKeyEditText .getText ().toString ();
290+ registerDeviceBtn .setEnabled (false );
291+ registerDeviceBtn .setText ("Loading..." );
292+ View view = findViewById (R .id .registerDeviceBtn );
293+
294+ FirebaseMessaging .getInstance ().getToken ()
295+ .addOnCompleteListener (task -> {
296+ if (!task .isSuccessful ()) {
297+ Snackbar .make (view , "Failed to obtain FCM Token :(" , Snackbar .LENGTH_LONG ).show ();
298+ registerDeviceBtn .setEnabled (true );
299+ registerDeviceBtn .setText ("Update" );
300+ return ;
301+ }
302+ String token = task .getResult ();
303+ fcmTokenEditText .setText (token );
304+
305+ RegisterDeviceInputDTO updateDeviceInput = new RegisterDeviceInputDTO ();
306+ updateDeviceInput .setEnabled (true );
307+ updateDeviceInput .setFcmToken (token );
308+ updateDeviceInput .setBrand (Build .BRAND );
309+ updateDeviceInput .setManufacturer (Build .MANUFACTURER );
310+ updateDeviceInput .setModel (Build .MODEL );
311+ updateDeviceInput .setBuildId (Build .ID );
312+ updateDeviceInput .setOs (Build .VERSION .BASE_OS );
313+ updateDeviceInput .setAppVersionCode (BuildConfig .VERSION_CODE );
314+ updateDeviceInput .setAppVersionName (BuildConfig .VERSION_NAME );
315+
316+ Call <RegisterDeviceResponseDTO > apiCall = ApiManager .getApiService ().updateDevice (deviceId , apiKey , updateDeviceInput );
317+ apiCall .enqueue (new Callback <RegisterDeviceResponseDTO >() {
318+ @ Override
319+ public void onResponse (Call <RegisterDeviceResponseDTO > call , Response <RegisterDeviceResponseDTO > response ) {
320+ Log .d (TAG , response .toString ());
321+ if (!response .isSuccessful ()) {
322+ Snackbar .make (view , response .message (), Snackbar .LENGTH_LONG ).show ();
323+ registerDeviceBtn .setEnabled (true );
324+ registerDeviceBtn .setText ("Update" );
325+ return ;
326+ }
327+ SharedPreferenceHelper .setSharedPreferenceString (mContext , AppConstants .SHARED_PREFS_API_KEY_KEY , apiKey );
328+ Snackbar .make (view , "Device Updated Successfully :)" , Snackbar .LENGTH_LONG ).show ();
329+ registerDeviceBtn .setEnabled (true );
330+ registerDeviceBtn .setText ("Update" );
331+ }
332+
333+ @ Override
334+ public void onFailure (Call <RegisterDeviceResponseDTO > call , Throwable t ) {
335+ Snackbar .make (view , "An error occurred :(" , Snackbar .LENGTH_LONG ).show ();
336+ Log .e (TAG , "API_ERROR " + t .getMessage ());
337+ Log .e (TAG , "API_ERROR " + t .getLocalizedMessage ());
338+ registerDeviceBtn .setEnabled (true );
339+ registerDeviceBtn .setText ("Update" );
340+ }
341+ });
342+ });
343+ }
344+
281345 private void handleRequestPermissions (View view ) {
282346 boolean allPermissionsGranted = Arrays .stream (AppConstants .requiredPermissions ).allMatch (permission -> TextBeeUtils .isPermissionGranted (mContext , permission ));
283347 if (allPermissionsGranted ) {
0 commit comments