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 2b2bdc2..ae602fc 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,10 +51,16 @@ 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' - implementation 'com.journeyapps:zxing-android-embedded:4.3.0'//QR用zxingライブラリ } \ 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" > + - - + - - - + - + - + + + + + + + + + + +