Search in sources :

Example 1 with Alarm

use of seemoo.fitbit.information.Alarm in project fitness-app by seemoo-lab.

the class DumpInteraction method readOut.

/**
 * Reads out the information from a micro- or mega dump.
 *
 * @return The information or null if it is an alarm or memory dump.
 */
private InformationList readOut() {
    InformationList result = new InformationList("");
    String temp = "";
    if (dumpType == 0 || dumpType == 1) {
        // Microdump || Megadump
        String model;
        String type;
        String id;
        int noncePos = 12;
        int serialPos = 20;
        temp = dataList.get(0).toString().substring(0, 8);
        switch(temp.substring(0, 2)) {
            case "2c":
                model = "Megadump";
                break;
            case "30":
                model = "Microdump";
                break;
            case "03":
                // Ionic format is new, generic dump, different offsets
                model = "Dump";
                noncePos = 10;
                serialPos = 18;
                break;
            default:
                model = temp.substring(0, 2);
        }
        switch(temp.substring(2, 4)) {
            case "02":
                type = "Tracker";
                break;
            case "04":
                type = "Smartwatch";
                break;
            default:
                type = temp.substring(2, 4);
        }
        temp = dataList.get(0).toString().substring(serialPos + 10, serialPos + 12);
        switch(temp.substring(0, 2)) {
            // FIXME do this via ConstantValues
            case "01":
                id = "Zip";
                break;
            case "05":
                id = "One";
                break;
            case "07":
                id = "Flex";
                break;
            case "08":
                id = "Charge";
                break;
            case "12":
                id = "Charge HR";
                break;
            case "15":
                id = "Alta";
                break;
            case "10":
                id = "Surge";
                break;
            case "11":
                id = "Electron";
                break;
            case "1b":
                id = "Ionic";
                break;
            default:
                id = temp;
        }
        result.add(new Information("SiteProto: " + model + ", " + type));
        result.add(new Information("Encrypted: " + encrypted()));
        result.add(new Information("Nonce: " + Utilities.rotateBytes(dataList.get(0).toString().substring(noncePos, noncePos + 4))));
        String productCode = dataList.get(0).toString().substring(serialPos, serialPos + 12);
        result.add(new Information("Serial Number: " + Utilities.rotateBytes(productCode)));
        AuthValues.setSerialNumber(productCode);
        if (AuthValues.NONCE == null) {
            InternalStorage.loadAuthFiles(activity);
        }
        result.add(new Information("ID: " + id));
        if (!encrypted()) {
            result.add(new Information("Version: " + Utilities.rotateBytes(dataList.get(0).toString().substring(16, 20))));
        }
        temp = dataList.get(dataList.size() - 2).toString() + dataList.get(dataList.size() - 1).toString();
        result.add(new Information("Length: " + Utilities.hexStringToInt(Utilities.rotateBytes(temp.substring(temp.length() - 6, temp.length()))) + " byte"));
    } else {
        // Alarms
        ArrayList<Information> input = new ArrayList<>();
        input.addAll(dataList.getList());
        for (int i = 0; i < 11; i++) {
            temp = temp + input.get(i);
        }
        setAlarmIndex(temp);
        result.add(new Information("Alarms:"));
        for (int i = 0; i < 8; i++) {
            result.add(new Alarm(temp.substring(28 + i * 48, 28 + (i + 1) * 48)));
        }
        result.add(new Information(""));
        result.add(new Information(ConstantValues.ADDITIONAL_INFO));
        result.add(new Information("Number of Alarms: " + Utilities.hexStringToInt(Utilities.rotateBytes(input.get(0).toString().substring(20, 24)))));
        result.add(new Information("CRC_CCITT: " + Utilities.rotateBytes(temp.substring(412, 416))));
        result.add(new Information("Length: " + Utilities.hexStringToInt(Utilities.rotateBytes(temp.substring(428, 434))) + " byte"));
    }
    return result;
}
Also used : Alarm(seemoo.fitbit.information.Alarm) ArrayList(java.util.ArrayList) InformationList(seemoo.fitbit.information.InformationList) Information(seemoo.fitbit.information.Information)

Example 2 with Alarm

use of seemoo.fitbit.information.Alarm in project fitness-app by seemoo-lab.

the class UploadInteraction method selectDay.

/**
 * Lets the user select day of the alarm to override.
 */
private void selectDay() {
    dayFlags = 0;
    final String[] days = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
    activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setCancelable(false);
            builder.setTitle("Which day(s):");
            boolean[] checkedItems = ((Alarm) alarms.get(position)).getDays();
            for (int i = 0; i < checkedItems.length; i++) {
                if (checkedItems[i]) {
                    // exponential
                    dayFlags = dayFlags + (int) Math.pow(2, i);
                }
            }
            builder.setMultiChoiceItems(days, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if (isChecked) {
                        dayFlags = dayFlags + (int) Math.pow(2, which);
                    } else {
                        dayFlags = dayFlags - (int) Math.pow(2, which);
                    }
                }
            });
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (dayFlags != 0) {
                        selectTime();
                    } else {
                        alarms.set(position, new Alarm(ConstantValues.EMPTY_ALARM));
                        String data = createData();
                        sendingData.addAll(Encoding.slip(data));
                        commands.comUploadInitialize(createExtra(data));
                        interactions.intGetAlarm();
                    }
                }
            });
            builder.show();
        }
    });
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) DialogInterface(android.content.DialogInterface) Alarm(seemoo.fitbit.information.Alarm)

