Android Open Source - 301Assignment1 Archive Fragment






From Project

Back to project page 301Assignment1.

License

The source code is released under:

Apache License

If you think the Android project 301Assignment1 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.ckchan.assignment1.ckchan_todolist;
// w  ww .j  a va  2s  .  c o m
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.json.JSONException;
import com.ckchan.assignment1.adapter.TaskArrayAdapter;
import com.ckchan.assignment1.adapter.TaskArrayAdapter.ViewHolder;
import com.ckchan.assignment1.ckchan_notes.R;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Toast;

import android.widget.ListView;

//Creates Archive tab 
//Displays all archived tasks from Archive tab
public class ArchiveFragment extends Fragment implements TaskFragmentInterface {
  
    private ListView listView;
    private List<TodoTask> archiveArray;
    private TaskArrayAdapter arrayAdapter;
    private Context context;
    private TaskDatabase taskDatabase = new TaskDatabase();
    private List<Integer> selectedPositions = new ArrayList<Integer>();

    //Creates the Archive tab
    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
      
      context = getActivity();
        View rootView = inflater.inflate(R.layout.fragment_archive, container, false);

        //Initialization
        listView = (ListView) rootView.findViewById(R.id.listView1);                 
        archiveArray = new ArrayList<TodoTask>();
        arrayAdapter = new TaskArrayAdapter(context, archiveArray);

        listView.setAdapter(arrayAdapter);        
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); //For CAB
        listView.setLongClickable(true);
        arrayAdapter.setNotifyOnChange(false);
        
        //Load saved tasks into listView
        loadTasks(context);  
        arrayAdapter.notifyDataSetChanged();
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          
          @Override
          public void onItemClick(AdapterView<?> parent, View item, int position, long id) {
            
            TodoTask todoTask = arrayAdapter.getItem(position);
            todoTask.toggleChecked();
            ViewHolder viewHolder = (ViewHolder) item.getTag();
            viewHolder.getCheckBox().setChecked(todoTask.isChecked());
          }
    });
        
        //Use contextual action bar(CAB) to select multiple items
        listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
      
      @Override
      public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        // TODO Auto-generated method stub
        return false;
      }
      
      @Override
      public void onDestroyActionMode(ActionMode mode) {
        
        // TODO Auto-generated method stub      
      }
      
      @Override
      public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        
        MenuInflater menuInflater = getActivity().getMenuInflater();
        menuInflater.inflate(R.menu.archive_contextual_menu, menu);        
        return true;
      }
      
      @Override
      public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        
        switch (item.getItemId()) {
        case R.id.delete_items:
          
          int deletedCount = 0; //Used to make sure indices of the arraylist match the values in selectedPostions
          Collections.sort(selectedPositions);
          
          for (Integer position : selectedPositions) {
            
            TodoTask removedTask = archiveArray.remove(position.intValue() - deletedCount);
            arrayAdapter.remove(removedTask);
            arrayAdapter.notifyDataSetChanged();
            deletedCount++;
          }
          try {
            
            saveTasks();  
            selectedPositions.clear();
          } catch (JSONException e) {
            
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          break;
        case R.id.unarchive_items:  
          
          int archiveCount = 0;
          Collections.sort(selectedPositions);
          
          for (Integer position : selectedPositions) {
            
            TodoTask removedTask = archiveArray.remove(position.intValue() - archiveCount);
            try {
              
              taskDatabase.appendTask(context, removedTask); //appends task to archiveArray stored in memory
              arrayAdapter.remove(removedTask);
              arrayAdapter.notifyDataSetChanged();
              saveTasks();
              archiveCount++;
            } catch (JSONException e) {
              
              // TODO Auto-generated catch block
              e.printStackTrace();
            }            
          }
          selectedPositions.clear();
          break;
        case R.id.email_items:
          
          Collections.sort(selectedPositions);
          
          //This code was taken and modified from:
          //http://stackoverflow.com/questions/2197741/how-can-i-send-emails-from-my-android-application 2014-09-24
          try {
            
            Email email = taskDatabase.loadEmailAddress(context);
            
            //StringBuilder code from:
            //http://stackoverflow.com/questions/12899953/in-java-how-to-append-a-string-more-efficiently 2014-09-24
            StringBuilder stringBuilder = new StringBuilder();
            
            if (email != null) {
              
              Intent i = new Intent(Intent.ACTION_SEND);
              i.setType("message/rfc822");
              i.putExtra(Intent.EXTRA_EMAIL  , new String[]{email.getAddress()});
              i.putExtra(Intent.EXTRA_SUBJECT, "Archive Tasks");
              
              for (Integer position : selectedPositions) {
                
                TodoTask task = archiveArray.get(position);
                stringBuilder.append(task.getTaskDescription() + "\n");
              }                
              String emailContent = stringBuilder.toString();
              i.putExtra(Intent.EXTRA_TEXT   , emailContent);
              
              try {
                
                  startActivity(Intent.createChooser(i, "Send mail..."));
              } catch (android.content.ActivityNotFoundException ex) {
                
                  Toast.makeText(context, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
              }
            }
            
          } catch (JSONException e) {
            
            // TODO Auto-generated catch block
            e.printStackTrace();
          }        
          selectedPositions.clear();
          break;
        }
        return false;
      }
      
      @Override
      public void onItemCheckedStateChanged(ActionMode mode, int position,
          long id, boolean checked) {
        
        if (checked) {
          selectedPositions.add(new Integer(position));
        }else {
          selectedPositions.remove(new Integer(position));
        }  
      }
    });        
        return rootView;
    }  
    
    //Loads saved tasks when tab is visible
  @Override
  public void onArticleSelected() {
    
    loadTasks(context);
    arrayAdapter.notifyDataSetChanged();
  }
    
    public void saveTasks() throws JSONException {
      
      taskDatabase.saveArchiveData(context, archiveArray);
  }
    
  public void loadTasks(final Context context) {
    
    try {
      
      archiveArray = taskDatabase.loadArchiveData(context);  
      
      if (archiveArray != null) {
        
        arrayAdapter = new TaskArrayAdapter(context, archiveArray);
        arrayAdapter.setArrayType("archive");
        listView.setAdapter(arrayAdapter);
      }      
    } catch (JSONException e) {
      
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}




Java Source Code List

com.ckchan.assignment1.adapter.TabsPagerAdapter.java
com.ckchan.assignment1.adapter.TaskArrayAdapter.java
com.ckchan.assignment1.ckchan_todolist.ArchiveFragment.java
com.ckchan.assignment1.ckchan_todolist.DatabaseInterface.java
com.ckchan.assignment1.ckchan_todolist.Email.java
com.ckchan.assignment1.ckchan_todolist.MainActivity.java
com.ckchan.assignment1.ckchan_todolist.SettingsActivity.java
com.ckchan.assignment1.ckchan_todolist.SummaryInfoActivity.java
com.ckchan.assignment1.ckchan_todolist.TaskDatabase.java
com.ckchan.assignment1.ckchan_todolist.TaskFragmentInterface.java
com.ckchan.assignment1.ckchan_todolist.TodoFragment.java
com.ckchan.assignment1.ckchan_todolist.TodoTask.java