/*
* Copyright 2017 rootkiwi
*
* AN2Linux-client is licensed under GNU General Public License 3.
*
* See LICENSE for more details.
*/
package kiwi.root.an2linuxclient.fragments;
import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import kiwi.root.an2linuxclient.R;
import kiwi.root.an2linuxclient.crypto.KeyGeneratorService;
import kiwi.root.an2linuxclient.crypto.Sha256Helper;
import kiwi.root.an2linuxclient.crypto.TlsHelper;
public class ClientCertificateFragment extends Fragment {
private TextView fingerprintTextView;
private Button generateNewButton;
private GeneratorBroadcastReceiver receiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onStart() {
super.onStart();
if (KeyGeneratorService.currentlyGenerating){
registerReceiver();
} else {
setFingerprintText();
}
}
@Override
public void onStop() {
super.onStop();
if (receiver != null){
unregisterReceiver();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_client_certificate, container, false);
fingerprintTextView = (TextView) v.findViewById(R.id.fingerprintTextView);
generateNewButton = (Button) v.findViewById(R.id.generateNewButton);
generateNewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerReceiver();
KeyGeneratorService.startGenerate(getActivity());
}
});
return v;
}
private void setFingerprintText(){
byte[] cert = TlsHelper.getCertificateBytes(getActivity());
byte[] sha256 = Sha256Helper.sha256(cert);
fingerprintTextView.setText(Sha256Helper.getFourLineHexString(sha256));
}
private void registerReceiver(){
if (receiver == null){
receiver = new GeneratorBroadcastReceiver();
}
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver,
new IntentFilter(KeyGeneratorService.BROADCAST_ACTION));
generateNewButton.setEnabled(false);
fingerprintTextView.setText(R.string.generate_key_working);
}
private void unregisterReceiver(){
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver);
}
private class GeneratorBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
generateNewButton.setEnabled(true);
setFingerprintText();
unregisterReceiver();
}
}
}