Project: android-client
/*
 * See the NOTICE file distributed with this work for additional 
 * information regarding copyright ownership. 
 * 
 * This is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as 
 * published by the Free Software Foundation; either version 2.1 of 
 * the License, or (at your option) any later version. 
 * 
 * This software 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 
 * Lesser General Public License for more details. 
 * 
 * You should have received a copy of the GNU Lesser General Public 
 * License along with this software; if not, write to the Free 
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 
 */
 
package org.xwiki.android.components.commenteditor; 
 
import java.util.List; 
 
import org.xwiki.android.components.IntentExtra; 
import org.xwiki.android.components.R; 
import org.xwiki.android.resources.Comment; 
import org.xwiki.android.resources.Comments; 
import org.xwiki.android.rest.Requests; 
 
import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
 
/**
 * UI Component which provides comment viewing and comment adding features 
 */
 
public class CommentEditorActivity extends ListActivity 
    public static final String INTENT_EXTRA_PUT_WIKI_NAME = IntentExtra.WIKI_NAME; 
 
    public static final String INTENT_EXTRA_PUT_SPACE_NAME = IntentExtra.SPACE_NAME; 
 
    public static final String INTENT_EXTRA_PUT_PAGE_NAME = IntentExtra.PAGE_NAME; 
 
    public static final String INTENT_EXTRA_PUT_URL = IntentExtra.URL; 
 
    public static final String INTENT_EXTRA_PUT_USERNAME = IntentExtra.USERNAME; 
 
    public static final String INTENT_EXTRA_PUT_PASSWORD = IntentExtra.PASSWORD; 
 
    private String[] data; 
 
    private List<Comment> commentList; 
 
    private String wikiName, spaceName, pageName, username, password, url; 
 
    private boolean isSecured = false
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
 
        wikiName = getIntent().getExtras().getString(INTENT_EXTRA_PUT_WIKI_NAME); 
        spaceName = getIntent().getExtras().getString(INTENT_EXTRA_PUT_SPACE_NAME); 
        pageName = getIntent().getExtras().getString(INTENT_EXTRA_PUT_PAGE_NAME); 
        url = getIntent().getExtras().getString(INTENT_EXTRA_PUT_URL); 
 
        if (getIntent().getExtras().getString(INTENT_EXTRA_PUT_USERNAME) != null 
            && getIntent().getExtras().getString(INTENT_EXTRA_PUT_PASSWORD) != null) { 
            username = getIntent().getExtras().getString(INTENT_EXTRA_PUT_USERNAME); 
            password = getIntent().getExtras().getString(INTENT_EXTRA_PUT_PASSWORD); 
            isSecured = true
        } 
 
        setupListView(); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
        MenuInflater inflater = getMenuInflater(); 
        inflater.inflate(R.layout.commenteditor_menu, menu); 
        return true
    } 
 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
        if (item.getItemId() == R.id.add_comment) { 
   addComment(); 
   return true
  else { 
   return super.onOptionsItemSelected(item); 
  
    } 
 
    // shows add comment dialog and do update 
    private void addComment() 
    { 
        final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
        final EditText input = new EditText(this); 
 
        alert.setView(input); 
        alert.setTitle("Enter new comment"); 
        alert.setPositiveButton("Ok"new DialogInterface.OnClickListener() 
        { 
            public void onClick(DialogInterface dialog, int whichButton) 
            { 
                dialog.dismiss(); 
 
                String value = input.getText().toString().trim(); 
 
                Comment comment = new Comment(); 
                comment.setText(value); 
                Requests requests = new Requests(url); 
                if (isSecured) { 
                    requests.setAuthentication(username, password); 
                } 
 
                String s = requests.addPageComment(wikiName, spaceName, pageName, comment); 
                Log.d("Comment Status", s); 
                setupListView(); 
 
            } 
        }); 
 
        alert.setNegativeButton("Cancel"new DialogInterface.OnClickListener() 
        { 
            public void onClick(DialogInterface dialog, int whichButton) 
            { 
                dialog.cancel(); 
            } 
        }); 
        alert.show(); 
    } 
 
    private void initDataArray() 
    { 
        final ProgressDialog myProgressDialog; 
        myProgressDialog = ProgressDialog.show(CommentEditorActivity.this"Comment""Loading comments..."true); 
 
        Requests request = new Requests(url); 
        if (isSecured) { 
            request.setAuthentication(username, password); 
        } 
 
        Comments comments = request.requestPageComments(wikiName, spaceName, pageName); 
 
        commentList = comments.getComments(); 
 
        data = new String[commentList.size()]; 
 
        for (int i = 0; i < data.length; i++) { 
            data[i] = commentList.get(i).getAuthor() + "\n" + commentList.get(i).getText(); 
        } 
 
        myProgressDialog.dismiss(); 
    } 
 
    private void setupListView() 
    { 
 
        initDataArray(); 
        setListAdapter(new ArrayAdapter<String>(this, R.layout.attachment_list_item, data)); 
 
        ListView lv = getListView(); 
        lv.setTextFilterEnabled(true); 
 
        lv.setOnItemClickListener(new OnItemClickListener() 
        { 
 
             
            public void onItemClick(AdapterView< ? > arg0, View view, int arg2, long arg3) 
            { 
                Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
            } 
        }); 
    } 
}