From e2b50daaddbe228354659c13762c3eaf499e1bf4 Mon Sep 17 00:00:00 2001 From: FurWaz <fur.waz06@gmail.com> Date: Tue, 13 Dec 2022 10:57:12 +0100 Subject: [PATCH] Added async photos loading --- .../app/src/main/java/Views/InfoAdapter.java | 10 +++++++++ .../com/furwaz/roomview/RoomActivity.java | 13 ++++++++++++ .../com/furwaz/roomview/ZoneActivity.java | 21 +++++++++++++++---- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Sources/app/src/main/java/Views/InfoAdapter.java b/Sources/app/src/main/java/Views/InfoAdapter.java index 72ff605..fed05b2 100644 --- a/Sources/app/src/main/java/Views/InfoAdapter.java +++ b/Sources/app/src/main/java/Views/InfoAdapter.java @@ -135,6 +135,16 @@ public class InfoAdapter<A> extends BaseAdapter { public void setBindings(InfoBinding[] objs) { this.objs = objs; + this.updateQueryList(); + } + + public void addBinding(InfoBinding binding) { + InfoBinding[] newObjs = new InfoBinding[this.objs.length + 1]; + for (int i = 0; i < this.objs.length; i++) + newObjs[i] = this.objs[i]; + newObjs[this.objs.length] = binding; + this.objs = newObjs; + this.updateQueryList(); } public void setOnEditListener(Callback cb) { diff --git a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java index 838c5fe..4acbfaa 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java @@ -26,6 +26,8 @@ import android.widget.Toast; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import Common.BuildingManager; import Common.InfoBinding; @@ -38,6 +40,7 @@ import Structures.PathDoor; import Structures.PathInfo; import Structures.PathStairs; import Structures.PathType; +import Structures.PhotoInfo; import Structures.RoomInfo; import Structures.StairsDirection; import Structures.ZoneInfo; @@ -69,6 +72,16 @@ public class RoomActivity extends AppCompatActivity { return; } + // pre-load all the zones's photos (to make the app faster) + ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.execute(() -> { + for (ZoneInfo zone : room.getZones()) { + for (PhotoInfo photo : zone.getPhotos()) { + photo.getBitmap(); + } + } + }); + View pathways_btn = findViewById(R.id.btn_tab_pathways); pathways_btn.setOnClickListener(view -> switchToPathways()); diff --git a/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java index 3f1b89a..e00d4ef 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java @@ -12,6 +12,9 @@ import android.widget.SearchView; import android.widget.TextView; import android.widget.Toast; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + import Common.BuildingManager; import Common.InfoBinding; import Popups.PhotoPopup; @@ -49,7 +52,7 @@ public class ZoneActivity extends AppCompatActivity { photo_lv = findViewById(R.id.photo_list); LinearLayout noDataLayout = findViewById(R.id.no_photo_layout); - photo_adapter = new InfoAdapter<PhotoInfo>(this, zone.getPhotos(), noDataLayout, R.layout.photo_tile); + photo_adapter = new InfoAdapter<>(this, zone.getPhotos(), noDataLayout, R.layout.photo_tile); photo_lv.setAdapter(photo_adapter); photo_adapter.setOnRemoveListener(param -> { @@ -82,7 +85,7 @@ public class ZoneActivity extends AppCompatActivity { intent.putExtra("room", building.getRooms().indexOf(room)); intent.putExtra("zone", room.getZones().indexOf(zone)); intent.putExtra("photo", zone.getPhotos().indexOf(param)); - intent.putExtra("new_photo", ((PhotoInfo) param).getBitmap() == null); + intent.putExtra("new_photo", ((PhotoInfo) param).getImage() == null); startActivity(intent); return null; }); @@ -90,8 +93,18 @@ public class ZoneActivity extends AppCompatActivity { photo_adapter.setBindings(new InfoBinding[]{ new InfoBinding(param -> ((PhotoInfo) param).getPathViews().size(), R.id.photo_pathways), - new InfoBinding(param -> stringifyOrientation(((PhotoInfo) param).getOrientation()), R.id.photo_orientation), - new InfoBinding(param -> ((PhotoInfo) param).getBitmap(), R.id.photo_bitmap) + new InfoBinding(param -> stringifyOrientation(((PhotoInfo) param).getOrientation()), R.id.photo_orientation) + }); + + // load the photos async (to make the app faster) + ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.execute(() -> { + for (PhotoInfo photo : zone.getPhotos()) { + photo.getBitmap(); + } + runOnUiThread(() -> { + photo_adapter.addBinding(new InfoBinding(param -> ((PhotoInfo) param).getBitmap(), R.id.photo_bitmap)); + }); }); SearchView photo_sv = findViewById(R.id.photo_search); -- GitLab