Merge remote-tracking branch 'origin/master' into dev
|
@ -58,8 +58,6 @@
|
|||
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
|
||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
</JetCodeStyleSettings>
|
||||
<MarkdownNavigatorCodeStyleSettings>
|
||||
|
|
|
@ -367,7 +367,7 @@ dependencies {
|
|||
// upon each update first test: new registration, receive push
|
||||
gplayImplementation "com.google.firebase:firebase-messaging:23.1.2"
|
||||
|
||||
implementation 'com.github.nextcloud.android-common:ui:0.7.0'
|
||||
implementation 'com.github.nextcloud.android-common:ui:0.8.0'
|
||||
|
||||
implementation "androidx.room:room-runtime:$roomVersion"
|
||||
kapt "androidx.room:room-compiler:$roomVersion"
|
||||
|
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 6.8 KiB |
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2023 Tobias Kaminsky
|
||||
* Copyright (C) 2023 Nextcloud GmbH
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.owncloud.android.ui.fragment
|
||||
|
||||
import androidx.test.espresso.intent.rule.IntentsTestRule
|
||||
import com.nextcloud.android.lib.resources.groupfolders.Groupfolder
|
||||
import com.nextcloud.test.TestActivity
|
||||
import com.owncloud.android.AbstractIT
|
||||
import com.owncloud.android.utils.ScreenshotTest
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class GroupfolderListFragmentIT : AbstractIT() {
|
||||
@get:Rule
|
||||
val testActivityRule = IntentsTestRule(TestActivity::class.java, true, false)
|
||||
|
||||
lateinit var activity: TestActivity
|
||||
|
||||
@Before
|
||||
fun before() {
|
||||
activity = testActivityRule.launchActivity(null)
|
||||
}
|
||||
|
||||
@ScreenshotTest
|
||||
@Test
|
||||
fun showEmpty() {
|
||||
val sut = GroupfolderListFragment()
|
||||
activity.addFragment(sut)
|
||||
|
||||
waitForIdleSync()
|
||||
|
||||
screenshot(activity)
|
||||
}
|
||||
|
||||
@Test
|
||||
@ScreenshotTest
|
||||
fun showGroupfolders() {
|
||||
val sut = GroupfolderListFragment()
|
||||
activity.addFragment(sut)
|
||||
|
||||
waitForIdleSync()
|
||||
|
||||
activity.runOnUiThread {
|
||||
sut.setAdapter(null)
|
||||
sut.setData(
|
||||
mapOf(
|
||||
Pair("1", Groupfolder(1, "/test/")),
|
||||
Pair("2", Groupfolder(2, "/subfolder/group"))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
waitForIdleSync()
|
||||
shortSleep()
|
||||
screenshot(activity)
|
||||
}
|
||||
}
|
|
@ -109,6 +109,7 @@ import com.owncloud.android.ui.fragment.FileDetailSharingFragment;
|
|||
import com.owncloud.android.ui.fragment.FileDetailsSharingProcessFragment;
|
||||
import com.owncloud.android.ui.fragment.GalleryFragment;
|
||||
import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetDialog;
|
||||
import com.owncloud.android.ui.fragment.GroupfolderListFragment;
|
||||
import com.owncloud.android.ui.fragment.LocalFileListFragment;
|
||||
import com.owncloud.android.ui.fragment.OCFileListBottomSheetDialog;
|
||||
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
||||
|
@ -462,4 +463,7 @@ abstract class ComponentsModule {
|
|||
|
||||
@ContributesAndroidInjector
|
||||
abstract DocumentScanActivity documentScanActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract GroupfolderListFragment groupfolderListFragment();
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ class EtmActivity : ToolbarActivity(), Injectable {
|
|||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onBackPressed() {
|
||||
if (!vm.onBackPressed()) {
|
||||
super.onBackPressed()
|
||||
|
|
|
@ -100,6 +100,7 @@ import com.owncloud.android.ui.events.DummyDrawerEvent;
|
|||
import com.owncloud.android.ui.events.SearchEvent;
|
||||
import com.owncloud.android.ui.fragment.FileDetailsSharingProcessFragment;
|
||||
import com.owncloud.android.ui.fragment.GalleryFragment;
|
||||
import com.owncloud.android.ui.fragment.GroupfolderListFragment;
|
||||
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
||||
import com.owncloud.android.ui.fragment.SharedListFragment;
|
||||
import com.owncloud.android.ui.preview.PreviewTextStringFragment;
|
||||
|
@ -398,6 +399,7 @@ public abstract class DrawerActivity extends ToolbarActivity
|
|||
DrawerMenuUtil.filterSearchMenuItems(menu, user, getResources());
|
||||
DrawerMenuUtil.filterTrashbinMenuItem(menu, capability);
|
||||
DrawerMenuUtil.filterActivityMenuItem(menu, capability);
|
||||
DrawerMenuUtil.filterGroupfoldersMenuItem(menu, capability);
|
||||
|
||||
DrawerMenuUtil.setupHomeMenuItem(menu, getResources());
|
||||
|
||||
|
@ -422,6 +424,7 @@ public abstract class DrawerActivity extends ToolbarActivity
|
|||
if (this instanceof FileDisplayActivity &&
|
||||
!(((FileDisplayActivity) this).getLeftFragment() instanceof GalleryFragment) &&
|
||||
!(((FileDisplayActivity) this).getLeftFragment() instanceof SharedListFragment) &&
|
||||
!(((FileDisplayActivity) this).getLeftFragment() instanceof GroupfolderListFragment) &&
|
||||
!(((FileDisplayActivity) this).getLeftFragment() instanceof PreviewTextStringFragment)) {
|
||||
showFiles(false);
|
||||
((FileDisplayActivity) this).browseToRoot();
|
||||
|
@ -465,6 +468,13 @@ public abstract class DrawerActivity extends ToolbarActivity
|
|||
startSharedSearch(menuItem);
|
||||
} else if (itemId == R.id.nav_recently_modified) {
|
||||
startRecentlyModifiedSearch(menuItem);
|
||||
} else if (itemId == R.id.nav_groupfolders) {
|
||||
MainApp.showOnlyFilesOnDevice(false);
|
||||
Intent intent = new Intent(getApplicationContext(), FileDisplayActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
intent.setAction(FileDisplayActivity.LIST_GROUPFOLDERS);
|
||||
intent.putExtra(FileDisplayActivity.DRAWER_MENU_ID, menuItem.getItemId());
|
||||
startActivity(intent);
|
||||
} else {
|
||||
if (menuItem.getItemId() >= MENU_ITEM_EXTERNAL_LINK &&
|
||||
menuItem.getItemId() <= MENU_ITEM_EXTERNAL_LINK + 100) {
|
||||
|
|
|
@ -59,9 +59,11 @@ import com.google.android.material.appbar.AppBarLayout;
|
|||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.nextcloud.client.account.User;
|
||||
import com.nextcloud.client.appinfo.AppInfo;
|
||||
import com.nextcloud.client.core.AsyncRunner;
|
||||
import com.nextcloud.client.di.Injectable;
|
||||
import com.nextcloud.client.files.DeepLinkHandler;
|
||||
import com.nextcloud.client.media.PlayerServiceConnection;
|
||||
import com.nextcloud.client.network.ClientFactory;
|
||||
import com.nextcloud.client.network.ConnectivityService;
|
||||
import com.nextcloud.client.preferences.AppPreferences;
|
||||
import com.nextcloud.client.utils.IntentUtil;
|
||||
|
@ -78,6 +80,7 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
|
|||
import com.owncloud.android.files.services.FileUploader;
|
||||
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
|
||||
import com.owncloud.android.files.services.NameCollisionPolicy;
|
||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
||||
|
@ -96,16 +99,17 @@ import com.owncloud.android.operations.UploadFileOperation;
|
|||
import com.owncloud.android.syncadapter.FileSyncAdapter;
|
||||
import com.owncloud.android.ui.asynctasks.CheckAvailableSpaceTask;
|
||||
import com.owncloud.android.ui.asynctasks.FetchRemoteFileTask;
|
||||
import com.owncloud.android.ui.asynctasks.GetRemoteFileTask;
|
||||
import com.owncloud.android.ui.dialog.SendShareDialog;
|
||||
import com.owncloud.android.ui.dialog.SortingOrderDialogFragment;
|
||||
import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment;
|
||||
import com.owncloud.android.ui.events.ChangeMenuEvent;
|
||||
import com.owncloud.android.ui.events.SearchEvent;
|
||||
import com.owncloud.android.ui.events.SyncEventFinished;
|
||||
import com.owncloud.android.ui.events.TokenPushEvent;
|
||||
import com.owncloud.android.ui.fragment.FileDetailFragment;
|
||||
import com.owncloud.android.ui.fragment.FileFragment;
|
||||
import com.owncloud.android.ui.fragment.GalleryFragment;
|
||||
import com.owncloud.android.ui.fragment.GroupfolderListFragment;
|
||||
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
||||
import com.owncloud.android.ui.fragment.SearchType;
|
||||
import com.owncloud.android.ui.fragment.SharedListFragment;
|
||||
|
@ -150,6 +154,7 @@ import androidx.fragment.app.FragmentManager;
|
|||
import androidx.fragment.app.FragmentTransaction;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import kotlin.Unit;
|
||||
|
||||
import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR;
|
||||
import static com.owncloud.android.utils.PermissionUtil.PERMISSION_CHOICE_DIALOG_TAG;
|
||||
|
@ -164,6 +169,7 @@ public class FileDisplayActivity extends FileActivity
|
|||
|
||||
public static final String RESTART = "RESTART";
|
||||
public static final String ALL_FILES = "ALL_FILES";
|
||||
public static final String LIST_GROUPFOLDERS = "LIST_GROUPFOLDERS";
|
||||
public static final String PHOTO_SEARCH = "PHOTO_SEARCH";
|
||||
public static final int SINGLE_USER_SIZE = 1;
|
||||
public static final String OPEN_FILE = "NC_OPEN_FILE";
|
||||
|
@ -180,6 +186,7 @@ public class FileDisplayActivity extends FileActivity
|
|||
public static final String TAG_PUBLIC_LINK = "PUBLIC_LINK";
|
||||
public static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
|
||||
public static final String KEY_FILE_ID = "KEY_FILE_ID";
|
||||
public static final String KEY_FILE_PATH = "KEY_FILE_PATH";
|
||||
public static final String KEY_ACCOUNT = "KEY_ACCOUNT";
|
||||
|
||||
|
||||
|
@ -236,6 +243,7 @@ public class FileDisplayActivity extends FileActivity
|
|||
|
||||
@Inject
|
||||
FastScrollUtils fastScrollUtils;
|
||||
@Inject AsyncRunner asyncRunner;
|
||||
|
||||
public static Intent openFileIntent(Context context, User user, OCFile file) {
|
||||
final Intent intent = new Intent(context, PreviewImageActivity.class);
|
||||
|
@ -551,6 +559,11 @@ public class FileDisplayActivity extends FileActivity
|
|||
setLeftFragment(new OCFileListFragment());
|
||||
getSupportFragmentManager().executePendingTransactions();
|
||||
browseToRoot();
|
||||
} else if (LIST_GROUPFOLDERS.equals(intent.getAction())) {
|
||||
Log_OC.d(this, "Switch to list groupfolders fragment");
|
||||
|
||||
setLeftFragment(new GroupfolderListFragment());
|
||||
getSupportFragmentManager().executePendingTransactions();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2433,13 +2446,21 @@ public class FileDisplayActivity extends FileActivity
|
|||
|
||||
String userName = intent.getStringExtra(KEY_ACCOUNT);
|
||||
String fileId = intent.getStringExtra(KEY_FILE_ID);
|
||||
String filePath = intent.getStringExtra(KEY_FILE_PATH);
|
||||
|
||||
if (userName == null && fileId == null && intent.getData() != null) {
|
||||
openDeepLink(intent.getData());
|
||||
} else {
|
||||
Optional<User> optionalUser = userName == null ? getUser() : getUserAccountManager().getUser(userName);
|
||||
if (optionalUser.isPresent()) {
|
||||
openFile(optionalUser.get(), fileId);
|
||||
if (!TextUtils.isEmpty(fileId)) {
|
||||
openFile(optionalUser.get(), fileId);
|
||||
} else if (!TextUtils.isEmpty(filePath)) {
|
||||
openFileByPath(optionalUser.get(), filePath);
|
||||
} else {
|
||||
dismissLoadingDialog();
|
||||
DisplayUtils.showSnackMessage(this, getString(R.string.file_not_found));
|
||||
}
|
||||
} else {
|
||||
dismissLoadingDialog();
|
||||
DisplayUtils.showSnackMessage(this, getString(R.string.associated_account_not_found));
|
||||
|
@ -2501,7 +2522,53 @@ public class FileDisplayActivity extends FileActivity
|
|||
storageManager,
|
||||
this);
|
||||
fetchRemoteFileTask.execute();
|
||||
}
|
||||
|
||||
private void openFileByPath(User user, String filepath) {
|
||||
setUser(user);
|
||||
|
||||
if (filepath == null) {
|
||||
dismissLoadingDialog();
|
||||
DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
|
||||
return;
|
||||
}
|
||||
|
||||
FileDataStorageManager storageManager = getStorageManager();
|
||||
|
||||
if (storageManager == null) {
|
||||
storageManager = new FileDataStorageManager(user, getContentResolver());
|
||||
}
|
||||
|
||||
OwnCloudClient client;
|
||||
try {
|
||||
client = clientFactory.create(user);
|
||||
} catch (ClientFactory.CreationException e) {
|
||||
dismissLoadingDialog();
|
||||
DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
|
||||
return;
|
||||
}
|
||||
|
||||
GetRemoteFileTask getRemoteFileTask = new GetRemoteFileTask(this,
|
||||
filepath,
|
||||
client,
|
||||
storageManager,
|
||||
user);
|
||||
asyncRunner.postQuickTask(getRemoteFileTask, this::onFileRequestResult, null);
|
||||
}
|
||||
|
||||
private Unit onFileRequestResult(GetRemoteFileTask.Result result) {
|
||||
dismissLoadingDialog();
|
||||
|
||||
setFile(result.getFile());
|
||||
|
||||
OCFileListFragment fileFragment = new OCFileListFragment();
|
||||
setLeftFragment(fileFragment);
|
||||
|
||||
getSupportFragmentManager().executePendingTransactions();
|
||||
|
||||
fileFragment.onItemClicked(result.getFile());
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void performUnifiedSearch(String query) {
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2023 Tobias Kaminsky
|
||||
* Copyright (C) 2023 Nextcloud GmbH
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.owncloud.android.ui.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.nextcloud.android.lib.resources.groupfolders.Groupfolder
|
||||
import com.owncloud.android.R
|
||||
import com.owncloud.android.databinding.ListItemBinding
|
||||
import com.owncloud.android.ui.interfaces.GroupfolderListInterface
|
||||
import com.owncloud.android.utils.theme.ViewThemeUtils
|
||||
import java.io.File
|
||||
|
||||
class GroupfolderListAdapter(
|
||||
val context: Context,
|
||||
val viewThemeUtils: ViewThemeUtils,
|
||||
private val groupfolderListInterface: GroupfolderListInterface
|
||||
) :
|
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
lateinit var list: List<Groupfolder>
|
||||
|
||||
private val folderIcon = viewThemeUtils.platform.tintPrimaryDrawable(
|
||||
context,
|
||||
AppCompatResources.getDrawable(
|
||||
context,
|
||||
R.drawable.folder_group
|
||||
)
|
||||
)
|
||||
|
||||
fun setData(result: Map<String, Groupfolder>) {
|
||||
list = result.values.sortedBy { it.mountPoint }
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
return OCFileListItemViewHolder(
|
||||
ListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return list.size
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
val groupfolder = list[position]
|
||||
val listHolder = holder as OCFileListItemViewHolder
|
||||
|
||||
val file = File("/" + groupfolder.mountPoint)
|
||||
|
||||
listHolder.apply {
|
||||
fileName.text = file.name
|
||||
fileSize.text = file.parentFile?.path ?: "/"
|
||||
fileSizeSeparator.visibility = View.GONE
|
||||
lastModification.visibility = View.GONE
|
||||
checkbox.visibility = View.GONE
|
||||
overflowMenu.visibility = View.GONE
|
||||
shared.visibility = View.GONE
|
||||
localFileIndicator.visibility = View.GONE
|
||||
favorite.visibility = View.GONE
|
||||
|
||||
thumbnail.setImageDrawable(folderIcon)
|
||||
|
||||
itemLayout.setOnClickListener { groupfolderListInterface.onFolderClick(groupfolder.mountPoint) }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2023 Tobias Kaminsky
|
||||
* Copyright (C) 2023 Nextcloud GmbH
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.owncloud.android.ui.asynctasks
|
||||
|
||||
import android.os.AsyncTask
|
||||
import com.nextcloud.android.lib.resources.groupfolders.GetGroupfoldersRemoteOperation
|
||||
import com.nextcloud.android.lib.resources.groupfolders.Groupfolder
|
||||
import com.nextcloud.client.account.User
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager
|
||||
import com.owncloud.android.ui.fragment.GroupfolderListFragment
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class GroupfoldersSearchTask(
|
||||
fragment: GroupfolderListFragment,
|
||||
private val user: User,
|
||||
storageManager: FileDataStorageManager
|
||||
) : AsyncTask<Void, Void, Map<String, Groupfolder>>() {
|
||||
private val fragmentWeakReference: WeakReference<GroupfolderListFragment?>
|
||||
private val storageManager: FileDataStorageManager
|
||||
|
||||
init {
|
||||
fragmentWeakReference = WeakReference(fragment)
|
||||
this.storageManager = storageManager
|
||||
}
|
||||
|
||||
override fun doInBackground(vararg voids: Void): Map<String, Groupfolder> {
|
||||
if (fragmentWeakReference.get() == null) {
|
||||
return HashMap()
|
||||
}
|
||||
val fragment = fragmentWeakReference.get()
|
||||
return if (isCancelled) {
|
||||
HashMap()
|
||||
} else {
|
||||
val searchRemoteOperation = GetGroupfoldersRemoteOperation()
|
||||
if (fragment?.context != null) {
|
||||
val result = searchRemoteOperation.executeNextcloudClient(
|
||||
user,
|
||||
fragment.requireContext()
|
||||
)
|
||||
if (result.isSuccess) {
|
||||
result.resultData
|
||||
} else {
|
||||
HashMap()
|
||||
}
|
||||
} else {
|
||||
HashMap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPostExecute(result: Map<String, Groupfolder>) {
|
||||
fragmentWeakReference.get()?.setData(result)
|
||||
}
|
||||
}
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
package com.owncloud.android.ui.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.AsyncTask;
|
||||
|
@ -398,4 +397,4 @@ public class GalleryFragment extends OCFileListFragment implements GalleryFragme
|
|||
protected void setGridViewColumns(float scaleFactor) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2023 Tobias Kaminsky
|
||||
* Copyright (C) 2023 Nextcloud GmbH
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.owncloud.android.ui.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.content.Intent.ACTION_VIEW
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.nextcloud.android.lib.resources.groupfolders.Groupfolder
|
||||
import com.nextcloud.client.di.Injectable
|
||||
import com.nextcloud.client.logger.Logger
|
||||
import com.owncloud.android.MainApp
|
||||
import com.owncloud.android.R
|
||||
import com.owncloud.android.datamodel.OCFile
|
||||
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation
|
||||
import com.owncloud.android.lib.resources.files.model.RemoteFile
|
||||
import com.owncloud.android.ui.activity.FileDisplayActivity
|
||||
import com.owncloud.android.ui.adapter.GroupfolderListAdapter
|
||||
import com.owncloud.android.ui.asynctasks.GroupfoldersSearchTask
|
||||
import com.owncloud.android.ui.interfaces.GroupfolderListInterface
|
||||
import com.owncloud.android.utils.DisplayUtils
|
||||
import com.owncloud.android.utils.FileStorageUtils
|
||||
import com.owncloud.android.utils.theme.ViewThemeUtils
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* A Fragment that lists groupfolders
|
||||
*/
|
||||
class GroupfolderListFragment : OCFileListFragment(), Injectable, GroupfolderListInterface {
|
||||
|
||||
lateinit var adapter: GroupfolderListAdapter
|
||||
|
||||
@Inject
|
||||
lateinit var logger: Logger
|
||||
|
||||
@Inject
|
||||
lateinit var viewThemeUtils: ViewThemeUtils
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
searchFragment = true
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
||||
currentSearchType = SearchType.GROUPFOLDER
|
||||
menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_GRID_AND_SORT
|
||||
requireActivity().invalidateOptionsMenu()
|
||||
|
||||
search()
|
||||
}
|
||||
|
||||
public override fun setAdapter(args: Bundle?) {
|
||||
adapter = GroupfolderListAdapter(requireContext(), viewThemeUtils, this)
|
||||
setRecyclerViewAdapter(adapter)
|
||||
|
||||
val layoutManager = GridLayoutManager(context, 1)
|
||||
recyclerView.layoutManager = layoutManager
|
||||
}
|
||||
|
||||
private fun search() {
|
||||
GroupfoldersSearchTask(
|
||||
this,
|
||||
accountManager.user,
|
||||
mContainerActivity.storageManager
|
||||
).execute()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
Handler().post {
|
||||
if (activity is FileDisplayActivity) {
|
||||
val fileDisplayActivity = activity as FileDisplayActivity
|
||||
fileDisplayActivity.updateActionBarTitleAndHomeButtonByString(
|
||||
getString(R.string.drawer_item_groupfolders)
|
||||
)
|
||||
fileDisplayActivity.setMainFabVisible(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
fun setData(result: Map<String, Groupfolder>) {
|
||||
adapter.setData(result)
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private suspend fun fetchFileData(partialFile: OCFile): OCFile? {
|
||||
return withContext(Dispatchers.IO) {
|
||||
val user = accountManager.user
|
||||
val fetchResult = ReadFileRemoteOperation(partialFile.remotePath).execute(user, context)
|
||||
if (!fetchResult.isSuccess) {
|
||||
logger.e(SHARED_TAG, "Error fetching file")
|
||||
if (fetchResult.isException) {
|
||||
logger.e(SHARED_TAG, "exception: ", fetchResult.exception)
|
||||
}
|
||||
null
|
||||
} else {
|
||||
val remoteFile = fetchResult.data[0] as RemoteFile
|
||||
val file = FileStorageUtils.fillOCFile(remoteFile)
|
||||
FileStorageUtils.searchForLocalFileInDefaultPath(file, user.accountName)
|
||||
val savedFile = mContainerActivity.storageManager.saveFileWithParent(file, context)
|
||||
savedFile.apply {
|
||||
isSharedViaLink = partialFile.isSharedViaLink
|
||||
isSharedWithSharee = partialFile.isSharedWithSharee
|
||||
sharees = partialFile.sharees
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchFileAndRun(partialFile: OCFile, block: (file: OCFile) -> Unit) {
|
||||
lifecycleScope.launch {
|
||||
isLoading = true
|
||||
val file = fetchFileData(partialFile)
|
||||
isLoading = false
|
||||
if (file != null) {
|
||||
block(file)
|
||||
} else {
|
||||
DisplayUtils.showSnackMessage(requireActivity(), R.string.error_retrieving_file)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val SHARED_TAG = GroupfolderListFragment::class.java.simpleName
|
||||
}
|
||||
|
||||
override fun onFolderClick(path: String) {
|
||||
MainApp.showOnlyFilesOnDevice(false)
|
||||
Intent(
|
||||
context,
|
||||
FileDisplayActivity::class.java
|
||||
).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
action = ACTION_VIEW
|
||||
putExtra(FileDisplayActivity.KEY_FILE_PATH, path)
|
||||
startActivity(this)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -61,7 +61,13 @@ class OCFileListSearchAsyncTask(
|
|||
}
|
||||
|
||||
fragment.setTitle()
|
||||
val remoteOperationResult = remoteOperation.execute(currentUser, fragment.context)
|
||||
lateinit var remoteOperationResult: RemoteOperationResult<List<Any>>
|
||||
try {
|
||||
remoteOperationResult = remoteOperation.execute(currentUser, fragment.context)
|
||||
} catch (e: UnsupportedOperationException) {
|
||||
remoteOperationResult = remoteOperation.executeNextcloudClient(currentUser, fragment.requireContext())
|
||||
}
|
||||
|
||||
if (remoteOperationResult.hasSuccessfulResult() && !isCancelled && fragment.searchFragment) {
|
||||
fragment.searchEvent = event
|
||||
if (remoteOperationResult.resultData.isNullOrEmpty()) {
|
||||
|
|
|
@ -13,5 +13,6 @@ enum class SearchType : Parcelable {
|
|||
RECENTLY_MODIFIED_SEARCH,
|
||||
|
||||
// not a real filter, but nevertheless
|
||||
SHARED_FILTER
|
||||
SHARED_FILTER,
|
||||
GROUPFOLDER
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2023 Tobias Kaminsky
|
||||
* Copyright (C) 2023 Nextcloud GmbH
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.owncloud.android.ui.interfaces
|
||||
|
||||
interface GroupfolderListInterface {
|
||||
fun onFolderClick(path: String)
|
||||
}
|
|
@ -64,6 +64,12 @@ public final class DrawerMenuUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static void filterGroupfoldersMenuItem(Menu menu, @Nullable OCCapability capability) {
|
||||
if (capability != null && capability.getGroupfolders().isFalse()) {
|
||||
filterMenuItems(menu, R.id.nav_groupfolders);
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeMenuItem(Menu menu, int id, boolean remove) {
|
||||
if (remove) {
|
||||
menu.removeItem(id);
|
||||
|
|
|
@ -107,6 +107,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:paddingTop="@dimen/standard_quarter_padding"
|
||||
android:visibility="gone"
|
||||
app:chipSpacingVertical="@dimen/standard_quarter_padding">
|
||||
|
||||
<com.google.android.material.chip.Chip
|
||||
|
|
|
@ -48,6 +48,11 @@
|
|||
android:orderInCategory="0"
|
||||
android:icon="@drawable/nav_shared"
|
||||
android:title="@string/drawer_item_shared" />
|
||||
<item
|
||||
android:id="@+id/nav_groupfolders"
|
||||
android:orderInCategory="0"
|
||||
android:icon="@drawable/ic_group"
|
||||
android:title="@string/drawer_item_groupfolders" />
|
||||
<item
|
||||
android:id="@+id/nav_on_device"
|
||||
android:icon="@drawable/nav_on_device"
|
||||
|
|
|
@ -400,6 +400,7 @@
|
|||
<string name="prefs_category_dev">Programado</string>
|
||||
<string name="prefs_category_general">Ĝeneralo</string>
|
||||
<string name="prefs_category_more">Pli</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Ĉiutaga savkopio de via kontaktaro</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E (tutvoja, angle „end-to-end“) memoriga helpilo</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Por montri memorigan helpilon, ŝalti uzon de akreditiloj sur via aparato.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Montri sciigoj pri aŭdvidaj dosierujoj</string>
|
||||
|
|
|
@ -483,6 +483,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Backup diario de tus contactos</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemotécnico</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Para mostrar mnemónico por favor habilite las credenciales del dispositivo.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Mostrar notificaciones de escaneo de medios</string>
|
||||
|
|
|
@ -339,6 +339,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -361,6 +361,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -339,6 +339,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -354,6 +354,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -354,6 +354,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -339,6 +339,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Excención de responsabilidad </string>
|
||||
|
|
|
@ -437,6 +437,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -339,6 +339,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -298,6 +298,7 @@
|
|||
<string name="prefs_category_dev">Desarrollo</string>
|
||||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Respaldo diario de tus contactos</string>
|
||||
<string name="prefs_gpl_v2">GNU Licencia Pública General, versión 2</string>
|
||||
<string name="prefs_help">Ayuda</string>
|
||||
<string name="prefs_imprint">Exención de responsabilidad </string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Más</string>
|
||||
<string name="prefs_daily_backup_summary">Copia de seguridad diaria de tu calendario y contactos</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Copia de seguridad diaria de tus contactos</string>
|
||||
<string name="prefs_davx5_setup_error">Error inesperado al configurar DAVx5 (anteriormente conocido como DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">¡Se ha configurado el cifrado de extremo a extremo!</string>
|
||||
<string name="prefs_e2e_mnemonic">Regla mnemotécnica del cifrado E2E</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Orokorra</string>
|
||||
<string name="prefs_category_more">Gehiago</string>
|
||||
<string name="prefs_daily_backup_summary">Eguneroko babeskopia zure egutegi eta kontaktuentzat</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Zure kontaktuen eguneroko babeskopia</string>
|
||||
<string name="prefs_davx5_setup_error">Ustekabeko errorea DAVx5 konfiguratzean (lehen DAVdroid izenez ezagutzen zena)</string>
|
||||
<string name="prefs_e2e_active">Muturretik muturrerako enkriptatzea konfiguratuta dago!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemoteknikoa</string>
|
||||
|
|
|
@ -518,6 +518,7 @@
|
|||
<string name="prefs_category_dev">توسعه</string>
|
||||
<string name="prefs_category_general">عمومی</string>
|
||||
<string name="prefs_category_more">بیشتر</string>
|
||||
<string name="prefs_daily_contact_backup_summary">پشتیبان گیری روزانه از مخاطبین شما</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E حفظی</string>
|
||||
<string name="prefs_e2e_no_device_credentials">برای نمایش mnemonic ، مجوز دستگاه را فعال کنید.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">نمایش اعلانهای مربوط به اسکن رسانه</string>
|
||||
|
|
|
@ -556,6 +556,7 @@
|
|||
<string name="prefs_category_general">Yleiset</string>
|
||||
<string name="prefs_category_more">Enemmän</string>
|
||||
<string name="prefs_daily_backup_summary">Päivittäinen kalenterin & yhteystietojen varmuuskopio</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Päivittäinen varmuuskopio yhteystiedoistasi</string>
|
||||
<string name="prefs_davx5_setup_error">Odottamaton virhe määritettäessä DAVx5:tä (aiemmin DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Päästä päähän -salaus on määritetty!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E-avainkoodi</string>
|
||||
|
|
|
@ -488,6 +488,7 @@
|
|||
<string name="prefs_category_dev">Leasachadh</string>
|
||||
<string name="prefs_category_general">Coitcheann</string>
|
||||
<string name="prefs_category_more">Barrachd</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Lethbhreac-glèidhidh làitheil dhan luchd-aithne agad</string>
|
||||
<string name="prefs_e2e_mnemonic">Gleus cuimhneachaidh E2E</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Cuir an comas teisteas an uidheim airson an gleus cuimhneachaidh a shealltainn.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Seall brathan air sganadh mheadhanan</string>
|
||||
|
|
|
@ -539,6 +539,7 @@
|
|||
<string name="prefs_category_general">Općenito</string>
|
||||
<string name="prefs_category_more">Više</string>
|
||||
<string name="prefs_daily_backup_summary">Svakodnevno sigurnosno kopiranje vašeg kalendara i kontakata</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Svakodnevno sigurnosno kopiranje vaših kontakata</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonička oznaka</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Omogućite vjerodajnice uređaja kako biste prikazali mnemoničku oznaku.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Prikaži obavijesti o skeniranju medija</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Általános</string>
|
||||
<string name="prefs_category_more">Több</string>
|
||||
<string name="prefs_daily_backup_summary">Napi biztonsági mentés a naptáráról és a névjegyeiről</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Névjegyek napi biztonsági mentése</string>
|
||||
<string name="prefs_davx5_setup_error">Váratlan hiba a DAVx5 (előző nevén DAVdroid) beállítása során</string>
|
||||
<string name="prefs_e2e_active">A végpontok közti titkosítás beállítva!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonikus kód</string>
|
||||
|
|
|
@ -445,6 +445,7 @@ Otomatis unggah hanya bekerja dengan baik apabila Anda mengeluarkan aplikasi ini
|
|||
<string name="prefs_category_general">Umum</string>
|
||||
<string name="prefs_category_more">Lainnya</string>
|
||||
<string name="prefs_daily_backup_summary">Cadangan harian kalender & kontak Anda</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Cadangkan kontak harian</string>
|
||||
<string name="prefs_davx5_setup_error">Terjadi kesalahan saat menyiapkan DAVx⁵ (sebelumnya DAVdroid)</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_gpl_v2">GNU General Public License, versi 2</string>
|
||||
|
|
|
@ -491,6 +491,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">Almennt</string>
|
||||
<string name="prefs_category_more">Meira</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Daglegt öryggisafrit af tengiliðum</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E minnistækni</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Til að birta minnishjálp skaltu virkja auðkenningu tækisins.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Birta tilkynningar vegna skönnunar eftir margmiðlunarefni</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Generale</string>
|
||||
<string name="prefs_category_more">Altro</string>
|
||||
<string name="prefs_daily_backup_summary">Backup quotidiano del tuo calendario e dei contatti</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Backup giornaliero dei tuoi contatti</string>
|
||||
<string name="prefs_davx5_setup_error">Errore inaspettato nella configurazione di Davx5 (precedentemente DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">La cifratura end-to-end è impostata!</string>
|
||||
<string name="prefs_e2e_mnemonic">Codice mnemonico E2E</string>
|
||||
|
|
|
@ -486,6 +486,7 @@
|
|||
<string name="prefs_category_dev">פיתוח</string>
|
||||
<string name="prefs_category_general">כללי</string>
|
||||
<string name="prefs_category_more">יותר</string>
|
||||
<string name="prefs_daily_contact_backup_summary">גיבוי יומי של אנשי הקשר שלך</string>
|
||||
<string name="prefs_e2e_mnemonic">תיבת זיכרון להצפנה מקצה לקצה </string>
|
||||
<string name="prefs_e2e_no_device_credentials">על מנת להציג שינון, הפעל את אישורי המכשיר.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">הצגת התראות על סריקת מדיה</string>
|
||||
|
|
|
@ -536,6 +536,7 @@
|
|||
<string name="prefs_category_general">一般</string>
|
||||
<string name="prefs_category_more">もっと見る</string>
|
||||
<string name="prefs_daily_backup_summary">カレンダーと連絡先を毎日バックアップ</string>
|
||||
<string name="prefs_daily_contact_backup_summary">連絡先のデイリーバックアップ</string>
|
||||
<string name="prefs_e2e_mnemonic">E2Eニーモニック</string>
|
||||
<string name="prefs_e2e_no_device_credentials">ニーモニックを表示するには、デバイスクレデンシャルを有効にしてください。</string>
|
||||
<string name="prefs_enable_media_scan_notifications">メディアのスキャン結果通知を表示する</string>
|
||||
|
|
|
@ -313,6 +313,7 @@
|
|||
<string name="prefs_category_dev">დევ.</string>
|
||||
<string name="prefs_category_general">ზოგადი</string>
|
||||
<string name="prefs_category_more">მეტი</string>
|
||||
<string name="prefs_daily_contact_backup_summary">კონტაქტების ყოველდღიური ბექაფი</string>
|
||||
<string name="prefs_gpl_v2">GNU ზოგადი ღია ლიცენზია, ვერსია 2</string>
|
||||
<string name="prefs_help">დახმარება</string>
|
||||
<string name="prefs_imprint">ბეჭედი</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">일반</string>
|
||||
<string name="prefs_category_more">더 보기</string>
|
||||
<string name="prefs_daily_backup_summary">달력 & 의 연락처 매일 백업</string>
|
||||
<string name="prefs_daily_contact_backup_summary">연락처 일간 백업</string>
|
||||
<string name="prefs_davx5_setup_error">DAVx5를 설정하는 동안 발생한 예기치 못한 에러</string>
|
||||
<string name="prefs_e2e_active">종단간 암호화가 설정됩니다!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E 연상 기호</string>
|
||||
|
|
|
@ -494,6 +494,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">ທົ່ວໄປ</string>
|
||||
<string name="prefs_category_more">ເພີ່ມເຕີມ</string>
|
||||
<string name="prefs_daily_contact_backup_summary">ສໍາຮອງປະຈໍາວັນຂອງການຕິດຕໍ່</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_e2e_no_device_credentials">ເພື່ອສະແດງ mnemonic ກະລຸນາເປິດຂໍ້ມູນປະຈຳຕົວຂອງອຸປະກອນ.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">ສະແດງການແຈ້ງເຕືຶອນສື່ ມວນ ຊົນ</string>
|
||||
|
|
|
@ -524,6 +524,7 @@
|
|||
<string name="prefs_category_general">Bendra</string>
|
||||
<string name="prefs_category_more">Daugiau</string>
|
||||
<string name="prefs_daily_backup_summary">Kasdienė jūsų adresatų ir kalendoriaus atsarginė kopija</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Kasdieninė Jūsų kontaktų atsarginė kopija</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemoninis</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Norėdami parodyti \"mnemoniką\", įjunkite įrenginio prisijungimo duomenis.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Rodyti medijos nuskaitymo pranešimus</string>
|
||||
|
|
|
@ -345,6 +345,7 @@
|
|||
<string name="prefs_category_details">Detaļas</string>
|
||||
<string name="prefs_category_general">Vispārīgi</string>
|
||||
<string name="prefs_category_more">Vairāk</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Ikdieniška kontaktu dublēšana</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Rādīt mediju skenēšanas paziņojumus</string>
|
||||
<string name="prefs_enable_media_scan_notifications_summary">Paziņt par jaunas mediju mapes atrašanu</string>
|
||||
<string name="prefs_help">Palīdzība</string>
|
||||
|
|
|
@ -496,6 +496,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">Општо</string>
|
||||
<string name="prefs_category_more">Повеќе</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Дневна резервна копија на вашите контакти</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_e2e_no_device_credentials">To show mnemonic please enable device credentials.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Прикажи известување за медиуми</string>
|
||||
|
|
|
@ -558,6 +558,7 @@
|
|||
<string name="prefs_category_general">Generelt</string>
|
||||
<string name="prefs_category_more">Mer</string>
|
||||
<string name="prefs_daily_backup_summary">Daglig backup av din kaleder & kontakter</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Daglig sikkerhetskopiering av kontakter</string>
|
||||
<string name="prefs_davx5_setup_error">Uventet feil under oppsett av DAVx5 (tidligere kjent som DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Ende-til-ende -kryptering er satt opp!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic (hjelper for ende-til-ende kryptering til å huske legitimasjon)</string>
|
||||
|
|
|
@ -546,6 +546,7 @@
|
|||
<string name="prefs_category_general">Algemeen</string>
|
||||
<string name="prefs_category_more">Meer</string>
|
||||
<string name="prefs_daily_backup_summary">Dagelijkse back-up van je agenda &contactpersonen </string>
|
||||
<string name="prefs_daily_contact_backup_summary">Dagelijkse back-up van je contactpersonen</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Om de mnemonic te tonen moet je apparaatinloggegevens inschakelen.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Tonen mediascan meldingen</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Ogólne</string>
|
||||
<string name="prefs_category_more">Więcej</string>
|
||||
<string name="prefs_daily_backup_summary">Codzienna kopia zapasowa kontaktów i kalendarza</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Codzienne tworzenie kopii zapasowej kontaktów</string>
|
||||
<string name="prefs_davx5_setup_error">Nieoczekiwany błąd podczas konfigurowania DAVx5 (wcześniej znanego jako DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Szyfrowanie end-to-end jest skonfigurowane!</string>
|
||||
<string name="prefs_e2e_mnemonic">Mnemonik E2E</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Geral</string>
|
||||
<string name="prefs_category_more">Mais</string>
|
||||
<string name="prefs_daily_backup_summary">Backup diário de seu calendário & contatos</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Backup diário de seus contatos</string>
|
||||
<string name="prefs_davx5_setup_error">Erro inesperado ao configurar o DAVx5 (anteriormente conhecido como DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">A criptografia de ponta a ponta está configurada!</string>
|
||||
<string name="prefs_e2e_mnemonic">Mnemônico E2E</string>
|
||||
|
|
|
@ -519,6 +519,7 @@
|
|||
<string name="prefs_category_dev">Desenvolvimento</string>
|
||||
<string name="prefs_category_general">Geral</string>
|
||||
<string name="prefs_category_more">Mais</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Cópia de segurança diária dos seus contactos</string>
|
||||
<string name="prefs_e2e_mnemonic">Mnemónica E2</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Para mostrar a mnemónica, por favor, ative as credenciais do dispositivo.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Mostrar notificações de análise de multimédia</string>
|
||||
|
|
|
@ -552,6 +552,7 @@
|
|||
<string name="prefs_category_general">General</string>
|
||||
<string name="prefs_category_more">Mai mult</string>
|
||||
<string name="prefs_daily_backup_summary">Salvarea zilnică a calendarului &a contactelor</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Salvarea zilnică a contactelor dvs.</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Pentru a arăta fraza de memorare (mnemonic) vă rugăm activați acreditările dispozitivului.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Afișează notificări despre scanarea media</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Основные</string>
|
||||
<string name="prefs_category_more">Больше</string>
|
||||
<string name="prefs_daily_backup_summary">Ежедневное резервное копирование календаря</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Ежедневное сохранение контактов</string>
|
||||
<string name="prefs_davx5_setup_error">Неожиданная ошибка при настройке DAVx5 (ранее известного как DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Сквозное шифрование настроено.</string>
|
||||
<string name="prefs_e2e_mnemonic">Мнемофраза E2E</string>
|
||||
|
|
|
@ -501,6 +501,7 @@
|
|||
<string name="prefs_category_dev">Dispositivu</string>
|
||||
<string name="prefs_category_general">Generale</string>
|
||||
<string name="prefs_category_more">Àteru</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Còpia de seguresa de is cuntatos ònnia die</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonic</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Pro mustrare sa menmònica ativa is credentziales de su dispositivu.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Mustra is notìficas de iscansione de is media</string>
|
||||
|
|
|
@ -552,6 +552,7 @@
|
|||
<string name="prefs_category_general">Všeobecné</string>
|
||||
<string name="prefs_category_more">Viac</string>
|
||||
<string name="prefs_daily_backup_summary">Denná záloha vašeho kalendára & kontaktov</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Denná záloha vašich kontaktov</string>
|
||||
<string name="prefs_e2e_active">End-to-end šifrovanie je nastavené!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemotechnické</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Pre zobrazenie mnemotechnické, zapnite prihlasovacie údaje zariadenia.</string>
|
||||
|
|
|
@ -557,6 +557,7 @@
|
|||
<string name="prefs_category_general">Splošno</string>
|
||||
<string name="prefs_category_more">Več</string>
|
||||
<string name="prefs_daily_backup_summary">Dnevno varnostno kopiranje koledarja & stikov</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Dnevno usklajevanje stikov</string>
|
||||
<string name="prefs_davx5_setup_error">Nepričakovana napaka pri nastavljanju DAVx5 (prej poznano kot DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Celovito šifriranje E2E je nastavljeno!</string>
|
||||
<string name="prefs_e2e_mnemonic">Mnemonika E2E</string>
|
||||
|
|
|
@ -443,6 +443,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">Të përgjithshme</string>
|
||||
<string name="prefs_category_more">Më tepër</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Backup i përditshëm i kontakteve</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E i kujtesës</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Për të shfaqur kujtesën, ju lutemi aktivizoni kredencialet e pajisje.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Shfaqni njoftimet e skanimit të medias</string>
|
||||
|
|
|
@ -409,6 +409,7 @@
|
|||
<string name="prefs_category_dev">Razvojno</string>
|
||||
<string name="prefs_category_general">Opšte</string>
|
||||
<string name="prefs_category_more">Ostalo</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Dnevno arhiviranje vaših kontakata</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E mnemonik</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Za prikazivanje mnemonika, omogućite akreditive na uređaju.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Prikaži obaveštenja o skeniranju multimedije</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Опште</string>
|
||||
<string name="prefs_category_more">Остало</string>
|
||||
<string name="prefs_daily_backup_summary">Дневна резервна копија контаката вашег календара &</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Дневно архивирање ваших контаката</string>
|
||||
<string name="prefs_davx5_setup_error">Неочекивана грешка приликом подешавања DAVx5 (раније познатог под именом DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Подешено је шифрирање од почетка-до-краја!</string>
|
||||
<string name="prefs_e2e_mnemonic">Е2Е мнемоник</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Allmänt</string>
|
||||
<string name="prefs_category_more">Mer</string>
|
||||
<string name="prefs_daily_backup_summary">Daglig backup av din kalender & dina kontakter </string>
|
||||
<string name="prefs_daily_contact_backup_summary">Daglig backup av dina kontakter</string>
|
||||
<string name="prefs_davx5_setup_error">Oväntat fel vid installation av DAVx5 (tidigare känd som DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">End-to-end-kryptering är inställd!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E krypteringsord</string>
|
||||
|
|
|
@ -480,6 +480,7 @@
|
|||
<string name="prefs_category_dev">Dev</string>
|
||||
<string name="prefs_category_general">Esasy</string>
|
||||
<string name="prefs_category_more">Has köp</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Kontaktlaryňyzyň gündelik ätiýaçlyk nusgasy</string>
|
||||
<string name="prefs_e2e_mnemonic">e2e ýatlatma</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Mnemonik görkezmek üçin enjam şahsyýet maglumatlaryny açmagyňyzy haýyş edýäris.</string>
|
||||
<string name="prefs_enable_media_scan_notifications">Mediýa skaner habarnamalaryny görkeziň</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">Genel</string>
|
||||
<string name="prefs_category_more">Daha fazla</string>
|
||||
<string name="prefs_daily_backup_summary">Takvim ve kişilerinizin günlük yedeği</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Kişilerinizin günlük yedeği</string>
|
||||
<string name="prefs_davx5_setup_error">DAVx5 (eski adıyla DAVdroid) kurulurken beklenmeyen bir sorun çıktı</string>
|
||||
<string name="prefs_e2e_active">Uçtan uca şifreleme kuruldu!</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E belleği</string>
|
||||
|
|
|
@ -562,6 +562,7 @@
|
|||
<string name="prefs_category_general">Основне</string>
|
||||
<string name="prefs_category_more">Більше</string>
|
||||
<string name="prefs_daily_backup_summary">Щоденне створення резервних копій календарів та контактів</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Щоденне резервне копіювання ваших контактів</string>
|
||||
<string name="prefs_davx5_setup_error">Неочікувана помилка під час налаштування DAVx5 (раніше відомого як DAVdroid)</string>
|
||||
<string name="prefs_e2e_active">Наскрізне шифрування налаштовано!</string>
|
||||
<string name="prefs_e2e_mnemonic">Мнемоніка E2E</string>
|
||||
|
|
|
@ -544,6 +544,7 @@
|
|||
<string name="prefs_category_general">Tổng hợp</string>
|
||||
<string name="prefs_category_more">hơn</string>
|
||||
<string name="prefs_daily_backup_summary">Sao lưu hàng ngày lịch & danh bạ của bạn</string>
|
||||
<string name="prefs_daily_contact_backup_summary">Sao lưu hàng ngày danh bạn của bạn</string>
|
||||
<string name="prefs_e2e_active">Mã hoá đầu cuối đã được thiết lập</string>
|
||||
<string name="prefs_e2e_mnemonic">E2E ghi nhớ</string>
|
||||
<string name="prefs_e2e_no_device_credentials">Để hiển thị ghi nhớ, vui lòng bật thông tin đăng nhập thiết bị.</string>
|
||||
|
|
|
@ -553,6 +553,7 @@
|
|||
<string name="prefs_category_general">常规</string>
|
||||
<string name="prefs_category_more">更多</string>
|
||||
<string name="prefs_daily_backup_summary">每天备份日历 & 联系人</string>
|
||||
<string name="prefs_daily_contact_backup_summary">每日备份您的联系人</string>
|
||||
<string name="prefs_davx5_setup_error">设置 DAVx5(以前为 DAVdroid)时出现意外错误</string>
|
||||
<string name="prefs_e2e_active">端对端加密已设置完成</string>
|
||||
<string name="prefs_e2e_mnemonic">端到端加密</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">一般</string>
|
||||
<string name="prefs_category_more">更多</string>
|
||||
<string name="prefs_daily_backup_summary">您日曆及通訊錄的每日備份</string>
|
||||
<string name="prefs_daily_contact_backup_summary">每日通訊錄備份</string>
|
||||
<string name="prefs_davx5_setup_error">設置 DAVx5(以前稱為 DAVdroid)時出現意外錯誤</string>
|
||||
<string name="prefs_e2e_active">端到端加密設置完畢!</string>
|
||||
<string name="prefs_e2e_mnemonic">端到端助記碼</string>
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
<string name="prefs_category_general">一般</string>
|
||||
<string name="prefs_category_more">更多</string>
|
||||
<string name="prefs_daily_backup_summary">每日備份您的日曆與聯絡人</string>
|
||||
<string name="prefs_daily_contact_backup_summary">每日備份您的通訊錄</string>
|
||||
<string name="prefs_davx5_setup_error">設定 DAVx5(先前稱為 DAVdroid)時發生意外錯誤</string>
|
||||
<string name="prefs_e2e_active">端到端加密已設定完成!</string>
|
||||
<string name="prefs_e2e_mnemonic">端到端加密助記碼</string>
|
||||
|
|
|
@ -1078,5 +1078,6 @@
|
|||
<string name="document_scan_export_dialog_images">Multiple images</string>
|
||||
<string name="download_cannot_create_file">Cannot create local file</string>
|
||||
<string name="download_download_invalid_local_file_name">Invalid filename for local file</string>
|
||||
<string name="drawer_item_groupfolders">Groupfolders</string>
|
||||
<string name="tags_more">+%1$d</string>
|
||||
</resources>
|
||||
|
|