Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.gypsy;
- import static android.content.ContentValues.TAG;
- import android.app.Activity;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.provider.MediaStore;
- import android.util.Log;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import androidx.activity.result.ActivityResultLauncher;
- import androidx.activity.result.contract.ActivityResultContracts;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.content.ContextCompat;
- import androidx.viewpager2.widget.ViewPager2;
- import com.google.firebase.auth.FirebaseAuth;
- import com.google.firebase.auth.FirebaseUser;
- import com.google.firebase.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.Query;
- import com.google.firebase.database.ValueEventListener;
- import com.google.firebase.storage.FirebaseStorage;
- import com.google.firebase.storage.StorageReference;
- import com.google.firebase.storage.UploadTask;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.atomic.AtomicBoolean;
- import java.util.concurrent.atomic.AtomicInteger;
- public class EditRestoActivity extends AppCompatActivity {
- private FirebaseStorage storage;
- private StorageReference storageReference;
- private FirebaseDatabase database;
- private DatabaseReference databaseReference;
- private FirebaseAuth auth;
- private FirebaseUser currentUser;
- private List<Uri> imageUris = new ArrayList<>();
- private Uri imageUri;
- private ActivityResultLauncher<Intent> galleryLauncher;
- private Button uploadButton;
- private EditText restoNameEditText;
- private EditText restoAddressEditText;
- private EditText restoDescriptionEditText;
- private EditText restoContactEditText;
- private EditText restoEmailEditText;
- private EditText cancellationPolicyEditText;
- private EditText amenityEditText;
- private Button postButton;
- private String userId;
- private RestoImageSliderAdapter adapter;
- private ViewPager2 viewPager;
- private LinearLayout dotsLayout;
- private ImageView[] dots;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_edit_resto);
- viewPager = findViewById(R.id.viewPager);
- dotsLayout = findViewById(R.id.dotsLayout);
- uploadButton = findViewById(R.id.uploadButton);
- restoNameEditText = findViewById(R.id.restoNameEditText);
- restoAddressEditText = findViewById(R.id.restoAddressEditText);
- restoDescriptionEditText = findViewById(R.id.restoDescriptionEditText);
- restoContactEditText = findViewById(R.id.restoContactEditText);
- restoEmailEditText = findViewById(R.id.restoEmailEditText);
- amenityEditText = findViewById(R.id.amenityEditText);
- cancellationPolicyEditText = findViewById(R.id.cancellationPolicyEditText);
- postButton = findViewById(R.id.postButton);
- auth = FirebaseAuth.getInstance();
- currentUser = auth.getCurrentUser();
- userId = currentUser.getUid();
- storage = FirebaseStorage.getInstance();
- storageReference = storage.getReference();
- database = FirebaseDatabase.getInstance();
- databaseReference = database.getReference();
- adapter = new RestoImageSliderAdapter(this,imageUris, viewPager,dotsLayout);
- viewPager.setAdapter(adapter);
- dotsLayout = findViewById(R.id.dotsLayout);
- RestoImageSliderAdapter adapter = new RestoImageSliderAdapter(this, imageUris, viewPager, dotsLayout);
- viewPager.setAdapter(adapter);
- viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
- @Override
- public void onPageSelected(int position) {
- super.onPageSelected(position);
- adapter.updateDotsIndicator(position);
- }
- });
- adapter.updateDotsIndicator(0);
- galleryLauncher = registerForActivityResult(
- new ActivityResultContracts.StartActivityForResult(),
- result -> {
- if (result.getResultCode() == Activity.RESULT_OK) {
- Intent data = result.getData();
- if (data != null && data.getData() != null) {
- imageUri = data.getData();
- imageUris.add(imageUri);
- adapter.notifyDataSetChanged();
- }
- }
- }
- );
- uploadButton.setOnClickListener(v -> openGallery());
- postButton.setOnClickListener(v -> {
- String restoName = restoNameEditText.getText().toString();
- String restoAddress = restoAddressEditText.getText().toString();
- String restoDescription = restoDescriptionEditText.getText().toString();
- String restoContact = restoContactEditText.getText().toString();
- String restoEmail = restoEmailEditText.getText().toString();
- String cancellationPolicy = cancellationPolicyEditText.getText().toString();
- String amenitiesResto = amenityEditText.getText().toString();
- checkIfExists(userId, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, imageUri, amenitiesResto);
- Intent intent = new Intent(this, MainActivity3.class);
- intent.putExtra("frag", "RestoEditFragment");
- startActivity(intent);
- });
- retrieve(userId);
- dots(0);
- viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
- @Override
- public void onPageSelected(int position) {
- super.onPageSelected(position);
- dots(position);
- }
- });
- Log.d(TAG, "Image upload is triggered.");
- }
- // ... (Code from the previous response)
- private void checkIfExists(String userId, String restoName, String restoAddress, String restoDescription, String restoContact,
- String restoEmail, String cancellationPolicy, Uri imageUri, String amenitiesResto) {
- DatabaseReference restoRef = databaseReference.child("restaurants");
- Query query = restoRef.orderByChild("user_id").equalTo(userId);
- query.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
- if (dataSnapshot.exists()) {
- String existingRestoId = dataSnapshot.getChildren().iterator().next().getKey();
- update(restoName, restoAddress, restoDescription, imageUris, restoContact, restoEmail, cancellationPolicy, existingRestoId, amenitiesResto);
- adapter.setUris(imageUris);
- adapter.notifyDataSetChanged();
- Log.d(TAG, "Resto exists for user: " + userId);
- } else {
- create(userId, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, imageUris, amenitiesResto);
- adapter.setUris(imageUris);
- adapter.notifyDataSetChanged();
- Log.d(TAG, "Resto does not exist for user: " + userId);
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- Log.e("check", "error" + databaseError.getMessage());
- }
- });
- }
- private void create(String userId, String restoName, String restoAddress, String restoDescription, String restoContact,
- String restoEmail, String cancellationPolicy, List<Uri> imageUris, String amenitiesResto) {
- DatabaseReference restosRef = databaseReference.child("restaurants");
- DatabaseReference restoRef = restosRef.push();
- String restoId = restoRef.getKey();
- List<String> imageUrls = new ArrayList<>();
- AtomicInteger uploadCount = new AtomicInteger(0);
- AtomicBoolean hasUploadFailed = new AtomicBoolean(false);
- List<UploadTask> uploadTasks = new ArrayList<>();
- for (int i = 0; i < imageUris.size(); i++) {
- final int finalIndex = i;
- Uri imageUri = imageUris.get(i);
- StorageReference imageRef = storageReference.child("restaurant_images/" + restoId + "/image" + (i + 1));
- Log.d(TAG, "Image Storage Reference: " + imageRef.toString());
- UploadTask uploadTask = imageRef.putFile(imageUri);
- uploadTask.addOnFailureListener(new MyFailureListener());
- uploadTasks.add(uploadTask);
- uploadTask.addOnSuccessListener(taskSnapshot -> {
- imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
- String imageUrl = downloadUri.toString();
- imageUrls.add(imageUrl);
- if (uploadCount.incrementAndGet() == imageUris.size()) {
- if (!hasUploadFailed.get()) {
- save(restoId, imageUrls, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, amenitiesResto);
- adapter.setUris(imageUris);
- adapter.notifyDataSetChanged();
- } else {
- Log.e(TAG, "Image upload failed.");
- }
- }
- });
- }).addOnFailureListener(e -> {
- Log.e(TAG, "Failed to upload image #" + (finalIndex + 1) + ": " + e.getMessage());
- hasUploadFailed.set(true);
- for (int j = finalIndex + 1; j < imageUris.size(); j++) {
- UploadTask remainingUploadTask = uploadTasks.get(j);
- if (remainingUploadTask != null && !remainingUploadTask.isComplete()) {
- remainingUploadTask.cancel();
- }
- }
- });
- }
- }
- private void update(String restoName, String restoAddress, String restoDescription, List<Uri> imageUris, String restoContact, String restoEmail, String cancellationPolicy, String restoId, String amenitiesResto) {
- DatabaseReference restosRef = databaseReference.child("restaurants");
- Query query = restosRef.orderByChild("user_id").equalTo(userId);
- query.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
- if (dataSnapshot.exists()) {
- for (com.google.firebase.database.DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
- String restoId = childSnapshot.getKey();
- DatabaseReference restoRef = restosRef.child(restoId);
- restoRef.child("name").setValue(restoName);
- restoRef.child("address").setValue(restoAddress);
- restoRef.child("description").setValue(restoDescription);
- restoRef.child("contact").setValue(restoContact);
- restoRef.child("email").setValue(restoEmail);
- restoRef.child("cancellationPolicy").setValue(cancellationPolicy);
- restoRef.child("amenities").setValue(amenitiesResto);
- if (!imageUris.isEmpty()) {
- List<String> imageUrls = new ArrayList<>();
- for (int i = 0; i < imageUris.size(); i++) {
- Uri imageUri = imageUris.get(i);
- StorageReference imageRef = storageReference.child("restaurant_images/" + restoId + "/image" + (i + 1));
- UploadTask uploadTask = imageRef.putFile(imageUri);
- uploadTask.addOnFailureListener(new MyFailureListener());
- uploadTask.addOnSuccessListener(taskSnapshot -> imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
- String imageUrl = downloadUri.toString();
- imageUrls.add(imageUrl);
- })).addOnFailureListener(e -> {
- Log.e("image upload", "error");
- });
- }
- }
- }
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- Log.e("update", "error" + databaseError.getMessage());
- }
- });
- }
- private void openGallery() {
- Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
- galleryLauncher.launch(galleryIntent);
- Log.d(TAG, "opening gallery with URI: " + imageUri);
- }
- private void save(String restoId, List<String> imageUrls, String restoName, String restoAddress, String restoDescription, String restoContact, String restoEmail, String cancellationPolicy, String amenitiesRestro) {
- DatabaseReference restosRef = databaseReference.child("restaurants");
- DatabaseReference restoRef = restosRef.child(restoId);
- restoRef.child("name").setValue(restoName);
- restoRef.child("address").setValue(restoAddress);
- restoRef.child("description").setValue(restoDescription);
- restoRef.child("contact").setValue(restoContact);
- restoRef.child("email").setValue(restoEmail);
- restoRef.child("cancellationPolicy").setValue(cancellationPolicy);
- restoRef.child("user_id").setValue(userId);
- restoRef.child("amenities").setValue(amenitiesRestro);
- Map<String, Object> imagesMap = new HashMap<>();
- for (int i = 0; i < imageUrls.size(); i++) {
- imagesMap.put("image" + (i + 1), imageUrls.get(i));
- }
- restoRef.child("images").setValue(imagesMap);
- }
- private void retrieve(String userId) {
- DatabaseReference restoRef = databaseReference.child("restaurants");
- Query query = restoRef.orderByChild("user_id").equalTo(userId);
- query.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- if (dataSnapshot.exists()) {
- DataSnapshot restoSnapshot = dataSnapshot.getChildren().iterator().next();
- String title = restoSnapshot.child("name").getValue(String.class);
- String restoAddress = restoSnapshot.child("address").getValue(String.class);
- String description = restoSnapshot.child("description").getValue(String.class);
- String restoContact = restoSnapshot.child("contact").getValue(String.class);
- String restoEmail = restoSnapshot.child("email").getValue(String.class);
- String cancellationPolicy = restoSnapshot.child("cancellationPolicy").getValue(String.class);
- String amenitiesRestro = restoSnapshot.child("amenities").getValue(String.class);
- List<String> imageUrls = new ArrayList<>();
- DataSnapshot imagesSnapshot = restoSnapshot.child("images");
- for (DataSnapshot imageSnapshot : imagesSnapshot.getChildren()) {
- String imageUrl = imageSnapshot.getValue(String.class);
- imageUrls.add(imageUrl);
- }
- restoNameEditText.setText(title);
- restoDescriptionEditText.setText(description);
- restoAddressEditText.setText(restoAddress);
- restoContactEditText.setText(restoContact);
- restoEmailEditText.setText(restoEmail);
- cancellationPolicyEditText.setText(cancellationPolicy);
- amenityEditText.setText(amenitiesRestro);
- imageUris.clear();
- imageUris.clear();
- for (String imageUrl : imageUrls) {
- imageUris.add(Uri.parse(imageUrl));
- }
- adapter.setUris(imageUris);
- adapter.notifyDataSetChanged();
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- Log.e("retrieve", "error" + databaseError.getMessage());
- }
- });
- }
- private void dots(int position) {
- dots = new ImageView[imageUris.size()];
- dotsLayout.removeAllViews();
- for (int i = 0; i < dots.length; i++) {
- dots[i] = new ImageView(this);
- dots[i].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_unselected));
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT
- );
- params.setMargins(8, 0, 8, 0);
- dotsLayout.addView(dots[i], params);
- }
- if (dots.length > 0) {
- dots[position].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_selected));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement