Android Open Source - smsAndCallFilter Filter List






From Project

Back to project page smsAndCallFilter.

License

The source code is released under:

/* * Author: Hasib Al Muhaimin. * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the L...

If you think the Android project smsAndCallFilter 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

/*
 * Author: Hasib Al Muhaimin./*from  ww w  .ja va 2  s . c  om*/
 * 
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (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.mozilla.org/MPL/
 * 
 * ***courtesy to Jelle Geerts***
 * Author: Jelle Geerts

 * Usage of the works is permitted provided that this instrument is
 * retained with the works, so that any entity that uses the works is
 * notified of this instrument.
 *
 * DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
*/

package com.sadakhata.smsandcallfilter;

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

import com.sadakhata.smsandcallfilter.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class FilterList extends Activity
{
    //private static final String TAG = "Filters";

    private CheckableFilterListArrayAdapter mAdapter;

    private ListView mListView;

    private class CheckableFilterListArrayAdapter extends ArrayAdapter<Filter>
    {
        public CheckableFilterListArrayAdapter(Context context, List<Filter> filters)
        {
            super(context, 0, filters);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            ViewHolder holder = null;
            View v = convertView;

            if (v == null)
            {
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = inflater.inflate(R.layout.filter_list_item, null);
                holder = new ViewHolder();
                holder.nameEditText = (TextView) v.findViewById(android.R.id.title);
                holder.addressEditText = (TextView) v.findViewById(android.R.id.summary);
                v.setTag(holder);
            }
            else
            {
                holder = (ViewHolder) v.getTag();
            }

            Filter filter = getItem(position);
            holder.nameEditText.setText(filter.name);
            holder.addressEditText.setText(filter.address);

            return v;
        }

        private class ViewHolder
        {
            TextView nameEditText;
            TextView addressEditText;
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setTitle(getString(R.string.messageFilters));
        setContentView(R.layout.filter_list);

        Settings settings = new Settings(this);
        List<Filter> filters = settings.getFilters();

        mListView = (ListView) findViewById(R.id.messageFilterList);

        mAdapter = new CheckableFilterListArrayAdapter(this, filters);
        mListView.setAdapter(mAdapter);

        registerForContextMenu(mListView);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        super.onCreateContextMenu(menu, v, menuInfo);
        if (!(v instanceof ListView))
        {
            throw new AssertionError();
        }
        else
        {
            menu.setHeaderTitle(getFilterNameFromMenuInfo(menuInfo));
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.message_filter_context_menu, menu);
        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item)
    {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        final int adapterPosition = info.position;
        int menuItemID = item.getItemId();
        if (menuItemID == android.R.id.edit)
        {
            Intent intent = new Intent(this, FilterForm.class);
            String filterName = getFilterNameFromMenuInfo(item.getMenuInfo());
            intent.putExtra(FilterForm.FILTER_NAME_EXTRA, filterName);
            startActivityForResult(intent, FilterForm.REQUEST_CODE_MUTATED);
            return true;
        }
        else if (menuItemID == R.id.delete)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle(R.string.delete)
                .setMessage(R.string.filterWillBeDeleted)
                .setPositiveButton(
                    R.string.delete,
                    new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Filter filter = mAdapter.getItem(adapterPosition);
                            new Settings(FilterList.this).deleteFilter(filter.name);
                            removeAdapterItem(adapterPosition);
                        }
                    })
                .setNegativeButton(android.R.string.cancel, null);
            builder.show();
            return true;
        }
        return false;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == FilterForm.REQUEST_CODE_MUTATED)
        {
            if (resultCode == FilterForm.RESULT_CODE_MUTATED)
                refreshList();
        }
    }

    private String getFilterNameFromMenuInfo(ContextMenuInfo menuInfo)
    {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        TextView textView = (TextView) info.targetView.findViewById(android.R.id.title);
        return textView.getText().toString();
    }

    private void refreshList()
    {
        Settings settings = new Settings(this);
        List<Filter> filters = settings.getFilters();
        replaceListItems(filters);
    }

    private Filter getListItem(int position)
    {
        Filter item = (Filter) mListView.getItemAtPosition(position);
        return item;
    }

    public void onAdd(View v)
    {
        Intent intent = new Intent(this, FilterForm.class);
        startActivityForResult(intent, FilterForm.REQUEST_CODE_MUTATED);
    }

    public void onConfirmDelete(View v)
    {
        if (getCheckedItems().size() == 0)
        {
            Toast.makeText(this, getString(R.string.noItemsSelected), Toast.LENGTH_SHORT).show();
            return;
        }

        int messageResourceID = R.string.filterWillBeDeleted;
        if (getCheckedItems().size() > 1)
            messageResourceID = R.string.filtersWillBeDeleted;

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle(R.string.delete)
            .setMessage(messageResourceID)
            .setPositiveButton(
                R.string.delete,
                new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        delete();
                    }
                })
            .setNegativeButton(android.R.string.cancel, null);
        builder.show();
    }

    private void delete()
    {
        Settings settings = new Settings(this);

        // We shouldn't remove items while iterating over the items. Hence,
        // keep track of items that should be kept, remove all items after
        // iterating, then restore items that should be kept.
        List<Filter> uncheckedItems = new ArrayList<Filter>();
        for (int i = 0; i < mListView.getCount(); ++i)
        {
            Filter filter = getListItem(i);
            if (mListView.isItemChecked(i))
                settings.deleteFilter(filter.name);
            else
                uncheckedItems.add(filter);
        }

        replaceListItems(uncheckedItems);
    }

    private List<Filter> getCheckedItems()
    {
        List<Filter> items = new ArrayList<Filter>();
        for (int i = 0; i < mListView.getCount(); ++i)
        {
            if (mListView.isItemChecked(i))
            {
                Filter item = getListItem(i);
                items.add(item);
            }
        }
        return items;
    }

    private void removeAdapterItem(int position)
    {
        // HACK:
        // We have to uncheck the item before removing it, otherwise
        // mListView.getCheckedItemPositions() will still return 'true'
        // for the item.
        mListView.setItemChecked(position, false);

        mAdapter.remove(mAdapter.getItem(position));
        mAdapter.notifyDataSetChanged();
    }

    private void replaceListItems(List<Filter> filters)
    {
        // HACK:
        // Checkbox states may be remembered even after clearing the adapter's
        // items and adding new ones. Hence, we work around this Android bug.
        mListView.clearChoices();

        mAdapter.clear();
        for (Filter filter : filters)
            mAdapter.add(filter);
        mAdapter.notifyDataSetChanged();
    }
}




