From: David A. Velasco Date: Tue, 29 Apr 2014 11:17:33 +0000 (+0200) Subject: FileListListAdapter based in CursorAdapter instead of SimpleCursorAdapter for more... X-Git-Tag: oc-android-1.7.0_signed~309^2~64 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/65c7d5d5baf3455d02b4a7d9352fcd42d939c669 FileListListAdapter based in CursorAdapter instead of SimpleCursorAdapter for more flexible integration --- diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index 5decb561..cc4fa95a 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -724,7 +724,7 @@ public class FileDataStorageManager { // return c; // } - private OCFile createFileInstance(Cursor c) { + public OCFile createFileInstance(Cursor c) { OCFile file = null; if (c != null) { file = new OCFile(c.getString(c diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index bb20094d..2913c9e6 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -20,28 +20,25 @@ package com.owncloud.android.ui.adapter; import android.accounts.Account; import android.content.Context; import android.database.Cursor; -import android.support.v4.widget.SimpleCursorAdapter; +import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -//import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; -import java.util.Vector; - import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.ProviderMeta; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.ui.activity.TransferServiceGetter; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.Log_OC; /** @@ -51,44 +48,23 @@ import com.owncloud.android.utils.DisplayUtils; * @author Bartek Przybylski * */ -public class FileListListAdapter extends SimpleCursorAdapter implements ListAdapter { +public class FileListListAdapter extends CursorAdapter implements ListAdapter { + private static final String TAG = FileListListAdapter.class.getSimpleName(); + private Context mContext; - private static OCFile mFile = null; - private Vector mFiles = null; - private static FileDataStorageManager mStorageManager; + private FileDataStorageManager mStorageManager; private Account mAccount; private TransferServiceGetter mTransferServiceGetter; - private static Cursor mCursor = null; - - private static String[] cursorFrom = { ProviderMeta.ProviderTableMeta.FILE_NAME, - ProviderMeta.ProviderTableMeta.FILE_MODIFIED, - ProviderMeta.ProviderTableMeta.FILE_CONTENT_LENGTH - }; - private static int[] cursorTo = { R.id.Filename, - R.id.last_mod, - R.id.file_size - }; - - public FileListListAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { - super(context, layout, c, from, to, flags); - // TODO Auto-generated constructor stub - } - public FileListListAdapter(Context context, TransferServiceGetter transferServiceGetter, OCFile file) { - super(context, - R.layout.list_item, - mCursor, - cursorFrom, - cursorTo, - 0); + public FileListListAdapter(Context context, TransferServiceGetter transferServiceGetter) { + super(context, null, 0); mContext = context; mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); mTransferServiceGetter = transferServiceGetter; - mFile = file; - mCursor = file == null ? null: mStorageManager.getContent(file.getParentId()); } + /* @Override public boolean areAllItemsEnabled() { return true; @@ -122,91 +98,7 @@ public class FileListListAdapter extends SimpleCursorAdapter implements ListAdap public int getItemViewType(int position) { return 0; } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view = convertView; - if (view == null) { - LayoutInflater inflator = (LayoutInflater) mContext - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = inflator.inflate(R.layout.list_item, null); - } - if (mFiles != null && mFiles.size() > position) { - OCFile file = mFiles.get(position); - TextView fileName = (TextView) view.findViewById(R.id.Filename); - String name = file.getFileName(); - - fileName.setText(name); - ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); - fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype())); - ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); - FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); - FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); - if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) { - localStateView.setImageResource(R.drawable.downloading_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) { - localStateView.setImageResource(R.drawable.uploading_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else if (file.isDown()) { - localStateView.setImageResource(R.drawable.local_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else { - localStateView.setVisibility(View.INVISIBLE); - } - - TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); - TextView lastModV = (TextView) view.findViewById(R.id.last_mod); - ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); - - if (!file.isFolder()) { - fileSizeV.setVisibility(View.VISIBLE); - fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); - lastModV.setVisibility(View.VISIBLE); - lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); - // this if-else is needed even thoe fav icon is visible by default - // because android reuses views in listview - if (!file.keepInSync()) { - view.findViewById(R.id.imageView3).setVisibility(View.GONE); - } else { - view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE); - } - - ListView parentList = (ListView)parent; - if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { - checkBoxV.setVisibility(View.GONE); - } else { - if (parentList.isItemChecked(position)) { - checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); - } else { - checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); - } - checkBoxV.setVisibility(View.VISIBLE); - } - - } - else { - - fileSizeV.setVisibility(View.INVISIBLE); - //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); - lastModV.setVisibility(View.VISIBLE); - lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); - checkBoxV.setVisibility(View.GONE); - view.findViewById(R.id.imageView3).setVisibility(View.GONE); - } - - ImageView shareIconV = (ImageView) view.findViewById(R.id.shareIcon); - if (file.isShareByLink()) { - shareIconV.setVisibility(View.VISIBLE); - } else { - shareIconV.setVisibility(View.INVISIBLE); - } - } - - return view; - } - @Override public int getViewTypeCount() { return 1; @@ -221,26 +113,118 @@ public class FileListListAdapter extends SimpleCursorAdapter implements ListAdap public boolean isEmpty() { return (mFiles == null || mFiles.isEmpty()); } + */ /** * Change the adapted directory for a new one - * @param directory New file to adapt. Can be NULL, meaning "no content to adapt". + * @param folder New file to adapt. Can be NULL, meaning "no content to adapt". * @param updatedStorageManager Optional updated storage manager; used to replace mStorageManager if is different (and not NULL) */ - public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) { - mFile = directory; + public void swapDirectory(OCFile folder, FileDataStorageManager updatedStorageManager) { if (updatedStorageManager != null && updatedStorageManager != mStorageManager) { mStorageManager = updatedStorageManager; mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); } + Cursor newCursor = null; if (mStorageManager != null) { - mFiles = mStorageManager.getFolderContent(mFile); - mCursor = mStorageManager.getContent(mFile.getParentId()); - } else { - mFiles = null; - mCursor = null; + //mFiles = mStorageManager.getFolderContent(mFile); + newCursor = mStorageManager.getContent(folder.getFileId()); + } + Cursor oldCursor = swapCursor(newCursor); + if (oldCursor != null){ + oldCursor.close(); } notifyDataSetChanged(); } + + @Override + public void bindView(View view, Context context, Cursor cursor) { + Log_OC.d(TAG, "bindView start"); + + OCFile file = mStorageManager.createFileInstance(cursor); + + TextView fileName = (TextView) view.findViewById(R.id.Filename); + String name = file.getFileName(); + + fileName.setText(name); + ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype())); + ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); + FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); + FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); + if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) { + localStateView.setImageResource(R.drawable.downloading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) { + localStateView.setImageResource(R.drawable.uploading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (file.isDown()) { + localStateView.setImageResource(R.drawable.local_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else { + localStateView.setVisibility(View.INVISIBLE); + } + + TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); + TextView lastModV = (TextView) view.findViewById(R.id.last_mod); + ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + + if (!file.isFolder()) { + fileSizeV.setVisibility(View.VISIBLE); + fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); + lastModV.setVisibility(View.VISIBLE); + lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); + // this if-else is needed even thoe fav icon is visible by default + // because android reuses views in listview + if (!file.keepInSync()) { + view.findViewById(R.id.imageView3).setVisibility(View.GONE); + } else { + view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE); + } + + } + else { + + fileSizeV.setVisibility(View.INVISIBLE); + //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); + lastModV.setVisibility(View.VISIBLE); + lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); + checkBoxV.setVisibility(View.GONE); + view.findViewById(R.id.imageView3).setVisibility(View.GONE); + } + + ImageView shareIconV = (ImageView) view.findViewById(R.id.shareIcon); + if (file.isShareByLink()) { + shareIconV.setVisibility(View.VISIBLE); + } else { + shareIconV.setVisibility(View.INVISIBLE); + } + //} + Log_OC.d(TAG, "bindView end"); + } + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + Log_OC.d(TAG, "newView start"); + LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View view = inflator.inflate(R.layout.list_item, null); + + // TODO check activity to upload + ListView parentList = (ListView) parent; + ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { + checkBoxV.setVisibility(View.GONE); + } else { + /*if (parentList.isItemChecked(position)) { + checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); + } else { + checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); + }*/ + checkBoxV.setVisibility(View.VISIBLE); + } + Log_OC.d(TAG, "newView end"); + return view; + + } } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 19a482c5..c11420b0 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -44,6 +44,7 @@ import com.owncloud.android.utils.Log_OC; import android.accounts.Account; import android.app.Activity; +import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.view.ContextMenu; @@ -109,6 +110,8 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName super.onActivityCreated(savedInstanceState); Log_OC.e(TAG, "onActivityCreated() start"); + mAdapter = new FileListListAdapter(getActivity(), mContainerActivity); + if (savedInstanceState != null) { mFile = savedInstanceState.getParcelable(EXTRA_FILE); mIndexes = savedInstanceState.getIntegerArrayList(KEY_INDEXES); @@ -124,8 +127,6 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName } - mAdapter = new FileListListAdapter(getActivity(), mContainerActivity, mFile); - setListAdapter(mAdapter); registerForContextMenu(getListView()); @@ -248,7 +249,8 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName @Override public void onItemClick(AdapterView l, View v, int position, long id) { - OCFile file = (OCFile) mAdapter.getItem(position); + OCFile file = mContainerActivity.getStorageManager().createFileInstance( + (Cursor) mAdapter.getItem(position)); if (file != null) { if (file.isFolder()) { // update state and view of this fragment @@ -294,7 +296,8 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.file_actions_menu, menu); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; - OCFile targetFile = (OCFile) mAdapter.getItem(info.position); + OCFile targetFile = mContainerActivity.getStorageManager().createFileInstance( + (Cursor) mAdapter.getItem(info.position)); List toHide = new ArrayList(); List toDisable = new ArrayList(); @@ -379,7 +382,8 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName @Override public boolean onContextItemSelected (MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); - mTargetFile = (OCFile) mAdapter.getItem(info.position); + mTargetFile = mContainerActivity.getStorageManager().createFileInstance( + (Cursor) mAdapter.getItem(info.position)); switch (item.getItemId()) { case R.id.action_share_file: { FileDisplayActivity activity = (FileDisplayActivity) getSherlockActivity();