Search in sources :

Example 6 with RCalculation

use of com.cpjd.roblu.models.metrics.RCalculation in project Roblu by wdavies973.

the class MetricEditor method addMetricPreviewToToolbar.

/**
 * Adds the metric preview to the Toolbar
 */
private void addMetricPreviewToToolbar() {
    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setBackgroundColor(rui.getPrimaryColor());
    toolbar.removeAllViews();
    if (metric instanceof RBoolean)
        toolbar.addView(rMetricToUI.getBoolean((RBoolean) metric));
    else if (metric instanceof RCounter)
        toolbar.addView(rMetricToUI.getCounter((RCounter) metric));
    else if (metric instanceof RSlider)
        toolbar.addView(rMetricToUI.getSlider((RSlider) metric));
    else if (metric instanceof RChooser)
        toolbar.addView(rMetricToUI.getChooser((RChooser) metric));
    else if (metric instanceof RCheckbox)
        toolbar.addView(rMetricToUI.getCheckbox((RCheckbox) metric));
    else if (metric instanceof RStopwatch)
        toolbar.addView(rMetricToUI.getStopwatch((RStopwatch) metric, true));
    else if (metric instanceof RTextfield)
        toolbar.addView(rMetricToUI.getTextfield((RTextfield) metric));
    else if (metric instanceof RGallery)
        toolbar.addView(rMetricToUI.getGallery(true, 0, 0, ((RGallery) metric)));
    else if (metric instanceof RDivider)
        toolbar.addView(rMetricToUI.getDivider((RDivider) metric));
    else if (metric instanceof RFieldDiagram)
        toolbar.addView(rMetricToUI.getFieldDiagram(-1, (RFieldDiagram) metric));
    else if (metric instanceof RCalculation)
        toolbar.addView(rMetricToUI.getCalculationMetric(null, ((RCalculation) metric)));
    else if (metric instanceof RFieldData)
        toolbar.addView(rMetricToUI.getFieldData((RFieldData) metric));
}
Also used : RBoolean(com.cpjd.roblu.models.metrics.RBoolean) RDivider(com.cpjd.roblu.models.metrics.RDivider) RChooser(com.cpjd.roblu.models.metrics.RChooser) RGallery(com.cpjd.roblu.models.metrics.RGallery) RTextfield(com.cpjd.roblu.models.metrics.RTextfield) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) RFieldDiagram(com.cpjd.roblu.models.metrics.RFieldDiagram) RCalculation(com.cpjd.roblu.models.metrics.RCalculation) RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) RCheckbox(com.cpjd.roblu.models.metrics.RCheckbox) RSlider(com.cpjd.roblu.models.metrics.RSlider) RCounter(com.cpjd.roblu.models.metrics.RCounter) Toolbar(android.support.v7.widget.Toolbar)

Example 7 with RCalculation

use of com.cpjd.roblu.models.metrics.RCalculation in project Roblu by wdavies973.

the class TeamMetricProcessor method process.

/**
 * Processes an RTeam object and sets its filterTag and relevance variables.
 * -filterTag is a string representing a certain metric as defined by param method and param ID
 * -relevance is used for sorting (relevance is assigned differently for the type of RMetric, but for example,
 * counters with the highest value with cause that team to be sorted at the top)
 *
 * @param team the team to process
 * @param method an int from PROCESS_METHOD that defines how an team should be processed
 * @param ID the id of the metric to process, this value will be ignored if method is PIT, PREDICTIONS, or MATCHES
 */
