/*
* 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.view.WindowManager;
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.CertificateIdAndFingerprint;
import kiwi.root.an2linuxclient.data.ServerDatabaseHandler;
public class BluetoothDialogEdit extends BluetoothDialog {
private long spinnerSelectedCertificateId;
private long serverId;
private int serverListPosition;
public static BluetoothDialogEdit newInstance(long serverId, int serverListPosition) {
BluetoothDialogEdit dialog = new BluetoothDialogEdit();
Bundle args = new Bundle();
args.putLong("serverId", serverId);
args.putInt("serverListPosition", serverListPosition);
dialog.setArguments(args);
return dialog;
}
@Override
void initViews(View v) {
super.initViews(v);
super.initViewsDialogEdit(v,
ServerDatabaseHandler.getInstance(getActivity()).getBluetoothServer(serverId),
serverListPosition);
saveServerBtn.setOnClickListener(new SaveServerOnClickListener());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
serverId = getArguments().getLong("serverId");
serverListPosition = getArguments().getInt("serverListPosition");
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerSelectedCertificateId = ((CertificateIdAndFingerprint)
parent.getItemAtPosition(position)).getId();
onItemSelectedEdit();
}
@Override
void saveBluetoothServerToDatabase(boolean newCertificate){
ServerDatabaseHandler dbHandler = ServerDatabaseHandler.getInstance(getActivity());
String btName = btNameEditText.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();
dbHandler.updateBluetoothServer(new BluetoothServer(serverId, btName), certificateId);
} else {
dbHandler.updateBluetoothServer(new BluetoothServer(serverId, serverCert, btName));
}
} else {
dbHandler.updateBluetoothServer(new BluetoothServer(serverId, btName), spinnerSelectedCertificateId);
}
serverAdapterListCallbacks.updateServer(dbHandler.getBluetoothServer(serverId), serverListPosition);
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getDialog().cancel();
}
private class SaveServerOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
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 {
saveBluetoothServerToDatabase(false);
}
}
}
}