From 40d6107caa91fd767f6be13a9b801306804f87a7 Mon Sep 17 00:00:00 2001 From: Pau Date: Thu, 22 May 2025 23:43:16 +0200 Subject: [PATCH] Updates and image view in place detail --- .../acloc/activity/AddNewPlaceActivity.java | 37 ++++++++++++++----- .../acloc/activity/PlaceDetailActivity.java | 22 ++++++++++- .../example/acloc/fragments/MapFragment.java | 6 ++- .../java/com/example/acloc/model/Place.java | 10 ++++- .../main/res/layout/activity_place_detail.xml | 27 ++++++++++---- 5 files changed, 80 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/example/acloc/activity/AddNewPlaceActivity.java b/app/src/main/java/com/example/acloc/activity/AddNewPlaceActivity.java index df20e3f..c998b23 100644 --- a/app/src/main/java/com/example/acloc/activity/AddNewPlaceActivity.java +++ b/app/src/main/java/com/example/acloc/activity/AddNewPlaceActivity.java @@ -31,9 +31,12 @@ import com.google.android.material.textfield.TextInputEditText; import com.google.gson.JsonObject; import com.squareup.picasso.Picasso; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.util.Objects; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -55,7 +58,7 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli private Uri selectedImageUri; private String imageUrl; - private String JSonString; + private String jsonString; @Override protected void onCreate(Bundle savedInstanceState) { @@ -105,7 +108,8 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli "Place created by: " + entity.getCreatedBy() + "\n " + "Place latitude: " + entity.getLatitude() + "\n " + "Place longitude: " + entity.getLongitude() + "\n " + - "Place description: " + entity.getDescription() + "\n " + "Place description: " + entity.getDescription() + "\n " + + "Place photo: " + entity.getImage() + "\n " ); } } @@ -126,7 +130,18 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli etLongitude.setText(entity.getLongitude()); etAddress.setText(entity.getAddress()); etPlaceDescription.setText(entity.getDescription()); - + if (entity.getImage() != null || !Objects.equals(entity.getImage(), "")) { + String rawImg = entity.getImage(); + try { + JSONArray array = new JSONArray(rawImg); + String imageUrl = array.getString(0); // Get first element in the array + Picasso.get().load(imageUrl).into(ivPlacePhoto); + } catch (JSONException e) { + Log.e(TAG, "ERROR: " + e.toString()); + } + } else { + Picasso.get().load(R.drawable.logo_add_location).into(ivPlacePhoto); + } } @SuppressLint("NonConstantResourceId") @@ -170,9 +185,9 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli if (json.getBoolean("success")) { String filename = json.getJSONObject("file").getString("filename"); imageUrl = BASE_URL + "public/" + filename; - JSonString = "[\"" + imageUrl + "\"]"; + jsonString = "[\"" + imageUrl + "\"]"; Helper.makeSnackBar(rlAddPlace, "Image uploaded successfully"); - Log.d(TAG, "JsonString: " + JSonString); + Log.d(TAG, "JsonString: " + jsonString); } else { Helper.makeSnackBar(rlAddPlace, "Upload failed"); } @@ -197,11 +212,11 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli if (place_uuid != null && !place_uuid.isEmpty()) { // Update existing place updatePlaceRetrofit(place_uuid, entity.getName(), entity.getDescription(), - entity.getAddress(), entity.getLatitude(), entity.getLongitude(), entity.getCreatedBy()); + entity.getAddress(), entity.getLatitude(), entity.getLongitude(), entity.getCreatedBy(), entity.getImage()); } else { // Insert new place insertPlaceRetrofit(entity.getName(), entity.getDescription(), - entity.getAddress(), entity.getLatitude(), entity.getLongitude(), entity.getCreatedBy()); + entity.getAddress(), entity.getLatitude(), entity.getLongitude(), entity.getCreatedBy(), entity.getImage()); } } } @@ -214,10 +229,11 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli entity.setLongitude(Helper.getStringFromInput(etLongitude)); entity.setCreatedBy(SharedPref.getUserUid(context)); entity.setUuid(place_uuid); + entity.setImage(jsonString); } private void insertPlaceRetrofit(String name, String description, String address, - String latitude, String longitude, String createdBy) { + String latitude, String longitude, String createdBy, String jsonString) { DialogUtils.showLoadingDialog(context, context.getString(R.string.Please_wait)); JsonObject placeBody = new JsonObject(); @@ -227,7 +243,7 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli placeBody.addProperty("latitude", latitude); placeBody.addProperty("longitude", longitude); placeBody.addProperty("createdBy", createdBy); - placeBody.addProperty("images", JSonString); + placeBody.addProperty("images", this.jsonString); String token = "Bearer " + SharedPref.getAccessToken(context); @@ -268,7 +284,7 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli } private void updatePlaceRetrofit(String uuid, String name, String description, String address, - String latitude, String longitude, String createdBy) { + String latitude, String longitude, String createdBy, String jsonString) { DialogUtils.showLoadingDialog(context, getString(R.string.Updating_place)); @@ -279,6 +295,7 @@ public class AddNewPlaceActivity extends AppCompatActivity implements View.OnCli placeBody.addProperty("latitude", latitude); placeBody.addProperty("longitude", longitude); placeBody.addProperty("createdBy", createdBy); + placeBody.addProperty("images", jsonString); String token = "Bearer " + SharedPref.getAccessToken(context); diff --git a/app/src/main/java/com/example/acloc/activity/PlaceDetailActivity.java b/app/src/main/java/com/example/acloc/activity/PlaceDetailActivity.java index 9146d9e..67e7ccb 100644 --- a/app/src/main/java/com/example/acloc/activity/PlaceDetailActivity.java +++ b/app/src/main/java/com/example/acloc/activity/PlaceDetailActivity.java @@ -30,6 +30,10 @@ import com.google.android.material.textview.MaterialTextView; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.squareup.picasso.Picasso; + +import org.json.JSONArray; +import org.json.JSONException; import java.io.IOException; import java.util.ArrayList; @@ -44,7 +48,7 @@ public class PlaceDetailActivity extends AppCompatActivity implements View.OnCli public static final String TAG = PlaceDetailActivity.class.getSimpleName(); private RelativeLayout rlPlaceDetails; private MaterialTextView etPlaceName, etAddress, etPlaceDescription; - private ImageView ivFavorite, ivEdit; + private ImageView ivFavorite, ivEdit, ivPlacePhoto; private AppCompatButton btnSubmit; private Dialog dialog; private Context context; @@ -111,6 +115,7 @@ public class PlaceDetailActivity extends AppCompatActivity implements View.OnCli etPlaceDescription = findViewById(R.id.etPlaceDescription); etAddress = findViewById(R.id.etAddress); ivFavorite = findViewById(R.id.ivFavorite); + ivPlacePhoto = findViewById(R.id.ivPlacePhoto); ivEdit = findViewById(R.id.ivEdit); btnSubmit = findViewById(R.id.btnSubmit); rvReports = findViewById(R.id.rvReports); @@ -135,6 +140,18 @@ public class PlaceDetailActivity extends AppCompatActivity implements View.OnCli etPlaceName.setText(placeEntity.getName()); etAddress.setText(placeEntity.getAddress()); etPlaceDescription.setText(placeEntity.getDescription()); + if (placeEntity.getImage() != null || placeEntity.getImage() != "") { + String rawImg = placeEntity.getImage(); + try { + JSONArray array = new JSONArray(rawImg); + String imageUrl = array.getString(0); // Get first element in the array + Picasso.get().load(imageUrl).into(ivPlacePhoto); + } catch (JSONException e) { + Log.e(TAG, "ERROR: " + e.toString()); + } + } else { + Picasso.get().load(R.drawable.logo_add_location).into(ivPlacePhoto); + } Log.d(TAG, "Place uuid: " + placeEntity.getUuid() + "\n " + "Place name: " + placeEntity.getName() + "\n " + @@ -142,7 +159,8 @@ public class PlaceDetailActivity extends AppCompatActivity implements View.OnCli "Place created by: " + placeEntity.getCreatedBy() + "\n " + "Place latitude: " + placeEntity.getLatitude() + "\n " + "Place longitude: " + placeEntity.getLongitude() + "\n " + - "Place description: " + placeEntity.getDescription() + "\n " + "Place description: " + placeEntity.getDescription() + "\n " + + "Place Photo: " + placeEntity.getImage() + "\n " ); } } diff --git a/app/src/main/java/com/example/acloc/fragments/MapFragment.java b/app/src/main/java/com/example/acloc/fragments/MapFragment.java index 12b1c42..2027df4 100644 --- a/app/src/main/java/com/example/acloc/fragments/MapFragment.java +++ b/app/src/main/java/com/example/acloc/fragments/MapFragment.java @@ -304,6 +304,9 @@ public class MapFragment extends Fragment { private void initMap() { fetchAndShowAllPlaces(); + // Clear old data + placeList.clear(); // clear in-memory list /// + googleMap.clear(); // remove all markers from the map /// fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireActivity()); geocoder = new Geocoder(requireContext(), Locale.getDefault()); @@ -493,7 +496,6 @@ public class MapFragment extends Fragment { private void fetchAndShowAllPlaces() { String token = "Bearer " + SharedPref.getAccessToken(context); // get saved token - // Using the new PlaceService through LocationApiClient PlaceService placeService = LocationApiClient.getInstance().getPlaceService(); Call call = placeService.getAllPlaces(token); @@ -517,6 +519,7 @@ public class MapFragment extends Fragment { String uuid = placeObj.optString("uuid", ""); double lat = placeObj.getDouble("latitude"); double lng = placeObj.getDouble("longitude"); + String image = placeObj.getString("images"); LatLng latLng = new LatLng(lat, lng); googleMap.addMarker(new MarkerOptions() @@ -533,6 +536,7 @@ public class MapFragment extends Fragment { place.setDescription(description); place.setCreatedBy(createdBy); place.setUuid(uuid); + place.setImage(image); placeList.add(place); } diff --git a/app/src/main/java/com/example/acloc/model/Place.java b/app/src/main/java/com/example/acloc/model/Place.java index 849dcc4..c69f778 100644 --- a/app/src/main/java/com/example/acloc/model/Place.java +++ b/app/src/main/java/com/example/acloc/model/Place.java @@ -3,7 +3,7 @@ package com.example.acloc.model; import java.io.Serializable; public class Place implements Serializable { - String uuid, name, description, address, latitude, longitude, createdBy; + String uuid, name, description, address, latitude, longitude, createdBy, image; public String getUuid() { return uuid; @@ -60,4 +60,12 @@ public class Place implements Serializable { public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } } diff --git a/app/src/main/res/layout/activity_place_detail.xml b/app/src/main/res/layout/activity_place_detail.xml index a7a635b..67519fb 100644 --- a/app/src/main/res/layout/activity_place_detail.xml +++ b/app/src/main/res/layout/activity_place_detail.xml @@ -25,17 +25,28 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + + + + + + + + - + android:padding="@dimen/content_padding" + android:src="@drawable/logo_add_location" /> @@ -105,7 +116,7 @@ android:layout_width="@dimen/smallest_image_icon_width" android:layout_height="@dimen/smallest_image_icon_height" android:autofillHints="Edit Place" - android:contentDescription="Edit Place" + android:contentDescription="@string/edit" android:src="@drawable/ic_edit_location" app:tint="?attr/colorOnBackground" />