diff --git a/.idea/misc.xml b/.idea/misc.xml index 773fe0f..8978d23 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/java/com/example/oplogy/AppDatabase.java b/app/src/main/java/com/example/oplogy/AppDatabase.java index 091f71e..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 = 3, exportSchema = false) +@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/CreateUUID.java b/app/src/main/java/com/example/oplogy/CreateUUID.java index c801b77..f61e643 100644 --- a/app/src/main/java/com/example/oplogy/CreateUUID.java +++ b/app/src/main/java/com/example/oplogy/CreateUUID.java @@ -5,12 +5,12 @@ import java.util.List; public class CreateUUID { - public static int generateUUID(List classIdList ){ + public static int generateUUID(List classIdList ){ while (true){ - int uuid = (int) (Math.random() * 100000); + String uuid = String.valueOf((int)(Math.random() * 1000000)); boolean isDuplicate = false; - for(int classId : classIdList){ - if(classId==uuid){ + for(String classId : classIdList){ + if(classId.equals(uuid)){ //重複があればフラグを立て、ループを抜ける isDuplicate = true; break; @@ -19,11 +19,9 @@ public class CreateUUID { //重複がなければ生成したUUIDを返す if (!isDuplicate) { //firestoreに挿入処理 - InsertClassIdforFirebase insertClassIdforFirebase = new InsertClassIdforFirebase(); - insertClassIdforFirebase.insertClassId(uuid); //テスト用 - uuid=100; - return uuid; + uuid="100"; + return Integer.parseInt(uuid); } } } diff --git a/app/src/main/java/com/example/oplogy/DatePick.java b/app/src/main/java/com/example/oplogy/DatePick.java new file mode 100644 index 0000000..6250664 --- /dev/null +++ b/app/src/main/java/com/example/oplogy/DatePick.java @@ -0,0 +1,35 @@ +package com.example.oplogy; + +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.widget.DatePicker; + +import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import java.util.Calendar; +import java.util.Objects; + +public class DatePick extends DialogFragment implements + DatePickerDialog.OnDateSetListener { + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstantState) { + + //デフォルトのタイムゾーンおよびロケールを使用してカレンダを取得 + final Calendar c = Calendar.getInstance(); + int year = c.get(Calendar.YEAR); + int month = c.get(Calendar.MONTH); + int day = c.get(Calendar.DAY_OF_MONTH); + + return new DatePickerDialog(requireActivity(), (DatePickerDialog.OnDateSetListener) getActivity(), year, month, day); + } + + + @Override + public void onDateSet(DatePicker datePicker, int year, int month, int day) { + + } +} + diff --git a/app/src/main/java/com/example/oplogy/FirestoreReception_classIdDatabase.java b/app/src/main/java/com/example/oplogy/FirestoreReception_classIdDatabase.java index 5484d93..258330a 100644 --- a/app/src/main/java/com/example/oplogy/FirestoreReception_classIdDatabase.java +++ b/app/src/main/java/com/example/oplogy/FirestoreReception_classIdDatabase.java @@ -17,14 +17,14 @@ import java.util.List; import java.util.Map; public class FirestoreReception_classIdDatabase { private FirebaseFirestore db; - private List classIdList= new ArrayList<>(); + private List classIdList= new ArrayList<>(); public FirestoreReception_classIdDatabase() { db = FirebaseFirestore.getInstance(); } - public List getAllDocumentsFromClassIdDatabase() { + public List getAllDocumentsFromClassIdDatabase() { db.collection("classId_Database") .get() .addOnCompleteListener(new OnCompleteListener() { @@ -34,7 +34,8 @@ public class FirestoreReception_classIdDatabase { for (QueryDocumentSnapshot document : task.getResult()) { Log.d("結果", document.getId() + " => " + document.getData()); //データをListに追加 - classIdList.add(((Long) document.get("classId")).intValue()); } + classIdList.add((String) document.get("classId")); + } } else { Log.d("結果", "Error getting documents: ", task.getException()); } @@ -44,7 +45,7 @@ public class FirestoreReception_classIdDatabase { return classIdList; } - public List getClassIdList() { + public List getClassIdList() { return classIdList; } } \ No newline at end of file diff --git a/app/src/main/java/com/example/oplogy/InsertClassIdforFirebase.java b/app/src/main/java/com/example/oplogy/InsertClassIdforFirebase.java deleted file mode 100644 index 9785da8..0000000 --- a/app/src/main/java/com/example/oplogy/InsertClassIdforFirebase.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.oplogy; - -import com.google.firebase.firestore.FirebaseFirestore; - -import java.util.HashMap; -import java.util.Map; - -public class InsertClassIdforFirebase { - public void insertClassId(int classId) { - FirebaseFirestore db = FirebaseFirestore.getInstance(); - - Map data = new HashMap<>(); - data.put("classId", classId); // classId is inserted as a number - - db.collection("classId_Database").add(data) - .addOnSuccessListener(documentReference -> System.out.println("DocumentSnapshot added with ID: " + documentReference.getId())) - .addOnFailureListener(e -> System.err.println("Error adding document: " + e)); - } -} diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 971b8a6..ac4c194 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -162,7 +162,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe //UUIDを表示するかのダイアログ private void showUUIDYesNoDialog() { firestoreReception_classIdDatabase = new FirestoreReception_classIdDatabase(); - List classIdList = firestoreReception_classIdDatabase.getAllDocumentsFromClassIdDatabase(); + List classIdList = firestoreReception_classIdDatabase.getAllDocumentsFromClassIdDatabase(); AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -197,9 +197,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe // タスク1: ローカルDBから生徒数を取得してtotalStudentと比較 executor.execute(() -> { - AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "SetUpTable") - .fallbackToDestructiveMigration() - .build(); + AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "SetUpTable").build(); SetUpTableDao setUpTableDao = db.setUpTableDao(); Log.d("MainActivity", "db" + setUpTableDao.getAll()); diff --git a/app/src/main/java/com/example/oplogy/Maps.java b/app/src/main/java/com/example/oplogy/Maps.java index 48c827b..25c0239 100644 --- a/app/src/main/java/com/example/oplogy/Maps.java +++ b/app/src/main/java/com/example/oplogy/Maps.java @@ -1,75 +1,120 @@ package com.example.oplogy; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.ImageView; - import androidx.fragment.app.FragmentActivity; +import android.content.Intent; +import android.graphics.Color; +import android.media.Image; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.TextView; + +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; import com.example.oplogy.databinding.MapsBinding; +import com.google.android.gms.maps.model.Polyline; +import com.google.android.gms.maps.model.PolylineOptions; +import com.google.maps.DirectionsApi; +import com.google.maps.DirectionsApiRequest; +import com.google.maps.GeoApiContext; +import com.google.maps.model.DirectionsResult; -public class Maps extends FragmentActivity implements View.OnClickListener { +import java.util.Locale; +import java.util.Map; - private WebView webView; +public class Maps extends FragmentActivity implements OnMapReadyCallback,View.OnClickListener{ + + // ボタンの戻る処理 ImageView backMain; + private GoogleMap mMap; private MapsBinding binding; + private LatLng loc; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - binding = MapsBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); + binding = MapsBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + mapFragment.getMapAsync(this); backMain = findViewById(R.id.BackMain); backMain.setOnClickListener(this); - - webView = findViewById(R.id.webView); - WebSettings webSettings = webView.getSettings(); - webSettings.setJavaScriptEnabled(true); - webView.setWebViewClient(new WebViewClient()); - -// ここにデータを入れておいてください、処理は[/]で区切っています - loadMapInWebView("35.09050879999539,136.87845379325216/35.09284820618655,136.88165119390393/35.09364708442631,136.88171563326418"); } -// WebViewの処理です(Mapの中の処理をやっています) - private void loadMapInWebView(String locations) { -// 区切ることで、追加の地点を入れて、最終地点にピンを打ってある状態です - String[] locArray = locations.split("/"); -// ↓URLで経路案内(車)での表示をしています - StringBuilder urlBuilder = new StringBuilder("https://www.google.com/maps/dir/?api=1&travelmode=driving"); - if (locArray.length > 0) { - urlBuilder.append("&origin=").append(locArray[0]); - if (locArray.length > 1) { - urlBuilder.append("&destination=").append(locArray[locArray.length - 1]); + /** + * Manipulates the map once available. + * This callback is triggered when the map is ready to be used. + * This is where we can add markers or lines, add listeners or move the camera. In this case, + * we just add a marker near Sydney, Australia. + * If Google Play services is not installed on the device, the user will be prompted to install + * it inside the SupportMapFragment. This method will only be triggered once the user has + * installed Google Play services and returned to the app. + */ + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; - if (locArray.length > 2) { - urlBuilder.append("&waypoints="); - for (int i = 1; i < locArray.length - 1; i++) { - urlBuilder.append(locArray[i]); - if (i < locArray.length - 2) { - urlBuilder.append("|"); - } - } - } - } - } + /// 地図の倍率を指定 - webView.loadUrl(urlBuilder.toString()); + // ↓ここに地点の処理を書いておく↓ + // Add a marker in Sydney and move the camera + loc = new LatLng(35.09050879999539, 136.87845379325216); + mMap.addMarker(new MarkerOptions().position(loc).title("名古屋港水族館")); + /// 表示位置を地図に指定 + mMap.moveCamera(CameraUpdateFactory.newLatLng(loc)); + + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 17)); + + LatLng startLatLng = new LatLng(35.09050879999539, 136.87845379325216); + LatLng secandLatLng = new LatLng(35.09284820618655, 136.88165119390393); + LatLng thirdLatLng = new LatLng(35.09364708442631, 136.88171563326418); + + + Marker startMaker = mMap.addMarker(new MarkerOptions() + .position(startLatLng) + .title("名古屋港水族館") + ); + + Marker secondMaker = mMap.addMarker(new MarkerOptions() + .position(secandLatLng) + .title("2番目") + ); + + Marker thirdMaker = mMap.addMarker(new MarkerOptions() + .position(thirdLatLng) + .title("3番目") + ); + + drowRoute(startLatLng,secandLatLng,thirdLatLng); + } + + private void drowRoute(LatLng startLatLng,LatLng secondLatLung,LatLng thirdLatLng){ + GeoApiContext context = new GeoApiContext.Builder() + .apiKey("AIzaSyBQ1Ak-I2NL5TP4K59ZI0VgzKk6HNZuusw") + .build(); } @Override public void onClick(View view) { - if (view == backMain) { - Intent backMain = new Intent(Maps.this, MainActivity.class); + if(view == backMain){ + Intent backMain = new Intent(Maps.this,MainActivity.class); startActivity(backMain); } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/example/oplogy/SetUpActivity.java b/app/src/main/java/com/example/oplogy/SetUpActivity.java index 1f769c6..d533095 100644 --- a/app/src/main/java/com/example/oplogy/SetUpActivity.java +++ b/app/src/main/java/com/example/oplogy/SetUpActivity.java @@ -2,14 +2,17 @@ package com.example.oplogy; import static android.content.ContentValues.TAG; + import android.annotation.SuppressLint; +import android.app.DatePickerDialog; import android.app.TimePickerDialog; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Paint; -import android.media.Image; import android.os.Bundle; import android.util.Log; import android.widget.Button; +import android.widget.DatePicker; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.TextView; @@ -26,10 +29,13 @@ import java.util.concurrent.Executors; public class SetUpActivity extends FragmentActivity - implements TimePickerDialog.OnTimeSetListener { + implements TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener { String teacherName; String startPoint; + String firstDay; + String secondDay; + String thirdDay; String startTime; String endTime; String intervalTime; @@ -43,17 +49,22 @@ public class SetUpActivity extends FragmentActivity private TextView setStartBreakTime; private TextView setEndBreakTime; private TextView setTotalStudent; + private int isDateSelected; private int isStartTimeSelected; + String stringYear; + String stringMonth; + String stringDayOfMonth; + + String stringHourOfDay; String stringMinute; - - - - - Button startTimeSetButton; - Button endTimeSetButton; + Button setFirstDay; + Button setSecondDay; + Button setThirdDay; + Button setStartTimeButton; + Button setEndTimeButton; @@ -68,10 +79,14 @@ public class SetUpActivity extends FragmentActivity setTeacherName = findViewById(R.id.teacherName); //先生の名前 setStartPoint = findViewById(R.id.startPoint); //開始地点 - setStartTime = findViewById(R.id.startTime); //開始時刻 - setStartTime.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG); //下線を引く - setEndTime = findViewById(R.id.endTime); //終了時刻 - setEndTime.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG); + setFirstDay = findViewById(R.id.setFirstDayButton); //1日目の日付 + setSecondDay = findViewById(R.id.setSecondDayButton); //2日目の日付 + setThirdDay = findViewById(R.id.setThirdDayButton); //3日目の日付 + + setStartTimeButton = findViewById(R.id.startTimeSetButton); //開始時刻を設定するボタン + setStartTime = findViewById(R.id.startTime); //開始時刻を出力するTextView + setEndTimeButton = findViewById(R.id.endTimeSetButton); //終了時刻を設定するボタン + setEndTime = findViewById(R.id.endTime); //終了時刻を出力するTextView RadioButton setTenMinute = findViewById(R.id.tenMinute); //訪問間隔(10分) RadioButton setFifteenMinute = findViewById(R.id.fifteenMinute); //訪問間隔(15分) @@ -84,9 +99,6 @@ public class SetUpActivity extends FragmentActivity setTotalStudent = findViewById(R.id.totalStudent); //クラスの人数 - startTimeSetButton = findViewById(R.id.startTimeSetButton); //開始時刻を設定するためのボタン - endTimeSetButton = findViewById(R.id.endTimeSetButton); //終了時刻を設定するためのボタン - ImageView toMain = findViewById(R.id.toMain); Button setUp = findViewById(R.id.setUpButton); //画面下の設定ボタン Button reset = findViewById(R.id.resetButton); @@ -95,7 +107,6 @@ public class SetUpActivity extends FragmentActivity Intent intent = new Intent(SetUpActivity.this,MainActivity.class); //main画面へ戻る処理 startActivity(intent); }); - //TODO:.SetUpの際に、classIdを挿入すること setUp.setOnClickListener(view -> { @@ -103,6 +114,9 @@ public class SetUpActivity extends FragmentActivity Log.d(TAG, "Teacher Name: " + teacherName); startPoint = setStartPoint.getText().toString(); Log.d(TAG, "Start Point: " + startPoint); + Log.d(TAG, "First Day:" + firstDay); + Log.d(TAG, "Second Day:" + secondDay); + Log.d(TAG, "Third Day:" + thirdDay); Log.d(TAG, "Start Time" + startTime); Log.d(TAG, "End Time" + endTime); if (setTenMinute.isChecked()){ //ラジオボタンの状態を取得 @@ -157,17 +171,42 @@ public class SetUpActivity extends FragmentActivity setUpTableDao.insertAll(setUpTable); runOnUiThread(() -> Toast.makeText(SetUpActivity.this, "登録しました", Toast.LENGTH_SHORT).show()); } + //家庭訪問日を保存する共有プリファレンス + SharedPreferences sharedPreferences=getSharedPreferences("visitingDate",MODE_PRIVATE); + SharedPreferences.Editor editor= sharedPreferences.edit(); + + editor.putString("day1",firstDay); + editor.putString("day2",secondDay); + editor.putString("day3",thirdDay); + + editor.apply(); }); }); - startTimeSetButton.setOnClickListener(v -> { - isStartTimeSelected = 1; //ボタンの判別 - showTimePickerDialog(); //TimePeckerの表示 + + setFirstDay.setOnClickListener(v ->{ + isDateSelected = 1; + showDatePickerDialog(); //DatePickerの表示 }); - endTimeSetButton.setOnClickListener(v -> { + setSecondDay.setOnClickListener(v ->{ + isDateSelected = 2; + showDatePickerDialog(); + }); + + setThirdDay.setOnClickListener(v ->{ + isDateSelected = 3; + showDatePickerDialog(); + }); + + setStartTimeButton.setOnClickListener(v -> { + isStartTimeSelected = 1; //ボタンの判別 + showTimePickerDialog(); //TimePickerの表示 + }); + + setEndTimeButton.setOnClickListener(v -> { isStartTimeSelected = 2; showTimePickerDialog(); }); @@ -187,8 +226,6 @@ public class SetUpActivity extends FragmentActivity reset.setOnClickListener(v -> { //テキストとラジオボタンの選択を消去 setTeacherName.setText(""); setStartPoint.setText(""); - setStartTime.setText(""); - setEndTime.setText(""); setTenMinute.setChecked(false); setFifteenMinute.setChecked(false); setThirtyMinute.setChecked(false); @@ -205,22 +242,51 @@ public class SetUpActivity extends FragmentActivity }); } + @Override + public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) { //Dateを成形する + // DatePickerDialogで選択された日付を処理する + String str = String.format(Locale.JAPAN, "%02d/%02d", month + 1, dayOfMonth); // TextViewに表示する日付の形式を設定 + + if (isDateSelected == 1) { + stringYear = String.valueOf(year); //年 + stringMonth = String.format(Locale.JAPAN, "%02d", month + 1); //月 + stringDayOfMonth = String.format(Locale.JAPAN, "%02d", dayOfMonth); //日 + firstDay = stringYear + stringMonth + stringDayOfMonth; + setFirstDay.setText(str); + } else if (isDateSelected == 2) { + stringYear = String.valueOf(year); + stringMonth = String.format(Locale.JAPAN, "%02d", month + 1); + stringDayOfMonth = String.format(Locale.JAPAN, "%02d", dayOfMonth); + secondDay = stringYear + stringMonth + stringDayOfMonth; + setSecondDay.setText(str); + + + } else if (isDateSelected == 3) { + stringYear = String.valueOf(year); + stringMonth = String.format(Locale.JAPAN, "%02d", month + 1); + stringDayOfMonth = String.format(Locale.JAPAN, "%02d", dayOfMonth); + thirdDay = stringYear + stringMonth + stringDayOfMonth; + setThirdDay.setText(str); + + } + } + @SuppressLint({"DefaultLocale", "SetTextI18n"}) @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { - String str = String.format(Locale.US, "%02d:%02d", hourOfDay, minute); // Textviewに保存する形式を設定 + String str = String.format(Locale.JAPAN, "%02d:%02d", hourOfDay, minute); // Textviewに保存する形式を設定 - if (isStartTimeSelected == 1) { //押した場所を判定して、押したほうにだけ挿入する - stringHourOfDay = String.format("%02d", hourOfDay); //時を取得 - stringMinute = String.format("%02d", minute); //分を取得 - startTime = stringHourOfDay + stringMinute; //時と分を結合し四桁の文字列に - setStartTime.setText(" " + str + " "); //画面に出力 + if (isStartTimeSelected == 1) { + stringHourOfDay = String.format("%02d", hourOfDay); + stringMinute = String.format("%02d", minute); + startTime = stringHourOfDay + stringMinute; + setStartTime.setText(str); } else if (isStartTimeSelected == 2) { stringHourOfDay = String.format("%02d", hourOfDay); stringMinute = String.format("%02d", minute); endTime = stringHourOfDay + stringMinute; - setEndTime.setText(" " + str + " "); + setEndTime.setText(str); } else if (isStartTimeSelected == 3) { stringHourOfDay = String.format("%02d", hourOfDay); @@ -236,9 +302,14 @@ public class SetUpActivity extends FragmentActivity } } + private void showDatePickerDialog() { + DialogFragment newFragment = new DatePick(); + newFragment.show(getSupportFragmentManager(), "datePicker"); + } private void showTimePickerDialog() { // Dialogを表示する DialogFragment newFragment = new TimePick(); newFragment.show(getSupportFragmentManager(), "timePicker"); } + } \ No newline at end of file diff --git a/app/src/main/res/drawable/all_ok.png b/app/src/main/res/drawable/all_ok.png deleted file mode 100644 index 46e7ed6..0000000 Binary files a/app/src/main/res/drawable/all_ok.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_set_up.xml b/app/src/main/res/layout/activity_set_up.xml index ef20b8a..84bc0c8 100644 --- a/app/src/main/res/layout/activity_set_up.xml +++ b/app/src/main/res/layout/activity_set_up.xml @@ -21,17 +21,16 @@ @@ -82,6 +81,59 @@ + + + + + + + + + + + + + + + +