diff --git a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 0cb32e4f84..3c943bbbb4 100644 --- a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -1,23 +1,23 @@ /** - * Nextcloud Android client application + * Nextcloud Android client application * - * @author Andy Scherzinger - * Copyright (C) 2016 Andy Scherzinger - * Copyright (C) 2016 Nextcloud - * Copyright (C) 2016 ownCloud Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * 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 . + * @author Andy Scherzinger + * Copyright (C) 2016 Andy Scherzinger + * Copyright (C) 2016 Nextcloud + * Copyright (C) 2016 ownCloud Inc. + *

+ * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + *

+ * 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 . */ package com.owncloud.android.ui.activity; @@ -56,6 +56,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.SearchOperation; import com.owncloud.android.lib.resources.users.GetRemoteUserInfoOperation; import com.owncloud.android.ui.TextDrawable; +import com.owncloud.android.ui.events.DummyDrawerEvent; import com.owncloud.android.ui.events.MenuItemClickEvent; import com.owncloud.android.ui.events.SearchEvent; import com.owncloud.android.utils.DisplayUtils; @@ -294,6 +295,7 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU } if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) { + navigationView.getMenu().removeItem(R.id.nav_photos); navigationView.getMenu().removeItem(R.id.nav_all_files); navigationView.getMenu().removeItem(R.id.nav_settings); navigationView.getMenu().removeItem(R.id.nav_favorites); @@ -339,7 +341,14 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU } } - private void selectNavigationItem(final MenuItem menuItem) { + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageEvent(DummyDrawerEvent event) { + unsetAllDrawerMenuItems(); + } + + + private void selectNavigationItem(final MenuItem menuItem) { + switch (menuItem.getItemId()) { case R.id.nav_all_files: menuItem.setChecked(true); @@ -349,7 +358,12 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU case R.id.nav_favorites: menuItem.setChecked(true); mCheckedMenuItem = menuItem.getItemId(); - EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.FAVORITE_SEARCH)); + EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.FAVORITE_SEARCH, + SearchEvent.UnsetType.NO_UNSET)); + break; + case R.id.nav_photos: + EventBus.getDefault().post(new SearchEvent("image/%", + SearchOperation.SearchType.CONTENT_TYPE_SEARCH, SearchEvent.UnsetType.NO_UNSET)); break; case R.id.nav_on_device: menuItem.setChecked(true); @@ -363,7 +377,7 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU startActivity(uploadListIntent); break; case R.id.nav_folder_sync: - Intent folderSyncIntent = new Intent(getApplicationContext(),FolderSyncActivity.class); + Intent folderSyncIntent = new Intent(getApplicationContext(), FolderSyncActivity.class); startActivity(folderSyncIntent); break; case R.id.nav_settings: @@ -384,15 +398,26 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU startActivityForResult(manageAccountsIntent, ACTION_MANAGE_ACCOUNTS); break; case R.id.nav_recently_added: - EventBus.getDefault().post(new SearchEvent("%", SearchOperation.SearchType.CONTENT_TYPE_SEARCH)); + menuItem.setChecked(true); + mCheckedMenuItem = menuItem.getItemId(); + EventBus.getDefault().post(new SearchEvent("%", SearchOperation.SearchType.CONTENT_TYPE_SEARCH, + SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR)); break; case R.id.nav_recently_modified: - EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)); + menuItem.setChecked(true); + mCheckedMenuItem = menuItem.getItemId(); + EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH, + SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR)); break; case R.id.nav_shared: + menuItem.setChecked(true); + mCheckedMenuItem = menuItem.getItemId(); break; case R.id.nav_videos: - EventBus.getDefault().post(new SearchEvent("video/%", SearchOperation.SearchType.CONTENT_TYPE_SEARCH)); + menuItem.setChecked(true); + mCheckedMenuItem = menuItem.getItemId(); + EventBus.getDefault().post(new SearchEvent("video/%", SearchOperation.SearchType.CONTENT_TYPE_SEARCH, + SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR)); break; case Menu.NONE: // account clicked @@ -654,9 +679,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU /** * configured the quota to be displayed. * - * @param usedSpace the used space + * @param usedSpace the used space * @param totalSpace the total space - * @param relative the percentage of space already used + * @param relative the percentage of space already used */ private void setQuotaInformation(long usedSpace, long totalSpace, int relative) { mQuotaProgressBar.setProgress(relative); @@ -670,6 +695,17 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU showQuota(true); } + protected void unsetAllDrawerMenuItems() { + if (mNavigationView != null && mNavigationView.getMenu() != null) { + Menu menu = mNavigationView.getMenu(); + for (int i = 0; i < menu.size(); i++) { + menu.getItem(i).setChecked(false); + } + } + + mCheckedMenuItem = Menu.NONE; + } + /** * checks/highlights the provided menu item if the drawer has been initialized and the menu item exists. * @@ -881,10 +917,10 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU @Override public void avatarGenerated(Drawable avatarDrawable, Object callContext) { if (callContext instanceof MenuItem) { - MenuItem mi = (MenuItem)callContext; + MenuItem mi = (MenuItem) callContext; mi.setIcon(avatarDrawable); } else if (callContext instanceof ImageView) { - ImageView iv = (ImageView)callContext; + ImageView iv = (ImageView) callContext; iv.setImageDrawable(avatarDrawable); } } @@ -892,10 +928,10 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU @Override public boolean shouldCallGeneratedCallback(String tag, Object callContext) { if (callContext instanceof MenuItem) { - MenuItem mi = (MenuItem)callContext; + MenuItem mi = (MenuItem) callContext; return String.valueOf(mi.getTitle()).equals(tag); } else if (callContext instanceof ImageView) { - ImageView iv = (ImageView)callContext; + ImageView iv = (ImageView) callContext; return String.valueOf(iv.getTag()).equals(tag); } return false; @@ -904,7 +940,7 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU /** * Adds other listeners to react on changes of the drawer layout. * - * @param listener Object interested in changes of the drawer layout. + * @param listener Object interested in changes of the drawer layout. */ public void addDrawerListener(DrawerLayout.DrawerListener listener) { if (mDrawerLayout != null) { diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 3a6891782f..6daa0bf96c 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -81,6 +81,7 @@ import com.owncloud.android.operations.SynchronizeFileOperation; import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.syncadapter.FileSyncAdapter; +import com.owncloud.android.ui.fragment.ExtendedListFragment; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.ui.fragment.OCFileListFragment; @@ -319,27 +320,6 @@ public class FileDisplayActivity extends HookActivity } } - @Override - protected void onStart() { - Log_OC.v(TAG, "onStart() start"); - super.onStart(); - Log_OC.v(TAG, "onStart() end"); - } - - @Override - protected void onStop() { - Log_OC.v(TAG, "onStop() start"); - super.onStop(); - Log_OC.v(TAG, "onStop() end"); - } - - @Override - protected void onDestroy() { - Log_OC.v(TAG, "onDestroy() start"); - super.onDestroy(); - Log_OC.v(TAG, "onDestroy() end"); - } - /** * Called when the ownCloud {@link Account} associated to the Activity was just updated. */ @@ -941,6 +921,16 @@ public class FileDisplayActivity extends HookActivity return (mSearchEditFrame != null && mSearchEditFrame.getVisibility() == View.VISIBLE); } + private void revertBottomNavigationBarToAllFiles() { + if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) { + BottomNavigationView bottomNavigationView = (BottomNavigationView) getListOfFilesFragment().getView() + .findViewById(R.id.bottom_navigation_view); + if (bottomNavigationView.getMenu().findItem(R.id.nav_bar_settings).isChecked()) { + bottomNavigationView.getMenu().findItem(R.id.nav_bar_files).setChecked(true); + } + } + } + @Override public void onBackPressed() { boolean isFabOpen = isFabOpen(); @@ -955,14 +945,6 @@ public class FileDisplayActivity extends HookActivity * 4. navigate up (only if drawer and FAB aren't open) */ - if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) { - BottomNavigationView bottomNavigationView = (BottomNavigationView) getListOfFilesFragment().getView() - .findViewById(R.id.bottom_navigation_view); - if (bottomNavigationView.getMenu().findItem(R.id.nav_bar_settings).isChecked()) { - bottomNavigationView.getMenu().findItem(R.id.nav_bar_files).setChecked(true); - } - } - if (isSearchOpen && searchView != null) { searchView.setQuery("", true); searchView.onActionViewCollapsed(); @@ -1018,6 +1000,7 @@ public class FileDisplayActivity extends HookActivity Log_OC.v(TAG, "onResume() start"); super.onResume(); + revertBottomNavigationBarToAllFiles(); // refresh list of files if (searchView != null && !TextUtils.isEmpty(searchQuery)) { @@ -1206,7 +1189,7 @@ public class FileDisplayActivity extends HookActivity OCFileListFragment ocFileListFragment = getListOfFilesFragment(); if (ocFileListFragment != null) { if (!mSyncInProgress) { - ocFileListFragment.setEmptyListMessage(false); + ocFileListFragment.setEmptyListMessage(ExtendedListFragment.SearchType.NO_SEARCH); } else { ocFileListFragment.setEmptyListLoadingMessage(); } diff --git a/src/main/java/com/owncloud/android/ui/activity/Preferences.java b/src/main/java/com/owncloud/android/ui/activity/Preferences.java index 7829c70dbd..9f0cdd99cc 100644 --- a/src/main/java/com/owncloud/android/ui/activity/Preferences.java +++ b/src/main/java/com/owncloud/android/ui/activity/Preferences.java @@ -809,5 +809,4 @@ public class Preferences extends PreferenceActivity public void onCancelMigration() { // Migration was canceled so we don't do anything } - } diff --git a/src/main/java/com/owncloud/android/ui/events/DummyDrawerEvent.java b/src/main/java/com/owncloud/android/ui/events/DummyDrawerEvent.java new file mode 100644 index 0000000000..10dfffe37f --- /dev/null +++ b/src/main/java/com/owncloud/android/ui/events/DummyDrawerEvent.java @@ -0,0 +1,27 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * + * 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. + * + * 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 . + */ +package com.owncloud.android.ui.events; + +/** + * Dummy drawer event + */ + +public class DummyDrawerEvent { +} diff --git a/src/main/java/com/owncloud/android/ui/events/SearchEvent.java b/src/main/java/com/owncloud/android/ui/events/SearchEvent.java index bf1c4c86d5..7b80ba92be 100644 --- a/src/main/java/com/owncloud/android/ui/events/SearchEvent.java +++ b/src/main/java/com/owncloud/android/ui/events/SearchEvent.java @@ -30,11 +30,24 @@ public class SearchEvent { public final SearchOperation.SearchType searchType; + public final UnsetType unsetType; - public SearchEvent(String searchQuery, SearchOperation.SearchType searchType) { + public enum UnsetType { + NO_UNSET, + UNSET_DRAWER, + UNSET_BOTTOM_NAV_BAR; + } + + public SearchEvent(String searchQuery, SearchOperation.SearchType searchType, UnsetType unsetType) { this.searchQuery = searchQuery; this.searchType = searchType; + this.unsetType = unsetType; + + } + + public UnsetType getUnsetType() { + return unsetType; } public String getSearchQuery() { diff --git a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index cc014c1baa..8c58814217 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -1,21 +1,20 @@ /** - * ownCloud Android client application - * - * Copyright (C) 2012 Bartek Przybylski - * Copyright (C) 2012-2016 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * + * ownCloud Android client application + *

