プルリクエスト 'ID作成時に表示をダイアログに変更、セットアップが終了していない場合にtoast表示を行い遷移しないように変更' (#49) from last into master

Reviewed-on: #49
This commit is contained in:
murakumo 2024-07-10 07:09:15 +00:00
commit 362b7b5544
4 changed files with 146 additions and 66 deletions

View File

@ -5,12 +5,12 @@ import java.util.List;
public class CreateUUID { public class CreateUUID {
public static int generateUUID(List<Integer> classIdList ){ public static int generateUUID(List<Integer> classIdList) {
while (true){ while (true) {
int uuidInt = (int)(Math.random() * 1000000); int uuidInt = (int) (Math.random() * 1000000);
boolean isDuplicate = false; boolean isDuplicate = false;
for(int classIdInt : classIdList){ for (int classIdInt : classIdList) {
if(classIdInt==uuidInt){ if (classIdInt == uuidInt) {
//重複があればフラグを立てループを抜ける //重複があればフラグを立てループを抜ける
isDuplicate = true; isDuplicate = true;
break; break;
@ -22,7 +22,7 @@ public class CreateUUID {
InsertClassIdforFirebase insertClassIdforFirebase = new InsertClassIdforFirebase(); InsertClassIdforFirebase insertClassIdforFirebase = new InsertClassIdforFirebase();
insertClassIdforFirebase.insertClassId(uuidInt); insertClassIdforFirebase.insertClassId(uuidInt);
//テスト用 //テスト用
uuidInt=100; uuidInt = 100;
return uuidInt; return uuidInt;
} }
} }

View File

@ -16,19 +16,18 @@ import java.util.Map;
public class FirestoreReception { public class FirestoreReception {
//firestoreから受け取ったデータを束ねるためのマップ
public List<MyDataClass> myDataList = new ArrayList<>();
private FirebaseFirestore db; private FirebaseFirestore db;
public FirestoreReception() { public FirestoreReception() {
db = FirebaseFirestore.getInstance(); db = FirebaseFirestore.getInstance();
} }
//firestoreから受け取ったデータを束ねるためのマップ
public List<MyDataClass> myDataList = new ArrayList<>();
//ClassIdを引数にデータの作成を行う //ClassIdを引数にデータの作成を行う
public void getDocumentsByClassId(int classId) { public void getDocumentsByClassId(int classId) {
myDataList.clear(); myDataList.clear();
CollectionReference collectionRef = db.collection("testAddressArray"); CollectionReference collectionRef = db.collection("testDistinct");
// classIdが引数のものを取得する // classIdが引数のものを取得する
collectionRef.whereEqualTo("classId", classId).get() collectionRef.whereEqualTo("classId", classId).get()

View File

@ -19,6 +19,7 @@ import com.google.gson.Gson;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -85,7 +86,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
// firestoreの受信関連 // firestoreの受信関連
db = FirebaseFirestore.getInstance(); db = FirebaseFirestore.getInstance();
firestoreReception = new FirestoreReception(); firestoreReception = new FirestoreReception();
Log.d("MainActivity","geocodeAddress"); Log.d("MainActivity", "geocodeAddress");
ExecutorService executor = Executors.newSingleThreadExecutor(); ExecutorService executor = Executors.newSingleThreadExecutor();
@ -105,7 +106,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
} }
// クリック処理 // クリック処理
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -136,51 +136,65 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
// ルート作成のクリック処理 // ルート作成のクリック処理
if (view == root) { if (view == root) {
imageRoot.setImageResource(R.drawable.pin); imageRoot.setImageResource(R.drawable.pin);
fetchDataAndCreateRoute(); checkSetupAndCreateRoute(this::fetchDataAndCreateRoute);
} }
if (view == imageRoot) { if (view == imageRoot) {
imageRoot.setImageResource(R.drawable.pin); imageRoot.setImageResource(R.drawable.pin);
fetchDataAndCreateRoute(); checkSetupAndCreateRoute(this::fetchDataAndCreateRoute);
} }
// 提出状況のクリック処理 // 提出状況のクリック処理
if (view == submission) { if (view == submission) {
checkSetupAndCreateRoute(() -> {
ArrayList<SubmissionStudent> submissionStudents = getSubmissionStudents(); ArrayList<SubmissionStudent> submissionStudents = getSubmissionStudents();
Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class); Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class);
toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents); toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents);
startActivity(toSubmission); startActivity(toSubmission);
});
} }
if (view == imageSubmission) { if (view == imageSubmission) {
checkSetupAndCreateRoute(() -> {
ArrayList<SubmissionStudent> submissionStudents = getSubmissionStudents(); ArrayList<SubmissionStudent> submissionStudents = getSubmissionStudents();
Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class); Intent toSubmission = new Intent(MainActivity.this, SubmissionActivity.class);
toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents); toSubmission.putParcelableArrayListExtra("submissionStudents", submissionStudents);
startActivity(toSubmission); startActivity(toSubmission);
});
} }
} }
//UUIDを表示するかのダイアログ //ID作成表示に関する処理
private void showUUIDYesNoDialog() { private void showUUIDYesNoDialog() {
firestoreReception_classIdDatabase = new FirestoreReception_classIdDatabase(); firestoreReception_classIdDatabase = new FirestoreReception_classIdDatabase();
List<Integer> classIdList = firestoreReception_classIdDatabase.getAllDocumentsFromClassIdDatabase(); List<Integer> classIdList = firestoreReception_classIdDatabase.getAllDocumentsFromClassIdDatabase();
AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("クラスID"); builder.setTitle("ID");
builder.setMessage("あなたのクラスIDを表示しますか"); builder.setMessage("あなたのIDを表示/もしくは新規で作成しますか?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { //作成処理
builder.setPositiveButton("作成", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
classId = CreateUUID.generateUUID(classIdList); classId = CreateUUID.generateUUID(classIdList);
Toast.makeText(MainActivity.this, "クラスID: " + classId, Toast.LENGTH_SHORT).show(); // 生成されたIDを表示するメソッド
imageUuid.setImageResource(R.drawable.checked_image); showClassIdDialog("生成されたID", classId);
} }
}); });
builder.setNegativeButton("No", new DialogInterface.OnClickListener() { //表示処理
builder.setNegativeButton("表示", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Log.d("DialogNO", "DialogでNoが選ばれました"); //roomを扱うため非同期処理
imageUuid.setImageResource(R.drawable.checked_image); ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
// 現在のクラスIDを取得
int currentClassId = getCurrentClassIdFromRoom();
runOnUiThread(() -> {
// 現在のクラスIDを表示するダイアログ
showClassIdDialog("現在のID", currentClassId);
});
});
executor.shutdown();
} }
}); });
@ -189,12 +203,86 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
} }
private int getCurrentClassIdFromRoom() {
AppDatabase db = getDatabaseInstance();
SetUpTableDao setUpTableDao = db.setUpTableDao();
// 現在のクラスIDを取得
return setUpTableDao.getClassId();
}
//クラスIDを表示するダイアログ
private void showClassIdDialog(String title, int classId) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title);
builder.setMessage("ID: " + classId);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
//ルート作成提出状況の遷移を行う前のチェックを行う処理
private void checkSetupAndCreateRoute(Runnable onSetupComplete) {
if (isClassIdSet()) {
isSetupExists(classId).thenAccept(setupExists -> {
if (setupExists) {
runOnUiThread(onSetupComplete);
} else {
runOnUiThread(() -> {
Toast.makeText(this, "先にセットアップを済ませてください", Toast.LENGTH_LONG).show();
});
}
}).exceptionally(ex -> {
ex.printStackTrace();
runOnUiThread(() -> {
Toast.makeText(this, "エラーが発生しました", Toast.LENGTH_LONG).show();
});
return null;
});
} else {
Toast.makeText(this, "先にIDの作成を行ってください", Toast.LENGTH_LONG).show();
}
}
// クラスIDが設定されているかどうかを判定
private boolean isClassIdSet() {
// classIdが0より大きい場合trueを返す
return classId > 0;
}
// セットアップが存在するかどうかを判定
private CompletableFuture<Boolean> isSetupExists(int classId) {
final ExecutorService executorService = Executors.newSingleThreadExecutor();
return CompletableFuture.supplyAsync(() -> {
AppDatabase db = getDatabaseInstance();
SetUpTableDao setUpTableDao = db.setUpTableDao();
//データベースの値を全取得
List<SetUpTable> checkData = setUpTableDao.getAll();
for (SetUpTable setUpTable : checkData) {
//SetUpTableのclassIdと引数のclassIdが一致する場合trueを返す
if (setUpTable.classId == classId) {
return true;
}
}
return false;
//処理完了時にexecutorServiceをシャットダウン
}, executorService).whenComplete((result, throwable) -> executorService.shutdown());
}
//ルート作成の非同期処理 //ルート作成の非同期処理
private void fetchDataAndCreateRoute() { private void fetchDataAndCreateRoute() {
ExecutorService executor = Executors.newSingleThreadExecutor(); ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> { executor.execute(() -> {
AppDatabase db = getDatabaseInstance(); SetUpTableDao setUpTableDao = db.setUpTableDao(); AppDatabase db = getDatabaseInstance();
SetUpTableDao setUpTableDao = db.setUpTableDao();
int totalStudentInt = setUpTableDao.getTotalStudent(); int totalStudentInt = setUpTableDao.getTotalStudent();
int myDataListSizeInt = firestoreReception.getMyDataListSize(); int myDataListSizeInt = firestoreReception.getMyDataListSize();
@ -248,7 +336,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
String startPointLatLngString = createSchedule.receiveData(myDataList, getApplicationContext()); String startPointLatLngString = createSchedule.receiveData(myDataList, getApplicationContext());
runOnUiThread(() -> { runOnUiThread(() -> {
if ( !startPointLatLngString.equals("")) { if (!startPointLatLngString.equals("")) {
Log.d("MainActivity", "スケジュール作成成功"); Log.d("MainActivity", "スケジュール作成成功");
saveMyDataList(finalMyDataList); saveMyDataList(finalMyDataList);
Intent toRoot = new Intent(MainActivity.this, Maps.class); Intent toRoot = new Intent(MainActivity.this, Maps.class);
@ -264,6 +352,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
executor.shutdown(); executor.shutdown();
}); });
} }
private void saveMyDataList(List<MyDataClass> myDataList) { private void saveMyDataList(List<MyDataClass> myDataList) {
// 共有プリファレンスのインスタンスを取得 // 共有プリファレンスのインスタンスを取得
SharedPreferences sharedPreferences = getSharedPreferences("MyDataList", MODE_PRIVATE); SharedPreferences sharedPreferences = getSharedPreferences("MyDataList", MODE_PRIVATE);
@ -307,7 +396,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
} }
//提出状況の取得 //提出状況の取得
private ArrayList<SubmissionStudent> getSubmissionStudents() { private ArrayList<SubmissionStudent> getSubmissionStudents() {
ArrayList<SubmissionStudent> submissionStudents = new ArrayList<>(); ArrayList<SubmissionStudent> submissionStudents = new ArrayList<>();

View File

@ -2,7 +2,6 @@ package com.example.oplogy;
import static android.content.ContentValues.TAG; import static android.content.ContentValues.TAG;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.TimePickerDialog; import android.app.TimePickerDialog;
@ -42,6 +41,16 @@ public class SetUpActivity extends FragmentActivity
String startBreakTimeString; String startBreakTimeString;
String endBreakTimeString; String endBreakTimeString;
int totalStudentString; int totalStudentString;
String stringYearString;
String stringMonthString;
String stringDayOfMonthString;
String stringHourOfDayString;
String stringMinuteString;
Button setFirstDay;
Button setSecondDay;
Button setThirdDay;
Button setStartTimeButton;
Button setEndTimeButton;
private TextView setTeacherName; private TextView setTeacherName;
private TextView setStartPoint; private TextView setStartPoint;
private TextView setStartTime; private TextView setStartTime;
@ -52,29 +61,13 @@ public class SetUpActivity extends FragmentActivity
private int isDateSelectedInt; private int isDateSelectedInt;
private int isStartTimeSelectedInt; private int isStartTimeSelectedInt;
String stringYearString;
String stringMonthString;
String stringDayOfMonthString;
String stringHourOfDayString;
String stringMinuteString;
Button setFirstDay;
Button setSecondDay;
Button setThirdDay;
Button setStartTimeButton;
Button setEndTimeButton;
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_up); setContentView(R.layout.activity_set_up);
int classIdInt= getIntent().getIntExtra("classId", 100000); int classIdInt = getIntent().getIntExtra("classId", 100000);
setTeacherName = findViewById(R.id.teacherName); //先生の名前 setTeacherName = findViewById(R.id.teacherName); //先生の名前
setStartPoint = findViewById(R.id.startPoint); //開始地点 setStartPoint = findViewById(R.id.startPoint); //開始地点
@ -104,7 +97,7 @@ public class SetUpActivity extends FragmentActivity
Button reset = findViewById(R.id.resetButton); Button reset = findViewById(R.id.resetButton);
toMain.setOnClickListener(view -> { toMain.setOnClickListener(view -> {
Intent intent = new Intent(SetUpActivity.this,MainActivity.class); //main画面へ戻る処理 Intent intent = new Intent(SetUpActivity.this, MainActivity.class); //main画面へ戻る処理
startActivity(intent); startActivity(intent);
}); });
@ -119,7 +112,7 @@ public class SetUpActivity extends FragmentActivity
Log.d(TAG, "Third Day:" + thirdDayString); Log.d(TAG, "Third Day:" + thirdDayString);
Log.d(TAG, "Start Time" + startTimeString); Log.d(TAG, "Start Time" + startTimeString);
Log.d(TAG, "End Time" + endTimeString); Log.d(TAG, "End Time" + endTimeString);
if (setTenMinute.isChecked()){ //ラジオボタンの状態を取得 if (setTenMinute.isChecked()) { //ラジオボタンの状態を取得
intervalTimeString = "10"; intervalTimeString = "10";
} else if (setFifteenMinute.isChecked()) { } else if (setFifteenMinute.isChecked()) {
intervalTimeString = "15"; intervalTimeString = "15";
@ -172,12 +165,12 @@ public class SetUpActivity extends FragmentActivity
runOnUiThread(() -> Toast.makeText(SetUpActivity.this, "登録しました", Toast.LENGTH_SHORT).show()); runOnUiThread(() -> Toast.makeText(SetUpActivity.this, "登録しました", Toast.LENGTH_SHORT).show());
} }
//家庭訪問日を保存する共有プリファレンス //家庭訪問日を保存する共有プリファレンス
SharedPreferences sharedPreferences=getSharedPreferences("visitingDate",MODE_PRIVATE); SharedPreferences sharedPreferences = getSharedPreferences("visitingDate", MODE_PRIVATE);
SharedPreferences.Editor editor= sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("day1",firstDayString); editor.putString("day1", firstDayString);
editor.putString("day2",secondDayString); editor.putString("day2", secondDayString);
editor.putString("day3",thirdDayString); editor.putString("day3", thirdDayString);
editor.apply(); editor.apply();
@ -186,17 +179,17 @@ public class SetUpActivity extends FragmentActivity
}); });
setFirstDay.setOnClickListener(v ->{ setFirstDay.setOnClickListener(v -> {
isDateSelectedInt = 1; isDateSelectedInt = 1;
showDatePickerDialog(); //DatePickerの表示 showDatePickerDialog(); //DatePickerの表示
}); });
setSecondDay.setOnClickListener(v ->{ setSecondDay.setOnClickListener(v -> {
isDateSelectedInt = 2; isDateSelectedInt = 2;
showDatePickerDialog(); showDatePickerDialog();
}); });
setThirdDay.setOnClickListener(v ->{ setThirdDay.setOnClickListener(v -> {
isDateSelectedInt = 3; isDateSelectedInt = 3;
showDatePickerDialog(); showDatePickerDialog();
}); });
@ -291,7 +284,7 @@ public class SetUpActivity extends FragmentActivity
} else if (isStartTimeSelectedInt == 3) { } else if (isStartTimeSelectedInt == 3) {
stringHourOfDayString = String.format("%02d", hourOfDay); stringHourOfDayString = String.format("%02d", hourOfDay);
stringMinuteString = String.format("%02d", minute); stringMinuteString = String.format("%02d", minute);
startBreakTimeString =stringHourOfDayString + stringMinuteString; startBreakTimeString = stringHourOfDayString + stringMinuteString;
setStartBreakTime.setText(" " + str + " "); setStartBreakTime.setText(" " + str + " ");
} else if (isStartTimeSelectedInt == 4) { } else if (isStartTimeSelectedInt == 4) {