diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java new file mode 100644 index 0000000..3f0ca2c --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java @@ -0,0 +1,33 @@ +package com.example.tampopo_client.viewmodels; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +public class ChatViewModel extends RealTimeViewModel { + private final List notificationListeners = new ArrayList<>(); + + private static final double NOTIFICATION_RECEIVE_PROBABILITY = 0.01; + + @Override + public Runnable onUpdate() { + return () -> { + // 1% の確率で onNotificationReceived() が呼び出される + double borderValue = Math.floor(Math.random() * 100); + double currentValue = NOTIFICATION_RECEIVE_PROBABILITY * 100; + if (currentValue >= borderValue) { + Log.d("ChatViewModel", "Received test notification."); + notificationListeners.forEach(listener -> listener.onNotificationReceived()); + } + }; + } + + public void addNotificationListener(NotificationListener listener) { + notificationListeners.add(listener); + } + + public void clearNotificationListener() { + notificationListeners.clear(); + } +} diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/NotificationListener.java b/app/src/main/java/com/example/tampopo_client/viewmodels/NotificationListener.java new file mode 100644 index 0000000..772483c --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/NotificationListener.java @@ -0,0 +1,5 @@ +package com.example.tampopo_client.viewmodels; + +public interface NotificationListener { + void onNotificationReceived(); +} diff --git a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java index 40c8179..984f8b7 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java @@ -27,10 +27,12 @@ import com.example.tampopo_client.models.Activity; import com.example.tampopo_client.viewmodels.ActivityViewModel; import com.example.tampopo_client.viewmodels.ActivityViewModelFactory; +import com.example.tampopo_client.viewmodels.ChatViewModel; +import com.example.tampopo_client.viewmodels.NotificationListener; import java.util.Map; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements NotificationListener { private EditText editMessage; private ImageButton sendButton; @@ -44,6 +46,7 @@ ActivityViewModel activityViewModel; Tampopo tampopo; + private ChatViewModel chatViewModel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -72,6 +75,9 @@ ActivityViewModelFactory factory = new ActivityViewModelFactory(tampopo.getUserId(), tampopo.getToken()); // Factoryを使って、引数をコンストラクタにわたしつつViewModelを作成 activityViewModel = new ViewModelProvider(this, factory).get(ActivityViewModel.class); + // ChatViewModelを初期化する + chatViewModel = new ViewModelProvider(this).get(ChatViewModel.class); + // MutableLiveData>friendUserIdsLiveDate = activityViewModel.getFriendUserIdsLiveData(); // friendUserIdsLiveDate.observe(this, new Observer>() { @@ -124,6 +130,9 @@ if (activityViewModel != null) { activityViewModel.startUpdating(1L); } + if (chatViewModel != null) { + chatViewModel.startUpdating(1L); + } } @Override @@ -133,6 +142,9 @@ if (activityViewModel != null) { activityViewModel.stopUpdating(); } + if (chatViewModel != null) { + chatViewModel.stopUpdating(); + } } @Override @@ -142,6 +154,9 @@ if (activityViewModel != null) { activityViewModel.stopUpdating(); } + if (chatViewModel != null) { + chatViewModel.stopUpdating(); + } } private void showInputDialog() { @@ -222,4 +237,8 @@ // } } + @Override + public void onNotificationReceived() { + // TODO: 通知を受信したときの処理を実装する + } } \ No newline at end of file