From: tobiasKaminsky Date: Thu, 29 Oct 2015 16:55:56 +0000 (+0100) Subject: Merge branch 'switchListVsGridMaster' into beta X-Git-Tag: beta-20151122~94 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/e8654191a721c6d5831992645f2c4f38a7ca35b7?hp=d6888f474f6f6cb284f8ef41b00b1aae1dff814f Merge branch 'switchListVsGridMaster' into beta --- diff --git a/res/drawable-hdpi/ic_view_list.png b/res/drawable-hdpi/ic_view_list.png new file mode 100644 index 00000000..64ad8e14 Binary files /dev/null and b/res/drawable-hdpi/ic_view_list.png differ diff --git a/res/drawable-hdpi/ic_view_module.png b/res/drawable-hdpi/ic_view_module.png new file mode 100644 index 00000000..7982e383 Binary files /dev/null and b/res/drawable-hdpi/ic_view_module.png differ diff --git a/res/drawable-mdpi/ic_view_list.png b/res/drawable-mdpi/ic_view_list.png new file mode 100644 index 00000000..4aca55c6 Binary files /dev/null and b/res/drawable-mdpi/ic_view_list.png differ diff --git a/res/drawable-mdpi/ic_view_module.png b/res/drawable-mdpi/ic_view_module.png new file mode 100644 index 00000000..f308a32b Binary files /dev/null and b/res/drawable-mdpi/ic_view_module.png differ diff --git a/res/drawable-xhdpi/ic_view_list.png b/res/drawable-xhdpi/ic_view_list.png new file mode 100644 index 00000000..b81d9102 Binary files /dev/null and b/res/drawable-xhdpi/ic_view_list.png differ diff --git a/res/drawable-xhdpi/ic_view_module.png b/res/drawable-xhdpi/ic_view_module.png new file mode 100644 index 00000000..b3548535 Binary files /dev/null and b/res/drawable-xhdpi/ic_view_module.png differ diff --git a/res/menu/file_actions_menu.xml b/res/menu/file_actions_menu.xml index 3e6f4cd4..4a295d53 100644 --- a/res/menu/file_actions_menu.xml +++ b/res/menu/file_actions_menu.xml @@ -1,4 +1,5 @@ - + Visas datnes + Iestatījumi + Aizvērt Atvērt Vispārīgi Vairāk @@ -40,6 +43,8 @@ Palīdzība Ieteikt draugam Atsauksmes + Izmēģini %1$s uz savu viedtālruni! + Pārbaudīt serveri Lietotājvārds Parole Datnes @@ -56,6 +61,7 @@ Augšupielādē sekundes atpakaļ Te vēl nekas nav. Rīkojies, sāc augšupielādēt! + Ielādē… Šajā mapē nav failu Uzsitiet uz datnes, lai redzētu papildinformāciju. Izmērs: @@ -65,6 +71,8 @@ Lejupielādēt Atsvaidzināt failu Datne tika pārsaukta uz %1$s augšupielādes laikā + Dalīt saiti + Pārtraukt dalīt saiti Jā Nē Labi @@ -119,6 +127,7 @@ Izņemt Tikai lokālos Tikai lokālos + No servera Veiksmīgi izņemts Neizdevās izņemt Ievadīt jaunu nosaukumu @@ -126,6 +135,7 @@ Nevarēja pabeigt pārsaukšanu Nevarēja atzīmēt attālinātas datnes Datnes saturs jau ir sinhronizēts + Mapi nevarēja izveidot Uzgaidīt brīdi Negaidīta problēma; lūdzu, izvēlieties datni no citas lietotnes Netika izvēlēta neviena datne @@ -151,14 +161,35 @@ Kam: Paraksts: Algoritms: + PNG attēls Attēlus augšupielādēt tikai caur WiFi /TūlītējaAugšupielāde Paturēt abas + Šo attēlu nevar attēlot + Ievadiet paroli + Jums ir jāievada paroli Sūtīt + Kopēt saiti + lai pārsauktu šo datni + lai dzēstu šo datni + lai dalītu šo datni + lai pārtrauktu šis datnes dalīšanu + lai izveidotu datni Konti + Pievienot kontu + Ielādē datus… Nepareiza parole + Pārvietot + Šeit nekā nav. Jūs varat pievienot mapi! Izvēlieties + lai pārvietotu šo datni + lai kopētu šo datni Drošība + koplietots + ar jums Servera adrese + Lietotājvārds + 1 mape + 1 datne diff --git a/res/values/strings.xml b/res/values/strings.xml index d41189f3..43cb0d96 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -367,5 +367,6 @@ %1$d files %1$d files, 1 folder %1$d files, %2$d folders - + Switch to grid view + Switch to list view diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index 4baf1ea5..0c7cc714 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -27,6 +27,7 @@ import android.webkit.MimeTypeMap; import com.owncloud.android.lib.common.utils.Log_OC; import java.io.File; +import java.util.Enumeration; import third_parties.daveKoeller.AlphanumComparator; public class OCFile implements Parcelable, Comparable { @@ -74,6 +75,8 @@ public class OCFile implements Parcelable, Comparable { private boolean mIsDownloading; + private boolean mShowGridView; + /** * Create new {@link OCFile} with given path. diff --git a/src/com/owncloud/android/files/FileMenuFilter.java b/src/com/owncloud/android/files/FileMenuFilter.java index f7fee626..1d5ca454 100644 --- a/src/com/owncloud/android/files/FileMenuFilter.java +++ b/src/com/owncloud/android/files/FileMenuFilter.java @@ -229,7 +229,6 @@ public class FileMenuFilter { } else { toShow.add(R.id.action_unfavorite_file); } - } } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 240d146f..37bd66f3 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -154,8 +154,9 @@ public class FileDisplayActivity extends HookActivity private static String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED"; private OCFile mWaitingToSend; + private Menu mOptionsMenu; + - @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.v(TAG, "onCreate() start"); @@ -321,6 +322,12 @@ public class FileDisplayActivity extends HookActivity startTextPreview(file); } + if (DisplayUtils.isGridView(getFile(), getStorageManager())){ + switchToGridView(); + } else { + switchToListView(); + } + } else { Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!"); if (getAccount() == null) { @@ -489,6 +496,7 @@ public class FileDisplayActivity extends HookActivity menu.findItem(R.id.action_create_dir).setVisible(!drawerOpen); menu.findItem(R.id.action_sort).setVisible(!drawerOpen); menu.findItem(R.id.action_sync_account).setVisible(!drawerOpen); + menu.findItem(R.id.action_switch_view).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @@ -497,6 +505,12 @@ public class FileDisplayActivity extends HookActivity public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); + mOptionsMenu = menu; + + MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view); + + changeGridIcon(); + return true; } @@ -564,6 +578,23 @@ public class FileDisplayActivity extends HookActivity builder.create().show(); break; } + case R.id.action_switch_view:{ + if (isGridView()){ + item.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view)); + item.setIcon(ContextCompat.getDrawable(getApplicationContext(), + R.drawable.ic_view_module)); + DisplayUtils.setViewMode(getFile(), false); + switchToListView(); + } else { + item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view)); + item.setIcon(ContextCompat.getDrawable(getApplicationContext(), + R.drawable.ic_view_list)); + DisplayUtils.setViewMode(getFile(), true); + switchToGridView(); + } + + return true; + } default: retval = super.onOptionsItemSelected(item); } @@ -798,11 +829,26 @@ public class FileDisplayActivity extends HookActivity setFile(listOfFiles.getCurrentFile()); } cleanSecondFragment(); + + changeGridIcon(); } else { super.onBackPressed(); } } + private void changeGridIcon(){ + MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view); + if (DisplayUtils.isGridView(getFile(), getStorageManager())){ + menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view)); + menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(), + R.drawable.ic_view_list)); + } else { + menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view)); + menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(), + R.drawable.ic_view_module)); + } + } + @Override protected void onSaveInstanceState(Bundle outState) { // responsibility of restore is preferred in onCreate() before than in @@ -1200,6 +1246,15 @@ public class FileDisplayActivity extends HookActivity cleanSecondFragment(); // Sync Folder startSyncFolderOperation(directory, false); + + MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view); + + changeGridIcon(); + if (DisplayUtils.isGridView(directory, getStorageManager())){ + switchToGridView(); + } else { + switchToListView(); + } } /** @@ -1797,6 +1852,13 @@ public class FileDisplayActivity extends HookActivity private void sortByName(boolean ascending) { getListOfFilesFragment().sortByName(ascending); } + private boolean isGridView(){ return getListOfFilesFragment().isGridView(); } + private void switchToGridView() { + getListOfFilesFragment().switchToGridView(); + } + private void switchToListView() { + getListOfFilesFragment().switchToListView(); + } public void allFilesOption() { browseToRoot(); diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 5b68063c..5d6b8192 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -487,4 +487,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { public void setGridMode(boolean gridMode) { mGridMode = gridMode; } + + public boolean isGridMode() { + return mGridMode; + } } diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 24015d08..1a19e651 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -97,7 +97,7 @@ public class ExtendedListFragment extends Fragment } - protected void switchToGridView() { + public void switchToGridView() { if ((mCurrentListView == mListView)) { mListView.setAdapter(null); @@ -112,8 +112,8 @@ public class ExtendedListFragment extends Fragment mCurrentListView = mGridView; } } - - protected void switchToListView() { + + public void switchToListView() { if (mCurrentListView == mGridView) { mGridView.setAdapter(null); mRefreshGridLayout.setVisibility(View.GONE); @@ -127,6 +127,13 @@ public class ExtendedListFragment extends Fragment mCurrentListView = mListView; } } + + public boolean isGridView(){ + if (mAdapter instanceof FileListListAdapter) { + return ((FileListListAdapter) mAdapter).isGridMode(); + } + return false; + } @Override diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 02105d9e..bfe6ec24 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -53,6 +53,7 @@ import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.dialog.RenameFileDialogFragment; import com.owncloud.android.ui.preview.PreviewImageFragment; import com.owncloud.android.ui.preview.PreviewMediaFragment; +import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.ui.preview.PreviewTextFragment; @@ -327,6 +328,9 @@ public class OCFileListFragment extends ExtendedListFragment implements FileActi item.setEnabled(false); } } + +// String.format(mContext.getString(R.string.subject_token), +// getClient().getCredentials().getUsername(), file.getFileName())); } } @@ -517,7 +521,7 @@ public class OCFileListFragment extends ExtendedListFragment implements FileActi OwnCloudVersion version = AccountUtils.getServerVersion( ((FileActivity)mContainerActivity).getAccount()); if (version != null && version.supportsRemoteThumbnails() && - imagesCount > 0 && imagesCount == filesCount) { + DisplayUtils.isGridView(mFile, mContainerActivity.getStorageManager())) { switchToGridView(); registerLongClickListener(); } else { diff --git a/src/com/owncloud/android/utils/DisplayUtils.java b/src/com/owncloud/android/utils/DisplayUtils.java index 8a281e92..374a7136 100644 --- a/src/com/owncloud/android/utils/DisplayUtils.java +++ b/src/com/owncloud/android/utils/DisplayUtils.java @@ -22,9 +22,21 @@ package com.owncloud.android.utils; +import java.io.File; +import java.net.IDN; +import java.text.DateFormat; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; +import java.util.Vector; + import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Point; import android.graphics.PorterDuff; import android.os.Build; @@ -35,6 +47,7 @@ import android.widget.SeekBar; import com.owncloud.android.MainApp; import com.owncloud.android.R; +import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import java.net.IDN; @@ -245,6 +258,67 @@ public class DisplayUtils { } /** + * Determines if user set folder to grid or list view. If folder is not set itself, + * it finds a parent that is set (at least root is set). + * @param file + * @param storageManager + * @return + */ + public static boolean isGridView(OCFile file, FileDataStorageManager storageManager){ + if (file != null) { + OCFile fileToTest = file; + OCFile parentDir = null; + String parentPath = null; + + SharedPreferences setting = MainApp.getAppContext().getSharedPreferences( + "viewMode", Context.MODE_PRIVATE); + + if (setting.contains(fileToTest.getRemoteId())) { + return setting.getBoolean(fileToTest.getRemoteId(), false); + } else { + do { + if (fileToTest.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) { + parentPath = new File(fileToTest.getRemotePath()).getParent(); + parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : + parentPath + OCFile.PATH_SEPARATOR; + parentDir = storageManager.getFileByPath(parentPath); + } else { + parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH); + } + + while (parentDir == null) { + parentPath = new File(parentPath).getParent(); + parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : + parentPath + OCFile.PATH_SEPARATOR; + parentDir = storageManager.getFileByPath(parentPath); + } + fileToTest = parentDir; + } while (endWhile(parentDir, setting)); + return setting.getBoolean(fileToTest.getRemoteId(), false); + } + } else { + return false; + } + } + + private static boolean endWhile(OCFile parentDir, SharedPreferences setting) { + if (parentDir.getRemotePath().compareToIgnoreCase(OCFile.ROOT_PATH) == 0) { + return false; + } else { + return !setting.contains(parentDir.getRemoteId()); + } + } + + public static void setViewMode(OCFile file, boolean setGrid){ + SharedPreferences setting = MainApp.getAppContext().getSharedPreferences( + "viewMode", Context.MODE_PRIVATE); + + SharedPreferences.Editor editor = setting.edit(); + editor.putBoolean(file.getRemoteId(), setGrid); + editor.commit(); + } + + /** * sets the coloring of the given progress bar to color_accent. * * @param progressBar the progress bar to be colored