IssueDetails.java :  » App » openjira » org » alexdalton » jira » Android Open Source

Android Open Source » App » openjira 
openjira » org » alexdalton » jira » IssueDetails.java
package org.alexdalton.jira;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

import org.alexdalton.jira.JiraConn.OnCommentAddedListener;
import org.alexdalton.jira.JiraConn.OnIssueLoadedListener;
import org.alexdalton.jira.model.JiraComment;
import org.alexdalton.jira.model.JiraIssue;
import org.alexdalton.jira.model.JiraVersion;
import org.alexdalton.jira.utils.LoadImageAsync;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class IssueDetails extends Activity implements OnIssueLoadedListener, OnCommentAddedListener {
    JiraApp app;
    JiraIssue currentIssue;
    private JiraConn conn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.issuedetails);

        app = JiraApp.get();
        conn = app.getCurrentConnection();
        Uri data = getIntent().getData();

        String key = data.getQueryParameter("key");

        findViewById(R.id.progress).setVisibility(View.VISIBLE);

        conn.getIssueAsync(key, true, this);

        findViewById(R.id.addcomment).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String commentText = ((EditText) findViewById(R.id.addcommenttext)).getText().toString();
                if (commentText != null) {
                    findViewById(R.id.progress).setVisibility(View.VISIBLE);
                    conn.addCommentAsync(currentIssue.getKey(), commentText, IssueDetails.this);
                }
            }
        });
    }

    public void displayIssue(JiraIssue issue) {

        TextView tv;
        currentIssue = issue;
        tv = (TextView) findViewById(R.id.key);
        tv.setText(issue.getKey());
        // tv = (TextView) findViewById(R.id.count);
        // tv.setText("" + (app.getCurrentIssue() + 1) + "/" +
        // issueList.size());
        tv = (TextView) findViewById(R.id.summary);
        tv.setText(issue.getSummary());
        tv = (TextView) findViewById(R.id.status);
        tv.setText(conn.getStatusLabel(issue.getStatus()));
        tv = (TextView) findViewById(R.id.priority);
        tv.setText(conn.getPriorityLabel(issue.getPriority()));
        tv = (TextView) findViewById(R.id.type);
        tv.setText(conn.getTypeLabel(issue.getType()));
        tv = (TextView) findViewById(R.id.reporter);
        tv.setText(issue.getReporter());
        tv = (TextView) findViewById(R.id.assignee);
        tv.setText(issue.getAssignee());
        tv = (TextView) findViewById(R.id.date);
        tv.setText(issue.getCreated());
        tv = (TextView) findViewById(R.id.description);
        tv.setText(issue.getDescription());

        if (issue.getFixVersions() != null) {
            ArrayList<JiraVersion> versions = issue.getFixVersions();
            String fixvstr = new String();
            if (versions.size() > 0) {
                for (int i = 0; i < versions.size() - 1; i++) {
                    fixvstr += versions.get(i) + ", ";
                }
                fixvstr += versions.get(versions.size() - 1).getName();
                ((TextView) findViewById(R.id.fixv)).setText(fixvstr);
            } else {
                ((TextView) findViewById(R.id.fixv)).setText("None");
            }
        } else {
            ((TextView) findViewById(R.id.fixv)).setText("None");
        }

        ImageView iv;
        iv = (ImageView) findViewById(R.id.typeimg);
        LoadImageAsync.setImageViewAsync(conn.getTypeIcon(issue.getType()), iv, R.drawable.priority_unknown, new LoadImageAsync.LoadBitmapListener() {
            public void bitmapLoaded(Bitmap b, View v) {
                ((ImageView) v).setImageBitmap(b);
            }
        }, this);
        iv = (ImageView) findViewById(R.id.statusimg);
        LoadImageAsync.setImageViewAsync(conn.getStatusIcon(issue.getStatus()), iv, R.drawable.priority_unknown, new LoadImageAsync.LoadBitmapListener() {
            public void bitmapLoaded(Bitmap b, View v) {
                ((ImageView) v).setImageBitmap(b);
            }
        }, this);
        iv = (ImageView) findViewById(R.id.priorityimg);
        LoadImageAsync.setImageViewAsync(conn.getPriorityIcon(issue.getPriority()), iv, R.drawable.priority_unknown, new LoadImageAsync.LoadBitmapListener() {
            public void bitmapLoaded(Bitmap b, View v) {
                ((ImageView) v).setImageBitmap(b);
            }
        }, this);

        try {
            ArrayList<JiraComment> comments = issue.getComments();

            LinearLayout l = (LinearLayout) findViewById(R.id.commentlayout);
            l.removeAllViews();
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (comments != null) {
                for (int i = 0; i < comments.size(); i++) {
                    RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.commentlistitem, null);
                    JiraComment comment = comments.get(i);
                    ((TextView) view.findViewById(R.id.comment)).setText(comment.getBody());
                    ((TextView) view.findViewById(R.id.user)).setText(comment.getAuthor());
                    ((TextView) view.findViewById(R.id.date)).setText(comment.getUpdated());
                    l.addView(view);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (issue.getDescription() == null) {
            findViewById(R.id.description).setVisibility(View.GONE);
            findViewById(R.id.descriptionlabel).setVisibility(View.GONE);
        } else {
            findViewById(R.id.description).setVisibility(View.VISIBLE);
            findViewById(R.id.descriptionlabel).setVisibility(View.VISIBLE);
        }
        if (issue.getComments() == null) {
            findViewById(R.id.commentlayout).setVisibility(View.GONE);
            findViewById(R.id.commentslabel).setVisibility(View.GONE);
        } else {
            findViewById(R.id.commentlayout).setVisibility(View.VISIBLE);
            findViewById(R.id.commentslabel).setVisibility(View.VISIBLE);
        }

        findViewById(R.id.modify).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                showChangeableItems();
            }
        });
    }

    public void showChangeableItems() {
        AlertDialog.Builder db = new AlertDialog.Builder(this);
        String[] items = {"Status", "Priority", "Type"};
        db.setTitle("Choose item to modify");
        db.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0:
                        changeStatus();
                        break;
                    case 1:
                        changePriority();
                        break;
                    case 2:
                        changeType();
                        break;
                }
            }
        });
        db.create().show();
    }

    protected void showChooser(String title, ArrayList<String> items, final ArrayList<Integer> ids, final String field) {
        AlertDialog.Builder db = new AlertDialog.Builder(this);
        db.setTitle(title);
        db.setItems(items.toArray(new String[0]), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Map<String, Vector> map = new HashMap<String, Vector>();
                Vector<Object> tmp = new Vector<Object>();
                tmp.add(ids.get(which).toString());
                map.put(field, tmp);
                conn.updateIssue(currentIssue.getKey(), map);
                Toast.makeText(IssueDetails.this, "Issue Updated", Toast.LENGTH_SHORT).show();
                conn.getIssueAsync(currentIssue.getKey(), true, IssueDetails.this);
            }
        });
        db.create().show();
    }

    protected void changeType() {
        final ArrayList<Integer> ids = new ArrayList<Integer>();
        ArrayList<String> items = conn.getTypeLabels(ids);
        showChooser("Select new type", items, ids, "issuetype");
    }

    protected void changePriority() {
        final ArrayList<Integer> ids = new ArrayList<Integer>();
        ArrayList<String> items = conn.getPriorityLabels(ids);
        showChooser("Select new type", items, ids, "priority");
    }

    protected void changeStatus() {
        final ArrayList<Integer> ids = new ArrayList<Integer>();
        ArrayList<String> items = conn.getStatusesLabels(ids);
        showChooser("Select new status", items, ids, "issuestatus");
    }

    public void onIssueLoaded(final JiraIssue issue) {
        runOnUiThread(new Runnable() {
            public void run() {
                findViewById(R.id.progress).setVisibility(View.GONE);
                displayIssue(issue);
            }
        });
    }

    public void onCommentAdded(boolean success) {
        if (success) {
            conn.getIssueAsync(currentIssue.getKey(), true, IssueDetails.this);
            IssueDetails.this.runOnUiThread(new Runnable() {
                public void run() {
                    ((EditText) findViewById(R.id.addcommenttext)).setText("");
                }
            });
        } else {
            findViewById(R.id.progress).setVisibility(View.GONE);
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.