Example 3 with Alarm

use of seemoo.fitbit.information.Alarm in project fitness-app by seemoo-lab.

the class UploadInteraction method selectRepeat.

/**
 * Lets the user select if the alarm shall be repeated.
 */
private void selectRepeat() {
    final String[] repeat = new String[] { "Yes", "No" };
    activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setCancelable(false);
            builder.setTitle("Repeat the alarm:");
            builder.setItems(repeat, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (which == 0) {
                        // 128 = 2^6 = seventh bit
                        dayFlags = dayFlags + 128;
                    }
                    alarms.set(position, new Alarm(createAlarm()));
                    String data = createData();
                    sendingData.addAll(Encoding.slip(data));
                    commands.comUploadInitialize(createExtra(data));
                    interactions.intGetAlarm();
                }
            });
            builder.show();
        }
    });
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) DialogInterface(android.content.DialogInterface) Alarm(seemoo.fitbit.information.Alarm)

Example 4 with Alarm

use of seemoo.fitbit.information.Alarm in project fitness-app by seemoo-lab.

the class WorkActivity method onCreate.

/**
 * {@inheritDoc}
 * Initializes several objects and connects to the deivec.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_work);
    setFinishOnTouchOutside(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    initialize();
    collectBasicInformation();
    connect();
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        /**
         * {@inheritDoc}
         *  Lets the user change an alarm, with the current view shows the alarms.
         */
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (information.get(ConstantValues.INFORMATION_ALARM) != null && services.size() != 0 && position > 0 && position < 9) {
                InformationList temp = new InformationList("");
                temp.addAll(information.get(ConstantValues.INFORMATION_ALARM));
                for (int i = temp.size() - 1; i >= 0; i--) {
                    if (!(temp.get(i) instanceof Alarm)) {
                        temp.remove(i);
                    }
                }
                interactions.intSetAlarm(position - 1, temp);
            }
        }
    });
}
Also used : Alarm(seemoo.fitbit.information.Alarm) AdapterView(android.widget.AdapterView) InformationList(seemoo.fitbit.information.InformationList) View(android.view.View) AdapterView(android.widget.AdapterView) WebView(android.webkit.WebView) TextView(android.widget.TextView) ListView(android.widget.ListView)

Example 5 with Alarm

use of seemoo.fitbit.information.Alarm in project fitness-app by seemoo-lab.

the class UploadInteraction method selectTime.

/**
 * Lets the user select time of the alarm to override.
 */
private void selectTime() {
    final int hours;
    final int minutes;
    if (((Alarm) alarms.get(position)).isEmpty()) {
        Calendar calendar = Calendar.getInstance();
        hours = calendar.get(Calendar.HOUR_OF_DAY);
        minutes = calendar.get(Calendar.MINUTE);
    } else {
        hours = ((Alarm) alarms.get(position)).getHours();
        minutes = ((Alarm) alarms.get(position)).getMinutes();
    }
    activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            TimePickerDialog mTimePickerDialog = new TimePickerDialog(activity, new TimePickerDialog.OnTimeSetListener() {

                @Override
                public void onTimeSet(TimePicker view, int hour, int minute) {
                    secondsAfterMidnight = hour * 3600 + minute * 60;
                    selectRepeat();
                }
            }, hours, minutes, true);
            mTimePickerDialog.setTitle("Select time:");
            mTimePickerDialog.setButton(TimePickerDialog.BUTTON_NEGATIVE, "", mTimePickerDialog);
            mTimePickerDialog.setCancelable(false);
            mTimePickerDialog.show();
        }
    });
}
Also used : TimePicker(android.widget.TimePicker) Alarm(seemoo.fitbit.information.Alarm) Calendar(java.util.Calendar) TimePickerDialog(android.app.TimePickerDialog)

Aggregations

Alarm (seemoo.fitbit.information.Alarm)6 DialogInterface (android.content.DialogInterface)2 AlertDialog (android.support.v7.app.AlertDialog)2 InformationList (seemoo.fitbit.information.InformationList)2 TimePickerDialog (android.app.TimePickerDialog)1 View (android.view.View)1 WebView (android.webkit.WebView)1 AdapterView (android.widget.AdapterView)1 ListView (android.widget.ListView)1 TextView (android.widget.TextView)1 TimePicker (android.widget.TimePicker)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 Information (seemoo.fitbit.information.Information)1