/* * Zirco Browser for Android * * Copyright (C) 2010 J. Devauchelle and contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package org.zirco.ui.activities; import org.zirco.R; import org.zirco.controllers.Controller; import org.zirco.model.DbAdapter; import org.zirco.utils.ApplicationUtils; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.database.Cursor; import android.os.Bundle; import android.text.InputType; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.LayoutAnimationController; import android.view.animation.TranslateAnimation; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.AdapterView.AdapterContextMenuInfo; /** * AdBlocker white list activity. */ public class AdBlockerWhiteListActivity extends ListActivity { private static final int MENU_ADD = Menu.FIRST; private static final int MENU_CLEAR = Menu.FIRST + 1; private static final int MENU_DELETE = Menu.FIRST + 10; private Cursor mCursor; private DbAdapter mDbAdapter; private SimpleCursorAdapter mCursorAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.adblocker_whitelist_activity); setTitle(R.string.AdBlockerWhiteListActivity_Title); mDbAdapter = new DbAdapter(this); mDbAdapter.open(); registerForContextMenu(getListView()); fillData(); } @Override protected void onDestroy() { mDbAdapter.close(); mCursor.close(); super.onDestroy(); } /** * Fill the list view. */ private void fillData() { mCursor = mDbAdapter.getWhiteListCursor(); startManagingCursor(mCursor); String[] from = new String[] {DbAdapter.ADBLOCK_URL}; int[] to = new int[] {R.id.AdBlockerWhiteListRow_Title}; mCursorAdapter = new SimpleCursorAdapter(this, R.layout.adblocker_whitelist_row, mCursor, from, to); setListAdapter(mCursorAdapter); setAnimation(); } /** * Set the view loading animation. */ private void setAnimation() { AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(100); set.addAnimation(animation); animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f ); animation.setDuration(100); set.addAnimation(animation); LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f); ListView listView = getListView(); listView.setLayoutAnimation(controller); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); long id = ((AdapterContextMenuInfo) menuInfo).id; if (id != -1) { menu.setHeaderTitle(mDbAdapter.getWhiteListItemById(id)); } menu.add(0, MENU_DELETE, 0, R.string.Commons_Delete); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case MENU_DELETE: mDbAdapter.deleteFromWhiteList(info.id); Controller.getInstance().resetAdBlockWhiteList(); fillData(); return true; default: return super.onContextItemSelected(item); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem item; item = menu.add(0, MENU_ADD, 0, R.string.Commons_Add); item.setIcon(R.drawable.ic_menu_add); item = menu.add(0, MENU_CLEAR, 0, R.string.Commons_Clear); item.setIcon(R.drawable.ic_menu_delete); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch(item.getItemId()) { case MENU_ADD: addToWhiteList(); return true; case MENU_CLEAR: clearWhiteList(); return true; default: return super.onMenuItemSelected(featureId, item); } } /** * Add a value to the white list. * @param value The value to add. */ private void doAddToWhiteList(String value) { mDbAdapter.insertInWhiteList(value); Controller.getInstance().resetAdBlockWhiteList(); fillData(); } /** * Build and show a dialog for user input. Add user input to the white list. */ private void addToWhiteList() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(true); builder.setIcon(android.R.drawable.ic_input_add); builder.setTitle(getResources().getString(R.string.AdBlockerWhiteListActivity_AddMessage)); builder.setInverseBackgroundForced(true); // Set an EditText view to get user input final EditText input = new EditText(this); input.setInputType(InputType.TYPE_TEXT_VARIATION_URI); builder.setView(input); builder.setInverseBackgroundForced(true); builder.setPositiveButton(getResources().getString(R.string.Commons_Ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); doAddToWhiteList(input.getText().toString()); } }); builder.setNegativeButton(getResources().getString(R.string.Commons_Cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); } /** * Clear the white list. */ private void doClearWhiteList() { mDbAdapter.clearWhiteList(); Controller.getInstance().resetAdBlockWhiteList(); fillData(); } /** * Display a confirmation dialog and clear the white list. */ private void clearWhiteList() { ApplicationUtils.showYesNoDialog(this, android.R.drawable.ic_dialog_alert, R.string.AdBlockerWhiteListActivity_ClearMessage, R.string.Commons_NoUndoMessage, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); doClearWhiteList(); } }); } }