Advertisement
kitlolz012

EdithotelActivity

Oct 17th, 2023 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.72 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 androidx.fragment.app.Fragment;
  12.  
  13. import android.view.LayoutInflater;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.ImageView;
  19. import android.widget.LinearLayout;
  20.  
  21. import androidx.activity.result.ActivityResultLauncher;
  22. import androidx.activity.result.contract.ActivityResultContracts;
  23. import androidx.annotation.NonNull;
  24. import androidx.appcompat.app.AppCompatActivity;
  25. import androidx.core.content.ContextCompat;
  26. import androidx.fragment.app.Fragment;
  27. import androidx.fragment.app.FragmentManager;
  28. import androidx.fragment.app.FragmentTransaction;
  29. import androidx.recyclerview.widget.LinearLayoutManager;
  30. import androidx.recyclerview.widget.RecyclerView;
  31. import androidx.viewpager2.widget.ViewPager2;
  32.  
  33. import com.google.android.gms.tasks.OnFailureListener;
  34. import com.google.firebase.auth.FirebaseAuth;
  35. import com.google.firebase.auth.FirebaseUser;
  36. import com.google.firebase.database.DataSnapshot;
  37. import com.google.firebase.database.DatabaseError;
  38. import com.google.firebase.database.DatabaseReference;
  39. import com.google.firebase.database.FirebaseDatabase;
  40. import com.google.firebase.database.Query;
  41. import com.google.firebase.database.ValueEventListener;
  42. import com.google.firebase.storage.FirebaseStorage;
  43. import com.google.firebase.storage.StorageReference;
  44. import com.google.firebase.storage.UploadTask;
  45. import com.squareup.picasso.Picasso;
  46. import java.util.ArrayList;
  47. import java.util.Arrays;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Map;
  51. import java.util.Objects;
  52. import java.util.concurrent.atomic.AtomicInteger;
  53.  
  54. public class EditHotelActivity extends AppCompatActivity {
  55.  
  56.     private List<Uri> imageUris = new ArrayList<>();
  57.     private ActivityResultLauncher<Intent> galleryLauncher;
  58.     private Button uploadButton;
  59.     private EditText hotelNameET;
  60.     private EditText hotelAddET;
  61.     private EditText hotelDescET;
  62.     private EditText hotelContactET;
  63.     private EditText hotelEmailET;
  64.     private EditText roomTypeET;
  65.     private List<String> roomTypes = new ArrayList<>();
  66.     private RoomTypeAdapter roomTypeAdapter;
  67.     private RecyclerView roomTypeRecyclerView;
  68.     private EditText cancellationPolicyET;
  69.     private EditText amenityET;
  70.     private Button postButton;
  71.     private Button saveButton;
  72.     private Uri imageUri;
  73.     private StorageReference storageReference;
  74.     private DatabaseReference databaseReference;
  75.     private String userId;
  76.     private HotelImageSliderAdapter adapter;
  77.     private ViewPager2 viewPager;
  78.     private LinearLayout dotsLayout;
  79.     private ImageView[] dots;
  80.     @Override
  81.     protected void onCreate(Bundle savedInstanceState) {
  82.         super.onCreate(savedInstanceState);
  83.         setContentView(R.layout.activity_edit_hotel);
  84.  
  85.         viewPager = findViewById(R.id.viewPager);
  86.         dotsLayout = findViewById(R.id.dotsLayout);
  87.         uploadButton = findViewById(R.id.uploadButton);
  88.         hotelNameET = findViewById(R.id.hotelNameET);
  89.         hotelAddET = findViewById(R.id.hotelAddET);
  90.         hotelDescET = findViewById(R.id.hotelDescET);
  91.         hotelContactET = findViewById(R.id.hotelContactET);
  92.         hotelEmailET = findViewById(R.id.hotelEmailET);
  93.         roomTypeET = findViewById(R.id.roomtypeET);
  94.         amenityET = findViewById(R.id.amenityET);
  95.         cancellationPolicyET = findViewById(R.id.cancellationPolicyET);
  96.         postButton = findViewById(R.id.postButton);
  97.  
  98.         roomTypeRecyclerView = findViewById(R.id.roomTypesRecyclerView);
  99.         roomTypeAdapter = new RoomTypeAdapter(roomTypes);
  100.         roomTypeRecyclerView.setLayoutManager(new LinearLayoutManager(this));
  101.         roomTypeRecyclerView.setAdapter(roomTypeAdapter);
  102.  
  103.         roomTypeET = findViewById(R.id.roomtypeET);
  104.         Button addRoomTypeBtn = findViewById(R.id.addRoomTypeBtn);
  105.  
  106.         // dynamically pag-add ng room types nila
  107.         addRoomTypeBtn.setOnClickListener(v -> {
  108.             String roomType = roomTypeET.getText().toString().trim();
  109.             if (!roomType.isEmpty()) {
  110.                 roomTypes.add(roomType);
  111.                 roomTypeAdapter.notifyDataSetChanged();
  112.                 roomTypeET.setText("");
  113.             }
  114.         });
  115.  
  116.         FirebaseAuth auth = FirebaseAuth.getInstance();
  117.         FirebaseUser currentUser = auth.getCurrentUser();
  118.         userId = currentUser.getUid();
  119.  
  120.         FirebaseStorage storage = FirebaseStorage.getInstance();
  121.         storageReference = storage.getReference();
  122.         FirebaseDatabase database = FirebaseDatabase.getInstance();
  123.         databaseReference = database.getReference();
  124.  
  125.         // adapter para sa multiple images ng hotel, slider
  126.         adapter = new HotelImageSliderAdapter(this, imageUris, viewPager, dotsLayout);
  127.         viewPager.setAdapter(adapter);
  128.  
  129.         // yung dots nag-iindicate ng pang ilang images na, parang sa ig
  130.         dotsLayout = findViewById(R.id.dotsLayout);
  131.         HotelImageSliderAdapter adapter = new HotelImageSliderAdapter(this, imageUris, viewPager, dotsLayout);
  132.         viewPager.setAdapter(adapter);
  133.  
  134.         viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
  135.             @Override
  136.             public void onPageSelected(int position) {
  137.                 super.onPageSelected(position);
  138.                 adapter.updateDotsIndicator(position);
  139.             }
  140.         });
  141.  
  142.         adapter.updateDotsIndicator(0);
  143.  
  144.         // gallery
  145.         galleryLauncher = registerForActivityResult(
  146.                 new ActivityResultContracts.StartActivityForResult(),
  147.                 result -> {
  148.                     if (result.getResultCode() == Activity.RESULT_OK) {
  149.                         Intent data = result.getData();
  150.                         if (data != null && data.getData() != null) {
  151.                             imageUri = data.getData();
  152.                             imageUris.add(imageUri);
  153.  
  154.                             adapter.notifyDataSetChanged();
  155.                         }
  156.                     }
  157.                 }
  158.         );
  159.  
  160.         uploadButton.setOnClickListener(v -> openGallery());
  161.  
  162.         // button "save changes" mapopost na sa tourist interface
  163.         postButton.setOnClickListener(v -> {
  164.             String hotelName = hotelNameET.getText().toString();
  165.             String hotelAddress = hotelAddET.getText().toString();
  166.             String hotelDescription = hotelDescET.getText().toString();
  167.             String hotelContact = hotelContactET.getText().toString();
  168.             String hotelEmail = hotelEmailET.getText().toString();
  169.             String roomType = roomTypeET.getText().toString();
  170.             String cancellationPolicy = cancellationPolicyET.getText().toString();
  171.             String amenitiesHotel = amenityET.getText().toString();
  172.  
  173.  
  174.             checkIfExists(userId, hotelName, hotelAddress, hotelDescription, hotelContact, hotelEmail, roomTypes, cancellationPolicy, imageUri, amenitiesHotel);
  175.  
  176.             // back to HotelEditFrag, or yung read-only, na nakaretrieve na
  177.             Intent intent = new Intent(this, MainActivity2.class);
  178.             intent.putExtra("fragmentToLoad", "HotelEditFragment");
  179.             startActivity(intent);
  180.         });
  181.  
  182.  
  183.         retrieve(userId);
  184.  
  185.         addDotsIndicator(0); // para lang to sa dots sa image slider
  186.         viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
  187.             @Override
  188.             public void onPageSelected(int position) {
  189.                 super.onPageSelected(position);
  190.                 addDotsIndicator(position);
  191.             }
  192.         });
  193.  
  194.         Log.d(TAG, "image upload triggeredd");
  195.     }
  196.  
  197.     // if nag eexist na yung user sa "hotels", di na pwede mag generate ng new set of data, para iwas doble doeble
  198.     private void checkIfExists(String userId, String hotelName, String hotelAddress, String hotelDescription, String hotelContact, String hotelEmail, List<String> roomTypes, String cancellationPolicy, Uri imageUri, String amenitiesHotel) {
  199.         DatabaseReference hotelsRef = databaseReference.child("hotels");
  200.         Query query = hotelsRef.orderByChild("user_id").equalTo(userId);
  201.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  202.             @Override
  203.             // pag nag-eexist na, mag uupdate nalang yung existing data instead na gumawa ng new
  204.             public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
  205.                 if (dataSnapshot.exists()) {
  206.                     String existingHotelId = dataSnapshot.getChildren().iterator().next().getKey();
  207.                     update(hotelName, hotelAddress, hotelDescription, imageUris, hotelContact, hotelEmail, roomTypes, cancellationPolicy, existingHotelId, amenitiesHotel);
  208.                     adapter.setUris(imageUris);
  209.                     adapter.notifyDataSetChanged();
  210.                     Log.d(TAG, "hotel exists, id: " + userId);
  211.                 } else {
  212.                     // if hindi pa nag-eeexist, gagawa ng new data under "hotels"
  213.                     create(userId, hotelName, hotelAddress, hotelDescription, hotelContact, hotelEmail, roomTypes, cancellationPolicy, imageUris, amenitiesHotel);
  214.                     adapter.setUris(imageUris);
  215.                     adapter.notifyDataSetChanged();
  216.                     Log.d(TAG, "hotel dont exist: .getText().getText() " + userId);
  217.                 }
  218.             }
  219.             @Override
  220.             public void onCancelled(@NonNull DatabaseError databaseError) {
  221.                 Log.e("check", "error" + databaseError.getMessage());
  222.             }
  223.         });
  224.     }
  225.     private void create(String userId, String hotelName, String hotelAddress, String hotelDescription, String hotelContact, String hotelEmail, List<String> roomTypes, String cancellationPolicy,  List<Uri> imageUris, String amenitiesHotel) {
  226.         DatabaseReference hotelsRef = databaseReference.child("hotels");
  227.  
  228.         DatabaseReference hotelRef = hotelsRef.push();
  229.         String hotelId = hotelRef.getKey();
  230.  
  231.         List<String> imageUrls = new ArrayList<>();
  232.         AtomicInteger uploadCount = new AtomicInteger(0);
  233.  
  234.         for (int i = 0; i < imageUris.size(); i++) {
  235.             final int finalIndex = i;
  236.             Uri imageUri = imageUris.get(i);
  237.             StorageReference imageRef = storageReference.child("hotel_images/" + hotelId + "/image" + (i + 1));
  238.             Log.d(TAG, "Image Storage Reference: " + imageRef.toString());
  239.             UploadTask uploadTask = imageRef.putFile(imageUri);
  240.  
  241.             uploadTask.addOnFailureListener(new MyFailureListener());
  242.             uploadTask.addOnSuccessListener(taskSnapshot -> {
  243.                 imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  244.                     String imageUrl = downloadUri.toString();
  245.                     imageUrls.add(imageUrl);
  246.  
  247.                     if (uploadCount.incrementAndGet() == imageUris.size()) {
  248.                         save(hotelId, imageUrls, hotelName, hotelAddress, hotelDescription, hotelContact, hotelEmail, roomTypes, cancellationPolicy, amenitiesHotel);
  249.                         saveImages(hotelId, imageUrls);
  250.  
  251.                         adapter.setUris(imageUris);
  252.                         adapter.notifyDataSetChanged();
  253.                     }
  254.                 });
  255.             }).addOnFailureListener(e -> {
  256.                 Log.e(TAG, "failed image uploadnumber: " + (finalIndex + 1) + ": " + e.getMessage());
  257.             });
  258.         }
  259.     }
  260.     private void update(String hotelName, String hotelAddress, String hotelDescription, List<Uri> imageUris, String hotelContact, String hotelEmail, List<String> roomTypes, String cancellationPolicy, String hotelId, String amenitiesHotel) {
  261.         DatabaseReference hotelsRef = databaseReference.child("hotels");
  262.         Query query = hotelsRef.orderByChild("user_id").equalTo(userId);
  263.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  264.             @Override
  265.             public void onDataChange(@NonNull com.google.firebase.database.DataSnapshot dataSnapshot) {
  266.                 if (dataSnapshot.exists()) {
  267.                     for (com.google.firebase.database.DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
  268.                         String hotelId = childSnapshot.getKey();
  269.  
  270.                         DatabaseReference hotelRef = hotelsRef.child(hotelId);
  271.                         hotelRef.child("name").setValue(hotelName);
  272.                         hotelRef.child("hotelAddress").setValue(hotelAddress);
  273.                         hotelRef.child("description").setValue(hotelDescription);
  274.                         hotelRef.child("hotelContact").setValue(hotelContact);
  275.                         hotelRef.child("hotelEmail").setValue(hotelEmail);
  276.                         hotelRef.child("cancellationPolicy").setValue(cancellationPolicy);
  277.                         hotelRef.child("amenities").setValue(amenitiesHotel);
  278.                         saveRoomTypes(hotelId, roomTypes);
  279.  
  280.                         if (!imageUris.isEmpty()) {
  281.                             List<String> imageUrls = new ArrayList<>();
  282.  
  283.                             for (int i = 0; i < imageUris.size(); i++) {
  284.                                 Uri imageUri = imageUris.get(i);
  285.                                 StorageReference imageRef = storageReference.child("hotel_images/" + hotelId + "/image" + (i + 1));
  286.                                 UploadTask uploadTask = imageRef.putFile(imageUri);
  287.  
  288.                                 uploadTask.addOnFailureListener(new OnFailureListener() {
  289.                                     @Override
  290.                                     public void onFailure(@NonNull Exception e) {
  291.                                         Log.e("image upload", "Error during upload: " + e.getMessage());
  292.  
  293.                                     }
  294.                                 });
  295.  
  296.                                 uploadTask.addOnFailureListener(new MyFailureListener());
  297.                                 uploadTask.addOnSuccessListener(taskSnapshot -> imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  298.                                     String imageUrl = downloadUri.toString();
  299.                                     imageUrls.add(imageUrl);
  300.  
  301.                                     if (imageUrls.size() == imageUris.size()) {
  302.  
  303.                                         saveImages(hotelId, imageUrls);
  304.                                     }
  305.                                 })).addOnFailureListener(e -> {
  306.                                     Log.e("image upload", "error");
  307.                                     Log.e("image upload", "Firebase Storage Error: " + e.getMessage());
  308.                                 });
  309.                             }
  310.                         }
  311.                     }
  312.                 }
  313.             }
  314.  
  315.             @Override
  316.             public void onCancelled(@NonNull DatabaseError databaseError) {
  317.                 Log.e("update", "error" + databaseError.getMessage());
  318.             }
  319.         });
  320.     }
  321.     private void openGallery() {
  322.         // lalagyan natin to ng permission first
  323.         Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  324.         galleryLauncher.launch(galleryIntent);
  325.     }
  326.     // always save changes
  327.     private void save(String hotelId, List<String> imageUrls, String hotelName, String hotelAddress, String hotelDescription, String hotelContact, String hotelEmail, List<String> roomTypes, String cancellationPolicy, String amenitiesHotel) {
  328.         DatabaseReference hotelsRef = databaseReference.child("hotels");
  329.         DatabaseReference hotelRef = hotelsRef.child(hotelId);
  330.  
  331.         // set sa rdb yung value
  332.         hotelRef.child("name").setValue(hotelName);
  333.         hotelRef.child("address").setValue(hotelAddress);
  334.         hotelRef.child("description").setValue(hotelDescription);
  335.         hotelRef.child("contact").setValue(hotelContact);
  336.         hotelRef.child("email").setValue(hotelEmail);
  337.         hotelRef.child("cancellation_policy").setValue(cancellationPolicy);
  338.         hotelRef.child("user_id").setValue(userId);
  339.         hotelRef.child("amenities").setValue(amenitiesHotel);
  340.  
  341.         Map<String, Object> imagesMap = new HashMap<>();
  342.         for (int i = 0; i < imageUrls.size(); i++) {
  343.             imagesMap.put("image" + (i + 1), imageUrls.get(i));
  344.         }
  345.         hotelRef.child("images").setValue(imagesMap);
  346.  
  347.         Map<String, Object> roomTypesMap = new HashMap<>();
  348.         for (int i = 0; i < roomTypes.size(); i++) {
  349.             roomTypesMap.put("roomType" + (i + 1), roomTypes.get(i));
  350.         }
  351.         hotelRef.child("roomTypes").setValue(roomTypesMap);
  352.     }
  353.  
  354.     // then reretrieve natin sa mga edit texts
  355.     private void retrieve(String userId) {
  356.         DatabaseReference hotelsRef = databaseReference.child("hotels");
  357.         Query query = hotelsRef.orderByChild("user_id").equalTo(userId);
  358.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  359.             @Override
  360.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  361.                 if (dataSnapshot.exists()) {
  362.                     DataSnapshot hotelSnapshot = dataSnapshot.getChildren().iterator().next();
  363.  
  364.                     String title = hotelSnapshot.child("name").getValue(String.class);
  365.                     String hotelAddress = hotelSnapshot.child("hotelAddress").getValue(String.class);
  366.                     String description = hotelSnapshot.child("description").getValue(String.class);
  367.                     String hotelContact = hotelSnapshot.child("hotelContact").getValue(String.class);
  368.                     String hotelEmail = hotelSnapshot.child("hotelEmail").getValue(String.class);
  369.                     String cancellationPolicy = hotelSnapshot.child("cancellationPolicy").getValue(String.class);
  370.                     String amenitiesHotel = hotelSnapshot.child("amenities").getValue(String.class);
  371.  
  372.                     List<String> roomTypes = new ArrayList<>();
  373.                     DataSnapshot roomTypesSnapshot = hotelSnapshot.child("roomTypes");
  374.                     for (DataSnapshot roomTypeSnapshot : roomTypesSnapshot.getChildren()) {
  375.                         String roomType = roomTypeSnapshot.getValue(String.class);
  376.                         roomTypes.add(roomType);
  377.                     }
  378.  
  379.                     List<String> imageUrls = new ArrayList<>();
  380.                     DataSnapshot imagesSnapshot = hotelSnapshot.child("images");
  381.                     for (DataSnapshot imageSnapshot : imagesSnapshot.getChildren()) {
  382.                         String imageUrl = imageSnapshot.getValue(String.class);
  383.                         imageUrls.add(imageUrl);
  384.                     }
  385.  
  386.                     hotelNameET.setText(title);
  387.                     hotelDescET.setText(description);
  388.                     hotelAddET.setText(hotelAddress);
  389.                     hotelContactET.setText(hotelContact);
  390.                     hotelEmailET.setText(hotelEmail);
  391.                     cancellationPolicyET.setText(cancellationPolicy);
  392.                     amenityET.setText(amenitiesHotel);
  393.                     imageUris.clear();
  394.  
  395.                     imageUris.clear();
  396.                     for (String imageUrl : imageUrls) {
  397.                         imageUris.add(Uri.parse(imageUrl));
  398.                     }
  399.                     roomTypes.clear();
  400.                     roomTypes.addAll(roomTypes);
  401.                     roomTypeAdapter.notifyDataSetChanged();
  402.  
  403.                     adapter.setUris(imageUris);
  404.                     adapter.notifyDataSetChanged();
  405.  
  406.                     roomTypeAdapter.setRoomTypes(roomTypes);
  407.                     roomTypeAdapter.notifyDataSetChanged();
  408.                 }
  409.             }
  410.  
  411.             @Override
  412.             public void onCancelled(@NonNull DatabaseError databaseError) {
  413.                 Log.e("retrieve", "error" + databaseError.getMessage());
  414.             }
  415.         });
  416.     }
  417.     private void addDotsIndicator(int position) { // again for dots lang nung image slider
  418.         dots = new ImageView[imageUris.size()];
  419.         dotsLayout.removeAllViews();
  420.  
  421.         for (int i = 0; i < dots.length; i++) {
  422.             dots[i] = new ImageView(this);
  423.             dots[i].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_unselected));
  424.  
  425.             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
  426.                     LinearLayout.LayoutParams.WRAP_CONTENT,
  427.                     LinearLayout.LayoutParams.WRAP_CONTENT
  428.             );
  429.  
  430.             params.setMargins(8, 0, 8, 0);
  431.             dotsLayout.addView(dots[i], params);
  432.         }
  433.         if (dots.length > 0) {
  434.             dots[position].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.dots_selected));
  435.         }
  436.     }
  437.     private void saveImages(String hotelId, List<String> imageUrls) {
  438.         DatabaseReference imagesRef = databaseReference.child("hotels").child(hotelId).child("images");
  439.  
  440.         for (int i = 0; i < imageUrls.size(); i++) {
  441.             imagesRef.child("image" + (i + 1)).setValue(imageUrls.get(i));
  442.         }
  443.     }
  444.     private void saveRoomTypes(String hotelId, List<String> roomTypes) {
  445.         DatabaseReference roomTypesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  446.  
  447.         if (roomTypes != null) {
  448.             for (int i = 0; i < roomTypes.size(); i++) {
  449.                 String roomType = roomTypes.get(i);
  450.                 if (roomType != null) {
  451.                     roomTypesRef.child("roomType" + (i + 1)).setValue(roomType);
  452.                 }
  453.             }
  454.         }
  455.     }
  456. }
  457.  
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement