diff --git a/app/build.gradle b/app/build.gradle
index eead6f3cad0175698c24d8709da70a46808f9b38..171fb68c3d507cfc6e2893877be2b80a4aa10dce 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -31,4 +31,6 @@ dependencies {
     annotationProcessor "android.arch.persistence.room:compiler:$room_version"
     implementation 'com.android.support:recyclerview-v7:28.0.0'
     api 'com.github.kenglxn.QRGen:android:2.5.0'
+    implementation 'com.google.android.gms:play-services-vision:11.8.0'
+    implementation 'com.google.code.gson:gson:2.8.5'
 }
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 829a57bfe0ae62cebcbd6ad1150c6b95b932e43a..bddd27cc5001aecc6c75a6317636e007cf451fc5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -40,9 +40,7 @@
             android:name="com.google.android.gms.vision.DEPENDENCIES"
             android:value="barcode" />
 
-        <activity android:name=".qr.PictureBarcodeActivity" />
         <activity android:name=".qr.ScannedBarcodeActivity" />
-        <activity android:name=".qr.QRReaderActivity" />
         <activity android:name=".AllEventActivity"></activity>
     </application>
 
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/AllEventActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/AllEventActivity.java
index b15c44145d4ea4628c33df683ec55d4d66705425..666ba48a62c54ee3f8256955da570b86de87dbb7 100644
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/AllEventActivity.java
+++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/AllEventActivity.java
@@ -1,8 +1,6 @@
 package com.ireallydontcare.viet.posseidon;
 
-import android.content.Intent;
 import android.os.AsyncTask;
-import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -10,7 +8,6 @@ import android.view.Menu;
 import android.view.MenuItem;
 
 import com.ireallydontcare.viet.posseidon.model.Event;
-import com.ireallydontcare.viet.posseidon.qr.QRActivity;
 
 import java.util.List;
 
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/MainActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/MainActivity.java
index 5aa3ea861341b3f4994d3da7ca2c6768a7ac5dfa..8a0a5d162aae8647fa471ed5eee938f9d69382d4 100644
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/MainActivity.java
+++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/MainActivity.java
@@ -25,7 +25,6 @@ import com.ireallydontcare.viet.posseidon.model.Event;
 import com.ireallydontcare.viet.posseidon.model.Subject;
 import com.ireallydontcare.viet.posseidon.qr.ScannedBarcodeActivity;
 
-import java.util.ArrayList;
 import java.util.List;
 
 public class MainActivity extends AppCompatActivity
@@ -158,24 +157,6 @@ public class MainActivity extends AppCompatActivity
         }
     }
 