public void process(RTeam team, int method, int ID) {
    team.setCustomRelevance(0);
    /*
         * Helper variables
         */
    StringBuilder rawData = new StringBuilder();
    int occurrences = 0;
    double relevance = 0;
    double average = 0.0, min = 0.0, max = 0.0;
    /*
         * If the request method is PIT or PREDICTIONS, use the following code to
         * sort the team. Note, each team will only have one value that needs to be
         * analyzed, so statistics are essentially invalid
         */
    if (method == PROCESS_METHOD.PIT || method == PROCESS_METHOD.PREDICTIONS) {
        for (RMetric metric : team.getTabs().get(method).getMetrics()) {
            if (metric.getID() != ID)
                continue;
            if (metric instanceof RBoolean) {
                rawData.append("Boolean: ").append(metric.getTitle()).append(" is ").append(friendlyBoolean((RBoolean) metric));
                if (metric.isModified() && ((RBoolean) metric).isValue())
                    relevance++;
            } else if (metric instanceof RCounter) {
                rawData.append("Counter: ").append(metric.getTitle()).append(" is ").append(friendlyCounter((RCounter) metric));
                relevance += ((RCounter) metric).getValue();
            } else if (metric instanceof RSlider) {
                rawData.append("Slider: ").append(metric.getTitle()).append(" is ").append(friendlySlider((RSlider) metric));
                relevance += ((RSlider) metric).getValue();
            } else if (metric instanceof RStopwatch) {
                rawData.append("Stopwatch: ").append(metric.getTitle()).append(" is ").append(friendlyStopwatch((RStopwatch) metric));
                relevance += ((RStopwatch) metric).getTime();
            } else if (metric instanceof RTextfield) {
                rawData.append("Textfield: ").append(metric.getTitle()).append(" has  ").append(((RTextfield) metric).getText().length()).append(" characters");
                relevance += ((RTextfield) metric).getText().length();
            } else if (metric instanceof RGallery) {
                rawData.append("Gallery: ").append(metric.getTitle()).append(" contains  ").append(((RGallery) metric).getImages().size()).append(" images");
                relevance += ((RGallery) metric).getImages().size();
            } else if (metric instanceof RCheckbox) {
                rawData.append("Checkbox: ").append(metric.getTitle()).append(" values:  ").append(friendlyCheckbox((RCheckbox) metric));
                relevance += getCheckedAmount((RCheckbox) metric);
            } else if (metric instanceof RChooser) {
                rawData.append("Chooser: ").append(metric.getTitle()).append(" has value  ").append(((RChooser) metric).getValues()[((RChooser) metric).getSelectedIndex()]);
            }
            rawData.append(" in ").append(friendlyMode(method));
            team.setFilterTag("\n" + rawData.toString());
            team.setCustomRelevance(relevance);
            break;
        }
    } else /*
         * If the request method is MATCHES, then the following code has to be used
         * to look at each particular RTab object within the team object
         */
    if (method == PROCESS_METHOD.MATCHES) {
        if (team.getTabs() == null || team.getTabs().size() == 0) {
            team.setFilterTag("\nThis team does not contain any matches that can be sorted.");
            return;
        }
        /*
             * This nested for loop will go through every team tab and every metric within each team tab.
             * This loop should only process the RAW DATA for each metric, the overview stuff will be added at the end.
             * Use StringBuilder rawData to store raw data
             */
        rawData.append("\nRaw data: ");
        for (int i = 2; i < team.getTabs().size(); i++) {
            for (RMetric metric : team.getTabs().get(i).getMetrics()) {
                // Make sure that the metric that is being processed is equal to the inputted value
                if (metric.getID() != ID)
                    continue;
                // RBoolean type
                if (metric instanceof RBoolean) {
                    RBoolean rBoolean = (RBoolean) metric;
                    // if the value is modified and true, add some relevance info
                    if (rBoolean.isModified() && rBoolean.isValue()) {
                        occurrences++;
                        relevance++;
                    }
                    // add raw data
                    rawData.append(friendlyBoolean((RBoolean) metric)).append(ending(i, team.getTabs()));
                } else // RCounter type
                if (metric instanceof RCounter) {
                    double value = ((RCounter) metric).getValue();
                    if (i == 2)
                        min = value;
                    // Overview stats will only consider modified items
                    if (metric.isModified()) {
                        /*
                             * Progressively calculate the min, max, and average values
                             */
                        if (value < min)
                            min = value;
                        if (value > max)
                            max = value;
                        average += value / (double) numModified(team.getTabs(), ID);
                        relevance = average;
                    }
                    // add raw data
                    rawData.append(friendlyCounter((RCounter) metric)).append(ending(i, team.getTabs()));
                } else if (metric instanceof RCalculation) {
                    try {
                        double value = Double.parseDouble(((RCalculation) metric).getValue(team.getTabs().get(i).getMetrics()));
                        if (i == 2)
                            min = value;
                        // Overview stats will only consider modified items
                        if (metric.isModified()) {
                            /*
                             * Progressively calculate the min, max, and average values
                             */
                            if (value < min)
                                min = value;
                            if (value > max)
                                max = value;
                            average += value / (double) numModified(team.getTabs(), ID);
                            relevance = average;
                        }
                        // add raw data
                        rawData.append(friendlyCounter((RCounter) metric)).append(ending(i, team.getTabs()));
                    } catch (Exception e) {
                    // eat it
                    }
                } else // RSlider type
                if (metric instanceof RSlider) {
                    int value = ((RSlider) metric).getValue();
                    if (i == 2)
                        min = value;
                    // Overview stats will only consider modified sliders
                    if (metric.isModified()) {
                        if (value < min)
                            min = value;
                        if (value > max)
                            max = value;
                        average += (double) value / (double) numModified(team.getTabs(), ID);
                        relevance = average;
                    }
                    // add raw data
                    rawData.append(friendlySlider((RSlider) metric)).append(ending(i, team.getTabs()));
                } else // RStopwatch type
                if (metric instanceof RStopwatch) {
                    double value = ((RStopwatch) metric).getTime();
                    if (i == 2)
                        min = value;
                    // Overview stats will only consider modified stopwatches
                    if (metric.isModified()) {
                        /*
                             * Progressively calculate the min, max, and average values
                             */
                        if (value < min)
                            min = value;
                        if (value > max)
                            max = value;
                        average += value / (double) numModified(team.getTabs(), ID);
                        relevance = average;
                    }
                    // add raw data
                    rawData.append(friendlyStopwatch((RStopwatch) metric)).append(ending(i, team.getTabs()));
                } else // RTextfield type
                if (metric instanceof RTextfield) {
                    int value = ((RTextfield) metric).getText().length();
                    // Overview stats will only consider modified textfields
                    if (metric.isModified()) {
                        /*
                             * Progressively calculate the min, max, and average values
                             */
                        if (value < min)
                            min = value;
                        if (value > max)
                            max = value;
                        average += (double) value / (double) numModified(team.getTabs(), ID);
                        relevance = average;
                    }
                    // add raw data
                    rawData.append(value).append(" chars").append(ending(i, team.getTabs()));
                } else // RGallery type
                if (metric instanceof RGallery) {
                    int value = ((RGallery) metric).getImages().size();
                    // Overview stats will only consider modified textfields
                    if (metric.isModified()) {
                        /*
                             * Progressively calculate the min, max, and average values
                             */
                        if (value < min)
                            min = value;
                        if (value > max)
                            max = value;
                        average += (double) value / (double) numModified(team.getTabs(), ID);
                        relevance = average;
                    }
                    // add raw data
                    rawData.append(value).append(" images ").append(ending(i, team.getTabs()));
                } else // RCheckbox type
                if (metric instanceof RCheckbox) {
                    // add raw data
                    rawData.append(friendlyCheckbox((RCheckbox) metric)).append(ending(i, team.getTabs()));
                    relevance += getCheckedAmount((RCheckbox) metric);
                } else // RChooser type
                if (metric instanceof RChooser) {
                    if (metric.isModified())
                        relevance++;
                    // add raw data
                    rawData.append(((RChooser) metric).getValues()[((RChooser) metric).getSelectedIndex()]).append(ending(i, team.getTabs()));
                } else // Field data
                if (metric instanceof RFieldData) {
                    // Find the sub metric
                    if (((RFieldData) metric).getData() != null && ((RFieldData) metric).getData().get(inMatchTitle) != null)
                        rawData.append(((RFieldData) metric).getData().get(inMatchTitle).get(team.getTabs().get(i).isRedAlliance() ? 0 : 1).toString()).append(ending(i, team.getTabs()));
                    // Overview stats will only consider modified textfields
                    if (metric.isModified()) {
                        /*
                             * Progressively calculate the min, max, and average values
                             */
                        try {
                            double value = Double.parseDouble(((RFieldData) metric).getData().get(inMatchTitle).get(team.getTabs().get(i).isRedAlliance() ? 0 : 1).toString());
                            if (i == 2)
                                min = value;
                            if (value < min)
                                min = value;
                            if (value > max)
                                max = value;
                            average += value / (double) numModified(team.getTabs(), ID);
                            relevance = average;
                        } catch (Exception e) {
                        // eat it
                        }
                    }
                }
                /*
                     * Now, add the overview statistics to the team if the metric has overview statistics
                     * available
                    */
                max = Utils.round(max, 2);
                min = Utils.round(min, 2);
                average = Utils.round(average, 2);
                StringBuilder overview = new StringBuilder();
                if (metric instanceof RBoolean)
                    overview.append("Boolean: ").append(metric.getTitle()).append(" is true in ").append(occurrences).append(" / ").append(team.getTabs().size() - 2).append(" matches");
                else if (metric instanceof RCounter)
                    overview.append("Counter: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RCalculation)
                    overview.append("Calculation: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RSlider)
                    overview.append("Slider: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RStopwatch)
                    overview.append("Stopwatch: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RTextfield)
                    overview.append("Textfield: ").append(metric.getTitle()).append(" Average chars: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RGallery)
                    overview.append("Gallery: ").append(metric.getTitle()).append(" Average images: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                else if (metric instanceof RChooser)
                    overview.append("Chooser: ").append(metric.getTitle());
                else if (metric instanceof RCheckbox)
                    overview.append("Checkbox: ").append(metric.getTitle());
                else if (metric instanceof RFieldData) {
                    overview.append("Field data: ").append(inMatchTitle);
                    try {
                        // this will fail if the value isn't a number
                        if (average != 0 || min != 0 || max != 0)
                            overview.append("\nAverage: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
                    } catch (Exception e) {
                    // eat it
                    }
                }
                /*
                     * Now append the raw data as processed above
                     */
                team.setFilterTag("\n" + overview.append(rawData).toString());
                team.setCustomRelevance(relevance);
                // exit the loop, the metric has been fully processed
                break;
            }
        }
    } else /*
         * The user requested MATCH_WINS
         */
    if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.MATCH_WINS) {
        for (int i = 2; i < team.getTabs().size(); i++) {
            if (team.getTabs().get(i).isWon()) {
                occurrences++;
                relevance++;
                rawData.append("W");
            } else
                rawData.append("L");
            rawData.append(ending(i, team.getTabs()));
        }
        /*
             * Setup overview rawData and add raw data
             */
        team.setCustomRelevance(relevance);
        team.setFilterTag("\n" + String.valueOf(occurrences) + " match wins\n" + rawData.toString());
    } else /*
         * The user requested IN_MATCH
         */
    if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.IN_MATCH) {
        team.setFilter(TeamsView.SORT_TYPE.NUMERICAL);
        for (int i = 2; i < team.getTabs().size(); i++) {
            if (team.getTabs().get(i).getTitle().equalsIgnoreCase(inMatchTitle)) {
                team.setFilterTag("\n" + rawData.append("In ").append(inMatchTitle).toString());
                team.setCustomRelevance(1);
            }
        }
    } else /*
         * The user request a reset
         */
    if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.RESET) {
        team.setFilterTag("");
        team.setCustomRelevance(0);
    }
}
Also used : RBoolean(com.cpjd.roblu.models.metrics.RBoolean) RChooser(com.cpjd.roblu.models.metrics.RChooser) RGallery(com.cpjd.roblu.models.metrics.RGallery) RTextfield(com.cpjd.roblu.models.metrics.RTextfield) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) RMetric(com.cpjd.roblu.models.metrics.RMetric) RCalculation(com.cpjd.roblu.models.metrics.RCalculation) RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) RCheckbox(com.cpjd.roblu.models.metrics.RCheckbox) RSlider(com.cpjd.roblu.models.metrics.RSlider) RCounter(com.cpjd.roblu.models.metrics.RCounter)

Example 8 with RCalculation

use of com.cpjd.roblu.models.metrics.RCalculation in project Roblu by wdavies973.

the class SyncHelper method mergeCheckout.

/**
 * Merges the checkout with the active event.
 * Creates new team / match if they don't already exist
 * @param checkout the checkout to merge
 */
public void mergeCheckout(RCheckout checkout) {
    // Verify the target checkout, to make sure it's in sync with the local form
    checkout.getTeam().verify(form);
    // Check to see if there is a local team matching this checkout
    RTeam team = io.loadTeam(activeEvent.getID(), checkout.getTeam().getID());
    // The team was found, so do a merge
    if (team != null) {
        team.verify(form);
        boolean shouldOverrideLastEdited = false;
        for (RTab downloadedTab : checkout.getTeam().getTabs()) {
            boolean matchLocated = false;
            for (RTab localTab : team.getTabs()) {
                localTab.setWon(downloadedTab.isWon());
                // Found the match, start merging
                if (localTab.getTitle().equalsIgnoreCase(downloadedTab.getTitle())) {
                    /*
                         * Copy over the edit tabs
                         */
                    if (downloadedTab.getEdits() != null)
                        localTab.setEdits(downloadedTab.getEdits());
                    for (RMetric downloadedMetric : downloadedTab.getMetrics()) {
                        if (!(downloadedMetric instanceof RCalculation) && !(downloadedMetric instanceof RFieldData) && downloadedMetric.isModified())
                            shouldOverrideLastEdited = true;
                        for (RMetric localMetric : localTab.getMetrics()) {
                            // Found the metric, determine if a merge needs to occur
                            if (downloadedMetric.getID() == localMetric.getID()) {
                                // Ignore imports from this metric
                                if (downloadedMetric instanceof RFieldData)
                                    break;
                                /*
                                     * We have to deal with one special case scenario - the gallery.
                                     * The gallery should never be overrided, just added to
                                     */
                                if (downloadedMetric instanceof RGallery && localMetric instanceof RGallery) {
                                    if (((RGallery) localMetric).getPictureIDs() == null)
                                        ((RGallery) localMetric).setPictureIDs(new ArrayList<Integer>());
                                    if (((RGallery) downloadedMetric).getImages() != null) {
                                        // Add images to the current gallery
                                        for (int i = 0; i < ((RGallery) downloadedMetric).getImages().size(); i++) {
                                            ((RGallery) localMetric).getPictureIDs().add(io.savePicture(activeEvent.getID(), ((RGallery) downloadedMetric).getImages().get(i)));
                                        }
                                    }
                                    // Don't forget to clear the pictures from memory after they've been merged
                                    ((RGallery) downloadedMetric).setImages(null);
                                    break;
                                }
                                // If the local metric is already edited, keep whichever data is newest
                                if (localMetric.isModified()) {
                                    if (checkout.getTeam().getLastEdit() >= team.getLastEdit()) {
                                        int replaceIndex = localTab.getMetrics().indexOf(localMetric);
                                        localTab.getMetrics().set(replaceIndex, downloadedMetric);
                                    }
                                } else // Otherwise, just do a straight override
                                {
                                    int replaceIndex = localTab.getMetrics().indexOf(localMetric);
                                    localTab.getMetrics().set(replaceIndex, downloadedMetric);
                                }
                                break;
                            }
                        }
                    }
                    matchLocated = true;
                    break;
                }
            }
            if (!matchLocated) {
                // Add as a new match if a merge wasn't performed
                team.addTab(checkout.getTeam().getTabs().get(0));
                Collections.sort(team.getTabs());
            }
        }
        if (shouldOverrideLastEdited)
            team.setLastEdit(checkout.getTeam().getLastEdit());
    } else // The team was not found locally, create a new one
    {
        Log.d("RBS", "Team was not found, creating a new one.");
        team = new RTeam(checkout.getTeam().getName(), checkout.getTeam().getNumber(), checkout.getTeam().getID());
        team.setLastEdit(checkout.getTeam().getLastEdit());
        team.verify(form);
        if (checkout.getTeam().getTabs().size() > 1) {
            // this means the downloaded team was a PIT tab, so override the new team's tabs
            team.setTabs(checkout.getTeam().getTabs());
        } else {
            // otherwise just add them
            team.addTab(checkout.getTeam().getTabs().get(0));
        }
    }
    // Save the team
    io.saveTeam(activeEvent.getID(), team);
    // Request a UI refresh
    Utils.requestTeamViewerRefresh(context, team.getID());
    Log.d("RBS-Service", "Merged the team: " + checkout.getTeam().getName());
}
Also used : RTeam(com.cpjd.roblu.models.RTeam) RTab(com.cpjd.roblu.models.RTab) RGallery(com.cpjd.roblu.models.metrics.RGallery) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) ArrayList(java.util.ArrayList) RMetric(com.cpjd.roblu.models.metrics.RMetric) RCalculation(com.cpjd.roblu.models.metrics.RCalculation)

Example 9 with RCalculation

use of com.cpjd.roblu.models.metrics.RCalculation in project Roblu by wdavies973.

the class MatchData method generateSheet.

@Override
public void generateSheet(XSSFSheet sheet, REvent event, RForm form, RTeam[] teams, ArrayList<RCheckout> checkouts) {
    /*
         * Output the headers
         */
    Row row = createRow(sheet);
    createCell(row, 0, "Team Number");
    createCell(row, 1, "Match number");
    for (int i = 0; i < form.getMatch().size(); i++) {
        createCell(row, i + 2, form.getMatch().get(i).getTitle());
    }
    /*
         * Output the data
         */
    for (RCheckout checkout : checkouts) {
        if (checkout.getTeam().getTabs().get(0).getTitle().equalsIgnoreCase("PIT") || checkout.getTeam().getTabs().get(0).getTitle().equalsIgnoreCase("PREDICTIONS"))
            continue;
        Row data = createRow(sheet);
        Cell cs = data.createCell(0);
        cs.setCellValue(checkout.getTeam().getNumber());
        cs.setCellStyle(getStyle());
        createCell(data, 1, checkout.getTeam().getTabs().get(0).getTitle().replace("Quals ", ""));
        int index = 0;
        for (RMetric metric : checkout.getTeam().getTabs().get(0).getMetrics()) {
            if (shouldWriteMetric(checkout.getTeam(), metric)) {
                if (metric instanceof RStopwatch)
                    createCell(data, index + 2, ((RStopwatch) metric).getLapsString());
                else if (metric instanceof RCalculation)
                    createCell(data, index + 2, ((RCalculation) metric).getValue(checkout.getTeam().getTabs().get(0).getMetrics()));
                else if (metric instanceof RFieldData)
                    continue;
                else
                    createCell(data, index + 2, metric.toString());
            } else
                createCell(data, index + 2, "");
            index++;
        }
    }
}
Also used : RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) RCheckout(com.cpjd.roblu.models.RCheckout) Row(org.apache.poi.ss.usermodel.Row) RMetric(com.cpjd.roblu.models.metrics.RMetric) Cell(org.apache.poi.ss.usermodel.Cell) RCalculation(com.cpjd.roblu.models.metrics.RCalculation)

