Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
640206f
Enhanced player implementation
dbotvin Nov 17, 2025
d22c9c8
Enhanced player implementation
AlexViseven Dec 12, 2025
094d7f5
Rename .java to .kt
alperozturk96 Feb 16, 2026
2e6f069
fix build
alperozturk96 Feb 16, 2026
0314ceb
fix codacy
alperozturk96 Feb 16, 2026
9729847
remove unused activity
alperozturk96 Feb 16, 2026
2792cb4
remove unused activity
alperozturk96 Feb 16, 2026
6606fb3
use m3 icon buttons and add content description
alperozturk96 Feb 17, 2026
e9e9e56
fix codacy
alperozturk96 Feb 17, 2026
f873a1f
fix action bar title after playing music
alperozturk96 Feb 17, 2026
5a3e682
wip
alperozturk96 Apr 23, 2026
2a9f174
onPlaybackError
alperozturk96 Apr 23, 2026
c132583
Rename .java to .kt
alperozturk96 Apr 23, 2026
9873834
handle stream media operation better
alperozturk96 Apr 23, 2026
6b0ed3f
handle stream media operation better
alperozturk96 Apr 23, 2026
4e98d9e
handle stream media operation better
alperozturk96 Apr 23, 2026
61069b3
Update license identifier
AlexViseven May 21, 2026
60d72c9
wip
alperozturk96 Aug 14, 2026
7068127
wip
alperozturk96 Aug 14, 2026
0e57cf8
wip
alperozturk96 Aug 14, 2026
e28aec5
wip
alperozturk96 Aug 21, 2026
f60bd62
wip
alperozturk96 Aug 21, 2026
c73ec19
wip
alperozturk96 Aug 21, 2026
c57ad1a
fix using new players
alperozturk96 Aug 21, 2026
69b48d7
simplify approach
alperozturk96 Aug 21, 2026
86c0fac
remove unused classes
alperozturk96 Aug 21, 2026
d6ba5b2
fix lint
alperozturk96 Sep 1, 2026
61753c6
update icons use m3
alperozturk96 Sep 1, 2026
b5e24ae
update player_audio_file_fragment.xml m3
alperozturk96 Sep 1, 2026
dfd6fdf
redesign re-use ui components
alperozturk96 Sep 1, 2026
bbdf631
fix crash playing audio after video
alperozturk96 Sep 1, 2026
6dd6959
use view pager 2
alperozturk96 Sep 1, 2026
e8aee23
use kotlinx.serialization instead of java.io
alperozturk96 Sep 1, 2026
8f9eaa9
update dims
alperozturk96 Sep 1, 2026
e564917
fix readCurrentFiles calls
alperozturk96 Sep 1, 2026
e13ecad
fix readCurrentFiles calls
alperozturk96 Sep 1, 2026
0785bae
wip
alperozturk96 Sep 1, 2026
9c76de1
wip
alperozturk96 Sep 1, 2026
de442fa
wip
alperozturk96 Sep 1, 2026
dd9c094
wip
alperozturk96 Sep 1, 2026
06ab182
wip
alperozturk96 Sep 2, 2026
f5a4983
fix "null" in the notification
alperozturk96 Sep 2, 2026
2e51293
remove unnecessary tests
alperozturk96 Sep 2, 2026
6e16f48
use PlayerUtil.kt
alperozturk96 Sep 2, 2026
3eb1c79
wip
alperozturk96 Sep 2, 2026
4b17913
wip
alperozturk96 Sep 2, 2026
46d231f
wip
alperozturk96 Sep 2, 2026
bb370e8
wip
alperozturk96 Sep 2, 2026
50e01fe
wip
alperozturk96 Sep 2, 2026
41eb723
wip
alperozturk96 Sep 2, 2026
aefa37f
use non deprecated apis
alperozturk96 Sep 2, 2026
a22bdd3
remove guava
alperozturk96 Sep 2, 2026
219587f
fix pip border, and gallery selection
alperozturk96 Sep 2, 2026
bf54008
fix pip controls
alperozturk96 Sep 2, 2026
e102fa6
fix codacy
alperozturk96 Sep 2, 2026
c1d2300
speedup
alperozturk96 Sep 2, 2026
b4b8614
fix leaks, speed-up load
alperozturk96 Sep 3, 2026
b20cbbd
disable pip in fragment
alperozturk96 Sep 3, 2026
25fe01a
wip
alperozturk96 Sep 3, 2026
e802659
Fix: now interface clears insets/notch
daniele-verducci Sep 4, 2026
ddbcdb0
Fix: margins on player controls changing while swiping after rotation
daniele-verducci Sep 4, 2026
9eeff83
WIP
daniele-verducci Sep 4, 2026
6efa55f
Fix: Better implementation for insets on player controls
daniele-verducci Sep 4, 2026
7db6df6
Repeat and Random are mutually exclusive
daniele-verducci Sep 4, 2026
36e8870
wip: working video change in pip mode in same folder
daniele-verducci Sep 6, 2026
04b9782
Working video change in pip mode across different folders
daniele-verducci Sep 6, 2026
6f85844
Fix repeated items in viewpager
daniele-verducci Sep 6, 2026
16663f9
Fix lint
daniele-verducci Sep 6, 2026
52d29c2
Fix detectWrongSettings: Update android-library
daniele-verducci Sep 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ dependencies {

// region Kotlin
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.coroutines.core)
// endregion

