package com.android.iliConnect;
import com.android.iliConnect.Exceptions.CoursePasswordException;
import com.android.iliConnect.Exceptions.JoinCourseException;
import com.android.iliConnect.Exceptions.NetworkException;
import com.android.iliConnect.dataproviders.LocalCourseProvider;
import com.android.iliConnect.message.IliOnClickListener;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.android.iliConnect.MessageBuilder;
public class QR extends Fragment implements Redrawable, IliOnClickListener {
private Object insancte = this;
// Attribute zum Speichern der Daten aus gescanntem QR
private String courseName = null;
private String courseId = null;
private String coursePassword = null;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
// We have different layouts, and in one of them this
// fragment's containing frame doesn't exist. The fragment
// may still be created from its saved state, but there is
// no reason to try to create its view hierarchy because it
// won't be displayed. Note this is not needed -- we could
// just run the code below, where we would create and return
// the view hierarchy; it would just never be used.
return null;
}
LinearLayout mLinearLayout = (LinearLayout) inflater.inflate(R.layout.qr_layout, container, false);
Button mButton = (Button) mLinearLayout.findViewById(R.id.scannow);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int REQUEST_SCAN = 0; // Request code for Intent result
String packageString = "com.android.iliConnect";
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage(packageString);
// Add any optional extras to pass
// e.g.
// intent.putExtra("SCAN_FORMATS", "EAN13");
// intent.putExtra("SCAN_FORMATS", "EAN8");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
// Launch
startActivityForResult(intent, REQUEST_SCAN);
}
});
return mLinearLayout;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode != 0) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Format: Kursname;ref_id;Passwort (falls vorhanden)
String qrString[] = contents.split(";");
int count = qrString.length;
// Falls qrString weniger als 2 Elemente hat ist er ungültig
if(count < 2) {
MessageBuilder.QR_error(MainTabView.instance);
return;
}
courseName = qrString[0];
courseId = qrString[1];
// Password evtl. nicht angegeben, dann nur 2 Elemente in qrString
if(count == 3) {
coursePassword = qrString[2];
}
// ref_id darf nur aus Zahlen bestehen
if (courseId.matches("[0-9]+") && courseName.matches("[a-zA-Z0-9 ]+")) {
MessageBuilder.course_login(MainTabView.instance, courseName, courseId, (IliOnClickListener) insancte);
} else {
MessageBuilder.QR_error(MainTabView.instance);
}
} else if (resultCode == 0) {
// Handle cancel
}
}
}
private void joinCourse(String ref_id, String crs_pw) {
LocalCourseProvider local = new LocalCourseProvider();
try {
String result = null;
result = local.joinCourse(ref_id, crs_pw);
// Falls Passwort für Anmeldung benötigt wird, Abfrage einblenden
if (result != null && result.contains("PASSWORD_NEEDED")) {
MessageBuilder.course_password(MainTabView.instance, ref_id, this);
}
} catch (JoinCourseException e) {
MessageBuilder.course_alreadysignedin(MainTabView.instance);
} catch (CoursePasswordException e) {
System.out.println(e.getMessage());
} catch (NetworkException e) {
MessageBuilder.exception_message(MainTabView.instance, e.getMessage());
}
}
public void refreshViews() {
// TODO Auto-generated method stub
}
public void onClickCoursePassword(String refID, String password) {
// Hier wird das Passwort aus der Passwortabfrage verwendet.
this.joinCourse(refID, password);
}
public void onClickLeftCourse(String refID, String courseName) {
// TODO: Kurs abmelden mit REFID
}
public void onClickJoinCourse(String refID, String courseName) {
// TODO: Anmeldung mit Join Course(refID);
this.joinCourse(refID, this.coursePassword);
}
public void onClickMessageBox() {
// TODO Auto-generated method stub
}
}