Best Android App InstaSquare Lite for full-size publication of photos in Instagram, Facebook, Twitter. Run the android application on PC. You can through the android emulator Droid4X.

Changeset 102

Show
Ignore:
Timestamp:
02/03/09 18:48:27 (5 months ago)
Author:
czue
Message:

Updating the graphing module to be separated out by the data and options so we have more control over the plots. Updated the graph that plots a numeric field over time to display dates properly on the x-axis, and updated the histogram to be color-coded, have proper labels, and include a legend.

Location:
trunk/rapidandroid/org.rapidandroid
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/rapidandroid/org.rapidandroid/assets/flot/html/basechart.html

    r100 r102  
    2121        graphObj.style.height = gheight;         
    2222} 
    23 function GotGraph(gdata) {       
    24         $.plot($("#placeholder"), gdata); 
     23function GotGraph(gData, gOptions) {     
     24        $.plot($("#placeholder"), gData, gOptions); 
    2525        window.graphdata.finishGraph(); 
    2626        } 
  • trunk/rapidandroid/org.rapidandroid/res/layout/tablerow.xml

    r90 r102  
    55        <TableRow android:id="@+id/TableRow01" android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    66                <TextView android:id="@+id/TextView01" android:layout_height="wrap_content" android:text="asdfdasfasfaffdffdfdaadsf" android:layout_weight="1" android:layout_gravity="left"></TextView> 
    7                         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
    8                         android:layout_height="wrap_content" android:text="qwerqwrqrqrqr" android:layout_weight="1"></TextView> 
    9                         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
    10                         android:layout_height="wrap_content" android:text="ZXCZXCczCczcCZCC" android:layout_weight="1"></TextView> 
    11                         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
    12                         android:layout_height="wrap_content" android:text="rutyututuytu" android:layout_weight="1"></TextView> 
    13                         <TextView android:id="@+id/TextView01" android:layout_height="wrap_content" android:text="fghjfjfjfhjfj" android:layout_weight="1"></TextView> 
    14                         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
    15                         android:layout_height="wrap_content" android:layout_weight="1" android:text="2345235235243535"></TextView> 
     7                <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
     8                          android:layout_height="wrap_content" android:text="qwerqwrqrqrqr" android:layout_weight="1"></TextView> 
     9                <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
     10                          android:layout_height="wrap_content" android:text="ZXCZXCczCczcCZCC" android:layout_weight="1"></TextView> 
     11                <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
     12                          android:layout_height="wrap_content" android:text="rutyututuytu" android:layout_weight="1"></TextView> 
     13                <TextView android:id="@+id/TextView01" android:layout_height="wrap_content" android:text="fghjfjfjfhjfj" android:layout_weight="1"></TextView> 
     14                <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
     15                  android:layout_height="wrap_content" android:layout_weight="1" android:text="2345235235243535"></TextView> 
    1616        </TableRow> 
    1717</TableLayout> 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/chart/form/FormDataBroker.java

    r100 r102  
    66 
    77import org.json.JSONArray; 
     8import org.json.JSONException; 
    89import org.json.JSONObject; 
    910import org.rapidandroid.activity.chart.IChartBroker; 
     11import org.rapidandroid.activity.chart.JSONGraphData; 
    1012import org.rapidandroid.data.RapidSmsDBConstants; 
    1113import org.rapidandroid.data.SmsDbHelper; 
     
    7678                height = height - 50; 
    7779 
    78                 JSONArray arr = new JSONArray(); 
    79  
     80                JSONArray data = getEmptyData(); 
     81                JSONObject options = new JSONObject(); 
     82                JSONGraphData allData  = null; 
    8083                if (fieldToPlot == null) { 
    8184                        //we're going to do all messages over timereturn; 
    82                         arr.put(loadMessageOverTimeHistogram()); 
     85                        allData = loadMessageOverTimeHistogram(); 
    8386                } else if (fieldToPlot.getFieldType().getItemType().equals("word")) { 
    84                         arr.put(loadHistogramFromField()); 
     87                        allData = loadHistogramFromField();  
    8588                } else { 
    86                         arr.put(loadNumericLine()); 
    87                 } 
    88  
     89                        allData = loadNumericLine();  
     90                        //data.put(loadNumericLine()); 
     91                } 
     92                if (allData != null) { 
     93                        data = allData.getData(); 
     94                        options = allData.getOptions(); 
     95                }  
     96                System.out.println(data.toString()); 
     97                System.out.println(options.toString()); 
     98                 
    8999                mAppView.loadUrl("javascript:SetGraph(\"" + width + "px\", \"" + height 
    90100                                + "px\")"); 
    91                 mAppView.loadUrl("javascript:GotGraph(" + arr.toString() + ")"); 
    92         } 
    93  
    94         private JSONObject loadNumericLine() { 
     101                mAppView.loadUrl("javascript:GotGraph(" + data.toString() + "," + options.toString() + ")"); 
     102        } 
     103 
     104         
     105        private JSONGraphData loadNumericLine() { 
    95106                JSONObject result = new JSONObject(); 
    96107                SQLiteDatabase db = rawDB.getReadableDatabase(); 
     
    124135                if (barCount == 0) { 
    125136                        cr.close(); 
    126                         return result; 
    127137                } else { 
    128138                        Date[] xVals = new Date[barCount]; 
     
    144154 
    145155                        try { 
    146                                 result.put("label", fieldToPlot.getName()); 
    147                                 result.put("data", prepareDateData(xVals, yVals)); 
    148                                 result.put("label", fieldToPlot.getName()); 
    149                                 result.put("lines", getShowTrue()); 
    150                                 result.put("points", getShowTrue()); 
    151                                 result.put("xaxis", getDateOptions()); 
     156//                              result.put("label", fieldToPlot.getName()); 
     157//                              result.put("data", prepareDateData(xVals, yVals)); 
     158//                              result.put("label", fieldToPlot.getName()); 
     159//                              result.put("lines", getShowTrue()); 
     160//                              result.put("points", getShowTrue()); 
     161//                              result.put("xaxis", getDateOptions()); 
     162                                return new JSONGraphData(prepareDateData(xVals, yVals),loadOptionsForDateGraph(xVals) ); 
    152163                        } catch (Exception ex) { 
    153164 
    154165                        } 
    155                         cr.close(); 
    156                         return result; 
    157                 } 
    158  
     166                        finally { 
     167                                if (!cr.isClosed()) { 
     168                                        cr.close(); 
     169                                } 
     170                        } 
     171                         
     172                } 
     173                // either there was no data or something bad happened 
     174                return new JSONGraphData(getEmptyData(), new JSONObject());      
     175        } 
     176 
     177         
     178        private JSONArray getEmptyData() { 
     179                JSONArray toReturn = new JSONArray(); 
     180                JSONArray innerArray = new JSONArray(); 
     181                innerArray.put(0); 
     182                innerArray.put(0); 
     183                toReturn.put(innerArray); 
     184                return toReturn; 
    159185        } 
    160186 
     
    171197 
    172198        private JSONArray prepareDateData(Date[] xvals, int[] yvals) { 
    173                 JSONArray arr = new JSONArray(); 
     199                JSONArray outerArray = new JSONArray(); 
     200                JSONArray innerArray = new JSONArray(); 
    174201                int datalen = xvals.length; 
    175202                for (int i = 0; i < datalen; i++) { 
     
    177204                        elem.put(xvals[i].getTime()); 
    178205                        elem.put(yvals[i]); 
    179                         arr.put(elem); 
    180                 } 
    181                 return arr; 
    182         } 
    183          
    184         private JSONObject loadMessageOverTimeHistogram() { 
    185                 JSONObject result = new JSONObject(); 
     206                        innerArray.put(elem); 
     207                } 
     208                outerArray.put(innerArray); 
     209                return outerArray; 
     210        } 
     211         
     212        private JSONGraphData loadMessageOverTimeHistogram() { 
    186213                SQLiteDatabase db = rawDB.getReadableDatabase(); 
    187214                Calendar startCal = Calendar.getInstance(); 
     
    246273                if (barCount == 0) { 
    247274                        cr.close(); 
    248                         return result; 
    249275                } else { 
    250276                        String[] xVals = new String[barCount]; 
     
    259285 
    260286                        try { 
     287                                //result.put("label", fieldToPlot.getName()); 
     288                                //result.put("data", prepareData(xVals, yVals)); 
     289                                //result.put("bars", getShowTrue()); 
     290                                //result.put("xaxis", getXaxisOptions(xVals)); 
     291                                // todo  
     292                                JSONObject result = new JSONObject(); 
     293                                //return new JSONGraphData(prepareHistogramData(xVals, yVals),loadOptionsForHistogram(xVals) ); 
     294                                 
    261295                                result.put("label", legend); 
    262296                                result.put("data", prepareData(yVals)); 
     
    264298                                result.put("points", getShowFalse()); 
    265299                                result.put("xaxis", getXaxisOptions(xVals)); 
     300                                JSONArray values = new JSONArray(); 
     301                                values.put(result); 
     302                                return new JSONGraphData(values, new JSONObject()); 
    266303 
    267304                        } catch (Exception ex) { 
    268305 
     306                        } finally { 
     307                                if (!cr.isClosed()) { 
     308                                        cr.close(); 
     309                                } 
    269310                        } 
    270                         cr.close(); 
    271                         return result; 
    272                 } 
    273  
    274         } 
    275          
    276  
    277         private JSONObject loadHistogramFromField() { 
    278                 JSONObject result = new JSONObject(); 
     311                } 
     312                // either there was no data or something bad happened 
     313                return new JSONGraphData(getEmptyData(), new JSONObject());      
     314        } 
     315         
     316 
     317        /** 
     318         * Should return a two element array - the first element is the data,  
     319         * the second are the options 
     320         * @return 
     321         */ 
     322        private JSONGraphData loadHistogramFromField() { 
     323                //JSONObject result = new JSONObject(); 
    279324                SQLiteDatabase db = rawDB.getReadableDatabase(); 
    280325 
     
    307352                int barCount = cr.getCount(); 
    308353 
    309                 if (barCount == 0) { 
    310                         return result; 
    311                 } else { 
     354                if (barCount != 0) { 
    312355                        String[] xVals = new String[barCount]; 
    313356                        int[] yVals = new int[barCount]; 
     
    324367 
    325368                        try { 
    326                                 result.put("label", fieldToPlot.getName()); 
    327                                 result.put("data", prepareData(yVals)); 
    328                                 result.put("bars", getShowTrue()); 
    329                                 result.put("xaxis", getXaxisOptions(xVals)); 
    330  
     369                                //result.put("label", fieldToPlot.getName()); 
     370                                //result.put("data", prepareData(xVals, yVals)); 
     371                                //result.put("bars", getShowTrue()); 
     372                                //result.put("xaxis", getXaxisOptions(xVals)); 
     373                                return new JSONGraphData(prepareHistogramData(xVals, yVals),loadOptionsForHistogram(xVals) ); 
    331374                        } catch (Exception ex) { 
    332375 
     376                        } finally { 
     377                                if (!cr.isClosed()) { 
     378                                        cr.close(); 
     379                                } 
    333380                        } 
    334                         cr.close(); 
    335                         return result; 
    336                 } 
    337  
     381                } 
     382                // either there was no data or something bad happened 
     383                return new JSONGraphData(getEmptyData(), new JSONObject()); 
     384        } 
     385 
     386        private JSONArray prepareHistogramData(String[] names, int[] counts) throws JSONException { 
     387                // TODO Auto-generated method stub 
     388                JSONArray arr = new JSONArray(); 
     389                int datalen = names.length; 
     390                for (int i = 0; i < datalen; i++) { 
     391                         
     392                        JSONObject elem = new JSONObject(); 
     393                        // values will just be an array of length 1 with a single value 
     394                        JSONArray values = new JSONArray(); 
     395                        JSONArray value = new JSONArray(); 
     396                        value.put(i); 
     397                        value.put(counts[i]); 
     398                        values.put(value); 
     399                        elem.put("data", values); 
     400                        elem.put("bars", getShowTrue()); 
     401                        elem.put("label", names[i]); 
     402                        arr.put(elem); 
     403                } 
     404                return arr; 
     405        } 
     406 
     407        private JSONObject loadOptionsForDateGraph(Date[] vals) throws JSONException { 
     408 
     409                JSONObject toReturn = new JSONObject(); 
     410                //bars: { show: true }, points: { show: false }, xaxis: { mode: "time", timeformat:"%y/%m/%d" } 
     411                toReturn.put("bars", getShowTrue()); 
     412                toReturn.put("points", getShowFalse()); 
     413                toReturn.put("xaxis", getXaxisOptionsForDate()); 
     414                return toReturn; 
     415        } 
     416         
     417        private JSONObject getXaxisOptionsForDate() throws JSONException { 
     418                JSONObject toReturn = new JSONObject(); 
     419                toReturn.put("mode", "time"); 
     420                toReturn.put("timeformat", "%m/%d/%y"); 
     421                return toReturn; 
     422        } 
     423 
     424        private JSONObject loadOptionsForHistogram(String[] labels) throws JSONException { 
     425                 
     426                JSONObject toReturn = new JSONObject(); 
     427                toReturn.put("xaxis", this.getXaxisOptions(labels)); 
     428                return toReturn; 
    338429        } 
    339430