// region Stateless
Expand Down
5 changes: 5 additions & 0 deletions app/lint.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@
<ignore path="build" />
</issue>

<!-- Dagger factories generated for media3 @UnstableApi types cannot carry an @OptIn annotation. -->
<issue id="UnsafeOptInUsageError" severity="error">
<ignore path="build" />
</issue>

<issue id="ObsoleteLintCustomCheck" severity="warning">
<ignore path="**/fragment-1.2.5/**/lint.jar" />
<ignore path="**/work-runtime-2.**/**/lint.jar" />
Expand Down
25 changes: 15 additions & 10 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -384,16 +384,19 @@
android:theme="@style/PreferenceTheme" />
<activity
android:name=".ui.preview.PreviewImageActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="false"
android:supportsPictureInPicture="true"
android:launchMode="singleTask"
android:theme="@style/Theme.ownCloud.Overlay" />
<activity
android:name=".ui.preview.PreviewMediaActivity"
android:configChanges="orientation|screenLayout|screenSize|keyboardHidden"
android:exported="false"
android:theme="@style/Theme.ownCloud.Media" />
android:name="com.nextcloud.client.player.ui.PlayerActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:launchMode="singleTask"
android:supportsPictureInPicture="true" />

<service
android:name="com.nextcloud.client.media.BackgroundPlayerService"
android:name="com.nextcloud.client.player.media3.PlaybackService"
android:exported="true"
android:foregroundServiceType="mediaPlayback"
tools:ignore="ExportedService">
Expand All @@ -402,6 +405,13 @@
</intent-filter>
</service>

<receiver android:name="androidx.media3.session.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>

<service
android:name=".authentication.AccountAuthenticatorService"
android:exported="false">
Expand Down Expand Up @@ -555,11 +565,6 @@
android:name="com.nextcloud.client.jobs.transfer.FileTransferService"
android:exported="false"
android:foregroundServiceType="dataSync" />
<service
android:name="com.nextcloud.client.media.PlayerService"
android:exported="false"
android:foregroundServiceType="mediaPlayback" />

