// Path: app/src/main/java/com/secuso/privacyfriendlycodescanner/qrscanner/database/AppRepository.java
// public class AppRepository {
// 
//     private static AppRepository INSTANCE = null;
// 
//     private final AppDatabase appDatabase;
// 
//     private final ExecutorService executor = Executors.newSingleThreadExecutor();
// 
//     public synchronized static AppRepository getInstance(Context context) {
//         if(INSTANCE == null) {
//             INSTANCE = new AppRepository(context);
//         }
//         return INSTANCE;
//     }
// 
//     private AppRepository(Context context) {
//         this.appDatabase = AppDatabase.getInstance(context);
//     }
// 
//     public void deleteHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().delete(entry));
//     }
// 
//     public void insertHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().insert(entry));
//     }
// 
//     public void updateHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().update(entry));
//     }
// 
//     public LiveData<List<HistoryItem>> getHistoryEntriesLiveData() {
//         return appDatabase.historyDao().getAllLiveData();
//     }
// 
//     public void deleteAllHistoryEntries() {
//         executor.execute(() -> appDatabase.historyDao().deleteAll());
//     }
// }
// 
// Path: app/src/main/java/com/secuso/privacyfriendlycodescanner/qrscanner/database/HistoryItem.java
// @Entity(tableName = "Histories")
// public class HistoryItem {
// 
//     @PrimaryKey(autoGenerate = true) private int _id;
//     private Bitmap image;
//     @NonNull
//     private String text = "";
//     private byte[] rawBytes;
//     private int numBits;
//     private ResultPoint[] resultPoints;
//     private BarcodeFormat format;
//     private long timestamp;
// 
//     public void setImage(Bitmap image) {
//         this.image = image;
//     }
// 
//     public int get_id() {
//         return _id;
//     }
// 
//     public void set_id(int _id) {
//         this._id = _id;
//     }
// 
//     @NonNull
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public byte[] getRawBytes() {
//         return rawBytes;
//     }
// 
//     public void setRawBytes(byte[] rawBytes) {
//         this.rawBytes = rawBytes;
//     }
// 
//     public int getNumBits() {
//         return numBits;
//     }
// 
//     public void setNumBits(int numBits) {
//         this.numBits = numBits;
//     }
// 
//     public ResultPoint[] getResultPoints() {
//         return resultPoints;
//     }
// 
//     public void setResultPoints(ResultPoint[] resultPoints) {
//         this.resultPoints = resultPoints;
//     }
// 
//     public BarcodeFormat getFormat() {
//         return format;
//     }
// 
//     public void setFormat(BarcodeFormat format) {
//         this.format = format;
//     }
// 
//     public void setTimestamp(long timestamp) {
//         this.timestamp = timestamp;
//     }
// 
//     public HistoryItem() {}
// 
//     @Ignore
//     protected HistoryItem(Parcel in) {
//         _id = in.readInt();
//         image = Converters.decodeImage(in.readString());
//         text = in.readString();
//         rawBytes = in.createByteArray();
//         numBits = in.readInt();
//         timestamp = in.readLong();
//         format = BarcodeFormat.values()[in.readInt()];
// 
//         resultPoints = new ResultPoint[in.readInt()];
//         for(int i = 0; i < resultPoints.length; i++) {
//             resultPoints[i] = new ResultPoint(in.readFloat(), in.readFloat());
//         }
//     }
// 
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(_id);
//         dest.writeString(Converters.encodeImage(image));
//         dest.writeString(text);
//         dest.writeByteArray(rawBytes);
//         dest.writeInt(numBits);
//         dest.writeLong(timestamp);
//         dest.writeInt(format.ordinal());
// 
//         dest.writeInt(resultPoints != null ? resultPoints.length : 0);
//         for(ResultPoint rp : resultPoints) {
//             dest.writeFloat(rp.getX());
//             dest.writeFloat(rp.getY());
//         }
//     }
// 
//     public int describeContents() {
//         return 0;
//     }
// 
// //    public static final Creator<HistoryItem> CREATOR = new Creator<HistoryItem>() {
// //        @Override
// //        public HistoryItem createFromParcel(Parcel in) {
// //            return new HistoryItem(in);
// //        }
// //
// //        @Override
// //        public HistoryItem[] newArray(int size) {
// //            return new HistoryItem[size];
// //        }
// //    };
// 
//     public Result getResult() {
//         return new Result(text, rawBytes, numBits, resultPoints,format,timestamp);
//     }
//     public Bitmap getImage() {
//         return image;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
// 
// }


import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import com.secuso.privacyfriendlycodescanner.qrscanner.database.AppRepository;
import com.secuso.privacyfriendlycodescanner.qrscanner.database.HistoryItem;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
package com.secuso.privacyfriendlycodescanner.qrscanner.ui.viewmodel;





public class HistoryViewModel extends AndroidViewModel {

    private final ExecutorService executorService = Executors.newSingleThreadExecutor();

    private final MediatorLiveData<List<HistoryItem>> historyItemsLiveData = new MediatorLiveData<>();

    public HistoryViewModel(@NonNull final Application application) {
        super(application);

        loadHistories();
    }

    public LiveData<List<HistoryItem>> getHistoryItems() {
        return historyItemsLiveData;
    }

    private void loadHistories() {
// Path: app/src/main/java/com/secuso/privacyfriendlycodescanner/qrscanner/database/AppRepository.java
// public class AppRepository {
// 
//     private static AppRepository INSTANCE = null;
// 
//     private final AppDatabase appDatabase;
// 
//     private final ExecutorService executor = Executors.newSingleThreadExecutor();
// 
//     public synchronized static AppRepository getInstance(Context context) {
//         if(INSTANCE == null) {
//             INSTANCE = new AppRepository(context);
//         }
//         return INSTANCE;
//     }
// 
//     private AppRepository(Context context) {
//         this.appDatabase = AppDatabase.getInstance(context);
//     }
// 
//     public void deleteHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().delete(entry));
//     }
// 
//     public void insertHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().insert(entry));
//     }
// 
//     public void updateHistoryEntry(HistoryItem entry) {
//         executor.execute(() -> appDatabase.historyDao().update(entry));
//     }
// 
//     public LiveData<List<HistoryItem>> getHistoryEntriesLiveData() {
//         return appDatabase.historyDao().getAllLiveData();
//     }
// 
//     public void deleteAllHistoryEntries() {
//         executor.execute(() -> appDatabase.historyDao().deleteAll());
//     }
// }
// 
// Path: app/src/main/java/com/secuso/privacyfriendlycodescanner/qrscanner/database/HistoryItem.java
// @Entity(tableName = "Histories")
// public class HistoryItem {
// 
//     @PrimaryKey(autoGenerate = true) private int _id;
//     private Bitmap image;
//     @NonNull
//     private String text = "";
//     private byte[] rawBytes;
//     private int numBits;
//     private ResultPoint[] resultPoints;
//     private BarcodeFormat format;
//     private long timestamp;
// 
//     public void setImage(Bitmap image) {
//         this.image = image;
//     }
// 
//     public int get_id() {
//         return _id;
//     }
// 
//     public void set_id(int _id) {
//         this._id = _id;
//     }
// 
//     @NonNull
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public byte[] getRawBytes() {
//         return rawBytes;
//     }
// 
//     public void setRawBytes(byte[] rawBytes) {
//         this.rawBytes = rawBytes;
//     }
// 
//     public int getNumBits() {
//         return numBits;
//     }
// 
//     public void setNumBits(int numBits) {
//         this.numBits = numBits;
//     }
// 
//     public ResultPoint[] getResultPoints() {
//         return resultPoints;
//     }
// 
//     public void setResultPoints(ResultPoint[] resultPoints) {
//         this.resultPoints = resultPoints;
//     }
// 
//     public BarcodeFormat getFormat() {
//         return format;
//     }
// 
//     public void setFormat(BarcodeFormat format) {
//         this.format = format;
//     }
// 
//     public void setTimestamp(long timestamp) {
//         this.timestamp = timestamp;
//     }
// 
//     public HistoryItem() {}
// 
//     @Ignore
//     protected HistoryItem(Parcel in) {
//         _id = in.readInt();
//         image = Converters.decodeImage(in.readString());
//         text = in.readString();
//         rawBytes = in.createByteArray();
//         numBits = in.readInt();
//         timestamp = in.readLong();
//         format = BarcodeFormat.values()[in.readInt()];
// 
//         resultPoints = new ResultPoint[in.readInt()];
//         for(int i = 0; i < resultPoints.length; i++) {
//             resultPoints[i] = new ResultPoint(in.readFloat(), in.readFloat());
//         }
//     }
// 
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(_id);
//         dest.writeString(Converters.encodeImage(image));
//         dest.writeString(text);
//         dest.writeByteArray(rawBytes);
//         dest.writeInt(numBits);
//         dest.writeLong(timestamp);
//         dest.writeInt(format.ordinal());
// 
//         dest.writeInt(resultPoints != null ? resultPoints.length : 0);
//         for(ResultPoint rp : resultPoints) {
//             dest.writeFloat(rp.getX());
//             dest.writeFloat(rp.getY());
//         }
//     }
// 
//     public int describeContents() {
//         return 0;
//     }
// 
// //    public static final Creator<HistoryItem> CREATOR = new Creator<HistoryItem>() {
// //        @Override
// //        public HistoryItem createFromParcel(Parcel in) {
// //            return new HistoryItem(in);
// //        }
// //
// //        @Override
// //        public HistoryItem[] newArray(int size) {
// //            return new HistoryItem[size];
// //        }
// //    };
// 
//     public Result getResult() {
//         return new Result(text, rawBytes, numBits, resultPoints,format,timestamp);
//     }
//     public Bitmap getImage() {
//         return image;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
// 
// }


// Path: app/src/main/java/com/secuso/privacyfriendlycodescanner/qrscanner/ui/viewmodel/HistoryViewModel.java
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import com.secuso.privacyfriendlycodescanner.qrscanner.database.AppRepository;
import com.secuso.privacyfriendlycodescanner.qrscanner.database.HistoryItem;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

package com.secuso.privacyfriendlycodescanner.qrscanner.ui.viewmodel;





public class HistoryViewModel extends AndroidViewModel {

    private final ExecutorService executorService = Executors.newSingleThreadExecutor();

    private final MediatorLiveData<List<HistoryItem>> historyItemsLiveData = new MediatorLiveData<>();

    public HistoryViewModel(@NonNull final Application application) {
        super(application);

        loadHistories();
    }

    public LiveData<List<HistoryItem>> getHistoryItems() {
        return historyItemsLiveData;
    }

    private void loadHistories() {
        LiveData<List<HistoryItem>> historyEntries = AppRepository.getInstance(getApplication()).getHistoryEntriesLiveData();