From 56fb4b2945d9289d68b9bcc3229cec9d0e6bc622 Mon Sep 17 00:00:00 2001 From: isra el Date: Wed, 28 May 2025 12:34:08 +0300 Subject: [PATCH] fix(android): improve device registration and update logic --- .../vernu/sms/activities/MainActivity.java | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java b/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java index 67c5f39..b9c2800 100644 --- a/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java +++ b/android/app/src/main/java/com/vernu/sms/activities/MainActivity.java @@ -151,7 +151,14 @@ public class MainActivity extends AppCompatActivity { }); // TODO: check gateway status/api key/device validity and update UI accordingly - registerDeviceBtn.setOnClickListener(view -> handleRegisterDevice()); + registerDeviceBtn.setOnClickListener(view -> { + String _deviceId = SharedPreferenceHelper.getSharedPreferenceString(mContext, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, ""); + if (_deviceId == null || _deviceId.isEmpty()) { + handleRegisterDevice(); + } else { + handleUpdateDevice(); + } + }); scanQRBtn.setOnClickListener(view -> { IntentIntegrator intentIntegrator = new IntentIntegrator(MainActivity.this); intentIntegrator.setPrompt("Go to textbee.dev/dashboard and click Register Device to generate QR Code"); @@ -278,6 +285,63 @@ public class MainActivity extends AppCompatActivity { }); } + private void handleUpdateDevice() { + String apiKey = apiKeyEditText.getText().toString(); + registerDeviceBtn.setEnabled(false); + registerDeviceBtn.setText("Loading..."); + View view = findViewById(R.id.registerDeviceBtn); + + FirebaseMessaging.getInstance().getToken() + .addOnCompleteListener(task -> { + if (!task.isSuccessful()) { + Snackbar.make(view, "Failed to obtain FCM Token :(", Snackbar.LENGTH_LONG).show(); + registerDeviceBtn.setEnabled(true); + registerDeviceBtn.setText("Update"); + return; + } + String token = task.getResult(); + fcmTokenEditText.setText(token); + + RegisterDeviceInputDTO updateDeviceInput = new RegisterDeviceInputDTO(); + updateDeviceInput.setEnabled(true); + updateDeviceInput.setFcmToken(token); + updateDeviceInput.setBrand(Build.BRAND); + updateDeviceInput.setManufacturer(Build.MANUFACTURER); + updateDeviceInput.setModel(Build.MODEL); + updateDeviceInput.setBuildId(Build.ID); + updateDeviceInput.setOs(Build.VERSION.BASE_OS); + updateDeviceInput.setAppVersionCode(BuildConfig.VERSION_CODE); + updateDeviceInput.setAppVersionName(BuildConfig.VERSION_NAME); + + Call apiCall = ApiManager.getApiService().updateDevice(deviceId, apiKey, updateDeviceInput); + apiCall.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Log.d(TAG, response.toString()); + if (!response.isSuccessful()) { + Snackbar.make(view, response.message(), Snackbar.LENGTH_LONG).show(); + registerDeviceBtn.setEnabled(true); + registerDeviceBtn.setText("Update"); + return; + } + SharedPreferenceHelper.setSharedPreferenceString(mContext, AppConstants.SHARED_PREFS_API_KEY_KEY, apiKey); + Snackbar.make(view, "Device Updated Successfully :)", Snackbar.LENGTH_LONG).show(); + registerDeviceBtn.setEnabled(true); + registerDeviceBtn.setText("Update"); + } + + @Override + public void onFailure(Call call, Throwable t) { + Snackbar.make(view, "An error occurred :(", Snackbar.LENGTH_LONG).show(); + Log.e(TAG, "API_ERROR "+ t.getMessage()); + Log.e(TAG, "API_ERROR "+ t.getLocalizedMessage()); + registerDeviceBtn.setEnabled(true); + registerDeviceBtn.setText("Update"); + } + }); + }); + } + private void handleRequestPermissions(View view) { boolean allPermissionsGranted = Arrays.stream(AppConstants.requiredPermissions).allMatch(permission -> TextBeeUtils.isPermissionGranted(mContext, permission)); if (allPermissionsGranted) {