|
|
|
@ -1,12 +1,14 @@ |
|
|
|
package com.vernu.sms.activities; |
|
|
|
|
|
|
|
import androidx.annotation.NonNull; |
|
|
|
import androidx.annotation.Nullable; |
|
|
|
import androidx.appcompat.app.AppCompatActivity; |
|
|
|
import androidx.core.app.ActivityCompat; |
|
|
|
import androidx.core.content.ContextCompat; |
|
|
|
|
|
|
|
import android.Manifest; |
|
|
|
import android.content.Context; |
|
|
|
import android.content.Intent; |
|
|
|
import android.content.pm.PackageManager; |
|
|
|
import android.os.Build; |
|
|
|
import android.os.Bundle; |
|
|
|
@ -22,10 +24,12 @@ import com.google.android.gms.tasks.OnCompleteListener; |
|
|
|
import com.google.android.gms.tasks.Task; |
|
|
|
import com.google.android.material.snackbar.Snackbar; |
|
|
|
import com.google.firebase.messaging.FirebaseMessaging; |
|
|
|
import com.vernu.sms.GatewayApiService; |
|
|
|
import com.google.zxing.integration.android.IntentIntegrator; |
|
|
|
import com.google.zxing.integration.android.IntentResult; |
|
|
|
import com.vernu.sms.services.GatewayApiService; |
|
|
|
import com.vernu.sms.R; |
|
|
|
import com.vernu.sms.dtos.UpdateDeviceInputDTO; |
|
|
|
import com.vernu.sms.dtos.UpdateDeviceResponseDTO; |
|
|
|
import com.vernu.sms.dtos.RegisterDeviceInputDTO; |
|
|
|
import com.vernu.sms.dtos.RegisterDeviceResponseDTO; |
|
|
|
import com.vernu.sms.helpers.SharedPreferenceHelper; |
|
|
|
|
|
|
|
import retrofit2.Call; |
|
|
|
@ -41,28 +45,38 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
private GatewayApiService gatewayApiService; |
|
|
|
|
|
|
|
private Switch gatewaySwitch; |
|
|
|
private EditText gatewayKeyEditText, fcmTokenEditText; |
|
|
|
private Button updateKeyButton, grantSMSPermissionBtn; |
|
|
|
private EditText apiKeyEditText, fcmTokenEditText; |
|
|
|
private Button registerDeviceBtn, grantSMSPermissionBtn, scanQRBtn; |
|
|
|
|
|
|
|
private static final int SEND_SMS_PERMISSION_REQUEST_CODE = 0; |
|
|
|
private static final int SCAN_QR_REQUEST_CODE = 49374; |
|
|
|
|
|
|
|
private static final String API_BASE_URL = "https://vernu-sms.herokuapp.com/api/v1/"; |
|
|
|
|
|
|
|
private String deviceId = null; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
|
super.onCreate(savedInstanceState); |
|
|
|
|
|
|
|
mContext = getApplicationContext(); |
|
|
|
|
|
|
|
retrofit = new Retrofit.Builder() |
|
|
|
.baseUrl("https://vernu-sms.herokuapp.com/api/v1/") |
|
|
|
.baseUrl(API_BASE_URL) |
|
|
|
.addConverterFactory(GsonConverterFactory.create()) |
|
|
|
.build(); |
|
|
|
gatewayApiService = retrofit.create(GatewayApiService.class); |
|
|
|
|
|
|
|
deviceId = SharedPreferenceHelper.getSharedPreferenceString(mContext, "DEVICE_ID", ""); |
|
|
|
|
|
|
|
setContentView(R.layout.activity_main); |
|
|
|
gatewaySwitch = findViewById(R.id.gatewaySwitch); |
|
|
|
gatewayKeyEditText = findViewById(R.id.gatewayKeyEditText); |
|
|
|
apiKeyEditText = findViewById(R.id.apiKeyEditText); |
|
|
|
fcmTokenEditText = findViewById(R.id.fcmTokenEditText); |
|
|
|
updateKeyButton = findViewById(R.id.updateKeyButton); |
|
|
|
registerDeviceBtn = findViewById(R.id.registerDeviceBtn); |
|
|
|
grantSMSPermissionBtn = findViewById(R.id.grantSMSPermissionBtn); |
|
|
|
scanQRBtn = findViewById(R.id.scanQRButton); |
|
|
|
|
|
|
|
if (isSMSPermissionGranted(mContext)) { |
|
|
|
grantSMSPermissionBtn.setEnabled(false); |
|
|
|
@ -77,7 +91,7 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
gatewayKeyEditText.setText(SharedPreferenceHelper.getSharedPreferenceString(mContext, "GATEWAY_KEY", "")); |
|
|
|
apiKeyEditText.setText(SharedPreferenceHelper.getSharedPreferenceString(mContext, "API_KEY", "")); |
|
|
|
|
|
|
|
gatewaySwitch.setChecked(SharedPreferenceHelper.getSharedPreferenceBoolean(mContext, "GATEWAY_ENABLED", false)); |
|
|
|
gatewaySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { |
|
|
|
@ -85,16 +99,16 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
public void onCheckedChanged(CompoundButton compoundButton, boolean isCheked) { |
|
|
|
View view = compoundButton.getRootView(); |
|
|
|
compoundButton.setEnabled(false); |
|
|
|
String key = gatewayKeyEditText.getText().toString(); |
|
|
|
String key = apiKeyEditText.getText().toString(); |
|
|
|
|
|
|
|
|
|
|
|
UpdateDeviceInputDTO updateDeviceInput = new UpdateDeviceInputDTO(); |
|
|
|
updateDeviceInput.setEnabled(isCheked); |
|
|
|
RegisterDeviceInputDTO registerDeviceInput = new RegisterDeviceInputDTO(); |
|
|
|
registerDeviceInput.setEnabled(isCheked); |
|
|
|
|
|
|
|
Call<UpdateDeviceResponseDTO> apiCall = gatewayApiService.updateDevice(key, updateDeviceInput); |
|
|
|
apiCall.enqueue(new Callback<UpdateDeviceResponseDTO>() { |
|
|
|
Call<RegisterDeviceResponseDTO> apiCall = gatewayApiService.updateDevice(deviceId, key, registerDeviceInput); |
|
|
|
apiCall.enqueue(new Callback<RegisterDeviceResponseDTO>() { |
|
|
|
@Override |
|
|
|
public void onResponse(Call<UpdateDeviceResponseDTO> call, Response<UpdateDeviceResponseDTO> response) { |
|
|
|
public void onResponse(Call<RegisterDeviceResponseDTO> call, Response<RegisterDeviceResponseDTO> response) { |
|
|
|
|
|
|
|
if (response.isSuccessful()) { |
|
|
|
SharedPreferenceHelper.setSharedPreferenceBoolean(mContext, "GATEWAY_ENABLED", isCheked); |
|
|
|
@ -108,7 +122,7 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onFailure(Call<UpdateDeviceResponseDTO> call, Throwable t) { |
|
|
|
public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) { |
|
|
|
Snackbar.make(view, "An error occured :(", Snackbar.LENGTH_LONG).show(); |
|
|
|
compoundButton.setEnabled(true); |
|
|
|
|
|
|
|
@ -119,65 +133,21 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
updateKeyButton.setOnClickListener(new View.OnClickListener() { |
|
|
|
registerDeviceBtn.setOnClickListener(new View.OnClickListener() { |
|
|
|
@Override |
|
|
|
public void onClick(View view) { |
|
|
|
String newKey = gatewayKeyEditText.getText().toString(); |
|
|
|
updateKeyButton.setEnabled(false); |
|
|
|
updateKeyButton.setText("Loading..."); |
|
|
|
|
|
|
|
FirebaseMessaging.getInstance().getToken() |
|
|
|
.addOnCompleteListener(new OnCompleteListener<String>() { |
|
|
|
@Override |
|
|
|
public void onComplete(@NonNull Task<String> task) { |
|
|
|
if (!task.isSuccessful()) { |
|
|
|
Snackbar.make(view, "Failed to obtain FCM Token :(", Snackbar.LENGTH_LONG).show(); |
|
|
|
updateKeyButton.setEnabled(true); |
|
|
|
updateKeyButton.setText("Update"); |
|
|
|
return; |
|
|
|
} |
|
|
|
String token = task.getResult(); |
|
|
|
fcmTokenEditText.setText(token); |
|
|
|
|
|
|
|
UpdateDeviceInputDTO updateDeviceInput = new UpdateDeviceInputDTO(); |
|
|
|
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); |
|
|
|
|
|
|
|
|
|
|
|
Call<UpdateDeviceResponseDTO> apiCall = gatewayApiService.updateDevice(newKey, updateDeviceInput); |
|
|
|
apiCall.enqueue(new Callback<UpdateDeviceResponseDTO>() { |
|
|
|
@Override |
|
|
|
public void onResponse(Call<UpdateDeviceResponseDTO> call, Response<UpdateDeviceResponseDTO> response) { |
|
|
|
|
|
|
|
if (response.isSuccessful()) { |
|
|
|
SharedPreferenceHelper.setSharedPreferenceString(mContext, "GATEWAY_KEY", newKey); |
|
|
|
Log.e("API_RESP", response.toString()); |
|
|
|
Snackbar.make(view, "DONE :)", Snackbar.LENGTH_LONG).show(); |
|
|
|
|
|
|
|
} else { |
|
|
|
Snackbar.make(view, response.message(), Snackbar.LENGTH_LONG).show(); |
|
|
|
} |
|
|
|
updateKeyButton.setEnabled(true); |
|
|
|
updateKeyButton.setText("Update"); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onFailure(Call<UpdateDeviceResponseDTO> call, Throwable t) { |
|
|
|
Snackbar.make(view, "An error occured :(", Snackbar.LENGTH_LONG).show(); |
|
|
|
updateKeyButton.setEnabled(true); |
|
|
|
updateKeyButton.setText("Update"); |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
handleRegisterDevice(); |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
scanQRBtn.setOnClickListener(new View.OnClickListener() { |
|
|
|
@Override |
|
|
|
public void onClick(View view) { |
|
|
|
IntentIntegrator intentIntegrator = new IntentIntegrator(MainActivity.this); |
|
|
|
intentIntegrator.setPrompt("Go to vernu-sms.vercel.app/dashboard and click Register Device to generate QR Code"); |
|
|
|
intentIntegrator.setRequestCode(SCAN_QR_REQUEST_CODE); |
|
|
|
intentIntegrator.initiateScan(); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
@ -200,6 +170,66 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void handleRegisterDevice() { |
|
|
|
|
|
|
|
String newKey = apiKeyEditText.getText().toString(); |
|
|
|
registerDeviceBtn.setEnabled(false); |
|
|
|
registerDeviceBtn.setText("Loading..."); |
|
|
|
View view = findViewById(R.id.registerDeviceBtn); |
|
|
|
|
|
|
|
FirebaseMessaging.getInstance().getToken() |
|
|
|
.addOnCompleteListener(new OnCompleteListener<String>() { |
|
|
|
@Override |
|
|
|
public void onComplete(@NonNull Task<String> 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 registerDeviceInput = new RegisterDeviceInputDTO(); |
|
|
|
registerDeviceInput.setEnabled(true); |
|
|
|
registerDeviceInput.setFcmToken(token); |
|
|
|
registerDeviceInput.setBrand(Build.BRAND); |
|
|
|
registerDeviceInput.setManufacturer(Build.MANUFACTURER); |
|
|
|
registerDeviceInput.setModel(Build.MODEL); |
|
|
|
registerDeviceInput.setBuildId(Build.ID); |
|
|
|
registerDeviceInput.setOs(Build.VERSION.BASE_OS); |
|
|
|
|
|
|
|
|
|
|
|
Call<RegisterDeviceResponseDTO> apiCall = gatewayApiService.registerDevice(newKey, registerDeviceInput); |
|
|
|
apiCall.enqueue(new Callback<RegisterDeviceResponseDTO>() { |
|
|
|
@Override |
|
|
|
public void onResponse(Call<RegisterDeviceResponseDTO> call, Response<RegisterDeviceResponseDTO> response) { |
|
|
|
|
|
|
|
if (response.isSuccessful()) { |
|
|
|
SharedPreferenceHelper.setSharedPreferenceString(mContext, "API_KEY", newKey); |
|
|
|
Log.e("API_RESP", response.toString()); |
|
|
|
Snackbar.make(view, "Device Registration Successful :)", Snackbar.LENGTH_LONG).show(); |
|
|
|
SharedPreferenceHelper.setSharedPreferenceString(mContext, "DEVICE_ID", response.body().data.get("_id").toString()); |
|
|
|
|
|
|
|
} else { |
|
|
|
Snackbar.make(view, response.message(), Snackbar.LENGTH_LONG).show(); |
|
|
|
} |
|
|
|
registerDeviceBtn.setEnabled(true); |
|
|
|
registerDeviceBtn.setText("Update"); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) { |
|
|
|
Snackbar.make(view, "An error occured :(", Snackbar.LENGTH_LONG).show(); |
|
|
|
registerDeviceBtn.setEnabled(true); |
|
|
|
registerDeviceBtn.setText("Update"); |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleSMSRequestPermission(View view) { |
|
|
|
if (isSMSPermissionGranted(mContext)) { |
|
|
|
Snackbar.make(view, "Already got permissions", Snackbar.LENGTH_SHORT).show(); |
|
|
|
@ -215,6 +245,25 @@ public class MainActivity extends AppCompatActivity { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { |
|
|
|
super.onActivityResult(requestCode, resultCode, data); |
|
|
|
|
|
|
|
if (requestCode == SCAN_QR_REQUEST_CODE) { |
|
|
|
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); |
|
|
|
|
|
|
|
if (intentResult != null) { |
|
|
|
if (intentResult.getContents() == null) { |
|
|
|
Toast.makeText(getBaseContext(), "Canceled", Toast.LENGTH_SHORT).show(); |
|
|
|
} else { |
|
|
|
String scannedQR = intentResult.getContents(); |
|
|
|
apiKeyEditText.setText(scannedQR); |
|
|
|
handleRegisterDevice(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isSMSPermissionGranted(Context context) { |
|
|
|
return ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED; |
|
|
|
} |