Java Source Code List

com.sadakhata.banglatoenglishrupantor.Rupantor.java
com.sadakhata.ml.NeuralNetwork.java
com.sadakhata.ml.NeuronLayer.java
com.sadakhata.ml.Neuron.java
com.sadakhata.ml.SKNeuralNetwork.java
com.sadakhata.smsandcallfilter.About.java
com.sadakhata.smsandcallfilter.C.java
com.sadakhata.smsandcallfilter.CheckableLinearLayout.java
com.sadakhata.smsandcallfilter.FilterForm.java
com.sadakhata.smsandcallfilter.FilterList.java
com.sadakhata.smsandcallfilter.Filter.java
com.sadakhata.smsandcallfilter.MessageList.java
com.sadakhata.smsandcallfilter.MessageViewer.java
com.sadakhata.smsandcallfilter.Message.java
com.sadakhata.smsandcallfilter.Notifier.java
com.sadakhata.smsandcallfilter.SMSReceiver.java
com.sadakhata.smsandcallfilter.Settings.java
com.sadakhata.smsandcallfilter.SimpleListItem2.java
com.sadakhata.smsandcallfilter.TimeFormatter.java
com.sadakhata.smsandcallfilter.UI.java
com.sadakhata.smsandcallfilter.ViewsAdapter.java
com.sadakhata.smsandcallfilter.callReceiver.java
com.sadakhata.spamsmsblocker.SKSpamBlocker.java