Skip to content

Commit 7525088

Browse files
Merge pull request #301 from apicellaj/master
add grid view option when choosing a file from within the app
2 parents 166b826 + 3aa00bc commit 7525088

File tree

4 files changed

+64
-17
lines changed

4 files changed

+64
-17
lines changed

res/menu/upload_files_picker.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,10 @@
3939
app:showAsAction="never"
4040
android:title="@string/actionbar_sort"
4141
android:contentDescription="@string/actionbar_sort"/>
42+
<item
43+
android:id="@+id/action_switch_view"
44+
android:icon="@drawable/ic_view_module"
45+
android:orderInCategory="3"
46+
app:showAsAction="never"
47+
android:title="@string/action_switch_grid_view" />
4248
</menu>

src/com/owncloud/android/ui/activity/UploadFilesActivity.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import android.os.Bundle;
3030
import android.os.Environment;
3131
import android.support.v4.app.DialogFragment;
32+
import android.support.v4.app.Fragment;
33+
import android.support.v4.content.ContextCompat;
3234
import android.support.v7.app.ActionBar;
3335
import android.view.Menu;
3436
import android.view.MenuItem;
@@ -46,6 +48,7 @@
4648
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
4749
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
4850
import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
51+
import com.owncloud.android.ui.fragment.ExtendedListFragment;
4952
import com.owncloud.android.ui.fragment.LocalFileListFragment;
5053
import com.owncloud.android.utils.FileStorageUtils;
5154

@@ -148,7 +151,7 @@ public void onCreate(Bundle savedInstanceState) {
148151
actionBar.setDisplayShowTitleEnabled(false);
149152
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
150153
actionBar.setListNavigationCallbacks(mDirectories, this);
151-
154+
152155
// wait dialog
153156
if (mCurrentDialog != null) {
154157
mCurrentDialog.dismiss();
@@ -179,6 +182,8 @@ public boolean onCreateOptionsMenu(Menu menu) {
179182
getMenuInflater().inflate(R.menu.upload_files_picker, menu);
180183
MenuItem selectAll = menu.findItem(R.id.action_select_all);
181184
setSelectAllMenuItem(selectAll, mSelectAll);
185+
MenuItem switchView = menu.findItem(R.id.action_switch_view);
186+
switchView.setTitle(isGridView() ? R.string.action_switch_list_view : R.string.action_switch_grid_view);
182187
return super.onCreateOptionsMenu(menu);
183188
}
184189

@@ -223,6 +228,18 @@ public void onClick(DialogInterface dialog, int which) {
223228
builder.create().show();
224229
break;
225230
}
231+
case R.id.action_switch_view: {
232+
if (isGridView()) {
233+
item.setTitle(getString(R.string.action_switch_grid_view));
234+
item.setIcon(R.drawable.ic_view_module);
235+
mFileListFragment.switchToListView();
236+
} else {
237+
item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
238+
item.setIcon(R.drawable.ic_view_list);
239+
mFileListFragment.switchToGridView();
240+
}
241+
return true;
242+
}
226243
default:
227244
retval = super.onOptionsItemSelected(item);
228245
}
@@ -515,4 +532,17 @@ protected void onAccountSet(boolean stateWasRecovered) {
515532
finish();
516533
}
517534
}
535+
536+
private boolean isGridView() {
537+
return getListOfFilesFragment().isGridEnabled();
538+
}
539+
540+
private ExtendedListFragment getListOfFilesFragment() {
541+
Fragment listOfFiles = mFileListFragment;
542+
if (listOfFiles != null) {
543+
return (ExtendedListFragment) listOfFiles;
544+
}
545+
Log_OC.e(TAG, "Access to unexisting list of files fragment!!");
546+
return null;
547+
}
518548
}

