package com.hypertrack.ridesharing; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.firestore.DocumentReference; import com.google.gson.Gson; import com.hypertrack.sdk.HyperTrack; import com.hypertrack.ridesharing.components.MainActivity; import com.hypertrack.ridesharing.models.User; import com.hypertrack.ridesharing.utils.HyperTrackUtils; import java.util.HashMap; import java.util.Map; public class RegistrationActivity extends AppCompatActivity { private static final String TAG = "RegistrationActivity"; private Gson gson = new Gson(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_registration); String json = MySharedPreferences.get(this).getString(MySharedPreferences.USER_KEY, "{}"); User user = gson.fromJson(json, User.class); next(user); } public void next(final User user) { if (TextUtils.isEmpty(user.role)) { if (getPackageName().contains(User.USER_ROLE_DRIVER)) { user.role = User.USER_ROLE_DRIVER; next(user); } else if (getPackageName().contains(User.USER_ROLE_RIDER)) { user.role = User.USER_ROLE_RIDER; next(user); } else { addFragment(RoleRegistrationFragment.newInstance(user)); } } else if (TextUtils.isEmpty(user.name)) { addFragment(NameRegistrationFragment.newInstance(user)); } else if (TextUtils.isEmpty(user.id)) { if (User.USER_ROLE_DRIVER.equals(user.role)) { HyperTrack hyperTrack = HyperTrack.getInstance(this, HyperTrackUtils.getPubKey(this)); hyperTrack.setDeviceName(user.name); Map<String, Object> metadata = new HashMap<>(); metadata.put("name", user.name); metadata.put("phone_number", user.phoneNumber); Map<String, Object> car = new HashMap<>(); car.put("model", user.car.model); car.put("license_plate", user.car.licensePlate); metadata.put("car", car); hyperTrack.setDeviceMetadata(metadata); user.deviceId = hyperTrack.getDeviceID(); } FirebaseFirestoreApi.createUser(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); user.id = documentReference.getId(); next(user); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } }); } else { try { ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(user); MySharedPreferences.get(this).edit() .putString(MySharedPreferences.USER_KEY, json) .apply(); } catch (JsonProcessingException e) { e.printStackTrace(); } startActivity(new Intent(this, MainActivity.class)); finish(); } } private void addFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_frame, fragment); transaction.commitAllowingStateLoss(); } }