From 0f5e3670d18dcff87e595c3ed265505f4623ae22 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:39:30 +0100 Subject: [PATCH 01/11] Extend list_header.xml to add open in notes button Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- app/src/main/res/layout/list_header.xml | 34 ++++++----- .../main/res/layout/list_header_open_in.xml | 58 +++++++++++++++++++ app/src/main/res/values/strings.xml | 10 ++-- 3 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/layout/list_header_open_in.xml diff --git a/app/src/main/res/layout/list_header.xml b/app/src/main/res/layout/list_header.xml index 63c0cbac1d3d..36d12e0538e8 100644 --- a/app/src/main/res/layout/list_header.xml +++ b/app/src/main/res/layout/list_header.xml @@ -7,14 +7,14 @@ ~ SPDX-FileCopyrightText: 2019 Nextcloud GmbH ~ SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only --> - @@ -33,27 +33,35 @@ + android:gravity="center|start" + android:text="@string/recommended_files_title" + android:textColor="@color/text_color" + android:textSize="@dimen/large_title_text_size" /> + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/standard_margin" /> + + + android:gravity="center|start" + android:text="@string/drawer_item_all_files" + android:textColor="@color/text_color" + android:textSize="@dimen/large_title_text_size" /> diff --git a/app/src/main/res/layout/list_header_open_in.xml b/app/src/main/res/layout/list_header_open_in.xml new file mode 100644 index 000000000000..ad7f3f2ac7f7 --- /dev/null +++ b/app/src/main/res/layout/list_header_open_in.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 301ff722da9d..436b4ad3e326 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1275,11 +1275,11 @@ Flip vertically Unable to edit image. edited - Nextcloud Notes - Nextcloud Talk + Nextcloud Notes + Nextcloud Talk More Nextcloud Apps - Notes - Talk + Notes + Talk More Details %s mm @@ -1344,4 +1344,6 @@ Internal shares External shares Create link + This folder is best viewed in %1$s. + Open in %1$s From a6c3b2990499b9fa1e0162d6e33c56b1c66f30a7 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:10:30 +0100 Subject: [PATCH 02/11] Extend capability to include notes folder location Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- .../87.json | 1337 +++++++++++++++++ .../client/database/NextcloudDatabase.kt | 3 +- .../database/entity/CapabilityEntity.kt | 4 +- .../datamodel/FileDataStorageManager.java | 5 + .../com/owncloud/android/db/ProviderMeta.java | 3 +- 5 files changed, 1349 insertions(+), 3 deletions(-) create mode 100644 app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json new file mode 100644 index 000000000000..2bce6bc1ee01 --- /dev/null +++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json @@ -0,0 +1,1337 @@ +{ + "formatVersion": 1, + "database": { + "version": 87, + "identityHash": "c67369ca15672b4c84289aa188f49e50", + "entities": [ + { + "tableName": "arbitrary_data", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "cloudId", + "columnName": "cloud_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "key", + "columnName": "key", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "capabilities", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "assistant", + "columnName": "assistant", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "accountName", + "columnName": "account", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "versionMajor", + "columnName": "version_mayor", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "versionMinor", + "columnName": "version_minor", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "versionMicro", + "columnName": "version_micro", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "versionString", + "columnName": "version_string", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "versionEditor", + "columnName": "version_edition", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "extendedSupport", + "columnName": "extended_support", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "corePollinterval", + "columnName": "core_pollinterval", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingApiEnabled", + "columnName": "sharing_api_enabled", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicEnabled", + "columnName": "sharing_public_enabled", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicPasswordEnforced", + "columnName": "sharing_public_password_enforced", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicExpireDateEnabled", + "columnName": "sharing_public_expire_date_enabled", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicExpireDateDays", + "columnName": "sharing_public_expire_date_days", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicExpireDateEnforced", + "columnName": "sharing_public_expire_date_enforced", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicSendMail", + "columnName": "sharing_public_send_mail", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingPublicUpload", + "columnName": "sharing_public_upload", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingUserSendMail", + "columnName": "sharing_user_send_mail", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingResharing", + "columnName": "sharing_resharing", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingFederationOutgoing", + "columnName": "sharing_federation_outgoing", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharingFederationIncoming", + "columnName": "sharing_federation_incoming", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filesBigfilechunking", + "columnName": "files_bigfilechunking", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filesUndelete", + "columnName": "files_undelete", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filesVersioning", + "columnName": "files_versioning", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "externalLinks", + "columnName": "external_links", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serverName", + "columnName": "server_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverColor", + "columnName": "server_color", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverTextColor", + "columnName": "server_text_color", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverElementColor", + "columnName": "server_element_color", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverSlogan", + "columnName": "server_slogan", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverLogo", + "columnName": "server_logo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serverBackgroundUrl", + "columnName": "background_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "endToEndEncryption", + "columnName": "end_to_end_encryption", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "endToEndEncryptionKeysExist", + "columnName": "end_to_end_encryption_keys_exist", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "endToEndEncryptionApiVersion", + "columnName": "end_to_end_encryption_api_version", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "activity", + "columnName": "activity", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serverBackgroundDefault", + "columnName": "background_default", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serverBackgroundPlain", + "columnName": "background_plain", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "richdocument", + "columnName": "richdocument", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "richdocumentMimetypeList", + "columnName": "richdocument_mimetype_list", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "richdocumentDirectEditing", + "columnName": "richdocument_direct_editing", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "richdocumentTemplates", + "columnName": "richdocument_direct_templates", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "richdocumentOptionalMimetypeList", + "columnName": "richdocument_optional_mimetype_list", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "sharingPublicAskForOptionalPassword", + "columnName": "sharing_public_ask_for_optional_password", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "richdocumentProductName", + "columnName": "richdocument_product_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "directEditingEtag", + "columnName": "direct_editing_etag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "userStatus", + "columnName": "user_status", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "userStatusSupportsEmoji", + "columnName": "user_status_supports_emoji", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "etag", + "columnName": "etag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "filesLockingVersion", + "columnName": "files_locking_version", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "groupfolders", + "columnName": "groupfolders", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dropAccount", + "columnName": "drop_account", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "securityGuard", + "columnName": "security_guard", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "forbiddenFileNameCharacters", + "columnName": "forbidden_filename_characters", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "forbiddenFileNames", + "columnName": "forbidden_filenames", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "forbiddenFileNameExtensions", + "columnName": "forbidden_filename_extensions", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "forbiddenFilenameBaseNames", + "columnName": "forbidden_filename_basenames", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filesDownloadLimit", + "columnName": "files_download_limit", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filesDownloadLimitDefault", + "columnName": "files_download_limit_default", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "recommendation", + "columnName": "recommendation", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notesFolderPath", + "columnName": "notes_folder_path", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "external_links", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "iconUrl", + "columnName": "icon_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "language", + "columnName": "language", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "redirect", + "columnName": "redirect", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "filelist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "filename", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "encryptedName", + "columnName": "encrypted_filename", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "path", + "columnName": "path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "pathDecrypted", + "columnName": "path_decrypted", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "parent", + "columnName": "parent", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "creation", + "columnName": "created", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modified", + "columnName": "modified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentType", + "columnName": "content_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "content_length", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "storagePath", + "columnName": "media_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "accountOwner", + "columnName": "file_owner", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lastSyncDate", + "columnName": "last_sync_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastSyncDateForData", + "columnName": "last_sync_date_for_data", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modifiedAtLastSyncForData", + "columnName": "modified_at_last_sync_for_data", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "etag", + "columnName": "etag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "etagOnServer", + "columnName": "etag_on_server", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "sharedViaLink", + "columnName": "share_by_link", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "permissions", + "columnName": "permissions", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remote_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "localId", + "columnName": "local_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "-1" + }, + { + "fieldPath": "updateThumbnail", + "columnName": "update_thumbnail", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isDownloading", + "columnName": "is_downloading", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "favorite", + "columnName": "favorite", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hidden", + "columnName": "hidden", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isEncrypted", + "columnName": "is_encrypted", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "etagInConflict", + "columnName": "etag_in_conflict", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "sharedWithSharee", + "columnName": "shared_via_users", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mountType", + "columnName": "mount_type", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hasPreview", + "columnName": "has_preview", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "unreadCommentsCount", + "columnName": "unread_comments_count", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "ownerId", + "columnName": "owner_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "ownerDisplayName", + "columnName": "owner_display_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "note", + "columnName": "note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "sharees", + "columnName": "sharees", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "richWorkspace", + "columnName": "rich_workspace", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "metadataSize", + "columnName": "metadata_size", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "metadataLivePhoto", + "columnName": "metadata_live_photo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "locked", + "columnName": "locked", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lockType", + "columnName": "lock_type", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lockOwner", + "columnName": "lock_owner", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lockOwnerDisplayName", + "columnName": "lock_owner_display_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lockOwnerEditor", + "columnName": "lock_owner_editor", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lockTimestamp", + "columnName": "lock_timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lockTimeout", + "columnName": "lock_timeout", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lockToken", + "columnName": "lock_token", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "tags", + "columnName": "tags", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "metadataGPS", + "columnName": "metadata_gps", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "e2eCounter", + "columnName": "e2e_counter", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "internalTwoWaySync", + "columnName": "internal_two_way_sync_timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "internalTwoWaySyncResult", + "columnName": "internal_two_way_sync_result", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "filesystem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "localPath", + "columnName": "local_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fileIsFolder", + "columnName": "is_folder", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "fileFoundRecently", + "columnName": "found_at", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "fileSentForUpload", + "columnName": "upload_triggered", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "syncedFolderId", + "columnName": "syncedfolder_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "crc32", + "columnName": "crc32", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fileModified", + "columnName": "modified_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "ocshares", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "fileSource", + "columnName": "file_source", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "itemSource", + "columnName": "item_source", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "shareType", + "columnName": "share_type", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "shareWith", + "columnName": "shate_with", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "path", + "columnName": "path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "permissions", + "columnName": "permissions", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "sharedDate", + "columnName": "shared_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "expirationDate", + "columnName": "expiration_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareWithDisplayName", + "columnName": "shared_with_display_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isDirectory", + "columnName": "is_directory", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "idRemoteShared", + "columnName": "id_remote_shared", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "accountOwner", + "columnName": "owner_share", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isPasswordProtected", + "columnName": "is_password_protected", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "note", + "columnName": "note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "hideDownload", + "columnName": "hide_download", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "shareLink", + "columnName": "share_link", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareLabel", + "columnName": "share_label", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "downloadLimitLimit", + "columnName": "download_limit_limit", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "downloadLimitCount", + "columnName": "download_limit_count", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "synced_folders", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "localPath", + "columnName": "local_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remotePath", + "columnName": "remote_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "wifiOnly", + "columnName": "wifi_only", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "chargingOnly", + "columnName": "charging_only", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "existing", + "columnName": "existing", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "enabled", + "columnName": "enabled", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "enabledTimestampMs", + "columnName": "enabled_timestamp_ms", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "subfolderByDate", + "columnName": "subfolder_by_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "account", + "columnName": "account", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uploadAction", + "columnName": "upload_option", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "nameCollisionPolicy", + "columnName": "name_collision_policy", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hidden", + "columnName": "hidden", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "subFolderRule", + "columnName": "sub_folder_rule", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "excludeHidden", + "columnName": "exclude_hidden", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastScanTimestampMs", + "columnName": "last_scan_timestamp_ms", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "list_of_uploads", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "localPath", + "columnName": "local_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remotePath", + "columnName": "remote_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "accountName", + "columnName": "account_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fileSize", + "columnName": "file_size", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "status", + "columnName": "status", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "localBehaviour", + "columnName": "local_behaviour", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "uploadTime", + "columnName": "upload_time", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "nameCollisionPolicy", + "columnName": "name_collision_policy", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isCreateRemoteFolder", + "columnName": "is_create_remote_folder", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "uploadEndTimestamp", + "columnName": "upload_end_timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastResult", + "columnName": "last_result", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isWhileChargingOnly", + "columnName": "is_while_charging_only", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isWifiOnly", + "columnName": "is_wifi_only", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "createdBy", + "columnName": "created_by", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "folderUnlockToken", + "columnName": "folder_unlock_token", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "virtual", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "ocFileId", + "columnName": "ocfile_id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "offline_operations", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "parentOCFileId", + "columnName": "offline_operations_parent_oc_file_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "path", + "columnName": "offline_operations_path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "offline_operations_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "filename", + "columnName": "offline_operations_file_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "createdAt", + "columnName": "offline_operations_created_at", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modifiedAt", + "columnName": "offline_operations_modified_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c67369ca15672b4c84289aa188f49e50')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/client/database/NextcloudDatabase.kt b/app/src/main/java/com/nextcloud/client/database/NextcloudDatabase.kt index 0a99bc123c51..d1db899d6d91 100644 --- a/app/src/main/java/com/nextcloud/client/database/NextcloudDatabase.kt +++ b/app/src/main/java/com/nextcloud/client/database/NextcloudDatabase.kt @@ -69,7 +69,8 @@ import com.owncloud.android.db.ProviderMeta AutoMigration(from = 82, to = 83), AutoMigration(from = 83, to = 84), AutoMigration(from = 84, to = 85, spec = DatabaseMigrationUtil.DeleteColumnSpec::class), - AutoMigration(from = 85, to = 86, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class) + AutoMigration(from = 85, to = 86, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class), + AutoMigration(from = 86, to = 87, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class) ], exportSchema = true ) diff --git a/app/src/main/java/com/nextcloud/client/database/entity/CapabilityEntity.kt b/app/src/main/java/com/nextcloud/client/database/entity/CapabilityEntity.kt index 4662877862ca..4a9d3fafb6bf 100644 --- a/app/src/main/java/com/nextcloud/client/database/entity/CapabilityEntity.kt +++ b/app/src/main/java/com/nextcloud/client/database/entity/CapabilityEntity.kt @@ -136,5 +136,7 @@ data class CapabilityEntity( @ColumnInfo(name = ProviderTableMeta.CAPABILITIES_FILES_DOWNLOAD_LIMIT_DEFAULT) val filesDownloadLimitDefault: Int?, @ColumnInfo(name = ProviderTableMeta.CAPABILITIES_RECOMMENDATION) - val recommendation: Int? + val recommendation: Int?, + @ColumnInfo(name = ProviderTableMeta.CAPABILITIES_NOTES_FOLDER_PATH) + val notesFolderPath: String? ) diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index e209aa21b51b..0db497d57397 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -2315,6 +2315,8 @@ private ContentValues createContentValues(String accountName, OCCapability capab contentValues.put(ProviderTableMeta.CAPABILITIES_RECOMMENDATION, capability.getRecommendations().getValue()); + contentValues.put(ProviderTableMeta.CAPABILITIES_NOTES_FOLDER_PATH, capability.getNotesFolderPath()); + return contentValues; } @@ -2490,7 +2492,10 @@ private OCCapability createCapabilityInstance(Cursor cursor) { capability.setForbiddenFilenameBaseNamesJson(getString(cursor, ProviderTableMeta.CAPABILITIES_FORBIDDEN_FORBIDDEN_FILENAME_BASE_NAMES)); capability.setFilesDownloadLimit(getBoolean(cursor, ProviderTableMeta.CAPABILITIES_FILES_DOWNLOAD_LIMIT)); capability.setFilesDownloadLimitDefault(getInt(cursor, ProviderTableMeta.CAPABILITIES_FILES_DOWNLOAD_LIMIT_DEFAULT)); + capability.setRecommendations(getBoolean(cursor, ProviderTableMeta.CAPABILITIES_RECOMMENDATION)); + + capability.setNotesFolderPath(getString(cursor, ProviderTableMeta.CAPABILITIES_NOTES_FOLDER_PATH)); } return capability; diff --git a/app/src/main/java/com/owncloud/android/db/ProviderMeta.java b/app/src/main/java/com/owncloud/android/db/ProviderMeta.java index db2302caa79b..08baf705ee8f 100644 --- a/app/src/main/java/com/owncloud/android/db/ProviderMeta.java +++ b/app/src/main/java/com/owncloud/android/db/ProviderMeta.java @@ -25,7 +25,7 @@ */ public class ProviderMeta { public static final String DB_NAME = "filelist"; - public static final int DB_VERSION = 86; + public static final int DB_VERSION = 87; private ProviderMeta() { // No instance @@ -272,6 +272,7 @@ static public class ProviderTableMeta implements BaseColumns { public static final String CAPABILITIES_FORBIDDEN_FORBIDDEN_FILENAME_BASE_NAMES = "forbidden_filename_basenames"; public static final String CAPABILITIES_FILES_DOWNLOAD_LIMIT = "files_download_limit"; public static final String CAPABILITIES_FILES_DOWNLOAD_LIMIT_DEFAULT = "files_download_limit_default"; + public static final String CAPABILITIES_NOTES_FOLDER_PATH = "notes_folder_path"; //Columns of Uploads table public static final String UPLOADS_LOCAL_PATH = "local_path"; From 156773e722df72df8ba19449219c7089879526a3 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:11:14 +0100 Subject: [PATCH 03/11] Extract openAppOrStore() and openAppStore() to LinkHelper Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- .../java/com/nextcloud/utils/LinkHelper.kt | 73 +++++++++++++++++++ .../android/ui/activity/DrawerActivity.java | 48 ++---------- 2 files changed, 78 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/utils/LinkHelper.kt diff --git a/app/src/main/java/com/nextcloud/utils/LinkHelper.kt b/app/src/main/java/com/nextcloud/utils/LinkHelper.kt new file mode 100644 index 000000000000..bc54dd7cf212 --- /dev/null +++ b/app/src/main/java/com/nextcloud/utils/LinkHelper.kt @@ -0,0 +1,73 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2025 ZetaTom <70907959+ZetaTom@users.noreply.github.com> + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.nextcloud.utils + +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.Intent +import android.net.Uri +import com.nextcloud.client.account.User +import com.owncloud.android.ui.activity.FileDisplayActivity +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +object LinkHelper { + const val APP_NEXTCLOUD_NOTES = "it.niedermann.owncloud.notes" + const val APP_NEXTCLOUD_TALK = "com.nextcloud.talk2" + + /** + * Open specified app and, if not installed redirect to corresponding download. + * + * @param packageName of app to be opened + * @param user to pass in intent + */ + fun openAppOrStore(packageName: String, user: Optional, context: Context) { + openAppOrStore(packageName, user.getOrNull(), context) + } + + /** + * Open specified app and, if not installed redirect to corresponding download. + * + * @param packageName of app to be opened + * @param user to pass in intent + */ + fun openAppOrStore(packageName: String, user: User?, context: Context) { + val intent = context.packageManager.getLaunchIntentForPackage(packageName) + if (intent != null) { + // app installed - open directly + // TODO handle null user? + intent.putExtra(FileDisplayActivity.KEY_ACCOUNT, user.hashCode()) + context.startActivity(intent) + } else { + // app not found - open market (Google Play Store, F-Droid, etc.) + openAppStore(packageName, false, context) + } + } + + /** + * Open app store page of specified app or search for specified string. Will attempt to open browser when no app + * store is available. + * + * @param string packageName or url-encoded search string + * @param search false -> show app corresponding to packageName; true -> open search for string + */ + fun openAppStore(string: String, search: Boolean = false, context: Context) { + var suffix = (if (search) "search?q=" else "details?id=") + string + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("market://$suffix")) + try { + context.startActivity(intent) + } catch (activityNotFoundException1: ActivityNotFoundException) { + // all is lost: open google play store web page for app + if (!search) { + suffix = "apps/$suffix" + } + intent.setData(Uri.parse("https://play.google.com/store/$suffix")) + context.startActivity(intent) + } + } +} diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index ff95b9854d35..750773a77ea3 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -60,6 +60,7 @@ import com.nextcloud.ui.ChooseAccountDialogFragment; import com.nextcloud.ui.composeActivity.ComposeActivity; import com.nextcloud.ui.composeActivity.ComposeDestination; +import com.nextcloud.utils.LinkHelper; import com.nextcloud.utils.extensions.ViewExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.MainApp; @@ -425,9 +426,9 @@ private void showTopBanner(LinearLayout banner, int primaryColor) { LinearLayout moreView = banner.findViewById(R.id.drawer_ecosystem_more); LinearLayout assistantView = banner.findViewById(R.id.drawer_ecosystem_assistant); - notesView.setOnClickListener(v -> openAppOrStore("it.niedermann.owncloud.notes")); - talkView.setOnClickListener(v -> openAppOrStore("com.nextcloud.talk2")); - moreView.setOnClickListener(v -> openAppStore("Nextcloud", true)); + notesView.setOnClickListener(v -> LinkHelper.INSTANCE.openAppOrStore(LinkHelper.APP_NEXTCLOUD_NOTES, getUser(), this)); + talkView.setOnClickListener(v -> LinkHelper.INSTANCE.openAppOrStore(LinkHelper.APP_NEXTCLOUD_TALK, getUser(), this)); + moreView.setOnClickListener(v -> LinkHelper.INSTANCE.openAppStore("Nextcloud", true, this)); assistantView.setOnClickListener(v -> { DrawerActivity.menuItemId = Menu.NONE; startComposeActivity(ComposeDestination.AssistantScreen, R.string.assistant_screen_top_bar_title); @@ -459,45 +460,6 @@ private void showTopBanner(LinearLayout banner, int primaryColor) { banner.setVisibility(View.VISIBLE); } - /** - * Open specified app and, if not installed redirect to corresponding download. - * - * @param packageName of app to be opened - */ - private void openAppOrStore(String packageName) { - Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); - if (intent != null) { - // app installed - open directly - intent.putExtra(FileDisplayActivity.KEY_ACCOUNT, getUser().get().hashCode()); - startActivity(intent); - } else { - // app not found - open market (Google Play Store, F-Droid, etc.) - openAppStore(packageName, false); - } - } - - /** - * Open app store page of specified app or search for specified string. Will attempt to open browser when no app - * store is available. - * - * @param string packageName or url-encoded search string - * @param search false -> show app corresponding to packageName; true -> open search for string - */ - private void openAppStore(String string, boolean search) { - String suffix = (search ? "search?q=" : "details?id=") + string; - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://" + suffix)); - try { - startActivity(intent); - } catch (android.content.ActivityNotFoundException activityNotFoundException1) { - // all is lost: open google play store web page for app - if (!search) { - suffix = "apps/" + suffix; - } - intent.setData(Uri.parse("https://play.google.com/store/" + suffix)); - startActivity(intent); - } - } - private void setDrawerHeaderLogo(Drawable drawable, String serverName) { ImageView imageHeader = mNavigationViewHeader.findViewById(R.id.drawer_header_logo); imageHeader.setImageDrawable(drawable); @@ -1357,7 +1319,7 @@ protected void handleDeepLink(@NonNull Uri uri) { findViewById(R.id.fab_main).callOnClick(); break; case ACTION_APP_UPDATE: - openAppStore(getPackageName(), false); + LinkHelper.INSTANCE.openAppStore(getPackageName(), false, this); break; case OPEN_NOTIFICATIONS: startActivity(NotificationsActivity.class); From 8313981bdf3a1d4950bb60ecb55409179f0c02d8 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:14:19 +0100 Subject: [PATCH 04/11] Extend OCFileListAdapter to handle open in notes button Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- .../android/ui/adapter/OCFileListAdapter.java | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index bd4647d9f942..b0a1f8e9e701 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -39,6 +39,7 @@ import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.model.OCFileFilterType; import com.nextcloud.model.OfflineOperationType; +import com.nextcloud.utils.LinkHelper; import com.nextcloud.utils.extensions.ViewExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.MainApp; @@ -64,6 +65,7 @@ import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.lib.resources.shares.ShareeUser; +import com.owncloud.android.lib.resources.status.OCCapability; import com.owncloud.android.lib.resources.tags.Tag; import com.owncloud.android.operations.RefreshFolderOperation; import com.owncloud.android.operations.RemoteOperationFailedException; @@ -77,6 +79,7 @@ import com.owncloud.android.utils.FileSortOrder; import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.MimeTypeUtil; +import com.owncloud.android.utils.theme.CapabilityUtils; import com.owncloud.android.utils.theme.ViewThemeUtils; import java.io.File; @@ -111,6 +114,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter mFiles = new ArrayList<>(); private final List mFilesAll = new ArrayList<>(); private final boolean hideItemOptions; @@ -121,7 +125,6 @@ public class OCFileListAdapter extends RecyclerView.Adapter ocFileListFragmentInterface.onHeaderClicked()); + String text = currentDirectory.getRichWorkspace(); PreviewTextFragment.setText(headerViewHolder.getHeaderText(), text, null, activity, true, true, viewThemeUtils); - headerViewHolder.getHeaderView().setOnClickListener(v -> ocFileListFragmentInterface.onHeaderClicked()); - ViewExtensionsKt.setVisibleIf(headerViewHolder.getBinding().recommendedFilesRecyclerView, shouldShowRecommendedFiles()); - ViewExtensionsKt.setVisibleIf(headerViewHolder.getBinding().recommendedFilesTitle, shouldShowRecommendedFiles()); - ViewExtensionsKt.setVisibleIf(headerViewHolder.getBinding().allFilesTitle, shouldShowRecommendedFiles()); + // hide header text if empty (server returns NBSP) + ViewExtensionsKt.setVisibleIf(headerViewHolder.getHeaderText(), text != null && !text.isBlank() && !text.equals(" ")); + + ViewExtensionsKt.setVisibleIf(headerBinding.recommendedFilesRecyclerView, shouldShowRecommendedFiles()); + ViewExtensionsKt.setVisibleIf(headerBinding.recommendedFilesTitle, shouldShowRecommendedFiles()); + ViewExtensionsKt.setVisibleIf(headerBinding.allFilesTitle, shouldShowRecommendedFiles()); if (shouldShowRecommendedFiles()) { - final var recommendedFilesRecyclerView = headerViewHolder.getBinding().recommendedFilesRecyclerView; + final var recommendedFilesRecyclerView = headerBinding.recommendedFilesRecyclerView; final LinearLayoutManager layoutManager = new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false); recommendedFilesRecyclerView.setLayoutManager(layoutManager); @@ -446,6 +455,21 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi final var adapter = new RecommendedFilesAdapter(recommendedFiles, ocFileListDelegate, this, mStorageManager); recommendedFilesRecyclerView.setAdapter(adapter); } + + ViewExtensionsKt.setVisibleIf(headerBinding.openIn.getRoot(), shouldShowOpenInNotes()); + + if (shouldShowOpenInNotes()) { + final var listHeaderOpenInBinding = headerBinding.openIn; + + listHeaderOpenInBinding.infoText.setText(String.format(activity.getString(R.string.folder_best_viewed_in), + activity.getString(R.string.ecosystem_apps_notes))); + + listHeaderOpenInBinding.openInButton.setText(String.format(activity.getString(R.string.open_in_app), + activity.getString(R.string.ecosystem_apps_display_notes))); + + listHeaderOpenInBinding.openInButton.setOnClickListener(v -> LinkHelper.INSTANCE.openAppOrStore(LinkHelper.APP_NEXTCLOUD_NOTES, user, activity)); + } + } else { ListViewHolder gridViewHolder = (ListViewHolder) holder; OCFile file = getItem(position); @@ -481,6 +505,12 @@ private boolean shouldShowRecommendedFiles() { return !recommendedFiles.isEmpty() && currentDirectory.isRootDirectory(); } + private boolean shouldShowOpenInNotes() { + String notesFolderPath = capability.getNotesFolderPath(); + String currentPath = currentDirectory.getDecryptedRemotePath(); + return notesFolderPath != null && currentPath != null && currentPath.startsWith(notesFolderPath); + } + private void checkVisibilityOfFileFeaturesLayout(ListViewHolder holder) { int fileFeaturesVisibility = View.GONE; LinearLayout fileFeaturesLayout = holder.getFileFeaturesLayout(); @@ -758,6 +788,10 @@ public boolean shouldShowHeader() { return true; } + if (shouldShowOpenInNotes()) { + return true; + } + if (currentDirectory.getRichWorkspace() == null) { return false; } From 55f8fcbf0262d94138890766942533b706735f33 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:30:52 +0100 Subject: [PATCH 05/11] Fix lint Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- .../com/owncloud/android/ui/adapter/OCFileListAdapter.java | 2 +- app/src/main/res/values-ar/strings.xml | 4 ---- app/src/main/res/values-ast/strings.xml | 4 ---- app/src/main/res/values-b+en+001/strings.xml | 4 ---- app/src/main/res/values-bg-rBG/strings.xml | 3 --- app/src/main/res/values-br/strings.xml | 4 ---- app/src/main/res/values-ca/strings.xml | 4 ---- app/src/main/res/values-cs-rCZ/strings.xml | 4 ---- app/src/main/res/values-da/strings.xml | 4 ---- app/src/main/res/values-de/strings.xml | 4 ---- app/src/main/res/values-el/strings.xml | 4 ---- app/src/main/res/values-eo/strings.xml | 2 -- app/src/main/res/values-es-rAR/strings.xml | 4 ---- app/src/main/res/values-es-rCL/strings.xml | 1 - app/src/main/res/values-es-rCO/strings.xml | 2 -- app/src/main/res/values-es-rEC/strings.xml | 2 -- app/src/main/res/values-es-rMX/strings.xml | 4 ---- app/src/main/res/values-es/strings.xml | 4 ---- app/src/main/res/values-eu/strings.xml | 4 ---- app/src/main/res/values-fa/strings.xml | 4 ---- app/src/main/res/values-fi-rFI/strings.xml | 4 ---- app/src/main/res/values-fr/strings.xml | 4 ---- app/src/main/res/values-ga/strings.xml | 4 ---- app/src/main/res/values-gd/strings.xml | 2 -- app/src/main/res/values-gl/strings.xml | 4 ---- app/src/main/res/values-hr/strings.xml | 3 --- app/src/main/res/values-hu-rHU/strings.xml | 4 ---- app/src/main/res/values-in/strings.xml | 3 --- app/src/main/res/values-is/strings.xml | 4 ---- app/src/main/res/values-it/strings.xml | 4 ---- app/src/main/res/values-iw/strings.xml | 3 --- app/src/main/res/values-ja-rJP/strings.xml | 4 ---- app/src/main/res/values-ka/strings.xml | 4 ---- app/src/main/res/values-ko/strings.xml | 4 ---- app/src/main/res/values-lt-rLT/strings.xml | 3 --- app/src/main/res/values-lv/strings.xml | 3 --- app/src/main/res/values-mk/strings.xml | 2 -- app/src/main/res/values-nb-rNO/strings.xml | 4 ---- app/src/main/res/values-nl/strings.xml | 4 ---- app/src/main/res/values-pl/strings.xml | 4 ---- app/src/main/res/values-pt-rBR/strings.xml | 4 ---- app/src/main/res/values-pt-rPT/strings.xml | 4 ---- app/src/main/res/values-ro/strings.xml | 4 ---- app/src/main/res/values-ru/strings.xml | 4 ---- app/src/main/res/values-sc/strings.xml | 3 --- app/src/main/res/values-sk-rSK/strings.xml | 4 ---- app/src/main/res/values-sl/strings.xml | 4 ---- app/src/main/res/values-sr-rSP/strings.xml | 2 -- app/src/main/res/values-sr/strings.xml | 4 ---- app/src/main/res/values-sv/strings.xml | 4 ---- app/src/main/res/values-th-rTH/strings.xml | 2 -- app/src/main/res/values-tr/strings.xml | 4 ---- app/src/main/res/values-ug/strings.xml | 4 ---- app/src/main/res/values-uk/strings.xml | 4 ---- app/src/main/res/values-vi/strings.xml | 3 --- app/src/main/res/values-zh-rCN/strings.xml | 4 ---- app/src/main/res/values-zh-rHK/strings.xml | 4 ---- app/src/main/res/values-zh-rTW/strings.xml | 4 ---- 58 files changed, 1 insertion(+), 204 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index b0a1f8e9e701..2a58db69ffcf 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -440,7 +440,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi PreviewTextFragment.setText(headerViewHolder.getHeaderText(), text, null, activity, true, true, viewThemeUtils); // hide header text if empty (server returns NBSP) - ViewExtensionsKt.setVisibleIf(headerViewHolder.getHeaderText(), text != null && !text.isBlank() && !text.equals(" ")); + ViewExtensionsKt.setVisibleIf(headerViewHolder.getHeaderText(), text != null && !text.isBlank() && !" ".equals(text)); ViewExtensionsKt.setVisibleIf(headerBinding.recommendedFilesRecyclerView, shouldShowRecommendedFiles()); ViewExtensionsKt.setVisibleIf(headerBinding.recommendedFilesTitle, shouldShowRecommendedFiles()); diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 390ae8642598..823a6164473b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -299,11 +299,7 @@ التوقيع غير مُطابق المُساعِد المزيد - الملاحظات - محادثة Talk المزيد من تطبيقات نكست كلاود - ملاحظات نيكست كلاود - تطبيق \"المحادثة\" talk من نكست كلاود تعذّر التقاط عنوان الإيميل. عيّنه كَمشفر يتعذّر استرجاع شهادة الخادوم diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index b1354d3e0eae..3f6110234f3c 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -159,11 +159,7 @@ Nun ye posible ensin la conexón a internet Asistente Más - Notes - Charra Más aplicaciones de Nextcloud - Nextcloud Notes - Nextcloud Talk Nun se pue escoyer la direición de corréu electrónicu. Configurar el cifráu Descifrando… diff --git a/app/src/main/res/values-b+en+001/strings.xml b/app/src/main/res/values-b+en+001/strings.xml index 96fde81ca4b1..12046f724d2a 100644 --- a/app/src/main/res/values-b+en+001/strings.xml +++ b/app/src/main/res/values-b+en+001/strings.xml @@ -297,11 +297,7 @@ Signature does not match Assistant More - Notes - Talk More Nextcloud Apps - Nextcloud Notes - Nextcloud Talk Failed to pick email address. Set as encrypted Unable to retrieve server certificate diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 6f9cf8d1b34c..37a9de5fee94 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -242,9 +242,6 @@ Автоматично качване E2E все още няма настройки Повече - Бележки - Разговор - Nextcloud Бележки Включване на криптиране Настройки за криптиране Декриптиране... diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 6d5350cd8bfe..8236e3d46757 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -273,11 +273,7 @@ Ne c\'hall ket bezañ graet hep kevreadenn genrouedad Skoazeller Muioc\'h - Notennoù - Komz Arloadoù Nextcloud all - Notennoù Nextcloud - Flap Nextcloud N\'eus ket bet gallet tapout ar chomlec\'h postel Merkañ evel sifret Arventenniñ ar sifradur diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index a46ab7c94727..d3cf81ffec7f 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -295,11 +295,7 @@ La signatura no coincideix Assistent Més - Notes - Converses Més aplicacions de Nextcloud - Notes del Nextcloud - Nextcloud Talk No s\'ha pogut triar l\'adreça electrònica. Activa el xifrat Arranjament de xifrat diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index d95c986f7e61..958b564cb630 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -297,11 +297,7 @@ Signatura se neshoduje Asistent Další - Poznámky - Talk Další Nextcloud aplikace - Nextcloud poznámky - Nextcloud Talk Nepodařilo se vybrat e-mailovou adresu. Nastavit jako šifrované Nedaří se získat certifikát serveru diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 52870c730f8b..ea84b45d0b71 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -297,11 +297,7 @@ Signaturen matcher ikke Assistent Mere - Noter - Snak Flere Nextcloud apps - Nextcloud noter - Nextcloud Snak Kunne ikke plukke e-mailadresse. Angiv som krypteret Servercertifikatet kunne ikke hentes diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index df76ecba7328..3e30121cd2a9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -297,11 +297,7 @@ Signatur stimmt nicht überein Assistent Mehr - Notizen - Talk Weitere Nextcloud-Apps - Nextcloud Notizen - Nextcloud Talk E-Mail-Adresse konnte nicht ausgewählt werden. Als verschlüsselt festlegen Serverzertifikat kann nicht abgerufen werden diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 60b9c0f1d285..392ca8f23e1d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -245,11 +245,7 @@ Το Ε2Ε δεν έχει εγκατασταθεί ακόμη Δεν είναι δυνατό χωρίς σύνδεση στο διαδίκτυο Περισσότερα - Σημειώσεις - Ομιλία Περισσότερες εφαρμογές Nextcloud - Nextcloud Σημειώσεις - Nextcloud Talk Ορισμός ως κρυπτογραφημένου Ρύθμιση κρυπτογράφησης Γίνεται αποκρυπτογράφηση… diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 46717a116ec8..954f4b5b34e5 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -191,8 +191,6 @@ %1$s el %2$s uzataj %1$s uzataj Aŭtomata alŝuto - Paroli - Nextcloud Notoj Difini kiel ĉifrita Agordi ĉifradon Malĉifrado... diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 4fea0ad826ad..7550e7a2f0bd 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -274,11 +274,7 @@ No es posible sin conexión a Internet Asistente Más - Notas - Hablar Más apps de Nextcloud - Notas de Nextcloud - Nextcloud Talk No se pudo seleccionar la dirección de correo electrónico. Establecer como cifrado Configurar cifrado diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index b82ebb7cad7f..7e9eee2d4447 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -214,7 +214,6 @@ %1$s de %2$s usados Carga automática Asistente - Hablar Establecer como encriptado Configurar la encripción Desencriptando… diff --git a/app/src/main/res/values-es-rCO/strings.xml b/app/src/main/res/values-es-rCO/strings.xml index 2953fed84fde..050b175f1cb2 100644 --- a/app/src/main/res/values-es-rCO/strings.xml +++ b/app/src/main/res/values-es-rCO/strings.xml @@ -181,8 +181,6 @@ Cerrar sesión %1$s de %2$s usados Carga automática - Notas - Hablar Establecer como encriptado Configurar la encripción Desencriptando… diff --git a/app/src/main/res/values-es-rEC/strings.xml b/app/src/main/res/values-es-rEC/strings.xml index 2d8f0cfb62ab..55dbb41fee4b 100644 --- a/app/src/main/res/values-es-rEC/strings.xml +++ b/app/src/main/res/values-es-rEC/strings.xml @@ -243,8 +243,6 @@ Carga automática E2E Encriptación de extremo a extremo aún no configurada No es posible sin conexión a Internet - Hablar - Nextcloud Notes Establecer como encriptado Configurar la encripción Desencriptando… diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 60b3b00cc09b..04b1b1b2c3f6 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -274,11 +274,7 @@ No es posible sin conexión a internet Asistente Más - Notas - Hablar Más aplicaciones de Nextcloud - Notas de Nextcloud - Nextcloud Talk No se pudo seleccionar la dirección de correo electrónico. Establecer como encriptado Configurar la encripción diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7ab93bc89859..5812b24465f6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -296,11 +296,7 @@ La firma no coincide Asistente Más - Notas - Talk Más apps de Nextcloud - Nextcloud Notas - Nextcloud Talk Fallo al seleccionar dirección de correo. Establecer como cifrado Configurar cifrado diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index e5ecec2482c8..f800ac8d3ca9 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -294,11 +294,7 @@ Sinadura ez dator bat Morroia Gehiago - Oharrak - Hizketaldia Nextcloud aplikazio gehiago - Nextcloud Oharrak - Nextcloud Talk Ezin izan da helbide elektronikoa hautatu. Ezarri zifratu gisa Konfiguratu zifratzea diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 7e7d22f0da34..6bd62ed8d29b 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -254,11 +254,7 @@ E2E هنوز راه اندازی نشده است. بدون اتصال به اینترنت امکان پذیر نیست. بیشتر - یادداشت‌ها - گفتگو More Nextcloud Apps - یادداشت‌های نکست کلود - Nextcloud Talk خطا در گرفتن نشانی رایانامه به صورت رمزگذاری شده تنظیم شده است رمزگذاری را تنظیم کنید diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 00fc8842778a..11d83d813ed7 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -267,11 +267,7 @@ Laskuri on liian vanha Avustaja Lisää - Muistiinpanot - Talk Lisää Nextcloud-sovelluksia - Nextcloud Notes - Nextcloud Talk Sähköpostiosoitteen valinta epäonnistui. Salaa Aseta salaus diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 074dbf041003..e1c633b962e1 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -297,11 +297,7 @@ La signature ne correspond pas Assistant Plus - Notes - Discussion Plus d\'applications Nextcloud - Nextcloud Notes - Nextcloud Talk Le choix de l\'adresse e-mail a échoué. Définir comme chiffré Configurer le chiffrement diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index 947902382300..bebd62c367b1 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -297,11 +297,7 @@ Ní hionann an síniú Cúntóir Tuilleadh - Nótaí - Caint Tuilleadh aipeanna Nextcloud - Nótaí Nextcloud - Caint Nextcloud Theip ar an seoladh ríomhphoist a phiocadh. Socraigh mar criptithe Ní féidir teastas an fhreastalaí a fháil diff --git a/app/src/main/res/values-gd/strings.xml b/app/src/main/res/values-gd/strings.xml index f4ecdff7d1a1..e8b5eac35c7a 100644 --- a/app/src/main/res/values-gd/strings.xml +++ b/app/src/main/res/values-gd/strings.xml @@ -205,8 +205,6 @@ Tha %1$s ’ga chleachdadh Luchdaich suas gu fèin-obrachail Barrachd - Nòtaichean - Nòtaichean Nextcloud Suidhich crioptachadh air Suidhich an crioptachadh ’Ga dhì-chrioptachadh… diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 5efd4bd17edf..41b097be6fc7 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -297,11 +297,7 @@ A sinatura non coincide Asistente Máis - Notas - Parladoiro Máis aplicacións de Nextcloud - Notas de Nextcloud - Parladoiro de Nextcloud Produciuse un fallo ao escoller o enderezo de correo. Definir como cifrado Non é posíbel recuperar o certificado de servidor diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 9446f2a65776..7161ea987bd2 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -227,9 +227,6 @@ Upotrijebljeno %1$s Automatsko otpremanje Više - Bilješke - Razgovor - Nextcloud Notes Postavi kao šifrirano Postavi šifriranje Dešifriranje u tijeku... diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index f56ba4c307cb..d030cf8bc335 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -296,11 +296,7 @@ Az aláírás nem egyezik Asszisztens Továbbiak - Jegyzetek - Beszélgetés További nextcloudos alkalmazások - Nextcloud Jegyzetek - Nextcloud Beszélgetés Az e-mail-cím kiválasztása sikertelen. Titkosítás bekapcsolása A kiszolgáló tanúsítványa nem kérhető le diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index eae873cc9ce4..4d0b32e23584 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -264,10 +264,7 @@ Otomatis unggah hanya bekerja dengan baik apabila Anda mengeluarkan aplikasi ini Tidak bisa dilakukan tanpa koneksi internet Asisten Lainnya - Catatan - Talk Aplikasi Nextcloud Lainnya - Catatan Nextcloud Gagal memilih alamat surel. Atur sebagai terenkripsi Buat enkripsi diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 548c63a84516..478f66fbac14 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -297,11 +297,7 @@ Undirritanir samsvara ekki Meðhjálpari Meira - Minnispunktar - Spjalla Fleiri Nextcloud-forrit - Nextcloud-minnispunktar - Nextcloud Talk Mistókst að velja tölvupóstfang. Setja sem dulritað Tókst ekki að ná í skilríki þjónsins diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2f4b81f2e7f7..1b912288c0ce 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -292,11 +292,7 @@ La firma non corrisponde Assistente Altro - Note - Talk Altre applicazioni di Nextcloud - Nextcloud Note - Nextcloud Talk Impossibile scegliere l\'indirizzo di posta. Imposta come cifrato Configura la cifratura diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 9b590308e087..e5d1545e0116 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -225,9 +225,6 @@ %1$s בשימוש העלאה אוטומטית יותר - פתקים - שיחה - פתקים של Nextcloud הגדרה כמוצפן הגדרת הצפנה מתבצע פענוח… diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index dbd46777a491..8bf55b749179 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -291,11 +291,7 @@ 署名が一致しません アシスタント さらに表示 - ノート - トーク もっと Nextcloud アプリを見る - Nextcloud ノート - Nextcloud Talk メールアドレスの選択に失敗しました。 暗号化設定 暗号化を設定する diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index a7304b30fe4f..001126d53b26 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -243,11 +243,7 @@ E2E not yet setup Not possible without internet connection More - Notes - Talk More Nextcloud Apps - Nextcloud Notes - Nextcloud Talk Failed to pick email address. Set as encrypted Set up encryption diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 1a6e82741232..d0899ef183c6 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -297,11 +297,7 @@ 서명이 일치하지 않습니다 어시스턴트 더 보기 - 메모 - 토크 더 많은 Nextcloud 앱 - Nextcloud 메모 - Nextcloud Talk 이메일 주소 고르기에 실패함 암호화하도록 설정 암호화 설정 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index c15f39f298b8..d8326c9957ba 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -255,10 +255,7 @@ Neįmanoma, kai nėra interneto ryšio Parašas nesutampa Daugiau - Užrašai - Kalba Daugiau Nextcloud programėlių - Nextcloud užrašai Nepavyko pasirinkti el. pašto adreso. Nustatyti kaip šifruotą Nustatyti šifravimą diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index c77df75a6bc6..37510c55ef2a 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -199,9 +199,6 @@ %1$s izmantoti Automātiska augšupielāde Vairāk - Piezīmes - Runāt - Nextcloud piezīmes Uzstādīt kā šifrētu Uzstādīt šifrēšanu Atšifrē… diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index fd9e6a68413d..9a1575ec6b8c 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -220,8 +220,6 @@ искористено %1$s од %2$s искористено %1$s Автоматско прикачување - Разговор - Talk Постави како енкриптирано Постави енкрипција Дешифрирање… diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 9b0c72ac69f8..3e4ac28fafbe 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -287,11 +287,7 @@ Signatur samsvarer ikke Assistent Mer - Notater - Samtale Flere Nextcloud apper - Nextcloud Notater - Nextcloud Talk Kunne ikke velge e-postadresse. Sett som kryptert Sett opp kryptering diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5a19b339cf7f..e3d369c67d08 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -292,11 +292,7 @@ Handtekening komt niet overeen Assistent Meer - Notities - Talk Meer Nextcloud Apps - Nextcloud Notities - Nextcloud Talk Email adres ophalen mislukt. Instellen als versleuteld Instellen versleuteling diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b74ff24b0631..7488f97c48ea 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -297,11 +297,7 @@ Podpis nie pasuje Asystent Więcej - Notatki - Talk Więcej aplikacji Nextcloud - Nextcloud Notes - Nextcloud Talk Nie udało się wybrać adresu e-mail. Ustaw jako zaszyfrowane Nie można pobrać certyfikatu serwera diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index bbaaea1f1b77..6b1013a053e7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -293,11 +293,7 @@ A assinatura não corresponde Assistente Mais - Notas - Talk Mais aplicativos Nextcloud - Notas Nextcloud - Nextcloud Talk Falha ao escolher o endereço de e-mail. Definir como criptografado Definir criptografia diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index c380dd786bb3..c1aa47ff69e4 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -241,11 +241,7 @@ Carregamento automático Não é possível sem uma ligação à Internet Mais - Notas - Falar Mais Aplicações Nextcloud - Nextcloud Notes - Nextcloud Talk Definir como encriptado Definir encriptação Decryption… diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 829814eb22f9..3ef82de43d8d 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -296,11 +296,7 @@ Semnătura nu se potrivește Asistent Mai mult - Notițe - Discuție Mai multe aplicații Nextcloud - Notițe Nextcloud - Nextcloud Talk Nu s-a putut alege adresa de e-mail. Setați drept criptat Setează criptarea diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5fd0b9a8f6b4..8c23f52ae11f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -297,11 +297,7 @@ Подпись не совпадает Помощник Больше - Заметки - Конференции Больше приложений для Nextcloud - Заметки для Nextcloud - Конференции для Nextcloud Невозможно выбрать адрес электронной почты. Зашифровать Не удается получить сертификат сервера diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index ee07c7cab921..8fa8d7b070f3 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -223,9 +223,6 @@ %1$s impreadu Carrigamentu automàticu Prus - Notas - Faedda - Notas de Nextcloud Cunfigura comente tzifradu Cunfigura critografia Decritografende… diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 3b08fd3e7c9e..dfda24457eeb 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -297,11 +297,7 @@ Podpis nesúhlasí Asistent Viac - Poznámky - Talk /Rozhovor/ Ďalšie Nextcloud aplikácie - Nextcloud poznámky - Nextcloud Talk /Rozhovor/ Nepodarilo sa vybrať e-mailovú adresu. Nastaviť ako zašifrované Nepodarilo sa získať certifikát servera diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 8b0e7b6be775..ff223fc74af3 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -247,11 +247,7 @@ Celovito šifriranje E2E ni še nastavljeno. Opravila ni mogoče izvesti brez vzpostavljene internetne povezave Več - Beležke - Pogovor Talk Več programov Nexcloud - Nextcloud Beležke - Nextcloud Talk Elektronskega naslova ni mogoče izbrati. Nastavi kot šifrirano Nastavitev šifriranja diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ef56b8ee48ed..37fe67a03386 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -198,8 +198,6 @@ %1$s iskorišćeno Automatska otpremanja Ostalo - Beleške - Nekstklaud Beleške Postavi kao šifrovano Podesite šifrovanje Dešifrujem… diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 046cf406e24d..d7f09420ef30 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -297,11 +297,7 @@ Потпис се не подудара Асистент Више - Белешке - Разговор Још Nextcloud апликација - Некстклауд Белешке - Nextcloud Talk Није успело бирање и-мејл адресе. Постави као шифровано Серверски сертификат није могао да се преузме diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 8421c5389db1..b8622a77a620 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -297,11 +297,7 @@ Signaturen matchar inte Assistent Mer - Anteckning - Talk Fler Nextcloud-appar - Nextcloud anteckningar - Nextcloud Talk Det gick inte att välja e-postadress. Sätt som krypterad Kunde inte hämta servercertifikatet diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 93752f078e2f..f6540ea080c0 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -235,9 +235,7 @@ อัปโหลดอัตโนมัติ ใช้โดยไม่มีการเชื่อมต่ออินเทอร์เน็ตไม่ได้ เพิ่มเติม - โน้ต แอพ Nextcloud เพิ่มเติม - Nextcloud โน้ต กำลังถอดรหัส… ปิด โฟลเดอร์นี้ไม่ว่าง diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0132de42438f..fb2ca1d7844e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -297,11 +297,7 @@ İmza eşleşmiyor Yardımcı Diğer - Notlar - Konuş Diğer Nextcloud uygulamaları - Nextcloud Notlar - Nextcloud Sohbet E-posta adresi alınamadı. Şifrelensin Şifreleme kurulumu diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml index d6494e23f98f..3d205ef2c33e 100644 --- a/app/src/main/res/values-ug/strings.xml +++ b/app/src/main/res/values-ug/strings.xml @@ -282,11 +282,7 @@ ئىمزا ماس كەلمەيدۇ ياردەمچى تېخىمۇ كۆپ - ئىزاھات - پاراڭ تېخىمۇ كۆپ Nextcloud ئەپلىرى - Nextcloud Notes - Nextcloud Talk ئېلېكترونلۇق خەت ئادرېسىنى تاللىيالمىدى. شىفىرلانغان قىلىپ تەڭشەڭ مەخپىيلەشتۈرۈشنى تەڭشەڭ diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 66a9b4d41d40..e35c3c3d0c3b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -297,11 +297,7 @@ Підпис не збігається Помічник Більше - Нотатки - Розмови Більше застосунків Nextcloud - Нотатки для Nextcloud - Розмови Nextcloud Не вдалося вибрати ел. адресу. Позначити як зашифроване Неможливо отримати сертифікат сервера diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 0c4de6bc8392..db82064cc2d6 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -232,9 +232,6 @@ Tự động tải lên E2E chưa được thiết lập Thêm - Ghi chú - Nói chuyện - Nextcloud Ghi chú Đặt mã hóa Thiết lập mã hóa Đang giải mã… diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 7e5e1323e04f..2be056e86a45 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -297,11 +297,7 @@ 签名不匹配 助手 更多 - 笔记 - 通话 更多 Nextcloud 应用 - Nextcloud 笔记 - Nextcloud 通话 未能选择电子邮箱地址 设置为加密 无法检索服务器证书 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 055f042862e7..4d373614f15e 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -297,11 +297,7 @@ 簽名不相符 助手 更多 - 備註 - 講座 更多 Nextcloud 應用程式 - Nextcloud 筆記 - Nextcloud Talk 無法挑選電郵地址。 設為已加密的 無法擷取伺服器證書 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7818fb64b9ab..35f42b17bbf5 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -297,11 +297,7 @@ 簽章不相符 助理 更多 - Notes - Talk 更多 Nextcloud 應用程式 - Nextcloud Notes - Nextcloud Talk 挑選電子郵件地址失敗。 設為已加密 無法擷取伺服器憑證 From 0c606f92096cea0e939b69e081e888da520a16b7 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:47:13 +0100 Subject: [PATCH 06/11] Update library version Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- build.gradle | 2 +- gradle/verification-metadata.xml | 45 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c28735b601b8..222bc193d103 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ */ buildscript { ext { - androidLibraryVersion ="6c9ee03afbb9f6f7ff108ccf153e135f354bada4" + androidLibraryVersion ="d0d39ae9d5f4d66dedb4308f2e4821c37a60575b" androidPluginVersion = '8.8.1' androidxMediaVersion = '1.5.1' androidxTestVersion = "1.6.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index af2402611e96..df1b17d5f1e5 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -10077,6 +10077,14 @@ + + + + + + + + @@ -10205,6 +10213,14 @@ + + + + + + + + @@ -11115,6 +11131,14 @@ + + + + + + + + @@ -11162,6 +11186,11 @@ + + + + + @@ -17599,6 +17628,14 @@ + + + + + + + + @@ -17711,6 +17748,14 @@ + + + + + + + + From a74d600cd3a7d6d28bd3c67c83e8070fadd14c96 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Fri, 14 Feb 2025 09:11:21 +0100 Subject: [PATCH 07/11] Place open in notes button in card view Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- .../android/ui/adapter/OCFileListAdapter.java | 2 + .../theme/FilesSpecificViewThemeUtils.kt | 17 ++++ .../main/res/layout/list_header_open_in.xml | 80 +++++++++++-------- 3 files changed, 64 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 2a58db69ffcf..df6c6bfef1f7 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -461,6 +461,8 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi if (shouldShowOpenInNotes()) { final var listHeaderOpenInBinding = headerBinding.openIn; + viewThemeUtils.files.themeFilledCardView(listHeaderOpenInBinding.infoCard); + listHeaderOpenInBinding.infoText.setText(String.format(activity.getString(R.string.folder_best_viewed_in), activity.getString(R.string.ecosystem_apps_notes))); diff --git a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt index 41f13b37156f..6f0b5f728753 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt @@ -220,6 +220,23 @@ class FilesSpecificViewThemeUtils @Inject constructor( } } + fun themeFilledCardView(cardView: MaterialCardView) { + withScheme(cardView) { scheme -> + val background = cardView.context.getColor(R.color.grey_200) + cardView.backgroundTintList = + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_checked), + intArrayOf(-android.R.attr.state_checked) + ), + intArrayOf( + scheme.secondaryContainer, + background + ) + ) + } + } + fun themeAvatarButton(shareImageView: ImageView) { withScheme(shareImageView.context) { scheme -> shareImageView.background.setColorFilter(scheme.primary, PorterDuff.Mode.SRC_IN) diff --git a/app/src/main/res/layout/list_header_open_in.xml b/app/src/main/res/layout/list_header_open_in.xml index ad7f3f2ac7f7..2ed44dbdab1b 100644 --- a/app/src/main/res/layout/list_header_open_in.xml +++ b/app/src/main/res/layout/list_header_open_in.xml @@ -6,53 +6,63 @@ ~ SPDX-License-Identifier: AGPL-3.0-or-later --> - + android:layout_height="wrap_content" + android:backgroundTint="@color/bg_default" + android:id="@+id/infoCard"> - + android:layout_margin="@dimen/standard_half_margin"> - + android:orientation="horizontal"> + + + + + + - + tools:text="Open in Notes" /> - + - + - - - \ No newline at end of file + From a6e9586896f64bab65fed7528452488f151770ca Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Tue, 18 Feb 2025 13:41:46 +0100 Subject: [PATCH 08/11] Use material text button Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- app/src/main/res/layout/list_header_open_in.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/list_header_open_in.xml b/app/src/main/res/layout/list_header_open_in.xml index 2ed44dbdab1b..74b907b40888 100644 --- a/app/src/main/res/layout/list_header_open_in.xml +++ b/app/src/main/res/layout/list_header_open_in.xml @@ -9,11 +9,11 @@ + android:backgroundTint="@color/bg_default"> - Date: Wed, 19 Feb 2025 09:23:04 +0100 Subject: [PATCH 09/11] Update library version Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- build.gradle | 2 +- gradle/verification-metadata.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 222bc193d103..43b1ba988ae8 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ */ buildscript { ext { - androidLibraryVersion ="d0d39ae9d5f4d66dedb4308f2e4821c37a60575b" + androidLibraryVersion ="2c729147e16c6a79e28bf711c2366a8f438bb490" androidPluginVersion = '8.8.1' androidxMediaVersion = '1.5.1' androidxTestVersion = "1.6.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index df1b17d5f1e5..5a8d3fa8fdf1 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -9925,6 +9925,14 @@ + + + + + + + + From 832039854e074548093467cf43da973d3c603a3e Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Mon, 24 Feb 2025 09:06:40 +0100 Subject: [PATCH 10/11] Update library version Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- build.gradle | 2 +- gradle/verification-metadata.xml | 70 +++++++------------------------- 2 files changed, 16 insertions(+), 56 deletions(-) diff --git a/build.gradle b/build.gradle index 43b1ba988ae8..2a14a36bab22 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ */ buildscript { ext { - androidLibraryVersion ="2c729147e16c6a79e28bf711c2366a8f438bb490" + androidLibraryVersion ="4a8c04815faa818380e019a227e2d80df86ef187" androidPluginVersion = '8.8.1' androidxMediaVersion = '1.5.1' androidxTestVersion = "1.6.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 5a8d3fa8fdf1..acbb999b7795 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -8,6 +8,11 @@ + + + + + @@ -9925,14 +9930,6 @@ - - - - - - - - @@ -9989,6 +9986,14 @@ + + + + + + + + @@ -10085,14 +10090,6 @@ - - - - - - - - @@ -10221,14 +10218,6 @@ - - - - - - - - @@ -11139,14 +11128,6 @@ - - - - - - - - @@ -11194,11 +11175,6 @@ - - - - - @@ -12765,10 +12741,10 @@ - + - + @@ -17636,14 +17612,6 @@ - - - - - - - - @@ -17756,14 +17724,6 @@ - - - - - - - - From a76859c8c6fe051ceaa8884ece619f882c1c7b40 Mon Sep 17 00:00:00 2001 From: ZetaTom <70907959+ZetaTom@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:41:54 +0100 Subject: [PATCH 11/11] Set is_beta back to false Signed-off-by: ZetaTom <70907959+ZetaTom@users.noreply.github.com> --- app/src/main/res/values/setup.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml index caf88b3f297b..afed2dafe23a 100644 --- a/app/src/main/res/values/setup.xml +++ b/app/src/main/res/values/setup.xml @@ -7,7 +7,7 @@ --> - true + false false