diff --git a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java index 27b335d..e0f411a 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java @@ -4,7 +4,6 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; -import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -55,14 +54,12 @@ private Map userViews = new HashMap<>(); private int[] marginTopInDp = {90, 100, 300, 450, 480, 310, 1000}; private int[] marginStartInDp = {0, 250, 0, 90, 200, 280, 1000}; - private int i = 0; ActivityViewModel activityViewModel; UserViewModel userViewModel; Tampopo tampopo; private ChatViewModel chatViewModel; - private final List recentUpdatedFriends = new ArrayList<>(); @Override @@ -213,15 +210,22 @@ private void updateActivityView(@NonNull List friends) { ConstraintLayout layout = findViewById(R.id.main); - i = 0; - for (String friendId : friends) { - if (i >= 6) break; + List displayFriends = friends.subList(0, Math.min(friends.size(), 6)); + List currentIds = new ArrayList<>(userViews.keySet()); + for (String existingId : currentIds) { + if (!displayFriends.contains(existingId)) { + layout.removeView(userViews.get(existingId)); + userViews.remove(existingId); + } + } + + for (int index = 0; index < displayFriends.size(); index++) { + String friendId = displayFriends.get(index); FriendIconView userView = userViews.get(friendId); if (userView == null) { - String nickname = userViewModel.getNickname(friendId); - userView = new FriendIconView(MainActivity.this, friendId, nickname, chatViewModel); + userView = new FriendIconView(MainActivity.this, friendId, friendId, chatViewModel); userView.setPadding(16, 16, 16, 16); userView.setId(View.generateViewId()); @@ -235,26 +239,30 @@ MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); activitiesLiveData.observe(MainActivity.this, userView.getActivitiesObserver()); + + final FriendIconView finalView = userView; + new Thread(() -> { + String nickname = userViewModel.getNickname(friendId); + runOnUiThread(() -> finalView.setNickname(nickname)); + }).start(); } ConstraintSet set = new ConstraintSet(); set.clone(layout); int marginTopInPx = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, - marginTopInDp[i], + marginTopInDp[index], getResources().getDisplayMetrics() ); int marginStartInPx = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, - marginStartInDp[i], + marginStartInDp[index], getResources().getDisplayMetrics() ); set.connect(userView.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, marginTopInPx); set.connect(userView.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, marginStartInPx); set.applyTo(layout); - - i++; } } }