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 97

Show
Ignore:
Timestamp:
02/03/09 01:43:24 (12 months ago)
Author:
dmyung
Message:

daterange fixed
- removed some ui issues. (id, parsed data)
- table view fixed!
- saves some space on the reviewer screen
- change set parameters to change date range
- fixed change parameter crash with a fix on querying the message store
- fixed memory leak with unclosed db by makgin some static methods
- fixed date range so that it doesn't suck

Location:
trunk/rapidandroid/org.rapidandroid
Files:
14 modified
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/rapidandroid/org.rapidandroid/AndroidManifest.xml

    r94 r97  
    5858<activity android:name=".activity.AddField" android:theme="@android:style/Theme.Dialog"></activity> 
    5959<activity android:name=".activity.FileBrowser"></activity> 
    60 <activity android:name=".activity.DateRange" android:theme="@android:style/Theme.Dialog"></activity> 
     60<activity android:name=".activity.DateRange"></activity> 
    6161<receiver android:name=".receiver.SmsReplyReceiver"> 
    6262<intent-filter><action android:name="org.rapidandroid.intents.SMS_REPLY"></action> 
  • trunk/rapidandroid/org.rapidandroid/res/layout/date_range.xml

    r94 r97  
    22<TableLayout android:id="@+id/TableLayout01" 
    33        android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" 
    4         android:layout_width="fill_parent"> 
     4        android:layout_width="fill_parent" android:scrollbarStyle="outsideOverlay"> 
    55        <TableRow android:id="@+id/TableRow01" android:layout_height="wrap_content" 
    66                android:layout_width="fill_parent"> 
    7                 <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
    8                         android:text="@string/lbl_startdate" android:layout_height="wrap_content"></TextView> 
    9                 <TextView android:id="@+id/txv_startdate" 
    10                         android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
    11         </TableRow> 
    12         <SeekBar android:id="@+id/range_startseek" 
    13                 android:layout_width="fill_parent" android:secondaryProgress="100" android:layout_height="50px" android:paddingLeft="8px" android:paddingRight="8px"></SeekBar> 
     7                <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/btn_daterange_startdate" android:id="@+id/range_btn_startdate"></Button> 
     8                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txv_startdate" android:layout_weight="2" android:textSize="16sp"></TextView> 
     9         
     10</TableRow> 
     11         
    1412 
    1513        <TableRow android:id="@+id/TableRow02" android:layout_height="wrap_content" 
    1614                android:layout_width="fill_parent"> 
    17                 <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" 
    18                         android:layout_height="wrap_content" android:text="@string/lbl_enddate"></TextView> 
     15                 
    1916                <TextView android:id="@+id/txv_enddate" android:layout_width="wrap_content" 
    20                         android:layout_height="wrap_content"></TextView> 
    21         </TableRow> 
    22         <SeekBar android:layout_width="fill_parent" android:id="@+id/range_endseek" 
    23                 android:progress="100" android:layout_height="50px" android:paddingRight="8px" android:paddingLeft="8px"></SeekBar> 
     17                        android:layout_height="wrap_content" android:layout_weight="2" android:textSize="16sp"></TextView> 
     18        <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/btn_daterange_enddate" android:id="@+id/range_btn_enddate"></Button> 
     19</TableRow> 
     20         
    2421        <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" 
    2522                android:layout_height="20px" android:text=" " ></TextView> 
     
    3532                        android:text="@string/range_btn_lastmonth"></Button> 
    3633 
     34<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/range_btn_last_threemonth" android:text="@string/range_btn_lastthreemonth"></Button> 
    3735</TableLayout> 
  • trunk/rapidandroid/org.rapidandroid/res/layout/form_edit.xml

    r96 r97  
    11<?xml version="1.0" encoding="utf-8"?> 
    2  
    3 <LinearLayout 
    4 android:id="@+id/widget28" 
     2<TableLayout 
     3android:id="@+id/TableLayout01" 
    54android:layout_width="fill_parent" 
    65android:layout_height="fill_parent" 
    76android:orientation="vertical" 
    87xmlns:android="http://schemas.android.com/apk/res/android" 
     8android:stretchColumns="0,1" 
    99> 
    10 <TableLayout android:id="@+id/TableLayout01" 
    11     android:layout_height="wrap_content" android:layout_width="fill_parent"> 
    12     <TableRow android:id="@+id/TableRow01" android:layout_height="wrap_content" android:layout_width="fill_parent"> 
    13         <TextView 
     10<TableRow> 
     11<TextView 
     12android:id="@+id/lbl_formname" 
    1413android:layout_width="wrap_content" 
    1514android:layout_height="wrap_content" 
    16  
    1715android:text="@string/lbl_formname" 
    18 android:id="@+id/lbl_formname"> 
     16android:padding="3dip" 
     17android:layout_weight="1" android:textStyle="bold"> 
    1918</TextView> 
    2019<TextView 
     20android:id="@+id/lbl_formprefix" 
    2121android:layout_width="wrap_content" 
    2222android:layout_height="wrap_content" 
    23  
    2423android:text="@string/lbl_formprefix" 
    25 android:id="@+id/lbl_formprefix"> 
     24android:padding="3dip" 
     25android:layout_weight="1" android:textStyle="bold"> 
    2626</TextView> 
    27          
    28         </TableRow> 
    29  
    30  
    31         <TableRow android:id="@+id/TableRow02" android:layout_height="wrap_content" android:layout_width="fill_parent"> 
    32                 <TextView 
     27</TableRow> 
     28<TableRow> 
     29<TextView 
     30android:id="@+id/txv_formname" 
    3331android:layout_width="wrap_content" 
    3432android:layout_height="wrap_content" 
    3533android:text="@+string/txv_formname" 
    36 android:id="@+id/txv_formname"> 
     34android:padding="3dip" 
     35android:layout_weight="1"> 
    3736</TextView> 
    3837<TextView 
     38android:id="@+id/txv_formprefix" 
    3939android:layout_width="wrap_content" 
    4040android:layout_height="wrap_content" 
    4141android:text="@+string/txv_formprefix" 
    42 android:id="@+id/txv_formprefix"> 
     42android:padding="3dip" 
     43android:layout_weight="1"> 
    4344</TextView> 
    44                  
    45                 </TableRow> 
    46                  
    47                 <TextView 
     45</TableRow> 
     46<TextView 
     47android:id="@+id/lbl_description" 
    4848android:layout_width="wrap_content" 
    4949android:layout_height="wrap_content" 
    50  
    5150android:text="@string/lbl_description" 
    52 android:id="@+id/lbl_description"> 
     51android:padding="3dip" 
     52android:textStyle="bold"> 
    5353</TextView> 
    5454<TextView 
     55android:id="@+id/txv_description" 
    5556android:layout_width="fill_parent" 
    5657android:layout_height="wrap_content" 
    5758android:text="@+string/txv_description" 
    58 android:id="@+id/txv_description"> 
     59android:padding="3dip" 
     60> 
    5961</TextView> 
    60 </TableLayout> 
    61  
    62  
    6362<LinearLayout 
    6463android:id="@+id/FormFieldsLayout" 
    6564android:layout_width="fill_parent" 
    6665android:layout_height="wrap_content" 
    67 android:orientation="vertical" > 
     66android:orientation="vertical" 
     67> 
    6868<TextView 
     69android:id="@+id/lbl_fields" 
    6970android:layout_width="fill_parent" 
    7071android:layout_height="wrap_content" 
     72android:text="@string/lbl_fields" 
    7173style="?android:attr/listSeparatorTextViewStyle" 
    72 android:text="@string/lbl_fields" 
    73 android:id="@+id/lbl_fields"> 
     74> 
    7475</TextView> 
    7576<ListView 
     77android:id="@+id/lsv_fields" 
    7678android:layout_width="fill_parent" 
    7779android:layout_height="wrap_content" 
    78 android:id="@+id/lsv_fields"> 
     80> 
    7981</ListView> 
    8082</LinearLayout> 
    81 </LinearLayout> 
     83</TableLayout> 
  • trunk/rapidandroid/org.rapidandroid/res/values/colors.xml

    r96 r97  
    3131 
    3232<color name="background_red">#C14747</color> 
     33<color name="background_gray">#636363</color> 
    3334</resources> 
  • trunk/rapidandroid/org.rapidandroid/res/values/strings.xml

    r96 r97  
    33    <string name="hello">Hello World, rapidandroid</string> 
    44    <string name="app_name">RapidAndroid</string> 
    5 <string name="lbl_formname">Name:</string> 
    6 <string name="lbl_description">Description:</string> 
    7 <string name="lbl_formprefix">Prefix:</string> 
     5<string name="lbl_formname">Name</string> 
     6<string name="lbl_description">Description</string> 
     7<string name="lbl_formprefix">Prefix</string> 
    88<string name="lbl_formchoose">Forms:</string> 
    99<string name="lbl_dashboardmessages">Recent Messages:</string> 
     
    4141<string name="lbl_chart_datasummary">Data Summary:</string> 
    4242<string name="lbl_chart_totalmessages">Total Messages:</string> 
     43<string name="btn_daterange_startdate">Start Date</string> 
     44<string name="btn_daterange_enddate">End Date</string> 
     45<string name="range_btn_lastthreemonth">End Date</string> 
    4346</resources> 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/ChartData.java

    r94 r97  
    173173                Date endDate = new Date(); 
    174174                if(mForm != null) { 
    175                         ParsedDataReporter pdr = new ParsedDataReporter(this); 
    176                         endDate = pdr.getOldestMessage(mForm);           
    177                         pdr.done(); 
     175                        endDate = ParsedDataReporter.getOldestMessageDate(this,mForm);                   
    178176                } else { 
    179177                        endDate = MessageDataReporter.getOldestMessageDate(this); 
    180178                } 
    181179                 
    182                 i.putExtra(DateRange.CallParams.ACTIVITY_ARG_ENDDATE, Message.SQLDateFormatter.format(endDate)); 
     180                i.putExtra(DateRange.CallParams.ACTIVITY_ARG_STARTDATE, Message.SQLDateFormatter.format(endDate)); 
    183181                startActivityForResult(i, ACTIVITY_DATERANGE);   
    184182                 
     
    199197                        if(extras != null) { 
    200198                                try { 
    201                                         Date startDate = Message.DisplayDateTimeFormat.parse(extras.getString(DateRange.ResultParams.RESULT_START_DATE)); 
    202                                         Date endDate = Message.DisplayDateTimeFormat.parse(extras.getString(DateRange.ResultParams.RESULT_END_DATE)); 
     199                                        Date startDate = Message.SQLDateFormatter.parse(extras.getString(DateRange.ResultParams.RESULT_START_DATE)); 
     200                                        Date endDate = Message.SQLDateFormatter.parse(extras.getString(DateRange.ResultParams.RESULT_END_DATE)); 
    203201                                        mBroker.setRange(startDate, endDate); 
    204202                                        mBroker.loadGraph(); 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/Dashboard.java

    r96 r97  
    1313import org.rapidandroid.data.controller.ParsedDataReporter; 
    1414import org.rapidandroid.view.SingleRowHeaderView; 
    15 import org.rapidandroid.view.adapter.FormDataCursorAdapter; 
     15import org.rapidandroid.view.adapter.FormDataGridCursorAdapter; 
    1616import org.rapidandroid.view.adapter.MessageCursorAdapter; 
    1717import org.rapidandroid.view.adapter.SummaryCursorAdapter; 
     18import org.rapidsms.java.core.Constants; 
    1819import org.rapidsms.java.core.model.Form; 
    1920import org.rapidsms.java.core.model.Message; 
    2021 
    2122import android.app.Activity; 
     23import android.app.AlertDialog; 
     24import android.app.Dialog; 
     25import android.app.AlertDialog.Builder; 
    2226import android.content.Intent; 
    2327import android.database.Cursor; 
     
    2529import android.os.Bundle; 
    2630import android.os.Handler; 
     31import android.util.DisplayMetrics; 
    2732import android.view.ContextMenu; 
    2833import android.view.Menu; 
     
    5358        private SingleRowHeaderView headerView; 
    5459        private SummaryCursorAdapter summaryView;  
    55         private FormDataCursorAdapter rowView; 
     60        private FormDataGridCursorAdapter rowView; 
    5661        private MessageCursorAdapter messageCursorAdapter; 
    5762         
     
    102107        private Date mStartDate; 
    103108        private Date mEndDate; 
     109        private int mScreenWidth; 
    104110         
    105111         
     
    146152                ListView lsv = (ListView) findViewById(R.id.lsv_dashboardmessages); 
    147153 
    148                  
     154                DisplayMetrics dm = new DisplayMetrics(); 
     155            getWindowManager().getDefaultDisplay().getMetrics(dm); 
     156            mScreenWidth = dm.widthPixels - 8; 
     157             
    149158                lsv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    150159                 
     
    173182                 
    174183                //by default on startup: 
     184                mEndDate = new Date(); 
    175185                mStartDate = new Date(); 
    176                 mEndDate = new Date(); 
    177                 mEndDate.setDate(mStartDate.getDate() - 1); 
     186                mStartDate.setDate(mEndDate.getDate() - 1); 
    178187        } 
    179188 
     
    192201                case ACTIVITY_CREATE: 
    193202                        // we should do an update of the view 
    194                         loadFormSpinner(); 
     203                        loadFormSpinner();               
     204                        resetCursor = true; 
     205                        beginListViewReload(); 
    195206                        break; 
    196207                case ACTIVITY_FORM_REVIEW: 
    197208//                      dialogMessage = "Activity Done"; 
    198209//                      showDialog(12); 
     210                        resetCursor = true; 
     211                        beginListViewReload(); 
    199212                        break; 
    200213                case ACTIVITY_CHARTS: 
    201214//                      dialogMessage = "Activity Done"; 
    202215//                      showDialog(13); 
     216                        resetCursor = true; 
     217                        beginListViewReload(); 
    203218                        break; 
    204219                case ACTIVITY_DATERANGE: 
    205220                                if (extras != null) { 
    206221                                        try { 
    207                                                 this.mStartDate = Message.DisplayDateTimeFormat.parse(extras.getString(DateRange.ResultParams.RESULT_START_DATE)); 
    208                                                 this.mEndDate = Message.DisplayDateTimeFormat 
    209                                                                                                                                 .parse(extras 
    210                                                                                                                                                                 .getString(DateRange.ResultParams.RESULT_END_DATE)); 
     222                                                mStartDate = Message.SQLDateFormatter.parse(extras.getString(DateRange.ResultParams.RESULT_START_DATE)); 
     223                                                mEndDate = Message.SQLDateFormatter.parse(extras.getString(DateRange.ResultParams.RESULT_END_DATE)); 
    211224                                        } catch (ParseException e) { 
    212225                                                // TODO Auto-generated catch block 
     
    300313                Date endDate = new Date(); 
    301314                if(mChosenForm != null) { 
    302                         ParsedDataReporter pdr = new ParsedDataReporter(this); 
    303                         if(this.mListviewCursor.getCount() == 0) { 
    304                                  
    305                         } else { 
    306                                 endDate = pdr.getOldestMessage(this.mChosenForm); 
    307                         } 
    308                         pdr.done(); 
    309                 } else { 
     315                        endDate = ParsedDataReporter.getOldestMessageDate(this,mChosenForm);             
     316                        if(endDate.equals(Constants.NULLDATE)) { 
     317                                Builder noDateDialog = new AlertDialog.Builder(this); 
     318                                noDateDialog.setPositiveButton("Ok", null); 
     319                                noDateDialog.setTitle("Alert"); 
     320                                noDateDialog.setMessage("This form has no messages or data to chart"); 
     321                                noDateDialog.show(); 
     322                                return; 
     323                        } 
     324                } 
     325                else { 
    310326                        endDate = MessageDataReporter.getOldestMessageDate(this); 
    311327                } 
    312                 i.putExtra(DateRange.CallParams.ACTIVITY_ARG_ENDDATE, Message.SQLDateFormatter.format(endDate)); 
     328                i.putExtra(DateRange.CallParams.ACTIVITY_ARG_STARTDATE, Message.SQLDateFormatter.format(endDate)); 
    313329                startActivityForResult(i, ACTIVITY_DATERANGE);   
    314330                 
     
    332348        private void startActivityChart() { 
    333349                Intent i = new Intent(this, ChartData.class); 
    334                  
    335                 if(mChosenForm != null && !mShowAllMessages && !mShowMonitors) { 
    336                         i.putExtra(ChartData.CallParams.CHART_FORM, mChosenForm.getFormId());                    
    337                 } else if(mShowAllMessages && !mShowMonitors) { 
    338                         //show the messages 
     350 
     351                // we want to chart for a form 
     352                if (mChosenForm != null && !mShowAllMessages && !mShowMonitors) { 
     353                        Date endDate = new Date(); 
     354                        endDate = ParsedDataReporter.getOldestMessageDate(this,mChosenForm);     
     355                        if(endDate.equals(Constants.NULLDATE)) { 
     356                                Builder noDateDialog = new AlertDialog.Builder(this); 
     357                                noDateDialog.setPositiveButton("Ok", null); 
     358                                noDateDialog.setTitle("Alert"); 
     359                                noDateDialog.setMessage("This form has no messages or data to chart"); 
     360                                noDateDialog.show(); 
     361                                return; 
     362                        } 
     363 
     364                        i.putExtra(ChartData.CallParams.CHART_FORM, mChosenForm 
     365                                                        .getFormId()); 
     366                } else if (mShowAllMessages && !mShowMonitors) { 
     367                        // Chart for messages 
    339368                        i.putExtra(ChartData.CallParams.CHART_MESSAGES, true); 
    340369                } else if (mShowMonitors && !mShowAllMessages) { 
    341                         //show all the monitrors 
     370                        //Chart for monitors 
    342371                }                
    343372                i.putExtra(ChartData.CallParams.START_DATE, Message.SQLDateFormatter.format(mStartDate)); 
     
    408437    private void finishListViewReload() { 
    409438        TextView lbl_recents = (TextView) findViewById(R.id.lbl_dashboardmessages); 
    410         lbl_recents.setText("Messages: " + Message.DisplayShortDateFormat.format(mEndDate) + " to " + Message.DisplayShortDateFormat.format(mStartDate)); 
     439        lbl_recents.setText("Messages: " + Message.DisplayShortDateFormat.format(mStartDate) + "-" + Message.DisplayShortDateFormat.format(mEndDate)); 
    411440         
    412441        ListView lsv = (ListView) findViewById(R.id.lsv_dashboardmessages);              
     
    451480        if(mListviewCursor == null) { 
    452481                if(mChosenForm != null && !mShowAllMessages && !mShowMonitors) { 
    453                         String whereclause = " rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mEndDate) + "' AND time < '" + Message.SQLDateFormatter.format(mStartDate) + "'"; 
     482                        String whereclause = " rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mStartDate) + "' AND time < '" + Message.SQLDateFormatter.format(mEndDate) + "'"; 
    454483                        mListviewCursor = getContentResolver().query(Uri.parse(RapidSmsDBConstants.FormData.CONTENT_URI_PREFIX + mChosenForm.getFormId()), null,whereclause,null,null); 
    455484                         
    456485                } else if(mShowAllMessages && mChosenForm == null && !mShowMonitors) { 
    457                         String whereclause = "time > '" + Message.SQLDateFormatter.format(mEndDate) + "' AND time < '" + Message.SQLDateFormatter.format(mStartDate) + "'"; 
     486                        String whereclause = "time > '" + Message.SQLDateFormatter.format(mStartDate) + "' AND time < '" + Message.SQLDateFormatter.format(mEndDate) + "'"; 
    458487                        mListviewCursor = getContentResolver().query(RapidSmsDBConstants.Message.CONTENT_URI, null, whereclause, null, "time DESC"); 
    459488                         
     
    498527                                        lsv.setAdapter(summaryView); 
    499528                                } else if(this.formViewMode == Dashboard.LISTVIEW_MODE_TABLE_VIEW) { 
    500                                         rowView = new FormDataCursorAdapter(this, mChosenForm, mListviewCursor); 
     529                                        rowView = new FormDataGridCursorAdapter(this, mChosenForm, mListviewCursor, mScreenWidth); 
    501530                                        lsv.setAdapter(rowView);                                         
    502531                                } 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/DateRange.java

    r94 r97  
    99 
    1010import android.app.Activity; 
     11import android.app.DatePickerDialog; 
     12import android.app.Dialog; 
     13import android.app.TimePickerDialog; 
    1114import android.content.Intent; 
    1215import android.os.Bundle; 
     
    1619import android.view.View.OnClickListener; 
    1720import android.widget.Button; 
     21import android.widget.DatePicker; 
    1822import android.widget.SeekBar; 
    1923import android.widget.TextView; 
     
    3741                 * How far back does this dataset go back in time. 
    3842                 */ 
    39                 public static final String ACTIVITY_ARG_ENDDATE = "enddate"; 
     43                public static final String ACTIVITY_ARG_STARTDATE = "startdate"; 
    4044         
    4145        } 
     
    5559         
    5660 
    57         private Date mStartNow; 
    58         private Date mAbsoluteEndDate; 
    59          
    60         private SeekBar seekEnd; 
    61         private SeekBar seekStart; 
    62  
     61        private Date mStartDate; 
     62        private Date mEndDate; 
     63         
    6364        private TextView txvStartDate; 
    6465        private TextView txvEndDate; 
     
    6667        private static final int MENU_DONE = Menu.FIRST; 
    6768        private static final int MENU_CANCEL = Menu.FIRST + 1; 
     69         
     70 
     71    private int mStartYear; 
     72    private int mStartMonth; 
     73    private int mStartDay; 
     74 
     75    private int mEndYear; 
     76    private int mEndMonth; 
     77    private int mEndDay; 
     78     
     79  
     80 
     81         
     82        static final int DATE_DIALOG_START_ID = 0; 
     83        static final int DATE_DIALOG_END_ID = 1; 
    6884 
    6985        @Override 
     
    7793 
    7894                if (extras != null) { 
    79                         if(!extras.containsKey(CallParams.ACTIVITY_ARG_ENDDATE)) { 
    80                                 throw new IllegalArgumentException("This activity must be called with an appropriate enddate"); 
    81                         } 
    82                         String datestring = extras.getString(CallParams.ACTIVITY_ARG_ENDDATE); 
     95                        if(!extras.containsKey(CallParams.ACTIVITY_ARG_STARTDATE)) { 
     96                                throw new IllegalArgumentException("This activity must be called with an appropriate startdate in the past."); 
     97                        } 
     98                        String datestring = extras.getString(CallParams.ACTIVITY_ARG_STARTDATE); 
    8399                        try { 
    84                                 mStartNow = new Date(); 
    85                                 mAbsoluteEndDate = Message.SQLDateFormatter.parse(datestring); 
     100                                mStartDate =  Message.SQLDateFormatter.parse(datestring); 
     101                                mEndDate = new Date();  //now 
    86102 
    87103                        } catch (Exception ex) { 
     
    89105                        } 
    90106                }  
    91                 setSliders(); 
    92         } 
    93  
    94         private void setSliders() { 
    95  
    96         } 
     107                 
     108                txvStartDate = (TextView)findViewById(R.id.txv_startdate); 
     109                txvEndDate = (TextView)findViewById(R.id.txv_enddate); 
     110                Calendar s = Calendar.getInstance(); 
     111                s.setTime(mStartDate); 
     112                Calendar e = Calendar.getInstance(); 
     113                e.setTime(mEndDate); 
     114                 
     115                 
     116        setUpdateCalendar(s,e); 
     117        } 
     118         
     119        private void setUpdateCalendar(Calendar s, Calendar e) {                 
     120                mStartYear = s.get(Calendar.YEAR); 
     121                mStartMonth = s.get(Calendar.MONTH); 
     122                mStartDay = s.get(Calendar.DAY_OF_MONTH);                
     123                 
     124                mEndYear = e.get(Calendar.YEAR); 
     125                mEndMonth = e.get(Calendar.MONTH); 
     126                mEndDay = e.get(Calendar.DAY_OF_MONTH); 
     127                updateDisplay(); 
     128        } 
     129         
     130         
     131        private void updateDisplay() { 
     132                txvStartDate.setText( 
     133                    new StringBuilder() 
     134                            // Month is 0 based so add 1 
     135                            .append(mStartMonth + 1).append("-") 
     136                            .append(mStartDay).append("-") 
     137                            .append(mStartYear)); 
     138                 
     139                txvEndDate.setText( 
     140                    new StringBuilder() 
     141                            // Month is 0 based so add 1 
     142                            .append(mEndMonth + 1).append("-") 
     143                            .append(mEndDay).append("-") 
     144                            .append(mEndYear)); 
     145        } 
     146         
     147        private DatePickerDialog.OnDateSetListener mStartDateSetListener = 
     148        new DatePickerDialog.OnDateSetListener() { 
     149 
     150            public void onDateSet(DatePicker view, int year, int monthOfYear, 
     151                    int dayOfMonth) { 
     152                mStartYear = year; 
     153                mStartMonth = monthOfYear; 
     154                mStartDay = dayOfMonth; 
     155                updateDisplay(); 
     156            } 
     157        }; 
     158 
     159        private DatePickerDialog.OnDateSetListener mEndDateSetListener = 
     160            new DatePickerDialog.OnDateSetListener() { 
     161 
     162                public void onDateSet(DatePicker view, int year, int monthOfYear, 
     163                        int dayOfMonth) { 
     164                    mEndYear = year; 
     165                    mEndMonth = monthOfYear; 
     166                    mEndDay = dayOfMonth; 
     167                    updateDisplay(); 
     168                } 
     169            }; 
     170 
     171         
     172        @Override 
     173    protected void onPrepareDialog(int id, Dialog dialog) { 
     174        switch (id) {            
     175            case DATE_DIALOG_START_ID: 
     176                ((DatePickerDialog) dialog).updateDate(mStartYear, mStartMonth, mStartDay); 
     177                break; 
     178            case DATE_DIALOG_END_ID: 
     179                ((DatePickerDialog) dialog).updateDate(mEndYear, mEndMonth, mEndDay); 
     180                break; 
     181        } 
     182        } 
     183 
     184        @Override 
     185        protected Dialog onCreateDialog(int id) { 
     186                switch (id) { 
     187                case DATE_DIALOG_START_ID: 
     188                        return new DatePickerDialog(this, mStartDateSetListener, 
     189                                        mStartYear, mStartMonth, mStartDay); 
     190                case DATE_DIALOG_END_ID: 
     191                        return new DatePickerDialog(this, mEndDateSetListener, mEndYear, 
     192                                        mEndMonth, mEndDay); 
     193                } 
     194                return null; 
     195    } 
    97196 
    98197         
    99198 
    100199        private void setEventListeners() { 
    101                 seekEnd = (SeekBar) findViewById(R.id.range_endseek); 
    102  
    103                 seekEnd.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
    104  
    105                         public void onProgressChanged(SeekBar seekBar, int progress, 
    106                                         boolean fromTouch) { 
    107                                 updateDisplayFromSliders(); 
    108  
    109                         } 
    110  
    111                         public void onStartTrackingTouch(SeekBar seekBar) { 
    112                                 updateDisplayFromSliders(); 
    113  
    114                         } 
    115  
    116                         public void onStopTrackingTouch(SeekBar seekBar) { 
    117                                 updateDisplayFromSliders(); 
    118                         } 
    119  
    120                 }); 
    121  
    122                 seekStart = (SeekBar) findViewById(R.id.range_startseek); 
    123                 seekStart.setSecondaryProgress(seekEnd.getProgress()); 
    124                 seekStart.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
    125  
    126                         public void onProgressChanged(SeekBar seekBar, int progress, 
    127                                         boolean fromTouch) { 
    128                                 updateDisplayFromSliders(); 
    129  
    130                         } 
    131  
    132                         public void onStartTrackingTouch(SeekBar seekBar) { 
    133                                 updateDisplayFromSliders(); 
    134                         } 
    135  
    136                         public void onStopTrackingTouch(SeekBar seekBar) { 
    137                                 updateDisplayFromSliders(); 
     200                Button btnStartDate = (Button) findViewById(R.id.range_btn_startdate); 
     201                btnStartDate.setOnClickListener(new OnClickListener() { 
     202 
     203                        public void onClick(View v) { 
     204                                  showDialog(DATE_DIALOG_START_ID); 
     205                        } 
     206 
     207                }); 
     208                 
     209                 
     210                Button btnEndDate = (Button) findViewById(R.id.range_btn_enddate); 
     211                btnEndDate.setOnClickListener(new OnClickListener() { 
     212 
     213                        public void onClick(View v) { 
     214                                showDialog(DATE_DIALOG_END_ID); 
    138215                        } 
    139216 
     
    145222                        public void onClick(View v) { 
    146223                                // TODO Auto-generated method stub 
    147                                 Calendar delta = Calendar.getInstance(); 
    148                                 delta.setTimeInMillis(mStartNow.getTime()); 
    149                                 delta.set(Calendar.DATE, delta.get(Calendar.DATE) - 30); 
    150                                 updateDisplayFromDate(delta); 
     224                                Calendar newEnd = Calendar.getInstance(); 
     225                                Calendar newStart = Calendar.getInstance();  
     226                                newStart.set(Calendar.DATE, newEnd.get(Calendar.DATE) - 30); 
     227                                setUpdateCalendar(newStart,newEnd); 
     228                                 
    151229                        } 
    152230 
     
    156234 
    157235                        public void onClick(View v) { 
    158                                 Calendar delta = Calendar.getInstance(); 
    159                                 delta.setTimeInMillis(mStartNow.getTime()); 
    160                                 delta.set(Calendar.DATE, delta.get(Calendar.DATE) - 7); 
    161                                 updateDisplayFromDate(delta); 
     236                                Calendar newEnd = Calendar.getInstance(); 
     237                                Calendar newStart = Calendar.getInstance();  
     238                                newStart.set(Calendar.DATE, newEnd.get(Calendar.DATE) - 7); 
     239                                setUpdateCalendar(newStart,newEnd); 
    162240 
    163241                        } 
     
    168246 
    169247                        public void onClick(View v) { 
    170                                 Calendar delta = Calendar.getInstance(); 
    171                                 delta.setTimeInMillis(mStartNow.getTime()); 
    172                                 delta.set(Calendar.DATE, delta.get(Calendar.DATE) - 1); 
    173                                 updateDisplayFromDate(delta); 
    174                         } 
    175                 }); 
    176         } 
    177  
    178         private void updateDisplayFromDate(Calendar delta) { 
    179                 long tickDelta = mStartNow.getTime() - mAbsoluteEndDate.getTime(); 
    180                 long increment = tickDelta / 100; 
    181                 long slice = mStartNow.getTime() - delta.getTimeInMillis(); 
    182  
    183                 if (increment > 0) { 
    184                         int ticks = (int) (slice / increment); 
    185                         seekStart.setProgress(0); 
    186                         seekEnd.setProgress(ticks); 
    187                         seekStart.setSecondaryProgress(seekEnd.getProgress());                   
    188                          
    189                         txvStartDate = (TextView) findViewById(R.id.txv_startdate); 
    190                         txvStartDate.setText(Message.DisplayDateTimeFormat.format(mStartNow 
    191                                         .getTime() 
    192                                         - (seekStart.getProgress() * increment))); 
    193  
    194                         txvEndDate = (TextView) findViewById(R.id.txv_enddate); 
    195                         txvEndDate.setText(Message.DisplayDateTimeFormat.format(delta.getTimeInMillis())); 
    196                          
    197                 } 
    198         } 
    199  
    200         private void updateDisplayFromSliders() { 
    201                 // Let's make sure the displays are ok 
    202                 if (seekEnd.getProgress() < seekStart.getProgress()) { 
    203                         seekEnd.setProgress(seekStart.getProgress()); 
    204                 } 
    205                 seekStart.setSecondaryProgress(seekEnd.getProgress()); 
    206                 long tickDelta = mStartNow.getTime() - mAbsoluteEndDate.getTime(); 
    207                 long increment = tickDelta / 100; 
    208                  
    209                 if (increment > 0) { 
    210                         txvStartDate = (TextView) findViewById(R.id.txv_startdate); 
    211                         txvStartDate.setText(Message.DisplayDateTimeFormat.format(mStartNow 
    212                                         .getTime() 
    213                                         - (seekStart.getProgress() * increment))); 
    214  
    215                         txvEndDate = (TextView) findViewById(R.id.txv_enddate); 
    216                         txvEndDate.setText(Message.DisplayDateTimeFormat.format(mStartNow 
    217                                         .getTime() 
    218                                         - (seekEnd.getProgress() * increment))); 
    219                 } 
    220                  
    221         } 
     248                                Calendar newEnd = Calendar.getInstance(); 
     249                                Calendar newStart = Calendar.getInstance();  
     250                                newStart.set(Calendar.DATE, newEnd.get(Calendar.DATE) - 1); 
     251                                setUpdateCalendar(newStart,newEnd); 
     252                        } 
     253                }); 
     254                 
     255                Button btnThreeMonth = (Button) findViewById(R.id.range_btn_last_threemonth); 
     256                btnThreeMonth.setOnClickListener(new OnClickListener() { 
     257 
     258                        public void onClick(View v) { 
     259                                Calendar newEnd = Calendar.getInstance(); 
     260                                Calendar newStart = Calendar.getInstance();  
     261                                newStart.set(Calendar.MONTH, newEnd.get(Calendar.MONTH) - 3); 
     262                                setUpdateCalendar(newStart,newEnd); 
     263                        } 
     264                }); 
     265        } 
     266 
     267         
     268 
     269         
    222270 
    223271        @Override 
     
    238286                case MENU_DONE: 
    239287                        Intent ret = new Intent(); 
     288                        Calendar finalStart = Calendar.getInstance(); 
     289                        finalStart.set(mStartYear, mStartMonth, mStartDay); 
     290                                                 
     291                        Calendar finalEnd= Calendar.getInstance(); 
     292                        finalEnd.set(mEndYear, mEndMonth, mEndDay); 
    240293                         
    241                         txvStartDate = (TextView) findViewById(R.id.txv_startdate); 
    242                          
    243  
    244                         txvEndDate = (TextView) findViewById(R.id.txv_enddate); 
    245                          
    246                         ret.putExtra(ResultParams.RESULT_START_DATE, txvStartDate.getText().toString()); 
    247                         ret.putExtra(ResultParams.RESULT_END_DATE, txvEndDate.getText().toString()); 
     294                        ret.putExtra(ResultParams.RESULT_START_DATE, Message.SQLDateFormatter.format(finalStart.getTime())); 
     295                        ret.putExtra(ResultParams.RESULT_END_DATE, Message.SQLDateFormatter.format(finalEnd.getTime())); 
    248296                        setResult(ACTIVITYRESULT_DATERANGE, ret); 
    249297                        finish(); 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/FormReviewer.java

    r94 r97  
    3333import org.rapidandroid.data.RapidSmsDBConstants; 
    3434import org.rapidandroid.data.controller.ParsedDataReporter; 
     35import org.rapidsms.java.core.Constants; 
    3536import org.rapidsms.java.core.model.Field; 
    3637import org.rapidsms.java.core.model.Form; 
     
    4344import android.app.AlertDialog; 
    4445import android.app.Dialog; 
     46import android.app.AlertDialog.Builder; 
    4547import android.content.ContentValues; 
    4648import android.content.Context; 
     
    186188                        return true; 
    187189                case MENU_DUMP_CSV: 
     190                        if(ParsedDataReporter.getOldestMessageDate(this, mForm).equals(Constants.NULLDATE)) { 
     191                                Builder noDateDialog = new AlertDialog.Builder(this); 
     192                                noDateDialog.setPositiveButton("Ok", null); 
     193                                noDateDialog.setTitle("Alert"); 
     194                                noDateDialog.setMessage("This form has no messages or data to output"); 
     195                                noDateDialog.show(); 
     196                                return true; 
     197                        } 
     198                         
    188199                        outputCSV(); 
    189200                        break; 
     
    321332                Thread t = new Thread() { 
    322333                        public void run() { 
    323                                 ParsedDataReporter pdr = new ParsedDataReporter( 
    324                                                 getBaseContext()); 
    325334                                Calendar now = Calendar.getInstance(); 
    326                                 Calendar then = Calendar.getInstance(); 
     335                                Calendar then = Calendar.getInstance();                                                          
    327336                                then.set(Calendar.YEAR, 1990); 
    328  
    329                                 pdr.exportFormDataToCSV(mForm, then, now); 
     337                                ParsedDataReporter.exportFormDataToCSV(getBaseContext(), mForm, then, now); 
    330338                                mDebugHandler.post(mCsvSaveCompleted); 
     339                                 
    331340                        } 
    332341                }; 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/chart/form/FormDataBroker.java

    r94 r97  
    105105                 
    106106                if(mStartDate.compareTo(Constants.NULLDATE) != 0 && mEndDate.compareTo(Constants.NULLDATE) != 0) { 
    107                         rawQuery.append(" WHERE rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mEndDate) + "' AND rapidandroid_message.time < '" + Message.SQLDateFormatter.format(mStartDate) + "' "); 
     107                        rawQuery.append(" WHERE rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mStartDate) + "' AND rapidandroid_message.time < '" + Message.SQLDateFormatter.format(mEndDate) + "' "); 
    108108                } 
    109109 
     
    194194                 
    195195                if(mStartDate.compareTo(Constants.NULLDATE) != 0 && mEndDate.compareTo(Constants.NULLDATE) != 0) { 
    196                         rawQuery.append(" WHERE rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mEndDate) + "' AND rapidandroid_message.time < '" + Message.SQLDateFormatter.format(mStartDate) + "' "); 
     196                        rawQuery.append(" WHERE rapidandroid_message.time > '" + Message.SQLDateFormatter.format(mStartDate) + "' AND rapidandroid_message.time < '" + Message.SQLDateFormatter.format(mEndDate) + "' "); 
    197197                } 
    198198 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/activity/chart/message/MessageDataBroker.java

    r94 r97  
    9191 
    9292                if(mStartDate.compareTo(Constants.NULLDATE) != 0 && mEndDate.compareTo(Constants.NULLDATE) != 0) { 
    93                         rawQuery.append(" WHERE time > '" + Message.SQLDateFormatter.format(mEndDate) + "' AND time < '" + Message.SQLDateFormatter.format(mStartDate) + "' "); 
     93                        rawQuery.append(" WHERE time > '" + Message.SQLDateFormatter.format(mStartDate) + "' AND time < '" + Message.SQLDateFormatter.format(mEndDate) + "' "); 
    9494                } 
    9595                 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/data/controller/ParsedDataReporter.java

    r94 r97  
    1616import org.rapidandroid.data.RapidSmsDBConstants; 
    1717import org.rapidandroid.data.SmsDbHelper; 
     18import org.rapidsms.java.core.Constants; 
    1819import org.rapidsms.java.core.model.Form; 
    1920import org.rapidsms.java.core.model.Message; 
     
    3334public class ParsedDataReporter { 
    3435 
    35         SmsDbHelper mHelper; 
    36         Context mContext; 
    37          
    3836        private String[] messageColumns = new String[] {"message_time", "monitor_id", "monitor_phone", "message_text"}; 
    3937         
    40         public Date getOldestMessage(Form f) { 
     38        public synchronized static Date getOldestMessageDate(Context context, Form f) { 
     39                SmsDbHelper mHelper = new SmsDbHelper(context); 
    4140                StringBuilder query = new StringBuilder(); 
    4241                query.append("select min(rapidandroid_message.time) ");          
     
    4847                 
    4948                Cursor cr = mHelper.getReadableDatabase().rawQuery(query.toString(), null); 
     49                if(cr.getCount() == 0) { 
     50                        mHelper.close(); 
     51                        cr.close(); 
     52                        return Constants.NULLDATE; 
     53                         
     54                } 
    5055                cr.moveToFirst(); 
    5156                String dateString = cr.getString(0); 
     57                 
     58                if(dateString == null) { 
     59                        mHelper.close(); 
     60                        cr.close(); 
     61                        return Constants.NULLDATE; 
     62                } 
     63                 
    5264                Date ret = new Date(); 
    5365                try { 
     
    5870                }                
    5971                cr.close(); 
     72                mHelper.close(); 
    6073                return ret; 
    6174        } 
    6275         
    63         public ParsedDataReporter(Context context) { 
    64                 mHelper = new SmsDbHelper(context); 
    65                 mContext = context; 
    66         } 
    67          
    68         public void done() { 
    69                 mHelper.close(); 
    70         } 
    71         public void exportFormDataToCSV(Form f, Calendar startDate, Calendar endDate) { 
    72  
     76        public synchronized static void exportFormDataToCSV(Context context, Form f, Calendar startDate, Calendar endDate) { 
     77                SmsDbHelper mHelper = new SmsDbHelper(context); 
    7378                //build the query 
    7479                StringBuilder query = new StringBuilder(); 
     
    133138                finally { 
    134139                        cr.close(); 
     140                        mHelper.close(); 
    135141                        if(fOut != null) { 
    136142                                try { 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/view/SingleGridRowView.java

    r90 r97  
    33import java.util.Vector; 
    44 
    5 import android.R; 
     5 
    66import android.content.Context; 
    77import android.database.Cursor; 
     8import android.graphics.Color; 
     9import android.text.TextUtils.TruncateAt; 
    810import android.view.Gravity; 
     11import android.view.ViewGroup; 
     12import android.widget.LinearLayout; 
    913import android.widget.TableLayout; 
    1014import android.widget.TableRow; 
     
    1620 * Summary: 
    1721 */ 
    18 public class SingleRowView extends TableLayout { 
     22public class SingleGridRowView extends TableLayout { 
    1923 
    2024        private int mColCount; 
    2125         
    2226        TableRow mRow; 
    23         TextView mMessageIDCol; 
    24         TextView mMonitorCol; 
     27        //TextView mMessageIDCol; 
     28        //TextView mMonitorCol; 
    2529        Vector<TextView> mDataCols; 
    2630        boolean isOdd = false; 
     31        private int mColWidth; 
    2732         
    2833        /** 
    2934         * @param context 
    3035         */ 
    31         public SingleRowView(Context context, Cursor c) { 
     36        public SingleGridRowView(Context context, Cursor c, int colwidth) { 
    3237                super(context); 
    33                 int itemCounter = 0;  
     38                mColWidth = colwidth; 
    3439                 
    35                 context.setTheme(R.style.Theme_Translucent); 
    36                 mColCount =  c.getColumnCount(); 
     40                mColCount =  c.getColumnCount()-2; 
    3741                 
    3842                mRow = new TableRow(context); 
    39                 mRow.setGravity(Gravity.LEFT); 
     43 
    4044                isOdd = (c.getPosition() % 2) == 1 ; 
    4145                if(isOdd) { 
    42                         mRow.setBackgroundColor(android.R.color.background_light); 
     46                        mRow.setBackgroundColor(org.rapidandroid.R.color.background_gray); 
    4347                } else { 
    44                         mRow.setBackgroundColor(android.R.color.background_dark); 
     48                        //mRow.setBackgroundColor(android.R.color.background_dark); 
    4549                } 
    46                 mMessageIDCol = new TextView(context); 
     50                //mMessageIDCol = new TextView(context); 
    4751                //mMessageIDCol.setGravity(Gravity.LEFT); 
    4852                //mMessageIDCol.setWidth(getWidth()/mColCount); 
    4953                //mMessageIDCol.setPadding(3, 3, 3, 3); 
    50                 mRow.addView(mMessageIDCol, itemCounter++); 
     54                //mRow.addView(mMessageIDCol, itemCounter++); 
    5155                 
    52                 mMonitorCol = new TextView(context); 
     56                //mMonitorCol = new TextView(context); 
    5357                //mMonitorCol.setGravity(Gravity.LEFT); 
    5458                //mMonitorCol.setPadding(3, 3, 3, 3); 
    5559                 
    5660                //mMonitorCol.setWidth(getWidth()/mColCount); 
    57                 mRow.addView(mMonitorCol, itemCounter++); 
     61                //mRow.addView(mMonitorCol, itemCounter++); 
    5862                 
    5963                mDataCols = new Vector<TextView>(); 
    6064                 
    61                 for(int i = 0; i < mColCount -2; i++) { 
     65                for(int i = 0; i < mColCount; i++) { 
    6266                        TextView coldata = new TextView(getContext()); 
    63                         //coldata.setPadding(3, 3, 3, 3); 
    64                         //coldata.setWidth(getWidth()/mColCount); 
    65                         //coldata.setGravity(Gravity.LEFT); 
    66                         //coldata.setText("null");                       
     67                        coldata.setSingleLine();        //no wrapping bab! 
     68                        coldata.setEllipsize(TruncateAt.END);   //makeit ellipsize instead of spillage!!! 
     69                        coldata.setWidth(mColWidth); 
     70                        coldata.setBackgroundColor(Color.TRANSPARENT); 
     71                         
     72                        coldata.setPadding(0, 4, 0, 4); 
     73                 
    6774                        mDataCols.add(coldata);                  
    68                         mRow.addView(coldata, itemCounter++); 
     75                        mRow.addView(coldata, i);                        
    6976                } 
    7077                 
    71                 //mRow.setWeightSum(itemCounter); 
    72                 addView(mRow); 
    73                  
    74                 for(int i = 0; i < mColCount; i++) { 
    75                         this.setColumnCollapsed(i, false); 
    76                         this.setColumnShrinkable(i, false); 
    77                         this.setColumnStretchable(i, false); 
    78                 } 
    79                  
     78                //mRow.setWeightSum(mColCount); 
     79                addView(mRow);           
    8080                setData(c); 
    8181        } 
    8282         
    83         public void setData(Cursor c) {                          
    84                 mMessageIDCol.setText(c.getString(0) + " | "); 
    85                 mMonitorCol.setText(c.getString(1) + " | "); 
    86                  
    87                 String suffix = " | "; 
    88                 for(int i = 0; i < mColCount - 2; i++) { 
    89                         if(i == mColCount - 3) { 
    90                                 suffix = ""; 
    91                         } 
     83        public void setData(Cursor c) {                  
     84 
     85                for(int i = 0; i < mColCount; i++) { 
    9286                        TextView coldata = mDataCols.get(i); 
    93                         if(c.getString(i+2) == "") { 
    94                                 coldata.setText("(null)" + suffix); 
     87                        if(c.getString(i+2).equals("")) { 
     88                                coldata.setText("(null)"); 
    9589                        } else { 
    96                                 coldata.setText(c.getString(i+2) + suffix); 
     90                                coldata.setText(c.getString(i+2)); 
    9791                        } 
    9892                }                
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/view/SingleRowHeaderView.java

    r74 r97  
    1414 * @author Daniel Myung [email protected] 
    1515 * @created Jan 27, 2009 
    16  * Summary: 
     16 * @deprecated 
    1717 */ 
    1818public class SingleRowHeaderView extends TableLayout { 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/view/SummaryCursorView.java

    r96 r97  
    9292                         
    9393                        TextView txvFieldData = new TextView(getContext()); 
    94                         txvFieldData.setGravity(Gravity.RIGHT); 
     94                        txvFieldData.setGravity(Gravity.LEFT); 
    9595                        txvFieldData.setTextSize(14);                    
    9696                        mFieldValues[i] = txvFieldData; 
     
    102102                         
    103103                        this.addView(row, new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     104                         
    104105                } 
    105106                 
     107                this.setColumnStretchable(0, true); 
     108                this.setColumnStretchable(1, true); 
    106109                //this.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    107110                setMessageTop(formDataCursor); 
  • trunk/rapidandroid/org.rapidandroid/src/org/rapidandroid/view/adapter/FormDataGridCursorAdapter.java

    r74 r97  
    22 
    33 
    4 import org.rapidandroid.view.SingleRowView; 
     4import org.rapidandroid.view.SingleGridRowView; 
    55import org.rapidsms.java.core.model.Form; 
    66 
     
    1717 * Summary: 
    1818 */ 
    19 public class FormDataCursorAdapter extends CursorAdapter { 
     19public class FormDataGridCursorAdapter extends CursorAdapter { 
    2020 
    2121        Form mForm; 
    2222        Context mContext; 
     23        int mWidth; 
     24        int mColWidth; 
    2325         
    2426        /** 
     
    2628         * @param c 
    2729         */ 
    28         public FormDataCursorAdapter(Context context, Form form, Cursor c) { 
     30        public FormDataGridCursorAdapter(Context context, Form form, Cursor c, int screenWidth) { 
    2931                super(context, c); 
    3032                mForm = form;    
    3133                mContext = context; 
     34                mWidth = screenWidth; 
     35                mColWidth = screenWidth/(c.getColumnCount()-2); 
    3236                 
    3337        } 
     
    3943        public void bindView(View view, Context context, Cursor cursor) { 
    4044                if(view != null) { 
    41                         SingleRowView srv = (SingleRowView)view; 
     45                        SingleGridRowView srv = (SingleGridRowView)view; 
    4246                        srv.setData(cursor); 
    4347                } 
     
    5054        @Override 
    5155        public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    52                 SingleRowView srv = new SingleRowView(context, cursor);                  
     56                SingleGridRowView srv = new SingleGridRowView(context, cursor, mColWidth);                       
    5357                return srv;              
    5458        }