+ * Copyright (C) 2012 Bartek Przybylski + * Copyright (C) 2012-2016 ownCloud Inc. + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + *

+ * 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 General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ package com.owncloud.android.ui.fragment; @@ -24,8 +23,10 @@ import android.animation.LayoutTransition; import android.app.Activity; import android.os.Bundle; import android.os.Handler; +import android.os.Looper; import android.support.annotation.DrawableRes; import android.support.annotation.StringRes; +import android.support.design.widget.BottomNavigationView; import android.support.v4.app.Fragment; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; @@ -66,16 +67,28 @@ import java.util.ArrayList; import third_parties.in.srain.cube.GridViewWithHeaderAndFooter; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.FAVORITE_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.FAVORITE_SEARCH_FILTER; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.FILE_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.NO_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.PHOTO_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.RECENTLY_ADDED_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.RECENTLY_ADDED_SEARCH_FILTER; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH_FILTER; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.REGULAR_FILTER; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.VIDEO_SEARCH; +import static com.owncloud.android.ui.fragment.ExtendedListFragment.SearchType.VIDEO_SEARCH_FILTER; public class ExtendedListFragment extends Fragment implements OnItemClickListener, OnEnforceableRefreshListener, SearchView.OnQueryTextListener { protected static final String TAG = ExtendedListFragment.class.getSimpleName(); - protected static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION"; + protected static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION"; private static final String KEY_INDEXES = "INDEXES"; - private static final String KEY_FIRST_POSITIONS= "FIRST_POSITIONS"; + private static final String KEY_FIRST_POSITIONS = "FIRST_POSITIONS"; private static final String KEY_TOPS = "TOPS"; private static final String KEY_HEIGHT_CELL = "HEIGHT_CELL"; private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE"; @@ -114,6 +127,25 @@ public class ExtendedListFragment extends Fragment protected SearchView searchView; private Handler handler = new Handler(); + protected Menu mMenu; + + public enum SearchType { + NO_SEARCH, + REGULAR_FILTER, + FILE_SEARCH, + FAVORITE_SEARCH, + FAVORITE_SEARCH_FILTER, + VIDEO_SEARCH, + VIDEO_SEARCH_FILTER, + PHOTO_SEARCH, + PHOTOS_SEARCH_FILTER, + RECENTLY_MODIFIED_SEARCH, + RECENTLY_MODIFIED_SEARCH_FILTER, + RECENTLY_ADDED_SEARCH, + RECENTLY_ADDED_SEARCH_FILTER + } + + protected void setListAdapter(BaseAdapter listAdapter) { mAdapter = listAdapter; mCurrentListView.setAdapter(listAdapter); @@ -160,12 +192,13 @@ public class ExtendedListFragment extends Fragment } } - public boolean isGridEnabled(){ + public boolean isGridEnabled() { return (mCurrentListView != null && mCurrentListView.equals(mGridView)); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + mMenu = menu; final MenuItem item = menu.findItem(R.id.action_search); searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(this); @@ -200,6 +233,17 @@ public class ExtendedListFragment extends Fragment public void run() { if (getActivity() != null && !(getActivity() instanceof FolderPickerActivity)) { setFabEnabled(!hasFocus); + + if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) { + BottomNavigationView bottomNavigationView = (BottomNavigationView) getActivity(). + findViewById(R.id.bottom_navigation_view); + if (hasFocus) { + bottomNavigationView.setVisibility(View.GONE); + } else { + bottomNavigationView.setVisibility(View.VISIBLE); + } + } + } } }, 100); @@ -220,9 +264,10 @@ public class ExtendedListFragment extends Fragment if (currentVisibility != oldVisibility) { if (currentVisibility == View.VISIBLE) { - setEmptyListMessage(true); + + setEmptyListMessage(SearchType.REGULAR_FILTER); } else { - setEmptyListMessage(false); + setEmptyListMessage(NO_SEARCH); } oldVisibility = currentVisibility; @@ -284,11 +329,11 @@ public class ExtendedListFragment extends Fragment if ((activity = getActivity()) != null) { if (activity instanceof FileDisplayActivity) { ((FileDisplayActivity) activity).refreshListOfFilesFragment(true); - } else if (activity instanceof UploadFilesActivity){ + } else if (activity instanceof UploadFilesActivity) { LocalFileListAdapter localFileListAdapter = (LocalFileListAdapter) mAdapter; localFileListAdapter.filter(query); } else if (activity instanceof FolderPickerActivity) { - ((FolderPickerActivity)activity).refreshListOfFilesFragment(true); + ((FolderPickerActivity) activity).refreshListOfFilesFragment(true); } } @@ -305,7 +350,7 @@ public class ExtendedListFragment extends Fragment View v = inflater.inflate(R.layout.list_fragment, null); setupEmptyList(v); - mListView = (ExtendedListView)(v.findViewById(R.id.list_root)); + mListView = (ExtendedListView) (v.findViewById(R.id.list_root)); mListView.setOnItemClickListener(this); mListFooterView = inflater.inflate(R.layout.list_footer, null, false); @@ -366,23 +411,23 @@ public class ExtendedListFragment extends Fragment @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - + if (savedInstanceState != null) { mIndexes = savedInstanceState.getIntegerArrayList(KEY_INDEXES); mFirstPositions = savedInstanceState.getIntegerArrayList(KEY_FIRST_POSITIONS); mTops = savedInstanceState.getIntegerArrayList(KEY_TOPS); mHeightCell = savedInstanceState.getInt(KEY_HEIGHT_CELL); setMessageForEmptyList(savedInstanceState.getString(KEY_EMPTY_LIST_MESSAGE)); - + } else { mIndexes = new ArrayList<>(); mFirstPositions = new ArrayList<>(); mTops = new ArrayList<>(); mHeightCell = 0; } - } - - + } + + @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); @@ -400,10 +445,10 @@ public class ExtendedListFragment extends Fragment * Calculates the position of the item that will be used as a reference to * reposition the visible items in the list when the device is turned to * other position. - * + * * The current policy is take as a reference the visible item in the center * of the screen. - * + * * @return The position in the list of the visible item in the center of the * screen. */ @@ -421,25 +466,25 @@ public class ExtendedListFragment extends Fragment * Restore index and position */ protected void restoreIndexAndTopPosition() { - if (mIndexes.size() > 0) { + if (mIndexes.size() > 0) { // needs to be checked; not every browse-up had a browse-down before - + int index = mIndexes.remove(mIndexes.size() - 1); - final int firstPosition = mFirstPositions.remove(mFirstPositions.size() -1); + final int firstPosition = mFirstPositions.remove(mFirstPositions.size() - 1); int top = mTops.remove(mTops.size() - 1); Log_OC.v(TAG, "Setting selection to position: " + firstPosition + "; top: " + top + "; index: " + index); - if (mCurrentListView!= null && mCurrentListView.equals(mListView)) { - if (mHeightCell*index <= mListView.getHeight()) { + if (mCurrentListView != null && mCurrentListView.equals(mListView)) { + if (mHeightCell * index <= mListView.getHeight()) { mListView.setSelectionFromTop(firstPosition, top); } else { mListView.setSelectionFromTop(index, 0); } } else { - if (mHeightCell*index <= mGridView.getHeight()) { + if (mHeightCell * index <= mGridView.getHeight()) { mGridView.setSelection(firstPosition); //mGridView.smoothScrollToPosition(firstPosition); } else { @@ -450,29 +495,29 @@ public class ExtendedListFragment extends Fragment } } - + /* * Save index and top position */ protected void saveIndexAndTopPosition(int index) { - + mIndexes.add(index); - + int firstPosition = mCurrentListView.getFirstVisiblePosition(); mFirstPositions.add(firstPosition); - + View view = mCurrentListView.getChildAt(0); - int top = (view == null) ? 0 : view.getTop() ; + int top = (view == null) ? 0 : view.getTop(); mTops.add(top); - + // Save the height of a cell mHeightCell = (view == null || mHeightCell != 0) ? mHeightCell : view.getHeight(); } - - + + @Override - public void onItemClick (AdapterView parent, View view, int position, long id) { + public void onItemClick(AdapterView parent, View view, int position, long id) { // to be @overriden } @@ -501,7 +546,7 @@ public class ExtendedListFragment extends Fragment public void setOnRefreshListener(OnEnforceableRefreshListener listener) { mOnRefreshListener = listener; } - + /** * Disables swipe gesture. @@ -526,7 +571,7 @@ public class ExtendedListFragment extends Fragment * @param enabled Desired visibility for the FAB. */ public void setFabEnabled(boolean enabled) { - if(enabled) { + if (enabled) { mFabMain.setVisibility(View.VISIBLE); } else { mFabMain.setVisibility(View.GONE); @@ -555,22 +600,52 @@ public class ExtendedListFragment extends Fragment mEmptyListMessage.setText(message); mEmptyListIcon.setImageResource(icon); - mEmptyListIcon.setVisibility(View.VISIBLE); - mEmptyListProgress.setVisibility(View.GONE); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + mEmptyListIcon.setVisibility(View.VISIBLE); + mEmptyListProgress.setVisibility(View.GONE); + } + }); } } - public void setEmptyListMessage(boolean isSearch) { - if (isSearch) { - setMessageForEmptyList(R.string.file_list_empty_headline_search, - R.string.file_list_empty_search, R.drawable.ic_search_light_grey); - - } else { + public void setEmptyListMessage(SearchType searchType) { + if (searchType == NO_SEARCH) { setMessageForEmptyList( R.string.file_list_empty_headline, R.string.file_list_empty, R.drawable.ic_list_empty_folder ); + } else if (searchType == FILE_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search, + R.string.file_list_empty, R.drawable.ic_search_light_grey); + } else if (searchType == FAVORITE_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search, + R.string.file_list_empty_favorites, R.drawable.ic_search_light_grey); + } else if (searchType == VIDEO_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search_videos, + R.string.file_list_empty_text_videos, R.drawable.ic_search_light_grey); + } else if (searchType == PHOTO_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search_photos, + R.string.file_list_empty_text_photos, R.drawable.ic_search_light_grey); + } else if (searchType == RECENTLY_MODIFIED_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search, + R.string.file_list_empty_recently_modified, R.drawable.ic_search_light_grey); + } else if (searchType == RECENTLY_ADDED_SEARCH) { + setMessageForEmptyList(R.string.file_list_empty_headline_server_search, + R.string.file_list_empty_recently_added, R.drawable.ic_search_light_grey); + } else if (searchType == REGULAR_FILTER) { + setMessageForEmptyList(R.string.file_list_empty_headline_search, + R.string.file_list_empty_search, R.drawable.ic_search_light_grey); + } else if (searchType == FAVORITE_SEARCH_FILTER) { + + } else if (searchType == VIDEO_SEARCH_FILTER) { + + } else if (searchType == RECENTLY_MODIFIED_SEARCH_FILTER) { + + } else if (searchType == RECENTLY_ADDED_SEARCH_FILTER) { + } } @@ -582,14 +657,19 @@ public class ExtendedListFragment extends Fragment mEmptyListHeadline.setText(R.string.file_list_loading); mEmptyListMessage.setText(""); - mEmptyListIcon.setVisibility(View.GONE); - mEmptyListProgress.setVisibility(View.VISIBLE); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + mEmptyListIcon.setVisibility(View.GONE); + mEmptyListProgress.setVisibility(View.VISIBLE); + } + }); } } /** * Get the text of EmptyListMessage TextView. - * + * * @return String empty text view text-value */ public String getEmptyViewText() { @@ -632,7 +712,7 @@ public class ExtendedListFragment extends Fragment protected void setFooterEnabled(boolean enabled) { if (enabled) { if (mGridView.getFooterViewCount() == 0 && mGridView.isCorrectAdapter()) { - if (mGridFooterView.getParent() != null ) { + if (mGridFooterView.getParent() != null) { ((ViewGroup) mGridFooterView.getParent()).removeView(mGridFooterView); } mGridView.addFooterView(mGridFooterView, null, false); @@ -640,7 +720,7 @@ public class ExtendedListFragment extends Fragment mGridFooterView.invalidate(); if (mListView.getFooterViewsCount() == 0) { - if (mListFooterView.getParent() != null ) { + if (mListFooterView.getParent() != null) { ((ViewGroup) mListFooterView.getParent()).removeView(mListFooterView); } mListView.addFooterView(mListFooterView, null, false); @@ -660,8 +740,8 @@ public class ExtendedListFragment extends Fragment */ protected void setFooterText(String text) { if (text != null && text.length() > 0) { - ((TextView)mListFooterView.findViewById(R.id.footerText)).setText(text); - ((TextView)mGridFooterView.findViewById(R.id.footerText)).setText(text); + ((TextView) mListFooterView.findViewById(R.id.footerText)).setText(text); + ((TextView) mGridFooterView.findViewById(R.id.footerText)).setText(text); setFooterEnabled(true); } else { diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index c69d1d8e53..483908c306 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1,24 +1,23 @@ /** - * ownCloud Android client application - * - * @author Bartek Przybylski - * @author masensio - * @author David A. Velasco - * Copyright (C) 2011 Bartek Przybylski - * Copyright (C) 2016 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * ownCloud Android client application * + * @author Bartek Przybylski + * @author masensio + * @author David A. Velasco + * Copyright (C) 2011 Bartek Przybylski + * Copyright (C) 2016 ownCloud Inc. + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + *

+ * 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 General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ package com.owncloud.android.ui.fragment; @@ -31,6 +30,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; @@ -73,6 +74,7 @@ import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment; import com.owncloud.android.ui.dialog.RenameFileDialogFragment; +import com.owncloud.android.ui.events.DummyDrawerEvent; import com.owncloud.android.ui.events.MenuItemClickEvent; import com.owncloud.android.ui.events.SearchEvent; import com.owncloud.android.ui.helpers.SparseBooleanArrayParcelable; @@ -200,28 +202,29 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi bottomNavigationView.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() { - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.nav_bar_files: - EventBus.getDefault().post(new MenuItemClickEvent(item)); - break; - case R.id.nav_bar_favorites: - EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.FAVORITE_SEARCH)); - break; - case R.id.nav_bar_photos: - EventBus.getDefault().post(new SearchEvent("image/%", - SearchOperation.SearchType.CONTENT_TYPE_SEARCH)); - break; - case R.id.nav_bar_settings: - EventBus.getDefault().post(new MenuItemClickEvent(item)); - break; - default: - break; - } - return true; - } - }); + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.nav_bar_files: + EventBus.getDefault().post(new MenuItemClickEvent(item)); + break; + case R.id.nav_bar_favorites: + EventBus.getDefault().post(new SearchEvent("", SearchOperation.SearchType.FAVORITE_SEARCH, + SearchEvent.UnsetType.UNSET_DRAWER)); + break; + case R.id.nav_bar_photos: + EventBus.getDefault().post(new SearchEvent("image/%", + SearchOperation.SearchType.CONTENT_TYPE_SEARCH, SearchEvent.UnsetType.UNSET_DRAWER)); + break; + case R.id.nav_bar_settings: + EventBus.getDefault().post(new MenuItemClickEvent(item)); + break; + default: + break; + } + return true; + } + }); } @Override @@ -276,12 +279,12 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi // detect if a mini FAB has ever been clicked final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - if(prefs.getLong(KEY_FAB_EVER_CLICKED, 0) > 0) { + if (prefs.getLong(KEY_FAB_EVER_CLICKED, 0) > 0) { miniFabClicked = true; } // add labels to the min FABs when none of them has ever been clicked on - if(!miniFabClicked) { + if (!miniFabClicked) { setFabLabels(); } else { removeFabLabels(); @@ -399,7 +402,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi */ private void recordMiniFabClick() { // only record if it hasn't been done already at some other time - if(!miniFabClicked) { + if (!miniFabClicked) { final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); sp.edit().putLong(KEY_FAB_EVER_CLICKED, 1).apply(); miniFabClicked = true; @@ -435,7 +438,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi * and closed. */ private class MultiChoiceModeListener - implements AbsListView.MultiChoiceModeListener, DrawerLayout.DrawerListener { + implements AbsListView.MultiChoiceModeListener, DrawerLayout.DrawerListener { private static final String KEY_ACTION_MODE_CLOSED_BY_DRAWER = "KILLED_ACTION_MODE"; private static final String KEY_SELECTION_WHEN_CLOSED_BY_DRAWER = "CHECKED_ITEMS"; @@ -468,12 +471,12 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi */ @Override public void onDrawerClosed(View drawerView) { - if (mSelectionWhenActionModeClosedByDrawer !=null && mActionModeClosedByDrawer) { - for (int i = 0; i< mSelectionWhenActionModeClosedByDrawer.size(); i++) { + if (mSelectionWhenActionModeClosedByDrawer != null && mActionModeClosedByDrawer) { + for (int i = 0; i < mSelectionWhenActionModeClosedByDrawer.size(); i++) { if (mSelectionWhenActionModeClosedByDrawer.valueAt(i)) { getListView().setItemChecked( - mSelectionWhenActionModeClosedByDrawer.keyAt(i), - true + mSelectionWhenActionModeClosedByDrawer.keyAt(i), + true ); } } @@ -535,16 +538,16 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi List checkedFiles = mAdapter.getCheckedItems(getListView()); final int checkedCount = checkedFiles.size(); String title = getResources().getQuantityString( - R.plurals.items_selected_count, - checkedCount, - checkedCount + R.plurals.items_selected_count, + checkedCount, + checkedCount ); mode.setTitle(title); FileMenuFilter mf = new FileMenuFilter( - checkedFiles, - ((FileActivity) getActivity()).getAccount(), - mContainerActivity, - getActivity() + checkedFiles, + ((FileActivity) getActivity()).getAccount(), + mContainerActivity, + getActivity() ); mf.filter(menu); return true; @@ -570,7 +573,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi DisplayUtils.colorToolbarProgressBar(getActivity(), mProgressBarColor); // show FAB on multi selection mode exit - if(!mHideFab) { + if (!mHideFab) { setFabEnabled(true); } } @@ -580,7 +583,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi outState.putBoolean(KEY_ACTION_MODE_CLOSED_BY_DRAWER, mActionModeClosedByDrawer); if (mSelectionWhenActionModeClosedByDrawer != null) { SparseBooleanArrayParcelable sbap = new SparseBooleanArrayParcelable( - mSelectionWhenActionModeClosedByDrawer + mSelectionWhenActionModeClosedByDrawer ); outState.putParcelable(KEY_SELECTION_WHEN_CLOSED_BY_DRAWER, sbap); } @@ -588,11 +591,11 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi public void loadStateFrom(Bundle savedInstanceState) { mActionModeClosedByDrawer = savedInstanceState.getBoolean( - KEY_ACTION_MODE_CLOSED_BY_DRAWER, - mActionModeClosedByDrawer + KEY_ACTION_MODE_CLOSED_BY_DRAWER, + mActionModeClosedByDrawer ); SparseBooleanArrayParcelable sbap = savedInstanceState.getParcelable( - KEY_SELECTION_WHEN_CLOSED_BY_DRAWER + KEY_SELECTION_WHEN_CLOSED_BY_DRAWER ); if (sbap != null) { mSelectionWhenActionModeClosedByDrawer = sbap.getSparseBooleanArray(); @@ -609,7 +612,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi mMultiChoiceModeListener.loadStateFrom(savedInstanceState); } setMultiChoiceModeListener(mMultiChoiceModeListener); - ((FileActivity)getActivity()).addDrawerListener(mMultiChoiceModeListener); + ((FileActivity) getActivity()).addDrawerListener(mMultiChoiceModeListener); } /** @@ -623,7 +626,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi } @Override - public void onPrepareOptionsMenu (Menu menu) { + public void onPrepareOptionsMenu(Menu menu) { changeGridIcon(menu); // this is enough if the option stays out of the action bar } @@ -688,9 +691,9 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi } else { /// Click on a file if (PreviewImageFragment.canBePreviewed(file)) { // preview image - it handles the download, if needed - ((FileDisplayActivity)mContainerActivity).startImagePreview(file); - } else if (PreviewTextFragment.canBePreviewed(file)){ - ((FileDisplayActivity)mContainerActivity).startTextPreview(file); + ((FileDisplayActivity) mContainerActivity).startImagePreview(file); + } else if (PreviewTextFragment.canBePreviewed(file)) { + ((FileDisplayActivity) mContainerActivity).startTextPreview(file); } else if (file.isDown()) { if (PreviewMediaFragment.canBePreviewed(file)) { // media preview @@ -817,11 +820,11 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi /** * Calls {@link OCFileListFragment#listDirectory(OCFile, boolean, boolean)} with a null parameter */ - public void listDirectory(boolean onlyOnDevice, boolean fromSearch){ + public void listDirectory(boolean onlyOnDevice, boolean fromSearch) { listDirectory(null, onlyOnDevice, fromSearch); } - public void refreshDirectory(){ + public void refreshDirectory() { listDirectory(getCurrentFile(), MainApp.isOnlyOnDevice(), false); } @@ -911,7 +914,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi updateFooter(); // decide grid vs list view OwnCloudVersion version = AccountUtils.getServerVersion( - ((FileActivity)mContainerActivity).getAccount()); + ((FileActivity) mContainerActivity).getAccount()); if (version != null && version.supportsRemoteThumbnails() && isGridViewPreferred(mFile)) { switchToGridView(); @@ -923,7 +926,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi } private void invalidateActionMode() { - if(mActiveActionMode != null){ + if (mActiveActionMode != null) { mActiveActionMode.invalidate(); } } @@ -986,7 +989,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi * @param file Folder to check. * @return 'true' is folder should be shown in grid mode, 'false' if list mode is preferred. */ - public boolean isGridViewPreferred(OCFile file){ + public boolean isGridViewPreferred(OCFile file) { if (file != null) { OCFile fileToTest = file; OCFile parentDir; @@ -1034,9 +1037,9 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi } } - private void changeGridIcon(Menu menu){ + private void changeGridIcon(Menu menu) { MenuItem menuItem = menu.findItem(R.id.action_switch_view); - if (isGridViewPreferred(mFile)){ + if (isGridViewPreferred(mFile)) { menuItem.setTitle(getString(R.string.action_switch_list_view)); menuItem.setIcon(R.drawable.ic_view_list); } else { @@ -1055,7 +1058,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi switchToGridView(); } - private void saveGridAsPreferred(boolean setGrid){ + private void saveGridAsPreferred(boolean setGrid) { SharedPreferences setting = getActivity().getSharedPreferences( GRID_IS_PREFERED_PREFERENCE, Context.MODE_PRIVATE ); @@ -1065,8 +1068,32 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi editor.apply(); } + private void unsetAllMenuItems(final boolean unsetDrawer) { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + if (unsetDrawer) { + EventBus.getDefault().post(new DummyDrawerEvent()); + } else { + if (bottomNavigationView != null) { + bottomNavigationView.getMenu().findItem(R.id.nav_bar_files).setChecked(true); + } + } + } + }); + + } + @Subscribe(threadMode = ThreadMode.BACKGROUND) public void onMessageEvent(SearchEvent event) { + setEmptyListLoadingMessage(); + + if (event.getUnsetType().equals(SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR)) { + unsetAllMenuItems(false); + } else if (event.getUnsetType().equals(SearchEvent.UnsetType.UNSET_DRAWER)) { + unsetAllMenuItems(true); + } + Account currentAccount = com.owncloud.android.authentication.AccountUtils. getCurrentOwnCloudAccount(MainApp.getAppContext()); @@ -1081,7 +1108,25 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi SearchOperation operation = new SearchOperation(event.getSearchQuery(), event.getSearchType()); RemoteOperationResult remoteOperationResult = operation.execute(mClient); if (remoteOperationResult.isSuccess() || remoteOperationResult.getData() != null) { + + if (event.getSearchType().equals(SearchOperation.SearchType.FILE_SEARCH)) { + setEmptyListMessage(SearchType.FILE_SEARCH); + } else if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) { + if (event.getSearchQuery().equals("image/%")) { + setEmptyListMessage(SearchType.PHOTO_SEARCH); + } else if (event.getSearchQuery().equals("video/%")) { + setEmptyListMessage(SearchType.VIDEO_SEARCH); + } + } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) { + setEmptyListMessage(SearchType.FAVORITE_SEARCH); + } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) { + setEmptyListMessage(SearchType.RECENTLY_ADDED_SEARCH); + } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) { + setEmptyListMessage(SearchType.RECENTLY_MODIFIED_SEARCH); + } + mAdapter.setData(remoteOperationResult.getData()); + } } catch (AuthenticatorException e) { e.printStackTrace(); @@ -1092,8 +1137,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi } catch (OperationCanceledException e) { e.printStackTrace(); } - - } @Override diff --git a/src/main/java/com/owncloud/android/ui/fragment/UploadListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/UploadListFragment.java index f21093bbca..dd6b0a29f2 100755 --- a/src/main/java/com/owncloud/android/ui/fragment/UploadListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/UploadListFragment.java @@ -66,7 +66,8 @@ public class UploadListFragment extends ExpandableListFragment { View v = super.onCreateView(inflater, container, savedInstanceState); getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); setMessageForEmptyList( - R.string.upload_list_empty_headline, R.string.upload_list_empty_text, R.drawable.ic_list_empty_upload + R.string.upload_list_empty_headline, R.string.upload_list_empty_text_auto_upload, + R.drawable.ic_list_empty_upload ); setOnRefreshListener(this); return v; diff --git a/src/main/res/menu/drawer_menu.xml b/src/main/res/menu/drawer_menu.xml index b920e1498a..cac3078a0d 100644 --- a/src/main/res/menu/drawer_menu.xml +++ b/src/main/res/menu/drawer_menu.xml @@ -27,17 +27,16 @@ android:orderInCategory="0" android:id="@+id/nav_all_files" android:icon="@drawable/ic_folder_open" - android:title="@string/drawer_item_files"/> + android:title="@string/drawer_item_all_files"/> + android:id="@+id/nav_photos" + android:icon="@drawable/file_image" + android:title="@string/drawer_item_photos"/> + + android:title="@string/drawer_item_all_files"/> false false - false + true false diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 51b7a4ff5e..f3252f7d16 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -88,13 +88,22 @@ seconds ago No files in here Upload some content or sync with your devices! + Favorite some files or sync with your devices! Loading… No app found for file type! There are no files in this folder. No results in this folder + No results + No videos + No photos Try looking in another folder? + No recently modified files found + No recently added files found + Upload some photos or activate auto upload! + Upload some videos or activate auto upload! No uploads available Upload some content or activate instant upload! + Upload some content or activate auto upload! folder folders file