package edu.mit.mobile.android.locast.widget; /* * Copyright (C) 2010 MIT Mobile Experience Lab * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import java.sql.Date; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import edu.mit.mobile.android.content.ProviderUtils; import edu.mit.mobile.android.locast.data.Comment; import edu.mit.mobile.android.locast.sync.LocastSyncService; import edu.mit.mobile.android.locast.ver2.R; public class DiscussionBoard extends ListView implements OnClickListener, OnEditorActionListener { public static final String TAG = DiscussionBoard.class.getSimpleName(); private final Context mContext; private final EditText postingTextField; private final Button addPostingButton; private Uri thisThread; private Cursor c; //private WebImageLoader imageLoader; public DiscussionBoard(Context context) { this(context, null); } public DiscussionBoard(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; addHeaderView(LayoutInflater.from(context).inflate(R.layout.discussionboard, this, false)); postingTextField = (EditText) findViewById(R.id.discussionText); postingTextField.setOnEditorActionListener(this); //Initialize Button addPostingButton = (Button) findViewById(R.id.send); addPostingButton.setOnClickListener(this); if (context instanceof Activity){ //imageLoader = ((Application)context.getApplicationContext()).getImageLoader(); } } private static final String[] ADAPTER_FROM = {Comment._AUTHOR, Comment._AUTHOR_ICON, Comment._DESCRIPTION, Comment._MODIFIED_DATE, Comment._COMMENT_NUMBER}; private static final int[] ADAPTER_TO = {R.id.username, R.id.userthumb, R.id.text, R.id.date, R.id.commentnumber}; public class DiscussionBoardAdapter extends SimpleCursorAdapter { public DiscussionBoardAdapter(Context context, Cursor c) { super(context, R.layout.discussionboardentry, c, ADAPTER_FROM, ADAPTER_TO); } @Override public void setViewImage(ImageView v, String value) { if (value != null && value.length() > 0){ // XXX imageLoader.loadImage(v, value); } } @Override public void setViewText(TextView v, String text) { switch (v.getId()){ case R.id.date: final Date d = new Date(Long.parseLong(text)); v.setText(d.toLocaleString()); break; default: super.setViewText(v, text); } } } private void savePosting() { //save comment final String text = postingTextField.getText().toString().trim(); if (text.length() == 0) { return; } final ContentResolver cr = mContext.getContentResolver(); final ContentValues cv = new ContentValues(); cv.put(Comment._DESCRIPTION, text); cr.insert(thisThread, cv); postingTextField.setText(""); } public void setParentUri(Uri parent){ setUri(Uri.withAppendedPath(parent, Comment.PATH)); } public void setUri(Uri myUri){ Log.d(TAG, "Loading comments for "+myUri); thisThread = myUri; c = getContext().getContentResolver().query(thisThread, Comment.PROJECTION, null, null, Comment.DEFAULT_SORT_BY); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ ProviderUtils.dumpCursorToLog(c, Comment.PROJECTION); } LocastSyncService.startSync(getContext(), thisThread, false); c.registerContentObserver(new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { c.requery(); } }); setAdapter(new DiscussionBoardAdapter(getContext(), c)); } @Override protected void onDetachedFromWindow() { c.close(); super.onDetachedFromWindow(); } public void onClick(View v) { switch (v.getId()){ case R.id.send: savePosting(); break; } } public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { switch (v.getId()){ case R.id.discussionText: savePosting(); return true; } return false; } }