com.jbirdvegas.mgerrit.cards.PatchSetPropertiesCard.java Source code

Java tutorial

Introduction

Here is the source code for com.jbirdvegas.mgerrit.cards.PatchSetPropertiesCard.java

Source

package com.jbirdvegas.mgerrit.cards;

/*
 * Copyright (C) 2013 Android Open Kang Project (AOKP)
 *  Author: Jon Stanford (JBirdVegas), 2013
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.app.FragmentActivity;
import android.text.SpannableString;
import android.text.style.TextAppearanceSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.volley.RequestQueue;
import com.jbirdvegas.mgerrit.Prefs;
import com.jbirdvegas.mgerrit.R;
import com.jbirdvegas.mgerrit.database.UserChanges;
import com.jbirdvegas.mgerrit.helpers.GravatarHelper;
import com.jbirdvegas.mgerrit.helpers.Tools;

import org.jetbrains.annotations.NotNull;

public class PatchSetPropertiesCard implements CardBinder {
    private final RequestQueue mRequestQuery;
    private final Context mContext;
    private final FragmentActivity mActivity;
    private final LayoutInflater mInflater;

    // Colors
    private final int mOrange;
    private final int mGreen;
    private final int mRed;

    private Integer changeid_index;
    private Integer changenum_index;
    private Integer branch_index;
    private Integer subject_index;
    private Integer topic_index;
    private Integer updated_index;
    private Integer authorId_index;
    private Integer authorEmail_index;
    private Integer authorName_index;
    private Integer status_index;

    public PatchSetPropertiesCard(Context context, RequestQueue requestQueue) {
        this.mRequestQuery = requestQueue;
        this.mContext = context;
        this.mActivity = (FragmentActivity) mContext;
        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        this.mOrange = context.getResources().getColor(android.R.color.holo_orange_light);
        this.mGreen = context.getResources().getColor(R.color.text_green);
        this.mRed = context.getResources().getColor(R.color.text_red);
    }

    @Override
    public View setViewValue(Cursor cursor, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.properties_card, parent, false);
        }

        ViewHolder viewHolder = (ViewHolder) convertView.getTag();
        if (convertView.getTag() == null) {
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }

        setIndicies(cursor);

        String lastUpdated = cursor.getString(updated_index);
        viewHolder.updated.setText(Tools.prettyPrintDate(mContext, lastUpdated, Prefs.getServerTimeZone(mContext),
                Prefs.getLocalTimeZone(mContext)));

        viewHolder.subject.setText(cursor.getString(subject_index));
        viewHolder.branch.setText(cursor.getString(branch_index));

        setupUserDetails(viewHolder.author, cursor.getInt(authorId_index), cursor.getString(authorEmail_index),
                cursor.getString(authorName_index));

        String topic = cursor.getString(topic_index);
        if (topic != null && !topic.isEmpty()) {
            viewHolder.topic.setText(topic);
            viewHolder.topicContainer.setVisibility(View.VISIBLE);
        } else {
            viewHolder.topicContainer.setVisibility(View.GONE);
        }

        setClicksToActionViews(cursor, viewHolder.shareBtn, viewHolder.browserBtn);

        String statusText = cursor.getString(status_index);
        switch (statusText) {
        case "MERGED":
            viewHolder.status.setBackgroundColor(mGreen);
            break;
        case "ABANDONED":
            viewHolder.status.setBackgroundColor(mRed);
            break;
        default:
            viewHolder.status.setBackgroundColor(mOrange);
            break;
        }

        return convertView;
    }

    private void setClicksToActionViews(Cursor cursor, ImageView share, ImageView browser) {

        String webAddress = getWebAddress(cursor.getString(changenum_index));

        share.setTag(R.id.webAddress, webAddress);
        share.setTag(R.id.changeID, cursor.getString(changeid_index));
        browser.setTag(R.id.webAddress, webAddress);

        share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String changeId = (String) view.getTag(R.id.changeID);
                String webAddress = (String) view.getTag(R.id.webAddress);

                Intent intent = new Intent(android.content.Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                intent.putExtra(Intent.EXTRA_SUBJECT,
                        String.format(view.getContext().getString(R.string.commit_shared_from_mgerrit), changeId));
                intent.putExtra(Intent.EXTRA_TEXT, webAddress + " #mGerrit");
                view.getContext().startActivity(intent);
            }
        });
        browser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String webAddress = (String) view.getTag(R.id.webAddress);

                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress));
                view.getContext().startActivity(browserIntent);
            }
        });
    }

    private void setupUserDetails(final TextView view, final int id, final String email, final String name) {
        view.setTag(id);

        // attach owner's gravatar
        GravatarHelper.attachGravatarToTextView(view, email, mRequestQuery);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setTrackingUser((Integer) view.getTag());
            }
        });

        setImageCaption(view, R.string.commit_owner, name);
    }

    private void setImageCaption(TextView textView, int resID, String authorName) {
        String title = mContext.getResources().getString(resID);
        if (title == null || authorName == null)
            return;

        SpannableString text = new SpannableString(title + "\n" + authorName);
        text.setSpan(new TextAppearanceSpan(mContext, R.style.CardText_CommitOwnerText), 0, title.length(), 0);

        int end = title.length() + 1;
        text.setSpan(new TextAppearanceSpan(mContext, R.style.CardText_CommitOwnerDetails), end,
                end + authorName.length(), 0);

        textView.setText(text, TextView.BufferType.SPANNABLE);
    }

    private void setTrackingUser(Integer user) {
        Prefs.setTrackingUser(mContext, user);
        if (!Prefs.isTabletMode(mContext))
            mActivity.finish();
    }

    private String getWebAddress(String changeNum) {
        // Web address: Gerrit instance + commit number
        return Prefs.getCurrentGerrit(mContext) + changeNum;
    }

    private void setIndicies(@NotNull Cursor cursor) {
        // These indices will not change regardless of the view
        if (changeid_index == null) {
            changeid_index = cursor.getColumnIndex(UserChanges.C_CHANGE_ID);
        }
        if (changenum_index == null) {
            changenum_index = cursor.getColumnIndex(UserChanges.C_COMMIT_NUMBER);
        }
        if (branch_index == null) {
            branch_index = cursor.getColumnIndex(UserChanges.C_BRANCH);
        }
        if (subject_index == null) {
            subject_index = cursor.getColumnIndex(UserChanges.C_SUBJECT);
        }
        if (topic_index == null) {
            topic_index = cursor.getColumnIndex(UserChanges.C_TOPIC);
        }
        if (authorId_index == null) {
            authorId_index = cursor.getColumnIndex(UserChanges.C_USER_ID);
        }
        if (authorEmail_index == null) {
            authorEmail_index = cursor.getColumnIndex(UserChanges.C_EMAIL);
        }
        if (authorName_index == null) {
            authorName_index = cursor.getColumnIndex(UserChanges.C_NAME);
        }
        if (updated_index == null) {
            updated_index = cursor.getColumnIndex(UserChanges.C_UPDATED);
        }
        if (status_index == null) {
            status_index = cursor.getColumnIndex(UserChanges.C_STATUS);
        }
    }

    private static class ViewHolder {
        private final TextView subject;
        private final TextView author;
        private final TextView branch;
        private final View topicContainer;
        private final TextView topic;
        private final TextView updated;
        private final View status;

        private final ImageView shareBtn;
        private final ImageView browserBtn;

        ViewHolder(View view) {
            subject = (TextView) view.findViewById(R.id.prop_card_subject);
            author = (TextView) view.findViewById(R.id.prop_card_author);
            branch = (TextView) view.findViewById(R.id.prop_card_branch);
            topicContainer = view.findViewById(R.id.prop_card_topic_container);
            topic = (TextView) view.findViewById(R.id.prop_card_topic);
            updated = (TextView) view.findViewById(R.id.prop_card_last_update);
            status = view.findViewById(R.id.prop_card_status);

            shareBtn = (ImageView) view.findViewById(R.id.properties_card_share_info);
            browserBtn = (ImageView) view.findViewById(R.id.properties_card_view_in_browser);
        }
    }
}