/* Copyright (C) 2021-2024 Arjan Schrijver, Daniel Dakhno
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see . */
package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.application;
import android.content.pm.ApplicationInfo;
import org.json.JSONArray;
import org.json.JSONObject;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil_hr.FossilHRWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileLookupAndGetRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileLookupRequest.FILE_LOOKUP_ERROR;
public class ApplicationsListRequest extends FileLookupAndGetRequest{
public ApplicationsListRequest(FossilHRWatchAdapter adapter) {
super(FileHandle.APP_CODE, adapter);
}
public void handleFileData(byte[] fileData){
ArrayList applicationInfos = new ArrayList<>();
ByteBuffer buffer = ByteBuffer.wrap(fileData);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.position(12);
while(buffer.remaining() > 4){
short packetLength = buffer.getShort();
buffer.get();
int nameLength = buffer.get() - 1; // cutting off null byte
byte[] nameBuffer = new byte[nameLength];
buffer.get(nameBuffer);
String name = new String(nameBuffer);
buffer.get(); // null byte
byte handle = buffer.get();
int hash = buffer.getInt();
String version = String.format("%d.%d", buffer.get(), buffer.get());
buffer.get(); // unknown
buffer.get(); // unknown
applicationInfos.add(new ApplicationInformation(
name,
version,
hash,
handle
));
}
Collections.sort(applicationInfos);
this.handleApplicationsList(applicationInfos);
}
public void handleApplicationsList(List installedApplications){
}
public void handleFileLookupError(FILE_LOOKUP_ERROR error){
}
}