Advertisement
kitlolz012

EditRestoActivity(fix error)

Oct 17th, 2023
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.86 KB | Source Code | 0 0
  1. package com.example.gypsy;
  2.  
  3. import static android.content.ContentValues.TAG;
  4.  
  5. import android.app.Activity;
  6. import android.content.Intent;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.provider.MediaStore;
  10. import android.util.Log;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.ImageView;
  14. import android.widget.LinearLayout;
  15.  
  16. import androidx.activity.result.ActivityResultLauncher;
  17. import androidx.activity.result.contract.ActivityResultContracts;
  18. import androidx.annotation.NonNull;
  19. import androidx.appcompat.app.AppCompatActivity;
  20. import androidx.core.content.ContextCompat;
  21. import androidx.viewpager2.widget.ViewPager2;
  22. import com.google.firebase.auth.FirebaseAuth;
  23. import com.google.firebase.auth.FirebaseUser;
  24. import com.google.firebase.database.DataSnapshot;
  25. import com.google.firebase.database.DatabaseError;
  26. import com.google.firebase.database.DatabaseReference;
  27. import com.google.firebase.database.FirebaseDatabase;
  28. import com.google.firebase.database.Query;
  29. import com.google.firebase.database.ValueEventListener;
  30. import com.google.firebase.storage.FirebaseStorage;
  31. import com.google.firebase.storage.StorageReference;
  32. import com.google.firebase.storage.UploadTask;
  33. import java.util.ArrayList;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.concurrent.atomic.AtomicBoolean;
  38. import java.util.concurrent.atomic.AtomicInteger;
  39.  
  40. public class EditRestoActivity extends AppCompatActivity {
  41.  
  42.     private FirebaseStorage storage;
  43.     private StorageReference storageReference;
  44.     private FirebaseDatabase database;
  45.     private DatabaseReference databaseReference;
  46.     private FirebaseAuth auth;
  47.     private FirebaseUser currentUser;
  48.     private List<Uri> imageUris = new ArrayList<>();
  49.     private Uri imageUri;
  50.     private ActivityResultLauncher<Intent> galleryLauncher;
  51.     private Button uploadButton;
  52.     private EditText restoNameEditText;
  53.     private EditText restoAddressEditText;
  54.     private EditText restoDescriptionEditText;
  55.     private EditText restoContactEditText;
  56.     private EditText restoEmailEditText;
  57.     private EditText cancellationPolicyEditText;
  58.     private EditText amenityEditText;
  59.     private Button postButton;
  60.     private String userId;
  61.     private RestoImageSliderAdapter adapter;
  62.     private ViewPager2 viewPager;
  63.     private LinearLayout dotsLayout;
  64.     private ImageView[] dots;
  65.  
  66.     @Override
  67.     protected void onCreate(Bundle savedInstanceState) {
  68.         super.onCreate(savedInstanceState);
  69.         setContentView(R.layout.activity_edit_resto);
  70.  
  71.         viewPager = findViewById(R.id.viewPager);
  72.         dotsLayout = findViewById(R.id.dotsLayout);
  73.         uploadButton = findViewById(R.id.uploadButton);
  74.         restoNameEditText = findViewById(R.id.restoNameEditText);
  75.         restoAddressEditText = findViewById(R.id.restoAddressEditText);
  76.         restoDescriptionEditText = findViewById(R.id.restoDescriptionEditText);
  77.         restoContactEditText = findViewById(R.id.restoContactEditText);
  78.         restoEmailEditText = findViewById(R.id.restoEmailEditText);
  79.         amenityEditText = findViewById(R.id.amenityEditText);
  80.         cancellationPolicyEditText = findViewById(R.id.cancellationPolicyEditText);
  81.         postButton = findViewById(R.id.postButton);
  82.  
  83.         auth = FirebaseAuth.getInstance();
  84.         currentUser = auth.getCurrentUser();
  85.         userId = currentUser.getUid();
  86.  
  87.         storage = FirebaseStorage.getInstance();
  88.         storageReference = storage.getReference();
  89.         database = FirebaseDatabase.getInstance();
  90.         databaseReference = database.getReference();
  91.  
  92.         adapter = new RestoImageSliderAdapter(this,imageUris, viewPager,dotsLayout);
  93.         viewPager.setAdapter(adapter);
  94.  
  95.         dotsLayout = findViewById(R.id.dotsLayout);
  96.         RestoImageSliderAdapter adapter = new RestoImageSliderAdapter(this, imageUris, viewPager, dotsLayout);
  97.         viewPager.setAdapter(adapter);
  98.  
  99.         viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
  100.             @Override
  101.             public void onPageSelected(int position) {
  102.                 super.onPageSelected(position);
  103.                 adapter.updateDotsIndicator(position);
  104.             }
  105.         });
  106.  
  107.         adapter.updateDotsIndicator(0);
  108.  
  109.         galleryLauncher = registerForActivityResult(
  110.                 new ActivityResultContracts.StartActivityForResult(),
  111.                 result -> {
  112.                     if (result.getResultCode() == Activity.RESULT_OK) {
  113.                         Intent data = result.getData();
  114.                         if (data != null && data.getData() != null) {
  115.                             imageUri = data.getData();
  116.                             imageUris.add(imageUri);
  117.  
  118.                             adapter.notifyDataSetChanged();
  119.                         }
  120.                     }
  121.                 }
  122.         );
  123.  
  124.         uploadButton.setOnClickListener(v -> openGallery());
  125.  
  126.         postButton.setOnClickListener(v -> {
  127.             String restoName = restoNameEditText.getText().toString();
  128.             String restoAddress = restoAddressEditText.getText().toString();
  129.             String restoDescription = restoDescriptionEditText.getText().toString();
  130.             String restoContact = restoContactEditText.getText().toString();
  131.             String restoEmail = restoEmailEditText.getText().toString();
  132.             String cancellationPolicy = cancellationPolicyEditText.getText().toString();
  133.             String amenitiesResto = amenityEditText.getText().toString();
  134.  
  135.             checkIfExists(userId, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, imageUri, amenitiesResto);
  136.  
  137.             Intent intent = new Intent(this, MainActivity3.class);
  138.             intent.putExtra("frag", "RestoEditFragment");
  139.             startActivity(intent);
  140.         });
  141.  
  142.         retrieve(userId);
  143.  
  144.         dots(0);
  145.         viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
  146.             @Override
  147.             public void onPageSelected(int position) {
  148.                 super.onPageSelected(position);
  149.                 dots(position);
  150.             }
  151.         });
  152.         Log.d(TAG, "Image upload is triggered.");
  153.     }
  154.     // ... (Code from the previous response)
  155.  
  156.     private void checkIfExists(String userId, String restoName, String restoAddress, String restoDescription, String restoContact,
  157.                                String restoEmail, String cancellationPolicy, Uri imageUri, String amenitiesResto) {
  158.         DatabaseReference restoRef = databaseReference.child("restaurants");
  159.         Query query = restoRef.orderByChild("user_id").equalTo(userId);
  160.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  161.             @Override
  162.             public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
  163.                 if (dataSnapshot.exists()) {
  164.                     String existingRestoId = dataSnapshot.getChildren().iterator().next().getKey();
  165.                     update(restoName, restoAddress, restoDescription, imageUris, restoContact, restoEmail, cancellationPolicy, existingRestoId, amenitiesResto);
  166.                     adapter.setUris(imageUris);
  167.                     adapter.notifyDataSetChanged();
  168.                     Log.d(TAG, "Resto exists for user: " + userId);
  169.                 } else {
  170.                     create(userId, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, imageUris, amenitiesResto);
  171.                     adapter.setUris(imageUris);
  172.                     adapter.notifyDataSetChanged();
  173.                     Log.d(TAG, "Resto does not exist for user: " + userId);
  174.                 }
  175.             }
  176.             @Override
  177.             public void onCancelled(@NonNull DatabaseError databaseError) {
  178.                 Log.e("check", "error" + databaseError.getMessage());
  179.             }
  180.         });
  181.     }
  182.  
  183.     private void create(String userId, String restoName, String restoAddress, String restoDescription, String restoContact,
  184.                         String restoEmail, String cancellationPolicy, List<Uri> imageUris, String amenitiesResto) {
  185.  
  186.         DatabaseReference restosRef = databaseReference.child("restaurants");
  187.         DatabaseReference restoRef = restosRef.push();
  188.         String restoId = restoRef.getKey();
  189.  
  190.         List<String> imageUrls = new ArrayList<>();
  191.         AtomicInteger uploadCount = new AtomicInteger(0);
  192.         AtomicBoolean hasUploadFailed = new AtomicBoolean(false);
  193.  
  194.         List<UploadTask> uploadTasks = new ArrayList<>();
  195.  
  196.         for (int i = 0; i < imageUris.size(); i++) {
  197.             final int finalIndex = i;
  198.             Uri imageUri = imageUris.get(i);
  199.             StorageReference imageRef = storageReference.child("restaurant_images/" + restoId + "/image" + (i + 1));
  200.             Log.d(TAG, "Image Storage Reference: " + imageRef.toString());
  201.             UploadTask uploadTask = imageRef.putFile(imageUri);
  202.  
  203.             uploadTask.addOnFailureListener(new MyFailureListener());
  204.             uploadTasks.add(uploadTask);
  205.  
  206.             uploadTask.addOnSuccessListener(taskSnapshot -> {
  207.                 imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  208.                     String imageUrl = downloadUri.toString();
  209.                     imageUrls.add(imageUrl);
  210.                     if (uploadCount.incrementAndGet() == imageUris.size()) {
  211.                         if (!hasUploadFailed.get()) {
  212.                             save(restoId, imageUrls, restoName, restoAddress, restoDescription, restoContact, restoEmail, cancellationPolicy, amenitiesResto);
  213.                             adapter.setUris(imageUris);
  214.                             adapter.notifyDataSetChanged();
  215.                         } else {
  216.                             Log.e(TAG, "Image upload failed.");
  217.                         }
  218.                     }
  219.                 });
  220.             }).addOnFailureListener(e -> {
  221.                 Log.e(TAG, "Failed to upload image #" + (finalIndex + 1) + ": " + e.getMessage());
  222.                 hasUploadFailed.set(true);
  223.                 for (int j = finalIndex + 1; j < imageUris.size(); j++) {
  224.                     UploadTask remainingUploadTask = uploadTasks.get(j);
  225.                     if (remainingUploadTask != null && !remainingUploadTask.isComplete()) {
  226.                         remainingUploadTask.cancel();
  227.                     }
  228.                 }
  229.             });
  230.         }
  231.     }
  232.  
  233.     private void update(String restoName, String restoAddress, String restoDescription, List<Uri> imageUris, String restoContact, String restoEmail, String cancellationPolicy, String restoId, String amenitiesResto) {
  234.         DatabaseReference restosRef = databaseReference.child("restaurants");
  235.         Query query = restosRef.orderByChild("user_id").equalTo(userId);
  236.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  237.             @Override
  238.             public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
  239.                 if (dataSnapshot.exists()) {
  240.                     for (com.google.firebase.database.DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
  241.                         String restoId = childSnapshot.getKey();
  242.  
  243.                         DatabaseReference restoRef = restosRef.child(restoId);
  244.                         restoRef.child("name").setValue(restoName);
  245.                         restoRef.child("address").setValue(restoAddress);
  246.                         restoRef.child("description").setValue(restoDescription);
  247.                         restoRef.child("contact").setValue(restoContact);
  248.                         restoRef.child("email").setValue(restoEmail);
  249.                         restoRef.child("cancellationPolicy").setValue(cancellationPolicy);
  250.                         restoRef.child("amenities").setValue(amenitiesResto);
  251.  
  252.                         if (!imageUris.isEmpty()) {
  253.                             List<String> imageUrls = new ArrayList<>();
  254.                             for (int i = 0; i < imageUris.size(); i++) {
  255.                                 Uri imageUri = imageUris.get(i);
  256.                                 StorageReference imageRef = storageReference.child("restaurant_images/" + restoId + "/image" + (i + 1));
  257.                                 UploadTask uploadTask = imageRef.putFile(imageUri);
  258.  
  259.                                 uploadTask.addOnFailureListener(new MyFailureListener());
  260.                                 uploadTask.addOnSuccessListener(taskSnapshot -> imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  261.                                     String imageUrl = downloadUri.toString();
  262.                                     imageUrls.add(imageUrl);
  263.                                 })).addOnFailureListener(e -> {
  264.                                     Log.e("image upload", "error");
  265.                                 });
  266.                             }
  267.                         }
  268.                     }
  269.                 }
  270.             }
  271.  
  272.             @Override
  273.             public void onCancelled(@NonNull DatabaseError databaseError) {
  274.                 Log.e("update", "error" + databaseError.getMessage());
  275.             }
  276.         });
  277.     }
  278.  
  279.     private void openGallery() {
  280.         Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  281.         galleryLauncher.launch(galleryIntent);
  282.         Log.d(TAG, "opening gallery with URI: " + imageUri);
  283.     }
  284.  
  285.     private void save(String restoId, List<String> imageUrls, String restoName, String restoAddress, String restoDescription, String restoContact, String restoEmail, String cancellationPolicy, String amenitiesRestro) {
  286.         DatabaseReference restosRef = databaseReference.child("restaurants");
  287.         DatabaseReference restoRef = restosRef.child(restoId);
  288.  
  289.         restoRef.child("name").setValue(restoName);
  290.         restoRef.child("address").setValue(restoAddress);
  291.         restoRef.child("description").setValue(restoDescription);
  292.         restoRef.child("contact").setValue(restoContact);
  293.         restoRef.child("email").setValue(restoEmail);
  294.         restoRef.child("cancellationPolicy").setValue(cancellationPolicy);
  295.         restoRef.child("user_id").setValue(userId);
  296.         restoRef.child("amenities").setValue(amenitiesRestro);
  297.  
  298.         Map<String, Object> imagesMap = new HashMap<>();
  299.         for (int i = 0; i < imageUrls.size(); i++) {
  300.             imagesMap.put("image" + (i + 1), imageUrls.get(i));
  301.         }
  302.         restoRef.child("images").setValue(imagesMap);
  303.     }
  304.  
  305.     private void retrieve(String userId) {
  306.         DatabaseReference restoRef = databaseReference.child("restaurants");
  307.         Query query = restoRef.orderByChild("user_id").equalTo(userId);
  308.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  309.             @Override
  310.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  311.                 if (dataSnapshot.exists()) {
  312.                     DataSnapshot restoSnapshot = dataSnapshot.getChildren().iterator().next();
  313.  
  314.                     String title = restoSnapshot.child("name").getValue(String.class);
  315.                     String restoAddress = restoSnapshot.child("address").getValue(String.class);
  316.                     String description = restoSnapshot.child("description").getValue(String.class);
  317.                     String restoContact = restoSnapshot.child("contact").getValue(String.class);
  318.                     String restoEmail = restoSnapshot.child("email").getValue(String.class);
  319.                     String cancellationPolicy = restoSnapshot.child("cancellationPolicy").getValue(String.class);
  320.                     String amenitiesRestro = restoSnapshot.child("amenities").getValue(String.class);
  321.  
  322.                     List<String> imageUrls = new ArrayList<>();
  323.                     DataSnapshot imagesSnapshot = restoSnapshot.child("images");
  324.                     for (DataSnapshot imageSnapshot : imagesSnapshot.getChildren()) {
  325.                         String imageUrl = imageSnapshot.getValue(String.class);
  326.                         imageUrls.add(imageUrl);
  327.                     }
  328.  
  329.                     restoNameEditText.setText(title);
  330.                     restoDescriptionEditText.setText(description);
  331.                     restoAddressEditText.setText(restoAddress);
  332.                     restoContactEditText.setText(restoContact);
  333.                     restoEmailEditText.setText(restoEmail);
  334.                     cancellationPolicyEditText.setText(cancellationPolicy);
  335.                     amenityEditText.setText(amenitiesRestro);
  336.                     imageUris.clear();
  337.  
  338.                     imageUris.clear();
  339.                     for (String imageUrl : imageUrls) {
  340.                         imageUris.add(Uri.parse(imageUrl));
  341.                     }
  342.  
  343.                     adapter.setUris(imageUris);
  344.                     adapter.notifyDataSetChanged();
  345.                 }
  346.             }
  347.  
  348.             @Override
  349.             public void onCancelled(@NonNull DatabaseError databaseError) {
  350.                 Log.e("retrieve", "error" + databaseError.getMessage());
  351.             }
  352.         });
  353.     }
  354.  
  355.     private void dots(int position) {
  356.         dots = new ImageView[imageUris.size()];
  357.         dotsLayout.removeAllViews();
  358.  
  359.         for (int i = 0; i < dots.length; i++) {
  360.             dots[i] = new ImageView(this);
  361.             dots[i].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_unselected));
  362.  
  363.             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
  364.                     LinearLayout.LayoutParams.WRAP_CONTENT,
  365.                     LinearLayout.LayoutParams.WRAP_CONTENT
  366.             );
  367.  
  368.             params.setMargins(8, 0, 8, 0);
  369.             dotsLayout.addView(dots[i], params);
  370.         }
  371.         if (dots.length > 0) {
  372.             dots[position].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_selected));
  373.         }
  374.     }
  375. }
  376.  
  377.  
  378.  
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement