Skip to content

Commit 02cfad8

Browse files
committed
add albumOperationListener
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent af3d991 commit 02cfad8

10 files changed

Lines changed: 260 additions & 170 deletions

File tree

app/src/main/java/com/nextcloud/client/di/ComponentsModule.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.nextcloud.ui.ImageDetailFragment;
3333
import com.nextcloud.ui.SetOnlineStatusBottomSheet;
3434
import com.nextcloud.ui.SetStatusMessageBottomSheet;
35+
import com.nextcloud.ui.albumItemActions.AlbumItemActionsBottomSheet;
3536
import com.nextcloud.ui.composeActivity.ComposeActivity;
3637
import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
3738
import com.nextcloud.ui.trashbinFileActions.TrashbinFileActionsBottomSheet;
@@ -47,6 +48,7 @@
4748
import com.owncloud.android.services.AccountManagerService;
4849
import com.owncloud.android.services.OperationsService;
4950
import com.owncloud.android.syncadapter.FileSyncService;
51+
import com.owncloud.android.ui.activity.AlbumsPickerActivity;
5052
import com.owncloud.android.ui.activity.BaseActivity;
5153
import com.owncloud.android.ui.activity.ConflictsResolveActivity;
5254
import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
@@ -81,6 +83,7 @@
8183
import com.owncloud.android.ui.dialog.ChooseTemplateDialogFragment;
8284
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
8385
import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
86+
import com.owncloud.android.ui.dialog.CreateAlbumDialogFragment;
8487
import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
8588
import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
8689
import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
@@ -115,6 +118,8 @@
115118
import com.owncloud.android.ui.fragment.OCFileListFragment;
116119
import com.owncloud.android.ui.fragment.SharedListFragment;
117120
import com.owncloud.android.ui.fragment.UnifiedSearchFragment;
121+
import com.owncloud.android.ui.fragment.albums.AlbumItemsFragment;
122+
import com.owncloud.android.ui.fragment.albums.AlbumsFragment;
118123
import com.owncloud.android.ui.fragment.community.CommunityFragment;
119124
import com.owncloud.android.ui.fragment.contactsbackup.BackupFragment;
120125
import com.owncloud.android.ui.fragment.contactsbackup.BackupListFragment;
@@ -516,4 +521,19 @@ abstract class ComponentsModule {
516521

517522
@ContributesAndroidInjector
518523
abstract CommunityFragment communityFragment();
524+
525+
@ContributesAndroidInjector
526+
abstract AlbumsPickerActivity albumsPickerActivity();
527+
528+
@ContributesAndroidInjector
529+
abstract CreateAlbumDialogFragment createAlbumDialogFragment();
530+
531+
@ContributesAndroidInjector
532+
abstract AlbumsFragment albumsFragment();
533+
534+
@ContributesAndroidInjector
535+
abstract AlbumItemsFragment albumItemsFragment();
536+
537+
@ContributesAndroidInjector
538+
abstract AlbumItemActionsBottomSheet albumItemActionsBottomSheet();
519539
}

