/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2016 The Catrobat Team * (<http://developer.catrobat.org/credits>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * An additional term exception under section 7 of the GNU Affero * General Public License, version 3, is available at * http://developer.catrobat.org/license_additional_term * * 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catrobat.catroid.ui.fragment; import android.app.AlertDialog; import android.app.Dialog; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.nfc.NfcAdapter; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.Settings; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; import org.catrobat.catroid.common.Constants; import org.catrobat.catroid.common.NfcTagData; import org.catrobat.catroid.nfc.NfcHandler; import org.catrobat.catroid.ui.BottomBar; import org.catrobat.catroid.ui.NfcTagViewHolder; import org.catrobat.catroid.ui.ScriptActivity; import org.catrobat.catroid.ui.adapter.NfcTagAdapter; import org.catrobat.catroid.ui.adapter.NfcTagBaseAdapter; import org.catrobat.catroid.ui.controller.NfcTagController; import org.catrobat.catroid.ui.dialogs.CustomAlertDialogBuilder; import org.catrobat.catroid.ui.dialogs.DeleteNfcTagDialog; import org.catrobat.catroid.ui.dialogs.RenameNfcTagDialog; import org.catrobat.catroid.ui.dynamiclistview.DynamicListView; import org.catrobat.catroid.utils.ToastUtil; import org.catrobat.catroid.utils.UtilUi; import org.catrobat.catroid.utils.Utils; import java.util.List; public class NfcTagFragment extends ScriptActivityFragment implements NfcTagBaseAdapter.OnNfcTagEditListener, Dialog.OnKeyListener { public static final String TAG = NfcTagFragment.class.getSimpleName(); private static int selectedNfcTagPosition = Constants.NO_POSITION; private static String actionModeTitle; private static String singleItemAppendixDeleteActionMode; private static String multipleItemAppendixDeleteActionMode; private ListView listView; private NfcTagDeletedReceiver nfcTagDeletedReceiver; private NfcTagRenamedReceiver nfcTagRenamedReceiver; private NfcTagCopiedReceiver nfcTagCopiedReceiver; private NfcListTouchActionUpReceiver nfcListTouchActionUpReceiver; private NfcTagsListInitReceiver nfcTagsListInitReceiver; private ActionMode actionMode; private View selectAllActionModeButton; private NfcTagBaseAdapter adapter; private List<NfcTagData> nfcTagDataList; private NfcTagData selectedNfcTag; private boolean isRenameActionMode; private boolean isResultHandled = false; NfcAdapter nfcAdapter; PendingIntent pendingIntent; private OnNfcTagDataListChangedAfterNewListener nfcTagDataListChangedAfterNewListener; public void setOnNfcTagDataListChangedAfterNewListener(OnNfcTagDataListChangedAfterNewListener listener) { nfcTagDataListChangedAfterNewListener = listener; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); nfcAdapter = NfcAdapter.getDefaultAdapter(getActivity()); pendingIntent = PendingIntent.getActivity(getActivity(), 0, new Intent(getActivity(), getActivity().getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); if (nfcAdapter != null && !nfcAdapter.isEnabled()) { ToastUtil.showError(getActivity(), R.string.nfc_not_activated); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(intent); } else { Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); startActivity(intent); } } else if (nfcAdapter == null) { ToastUtil.showError(getActivity(), R.string.no_nfc_available); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_nfctags, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); listView = getListView(); if (listView != null) { registerForContextMenu(listView); } if (savedInstanceState != null) { selectedNfcTag = (NfcTagData) savedInstanceState .getSerializable(NfcTagController.BUNDLE_ARGUMENTS_SELECTED_NFCTAG); } try { nfcTagDataList = ProjectManager.getInstance().getCurrentSprite().getNfcTagList(); } catch (NullPointerException e) { Log.e(TAG, e.getMessage()); } ((DynamicListView) getListView()).setDataList(nfcTagDataList); adapter = new NfcTagAdapter(getActivity(), R.layout.fragment_nfctag_nfctaglist_item, R.id.fragment_nfctag_item_title_text_view, nfcTagDataList, false); adapter.setOnNfcTagEditListener(this); setListAdapter(adapter); ((NfcTagAdapter) adapter).setNfcTagFragment(this); Utils.loadProjectIfNeeded(getActivity()); } @Override public void onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.copy).setVisible(true); menu.findItem(R.id.backpack).setVisible(false); menu.findItem(R.id.cut).setVisible(false); menu.findItem(R.id.show_details).setVisible(true); super.onPrepareOptionsMenu(menu); } @Override public void onSaveInstanceState(Bundle outState) { outState.putSerializable(NfcTagController.BUNDLE_ARGUMENTS_SELECTED_NFCTAG, selectedNfcTag); super.onSaveInstanceState(outState); } @Override public void onResume() { super.onResume(); BottomBar.showBottomBar(getActivity()); BottomBar.showPlayButton(getActivity()); BottomBar.hideAddButton(getActivity()); if (!Utils.checkForExternalStorageAvailableAndDisplayErrorIfNot(getActivity())) { return; } if (nfcTagRenamedReceiver == null) { nfcTagRenamedReceiver = new NfcTagRenamedReceiver(); } if (nfcTagDeletedReceiver == null) { nfcTagDeletedReceiver = new NfcTagDeletedReceiver(); } if (nfcTagCopiedReceiver == null) { nfcTagCopiedReceiver = new NfcTagCopiedReceiver(); } if (nfcTagsListInitReceiver == null) { nfcTagsListInitReceiver = new NfcTagsListInitReceiver(); } if (nfcListTouchActionUpReceiver == null) { nfcListTouchActionUpReceiver = new NfcListTouchActionUpReceiver(); } IntentFilter intentFilterRenameNfcTag = new IntentFilter(ScriptActivity.ACTION_NFCTAG_RENAMED); getActivity().registerReceiver(nfcTagRenamedReceiver, intentFilterRenameNfcTag); IntentFilter intentFilterDeleteNfcTag = new IntentFilter(ScriptActivity.ACTION_NFCTAG_DELETED); getActivity().registerReceiver(nfcTagDeletedReceiver, intentFilterDeleteNfcTag); IntentFilter intentFilterCopyNfcTag = new IntentFilter(ScriptActivity.ACTION_NFCTAG_COPIED); getActivity().registerReceiver(nfcTagCopiedReceiver, intentFilterCopyNfcTag); IntentFilter intentFilterNfcTagsListInit = new IntentFilter(ScriptActivity.ACTION_NFCTAGS_LIST_INIT); getActivity().registerReceiver(nfcTagsListInitReceiver, intentFilterNfcTagsListInit); IntentFilter intentFilterNfcTagsListActionUp = new IntentFilter(ScriptActivity.ACTION_NFC_TOUCH_ACTION_UP); getActivity().registerReceiver(nfcListTouchActionUpReceiver, intentFilterNfcTagsListActionUp); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity() .getApplicationContext()); setShowDetails(settings.getBoolean(NfcTagController.SHARED_PREFERENCE_NAME, false)); if (nfcAdapter != null) { Log.d(TAG, "onResume()enableForegroundDispatch()"); nfcAdapter.enableForegroundDispatch(getActivity(), pendingIntent, null, null); } } public void onNewIntent(Intent intent) { Log.i("Foreground dispatch", "Discovered tag with intent: " + intent); Log.d(TAG, "activity:" + getActivity().getClass().getSimpleName()); Log.d(TAG, "got intent:" + intent.getAction()); String uid = NfcHandler.getTagIdFromIntent(intent); NfcHandler.setLastNfcTagId(uid); NfcHandler.setLastNfcTagMessage(NfcHandler.getMessageFromIntent(intent)); if (uid != null) { NfcTagData newNfcTagData = new NfcTagData(); String newTagName = Utils.getUniqueNfcTagName(getString(R.string.default_tag_name)); newNfcTagData.setNfcTagName(newTagName); newNfcTagData.setNfcTagUid(uid); adapter.add(newNfcTagData); adapter.notifyDataSetChanged(); } else { Log.d(TAG, "no nfc tag found"); } } @Override public void onPause() { super.onPause(); if (nfcAdapter != null) { Log.d(TAG, "onPause()disableForegroundDispatch()"); nfcAdapter.disableForegroundDispatch(getActivity()); } ProjectManager projectManager = ProjectManager.getInstance(); if (projectManager.getCurrentProject() != null) { projectManager.saveProject(getActivity().getApplicationContext()); } adapter.notifyDataSetChanged(); if (nfcTagRenamedReceiver != null) { getActivity().unregisterReceiver(nfcTagRenamedReceiver); } if (nfcTagDeletedReceiver != null) { getActivity().unregisterReceiver(nfcTagDeletedReceiver); } if (nfcTagCopiedReceiver != null) { getActivity().unregisterReceiver(nfcTagCopiedReceiver); } if (nfcTagsListInitReceiver != null) { getActivity().unregisterReceiver(nfcTagsListInitReceiver); } if (nfcListTouchActionUpReceiver != null) { getActivity().unregisterReceiver(nfcListTouchActionUpReceiver); } SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity() .getApplicationContext()); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean(NfcTagController.SHARED_PREFERENCE_NAME, getShowDetails()); editor.commit(); } @Override public boolean getShowDetails() { // TODO CHANGE THIS!!! (was just a quick fix) if (adapter != null) { return adapter.getShowDetails(); } else { return false; } } @Override public void setShowDetails(boolean showDetails) { // TODO CHANGE THIS!!! (was just a quick fix) if (adapter != null) { adapter.setShowDetails(showDetails); adapter.notifyDataSetChanged(); } } @Override public void setSelectMode(int selectMode) { adapter.setSelectMode(selectMode); adapter.notifyDataSetChanged(); } @Override public int getSelectMode() { return adapter.getSelectMode(); } @Override public void startCopyActionMode() { if (actionMode == null) { actionMode = getActivity().startActionMode(copyModeCallBack); unregisterForContextMenu(listView); BottomBar.hideBottomBar(getActivity()); isRenameActionMode = false; } } @Override public void startCommentOutActionMode() { // Comment out not supported } @Override public void startRenameActionMode() { if (actionMode == null) { actionMode = getActivity().startActionMode(renameModeCallBack); unregisterForContextMenu(listView); BottomBar.hideBottomBar(getActivity()); isRenameActionMode = true; } } @Override public void startDeleteActionMode() { if (actionMode == null) { actionMode = getActivity().startActionMode(deleteModeCallBack); unregisterForContextMenu(listView); BottomBar.hideBottomBar(getActivity()); isRenameActionMode = false; } } @Override public void startBackPackActionMode() { } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } @Override public void onNfcTagEdit(View view) { } public void onNfcTagChecked() { if (isRenameActionMode || actionMode == null) { return; } updateActionModeTitle(); UtilUi.setSelectAllActionModeButtonVisibility(selectAllActionModeButton, adapter.getCount() > 0 && adapter.getAmountOfCheckedItems() != adapter.getCount()); } private void updateActionModeTitle() { int numberOfSelectedItems = adapter.getAmountOfCheckedItems(); if (numberOfSelectedItems == 0) { actionMode.setTitle(actionModeTitle); } else { String appendix = multipleItemAppendixDeleteActionMode; if (numberOfSelectedItems == 1) { appendix = singleItemAppendixDeleteActionMode; } String numberOfItems = Integer.toString(numberOfSelectedItems); String completeTitle = actionModeTitle + " " + numberOfItems + " " + appendix; int titleLength = actionModeTitle.length(); Spannable completeSpannedTitle = new SpannableString(completeTitle); completeSpannedTitle.setSpan( new ForegroundColorSpan(getResources().getColor(R.color.actionbar_title_color)), titleLength + 1, titleLength + (1 + numberOfItems.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); actionMode.setTitle(completeSpannedTitle); } } public void updateNfcTagAdapter(NfcTagData newNfcTagData) { if (nfcTagDataListChangedAfterNewListener != null) { nfcTagDataListChangedAfterNewListener.onNfcTagDataListChangedAfterNew(newNfcTagData); } //scroll down the list to the new item: final ListView listView = getListView(); listView.post(new Runnable() { @Override public void run() { listView.setSelection(listView.getCount() - 1); } }); if (isResultHandled) { isResultHandled = false; ScriptActivity scriptActivity = (ScriptActivity) getActivity(); if (scriptActivity.getIsNfcTagFragmentFromWhenNfcBrickNew() && scriptActivity.getIsNfcTagFragmentHandleAddButtonHandled()) { NfcTagController.getInstance().switchToScriptFragment(this); } } } @Override public void handleAddButton() { //Intent intent = new Intent(Intent.ACTION_GET_CONTENT); } @Override public void showRenameDialog() { RenameNfcTagDialog renameNfcTagDialog = new RenameNfcTagDialog(R.string.rename_nfctag_dialog, R .string.nfctag_name, selectedNfcTag.getNfcTagName()); renameNfcTagDialog.show(getFragmentManager(), RenameNfcTagDialog.DIALOG_FRAGMENT_TAG); } @Override public void showDeleteDialog() { DeleteNfcTagDialog deleteNfcTagDialog = DeleteNfcTagDialog.newInstance(selectedNfcTagPosition); deleteNfcTagDialog.show(getFragmentManager(), DeleteNfcTagDialog.DIALOG_FRAGMENT_TAG); } private class NfcTagRenamedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ScriptActivity.ACTION_NFCTAG_RENAMED)) { String newTagName = intent.getExtras().getString(RenameNfcTagDialog.EXTRA_NEW_NFCTAG_TITLE); if (newTagName != null && !newTagName.equalsIgnoreCase("") && !newTagName.equalsIgnoreCase(context.getString(R.string.brick_when_nfc_default_all))) { selectedNfcTag.setNfcTagName(newTagName); adapter.notifyDataSetChanged(); } } } } private class NfcTagDeletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ScriptActivity.ACTION_NFCTAG_DELETED)) { adapter.notifyDataSetChanged(); getActivity().sendBroadcast(new Intent(ScriptActivity.ACTION_BRICK_LIST_CHANGED)); } } } private class NfcTagCopiedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ScriptActivity.ACTION_NFCTAG_COPIED)) { adapter.notifyDataSetChanged(); getActivity().sendBroadcast(new Intent(ScriptActivity.ACTION_BRICK_LIST_CHANGED)); } } } private void addSelectAllActionModeButton(ActionMode mode, Menu menu) { selectAllActionModeButton = UtilUi.addSelectAllActionModeButton(getActivity().getLayoutInflater(), mode, menu); selectAllActionModeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { for (int position = 0; position < nfcTagDataList.size(); position++) { adapter.addCheckedItem(position); } adapter.notifyDataSetChanged(); onNfcTagChecked(); } }); } private ActionMode.Callback renameModeCallBack = new ActionMode.Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { setSelectMode(ListView.CHOICE_MODE_SINGLE); mode.setTitle(R.string.rename); setActionModeActive(true); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { ((NfcTagAdapter) adapter).onDestroyActionModeRename(mode, listView); } }; private ActionMode.Callback copyModeCallBack = new ActionMode.Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { setSelectMode(ListView.CHOICE_MODE_MULTIPLE); setActionModeActive(true); actionModeTitle = getString(R.string.copy); singleItemAppendixDeleteActionMode = getString(R.string.nfctag); multipleItemAppendixDeleteActionMode = getString(R.string.nfctags); mode.setTitle(actionModeTitle); addSelectAllActionModeButton(mode, menu); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { ((NfcTagAdapter) adapter).onDestroyActionModeCopy(mode); } }; private ActionMode.Callback deleteModeCallBack = new ActionMode.Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { setSelectMode(ListView.CHOICE_MODE_MULTIPLE); setActionModeActive(true); actionModeTitle = getString(R.string.delete); singleItemAppendixDeleteActionMode = getString(R.string.nfctag); multipleItemAppendixDeleteActionMode = getString(R.string.nfctags); mode.setTitle(R.string.delete); addSelectAllActionModeButton(mode, menu); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { if (adapter.getAmountOfCheckedItems() == 0) { clearCheckedNfcTagsAndEnableButtons(); } else { showConfirmDeleteDialog(); } } }; private void showConfirmDeleteDialog() { int titleId = R.string.dialog_confirm_delete_nfctag_title; if (adapter.getAmountOfCheckedItems() == 1) { titleId = R.string.dialog_confirm_delete_nfctag_title; } else { titleId = R.string.dialog_confirm_delete_multiple_nfctags_title; } AlertDialog.Builder builder = new CustomAlertDialogBuilder(getActivity()); builder.setTitle(titleId); builder.setMessage(R.string.dialog_confirm_delete_nfctag_message); builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { NfcTagController.getInstance().deleteCheckedNfcTags(getActivity(), adapter, nfcTagDataList); clearCheckedNfcTagsAndEnableButtons(); } }); builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.cancel(); clearCheckedNfcTagsAndEnableButtons(); } }); AlertDialog alertDialog = builder.create(); alertDialog.show(); } public void clearCheckedNfcTagsAndEnableButtons() { setSelectMode(ListView.CHOICE_MODE_NONE); adapter.clearCheckedItems(); actionMode = null; setActionModeActive(false); registerForContextMenu(listView); BottomBar.showBottomBar(getActivity()); } @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: ScriptActivity scriptActivity = (ScriptActivity) getActivity(); if (scriptActivity.getIsNfcTagFragmentFromWhenNfcBrickNew()) { NfcTagController.getInstance().switchToScriptFragment(this); BottomBar.showAddButton(getActivity()); return true; } default: break; } return false; } public View getView(int position, View convertView) { NfcTagViewHolder holder; if (convertView == null) { convertView = View.inflate(getActivity(), R.layout.fragment_nfctag_nfctaglist_item, null); holder = new NfcTagViewHolder(); holder.scanNewTagButton = (ImageButton) convertView.findViewById(R.id.fragment_nfctag_item_image_button); holder.scanNewTagButton.setImageResource(R.drawable.ic_program_menu_nfc); holder.scanNewTagButton.setContentDescription(getString(R.string.nfctag_scan)); holder.nfcTagFragmentButtonLayout = (LinearLayout) convertView .findViewById(R.id.fragment_nfctag_item_main_linear_layout); holder.checkbox = (CheckBox) convertView.findViewById(R.id.fragment_nfctag_item_checkbox); holder.titleTextView = (TextView) convertView.findViewById(R.id.fragment_nfctag_item_title_text_view); holder.nfcTagUidPrefixTextView = (TextView) convertView .findViewById(R.id.fragment_nfctag_item_uid_prefix_text_view); holder.nfcTagUidTextView = (TextView) convertView.findViewById(R.id.fragment_nfctag_item_uid_text_view); holder.nfcTagDetailsLinearLayout = (LinearLayout) convertView.findViewById(R.id.fragment_nfctag_item_detail_linear_layout); convertView.setTag(holder); } else { holder = (NfcTagViewHolder) convertView.getTag(); } NfcTagController controller = NfcTagController.getInstance(); controller.updateNfcTagLogic(position, holder, adapter); return convertView; } public interface OnNfcTagDataListChangedAfterNewListener { void onNfcTagDataListChangedAfterNew(NfcTagData nfcTagData); } public NfcTagDeletedReceiver getNfcTagDeletedReceiver() { return nfcTagDeletedReceiver; } public void setNfcTagDeletedReceiver(NfcTagDeletedReceiver nfcTagDeletedReceiver) { this.nfcTagDeletedReceiver = nfcTagDeletedReceiver; } public NfcTagRenamedReceiver getNfcTagRenamedReceiver() { return nfcTagRenamedReceiver; } public void setNfcTagRenamedReceiver(NfcTagRenamedReceiver nfcTagRenamedReceiver) { this.nfcTagRenamedReceiver = nfcTagRenamedReceiver; } public NfcTagCopiedReceiver getNfcTagCopiedReceiver() { return nfcTagCopiedReceiver; } public void setNfcTagCopiedReceiver(NfcTagCopiedReceiver nfcTagCopiedReceiver) { this.nfcTagCopiedReceiver = nfcTagCopiedReceiver; } public void setSelectedNfcTagData(NfcTagData selectedNfcTagData) { this.selectedNfcTag = selectedNfcTagData; } public List<NfcTagData> getNfcTagDataList() { return nfcTagDataList; } private class NfcTagsListInitReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ScriptActivity.ACTION_NFCTAGS_LIST_INIT)) { adapter.notifyDataSetChanged(); } } } private class NfcListTouchActionUpReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ScriptActivity.ACTION_NFC_TOUCH_ACTION_UP)) { ((DynamicListView) getListView()).notifyListItemTouchActionUp(); } } } @Override public void handleCheckBoxClick(View view) { } }