Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions app/src/main/java/ru/astar/bluetoothcontrol/BaseFragment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ru.astar.bluetoothcontrol;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewbinding.ViewBinding;

abstract class BaseFragment<VB extends ViewBinding> extends Fragment {

protected VB binding;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = initViewBinding(inflater, container);
return binding.getRoot();
}

@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}

abstract VB initViewBinding(LayoutInflater inflater, ViewGroup container);
}
20 changes: 20 additions & 0 deletions app/src/main/java/ru/astar/bluetoothcontrol/BluetoothDevice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ru.astar.bluetoothcontrol;

public class BluetoothDevice {

private final String name;
private final String address;

public BluetoothDevice(String name, String address) {
this.name = name;
this.address = address;
}

public String getName() {
return name;
}

public String getAddress() {
return address;
}
}

This file was deleted.

25 changes: 25 additions & 0 deletions app/src/main/java/ru/astar/bluetoothcontrol/ControlFragment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ru.astar.bluetoothcontrol;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import ru.astar.bluetoothcontrol.databinding.FragmentControlBinding;

public class ControlFragment extends BaseFragment<FragmentControlBinding> {

private static final String KEY_DEVICE_ADDRESS = "key_device_address";

@Override
FragmentControlBinding initViewBinding(LayoutInflater inflater, ViewGroup container) {
return FragmentControlBinding.inflate(inflater, container, false);
}

public static ControlFragment newInstance(String address) {
Bundle args = new Bundle();
args.putString(KEY_DEVICE_ADDRESS, address);
ControlFragment fragment = new ControlFragment();
fragment.setArguments(args);
return fragment;
}
}
34 changes: 0 additions & 34 deletions app/src/main/java/ru/astar/bluetoothcontrol/ControlFragment.kt

This file was deleted.

71 changes: 71 additions & 0 deletions app/src/main/java/ru/astar/bluetoothcontrol/DevicesAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package ru.astar.bluetoothcontrol;

import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

import ru.astar.bluetoothcontrol.databinding.ItemDeviceBinding;

public class DevicesAdapter extends RecyclerView.Adapter<DevicesAdapter.DevicesViewHolder> {

private final List<BluetoothDevice> items = new ArrayList<>();
private Callback callback = null;

@SuppressLint("NotifyDataSetChanged")
public void update(List<BluetoothDevice> items) {
this.items.clear();
this.items.addAll(items);
notifyDataSetChanged();
}

public void setCallback(Callback callback) {
this.callback = callback;
}

@NonNull
@Override
public DevicesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ItemDeviceBinding binding = ItemDeviceBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false
);
return new DevicesViewHolder(binding);
}

@Override
public void onBindViewHolder(@NonNull DevicesViewHolder holder, int position) {
holder.bind(items.get(position));
}

@Override
public int getItemCount() {
return items.size();
}

class DevicesViewHolder extends RecyclerView.ViewHolder {

private final ItemDeviceBinding binding;

public DevicesViewHolder(@NonNull ItemDeviceBinding binding) {
super(binding.getRoot());
this.binding = binding;
}

public void bind(BluetoothDevice item) {
itemView.setOnClickListener(view -> callback.onItemClick(item));
binding.textName.setText(item.getName());
binding.textAddress.setText(item.getAddress());
}
}

public interface Callback {
void onItemClick(BluetoothDevice device);
}
}
53 changes: 0 additions & 53 deletions app/src/main/java/ru/astar/bluetoothcontrol/DevicesAdapter.kt

This file was deleted.

68 changes: 68 additions & 0 deletions app/src/main/java/ru/astar/bluetoothcontrol/DevicesFragment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package ru.astar.bluetoothcontrol;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

import ru.astar.bluetoothcontrol.databinding.FragmentDevicesBinding;

public class DevicesFragment extends BaseFragment<FragmentDevicesBinding> implements DevicesAdapter.Callback {

private final DevicesAdapter devicesAdapter = new DevicesAdapter();

@Override
FragmentDevicesBinding initViewBinding(LayoutInflater inflater, ViewGroup container) {
return FragmentDevicesBinding.inflate(inflater, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

setupRecyclerView();
}

private void setupRecyclerView() {
binding.devicesRecycler.setLayoutManager(new LinearLayoutManager(requireContext()));
binding.devicesRecycler.setAdapter(devicesAdapter);
binding.devicesRecycler.addItemDecoration(new DividerItemDecoration(requireContext(), RecyclerView.VERTICAL));

devicesAdapter.setCallback(this);

List<BluetoothDevice> items = new ArrayList<>();
items.add(new BluetoothDevice("Device 1", "00:00:00:00:00:01"));
items.add(new BluetoothDevice("Device 2", "00:00:00:00:00:02"));
items.add(new BluetoothDevice("Device 3", "00:00:00:00:00:03"));
items.add(new BluetoothDevice("Device 4", "00:00:00:00:00:04"));
items.add(new BluetoothDevice("Device 5", "00:00:00:00:00:05"));
devicesAdapter.update(items);
}

@Override
public void onItemClick(BluetoothDevice device) {
navigateToControlScreen(device.getAddress());
}

private void navigateToControlScreen(String address) {
getParentFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.containerFragment, ControlFragment.newInstance(address))
.commit();
}

public static DevicesFragment newInstance() {
return new DevicesFragment();
}
}
66 changes: 0 additions & 66 deletions app/src/main/java/ru/astar/bluetoothcontrol/DevicesFragment.kt

This file was deleted.

Loading