app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@
9494
import com.owncloud.android.ui.events.SearchEvent;
9595
import com.owncloud.android.ui.fragment.FileDetailsSharingProcessFragment;
9696
import com.owncloud.android.ui.fragment.OCFileListFragment;
97+
import com.owncloud.android.ui.fragment.albums.AlbumItemsFragment;
98+
import com.owncloud.android.ui.fragment.albums.AlbumsFragment;
9799
import com.owncloud.android.ui.navigation.NavigatorActivity;
98100
import com.owncloud.android.ui.navigation.NavigatorScreen;
99101
import com.owncloud.android.ui.trashbin.TrashbinActivity;
@@ -127,6 +129,7 @@
127129
import androidx.core.view.GravityCompat;
128130
import androidx.drawerlayout.widget.DrawerLayout;
129131
import androidx.fragment.app.Fragment;
132+
import androidx.fragment.app.FragmentTransaction;
130133
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
131134
import hct.Hct;
132135
import kotlin.Unit;
@@ -615,6 +618,17 @@ private void onNavigationItemClicked(final MenuItem menuItem) {
615618
openFavoritesTab();
616619
} else if (itemId == R.id.nav_gallery) {
617620
openMediaTab(menuItem.getItemId());
621+
} else if (itemId == R.id.nav_album) {
622+
if (this instanceof FileDisplayActivity) {
623+
replaceAlbumFragment();
624+
} else {
625+
// when user is not on FileDisplayActivity
626+
// if user is on TrashbinActivity then we have to start activity again
627+
Intent intent = new Intent(getApplicationContext(), FileDisplayActivity.class);
628+
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
629+
intent.setAction(FileDisplayActivity.ALBUMS);
630+
startActivity(intent);
631+
}
618632
} else if (itemId == R.id.nav_on_device) {
619633
showOnDeviceFiles();
620634
} else if (itemId == R.id.nav_uploads) {
@@ -699,6 +713,8 @@ private void handleBottomNavigationViewClicks() {
699713
startAssistantScreen();
700714
} else if (menuItemId == R.id.nav_gallery) {
701715
openMediaTab(menuItem.getItemId());
716+
} else if (menuItemId == R.id.nav_album) {
717+
replaceAlbumFragment();
702718
}
703719

704720
// Remove extra icon from the action bar
@@ -1498,13 +1514,31 @@ public boolean isToolbarStyleSearch() {
14981514
menuItemId == R.id.nav_personal_files;
14991515
}
15001516

1501-
public boolean isMenuItemIdBelongsToSearchType() {
1502-
int menuItemId = getSelectedMenuItemId();
1517+
public void replaceAlbumFragment() {
1518+
if (isAlbumsFragment()) {
1519+
return;
1520+
}
1521+
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
1522+
transaction.addToBackStack(null);
1523+
transaction.replace(R.id.left_fragment_container, AlbumsFragment.Companion.newInstance(false), AlbumsFragment.Companion.getTAG());
1524+
transaction.commit();
1525+
}
1526+
1527+
public <T extends Fragment> Optional<T> getFragment(String tag, Class<T> clazz) {
1528+
return Optional.ofNullable(getSupportFragmentManager().findFragmentByTag(tag))
1529+
.filter(clazz::isInstance)
1530+
.map(clazz::cast);
1531+
}
1532+
1533+
public boolean isAlbumItemsFragment() {
1534+
return getFragment(AlbumItemsFragment.Companion.getTAG(), AlbumItemsFragment.class)
1535+
.filter(Fragment::isVisible)
1536+
.isPresent();
1537+
}
15031538

1504-
return menuItemId == R.id.nav_favorites ||
1505-
menuItemId == R.id.nav_shared ||
1506-
menuItemId == R.id.nav_on_device ||
1507-
menuItemId == R.id.nav_recently_modified ||
1508-
menuItemId == R.id.nav_gallery;
1539+
public boolean isAlbumsFragment() {
1540+
return getFragment(AlbumsFragment.Companion.getTAG(), AlbumsFragment.class)
1541+
.filter(Fragment::isVisible)
1542+
.isPresent();
15091543
}
15101544
}

app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public abstract class FileActivity extends DrawerActivity
177177
protected boolean isFileDisplayActivityResumed = false;
178178

179179
@Inject
180-
UserAccountManager accountManager;
180+
public UserAccountManager accountManager;
181181

182182
@Inject public ConnectivityService connectivityService;
183183

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 17 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import com.nextcloud.client.media.PlayerServiceConnection
7474
import com.nextcloud.client.network.ClientFactory.CreationException
7575
import com.nextcloud.client.preferences.AppPreferences
7676
import com.nextcloud.client.utils.IntentUtil
77+
import com.nextcloud.model.OCUploadLocalPathData
7778
import com.nextcloud.model.WorkerState.OfflineOperationsCompleted
7879
import com.nextcloud.ui.composeActivity.ComposeProcessTextAlias
7980
import com.nextcloud.utils.extensions.getParcelableArgument
@@ -91,7 +92,6 @@ import com.owncloud.android.datamodel.FileDataStorageManager
9192
import com.owncloud.android.datamodel.OCFile
9293
import com.owncloud.android.datamodel.SyncedFolderProvider
9394
import com.owncloud.android.datamodel.VirtualFolderType
94-
import com.owncloud.android.files.services.NameCollisionPolicy
9595
import com.owncloud.android.lib.common.OwnCloudClient
9696
import com.owncloud.android.lib.common.operations.RemoteOperation
9797
import com.owncloud.android.lib.common.operations.RemoteOperationResult
@@ -111,7 +111,6 @@ import com.owncloud.android.operations.RefreshFolderOperation
111111
import com.owncloud.android.operations.RemoveFileOperation
112112
import com.owncloud.android.operations.RenameFileOperation
113113
import com.owncloud.android.operations.SynchronizeFileOperation
114-
import com.owncloud.android.operations.UploadFileOperation
115114
import com.owncloud.android.operations.albums.CopyFileToAlbumOperation
116115
import com.owncloud.android.syncadapter.FileSyncAdapter
117116
import com.owncloud.android.ui.CompletionCallback
@@ -138,6 +137,7 @@ import com.owncloud.android.ui.fragment.SharedListFragment
138137
import com.owncloud.android.ui.fragment.TaskRetainerFragment
139138
import com.owncloud.android.ui.fragment.UnifiedSearchFragment
140139
import com.owncloud.android.ui.fragment.albums.AlbumItemsFragment
140+
import com.owncloud.android.ui.fragment.albums.AlbumOperationListener
141141
import com.owncloud.android.ui.fragment.albums.AlbumsFragment
142142
import com.owncloud.android.ui.helpers.FileOperationsHelper
143143
import com.owncloud.android.ui.helpers.UriUploader
@@ -205,7 +205,9 @@ class FileDisplayActivity :
205205
private val folderDownloadStartedReceiver = FolderDownloadStartedReceiver()
206206
private val folderDownloadCompletedReceiver = FolderDownloadCompletedReceiver()
207207

208-
private var mLastSslUntrustedServerResult: RemoteOperationResult<*>? = null
208+
private lateinit var albumOperationListener: AlbumOperationListener
209+
210+
var mLastSslUntrustedServerResult: RemoteOperationResult<*>? = null
209211

210212
private var mWaitingToPreview: OCFile? = null
211213

@@ -273,6 +275,7 @@ class FileDisplayActivity :
273275

274276
super.onCreate(savedInstanceState)
275277
lastDisplayedAccountName = preferences.lastDisplayedAccountName
278+
albumOperationListener = AlbumOperationListener(this)
276279
folderRefreshScheduler = FolderRefreshScheduler(this)
277280

278281
intent?.let {
@@ -991,7 +994,7 @@ class FileDisplayActivity :
991994
!isSearchOpen() &&
992995
isRoot(getCurrentDir()) &&
993996
this.leftFragment is OCFileListFragment &&
994-
!isAlbumItemsFragment()
997+
!isAlbumItemsFragment
995998

996999
/**
9971000
* Called, when the user selected something for uploading
@@ -1124,19 +1127,15 @@ class FileDisplayActivity :
11241127
return@isNetworkAndServerAvailable
11251128
}
11261129

1127-
FileUploadHelper.instance().uploadNewFiles(
1128-
user.orElseThrow(
1129-
Supplier { RuntimeException() }
1130-
),
1130+
val data = OCUploadLocalPathData.forFile(
1131+
user.orElseThrow(Supplier { RuntimeException() }),
11311132
filePaths,
11321133
decryptedRemotePaths,
11331134
behaviour,
1134-
true,
1135-
UploadFileOperation.CREATED_BY_USER,
1136-
false,
1137-
false,
1138-
NameCollisionPolicy.ASK_USER
1135+
createRemoteFolder = true
11391136
)
1137+
1138+
FileUploadHelper.instance().uploadNewFiles(data)
11401139
}
11411140
} else {
11421141
fileDataStorageManager.addCreateFileOfflineOperation(filePaths, decryptedRemotePaths)
@@ -1253,7 +1252,7 @@ class FileDisplayActivity :
12531252
}
12541253

12551254
// pop back if current fragment is AlbumItemsFragment
1256-
isAlbumItemsFragment() -> {
1255+
isAlbumItemsFragment -> {
12571256
before()
12581257
popBack()
12591258
after()
@@ -2154,19 +2153,19 @@ class FileDisplayActivity :
21542153
}
21552154

21562155
is CreateNewAlbumRemoteOperation -> {
2157-
onCreateAlbumOperationFinish(operation, result)
2156+
albumOperationListener.onCreateAlbumOperationFinish(operation, result)
21582157
}
21592158

21602159
is CopyFileToAlbumOperation -> {
2161-
onCopyAlbumFileOperationFinish(operation, result)
2160+
albumOperationListener.onCopyAlbumFileOperationFinish(operation, result)
21622161
}
21632162

21642163
is RenameAlbumRemoteOperation -> {
2165-
onRenameAlbumOperationFinish(operation, result)
2164+
albumOperationListener.onRenameAlbumOperationFinish(operation, result)
21662165
}
21672166

21682167
is RemoveAlbumRemoteOperation -> {
2169-
onRemoveAlbumOperationFinish(operation, result)
2168+
albumOperationListener.onRemoveAlbumOperationFinish(operation, result)
21702169
}
21712170
}
21722171
}
@@ -2429,92 +2428,6 @@ class FileDisplayActivity :
24292428
}
24302429
}
24312430

2432-
private fun onRemoveAlbumOperationFinish(operation: RemoveAlbumRemoteOperation, result: RemoteOperationResult<*>) {
2433-
if (result.isSuccess) {
2434-
val fragment = supportFragmentManager.findFragmentByTag(AlbumItemsFragment.TAG)
2435-
if (fragment is AlbumItemsFragment) {
2436-
fragment.onAlbumDeleted()
2437-
}
2438-
} else {
2439-
DisplayUtils.showSnackMessage(
2440-
this,
2441-
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
2442-
)
2443-
2444-
if (result.isSslRecoverableException) {
2445-
mLastSslUntrustedServerResult = result
2446-
showUntrustedCertDialog(mLastSslUntrustedServerResult)
2447-
}
2448-
}
2449-
}
2450-
2451-
private fun onCopyAlbumFileOperationFinish(operation: CopyFileToAlbumOperation, result: RemoteOperationResult<*>) {
2452-
if (result.isSuccess) {
2453-
// when item added from inside of Album
2454-
val fragment = supportFragmentManager.findFragmentByTag(AlbumItemsFragment.TAG)
2455-
if (fragment is AlbumItemsFragment) {
2456-
fragment.refreshData()
2457-
} else {
2458-
// files added directly from Media tab
2459-
DisplayUtils.showSnackMessage(this, getResources().getString(R.string.album_file_added_message))
2460-
}
2461-
Log_OC.e(TAG, "Files copied successfully")
2462-
} else {
2463-
try {
2464-
DisplayUtils.showSnackMessage(
2465-
this,
2466-
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
2467-
)
2468-
} catch (e: Resources.NotFoundException) {
2469-
Log_OC.e(TAG, "Error while trying to show fail message ", e)
2470-
}
2471-
}
2472-
}
2473-
2474-
private fun onRenameAlbumOperationFinish(operation: RenameAlbumRemoteOperation, result: RemoteOperationResult<*>) {
2475-
if (result.isSuccess) {
2476-
val fragment = supportFragmentManager.findFragmentByTag(AlbumItemsFragment.TAG)
2477-
if (fragment is AlbumItemsFragment) {
2478-
fragment.onAlbumRenamed(operation.newAlbumName)
2479-
}
2480-
} else {
2481-
DisplayUtils.showSnackMessage(
2482-
this,
2483-
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
2484-
)
2485-
2486-
if (result.isSslRecoverableException) {
2487-
mLastSslUntrustedServerResult = result
2488-
showUntrustedCertDialog(mLastSslUntrustedServerResult)
2489-
}
2490-
}
2491-
}
2492-
2493-
private fun onCreateAlbumOperationFinish(
2494-
operation: CreateNewAlbumRemoteOperation,
2495-
result: RemoteOperationResult<*>
2496-
) {
2497-
if (result.isSuccess) {
2498-
val fragment = supportFragmentManager.findFragmentByTag(AlbumsFragment.TAG)
2499-
if (fragment is AlbumsFragment) {
2500-
fragment.navigateToAlbumItemsFragment(operation.newAlbumName, true)
2501-
}
2502-
} else {
2503-
try {
2504-
if (RemoteOperationResult.ResultCode.FOLDER_ALREADY_EXISTS == result.code) {
2505-
DisplayUtils.showSnackMessage(this, R.string.album_already_exists)
2506-
} else {
2507-
DisplayUtils.showSnackMessage(
2508-
this,
2509-
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
2510-
)
2511-
}
2512-
} catch (e: Resources.NotFoundException) {
2513-
Log_OC.e(TAG, "Error while trying to show fail message ", e)
2514-
}
2515-
}
2516-
}
2517-
25182431
/**
25192432
* {@inheritDoc}
25202433
*/

0 commit comments

Comments
 (0)