MiscFilesHandler.java revision da13ec0cb454f1aadada2acf12291cfaf0a7b176
121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori/* 221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * Copyright (C) 2010 The Android Open Source Project 321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * 421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * Licensed under the Apache License, Version 2.0 (the "License"); 521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * you may not use this file except in compliance with the License. 621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * You may obtain a copy of the License at 721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * 821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * http://www.apache.org/licenses/LICENSE-2.0 921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * 1021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * Unless required by applicable law or agreed to in writing, software 1121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * distributed under the License is distributed on an "AS IS" BASIS, 1221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * See the License for the specific language governing permissions and 1421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * limitations under the License. 1521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori */ 1621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 1721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noripackage com.android.settings.deviceinfo; 1821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 19104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunneimport android.app.Activity; 2021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.app.ListActivity; 2121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.content.Context; 2221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.os.Bundle; 23104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunneimport android.os.storage.StorageVolume; 2421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.text.format.Formatter; 2521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.util.Log; 2621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.util.SparseBooleanArray; 2721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.ActionMode; 2821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.LayoutInflater; 2921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.Menu; 3021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.MenuInflater; 3121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.MenuItem; 3221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.View; 3321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.View.OnClickListener; 3421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.View.OnLongClickListener; 3521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.view.ViewGroup; 3621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.widget.BaseAdapter; 3721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.widget.CompoundButton; 3821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.widget.CompoundButton.OnCheckedChangeListener; 3921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport android.widget.ListView; 4021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 41104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunneimport com.android.settings.R; 42104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunneimport com.android.settings.deviceinfo.StorageMeasurement.FileInfo; 43104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne 4421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport java.io.File; 4521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport java.util.ArrayList; 4621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noriimport java.util.List; 4721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 4821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori/** 4921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori * This class handles the selection and removal of Misc files. 5021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori */ 5121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Noripublic class MiscFilesHandler extends ListActivity { 5221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private static final String TAG = "MemorySettings"; 538128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori private String mNumSelectedFormat; 548128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori private String mNumBytesSelectedFormat; 5521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private MemoryMearurementAdapter mAdapter; 5621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private LayoutInflater mInflater; 5721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 5821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 5921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void onCreate(Bundle savedInstanceState) { 6021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori super.onCreate(savedInstanceState); 6121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori setFinishOnTouchOutside(true); 6221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori setTitle(R.string.misc_files); 638128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori mNumSelectedFormat = getString(R.string.misc_files_selected_count); 648128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori mNumBytesSelectedFormat = getString(R.string.misc_files_selected_count_bytes); 6521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mAdapter = new MemoryMearurementAdapter(this); 6621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 6721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori setContentView(R.layout.settings_storage_miscfiles_list); 6821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori ListView lv = getListView(); 6921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori lv.setItemsCanFocus(true); 7021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 7121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori lv.setMultiChoiceModeListener(new ModeCallback(this)); 7221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori setListAdapter(mAdapter); 7321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 7421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 7521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private class ModeCallback implements ListView.MultiChoiceModeListener { 7621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private int mDataCount; 7721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private final Context mContext; 7821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 7921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public ModeCallback(Context context) { 8021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mContext = context; 8121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mDataCount = mAdapter.getCount(); 8221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 8321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 8421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public boolean onCreateActionMode(ActionMode mode, Menu menu) { 8521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori final MenuInflater inflater = getMenuInflater(); 8621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori inflater.inflate(R.menu.misc_files_menu, menu); 8721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return true; 8821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 8921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 9021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 9121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return true; 9221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 9321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 9421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 9521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori ListView lv = getListView(); 9621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori switch (item.getItemId()) { 9721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori case R.id.action_delete: 9821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // delete the files selected 9921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori SparseBooleanArray checkedItems = lv.getCheckedItemPositions(); 10021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori int checkedCount = getListView().getCheckedItemCount(); 10121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (checkedCount > mDataCount) { 10221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori throw new IllegalStateException("checked item counts do not match. " + 10321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori "checkedCount: " + checkedCount + ", dataSize: " + mDataCount); 10421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 10521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (mDataCount > 0) { 10621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori ArrayList<Object> toRemove = new ArrayList<Object>(); 10721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori for (int i = 0; i < mDataCount; i++) { 10821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (!checkedItems.get(i)) { 10921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori //item not selected 11021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori continue; 11121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 112104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne if (StorageMeasurement.LOGV) { 11321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori Log.i(TAG, "deleting: " + mAdapter.getItem(i)); 11421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 11521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // delete the file 11621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori File file = new File(mAdapter.getItem(i).mFileName); 11721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (file.isDirectory()) { 11821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori deleteDir(file); 11921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } else { 12021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori file.delete(); 12121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 12221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori toRemove.add(mAdapter.getItem(i)); 12321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 12421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mAdapter.removeAll(toRemove); 12521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mAdapter.notifyDataSetChanged(); 12621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mDataCount = mAdapter.getCount(); 12721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 12821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mode.finish(); 12921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori break; 13021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 13121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori case R.id.action_select_all: 13221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // check ALL items 13321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori for (int i = 0; i < mDataCount; i++) { 13421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori lv.setItemChecked(i, true); 13521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 13621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // update the title and subtitle with number selected and numberBytes selected 13721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori onItemCheckedStateChanged(mode, 1, 0, true); 13821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori break; 13921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 14021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return true; 14121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 14221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 14321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // Deletes all files and subdirectories under given dir. 14421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // Returns true if all deletions were successful. 14521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // If a deletion fails, the method stops attempting to delete and returns false. 14621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private boolean deleteDir(File dir) { 14721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (dir.isDirectory()) { 14821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori String[] children = dir.list(); 14921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori for (int i=0; i < children.length; i++) { 15021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori boolean success = deleteDir(new File(dir, children[i])); 15121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (!success) { 15221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return false; 15321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 15421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 15521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 15621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // The directory is now empty so delete it 15721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return dir.delete(); 15821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 15921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 16021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void onDestroyActionMode(ActionMode mode) { 161104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne // This block intentionally left blank 16221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 16321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 16421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void onItemCheckedStateChanged(ActionMode mode, int position, long id, 16521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori boolean checked) { 16621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori ListView lv = getListView(); 16721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori int numChecked = lv.getCheckedItemCount(); 1688128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori mode.setTitle(String.format(mNumSelectedFormat, numChecked, mAdapter.getCount())); 16921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 17021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // total the sizes of all items selected so far 17121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori SparseBooleanArray checkedItems = lv.getCheckedItemPositions(); 17221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori long selectedDataSize = 0; 17321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (numChecked > 0) { 17421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori for (int i = 0; i < mDataCount; i++) { 17521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (checkedItems.get(i)) { 17621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori // item is checked 17721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori selectedDataSize += mAdapter.getItem(i).mSize; 17821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 17921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 18021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 1818128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori mode.setSubtitle(String.format(mNumBytesSelectedFormat, 1828128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori Formatter.formatFileSize(mContext, selectedDataSize), 1838128ff8cbe239c1d50f8ba12cf375c754862df0aVasu Nori Formatter.formatFileSize(mContext, mAdapter.getDataSize()))); 18421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 18521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 18621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 187104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne class MemoryMearurementAdapter extends BaseAdapter { 188104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne private ArrayList<StorageMeasurement.FileInfo> mData = null; 18921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private long mDataSize = 0; 19021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori private Context mContext; 19121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 192104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne public MemoryMearurementAdapter(Activity activity) { 193104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne mContext = activity; 1946d36fd3a03299b9b1bdaaceef2bfaa8714c3fa72Gilles Debunne final StorageVolume storageVolume = activity.getIntent().getParcelableExtra( 1956d36fd3a03299b9b1bdaaceef2bfaa8714c3fa72Gilles Debunne StorageVolume.EXTRA_STORAGE_VOLUME); 19690c8b20ccfd8f2e877bfac7cf3e883631af7a3e3Jeff Sharkey StorageMeasurement mMeasurement = StorageMeasurement.getInstance( 197da13ec0cb454f1aadada2acf12291cfaf0a7b176Jeff Sharkey activity, storageVolume); 1986d36fd3a03299b9b1bdaaceef2bfaa8714c3fa72Gilles Debunne if (mMeasurement == null) return; 199104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne mData = (ArrayList<StorageMeasurement.FileInfo>) mMeasurement.mFileInfoForMisc; 20021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (mData != null) { 201104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne for (StorageMeasurement.FileInfo info : mData) { 20221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mDataSize += info.mSize; 20321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 20421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 20521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 20621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 20721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 20821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public int getCount() { 20921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return (mData == null) ? 0 : mData.size(); 21021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 21121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 21221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 213104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne public StorageMeasurement.FileInfo getItem(int position) { 21421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (mData == null || mData.size() <= position) { 21521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return null; 21621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 21721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return mData.get(position); 21821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 21921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 22021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 22121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public long getItemId(int position) { 22221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (mData == null || mData.size() <= position) { 22321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return 0; 22421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 22521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return mData.get(position).mId; 22621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 227104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne 22821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void removeAll(List<Object> objs) { 22921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (mData == null) { 23021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return; 23121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 23221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori for (Object o : objs) { 23321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori mData.remove(o); 234104ea2873dff5fa3a5f6bd4cfdb893bac3527fdfGilles Debunne mDataSize -= ((StorageMeasurement.FileInfo) o).mSize; 23521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 23621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 23721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 23821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public long getDataSize() { 23921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return mDataSize; 24021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 24121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 24221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 24321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void notifyDataSetChanged() { 24421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori super.notifyDataSetChanged(); 24521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 24621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 24721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 24821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public View getView(int position, View convertView, ViewGroup parent) { 24921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori final FileItemInfoLayout view = (convertView == null) ? 25021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori (FileItemInfoLayout) mInflater.inflate(R.layout.settings_storage_miscfiles, 25121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori parent, false) : (FileItemInfoLayout) convertView; 25221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori FileInfo item = getItem(position); 25321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori view.setFileName(item.mFileName); 25421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori view.setFileSize(Formatter.formatFileSize(mContext, item.mSize)); 25521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori final ListView listView = (ListView) parent; 25621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori final int listPosition = position; 25721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori view.getCheckBox().setOnCheckedChangeListener(new OnCheckedChangeListener() { 25821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 25921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 26021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 26121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori listView.setItemChecked(listPosition, isChecked); 26221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 26321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori 26421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori }); 26521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori view.setOnLongClickListener(new OnLongClickListener() { 26621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 26721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public boolean onLongClick(View v) { 26821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (listView.getCheckedItemCount() > 0) { 26921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return false; 27021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 27121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori listView.setItemChecked(listPosition, !view.isChecked()); 27221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return true; 27321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 27421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori }); 27521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori view.setOnClickListener(new OnClickListener() { 27621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori @Override 27721809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori public void onClick(View v) { 27821809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori if (listView.getCheckedItemCount() > 0) { 27921809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori listView.setItemChecked(listPosition, !view.isChecked()); 28021809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 28121809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 28221809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori }); 28321809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori return view; 28421809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 28521809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori } 28621809740f2fd8fe8df4e300e5d1d15f0ccedbb5fVasu Nori}