src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import android.view.LayoutInflater;
2626
import android.view.View;
2727
import android.view.ViewGroup;
28+
import android.widget.AbsListView;
2829
import android.widget.BaseAdapter;
30+
import android.widget.GridView;
2931
import android.widget.ImageView;
3032
import android.widget.ListView;
3133
import android.widget.TextView;
@@ -103,10 +105,12 @@ public int getItemViewType(int position) {
103105
@Override
104106
public View getView(int position, View convertView, ViewGroup parent) {
105107
View view = convertView;
108+
boolean isGridView = parent instanceof GridView;
106109
if (view == null) {
107110
LayoutInflater inflator = (LayoutInflater) mContext
108111
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
109-
view = inflator.inflate(R.layout.list_item, null);
112+
view = isGridView ? inflator.inflate(R.layout.grid_item, null) :
113+
inflator.inflate(R.layout.list_item, null);
110114
}
111115
if (mFiles != null && mFiles.length > position && mFiles[position] != null) {
112116
File file = mFiles[position];
@@ -129,20 +133,24 @@ public View getView(int position, View convertView, ViewGroup parent) {
129133
}
130134
fileIcon.setTag(file.hashCode());
131135

136+
ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
132137
TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);
133138
TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);
134-
TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
135-
ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
136-
lastModV.setVisibility(View.VISIBLE);
137-
lastModV.setText(DisplayUtils.getRelativeTimestamp(mContext, file.lastModified()));
139+
if (!isGridView) {
140+
TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
141+
lastModV.setVisibility(View.VISIBLE);
142+
lastModV.setText(DisplayUtils.getRelativeTimestamp(mContext, file.lastModified()));
143+
}
138144

139145
if (!file.isDirectory()) {
140-
fileSizeSeparatorV.setVisibility(View.VISIBLE);
141-
fileSizeV.setVisibility(View.VISIBLE);
142-
fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
146+
if (!isGridView) {
147+
fileSizeSeparatorV.setVisibility(View.VISIBLE);
148+
fileSizeV.setVisibility(View.VISIBLE);
149+
fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
150+
}
143151

144-
ListView parentList = (ListView) parent;
145-
if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) {
152+
AbsListView parentList = (AbsListView) parent;
153+
if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) {
146154
checkBoxV.setVisibility(View.GONE);
147155
} else {
148156
if (parentList.isItemChecked(position)) {
@@ -191,8 +199,10 @@ public View getView(int position, View convertView, ViewGroup parent) {
191199
}
192200

193201
} else {
194-
fileSizeSeparatorV.setVisibility(View.GONE);
195-
fileSizeV.setVisibility(View.GONE);
202+
if (!isGridView) {
203+
fileSizeSeparatorV.setVisibility(View.GONE);
204+
fileSizeV.setVisibility(View.GONE);
205+
}
196206
checkBoxV.setVisibility(View.GONE);
197207
}
198208

src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import android.view.LayoutInflater;
3131
import android.view.View;
3232
import android.view.ViewGroup;
33+
import android.widget.AbsListView;
3334
import android.widget.AdapterView;
3435
import android.widget.ImageView;
3536
import android.widget.ListView;
@@ -127,7 +128,7 @@ public void onItemClick(AdapterView<?> l, View v, int position, long id) {
127128
} else { /// Click on a file
128129
ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
129130
if (checkBoxV != null) {
130-
if (((ListView)getListView()).isItemChecked(position)) {
131+
if (((AbsListView)getListView()).isItemChecked(position)) {
131132
checkBoxV.setImageResource(R.drawable.ic_checkbox_marked);
132133
} else {
133134
checkBoxV.setImageResource(R.drawable.ic_checkbox_blank_outline);
@@ -206,7 +207,7 @@ public void listDirectory(File directory) {
206207
}
207208

208209
// by now, only files in the same directory will be kept as selected
209-
((ListView)mCurrentListView).clearChoices();
210+
((AbsListView)mCurrentListView).clearChoices();
210211
mAdapter.swapDirectory(directory);
211212
if (mDirectory == null || !mDirectory.equals(directory)) {
212213
mCurrentListView.setSelection(0);
@@ -222,7 +223,7 @@ public void listDirectory(File directory) {
222223
*/
223224
public String[] getCheckedFilePaths() {
224225
ArrayList<String> result = new ArrayList<String>();
225-
SparseBooleanArray positions = ((ListView)mCurrentListView).getCheckedItemPositions();
226+
SparseBooleanArray positions = ((AbsListView)mCurrentListView).getCheckedItemPositions();
226227
if (positions.size() > 0) {
227228
for (int i = 0; i < positions.size(); i++) {
228229
if (positions.get(positions.keyAt(i)) == true) {
@@ -254,7 +255,7 @@ public void sortBySize(boolean descending) {
254255
* @param select <code>true</code> to select all, <code>false</code> to deselect all
255256
*/
256257
public void selectAllFiles(boolean select) {
257-
ListView listView = (ListView) getListView();
258+
AbsListView listView = (AbsListView) getListView();
258259
for (int position = 0; position < listView.getCount(); position++) {
259260
File file = (File) mAdapter.getItem(position);
260261
if (file.isFile()) {

0 commit comments

Comments
 (0)