com.limewoodmedia.nsdroid.fragments.IssuesFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.limewoodmedia.nsdroid.fragments.IssuesFragment.java

Source

/*
 * Copyright (c) 2013 Joakim Lindskog
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package com.limewoodmedia.nsdroid.fragments;

import java.util.ArrayList;
import java.util.List;

import com.limewoodmedia.nsdroid.NotificationsHelper;
import com.limewoodmedia.nsdroid.R;
import com.limewoodmedia.nsdroid.API;
import com.limewoodmedia.nsdroid.LoadingHelper;
import com.limewoodmedia.nsdroid.NationInfo;
import com.limewoodmedia.nsdroid.Utils;
import com.limewoodmedia.nsdroid.activities.Issues;
import com.limewoodmedia.nsdroid.holders.Issue;
import com.limewoodmedia.nsdroid.holders.IssuesInfo;
import com.limewoodmedia.nsdroid.views.LoadingView;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class IssuesFragment extends Fragment {
    private static final String TAG = IssuesFragment.class.getName();

    private View root;
    private TextView title;
    private ListView list;
    private TextView text;

    private List<Issue> issues;
    private ArrayAdapter<Issue> listAdapter;
    private Context context;
    private AsyncTask<Void, Void, IssuesInfo> loadIssues;

    public IssuesFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity();
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.issues, null, false);
        list = (ListView) root.findViewById(R.id.issues_list);
        title = (TextView) root.findViewById(R.id.issues_title);
        title.setText(
                getResources().getString(R.string.issues_title, NationInfo.getInstance(getActivity()).getName()));
        ViewTreeObserver observer = title.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                list.setPadding(list.getPaddingLeft(),
                        title.getHeight() - (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15,
                                getResources().getDisplayMetrics()),
                        list.getPaddingRight(), list.getPaddingBottom());
            }
        });
        text = (TextView) root.findViewById(R.id.issues_text);
        text.setVisibility(View.GONE);

        issues = new ArrayList<Issue>();
        listAdapter = new ArrayAdapter<Issue>(context, 0, issues) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view;
                TextView text;

                if (convertView == null) {
                    view = inflater.inflate(R.layout.issue_list_item, null);
                    text = (TextView) view.findViewById(R.id.issue_item);
                    text.setMovementMethod(LinkMovementMethod.getInstance());
                } else {
                    view = convertView;
                    text = (TextView) view.findViewById(R.id.issue_item);
                }
                Issue issue = getItem(position);
                String txt = "&#8226; <a href=\"com.limewoodMedia.nsdroid.issue://" + issue.id + "\">" + issue.name
                        + "</a> ";
                text.setText(Html.fromHtml(txt));

                return view;
            }
        };
        list.setAdapter(listAdapter);

        return root;
    }

    @Override
    public void onPause() {
        if (loadIssues != null && !loadIssues.isCancelled()) {
            loadIssues.cancel(true);
        }
        super.onPause();
    }

    @Override
    public void onResume() {
        loadIssues();
        super.onResume();
    }

    public void loadIssues() {
        Log.d(TAG, "Loading issues");
        issues.clear();
        final LoadingView loadingView = (LoadingView) root.findViewById(R.id.loading);
        LoadingHelper.startLoading(loadingView, R.string.loading_issues, getActivity());
        loadIssues = new AsyncTask<Void, Void, IssuesInfo>() {
            @Override
            protected IssuesInfo doInBackground(Void... params) {
                if (API.getInstance(context).checkLogin(getActivity())) {
                    return API.getInstance(getActivity()).getIssues();
                }
                return null;
            }

            protected void onPostExecute(IssuesInfo result) {
                if (isAdded()) {
                    LoadingHelper.stopLoading(loadingView);
                    if (result != null) {
                        if (result.issues != null) {
                            issues.addAll(result.issues);
                            listAdapter.notifyDataSetChanged();
                        }
                        if (result.issues == null || result.issues.isEmpty()) {
                            Toast.makeText(getActivity(), R.string.no_issues, Toast.LENGTH_SHORT).show();
                        }
                        if (result.nextIssue != null) {
                            text.setText(getString(R.string.next_issue_in, result.nextIssue));
                            text.setVisibility(View.VISIBLE);
                            // Set timer, if the option is on
                            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
                            if (prefs.getBoolean(Issues.OPTION_POLL_ISSUES, true)) {
                                NotificationsHelper.setIssuesTimer(context, result.nextIssue);
                            }
                        } else {
                            text.setVisibility(View.GONE);
                        }
                    } else {
                        Toast.makeText(getActivity(), R.string.could_not_get_issues, Toast.LENGTH_SHORT).show();
                    }
                }
            };
        }.execute();
    }

    /**
     * Dismisses all issues
     */
    //   public void dismissAllIssues() {
    //      // Dismiss all
    //      if(issues == null || issues.size() == 0) {
    //         Toast.makeText(getActivity(), R.string.no_issues, Toast.LENGTH_SHORT).show();
    //      }
    //      // Show confirm dialog
    //      CustomAlertDialogBuilder builder = new CustomAlertDialogBuilder(getActivity());
    //      builder.setTitle(R.string.issues_dismiss_all_title)
    //         .setMessage(getResources().getString(R.string.issues_dismiss_all_text))
    //         .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
    //            @Override
    //            public void onClick(final DialogInterface dialog, int which) {
    //               new AsyncTask<Integer, Void, Boolean>() {
    //                  @Override
    //                  protected Boolean doInBackground(Integer... params) {
    //                     if(API.getInstance(getActivity()).checkLogin(getActivity())) {
    //                        try {
    //                           boolean success = false;
    //                           for(Issue issue : issues) {
    //                              success = API.getInstance(getActivity()).answerIssue(
    //                                    issue.id, (Integer)params[0]);
    //                           }
    //                           return success;
    //                        } catch (IOException e) {
    //                           // TODO Auto-generated catch block
    //                           e.printStackTrace();
    //                        }
    //                     }
    //                     return false;
    //                  }
    //
    //                  protected void onPostExecute(Boolean result) {
    //                     Log.d(TAG, "Result: "+result);
    //                     // Reload issues
    //                     loadIssues();
    //                     dialog.dismiss();
    //                  };
    //               }.execute(-1);
    //            }
    //         })
    //         .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
    //            @Override
    //            public void onClick(DialogInterface dialog, int which) {
    //               dialog.dismiss();
    //            }
    //         })
    //         .show();
    //   }
}