diff --git a/app/src/main/java/com/swsnack/catchhouse/adapter/bindingadapter/ChattingDataBinding.java b/app/src/main/java/com/swsnack/catchhouse/adapter/bindingadapter/ChattingDataBinding.java index cd8d3f9..775a822 100644 --- a/app/src/main/java/com/swsnack/catchhouse/adapter/bindingadapter/ChattingDataBinding.java +++ b/app/src/main/java/com/swsnack/catchhouse/adapter/bindingadapter/ChattingDataBinding.java @@ -1,9 +1,11 @@ package com.swsnack.catchhouse.adapter.bindingadapter; +import androidx.annotation.RequiresApi; import androidx.databinding.BindingAdapter; import android.net.Uri; import androidx.recyclerview.widget.RecyclerView; +import android.os.Build; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -25,6 +27,7 @@ public class ChattingDataBinding { + @RequiresApi(api = Build.VERSION_CODES.N) @BindingAdapter({"setChattingList"}) public static void setList(RecyclerView recyclerView, List chattingList) { ChattingListAdapter chattingListAdapter = (ChattingListAdapter) recyclerView.getAdapter(); @@ -37,7 +40,7 @@ public static void setList(RecyclerView recyclerView, List chattingLis return; } - List orderedList = DataConverter.reOrderedListByTimeStamp(chattingList); + List orderedList = DataConverter.sortByTimeStamp(chattingList); chattingListAdapter.setList(orderedList); } diff --git a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingDiffUtil.java b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingDiffUtil.java index 148bf1a..a096905 100644 --- a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingDiffUtil.java +++ b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingDiffUtil.java @@ -1,8 +1,8 @@ package com.swsnack.catchhouse.adapter.chattingadapter; + import com.swsnack.catchhouse.adapter.BaseDiffUtil; import com.swsnack.catchhouse.data.model.Chatting; -import com.swsnack.catchhouse.data.model.Message; import java.util.List; @@ -12,13 +12,13 @@ public class ChattingDiffUtil extends BaseDiffUtil { super(mOldList, mNewList); } + @Override + public boolean areItemsTheSame(int oldListIndex, int newListIndex) { + return mOldList.get(oldListIndex).getRoomUid().equals(mNewList.get(newListIndex).getRoomUid()); + } + @Override public boolean areContentsTheSame(int oldMessageIndex, int newMessageIndex) { - if (mOldList.get(oldMessageIndex).getMessages() != null && mNewList.get(newMessageIndex).getMessages() != null) { - List oldMessages = mOldList.get(oldMessageIndex).getMessages(); - List newMessages = mNewList.get(newMessageIndex).getMessages(); - return oldMessages.get(oldMessages.size() -1).equals(newMessages.get(newMessages.size() -1)); - } return false; } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListAdapter.java b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListAdapter.java index 4f9c880..0a875d0 100644 --- a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListAdapter.java +++ b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListAdapter.java @@ -1,13 +1,11 @@ package com.swsnack.catchhouse.adapter.chattingadapter; import android.content.Context; -import androidx.annotation.NonNull; -import com.google.android.material.snackbar.Snackbar; -import androidx.recyclerview.widget.DiffUtil; -import androidx.recyclerview.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.ViewGroup; +import com.google.android.material.snackbar.Snackbar; import com.swsnack.catchhouse.R; import com.swsnack.catchhouse.adapter.BaseRecyclerViewAdapter; import com.swsnack.catchhouse.data.model.Chatting; @@ -17,6 +15,10 @@ import java.util.List; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.RecyclerView; + public class ChattingListAdapter extends BaseRecyclerViewAdapter { private ChattingViewModel mChattingViewModel; @@ -59,7 +61,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi ItemChattingListBinding binding = ((ChattingListItemHolder) holder).getBinding(); binding.setChattingData(arrayList.get(position)); - mChattingViewModel.getUser(position, + mChattingViewModel.getUser(arrayList.get(position).getUsers(), binding::setUserData, error -> Snackbar.make(binding.getRoot(), R.string.snack_failed_load_list, Snackbar.LENGTH_SHORT).show()); @@ -83,4 +85,4 @@ public void setList(List newChattingList) { this.arrayList = newChattingList; result.dispatchUpdatesTo(this); } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListItemHolder.java b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListItemHolder.java index 783c803..ce0ba80 100644 --- a/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListItemHolder.java +++ b/app/src/main/java/com/swsnack/catchhouse/adapter/chattingadapter/ChattingListItemHolder.java @@ -1,13 +1,13 @@ package com.swsnack.catchhouse.adapter.chattingadapter; +import com.swsnack.catchhouse.databinding.ItemChattingListBinding; + +import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; -import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.swsnack.catchhouse.databinding.ItemChattingListBinding; - public class ChattingListItemHolder extends RecyclerView.ViewHolder implements LifecycleOwner { private ItemChattingListBinding mBinding; diff --git a/app/src/main/java/com/swsnack/catchhouse/data/db/AppDataCache.java b/app/src/main/java/com/swsnack/catchhouse/data/db/AppDataCache.java index e6cc271..0b2282f 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/db/AppDataCache.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/db/AppDataCache.java @@ -1,28 +1,7 @@ package com.swsnack.catchhouse.data.db; -import com.swsnack.catchhouse.data.model.Room; +public interface AppDataCache{ -import java.util.HashMap; + int getCacheItemSize(); -public class AppDataCache { - - private static AppDataCache INSTANCE; - private HashMap mRecentRoomCache; - - public static AppDataCache getInstance() { - if(INSTANCE == null) { - synchronized (AppDataCache.class) { - INSTANCE = new AppDataCache(); - } - } - return INSTANCE; - } - - private AppDataCache() { - mRecentRoomCache = new HashMap<>(); - } - - public HashMap getRecentRoomCache() { - return mRecentRoomCache; - } } diff --git a/app/src/main/java/com/swsnack/catchhouse/data/db/AppDatabase.java b/app/src/main/java/com/swsnack/catchhouse/data/db/AppDatabase.java index 10a9b51..08aa2ee 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/db/AppDatabase.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/db/AppDatabase.java @@ -3,9 +3,9 @@ import com.swsnack.catchhouse.AppApplication; import com.swsnack.catchhouse.data.entity.FavoriteRoomEntity; import com.swsnack.catchhouse.data.entity.SellRoomEntity; -import com.swsnack.catchhouse.repository.room.local.FavoriteRoomDao; -import com.swsnack.catchhouse.repository.room.local.SellRoomDao; -import com.swsnack.catchhouse.repository.room.local.TypeConverter; +import com.swsnack.catchhouse.data.source.favoriteroom.FavoriteRoomDao; +import com.swsnack.catchhouse.data.source.room.local.SellRoomDao; +import com.swsnack.catchhouse.data.source.room.local.TypeConverter; import androidx.room.Database; import androidx.room.Room; diff --git a/app/src/main/java/com/swsnack/catchhouse/data/entity/FavoriteRoomEntity.java b/app/src/main/java/com/swsnack/catchhouse/data/entity/FavoriteRoomEntity.java index 3bf43fe..7cb112a 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/entity/FavoriteRoomEntity.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/entity/FavoriteRoomEntity.java @@ -1,6 +1,6 @@ package com.swsnack.catchhouse.data.entity; -import com.swsnack.catchhouse.repository.room.local.TypeConverter; +import com.swsnack.catchhouse.data.source.room.local.TypeConverter; import java.util.List; diff --git a/app/src/main/java/com/swsnack/catchhouse/data/entity/SellRoomEntity.java b/app/src/main/java/com/swsnack/catchhouse/data/entity/SellRoomEntity.java index 9c59197..642a4b1 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/entity/SellRoomEntity.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/entity/SellRoomEntity.java @@ -1,7 +1,7 @@ package com.swsnack.catchhouse.data.entity; -import com.swsnack.catchhouse.repository.room.local.TypeConverter; +import com.swsnack.catchhouse.data.source.room.local.TypeConverter; import java.util.List; diff --git a/app/src/main/java/com/swsnack/catchhouse/data/model/Chatting.java b/app/src/main/java/com/swsnack/catchhouse/data/model/Chatting.java index c878a25..b000d95 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/model/Chatting.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/model/Chatting.java @@ -1,11 +1,11 @@ package com.swsnack.catchhouse.data.model; -import androidx.annotation.Nullable; - import java.io.Serializable; import java.util.List; import java.util.Map; +import androidx.annotation.Nullable; + public class Chatting implements Serializable { private String roomUid; @@ -45,13 +45,14 @@ public boolean equals(Object obj) { return this.roomUid.equals(((Chatting) obj).getRoomUid()); } + @Override + public int hashCode() { + return roomUid.hashCode(); + } + @Nullable public List getMessages() { return messages; } - - public void setMessages(List messages) { - this.messages = messages; - } } diff --git a/app/src/main/java/com/swsnack/catchhouse/data/model/Message.java b/app/src/main/java/com/swsnack/catchhouse/data/model/Message.java index b4083b1..62638ff 100644 --- a/app/src/main/java/com/swsnack/catchhouse/data/model/Message.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/model/Message.java @@ -30,14 +30,6 @@ public String getContent() { return content; } - public void setTimestamp(String timestamp) { - this.timestamp = timestamp; - } - - public void setSendUuid(String sendUuid) { - this.sendUuid = sendUuid; - } - public void setContent(String content) { this.content = content; } @@ -45,8 +37,16 @@ public void setContent(String content) { @Override public boolean equals(Object obj) { if(!(obj instanceof Message)) { - return false; + return false; } - return this.timestamp.equals(((Message) obj).getTimestamp()); + Message compareObj = (Message) obj; + return this.timestamp.equals(((Message) obj).getTimestamp()) && + this.sendUuid.equals(compareObj.getSendUuid()) && + this.content.equals(compareObj.content); + } + + @Override + public int hashCode() { + return timestamp.hashCode(); } } \ No newline at end of file diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/chatting/ChattingDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/chatting/ChattingDataSource.java similarity index 96% rename from app/src/main/java/com/swsnack/catchhouse/repository/chatting/ChattingDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/chatting/ChattingDataSource.java index 9501051..7888479 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/chatting/ChattingDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/chatting/ChattingDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.chatting; +package com.swsnack.catchhouse.data.source.chatting; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/chatting/remote/RemoteChattingImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/chatting/remote/RemoteChattingImpl.java similarity index 98% rename from app/src/main/java/com/swsnack/catchhouse/repository/chatting/remote/RemoteChattingImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/chatting/remote/RemoteChattingImpl.java index a7e0656..c96f5c1 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/chatting/remote/RemoteChattingImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/chatting/remote/RemoteChattingImpl.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.chatting.remote; +package com.swsnack.catchhouse.data.source.chatting.remote; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseException; @@ -13,7 +13,7 @@ import com.swsnack.catchhouse.firebase.DBListValueHelper; import com.swsnack.catchhouse.repository.OnFailedListener; import com.swsnack.catchhouse.repository.OnSuccessListener; -import com.swsnack.catchhouse.repository.chatting.ChattingDataSource; +import com.swsnack.catchhouse.data.source.chatting.ChattingDataSource; import java.util.HashMap; import java.util.List; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDao.java b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDao.java similarity index 94% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDao.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDao.java index 463d40f..0529c48 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDao.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDao.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.favoriteroom; import com.swsnack.catchhouse.data.entity.FavoriteRoomEntity; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDaoImpl.java similarity index 90% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDaoImpl.java index 8209d69..90cd256 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDaoImpl.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.favoriteroom; import com.google.firebase.auth.FirebaseAuth; import com.swsnack.catchhouse.data.db.AppDatabase; @@ -13,21 +13,21 @@ import androidx.annotation.Nullable; -public class FavoriteRoomImpl implements FavoriteRoomDataSource { +public class FavoriteRoomDaoImpl implements FavoriteRoomDataSource { - private static FavoriteRoomImpl INSTANCE; + private static FavoriteRoomDaoImpl INSTANCE; private FavoriteRoomDao mRoomDao; - public static FavoriteRoomImpl getInstance() { + public static FavoriteRoomDaoImpl getInstance() { if (INSTANCE == null) { - synchronized (FavoriteRoomImpl.class) { - INSTANCE = new FavoriteRoomImpl(); + synchronized (FavoriteRoomDaoImpl.class) { + INSTANCE = new FavoriteRoomDaoImpl(); } } return INSTANCE; } - private FavoriteRoomImpl() { + private FavoriteRoomDaoImpl() { mRoomDao = AppDatabase.getInstance().getRoomDataAccessor(); } diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDataSource.java similarity index 85% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDataSource.java index 9760b65..7159595 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.favoriteroom; import com.swsnack.catchhouse.data.model.Room; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomHelper.java b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomHelper.java similarity index 98% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomHelper.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomHelper.java index f790389..db90b78 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/FavoriteRoomHelper.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/favoriteroom/FavoriteRoomHelper.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.favoriteroom; import android.os.AsyncTask; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/location/LocationDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/location/LocationDataSource.java similarity index 90% rename from app/src/main/java/com/swsnack/catchhouse/repository/location/LocationDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/location/LocationDataSource.java index 95c1203..81e73da 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/location/LocationDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/location/LocationDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.location; +package com.swsnack.catchhouse.data.source.location; import com.swsnack.catchhouse.data.model.Address; import com.swsnack.catchhouse.repository.OnFailedListener; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/location/remote/RemoteLocationImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/location/remote/RemoteLocationImpl.java similarity index 92% rename from app/src/main/java/com/swsnack/catchhouse/repository/location/remote/RemoteLocationImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/location/remote/RemoteLocationImpl.java index cf0c7c3..6ce6043 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/location/remote/RemoteLocationImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/location/remote/RemoteLocationImpl.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.location.remote; +package com.swsnack.catchhouse.data.source.location.remote; import com.firebase.geofire.GeoFire; import com.firebase.geofire.GeoLocation; @@ -6,7 +6,7 @@ import com.swsnack.catchhouse.data.model.Address; import com.swsnack.catchhouse.repository.OnFailedListener; import com.swsnack.catchhouse.repository.OnSuccessListener; -import com.swsnack.catchhouse.repository.location.LocationDataSource; +import com.swsnack.catchhouse.data.source.location.LocationDataSource; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomDao.java b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomDao.java new file mode 100644 index 0000000..9725f95 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomDao.java @@ -0,0 +1,89 @@ +package com.swsnack.catchhouse.data.source.recentroom; + +import android.os.Build; + +import com.swsnack.catchhouse.data.db.AppDataCache; +import com.swsnack.catchhouse.data.model.Room; + +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; + +public class RecentRoomDao implements AppDataCache { + + private Map mRecentRoomCache; + private static RecentRoomDao INSTANCE; + + public static RecentRoomDao getInstance() { + if (INSTANCE == null) { + synchronized (RecentRoomDao.class) { + INSTANCE = new RecentRoomDao(); + } + } + return INSTANCE; + } + + private RecentRoomDao() { + mRecentRoomCache = new HashMap<>(getCacheItemSize()); + } + + @Override + public int getCacheItemSize() { + return 5; + } + + @RequiresApi(api = Build.VERSION_CODES.N) + public void setRecentRoom(@NonNull Room room) { + if (mRecentRoomCache.size() < getCacheItemSize()) { + mRecentRoomCache.put(room, new Date().getTime()); + return; + } + + mRecentRoomCache.remove(ascSortByTimeStamp().get(0)); + setRecentRoom(room); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Nullable + public List getRecentRoom() { + return desSortByTimeStamp(); + } + + public void deleteRecentRoomList() { + mRecentRoomCache.clear(); + } + + public void deleteRoom(@NonNull Room room) { + mRecentRoomCache.remove(room); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + private List ascSortByTimeStamp() { + Comparator comparator = (r1, r2) -> + Objects.requireNonNull(mRecentRoomCache.get(r1)) + .compareTo(Objects.requireNonNull(mRecentRoomCache.get(r2))); + + return mRecentRoomCache.keySet().stream() + .sorted(comparator).collect(Collectors.toList()); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + private List desSortByTimeStamp() { + Comparator comparator = (r1, r2) -> + Objects.requireNonNull(mRecentRoomCache.get(r1)) + .compareTo(Objects.requireNonNull(mRecentRoomCache.get(r2))); + + Comparator reverse = comparator.reversed(); + + return mRecentRoomCache.keySet().stream() + .sorted(reverse).collect(Collectors.toList()); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/RecentRoomDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepository.java similarity index 68% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/RecentRoomDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepository.java index eb6ffe0..f687668 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/RecentRoomDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepository.java @@ -1,10 +1,10 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.recentroom; import com.swsnack.catchhouse.data.model.Room; import java.util.List; -public interface RecentRoomDataSource { +public interface RecentRoomRepository { void setRecentRoom(Room room); diff --git a/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepositoryImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepositoryImpl.java new file mode 100644 index 0000000..c9ee148 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/recentroom/RecentRoomRepositoryImpl.java @@ -0,0 +1,48 @@ +package com.swsnack.catchhouse.data.source.recentroom; + +import android.os.Build; + +import com.swsnack.catchhouse.data.model.Room; + +import java.util.List; + +import androidx.annotation.RequiresApi; + +public class RecentRoomRepositoryImpl implements RecentRoomRepository{ + + private static RecentRoomRepositoryImpl INSTANCE; + private RecentRoomDao mRecentRoomDao; + + public static RecentRoomRepositoryImpl getInstance() { + if(INSTANCE == null) { + INSTANCE = new RecentRoomRepositoryImpl(); + } + return INSTANCE; + } + + private RecentRoomRepositoryImpl() { + this.mRecentRoomDao = RecentRoomDao.getInstance(); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void setRecentRoom(Room room) { + mRecentRoomDao.setRecentRoom(room); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public List getRecentRoom() { + return mRecentRoomDao.getRecentRoom(); + } + + @Override + public void deleteRecentRoomList() { + mRecentRoomDao.deleteRecentRoomList(); + } + + @Override + public void deleteRoom(Room room) { + mRecentRoomDao.deleteRoom(room); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDao.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDao.java similarity index 94% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDao.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDao.java index 04bc11c..d6f6ea4 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDao.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDao.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.room.local; import com.swsnack.catchhouse.data.entity.SellRoomEntity; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomData.java similarity index 73% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomData.java index 0c7b0e4..ea2811a 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomData.java @@ -1,10 +1,8 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.room.local; import com.google.firebase.auth.FirebaseAuth; import com.swsnack.catchhouse.data.db.AppDatabase; -import com.swsnack.catchhouse.data.entity.FavoriteRoomEntity; import com.swsnack.catchhouse.data.entity.SellRoomEntity; -import com.swsnack.catchhouse.data.mapper.RoomMapperFromFavorite; import com.swsnack.catchhouse.data.mapper.RoomMapperFromSell; import com.swsnack.catchhouse.data.mapper.SellRoomMapper; import com.swsnack.catchhouse.data.model.Room; @@ -15,21 +13,21 @@ import androidx.annotation.Nullable; -public class SellRoomImpl implements SellRoomDataSource { +public class SellRoomData implements SellRoomDataSource { - private static SellRoomImpl INSTANCE; + private static SellRoomData INSTANCE; private SellRoomDao mRoomDao; - public static SellRoomImpl getInstance() { + public static SellRoomData getInstance() { if (INSTANCE == null) { - synchronized (SellRoomImpl.class) { - INSTANCE = new SellRoomImpl(); + synchronized (SellRoomData.class) { + INSTANCE = new SellRoomData(); } } return INSTANCE; } - private SellRoomImpl() { + private SellRoomData() { mRoomDao = AppDatabase.getInstance().getSellRoomDataAccessor(); } @@ -41,7 +39,7 @@ public void setSellRoom(Room room) { SellRoomEntity sellRoomEntity = new SellRoomMapper().map(room); sellRoomEntity.setFirebaseUuid(FirebaseAuth.getInstance().getCurrentUser().getUid()); - new SellRoomHelper.AsyncSetSellRoom(mRoomDao).execute(sellRoomEntity); + new SellRoomDataHelper.AsyncSetSellRoom(mRoomDao).execute(sellRoomEntity); } @Override @@ -52,7 +50,7 @@ public void deleteSellRoom(Room room) { SellRoomEntity sellRoomEntity = new SellRoomMapper().map(room); sellRoomEntity.setFirebaseUuid(FirebaseAuth.getInstance().getCurrentUser().getUid()); - new SellRoomHelper.AsyncDeleteSellRoom(mRoomDao).execute(sellRoomEntity); + new SellRoomDataHelper.AsyncDeleteSellRoom(mRoomDao).execute(sellRoomEntity); } @@ -63,7 +61,7 @@ public List getSellRoomList() { } try { - List roomEntityList = new SellRoomHelper + List roomEntityList = new SellRoomDataHelper .AsyncLoadSellRoomList(mRoomDao) .execute(FirebaseAuth.getInstance().getCurrentUser().getUid()) .get(); @@ -82,7 +80,7 @@ public void deleteSellRoom() { return; } - new SellRoomHelper.AsyncDeleteUserSellRoom(mRoomDao).execute(FirebaseAuth.getInstance().getCurrentUser().getUid()); + new SellRoomDataHelper.AsyncDeleteUserSellRoom(mRoomDao).execute(FirebaseAuth.getInstance().getCurrentUser().getUid()); } @@ -94,7 +92,7 @@ public Room getSellRoom(String key) { } try { - SellRoomEntity sellRoomEntity = new SellRoomHelper.AsyncLoadSellRoom(mRoomDao).execute(key, FirebaseAuth.getInstance().getCurrentUser().getUid()).get(); + SellRoomEntity sellRoomEntity = new SellRoomDataHelper.AsyncLoadSellRoom(mRoomDao).execute(key, FirebaseAuth.getInstance().getCurrentUser().getUid()).get(); if(sellRoomEntity != null) { return new RoomMapperFromSell().map(sellRoomEntity); } @@ -111,7 +109,7 @@ public void updateRoom(Room room) { } SellRoomEntity sellRoomEntity = new SellRoomMapper().map(room); sellRoomEntity.setFirebaseUuid(FirebaseAuth.getInstance().getCurrentUser().getUid()); - new SellRoomHelper.AsyncUpdateSellRoom(mRoomDao).execute(sellRoomEntity); + new SellRoomDataHelper.AsyncUpdateSellRoom(mRoomDao).execute(sellRoomEntity); } diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomHelper.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataHelper.java similarity index 97% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomHelper.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataHelper.java index 131797a..bfe4fd0 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomHelper.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataHelper.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.room.local; import android.os.AsyncTask; @@ -6,7 +6,7 @@ import java.util.List; -class SellRoomHelper { +class SellRoomDataHelper { public static class AsyncSetSellRoom extends AsyncTask { diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataSource.java similarity index 85% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataSource.java index dc7fe20..e89a747 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/SellRoomDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/SellRoomDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.room.local; import com.swsnack.catchhouse.data.model.Room; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/TypeConverter.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/TypeConverter.java similarity index 92% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/local/TypeConverter.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/local/TypeConverter.java index a194881..cd00e51 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/TypeConverter.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/local/TypeConverter.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.local; +package com.swsnack.catchhouse.data.source.room.local; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RoomDataImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomData.java similarity index 90% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RoomDataImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomData.java index eaa056b..f6db32a 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RoomDataImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomData.java @@ -1,6 +1,5 @@ -package com.swsnack.catchhouse.repository.room.remote; +package com.swsnack.catchhouse.data.source.room.remote; -import android.app.Application; import android.net.Uri; import com.google.firebase.database.DataSnapshot; @@ -11,7 +10,6 @@ import com.google.firebase.database.ValueEventListener; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; -import com.swsnack.catchhouse.AppApplication; import com.swsnack.catchhouse.data.mapper.FirebaseRoomMapper; import com.swsnack.catchhouse.data.model.Room; import com.swsnack.catchhouse.firebase.DBValueHelper; @@ -27,25 +25,23 @@ import static com.swsnack.catchhouse.Constant.FirebaseKey.DB_ROOM; import static com.swsnack.catchhouse.Constant.FirebaseKey.STORAGE_ROOM_IMAGE; -public class RoomDataImpl implements RemoteRoomDataSource { +public class RemoteRoomData implements RemoteRoomDataSource{ private DatabaseReference db; private StorageReference fs; - private Application mApplication; - private static RoomDataImpl INSTANCE; + private static RemoteRoomData INSTANCE; - public static synchronized RoomDataImpl getInstance() { + public static synchronized RemoteRoomData getInstance() { if (INSTANCE == null) { - INSTANCE = new RoomDataImpl(); + INSTANCE = new RemoteRoomData(); } return INSTANCE; } - private RoomDataImpl() { + private RemoteRoomData() { db = FirebaseDatabase.getInstance().getReference().child(DB_ROOM); fs = FirebaseStorage.getInstance().getReference().child(STORAGE_ROOM_IMAGE); - mApplication = AppApplication.getAppContext(); } @Override diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RemoteRoomDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomDataSource.java similarity index 93% rename from app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RemoteRoomDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomDataSource.java index daa339c..13c7fce 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/remote/RemoteRoomDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/room/remote/RemoteRoomDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.room.remote; +package com.swsnack.catchhouse.data.source.room.remote; import android.net.Uri; @@ -9,7 +9,6 @@ import java.util.List; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; public interface RemoteRoomDataSource { diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/searching/SearchingDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/searching/SearchingDataSource.java similarity index 88% rename from app/src/main/java/com/swsnack/catchhouse/repository/searching/SearchingDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/searching/SearchingDataSource.java index 8250641..81b019e 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/searching/SearchingDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/searching/SearchingDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.searching; +package com.swsnack.catchhouse.data.source.searching; import com.skt.Tmap.TMapPOIItem; import com.swsnack.catchhouse.data.model.Filter; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/searching/remote/SearchingDataImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/searching/remote/SearchingDataImpl.java similarity index 95% rename from app/src/main/java/com/swsnack/catchhouse/repository/searching/remote/SearchingDataImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/searching/remote/SearchingDataImpl.java index c18547e..00db5c9 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/searching/remote/SearchingDataImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/searching/remote/SearchingDataImpl.java @@ -1,12 +1,7 @@ -package com.swsnack.catchhouse.repository.searching.remote; +package com.swsnack.catchhouse.data.source.searching.remote; -import android.graphics.Bitmap; import android.util.Log; -import android.util.Pair; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.SimpleTarget; -import com.bumptech.glide.request.transition.Transition; import com.firebase.geofire.GeoFire; import com.firebase.geofire.GeoLocation; import com.firebase.geofire.GeoQuery; @@ -18,11 +13,10 @@ import com.google.firebase.database.ValueEventListener; import com.skt.Tmap.TMapData; import com.skt.Tmap.TMapPOIItem; -import com.swsnack.catchhouse.AppApplication; import com.swsnack.catchhouse.Constant; import com.swsnack.catchhouse.data.model.Filter; import com.swsnack.catchhouse.data.model.Room; -import com.swsnack.catchhouse.repository.searching.SearchingDataSource; +import com.swsnack.catchhouse.data.source.searching.SearchingDataSource; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -164,6 +158,7 @@ public void onKeyEntered(String key, GeoLocation location) { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { Room room = dataSnapshot.getValue(Room.class); + Log.d("여기", dataSnapshot.getKey()); room.setKey(dataSnapshot.getKey()); room.setLatitude(location.latitude); room.setLongitude(location.longitude); diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/user/UserDataSource.java b/app/src/main/java/com/swsnack/catchhouse/data/source/user/UserDataSource.java similarity index 97% rename from app/src/main/java/com/swsnack/catchhouse/repository/user/UserDataSource.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/user/UserDataSource.java index 1c6d74f..1bd6e30 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/user/UserDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/user/UserDataSource.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.user; +package com.swsnack.catchhouse.data.source.user; import android.net.Uri; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/user/remote/UserDataImpl.java b/app/src/main/java/com/swsnack/catchhouse/data/source/user/remote/UserDataImpl.java similarity index 97% rename from app/src/main/java/com/swsnack/catchhouse/repository/user/remote/UserDataImpl.java rename to app/src/main/java/com/swsnack/catchhouse/data/source/user/remote/UserDataImpl.java index fbc1f64..41c23c2 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/user/remote/UserDataImpl.java +++ b/app/src/main/java/com/swsnack/catchhouse/data/source/user/remote/UserDataImpl.java @@ -1,4 +1,4 @@ -package com.swsnack.catchhouse.repository.user.remote; +package com.swsnack.catchhouse.data.source.user.remote; import android.net.Uri; @@ -11,7 +11,7 @@ import com.swsnack.catchhouse.firebase.StorageHelper; import com.swsnack.catchhouse.repository.OnFailedListener; import com.swsnack.catchhouse.repository.OnSuccessListener; -import com.swsnack.catchhouse.repository.user.UserDataSource; +import com.swsnack.catchhouse.data.source.user.UserDataSource; import java.util.HashMap; import java.util.Map; diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/APIManager.java b/app/src/main/java/com/swsnack/catchhouse/repository/APIManager.java index 9753530..dff9341 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/APIManager.java +++ b/app/src/main/java/com/swsnack/catchhouse/repository/APIManager.java @@ -126,8 +126,8 @@ public void firebaseDeleteUser(@NonNull String uuid, mDataManager.cancelMessageModelObserving(); mDataManager.cancelObservingChattingList(); - mDataManager.deleteRecentRoomList(); - mDataManager.deleteFavoriteRoom(); +// mDataManager.deleteRecentRoomList(); +// mDataManager.deleteFavoriteRoom(); mDataManager.deleteUser(uuid, deleteUserSuccess -> deleteUser(onSuccessListener, onFailedListener), @@ -142,7 +142,7 @@ public void firebaseSignOut() { FirebaseAuth.getInstance().signOut(); mDataManager.cancelMessageModelObserving(); mDataManager.cancelObservingChattingList(); - mDataManager.deleteRecentRoomList(); +// mDataManager.deleteRecentRoomList(); } public void updatePassword(@NonNull String oldPassword, diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/AppDataSource.java b/app/src/main/java/com/swsnack/catchhouse/repository/AppDataSource.java index a77cf8a..3027638 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/AppDataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/repository/AppDataSource.java @@ -8,20 +8,18 @@ import com.swsnack.catchhouse.data.model.Message; import com.swsnack.catchhouse.data.model.Room; import com.swsnack.catchhouse.data.model.User; -import com.swsnack.catchhouse.repository.chatting.ChattingDataSource; -import com.swsnack.catchhouse.repository.chatting.remote.RemoteChattingImpl; -import com.swsnack.catchhouse.repository.location.LocationDataSource; -import com.swsnack.catchhouse.repository.location.remote.RemoteLocationImpl; -import com.swsnack.catchhouse.repository.room.RoomRepository; -import com.swsnack.catchhouse.repository.room.local.FavoriteRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.RecentRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.SellRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.SellRoomImpl; -import com.swsnack.catchhouse.repository.room.remote.RemoteRoomDataSource; -import com.swsnack.catchhouse.repository.searching.SearchingDataSource; -import com.swsnack.catchhouse.repository.searching.remote.SearchingDataImpl; -import com.swsnack.catchhouse.repository.user.UserDataSource; -import com.swsnack.catchhouse.repository.user.remote.UserDataImpl; +import com.swsnack.catchhouse.data.source.chatting.ChattingDataSource; +import com.swsnack.catchhouse.data.source.chatting.remote.RemoteChattingImpl; +import com.swsnack.catchhouse.data.source.location.LocationDataSource; +import com.swsnack.catchhouse.data.source.location.remote.RemoteLocationImpl; +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepository; +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepositoryImpl; +import com.swsnack.catchhouse.data.source.room.local.SellRoomDataSource; +import com.swsnack.catchhouse.data.source.room.local.SellRoomData; +import com.swsnack.catchhouse.data.source.searching.SearchingDataSource; +import com.swsnack.catchhouse.data.source.searching.remote.SearchingDataImpl; +import com.swsnack.catchhouse.data.source.user.UserDataSource; +import com.swsnack.catchhouse.data.source.user.remote.UserDataImpl; import java.util.List; @@ -33,9 +31,12 @@ public class AppDataSource implements DataSource { //FIXME : 이 클래스 삭제할겁니다. 사용해주지 마시고 레포에서 써주세요 private UserDataSource mUserDataSource; private ChattingDataSource mRemoteChattingDataSource; - private RemoteRoomDataSource mRemoteRoomDataSource; - private FavoriteRoomDataSource mFavoriteRoomDataSource; - private RecentRoomDataSource mRecentRoomDataManager; +// private RemoteRoomDataSource mRemoteRoomDataSource; +// private FavoriteRoomDataSource mFavoriteRoomDataSource; +// private RecentRoomDataSource mRecentRoomDataManager; + private RecentRoomRepository recentRoomRepository; + private FavoriteRoomRepository favoriteRoomRepository; + private RoomRepository roomRepository; private LocationDataSource mLocationDataSource; private SearchingDataSource mSearchingDataSource; private SellRoomDataSource mSellRoomDataSource; @@ -44,12 +45,15 @@ private AppDataSource() { mUserDataSource = UserDataImpl.getInstance(); mRemoteChattingDataSource = RemoteChattingImpl.getInstance(); - mRemoteRoomDataSource = RoomRepository.getInstance(); - mFavoriteRoomDataSource = RoomRepository.getInstance(); - mRecentRoomDataManager = RoomRepository.getInstance(); +// mRemoteRoomDataSource = RoomRepositoryImpl2.getInstance(); +// mFavoriteRoomDataSource = RoomRepositoryImpl2.getInstance(); +// mRecentRoomDataManager = RoomRepositoryImpl2.getInstance(); mLocationDataSource = RemoteLocationImpl.getInstance(); mSearchingDataSource = SearchingDataImpl.getInstance(); - mSellRoomDataSource = SellRoomImpl.getInstance(); + mSellRoomDataSource = SellRoomData.getInstance(); + roomRepository = RoomRepositoryImpl.getInstance(); + favoriteRoomRepository = FavoriteRoomRepositoryImpl.getInstance(); + recentRoomRepository = RecentRoomRepositoryImpl.getInstance(); } private static AppDataSource INSTANCE; @@ -181,39 +185,39 @@ public void setChatMessage(int messagesLength, } - @Override - public String createKey() { - return mRemoteRoomDataSource.createKey(); - } - - @Override - public void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, - @NonNull OnSuccessListener> onSuccessListener, - @NonNull OnFailedListener onFailedListener) { - - mRemoteRoomDataSource.uploadRoomImage(uuid, imageList, onSuccessListener, onFailedListener); - } - - @Override - public void setRoom(@NonNull String key, @NonNull Room room, - @NonNull OnSuccessListener onSuccessListener, - @NonNull OnFailedListener onFailedListener) { - - mRemoteRoomDataSource.setRoom(key, room, onSuccessListener, onFailedListener); - } - - - @Override - public void getRoom(@NonNull String key, - @NonNull OnSuccessListener onSuccessListener, - @NonNull OnFailedListener onFailedListener) { - mRemoteRoomDataSource.getRoom(key, onSuccessListener, onFailedListener); - } - - @Override - public void delete(@NonNull String key, @NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { - mRemoteRoomDataSource.delete(key, room, onSuccessListener, onFailedListener); - } +// @Override +// public String createKey() { +// return mRemoteRoomDataSource.createKey(); +// } +// +// @Override +// public void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, +// @NonNull OnSuccessListener> onSuccessListener, +// @NonNull OnFailedListener onFailedListener) { +// +// mRemoteRoomDataSource.uploadRoomImage(uuid, imageList, onSuccessListener, onFailedListener); +// } +// +// @Override +// public void setRoom(@NonNull String key, @NonNull Room room, +// @NonNull OnSuccessListener onSuccessListener, +// @NonNull OnFailedListener onFailedListener) { +// +// mRemoteRoomDataSource.setRoom(key, room, onSuccessListener, onFailedListener); +// } +// +// +// @Override +// public void getRoom(@NonNull String key, +// @NonNull OnSuccessListener onSuccessListener, +// @NonNull OnFailedListener onFailedListener) { +// mRemoteRoomDataSource.getRoom(key, onSuccessListener, onFailedListener); +// } +// +// @Override +// public void delete(@NonNull String key, @NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { +// mRemoteRoomDataSource.delete(key, room, onSuccessListener, onFailedListener); +// } @Override public void uploadLocationData(@NonNull String uuid, @NonNull Address address, @@ -234,79 +238,164 @@ public Single> getNearRoomList(@NonNull Filter filter) { } @Override - public void setFavoriteRoom(Room room) { - mFavoriteRoomDataSource.setFavoriteRoom(room); + public String createKey() { + return roomRepository.createKey(); } @Override - public void deleteFavoriteRoom(Room room) { - mFavoriteRoomDataSource.deleteFavoriteRoom(room); + public void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, @NonNull OnSuccessListener> onSuccessListener, @NonNull OnFailedListener onFailedListener) { + roomRepository.uploadRoomImage(uuid, imageList, onSuccessListener, onFailedListener); + } + @Override + public void setRoom(@NonNull String key, @NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + roomRepository.setRoom(key, room, onSuccessListener, onFailedListener); } @Override - public void deleteFavoriteRoom() { - mFavoriteRoomDataSource.deleteFavoriteRoom(); + public void getRoom(@NonNull String key, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + roomRepository.getRoom(key, onSuccessListener, onFailedListener); } @Override - public List getFavoriteRoomList() { - return mFavoriteRoomDataSource.getFavoriteRoomList(); + public void deleteRoom(@NonNull String key, @NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + roomRepository.deleteRoom(key, room, onSuccessListener, onFailedListener); } @Override - public Room getFavoriteRoom(String key) { - return mFavoriteRoomDataSource.getFavoriteRoom(key); + public void updateRoom(@NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + roomRepository.updateRoom(room, onSuccessListener, onFailedListener); } @Override - public void updateRoom(Room room) { - mFavoriteRoomDataSource.updateRoom(room); + public List getSellList() { + return roomRepository.getSellList(); } @Override - public void setRecentRoom(Room room) { - mRecentRoomDataManager.setRecentRoom(room); + public void setFavoriteRoom(Room room) { + favoriteRoomRepository.setFavoriteRoom(room); } @Override - public List getRecentRoom() { - return mRecentRoomDataManager.getRecentRoom(); + public void deleteFavoriteRoom(Room room) { + favoriteRoomRepository.deleteFavoriteRoom(room); } @Override - public void deleteRecentRoomList() { - mRecentRoomDataManager.deleteRecentRoomList(); + public List getFavoriteRoomList() { + return favoriteRoomRepository.getFavoriteRoomList(); } @Override - public void deleteRoom(Room room) { - deleteRoom(room); + public void deleteFavoriteRoom() { + favoriteRoomRepository.deleteFavoriteRoom(); } @Override - public void setSellRoom(Room room) { - mSellRoomDataSource.setSellRoom(room); + public Room getFavoriteRoom(String key) { + return favoriteRoomRepository.getFavoriteRoom(key); } @Override - public void deleteSellRoom(Room room) { - mSellRoomDataSource.deleteSellRoom(room); + public void updateRoom(Room room) { + favoriteRoomRepository.updateRoom(room); } @Override - public List getSellRoomList() { - return mSellRoomDataSource.getSellRoomList(); + public void setRecentRoom(Room room) { + recentRoomRepository.setRecentRoom(room); } @Override - public void deleteSellRoom() { - mSellRoomDataSource.deleteSellRoom(); + public List getRecentRoom() { + return recentRoomRepository.getRecentRoom(); } @Override - public Room getSellRoom(String key) { - return mSellRoomDataSource.getSellRoom(key); + public void deleteRecentRoomList() { + recentRoomRepository.deleteRecentRoomList(); } + @Override + public void deleteRoom(Room room) { + recentRoomRepository.deleteRoom(room); + } + +// @Override +// public void setFavoriteRoom(Room room) { +// mFavoriteRoomDataSource.setFavoriteRoom(room); +// } +// +// @Override +// public void deleteFavoriteRoom(Room room) { +// mFavoriteRoomDataSource.deleteFavoriteRoom(room); +// +// } +// +// @Override +// public void deleteFavoriteRoom() { +// mFavoriteRoomDataSource.deleteFavoriteRoom(); +// } +// +// @Override +// public List getFavoriteRoomList() { +// return mFavoriteRoomDataSource.getFavoriteRoomList(); +// } +// +// @Override +// public Room getFavoriteRoom(String key) { +// return mFavoriteRoomDataSource.getFavoriteRoom(key); +// } +// +// @Override +// public void updateRoom(Room room) { +// mFavoriteRoomDataSource.updateRoom(room); +// } +// +// @Override +// public void setRecentRoom(Room room) { +// mRecentRoomDataManager.setRecentRoom(room); +// } +// +// @Override +// public List getRecentRoom() { +// return mRecentRoomDataManager.getRecentRoom(); +// } +// +// @Override +// public void deleteRecentRoomList() { +// mRecentRoomDataManager.deleteRecentRoomList(); +// } + +// @Override +// public void deleteRoom(Room room) { +// deleteRoom(room); +// } +// +// @Override +// public void setSellRoom(Room room) { +// mSellRoomDataSource.setSellRoom(room); +// } +// +// @Override +// public void deleteSellRoom(Room room) { +// mSellRoomDataSource.deleteSellRoom(room); +// } +// +// @Override +// public List getSellRoomList() { +// return mSellRoomDataSource.getSellRoomList(); +// } +// +// @Override +// public void deleteSellRoom() { +// mSellRoomDataSource.deleteSellRoom(); +// } +// +// @Override +// public Room getSellRoom(String key) { +// return mSellRoomDataSource.getSellRoom(key); +// } + } \ No newline at end of file diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/DataSource.java b/app/src/main/java/com/swsnack/catchhouse/repository/DataSource.java index a5ad6bb..1d8eef5 100644 --- a/app/src/main/java/com/swsnack/catchhouse/repository/DataSource.java +++ b/app/src/main/java/com/swsnack/catchhouse/repository/DataSource.java @@ -1,21 +1,16 @@ package com.swsnack.catchhouse.repository; -import com.swsnack.catchhouse.repository.chatting.ChattingDataSource; -import com.swsnack.catchhouse.repository.location.LocationDataSource; -import com.swsnack.catchhouse.repository.room.local.FavoriteRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.SellRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.RecentRoomDataSource; -import com.swsnack.catchhouse.repository.room.remote.RemoteRoomDataSource; -import com.swsnack.catchhouse.repository.searching.SearchingDataSource; -import com.swsnack.catchhouse.repository.user.UserDataSource; +import com.swsnack.catchhouse.data.source.chatting.ChattingDataSource; +import com.swsnack.catchhouse.data.source.location.LocationDataSource; +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepository; +import com.swsnack.catchhouse.data.source.searching.SearchingDataSource; +import com.swsnack.catchhouse.data.source.user.UserDataSource; public interface DataSource extends UserDataSource, ChattingDataSource, - RemoteRoomDataSource, - FavoriteRoomDataSource, LocationDataSource, SearchingDataSource, - RecentRoomDataSource, - SellRoomDataSource { - + RoomRepository, + FavoriteRoomRepository, + RecentRoomRepository { } diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepository.java b/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepository.java new file mode 100644 index 0000000..203af92 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepository.java @@ -0,0 +1,20 @@ +package com.swsnack.catchhouse.repository; + +import com.swsnack.catchhouse.data.model.Room; + +import java.util.List; + +public interface FavoriteRoomRepository { + + void setFavoriteRoom(Room room); + + void deleteFavoriteRoom(Room room); + + List getFavoriteRoomList(); + + void deleteFavoriteRoom(); + + Room getFavoriteRoom(String key); + + void updateRoom(Room room); +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepositoryImpl.java b/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepositoryImpl.java new file mode 100644 index 0000000..c432f49 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/repository/FavoriteRoomRepositoryImpl.java @@ -0,0 +1,54 @@ +package com.swsnack.catchhouse.repository; + +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.data.source.favoriteroom.FavoriteRoomDaoImpl; + +import java.util.List; + +public class FavoriteRoomRepositoryImpl implements FavoriteRoomRepository { + + private static FavoriteRoomRepositoryImpl INSTANCE; + private FavoriteRoomDaoImpl favoriteRoomDao; + + public static FavoriteRoomRepositoryImpl getInstance() { + if(INSTANCE == null) { + synchronized (FavoriteRoomRepositoryImpl.class) { + INSTANCE = new FavoriteRoomRepositoryImpl(); + } + } + return INSTANCE; + } + + private FavoriteRoomRepositoryImpl() { + favoriteRoomDao = FavoriteRoomDaoImpl.getInstance(); + } + @Override + public void setFavoriteRoom(Room room) { + favoriteRoomDao.setFavoriteRoom(room); + } + + @Override + public void deleteFavoriteRoom(Room room) { + favoriteRoomDao.deleteFavoriteRoom(room); + } + + @Override + public List getFavoriteRoomList() { + return favoriteRoomDao.getFavoriteRoomList(); + } + + @Override + public void deleteFavoriteRoom() { + favoriteRoomDao.deleteFavoriteRoom(); + } + + @Override + public Room getFavoriteRoom(String key) { + return favoriteRoomDao.getFavoriteRoom(key); + } + + @Override + public void updateRoom(Room room) { + favoriteRoomDao.updateRoom(room); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepository.java b/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepository.java new file mode 100644 index 0000000..2ecff15 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepository.java @@ -0,0 +1,41 @@ +package com.swsnack.catchhouse.repository; + +import android.net.Uri; + +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.repository.OnFailedListener; +import com.swsnack.catchhouse.repository.OnSuccessListener; + +import java.util.List; + +import androidx.annotation.NonNull; + +public interface RoomRepository { + + String createKey(); + + void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, + @NonNull OnSuccessListener> onSuccessListener, + @NonNull OnFailedListener onFailedListener); + + void setRoom(@NonNull String key, @NonNull Room room, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener); + + void getRoom(@NonNull String key, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener); + + //FIXME 용현's 가 추가함. 확인 부탁이요. Key는 필요 없을 것 같아요. 내부에서 동작하게 하면 Room객체만 던져줘도 될것 같습니다. 나중에 수정 부탁드려요 + void deleteRoom(@NonNull String key, + @NonNull Room room, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener); + + void updateRoom(@NonNull Room room, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener); + + List getSellList(); + +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepositoryImpl.java b/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepositoryImpl.java new file mode 100644 index 0000000..fb55c4b --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/repository/RoomRepositoryImpl.java @@ -0,0 +1,85 @@ +package com.swsnack.catchhouse.repository; + +import android.net.Uri; + +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.data.source.room.local.SellRoomData; +import com.swsnack.catchhouse.data.source.room.remote.RemoteRoomData; + +import java.util.List; + +import androidx.annotation.NonNull; + +public class RoomRepositoryImpl implements RoomRepository { + + private static RoomRepositoryImpl INSTANCE; + private RemoteRoomData mRemoteRoom; + private SellRoomData mLocalRoom; + + + public static RoomRepositoryImpl getInstance() { + if (INSTANCE == null) { + synchronized (RoomRepositoryImpl.class) { + INSTANCE = new RoomRepositoryImpl(); + } + } + return INSTANCE; + } + + private RoomRepositoryImpl() { + mRemoteRoom = RemoteRoomData.getInstance(); + mLocalRoom = SellRoomData.getInstance(); + } + + @Override + public String createKey() { + return mRemoteRoom.createKey(); + } + + @Override + public void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, @NonNull OnSuccessListener> onSuccessListener, @NonNull OnFailedListener onFailedListener) { + mRemoteRoom.uploadRoomImage(uuid, imageList, onSuccessListener, onFailedListener); + } + + @Override + public void setRoom(@NonNull String key, + @NonNull Room room, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener) { + + mRemoteRoom.setRoom(key, room, success -> { + mLocalRoom.setSellRoom(room); + onSuccessListener.onSuccess(success); + }, onFailedListener); + } + + @Override + public void getRoom(@NonNull String key, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + mRemoteRoom.getRoom(key, onSuccessListener, onFailedListener); + } + + @Override + public void deleteRoom(@NonNull String key, + @NonNull Room room, + @NonNull OnSuccessListener onSuccessListener, + @NonNull OnFailedListener onFailedListener) { + + mRemoteRoom.delete(key, room, success -> { + mLocalRoom.deleteSellRoom(room); + onSuccessListener.onSuccess(success); + }, onFailedListener); + } + + @Override + public void updateRoom(@NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { + updateRoom(room, success -> { + mLocalRoom.updateRoom(room); + onSuccessListener.onSuccess(success); + }, onFailedListener); + } + + @Override + public List getSellList() { + return mLocalRoom.getSellRoomList(); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/RoomRepository.java b/app/src/main/java/com/swsnack/catchhouse/repository/room/RoomRepository.java deleted file mode 100644 index 9ba69fb..0000000 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/RoomRepository.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.swsnack.catchhouse.repository.room; - -import android.net.Uri; - -import com.swsnack.catchhouse.data.model.Room; -import com.swsnack.catchhouse.repository.OnFailedListener; -import com.swsnack.catchhouse.repository.OnSuccessListener; -import com.swsnack.catchhouse.repository.room.local.FavoriteRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.FavoriteRoomImpl; -import com.swsnack.catchhouse.repository.room.local.LocalRecentRoomImpl; -import com.swsnack.catchhouse.repository.room.local.RecentRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.SellRoomDataSource; -import com.swsnack.catchhouse.repository.room.local.SellRoomImpl; -import com.swsnack.catchhouse.repository.room.remote.RemoteRoomDataSource; -import com.swsnack.catchhouse.repository.room.remote.RoomDataImpl; - -import java.util.List; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public class RoomRepository implements RemoteRoomDataSource, FavoriteRoomDataSource, RecentRoomDataSource, SellRoomDataSource { - - private static RoomRepository INSTANCE; - private FavoriteRoomDataSource mLocalRoomDataManager; - private RemoteRoomDataSource mRemoteRoomDataSource; - private RecentRoomDataSource mRecentRoomDataManager; - private SellRoomDataSource mLocalSellRoomManager; - - public static RoomRepository getInstance() { - if (INSTANCE == null) { - synchronized (RoomRepository.class) { - INSTANCE = new RoomRepository(); - } - } - return INSTANCE; - } - - private RoomRepository() { - - mLocalRoomDataManager = FavoriteRoomImpl.getInstance(); - mRemoteRoomDataSource = RoomDataImpl.getInstance(); - mRecentRoomDataManager = LocalRecentRoomImpl.getInstance(); - mLocalSellRoomManager = SellRoomImpl.getInstance(); - } - - @Override - public String createKey() { - return mRemoteRoomDataSource.createKey(); - } - - @Override - public void uploadRoomImage(@NonNull String uuid, @NonNull List imageList, @NonNull OnSuccessListener> onSuccessListener, @NonNull OnFailedListener onFailedListener) { - mRemoteRoomDataSource.uploadRoomImage(uuid, imageList, onSuccessListener, onFailedListener); - } - - @Override - public void setRoom(@NonNull String key, @NonNull Room room, @Nullable OnSuccessListener onSuccessListener, @Nullable OnFailedListener onFailedListener) { - mRemoteRoomDataSource.setRoom(key, room, success -> { - setSellRoom(room); - onSuccessListener.onSuccess(success); - } - , onFailedListener); - } - - @Override - public void getRoom(@NonNull String key, @Nullable OnSuccessListener onSuccessListener, @Nullable OnFailedListener onFailedListener) { - mRemoteRoomDataSource.getRoom(key, onSuccessListener, onFailedListener); - } - - @Override - public void delete(@NonNull String key, @NonNull Room room, @NonNull OnSuccessListener onSuccessListener, @NonNull OnFailedListener onFailedListener) { - mRemoteRoomDataSource.delete(key, room, success -> { - deleteSellRoom(room); - mRecentRoomDataManager.deleteRoom(room); - onSuccessListener.onSuccess(success); - } - , onFailedListener); - } - - @Override - public void setFavoriteRoom(Room room) { - mLocalRoomDataManager.setFavoriteRoom(room); - } - - @Override - public void deleteFavoriteRoom(Room room) { - mLocalRoomDataManager.deleteFavoriteRoom(room); - } - - @Override - public List getFavoriteRoomList() { - return mLocalRoomDataManager.getFavoriteRoomList(); - } - - @Override - public void deleteFavoriteRoom() { - mLocalRoomDataManager.deleteFavoriteRoom(); - } - - @Override - public Room getFavoriteRoom(String key) { - return mLocalRoomDataManager.getFavoriteRoom(key); - } - - @Override - public void updateRoom(Room room) { - mLocalRoomDataManager.updateRoom(room); - } - - @Override - public void setRecentRoom(Room room) { - mRecentRoomDataManager.setRecentRoom(room); - } - - @Override - public List getRecentRoom() { - return mRecentRoomDataManager.getRecentRoom(); - } - - @Override - public void deleteRecentRoomList() { - mRecentRoomDataManager.deleteRecentRoomList(); - } - - @Override - public void deleteRoom(Room room) { - mRecentRoomDataManager.deleteRoom(room); - } - - @Override - public void setSellRoom(Room room) { - mLocalSellRoomManager.setSellRoom(room); - } - - @Override - public void deleteSellRoom(Room room) { - mLocalSellRoomManager.deleteSellRoom(room); - } - - @Override - public List getSellRoomList() { - return mLocalSellRoomManager.getSellRoomList(); - } - - @Override - public void deleteSellRoom() { - mLocalSellRoomManager.deleteSellRoom(); - } - - @Override - public Room getSellRoom(String key) { - return mLocalSellRoomManager.getSellRoom(key); - } - -} diff --git a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/LocalRecentRoomImpl.java b/app/src/main/java/com/swsnack/catchhouse/repository/room/local/LocalRecentRoomImpl.java deleted file mode 100644 index 469cfc9..0000000 --- a/app/src/main/java/com/swsnack/catchhouse/repository/room/local/LocalRecentRoomImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.swsnack.catchhouse.repository.room.local; - -import com.swsnack.catchhouse.data.db.AppDataCache; -import com.swsnack.catchhouse.data.model.Room; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -public class LocalRecentRoomImpl implements RecentRoomDataSource { - - private HashMap mRecentRoomCache; - private static LocalRecentRoomImpl INSTANCE; - - public static LocalRecentRoomImpl getInstance() { - if (INSTANCE == null) { - synchronized (LocalRecentRoomImpl.class) { - INSTANCE = new LocalRecentRoomImpl(); - } - } - return INSTANCE; - } - - private LocalRecentRoomImpl() { - mRecentRoomCache = AppDataCache.getInstance().getRecentRoomCache(); - } - - @Override - public void setRecentRoom(Room room) { - if (mRecentRoomCache.size() < 5) { - mRecentRoomCache.put(room, new Date().getTime()); - return; - } - List sortingList = sortByTimeStampRoom(); - mRecentRoomCache.remove(sortingList.get(0)); - setRecentRoom(room); - } - - - @Override - public List getRecentRoom() { - List reversedSortedRoom = sortByTimeStampRoom(); - Collections.reverse(reversedSortedRoom); - return reversedSortedRoom; - } - - @Override - public void deleteRoom(Room room) { - mRecentRoomCache.remove(room); - } - - @Override - public void deleteRecentRoomList() { - mRecentRoomCache.clear(); - } - - private List sortByTimeStampRoom() { - List sortingList = new ArrayList<>(mRecentRoomCache.keySet()); - Collections.sort(sortingList, (oldRoom, newRoom) -> - Objects.requireNonNull(mRecentRoomCache.get(oldRoom)).compareTo(Objects.requireNonNull(mRecentRoomCache.get(newRoom)))); - return sortingList; - } -} diff --git a/app/src/main/java/com/swsnack/catchhouse/util/DataConverter.java b/app/src/main/java/com/swsnack/catchhouse/util/DataConverter.java index a988408..ecdde8d 100644 --- a/app/src/main/java/com/swsnack/catchhouse/util/DataConverter.java +++ b/app/src/main/java/com/swsnack/catchhouse/util/DataConverter.java @@ -1,91 +1,34 @@ package com.swsnack.catchhouse.util; -import android.graphics.Bitmap; +import android.os.Build; -import com.swsnack.catchhouse.data.entity.FavoriteRoomEntity; import com.swsnack.catchhouse.data.model.Chatting; -import com.swsnack.catchhouse.data.model.Message; -import com.swsnack.catchhouse.data.model.Room; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; -public class DataConverter { - - public static Bitmap getScaledBitmap(Bitmap bitmap) { - return Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth()), (int) (bitmap.getHeight()), true); - } +import androidx.annotation.RequiresApi; - public static byte[] getByteArray(Bitmap bitmap) throws IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); - byte[] byteArrayFromBitmap = outputStream.toByteArray(); - outputStream.close(); - return byteArrayFromBitmap; - } +public class DataConverter { - public static List reOrderedListByTimeStamp(List chattingList) { + @RequiresApi(api = Build.VERSION_CODES.N) + public static List sortByTimeStamp(List chattingList) { if (chattingList == null) { return null; } - Collections.sort(chattingList, (rowIndexChatting, highIndexChatting) -> { - if (rowIndexChatting.getMessages() == null || highIndexChatting.getMessages() == null) { - return 0; - } - - Message rowIndexLastMessage = rowIndexChatting.getMessages().get(rowIndexChatting.getMessages().size() - 1); - Message highIndexLastMessage = highIndexChatting.getMessages().get(highIndexChatting.getMessages().size() - 1); + Comparator comparator = (c1, c2) -> { + assert c1.getMessages() != null; + assert c2.getMessages() != null; - return rowIndexLastMessage.getTimestamp().compareTo(highIndexLastMessage.getTimestamp()); - }); - - Collections.reverse(chattingList); - - return chattingList; - } - - public static FavoriteRoomEntity convertToRoomEntity(Room room) { - return new FavoriteRoomEntity(room.getKey(), - room.getPrice(), - room.getFrom(), - room.getTo(), - room.getTitle(), - room.getContent(), - room.getImages(), - room.getUuid(), - room.getAddress(), - room.getAddressName(), - room.getSize(), - room.isOptionStandard(), - room.isOptionGender(), - room.isOptionPet(), - room.isOptionSmoking(), - room.getLatitude(), - room.getLongitude(), - room.isDeleted()); - } + return (c1.getMessages().get(c1.getMessages().size() - 1).getTimestamp() + .compareTo(c2.getMessages().get(c2.getMessages().size() - 1).getTimestamp())); + }; + Comparator reverse = comparator.reversed(); - public static Room convertToRoom(FavoriteRoomEntity favoriteRoomEntity) { - return new Room(favoriteRoomEntity.getRoomUid(), - favoriteRoomEntity.getPrice(), - favoriteRoomEntity.getFrom(), - favoriteRoomEntity.getTo(), - favoriteRoomEntity.getTitle(), - favoriteRoomEntity.getContent(), - favoriteRoomEntity.getImages(), - favoriteRoomEntity.getUuid(), - favoriteRoomEntity.getAddress(), - favoriteRoomEntity.getAddressName(), - favoriteRoomEntity.getSize(), - favoriteRoomEntity.isOptionStandard(), - favoriteRoomEntity.isOptionGender(), - favoriteRoomEntity.isOptionPet(), - favoriteRoomEntity.isOptionSmoking(), - favoriteRoomEntity.getLatitude(), - favoriteRoomEntity.getLongitude(), - favoriteRoomEntity.isDeleted()); + return chattingList.stream() + .sorted(reverse) + .collect(Collectors.toList()); } } diff --git a/app/src/main/java/com/swsnack/catchhouse/view/BaseFragment.java b/app/src/main/java/com/swsnack/catchhouse/view/BaseFragment.java index 492056a..ba9951c 100644 --- a/app/src/main/java/com/swsnack/catchhouse/view/BaseFragment.java +++ b/app/src/main/java/com/swsnack/catchhouse/view/BaseFragment.java @@ -4,28 +4,39 @@ import androidx.lifecycle.ViewModelProviders; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; + import android.os.Bundle; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -public abstract class BaseFragment extends Fragment { +public abstract class BaseFragment + extends Fragment { private B mBinding; protected V mViewModel; @Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - mBinding = DataBindingUtil.inflate(inflater, getLayout(), container, false); + public View onCreateView(@NonNull LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, + getLayout(), + container, + false); return mBinding.getRoot(); } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, + @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (getActivity() != null) { diff --git a/app/src/main/java/com/swsnack/catchhouse/view/activitity/BottomNavActivity.java b/app/src/main/java/com/swsnack/catchhouse/view/activitity/BottomNavActivity.java index c2b201e..4538c00 100644 --- a/app/src/main/java/com/swsnack/catchhouse/view/activitity/BottomNavActivity.java +++ b/app/src/main/java/com/swsnack/catchhouse/view/activitity/BottomNavActivity.java @@ -113,8 +113,7 @@ protected void onCreate(Bundle savedInstanceState) { } private void createViewModels() { - createViewModel(UserViewModel.class, new UserViewModelFactory(getApplication(), - AppDataSource.getInstance(), + createViewModel(UserViewModel.class, new UserViewModelFactory(AppDataSource.getInstance(), APIManager.getInstance(), this)); createViewModel(SearchingViewModel.class, new SearchingViewModelFactory(getApplication(), diff --git a/app/src/main/java/com/swsnack/catchhouse/view/fragment/MyPageFragment.java b/app/src/main/java/com/swsnack/catchhouse/view/fragment/MyPageFragment.java index ff0e75c..f4e672d 100644 --- a/app/src/main/java/com/swsnack/catchhouse/view/fragment/MyPageFragment.java +++ b/app/src/main/java/com/swsnack/catchhouse/view/fragment/MyPageFragment.java @@ -14,11 +14,20 @@ import com.swsnack.catchhouse.R; import com.swsnack.catchhouse.adapter.roomadapter.RoomListAdapter; import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepositoryImpl; import com.swsnack.catchhouse.databinding.DialogChangeNickNameBinding; import com.swsnack.catchhouse.databinding.DialogChangePasswordBinding; import com.swsnack.catchhouse.databinding.FragmentMyPageBinding; +import com.swsnack.catchhouse.repository.FavoriteRoomRepositoryImpl; +import com.swsnack.catchhouse.repository.RoomRepositoryImpl; import com.swsnack.catchhouse.view.BaseFragment; import com.swsnack.catchhouse.view.activitity.PostActivity; +import com.swsnack.catchhouse.viewmodel.favoriteroomviewmodel.FavoriteRoomViewModel; +import com.swsnack.catchhouse.viewmodel.favoriteroomviewmodel.FavoriteRoomViewModelFactory; +import com.swsnack.catchhouse.viewmodel.recentroomviewmodel.RecentRoomViewModel; +import com.swsnack.catchhouse.viewmodel.recentroomviewmodel.RecentRoomViewModelFactory; +import com.swsnack.catchhouse.viewmodel.sellroomviewmodel.SellRoomViewModel; +import com.swsnack.catchhouse.viewmodel.sellroomviewmodel.SellRoomViewModelFactory; import com.swsnack.catchhouse.viewmodel.userviewmodel.UserViewModel; import com.yalantis.ucrop.UCrop; @@ -28,6 +37,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import static android.app.Activity.RESULT_OK; @@ -42,6 +53,11 @@ public class MyPageFragment extends BaseFragment { + private FavoriteRoomViewModel mFavoriteRoomViewModel; + private RecentRoomViewModel mRecentRoomViewModel; + private SellRoomViewModel mSellRoomViewModel; + private UserViewModel mUserViewModel; + @Override protected int getLayout() { return R.layout.fragment_my_page; @@ -61,10 +77,14 @@ public void onCreate(Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + init(); + getBinding().setHandler(getViewModel()); + getBinding().setFavoriteRoom(mFavoriteRoomViewModel); + getBinding().setRecentRoom(mRecentRoomViewModel); + getBinding().setSellRoom(mSellRoomViewModel); getViewModel().getUserData(); - init(); for (String signInMethod : FirebaseAuth.getInstance().getCurrentUser().getProviders()) { if (signInMethod.equals(FACEBOOK) || signInMethod.equals(GOOGLE)) { getBinding().tvMyPageChangePassword.setVisibility(View.GONE); @@ -118,6 +138,18 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat private void init() { getBinding().ctlMyPage.setExpandedTitleColor(Color.TRANSPARENT); getBinding().ctlMyPage.setCollapsedTitleTextColor(getResources().getColor(R.color.colorPrimary)); + + mFavoriteRoomViewModel = ViewModelProviders.of(this, + new FavoriteRoomViewModelFactory(FavoriteRoomRepositoryImpl.getInstance())) + .get(FavoriteRoomViewModel.class); + + mRecentRoomViewModel = ViewModelProviders.of(this, + new RecentRoomViewModelFactory(RecentRoomRepositoryImpl.getInstance())) + .get(RecentRoomViewModel.class); + + mSellRoomViewModel = ViewModelProviders.of(this, + new SellRoomViewModelFactory(RoomRepositoryImpl.getInstance())) + .get(SellRoomViewModel.class); } private void onChangeNickNameBtnClicked() { @@ -179,9 +211,9 @@ private void onSignOutBtnClicked() { @Override public void onStart() { super.onStart(); - getViewModel().getFavoriteRoom(); - getViewModel().getRecentRoom(); - getViewModel().getSellRoom(); + mFavoriteRoomViewModel.getFavoriteRoom(); + mRecentRoomViewModel.getRecentRoom(); + mSellRoomViewModel.getSellList(); } diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/ReactiveViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/ReactiveViewModel.java index 661114c..648dfef 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/ReactiveViewModel.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/ReactiveViewModel.java @@ -19,10 +19,16 @@ public ReactiveViewModel(DataSource dataManager, APIManager apiManager) { mApiManager = apiManager; } + public ReactiveViewModel() { + + } + @Override protected void onCleared() { super.onCleared(); - mDisposables.dispose(); + if(mDisposables != null) { + mDisposables.dispose(); + } } protected CompositeDisposable getCompositeDisposable() { diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModel.java index fdb3dd8..e80b964 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModel.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModel.java @@ -20,6 +20,7 @@ import com.swsnack.catchhouse.viewmodel.ViewModelListener; import java.util.List; +import java.util.Map; import static com.swsnack.catchhouse.Constant.SuccessKey.SEND_MESSAGE_SUCCESS; @@ -57,8 +58,8 @@ public void cancelChattingListChangingListening() { .cancelObservingChattingList(); } - public void getUser(int position, OnSuccessListener onSuccessListener, OnFailureListener onFailureListener) { - for (String uuid : mChattingList.getValue().get(position).getUsers().keySet()) { + public void getUser(Map users, OnSuccessListener onSuccessListener, OnFailureListener onFailureListener) { + for (String uuid :users.keySet()) { if (!uuid.equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) { getDataManager() .getUserFromSingleSnapShot(uuid, diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModelFactory.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModelFactory.java index fd50ddc..f1e12f4 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModelFactory.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/chattingviewmodel/ChattingViewModelFactory.java @@ -2,11 +2,6 @@ import com.swsnack.catchhouse.repository.APIManager; import com.swsnack.catchhouse.repository.AppDataSource; -import com.swsnack.catchhouse.repository.chatting.remote.RemoteChattingImpl; -import com.swsnack.catchhouse.repository.location.remote.RemoteLocationImpl; -import com.swsnack.catchhouse.repository.room.RoomRepository; -import com.swsnack.catchhouse.repository.searching.remote.SearchingDataImpl; -import com.swsnack.catchhouse.repository.user.remote.UserDataImpl; import com.swsnack.catchhouse.viewmodel.ViewModelListener; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModel.java new file mode 100644 index 0000000..977ed22 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModel.java @@ -0,0 +1,54 @@ +package com.swsnack.catchhouse.viewmodel.favoriteroomviewmodel; + +import com.google.firebase.auth.FirebaseAuth; +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.repository.FavoriteRoomRepository; +import com.swsnack.catchhouse.viewmodel.ReactiveViewModel; + +import java.util.List; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +public class FavoriteRoomViewModel extends ReactiveViewModel { + + private FavoriteRoomRepository mFavoriteRoomRepository; + private MutableLiveData> mFavoriteRoomList; + private MutableLiveData mIsFavorite; + + FavoriteRoomViewModel(FavoriteRoomRepository favoriteRoomRepository) { + this.mFavoriteRoomRepository = favoriteRoomRepository; + this.mFavoriteRoomList = new MutableLiveData<>(); + this.mIsFavorite = new MutableLiveData<>(); + this.mIsFavorite.setValue(false); + } + + public void getFavoriteRoom() { + mFavoriteRoomList. + setValue(mFavoriteRoomRepository.getFavoriteRoomList()); + } + + public void setFavoriteRoom(Room room) { + mFavoriteRoomRepository.setFavoriteRoom(room); + } + + public void isFavorite(Room room) { + if (FirebaseAuth.getInstance().getCurrentUser() == null) { + return; + } + + if (!mIsFavorite.getValue()) { + mFavoriteRoomRepository + .setFavoriteRoom(room); + mIsFavorite.setValue(true); + } else { + mFavoriteRoomRepository + .deleteFavoriteRoom(room); + mIsFavorite.setValue(false); + } + } + + public LiveData> getFavoriteRoomList() { + return mFavoriteRoomList; + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModelFactory.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModelFactory.java new file mode 100644 index 0000000..ac957a0 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/favoriteroomviewmodel/FavoriteRoomViewModelFactory.java @@ -0,0 +1,26 @@ +package com.swsnack.catchhouse.viewmodel.favoriteroomviewmodel; + +import com.swsnack.catchhouse.repository.FavoriteRoomRepository; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +public class FavoriteRoomViewModelFactory extends ViewModelProvider.NewInstanceFactory { + + private FavoriteRoomRepository mFavoriteRoomRepository; + + public FavoriteRoomViewModelFactory(FavoriteRoomRepository favoriteRoomRepository) { + this.mFavoriteRoomRepository = favoriteRoomRepository; + } + + @NonNull + @Override + public T create(@NonNull Class modelClass) { + if (modelClass.isAssignableFrom(FavoriteRoomViewModel.class)) { + return (T) new FavoriteRoomViewModel(this.mFavoriteRoomRepository); + } + throw new Fragment.InstantiationException("not viewModel class", null); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/postviewmodel/PostViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/postviewmodel/PostViewModel.java index 1fc5a03..eb195e3 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/postviewmodel/PostViewModel.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/postviewmodel/PostViewModel.java @@ -144,10 +144,10 @@ public void onClickDeleteButton(View view) { Room deletingRoom = room.getValue(); deletingRoom.setDeleted(true); - getDataManager().delete(deletingRoom.getKey(), deletingRoom, - __ -> mListener.onSuccess(""), - error -> mListener.onError(error.getMessage()) - ); +// getDataManager().delete(deletingRoom.getKey(), deletingRoom, +// __ -> mListener.onSuccess(""), +// error -> mListener.onError(error.getMessage()) +// ); } private void visitNewRoom() { diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModel.java new file mode 100644 index 0000000..42a762d --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModel.java @@ -0,0 +1,35 @@ +package com.swsnack.catchhouse.viewmodel.recentroomviewmodel; + +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepository; +import com.swsnack.catchhouse.viewmodel.ReactiveViewModel; + +import java.util.List; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +public class RecentRoomViewModel extends ReactiveViewModel { + + private RecentRoomRepository mRecentRoomRepository; + private MutableLiveData> mRecentRoomList; + + RecentRoomViewModel(RecentRoomRepository recentRoomRepository) { + this.mRecentRoomRepository = recentRoomRepository; + this.mRecentRoomList = new MutableLiveData<>(); + } + + public void getRecentRoom() { + mRecentRoomList.setValue( + mRecentRoomRepository.getRecentRoom() + ); + } + + public void addRecentRoom(Room room) { + mRecentRoomRepository.setRecentRoom(room); + } + + public LiveData> getRecentRoomList() { + return mRecentRoomList; + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModelFactory.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModelFactory.java new file mode 100644 index 0000000..5f46016 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/recentroomviewmodel/RecentRoomViewModelFactory.java @@ -0,0 +1,27 @@ +package com.swsnack.catchhouse.viewmodel.recentroomviewmodel; + + +import com.swsnack.catchhouse.data.source.recentroom.RecentRoomRepository; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +public class RecentRoomViewModelFactory extends ViewModelProvider.NewInstanceFactory { + + private RecentRoomRepository mRecentRoomRepository; + + public RecentRoomViewModelFactory(RecentRoomRepository recentRoomRepository) { + this.mRecentRoomRepository = recentRoomRepository; + } + + @NonNull + @Override + public T create(@NonNull Class modelClass) { + if (modelClass.isAssignableFrom(RecentRoomViewModel.class)) { + return (T) new RecentRoomViewModel(mRecentRoomRepository); + } + throw new Fragment.InstantiationException("not viewModel class", null); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModel.java new file mode 100644 index 0000000..21de9e2 --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModel.java @@ -0,0 +1,30 @@ +package com.swsnack.catchhouse.viewmodel.sellroomviewmodel; + +import com.swsnack.catchhouse.data.model.Room; +import com.swsnack.catchhouse.repository.RoomRepository; +import com.swsnack.catchhouse.viewmodel.ReactiveViewModel; + +import java.util.List; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +public class SellRoomViewModel extends ReactiveViewModel { + + private RoomRepository mRoomRepository; + private MutableLiveData> mSellRoomList; + + SellRoomViewModel(RoomRepository roomRepository) { + this.mRoomRepository = roomRepository; + this.mSellRoomList = new MutableLiveData<>(); + } + + public void getSellList() { + mSellRoomList.setValue( + mRoomRepository.getSellList()); + } + + public LiveData> getMySellList() { + return mSellRoomList; + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModelFactory.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModelFactory.java new file mode 100644 index 0000000..edf145c --- /dev/null +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/sellroomviewmodel/SellRoomViewModelFactory.java @@ -0,0 +1,26 @@ +package com.swsnack.catchhouse.viewmodel.sellroomviewmodel; + +import com.swsnack.catchhouse.repository.RoomRepository; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +public class SellRoomViewModelFactory extends ViewModelProvider.NewInstanceFactory { + + private RoomRepository mRoomRepository; + + public SellRoomViewModelFactory(RoomRepository roomRepository) { + this.mRoomRepository = roomRepository; + } + + @NonNull + @Override + public T create(@NonNull Class modelClass) { + if (modelClass.isAssignableFrom(SellRoomViewModel.class)) { + return (T) new SellRoomViewModel(mRoomRepository); + } + throw new Fragment.InstantiationException("not viewModel Class", null); + } +} diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModel.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModel.java index 178c4b9..e35990a 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModel.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModel.java @@ -1,6 +1,5 @@ package com.swsnack.catchhouse.viewmodel.userviewmodel; -import android.app.Application; import android.content.Intent; import android.net.Uri; import android.view.View; @@ -18,15 +17,12 @@ import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.GoogleAuthProvider; import com.swsnack.catchhouse.R; -import com.swsnack.catchhouse.data.model.Room; import com.swsnack.catchhouse.data.model.User; import com.swsnack.catchhouse.repository.APIManager; import com.swsnack.catchhouse.repository.DataSource; import com.swsnack.catchhouse.viewmodel.ReactiveViewModel; import com.swsnack.catchhouse.viewmodel.ViewModelListener; -import java.util.List; - import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -44,26 +40,18 @@ public class UserViewModel extends ReactiveViewModel { - private Application mAppContext; private ViewModelListener mListener; + public MutableLiveData mIsSigned; public MutableLiveData mProfileUri; - private MutableLiveData> mFavoriteRoomList; - private MutableLiveData> mSellRoomList; - private MutableLiveData> mRecentRoomList; private MutableLiveData mGender; private MutableLiveData mUser; - public MutableLiveData mIsSigned; public MutableLiveData mEmail; public MutableLiveData mPassword; public MutableLiveData mNickName; - UserViewModel(Application application, DataSource dataManager, APIManager apiManager, ViewModelListener listener) { + UserViewModel(DataSource dataManager, APIManager apiManager, ViewModelListener listener) { super(dataManager, apiManager); - this.mAppContext = application; this.mProfileUri = new MutableLiveData<>(); - this.mSellRoomList = new MutableLiveData<>(); - this.mFavoriteRoomList = new MutableLiveData<>(); - this.mRecentRoomList = new MutableLiveData<>(); this.mUser = new MutableLiveData<>(); this.mGender = new MutableLiveData<>(); this.mIsSigned = new MutableLiveData<>(); @@ -184,8 +172,6 @@ public void signInWithEmail(View v) { } mListener.isWorking(); - User user = new User(mEmail.getValue(), mNickName.getValue(), mGender.getValue()); - getApiManager() .firebaseSignIn(mEmail.getValue(), mPassword.getValue(), @@ -269,34 +255,10 @@ public void updateProfile(Uri uri) { error -> mListener.onError(getStringFromResource(R.string.snack_update_profile_failed))); } - public void getSellRoom() { - mSellRoomList.setValue(getDataManager().getSellRoomList()); - } - - public void getFavoriteRoom() { - mFavoriteRoomList.setValue(getDataManager().getFavoriteRoomList()); - } - - public void getRecentRoom() { - mRecentRoomList.setValue(getDataManager().getRecentRoom()); - } - public LiveData getUser() { return mUser; } - public LiveData> getFavoriteRoomList() { - return mFavoriteRoomList; - } - - public LiveData> getRecentRoomList() { - return mRecentRoomList; - } - - public LiveData> getSellRoomList() { - return mSellRoomList; - } - private LiveData getProfileUri() { return mProfileUri; } diff --git a/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModelFactory.java b/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModelFactory.java index 8c7dc40..cfee70f 100644 --- a/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModelFactory.java +++ b/app/src/main/java/com/swsnack/catchhouse/viewmodel/userviewmodel/UserViewModelFactory.java @@ -1,24 +1,21 @@ package com.swsnack.catchhouse.viewmodel.userviewmodel; -import android.app.Application; -import androidx.lifecycle.ViewModel; -import androidx.lifecycle.ViewModelProvider; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; - import com.swsnack.catchhouse.repository.APIManager; import com.swsnack.catchhouse.repository.DataSource; import com.swsnack.catchhouse.viewmodel.ViewModelListener; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + public class UserViewModelFactory extends ViewModelProvider.NewInstanceFactory { - private Application mApplication; private DataSource mDatamanager; private APIManager mApiManager; private ViewModelListener mListener; - public UserViewModelFactory(@NonNull Application application, DataSource dataManager, APIManager apiManager, ViewModelListener listener) { - this.mApplication = application; + public UserViewModelFactory(DataSource dataManager, APIManager apiManager, ViewModelListener listener) { this.mDatamanager = dataManager; this.mApiManager = apiManager; this.mListener = listener; @@ -28,7 +25,7 @@ public UserViewModelFactory(@NonNull Application application, DataSource dataMan @Override public T create(@NonNull Class modelClass) { if (modelClass.isAssignableFrom(UserViewModel.class)) { - return (T) new UserViewModel(mApplication, mDatamanager, mApiManager, mListener); + return (T) new UserViewModel(mDatamanager, mApiManager, mListener); } throw new Fragment.InstantiationException("not viewModel class", null); } diff --git a/app/src/main/res/layout/bottom_my_page.xml b/app/src/main/res/layout/bottom_my_page.xml index 0ca94a8..9469c92 100644 --- a/app/src/main/res/layout/bottom_my_page.xml +++ b/app/src/main/res/layout/bottom_my_page.xml @@ -10,6 +10,18 @@ + + + + + + + bind:setRecentRoom="@{recentRoom.recentRoomList}" /> @@ -78,7 +90,7 @@ android:visibility="@{safeUnbox(handler.mIsSigned)? View.VISIBLE : View.GONE, default=gone}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_my_page_my_favorite_title" - bind:setFavoriteRoom="@{handler.favoriteRoomList}" /> + bind:setFavoriteRoom="@{favoriteRoom.favoriteRoomList}" /> @@ -110,7 +122,7 @@ android:visibility="@{safeUnbox(handler.mIsSigned)? View.VISIBLE : View.GONE, default=gone}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_my_page_my_favorite_title" - bind:setSellList="@{handler.sellRoomList}" /> + bind:setSellList="@{sellRoom.mySellList}" /> diff --git a/app/src/main/res/layout/fragment_my_page.xml b/app/src/main/res/layout/fragment_my_page.xml index c61ec34..2353dc2 100644 --- a/app/src/main/res/layout/fragment_my_page.xml +++ b/app/src/main/res/layout/fragment_my_page.xml @@ -8,6 +8,18 @@ + + + + + + @@ -92,6 +104,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:handler="@{handler}" + app:favoriteRoom="@{favoriteRoom}" + app:recentRoom="@{recentRoom}" + app:sellRoom="@{sellRoom}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />