/*
* Copyright 2017 rootkiwi
*
* AN2Linux-client is licensed under GNU General Public License 3.
*
* See LICENSE for more details.
*/
package kiwi.root.an2linuxclient.views;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import kiwi.root.an2linuxclient.R;
import kiwi.root.an2linuxclient.crypto.TlsHelper;
import kiwi.root.an2linuxclient.data.BluetoothServer;
import kiwi.root.an2linuxclient.data.ServerDatabaseHandler;
public class BluetoothDialogNew extends BluetoothDialog {
private Long spinnerSelectedCertificateId;
private String btNameNewServer;
private String btMacNewServer;
public static BluetoothDialogNew newInstance(String btNameNewServer, String btMacNewServer) {
BluetoothDialogNew dialog = new BluetoothDialogNew();
Bundle args = new Bundle();
args.putString("btNameNewServer", btNameNewServer);
args.putString("btMacNewServer", btMacNewServer);
dialog.setArguments(args);
return dialog;
}
@Override
void initViews(View v) {
super.initViews(v);
super.initViewsDialogNew(v);
btNameEditText.setText(btNameNewServer);
btMacTextView.setText(btMacNewServer);
saveServerBtn.setOnClickListener(new SaveServerOnClickListener());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btNameNewServer = getArguments().getString("btNameNewServer");
btMacNewServer = getArguments().getString("btMacNewServer");
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerSelectedCertificateId = onItemSelectedNew(parent.getItemAtPosition(position));
}
@Override
void saveBluetoothServerToDatabase(boolean newCertificate){
ServerDatabaseHandler dbHandler = ServerDatabaseHandler.getInstance(getActivity());
long rowId;
String btName = btNameEditText.getText().toString();
String btMacAddress = btMacTextView.getText().toString();
if (newCertificate){
long certificateId = dbHandler.getCertificateId(TlsHelper.certificateToBytes(serverCert));
boolean certificateAlreadyInDatabase = certificateId != -1;
if (certificateAlreadyInDatabase){
Toast.makeText(getActivity(), R.string.certificate_already_in_database, Toast.LENGTH_LONG).show();
rowId = dbHandler.addBluetoothServer(
new BluetoothServer(btMacAddress, btName),
certificateId);
} else {
rowId = dbHandler.addBluetoothServer(
new BluetoothServer(serverCert, btMacAddress, btName));
}
} else {
rowId = dbHandler.addBluetoothServer(
new BluetoothServer(btMacAddress, btName),
spinnerSelectedCertificateId);
}
serverAdapterListCallbacks.addServer(dbHandler.getBluetoothServer(rowId));
getActivity().getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getDialog().cancel();
}
private class SaveServerOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
if (spinnerSelectedCertificateId == null){
if (activePairingConnection){
connectionHandler.acceptPairing(); // let server know you have accepted pair
clientAcceptedPair = true;
if (serverAcceptedPair){
saveBluetoothServerToDatabase(true);
} else {
// server have not accepted pair yet, need to wait for that
pairingInfoTextView.setText(getString(R.string.waiting_for_server_to_accept, pairingInfoTextView.getText().toString()));
saveServerBtn.setEnabled(false);
}
} else {
Toast.makeText(getActivity(), R.string.need_to_pair_first, Toast.LENGTH_SHORT).show();
}
} else {
saveBluetoothServerToDatabase(false);
}
}
}
}