Aggregations

RCalculation (com.cpjd.roblu.models.metrics.RCalculation)9 RCheckbox (com.cpjd.roblu.models.metrics.RCheckbox)7 RChooser (com.cpjd.roblu.models.metrics.RChooser)7 RCounter (com.cpjd.roblu.models.metrics.RCounter)7 RSlider (com.cpjd.roblu.models.metrics.RSlider)7 RStopwatch (com.cpjd.roblu.models.metrics.RStopwatch)7 RMetric (com.cpjd.roblu.models.metrics.RMetric)6 RBoolean (com.cpjd.roblu.models.metrics.RBoolean)5 RFieldData (com.cpjd.roblu.models.metrics.RFieldData)5 RGallery (com.cpjd.roblu.models.metrics.RGallery)5 RTextfield (com.cpjd.roblu.models.metrics.RTextfield)4 ArrayList (java.util.ArrayList)4 RDivider (com.cpjd.roblu.models.metrics.RDivider)3 LinkedHashMap (java.util.LinkedHashMap)3 TextInputLayout (android.support.design.widget.TextInputLayout)2 View (android.view.View)2 RelativeLayout (android.widget.RelativeLayout)2 TextView (android.widget.TextView)2 IO (com.cpjd.roblu.io.IO)2 RTab (com.cpjd.roblu.models.RTab)2