package com.example.chengforapp.myapplication;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
public class Trans_page extends AppCompatActivity{
       private Button button_paired ;
       private Button button_disconnect ;
       private Button button_find ;
    private TextView show_data ;
    private ListView event_listView;
    private TextView show_count ;
    private BluetoothAdapter mBluetoothAdapter ;
    private ArrayAdapter<String> deviceName ;
    private ArrayAdapter<String> deviceID ;
    private Set<BluetoothDevice> pairedDevices ;
    private String chooseID ;
    private BluetoothDevice bleDevice ;
    private BluetoothSocket bluesoccket ; //   becareful
    private InputStream mmInputStream ;
    private OutputStream mmOutputStream ;
    Thread workerThread ;
    volatile boolean stopWorker ;
    private int readBufferPosition ;
    private byte[] readBuffer ;
    private String uid ;
    private int count ;
    private LocationManager locMgr ;
    private String bestProv ;
    @Override
 protected void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_trans_page);
         getView();
         setListener();
         deviceName = new ArrayAdaapter<String>(this.android.R.layout.simple_expandable_list_item_1);
        deviceID = new ArrayAdapter<String>(this.android.R.layout.simple_expandable_list_item_1);
        count = 0;
    }
     private void getView(){
       button_paired = (Button)findViewById(R.id.btn_paired);
       button_disconnect=(Button)findViewById(R.id.btn_disconn);
       show_data = (TextView)findViewById(R.id.txtShow);
       event_listView=(ListView)findViewById(R.id.Show_B_List);
       button_find = (Button)findViewById(R.id.btn_conn);
       show_count = (TextView)findViewById(R.id.txt_count);
     }
     private void setListener(){
           button_paired.setOnClickListener(new Button.OnClickListener(){
               @Override
               public void onClick(View v){
                    findPBT();
               }
           }) ;
           button_disconnect.setOnClickListener((v)->{
                  try{
                      closeBT();
                  }catch(IOException e){
                       e.printStackTrace();}
           });
           button_find.setOnClickListener(new Button.OnClickListener(){
               @Override
               public void onClick(View v){
                   findPBT();
               }
           });
           event_listView.setAdapter(deviceName);
           event_listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
               @Override
               public void inItemClick(AdapterView<?> parent, View view , int position, long id){
                   choseID=deviceID.getItem(position);
                   try{
                       openBT();
                   }catch (IOException e){
                       e.printStackTrace();
                   }
                   Toast.makeText(Trans_page.this,"選擇了:"+choseID, Toast.LENGTH_SHORT).show();
                   deviceName.clear();
               }
           });
     }
     private void findPBT(){
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
         if(mBluetoothAdapter != null){
             show_data.setText("No bluetooth adapter available");
         }
         if(!mBluetoothAdapter.isEnabled()){
             Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
             startActivityForResult(enableBluetooth,1);
         }
         pairedDevices=mBluetoothAdapter.getBondedDevices();
         if(pairedDevices.size()>0){
             for(BluetoothDevice device : pairedDevices){
                 Stirng str ="已配對完成的裝置有"+device.getName()+" "+device.getAddress()+"\n";
                 uid = device.getAddress();
                 bleDevice = device ;
             }
             event_listView.setAdapter(deviceName);
         }
     }
     private void openBT() throws IOException{
          UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
          if(bleDevice != null){
               bluesoccket = bleDevice.createRfcommSocketToServiceRecord(uuid);

               bluesoccket.connect();
               mmOutputStream = bluesoccket.getOutputStream();
               mmInputStream = bluesoccket.getInputStream();
               beginListenForData();
               show_data.setText("Bluetooth Opened:"+bleDevice.getName()+""+bleDevice.getAddress());
          }
     }
     private void beginListenForData(){
          final Handler handler = new Handler();
          final byte delimiter = 10 ;

          stopWorker = false ;
          readBufferPosition = 0 ;
          readBuffer = new byte[1024];
          workerThread = new Thread((Runnable)()->{
              while(!Thread.currentThread().isInterrupted()&&!stopWorker)
              {
                  try{
                       int bytesAvailable = mmInputStream.available();
                       if(bytesAvailable>0)
                       {
                            byte[] packetBytes = new byte[bytesAvailable];
                            mmInputStream.read(packetBytes);
                            for(int i = 0;i<bytesAvailable ; i++){
                                byte b = packetBytes[i];
                                if(b==delimiter){
                                    byte[] encodedBytes = new byte[readBufferPosition];
                                    System.arraycopy(readBuffer,0,encodedBytes,0,encodedBytes.length);
                                    final String data = new String(encodedBytes,"US-ASCII");
                                    readBufferPosition = 0;
                                    count++;
                                    handler.post(()->{
                                        String prevString = show_data.getText().toString();
                                        String dataText = String.format("%s\nCF=1,PM2.5=%sug/m3,收到了第%s筆資料",prevString,data,count);
                                        show_data.setText(dataText);
                                    });
                                }else
                                {
                                    readBuffer[readBufferPosition++]=b;
                                }
                            }
                       }
                  } catch (IOException ex){
                       stopWorker = true ;
                  }
              }
          });
     }
     private void closeBT() throws  IOException{
         stopWorker = true ;
         mmOutputStream.close();
         mmInputStream.close();
         bluesoccket.clsoe();
         deviceName.clear();
         show_count.setText("");
         show_data.setText("Bluetooth Closed");
     }
}
