diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cf7d92a..42dbe64 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,9 @@
android:theme="@style/Theme.Oplogy"
tools:ignore="ExtraText"
tools:targetApi="31">
+
diff --git a/app/src/main/java/com/example/oplogy/AppDatabase.java b/app/src/main/java/com/example/oplogy/AppDatabase.java
index 8d655f3..c52259d 100644
--- a/app/src/main/java/com/example/oplogy/AppDatabase.java
+++ b/app/src/main/java/com/example/oplogy/AppDatabase.java
@@ -3,7 +3,7 @@ package com.example.oplogy;
import androidx.room.Database;
import androidx.room.RoomDatabase;
-@Database(entities = {SetUpTable.class}, version = 2)
+@Database(entities = {SetUpTable.class}, version = 2, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
// データベースにアクセスするためのメソッドを提供する
public abstract SetUpTableDao setUpTableDao();
diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java
index 64dc27a..7513bcf 100644
--- a/app/src/main/java/com/example/oplogy/MainActivity.java
+++ b/app/src/main/java/com/example/oplogy/MainActivity.java
@@ -15,6 +15,7 @@ import androidx.room.Room;
import com.google.firebase.firestore.FirebaseFirestore;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
@@ -112,64 +113,29 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
// ルート作成のクリック処理
if(view == root){
imageRoot.setImageResource(R.drawable.pin);
- ExecutorService executor = Executors.newSingleThreadExecutor();
-
- CountDownLatch latch = new CountDownLatch(2);
-
- executor.execute(() -> {
- AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "SetUpTable").build();
- SetUpTableDao setUpTableDao = db.setUpTableDao();
-
- Log.d("MainActivity", "db" + setUpTableDao.getAll());
-
- int totalStudent = setUpTableDao.getTotalStudent();
- int myDataListSize = firestoreReception.getMyDataListSize();
-
- runOnUiThread(() -> {
- if (totalStudent != myDataListSize) {
- showRouteCreationDialog(latch);
- } else {
- latch.countDown();
- }
- });
- });
-
- executor.execute(() -> {
- List myDataList = firestoreReception.getMyDataList();
- CreateRoot createRoot = new CreateRoot(MainActivity.this);
- createRoot.receiveData(myDataList);
- latch.countDown();
- });
-
- new Thread(() -> {
- try {
- latch.await(); // Both tasks must call countDown() before this returns
- runOnUiThread(() -> {
- Intent toRoot = new Intent(MainActivity.this, Maps.class);
- startActivity(toRoot);
- });
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }).start();
-
- executor.shutdown();
+ fetchDataAndCreateRoute();
}
if(view == imageRoot){
imageRoot.setImageResource(R.drawable.pin);
- Intent toRoot = new Intent(MainActivity.this,Maps.class);
- startActivity(toRoot);
+ fetchDataAndCreateRoute();
}
// 提出状況のクリック処理
if(view == submission){
- Intent toSubmission = new Intent(MainActivity.this,SubmissionActivity.class);
+ ArrayList submissionStudents = getSubmissionStudents();
+ Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class);
+ toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents);
startActivity(toSubmission);
}
if(view == imageSubmission){
- Intent toSubmission = new Intent(MainActivity.this,SubmissionActivity.class);
+ ArrayList submissionStudents = getSubmissionStudents();
+ Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class);
+ toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents);
startActivity(toSubmission);
}
}
+
+
+
private void showUUIDYesNoDialog() {
//ダイアログの表示
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -193,7 +159,58 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
});
builder.show();
}
- //ルート作成のダイアログ
+
+ //ルート作成のダイアログ+ルート作成の処理の非同期処理実装
+ private void fetchDataAndCreateRoute() {
+ //非同期処理の開始
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+
+ // 2つのタスクの完了をカウントする変数
+ CountDownLatch latch = new CountDownLatch(2);
+
+ // タスク1: ローカルDBから生徒数を取得
+ executor.execute(() -> {
+ AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "SetUpTable").build();
+ SetUpTableDao setUpTableDao = db.setUpTableDao();
+
+ Log.d("MainActivity", "db" + setUpTableDao.getAll());
+
+ int totalStudent = setUpTableDao.getTotalStudent();
+ int myDataListSize = firestoreReception.getMyDataListSize();
+
+ runOnUiThread(() -> {
+ if (totalStudent != myDataListSize) {
+ showRouteCreationDialog(latch);
+ } else {
+ latch.countDown();
+ }
+ });
+ });
+
+ // タスク2: Firestoreからデータを取得
+ executor.execute(() -> {
+ List myDataList = firestoreReception.getMyDataList();
+ CreateRoot createRoot = new CreateRoot(MainActivity.this);
+ createRoot.receiveData(myDataList);
+ latch.countDown();
+ });
+
+ new Thread(() -> {
+ try {
+ latch.await(); // Both tasks must call countDown() before this returns
+ runOnUiThread(() -> {
+ Intent toRoot = new Intent(MainActivity.this, Maps.class);
+ startActivity(toRoot);
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }).start();
+
+ executor.shutdown();
+ }
+
+ //ルート作成する際の警告のダイアログ
private void showRouteCreationDialog(CountDownLatch latch) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("警告")
@@ -212,4 +229,46 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
})
.show();
}
+ //submissionクラスに渡すlistの作成
+ private ArrayList getSubmissionStudents() {
+ ArrayList submissionStudents = new ArrayList<>();
+ List myDataList = firestoreReception.getMyDataList();
+
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ CountDownLatch latch = new CountDownLatch(1);
+
+ executor.execute(() -> {
+ // 1. Roomデータベースから全生徒数を取得
+ AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "SetUpTable").build();
+ SetUpTableDao setUpTableDao = db.setUpTableDao();
+ int totalStudent = setUpTableDao.getTotalStudent();
+ // 2. Firestoreから生徒番号のリストを取得
+ ArrayList firestoreStudentNumbers = new ArrayList<>();
+ for (MyDataClass myData : myDataList) {
+ int studentNumber = myData.getStudentNumber();
+ firestoreStudentNumbers.add(studentNumber);
+ }
+
+ // 3. SubmissionStudentオブジェクトのリストを作成
+ for (int i = 1; i <= totalStudent; i++) {
+ boolean submitted = firestoreStudentNumbers.contains(i);
+ submissionStudents.add(new SubmissionStudent(i, submitted));
+ }
+
+ // 4. データベース操作が完了したことを通知
+ latch.countDown();
+ });
+
+ try {
+ // データベース操作が完了するのを待つ
+ latch.await();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ executor.shutdown();
+
+ // SubmissionStudentオブジェクトのリストを返す
+ return submissionStudents;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/oplogy/SubmissionActivity.java b/app/src/main/java/com/example/oplogy/SubmissionActivity.java
index c6e2d7f..3ae33e2 100644
--- a/app/src/main/java/com/example/oplogy/SubmissionActivity.java
+++ b/app/src/main/java/com/example/oplogy/SubmissionActivity.java
@@ -1,14 +1,55 @@
package com.example.oplogy;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
+import android.widget.ImageView;
+
+import com.example.oplogy.databinding.SubmissionBinding;
+
+import java.util.ArrayList;
+import java.util.List;
public class SubmissionActivity extends AppCompatActivity {
+ private RecyclerView recyclerView;
+ private SubmissionAdapter submissionAdapter;
+ private List students = new ArrayList<>();
+ ArrayList studentNumbers = new ArrayList<>();
+ private int totalStudent = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.submission);
+
+ ImageView backButton = findViewById(R.id.BackMain_fromSubmission);
+ backButton.setOnClickListener(v -> {
+ finish();
+ });
+
+
+ studentNumbers=getIntent().getIntegerArrayListExtra("submissionStudents");
+
+ recyclerView = findViewById(R.id.recyclerView);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ submissionAdapter = new SubmissionAdapter(students);
+ recyclerView.setAdapter(submissionAdapter);
+
+ fetchStudents();
}
-}
\ No newline at end of file
+ private void fetchStudents() {
+ // インテントから生徒のリストを取得
+ ArrayList submissionStudents = getIntent().getParcelableArrayListExtra("submissionStudents");
+
+ // 生徒のリストを反復処理し、それをRecyclerViewに表示
+ for (SubmissionStudent student : submissionStudents) {
+ students.add(student);
+ }
+
+ // データが変更されたことをアダプターに通知
+ submissionAdapter.notifyDataSetChanged();
+}
+}
+
diff --git a/app/src/main/java/com/example/oplogy/SubmissionAdapter.java b/app/src/main/java/com/example/oplogy/SubmissionAdapter.java
new file mode 100644
index 0000000..da80a5c
--- /dev/null
+++ b/app/src/main/java/com/example/oplogy/SubmissionAdapter.java
@@ -0,0 +1,60 @@
+package com.example.oplogy;
+
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.recyclerview.widget.RecyclerView;
+import java.util.List;
+
+public class SubmissionAdapter extends RecyclerView.Adapter {
+
+ private List students;
+
+ public static class StudentViewHolder extends RecyclerView.ViewHolder {
+ public TextView studentNumberTextView;
+ public TextView statusTextView;
+
+ public StudentViewHolder(View view) {
+ super(view);
+ studentNumberTextView = view.findViewById(R.id.studentNumberTextView);
+ statusTextView = view.findViewById(R.id.statusTextView);
+ }
+ }
+
+ public SubmissionAdapter(List students) {
+ this.students = students;
+ }
+
+ @Override
+ public StudentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.row_submission, parent, false);
+ return new StudentViewHolder(view);
+ }
+
+ @Override
+public void onBindViewHolder(StudentViewHolder holder, int position) {
+ SubmissionStudent student = students.get(position);
+ holder.studentNumberTextView.setText(String.valueOf(student.getStudentNumber()));
+ if (student.isSubmitted()) {
+ holder.statusTextView.setText("提出済み");
+ holder.statusTextView.setBackgroundColor(Color.BLACK);
+ holder.statusTextView.setTextColor(Color.WHITE);
+ holder.studentNumberTextView.setBackgroundColor(Color.BLACK);
+ holder.studentNumberTextView.setTextColor(Color.WHITE);
+ } else {
+ holder.statusTextView.setText("未提出");
+ holder.statusTextView.setBackgroundColor(Color.RED);
+ holder.statusTextView.setTextColor(Color.WHITE);
+ holder.studentNumberTextView.setBackgroundColor(Color.RED);
+ holder.studentNumberTextView.setTextColor(Color.WHITE);
+ }
+}
+
+ @Override
+ public int getItemCount() {
+ return students.size();
+ }
+}
diff --git a/app/src/main/java/com/example/oplogy/SubmissionStudent.java b/app/src/main/java/com/example/oplogy/SubmissionStudent.java
new file mode 100644
index 0000000..8ca3f6c
--- /dev/null
+++ b/app/src/main/java/com/example/oplogy/SubmissionStudent.java
@@ -0,0 +1,49 @@
+package com.example.oplogy;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class SubmissionStudent implements Parcelable {
+ private int studentNumber;
+ private boolean submitted;
+
+ public SubmissionStudent(int studentNumber, boolean submitted) {
+ this.studentNumber = studentNumber;
+ this.submitted = submitted;
+ }
+
+ protected SubmissionStudent(Parcel in) {
+ studentNumber = in.readInt();
+ submitted = in.readByte() != 0;
+ }
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public SubmissionStudent createFromParcel(Parcel in) {
+ return new SubmissionStudent(in);
+ }
+
+ @Override
+ public SubmissionStudent[] newArray(int size) {
+ return new SubmissionStudent[size];
+ }
+ };
+
+ public int getStudentNumber() {
+ return studentNumber;
+ }
+
+ public boolean isSubmitted() {
+ return submitted;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeInt(studentNumber);
+ parcel.writeByte((byte) (submitted ? 1 : 0));
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_submission.xml b/app/src/main/res/layout/row_submission.xml
new file mode 100644
index 0000000..9298d4f
--- /dev/null
+++ b/app/src/main/res/layout/row_submission.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/submission.xml b/app/src/main/res/layout/submission.xml
index d9cbc15..b65b6f5 100644
--- a/app/src/main/res/layout/submission.xml
+++ b/app/src/main/res/layout/submission.xml
@@ -1,9 +1,43 @@
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+