diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..e1eea1d
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 8978d23..773fe0f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 8332260..25058ad 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,6 @@
plugins {
id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
}
android {
@@ -14,6 +15,9 @@ android {
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables {
+ useSupportLibrary true
+ }
}
buildTypes {
@@ -26,6 +30,20 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+ buildFeatures {
+ compose true
+ }
+ composeOptions {
+ kotlinCompilerExtensionVersion '1.3.2'
+ }
+ packagingOptions {
+ resources {
+ excludes += '/META-INF/{AL2.0,LGPL2.1}'
+ }
+ }
}
dependencies {
@@ -33,9 +51,20 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
+ implementation 'androidx.activity:activity-compose:1.5.1'
+ implementation platform('androidx.compose:compose-bom:2022.10.00')
+ implementation 'androidx.compose.ui:ui'
+ implementation 'androidx.compose.ui:ui-graphics'
+ implementation 'androidx.compose.ui:ui-tooling-preview'
+ implementation 'androidx.compose.material3:material3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+ androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00')
+ androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
+ debugImplementation 'androidx.compose.ui:ui-tooling'
+ debugImplementation 'androidx.compose.ui:ui-test-manifest'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 300cbda..cbdd641 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,12 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/childguard/First_Start.java b/app/src/main/java/com/example/childguard/First_Start.java
new file mode 100644
index 0000000..77e6104
--- /dev/null
+++ b/app/src/main/java/com/example/childguard/First_Start.java
@@ -0,0 +1,14 @@
+package com.example.childguard;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class First_Start extends AppCompatActivity {
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.first_start);
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/childguard/HomeFragment.java b/app/src/main/java/com/example/childguard/HomeFragment.java
index 09f6885..82a8f9c 100644
--- a/app/src/main/java/com/example/childguard/HomeFragment.java
+++ b/app/src/main/java/com/example/childguard/HomeFragment.java
@@ -7,11 +7,14 @@ import android.os.Bundle;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -66,7 +69,18 @@ public class HomeFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_home, container, false);
+ //bluetooth設定ボタンの処理
+ View view=inflater.inflate(R.layout.fragment_home,container,false);
+ MainActivity activity = (MainActivity) getActivity();
+
+ Button bt1=view.findViewById(R.id.Bluetooth_setup);
+ bt1.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ replaceFragment(new bluetooth_setupFragment());
+ }
+ });
+ return view;
}
@Override
@@ -89,5 +103,19 @@ public class HomeFragment extends Fragment {
situationTextView.setText("\n乗車状態");
situation_bg.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.frame_style_orange, null));
}
+
+ }
+ //画面遷移メソッド
+ private void replaceFragment(Fragment fragment){
+ // フラグメントマネージャーの取得
+ FragmentManager manager = getParentFragmentManager(); // アクティビティではgetSupportFragmentManager()?
+ // フラグメントトランザクションの開始
+ FragmentTransaction transaction = manager.beginTransaction();
+ // レイアウトをfragmentに置き換え(追加)
+ transaction.replace(R.id.fragmentContainerView, fragment);
+ // 置き換えのトランザクションをバックスタックに保存する
+ transaction.addToBackStack(null);
+ // フラグメントトランザクションをコミット
+ transaction.commit();
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/childguard/MainActivity.java b/app/src/main/java/com/example/childguard/MainActivity.java
index 0d0697f..4cd26ee 100644
--- a/app/src/main/java/com/example/childguard/MainActivity.java
+++ b/app/src/main/java/com/example/childguard/MainActivity.java
@@ -1,5 +1,6 @@
package com.example.childguard;
+import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationCompat;
@@ -7,6 +8,8 @@ import androidx.core.app.NotificationManagerCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
@@ -14,12 +17,20 @@ import android.os.Vibrator;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+import java.util.Random;
+import java.util.UUID;
+
public class MainActivity extends AppCompatActivity {
+
+ BluetoothManager bluetoothManager;
+ BluetoothAdapter bluetoothAdapter;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+
//通知のやつ↓
int importance = NotificationManager.IMPORTANCE_DEFAULT;
@@ -76,5 +87,12 @@ public class MainActivity extends AppCompatActivity {
return;
}
notificationManager.notify(R.string.app_name, builder.build());
+
+
+ }
+ //Bluetooth_setupの戻るボタン
+ public void setupBackButton(boolean enableBackButton){
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/childguard/RecyclerAdapter.java b/app/src/main/java/com/example/childguard/RecyclerAdapter.java
new file mode 100644
index 0000000..ea0eea1
--- /dev/null
+++ b/app/src/main/java/com/example/childguard/RecyclerAdapter.java
@@ -0,0 +1,57 @@
+package com.example.childguard;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.ArrayList;
+
+public class RecyclerAdapter extends RecyclerView.Adapter {
+
+ ArrayList deviceList;
+
+ // Constructor
+ public RecyclerAdapter(ArrayList deviceList) {
+ // Init
+ Log.d("RecyclerAdapter", "Constructor called");
+ this.deviceList = deviceList;
+ }
+
+ @NonNull
+ @Override
+ public RecyclerAdapter.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+ View itemView = inflater.inflate(R.layout.recycler_row, parent, false);
+ return new ItemViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
+ holder.textView.setText(deviceList.get(position)[0]);
+ holder.textView.setOnClickListener( v -> {
+ Toast.makeText(v.getContext(), deviceList.get(position)[1], Toast.LENGTH_SHORT).show();
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return deviceList.size();
+ }
+
+ static class ItemViewHolder extends RecyclerView.ViewHolder {
+ TextView textView;
+
+ public ItemViewHolder(@NonNull View itemView) {
+ super(itemView);
+ textView = itemView.findViewById(R.id.textView1);
+ }
+ }
+
+}
+
diff --git a/app/src/main/java/com/example/childguard/bluetooth_setupFragment.java b/app/src/main/java/com/example/childguard/bluetooth_setupFragment.java
new file mode 100644
index 0000000..2507185
--- /dev/null
+++ b/app/src/main/java/com/example/childguard/bluetooth_setupFragment.java
@@ -0,0 +1,147 @@
+package com.example.childguard;
+
+import android.app.Activity;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import androidx.core.app.ActivityCompat;
+import androidx.core.app.NotificationCompat;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.DividerItemDecoration;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link bluetooth_setupFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class bluetooth_setupFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public bluetooth_setupFragment() {
+ // Required empty public constructor
+ }
+
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment bluetooth_setupFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static bluetooth_setupFragment newInstance(String param1, String param2) {
+ bluetooth_setupFragment fragment = new bluetooth_setupFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.fragment_bluetooth_setup, container, false);
+
+ // init
+ BluetoothManager bluetoothManager = requireActivity().getSystemService(BluetoothManager.class);
+ BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
+
+ if (bluetoothAdapter == null) {
+ // Device doesn't support Bluetooth
+ }
+
+
+ if (ActivityCompat.checkSelfPermission(requireActivity().getApplicationContext(), android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
+ // TODO: Consider calling
+ // ActivityCompat#requestPermissions
+ // here to request the missing permissions, and then overriding
+ // public void onRequestPermissionsResult(int requestCode, String[] permissions,
+ // int[] grantResults)
+ // to handle the case where the user grants the permission. See the documentation
+ // for ActivityCompat#requestPermissions for more details.
+ return view;
+ }
+ Set pairedDevices = bluetoothAdapter.getBondedDevices();
+
+ RecyclerView recyclerView = view.findViewById(R.id.recyclerView1);
+ //RecyclerViewのサイズを固定
+ recyclerView.setHasFixedSize(true);
+
+ //RecyclerViewに区切り線を入れる
+// RecyclerView.ItemDecoration itemDecoration =
+// new DividerItemDecoration(getContext() ,DividerItemDecoration.VERTICAL);
+// recyclerView.addItemDecoration(itemDecoration);
+
+ //レイアウトマネージャを設
+ RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
+ recyclerView.setLayoutManager(layoutManager);
+
+ //①リスト構造(String型の可変長の配列)を宣言
+ ArrayList arrayList = new ArrayList<>();
+
+ if (pairedDevices.size() > 0) {
+
+ // There are paired devices. Get the name and address of each paired device.
+ for (BluetoothDevice device : pairedDevices) {
+
+
+
+ String[] deviceInfo = new String[2];
+ deviceInfo[0] = device.getName();
+ deviceInfo[1] = device.getAddress(); // MAC address
+
+ Log.d("a", deviceInfo[0]);
+ arrayList.add(deviceInfo);
+ }
+ for (String[] s : arrayList) {
+ Log.d("b", s[0]);
+ }
+ Log.d(" ", String.valueOf(arrayList.size()));
+ RecyclerAdapter adapter = new RecyclerAdapter(arrayList);
+
+ //④RecyclerViewとAdapterの結び付け
+ recyclerView.setAdapter(adapter);
+ }
+
+ return view;
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 3151f24..5377215 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -3,6 +3,7 @@
diff --git a/app/src/main/res/layout/first_start.xml b/app/src/main/res/layout/first_start.xml
new file mode 100644
index 0000000..edbe880
--- /dev/null
+++ b/app/src/main/res/layout/first_start.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_bluetooth_setup.xml b/app/src/main/res/layout/fragment_bluetooth_setup.xml
new file mode 100644
index 0000000..84e47b3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_bluetooth_setup.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 21d6c78..504ddf1 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -1,5 +1,5 @@
-
-
-
+
+
-
+ android:orientation="vertical" >
+
-
-
+
-
-
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_qr.xml b/app/src/main/res/layout/fragment_qr.xml
index cd43e15..b66b029 100644
--- a/app/src/main/res/layout/fragment_qr.xml
+++ b/app/src/main/res/layout/fragment_qr.xml
@@ -13,4 +13,5 @@
android:layout_gravity="center"
/>
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recycler_row.xml b/app/src/main/res/layout/recycler_row.xml
new file mode 100644
index 0000000..b1e2ab3
--- /dev/null
+++ b/app/src/main/res/layout/recycler_row.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a71beb5..32a217a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,4 +2,5 @@
Child Guard
Hello blank fragment
+ First_Start
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index a100ce0..4314313 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,4 +2,5 @@
plugins {
id 'com.android.application' version '8.0.2' apply false
id 'com.android.library' version '8.0.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
}
\ No newline at end of file