-    public void importQRJsonDataasd(){
-        Subject newSubject;
-        subjectJsonObject jsonObject;
-        try{
-            String toParse = getIntent().getExtras().getString(ScannedBarcodeActivity.QR_DATA);
-            if(!toParse.isEmpty()) {
-                Gson gson = new GsonBuilder().create();
-                jsonObject = gson.fromJson(toParse,subjectJsonObject.class);
-                newSubject = jsonObject.getSubject();
-                database.SubjectDao().insert(newSubject);
-                Long id = subjectAdapter.getall().get(subjectAdapter.getall().size()-1).id;
-                importEvents(jsonObject.events, id);
-
-            }
-
-        }catch (Exception e){
-        }
-    }
     private void importQRJsonData(){
         new AsyncTask<Void, Void, Subject>() {
 
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java
index 1aa777b03d166d823e3308be064bc22faad849fa..c272d93e65746833ec766cc4aac861870e80b87d 100644
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java
+++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java
@@ -17,7 +17,6 @@ import android.widget.TextView;
 import com.google.gson.Gson;
 import com.ireallydontcare.viet.posseidon.adapter.EventAdapter;
 import com.ireallydontcare.viet.posseidon.data.EventDatabase;
-import com.ireallydontcare.viet.posseidon.data.SubjectDatabase;
 import com.ireallydontcare.viet.posseidon.fragments.NewDialogEventFragment;
 import com.ireallydontcare.viet.posseidon.json.eventJsonObject;
 import com.ireallydontcare.viet.posseidon.json.subjectJsonObject;
@@ -106,17 +105,18 @@ public class SubjectActivity extends AppCompatActivity
 
     @Override
     public void onEventItemCreated(final Event eventitem) {
-        new AsyncTask<Void, Void, Event>() {
+        new AsyncTask<Void, Void, List<Event>>() {
 
             @Override
-            protected Event doInBackground(Void... voids) {
+            protected List<Event> doInBackground(Void... voids) {
                 eventDatabase.EventDao().insert(eventitem);
-                return eventitem;
+                List<Event> events = eventDatabase.EventDao().getAllBySubject(subjectId);
+                return events;
             }
 
             @Override
-            protected void onPostExecute(Event event) {
-                eventAdapter.addItem(event);
+            protected void onPostExecute(List<Event> events) {
+                eventAdapter.update(events);
             }
         }.execute();
     };
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogEventFragment.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogEventFragment.java
index 76c09d56a85d772952f700e84ee0f0c4ccb90320..0d3026d0bde464cfb36f1ddd900190732769e0d7 100644
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogEventFragment.java
+++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogEventFragment.java
@@ -9,10 +9,8 @@ import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.DialogFragment;
 
-import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
 import android.support.v7.app.AlertDialog;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Button;
@@ -23,7 +21,6 @@ import android.widget.TimePicker;
 import com.ireallydontcare.viet.posseidon.R;
 import com.ireallydontcare.viet.posseidon.SubjectActivity;
 import com.ireallydontcare.viet.posseidon.model.Event;
-import com.ireallydontcare.viet.posseidon.model.Subject;
 
 
 import java.text.DateFormat;
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogSubjectFragment.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogSubjectFragment.java
index 89a3f517f02f29cdddf491b81299187fb079d394..ca03ae3fe4f07a7628836442cd10bae2994d2ddd 100644
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogSubjectFragment.java
+++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/fragments/NewDialogSubjectFragment.java
@@ -74,7 +74,11 @@ public class NewDialogSubjectFragment extends DialogFragment {
         subject.name = nameEditText.getText().toString();
         subject.code = codeEditText.getText().toString();
         subject.description = descriptionEditText.getText().toString();
-        subject.credit = Integer.parseInt(creditEditText.getText().toString());
+        if(creditEditText.getText().toString().equals("")){
+            subject.credit = 0;
+        }else {
+            subject.credit = Integer.parseInt(creditEditText.getText().toString());
+        }
         return  subject;
     }
 
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/PictureBarcodeActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/PictureBarcodeActivity.java
deleted file mode 100644
index ae74870a7d61b41b1026511a02bdec280a868b6a..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/PictureBarcodeActivity.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package com.ireallydontcare.viet.posseidon.qr;
-
-
-import android.Manifest;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.BuildConfig;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.FileProvider;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.View;
-import android.widget.Button;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.google.android.gms.vision.Frame;
-import com.google.android.gms.vision.barcode.Barcode;
-import com.google.android.gms.vision.barcode.BarcodeDetector;
-import com.ireallydontcare.viet.posseidon.R;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-public class PictureBarcodeActivity extends AppCompatActivity implements View.OnClickListener {
-
-    Button btnOpenCamera;
-    TextView txtResultBody;
-
-    private BarcodeDetector detector;
-    private Uri imageUri;
-    private static final int REQUEST_CAMERA_PERMISSION = 200;
-    private static final int CAMERA_REQUEST = 101;
-    private static final String TAG = "API123";
-    private static final String SAVED_INSTANCE_URI = "uri";
-    private static final String SAVED_INSTANCE_RESULT = "result";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_picture_barcode);
-
-        initViews();
-
-        if (savedInstanceState != null) {
-            if (imageUri != null) {
-                imageUri = Uri.parse(savedInstanceState.getString(SAVED_INSTANCE_URI));
-                txtResultBody.setText(savedInstanceState.getString(SAVED_INSTANCE_RESULT));
-            }
-        }
-
-        detector = new BarcodeDetector.Builder(getApplicationContext())
-                .setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE)
-                .build();
-
-        if (!detector.isOperational()) {
-            txtResultBody.setText("Detector initialisation failed");
-            return;
-        }
-    }
-
-    private void initViews() {
-        txtResultBody = findViewById(R.id.txtResultsBody);
-        btnOpenCamera = findViewById(R.id.btnTakePicture);
-        txtResultBody = findViewById(R.id.txtResultsBody);
-        btnOpenCamera.setOnClickListener(this);
-    }
-
-    @Override
-    public void onClick(View v) {
-
-        switch (v.getId()) {
-            case R.id.btnTakePicture:
-                ActivityCompat.requestPermissions(PictureBarcodeActivity.this, new
-                        String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
-                break;
-        }
-
-    }
-
-    @Override
-    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
-        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-        switch (requestCode) {
-            case REQUEST_CAMERA_PERMISSION:
-                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
-                    takeBarcodePicture();
-                } else {
-                    Toast.makeText(getApplicationContext(), "Permission Denied!", Toast.LENGTH_SHORT).show();
-                }
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
-            launchMediaScanIntent();
-            try {
-
-
-                Bitmap bitmap = decodeBitmapUri(this, imageUri);
-                if (detector.isOperational() && bitmap != null) {
-                    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
-                    SparseArray<Barcode> barcodes = detector.detect(frame);
-                    for (int index = 0; index < barcodes.size(); index++) {
-                        Barcode code = barcodes.valueAt(index);
-                        txtResultBody.setText(txtResultBody.getText() + "\n" + code.displayValue + "\n");
-
-                        int type = barcodes.valueAt(index).valueFormat;
-                        switch (type) {
-                            case Barcode.CONTACT_INFO:
-                                Log.i(TAG, code.contactInfo.title);
-                                break;
-                            case Barcode.EMAIL:
-                                Log.i(TAG, code.displayValue);
-                                break;
-                            case Barcode.ISBN:
-                                Log.i(TAG, code.rawValue);
-                                break;
-                            case Barcode.PHONE:
-                                Log.i(TAG, code.phone.number);
-                                break;
-                            case Barcode.PRODUCT:
-                                Log.i(TAG, code.rawValue);
-                                break;
-                            case Barcode.SMS:
-                                Log.i(TAG, code.sms.message);
-                                break;
-                            case Barcode.TEXT:
-                                Log.i(TAG, code.displayValue);
-                                break;
-                            case Barcode.URL:
-                                Log.i(TAG, "url: " + code.displayValue);
-                                break;
-                            case Barcode.WIFI:
-                                Log.i(TAG, code.wifi.ssid);
-                                break;
-                            case Barcode.GEO:
-                                Log.i(TAG, code.geoPoint.lat + ":" + code.geoPoint.lng);
-                                break;
-                            case Barcode.CALENDAR_EVENT:
-                                Log.i(TAG, code.calendarEvent.description);
-                                break;
-                            case Barcode.DRIVER_LICENSE:
-                                Log.i(TAG, code.driverLicense.licenseNumber);
-                                break;
-                            default:
-                                Log.i(TAG, code.rawValue);
-                                break;
-                        }
-                    }
-                    if (barcodes.size() == 0) {
-                        txtResultBody.setText("No barcode could be detected. Please try again.");
-                    }
-                } else {
-                    txtResultBody.setText("Detector initialisation failed");
-                }
-            } catch (Exception e) {
-                Toast.makeText(getApplicationContext(), "Failed to load Image", Toast.LENGTH_SHORT)
-                        .show();
-                Log.e(TAG, e.toString());
-            }
-        }
-    }
-
-    private void takeBarcodePicture() {
-        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
-        File photo = new File(Environment.getExternalStorageDirectory(), "pic.jpg");
-        imageUri = FileProvider.getUriForFile(PictureBarcodeActivity.this,
-                BuildConfig.APPLICATION_ID + ".provider", photo);
-        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
-        startActivityForResult(intent, CAMERA_REQUEST);
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        if (imageUri != null) {
-            outState.putString(SAVED_INSTANCE_URI, imageUri.toString());
-            outState.putString(SAVED_INSTANCE_RESULT, txtResultBody.getText().toString());
-        }
-        super.onSaveInstanceState(outState);
-    }
-
-    private void launchMediaScanIntent() {
-        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
-        mediaScanIntent.setData(imageUri);
-        this.sendBroadcast(mediaScanIntent);
-    }
-
-    private Bitmap decodeBitmapUri(Context ctx, Uri uri) throws FileNotFoundException {
-        int targetW = 600;
-        int targetH = 600;
-        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
-        bmOptions.inJustDecodeBounds = true;
-        BitmapFactory.decodeStream(ctx.getContentResolver().openInputStream(uri), null, bmOptions);
-        int photoW = bmOptions.outWidth;
-        int photoH = bmOptions.outHeight;
-
-        int scaleFactor = Math.min(photoW / targetW, photoH / targetH);
-        bmOptions.inJustDecodeBounds = false;
-        bmOptions.inSampleSize = scaleFactor;
-
-        return BitmapFactory.decodeStream(ctx.getContentResolver()
-                .openInputStream(uri), null, bmOptions);
-    }
-}
-
diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/QRReaderActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/QRReaderActivity.java
deleted file mode 100644
index f9965cdb76066ca76257c899f1ab7d70e53e0e3a..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/ireallydontcare/viet/posseidon/qr/QRReaderActivity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.ireallydontcare.viet.posseidon.qr;
-
-
-import android.content.Intent;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-
-import com.ireallydontcare.viet.posseidon.R;
-
-public class QRReaderActivity extends AppCompatActivity implements View.OnClickListener {
-
-    Button btnTakePicture, btnScanBarcode;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_qrreader);
-        initViews();
-    }
-
-    private void initViews() {
-        btnTakePicture = findViewById(R.id.btnTakePicture);
-        btnScanBarcode = findViewById(R.id.btnScanBarcode);
-        btnTakePicture.setOnClickListener(this);
-        btnScanBarcode.setOnClickListener(this);
-    }
-
-    @Override
-    public void onClick(View v) {
-
-        switch (v.getId()) {
-            case R.id.btnTakePicture:
-                startActivity(new Intent(QRReaderActivity.this, PictureBarcodeActivity.class));
-                break;
-            case R.id.btnScanBarcode:
-                startActivity(new Intent(QRReaderActivity.this, ScannedBarcodeActivity.class));
-                break;
-        }
-
-    }
-}
diff --git a/app/src/main/res/layout/activity_picture_barcode.xml b/app/src/main/res/layout/activity_picture_barcode.xml
deleted file mode 100644
index 1f8e43e1f57836e6fa3395e3476d4ecc4b592f14..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/activity_picture_barcode.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <TextView
-        android:id="@+id/txtResultsHeader"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerHorizontal="true"
-        android:text="Results"
-        android:textSize="18sp"
-        android:textStyle="bold" />
-
-    <TextView
-        android:id="@+id/txtResultsBody"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/txtResultsHeader"
-        android:layout_centerHorizontal="true"
-        android:gravity="center" />
-
-    <Button
-        android:id="@+id/btnOpenCamera"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true"
-        android:text="camera" />
-</RelativeLayout>
diff --git a/app/src/main/res/layout/activity_qrreader.xml b/app/src/main/res/layout/activity_qrreader.xml
deleted file mode 100644
index f3db170ba3e3a46aea652c482f3823ff688c8d5d..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/activity_qrreader.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <Button
-        android:id="@+id/btnTakePicture"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerHorizontal="true"
-        android:layout_centerVertical="true"
-        android:text="from picture" />
-
-    <Button
-        android:id="@+id/btnScanBarcode"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/btnTakePicture"
-        android:layout_centerHorizontal="true"
-        android:text="scan" />
-</RelativeLayout>
-