<activity
android:name=".ui.activity.PassCodeActivity"
android:exported="false"
Expand Down
13 changes: 12 additions & 1 deletion app/src/main/java/com/nextcloud/client/database/dao/FileDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ interface FileDao {
" AND file_owner = :fileOwner" +
" AND path LIKE :pathPrefix || '%'" +
" AND (:mimeFilter IS NULL OR content_type LIKE :mimeFilter)" +
" ORDER BY modified DESC" +
" ORDER BY modified DESC, ${ProviderTableMeta._ID} DESC" +
" LIMIT :limit OFFSET :offset"
)
suspend fun getGalleryItemsPageSuspended(
Expand Down Expand Up @@ -169,6 +169,17 @@ interface FileDao {
)
suspend fun getFavoriteFiles(fileOwner: String): List<FileEntity>

@Query(
"""
SELECT *
FROM filelist
WHERE file_owner = :fileOwner
AND favorite = 1
ORDER BY ${ProviderTableMeta.FILE_DEFAULT_SORT_ORDER}
"""
)
fun getFavoriteFilesNonBlocking(fileOwner: String): List<FileEntity>

@Query("SELECT remote_id FROM filelist WHERE file_owner = :accountName AND remote_id IS NOT NULL")
fun getAllRemoteIds(accountName: String): List<String>

Expand Down
88 changes: 0 additions & 88 deletions app/src/main/java/com/nextcloud/client/di/AppComponent.java

This file was deleted.

78 changes: 78 additions & 0 deletions app/src/main/java/com/nextcloud/client/di/AppComponent.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2019 Chris Narkiewicz <hello@ezaquarii.com>
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
*/
package com.nextcloud.client.di

import android.app.Application
import com.nextcloud.appReview.InAppReviewModule
import com.nextcloud.client.appinfo.AppInfoModule
import com.nextcloud.client.database.DatabaseModule
import com.nextcloud.client.device.DeviceModule
import com.nextcloud.client.integrations.IntegrationsModule
import com.nextcloud.client.jobs.JobsModule
import com.nextcloud.client.jobs.download.FileDownloadHelper
import com.nextcloud.client.jobs.folderDownload.FolderDownloadWorkerReceiver
import com.nextcloud.client.jobs.offlineOperations.receiver.OfflineOperationReceiver
import com.nextcloud.client.jobs.upload.FileUploadBroadcastReceiver
import com.nextcloud.client.jobs.upload.FileUploadHelper
import com.nextcloud.client.network.NetworkModule
import com.nextcloud.client.onboarding.OnboardingModule
import com.nextcloud.client.player.PlayerModule
import com.nextcloud.client.preferences.PreferencesModule
import com.owncloud.android.MainApp
import com.owncloud.android.ui.ThemeableSwitchPreference
import com.owncloud.android.ui.whatsnew.ProgressIndicator
import dagger.BindsInstance
import dagger.Component
import dagger.android.support.AndroidSupportInjectionModule
import javax.inject.Singleton

@Component(
modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
PreferencesModule::class,
AppInfoModule::class,
NetworkModule::class,
DeviceModule::class,
OnboardingModule::class,
ViewModelModule::class,
JobsModule::class,
IntegrationsModule::class,
InAppReviewModule::class,
ThemeModule::class,
DatabaseModule::class,
DispatcherModule::class,
VariantModule::class,
PlayerModule::class
]
)
@Singleton
interface AppComponent {
fun inject(app: MainApp)

fun inject(switchPreference: ThemeableSwitchPreference)

fun inject(fileUploadHelper: FileUploadHelper)

fun inject(fileDownloadHelper: FileDownloadHelper)

fun inject(progressIndicator: ProgressIndicator)

fun inject(fileUploadBroadcastReceiver: FileUploadBroadcastReceiver)

fun inject(offlineOperationReceiver: OfflineOperationReceiver)

fun inject(folderDownloadWorkerReceiver: FolderDownloadWorkerReceiver)

@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder

fun build(): AppComponent
}
}
20 changes: 4 additions & 16 deletions app/src/main/java/com/nextcloud/client/di/ComponentsModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
import com.nextcloud.client.jobs.upload.FileUploadHelper;
import com.nextcloud.client.logger.ui.LogsActivity;
import com.nextcloud.client.logger.ui.LogsViewModel;
import com.nextcloud.client.media.BackgroundPlayerService;
import com.nextcloud.client.media.PlayerService;
import com.nextcloud.client.migrations.Migrations;
import com.nextcloud.client.onboarding.FirstRunActivity;
import com.nextcloud.client.onboarding.WhatsNewActivity;
Expand Down Expand Up @@ -129,8 +127,7 @@
import com.owncloud.android.ui.preview.PreviewBitmapActivity;
import com.owncloud.android.ui.preview.PreviewImageActivity;
import com.owncloud.android.ui.preview.PreviewImageFragment;
import com.owncloud.android.ui.preview.PreviewMediaActivity;
import com.owncloud.android.ui.preview.PreviewMediaFragment;
import com.owncloud.android.ui.preview.PreviewPlaybackFragment;
import com.owncloud.android.ui.preview.PreviewTextFileFragment;
import com.owncloud.android.ui.preview.PreviewTextFragment;
import com.owncloud.android.ui.preview.PreviewTextStringFragment;
Expand Down Expand Up @@ -213,9 +210,6 @@ abstract class ComponentsModule {
@ContributesAndroidInjector
abstract PreviewImageActivity previewImageActivity();

@ContributesAndroidInjector
abstract PreviewMediaActivity previewMediaActivity();

@ContributesAndroidInjector
abstract ReceiveExternalFilesActivity receiveExternalFilesActivity();

Expand Down Expand Up @@ -297,9 +291,6 @@ abstract class ComponentsModule {
@ContributesAndroidInjector
abstract BackupListFragment chooseContactListFragment();

@ContributesAndroidInjector
abstract PreviewMediaFragment previewMediaFragment();

@ContributesAndroidInjector
abstract PreviewTextFragment previewTextFragment();

Expand All @@ -309,6 +300,9 @@ abstract class ComponentsModule {
@ContributesAndroidInjector
abstract SetOnlineStatusBottomSheet setOnlineStatusBottomSheet();

@ContributesAndroidInjector
abstract PreviewPlaybackFragment previewPlaybackFragment();

@ContributesAndroidInjector
abstract PreviewTextFileFragment previewTextFileFragment();

Expand Down Expand Up @@ -351,9 +345,6 @@ abstract class ComponentsModule {
@ContributesAndroidInjector
abstract OperationsService operationsService();

@ContributesAndroidInjector
abstract PlayerService playerService();

@ContributesAndroidInjector
abstract FileTransferService fileDownloaderService();

Expand Down Expand Up @@ -505,9 +496,6 @@ abstract class ComponentsModule {
abstract InternalTwoWaySyncActivity internalTwoWaySyncActivity();

@OptIn(markerClass = UnstableApi.class)
@ContributesAndroidInjector
abstract BackgroundPlayerService backgroundPlayerService();

@ContributesAndroidInjector
abstract TermsOfServiceDialog termsOfServiceDialog();

Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/nextcloud/client/di/ViewModelModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModelProvider
import com.nextcloud.client.documentscan.DocumentScanViewModel
import com.nextcloud.client.etm.EtmViewModel
import com.nextcloud.client.logger.ui.LogsViewModel
import com.nextcloud.client.player.ui.PlayerViewModel
import com.nextcloud.ui.fileactions.FileActionsViewModel
import com.nextcloud.ui.tags.TagManagementViewModel
import com.nextcloud.ui.trashbinFileActions.TrashbinFileActionsViewModel
Expand Down Expand Up @@ -63,6 +64,11 @@ abstract class ViewModelModule {
@ViewModelKey(TagManagementViewModel::class)
abstract fun tagManagementViewModel(vm: TagManagementViewModel): ViewModel

@Binds
@IntoMap
@ViewModelKey(PlayerViewModel::class)
abstract fun playerViewModel(vm: PlayerViewModel): ViewModel

@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
}
31 changes: 0 additions & 31 deletions app/src/main/java/com/nextcloud/client/media/AudioFocus.kt

This file was deleted.

Loading
Loading