Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2022-01-17 13:31:23 +0300
committerStefan Niedermann <info@niedermann.it>2022-01-17 13:31:23 +0300
commitf0ee4b42e0a224e34f7df7d593585125518a98b1 (patch)
tree3864468ccdb887ee0e6c9e66eaa7cc0e084f4e87 /app/src
parent1799ae95a02680b9fbf8bb65c5233c2795a71c14 (diff)
parentecc5d387b43c0ce3a199c097f38493a5d4c5d486 (diff)
Merge branch 'master' into 1169-network-errors
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java23
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java51
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentContributingTab.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java16
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java17
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java63
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java19
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java1
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/tips/TipsAdapter.java8
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/movecard/MoveCardDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/pickstack/PickStackFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java30
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/takephoto/TakePhotoActivity.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/filter/FilterWidgetConfigurationActivity.java6
-rw-r--r--app/src/main/res/layout/item_attachment.xml24
-rw-r--r--app/src/main/res/values-ar/strings.xml5
-rw-r--r--app/src/main/res/values-eu/strings.xml5
-rw-r--r--app/src/main/res/values-ja-rJP/strings.xml7
-rw-r--r--app/src/main/res/values-pl/strings.xml2
-rw-r--r--app/src/main/res/values-pt-rBR/strings.xml5
-rw-r--r--app/src/main/res/values-sv/strings.xml20
-rw-r--r--app/src/main/res/values-vi/strings.xml5
-rw-r--r--app/src/test/resources/robolectric.properties2
56 files changed, 499 insertions, 89 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
index 8304b5733..75c75f628 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
@@ -1,10 +1,10 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters;
+import static it.niedermann.nextcloud.deck.util.MimeTypeUtil.TEXT_PLAIN;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
-import android.net.Network;
-import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.Uri;
import android.webkit.MimeTypeMap;
@@ -49,8 +49,6 @@ import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
-import static it.niedermann.nextcloud.deck.util.MimeTypeUtil.TEXT_PLAIN;
-
public class ServerAdapter {
private final String prefKeyWifiOnly;
@@ -80,20 +78,11 @@ public class ServerAdapter {
ConnectivityManager cm = (ConnectivityManager) applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
if (sharedPreferences.getBoolean(prefKeyWifiOnly, false)) {
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
- Network network = cm.getActiveNetwork();
- NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
- if (capabilities == null) {
- return false;
- }
- return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
- } else {
- NetworkInfo networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- if (networkInfo == null) {
- return false;
- }
- return networkInfo.isConnected();
+ NetworkInfo networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+ if (networkInfo == null) {
+ return false;
}
+ return networkInfo.isConnected();
} else {
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
index 7910c55de..307c717f4 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
@@ -210,6 +210,12 @@ public class ImportAccountActivity extends AppCompatActivity {
}
@Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
AccountImporter.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
index 8c1f30f70..915b5632c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
@@ -111,6 +111,7 @@ import it.niedermann.nextcloud.deck.ui.board.EditBoardDialogFragment;
import it.niedermann.nextcloud.deck.ui.board.EditBoardListener;
import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
+import it.niedermann.nextcloud.deck.ui.card.CreateCardListener;
import it.niedermann.nextcloud.deck.ui.card.NewCardDialog;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
@@ -129,7 +130,7 @@ import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsActivity;
import it.niedermann.nextcloud.deck.util.CustomAppGlideModule;
import it.niedermann.nextcloud.deck.util.DrawerMenuUtil;
-public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, OnNavigationItemSelectedListener {
+public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, CreateCardListener, OnNavigationItemSelectedListener {
protected ActivityMainBinding binding;
protected NavHeaderMainBinding headerBinding;
@@ -454,6 +455,8 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
@Override
protected void onDestroy() {
super.onDestroy();
+ this.binding = null;
+ this.headerBinding = null;
if (tabLayoutHelper != null) {
tabLayoutHelper.release();
}
@@ -613,14 +616,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
binding.toolbar.setTitle(board.getTitle());
binding.filterText.setHint(getString(R.string.search_in, board.getTitle()));
- if (mainViewModel.currentBoardHasEditPermission()) {
- binding.fab.show();
- binding.listMenuButton.setVisibility(View.VISIBLE);
- } else {
- binding.fab.hide();
- binding.listMenuButton.setVisibility(View.GONE);
- binding.emptyContentViewStacks.hideDescription();
- }
+ showEditButtonsIfPermissionsGranted();
binding.emptyContentViewBoards.setVisibility(View.GONE);
binding.swipeRefreshLayout.setVisibility(View.VISIBLE);
@@ -792,6 +788,17 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
return super.onOptionsItemSelected(item);
}
+ protected void showEditButtonsIfPermissionsGranted() {
+ if (mainViewModel.currentBoardHasEditPermission()) {
+ binding.fab.show();
+ binding.listMenuButton.setVisibility(View.VISIBLE);
+ } else {
+ binding.fab.hide();
+ binding.listMenuButton.setVisibility(View.GONE);
+ binding.emptyContentViewStacks.hideDescription();
+ }
+ }
+
protected void showFabIfEditPermissionGranted() {
if (mainViewModel.currentBoardHasEditPermission()) {
binding.fab.show();
@@ -1008,6 +1015,32 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
}
}
+ /**
+ * Find a StackFragment by it's ID, may return null.
+ * @param stackId ID of the stack to find
+ * @return Instance of StackFragment
+ */
+ @Nullable
+ public StackFragment findStackFragmentById(long stackId) {
+ return (StackFragment) getSupportFragmentManager().findFragmentByTag("f" + stackId);
+ }
+
+ /**
+ * This method is called when a new Card is created
+ * @param createdCard The new Card's data
+ */
+ @Override
+ public void onCardCreated(FullCard createdCard) {
+ final var card = createdCard.getCard();
+ DeckLog.log("Card Created! Title:" + card.getTitle() + " in stack ID: " + card.getStackId());
+
+ // Scroll the given StackFragment to the bottom, so the new Card is in view.
+ final var fragment = findStackFragmentById(card.getStackId());
+ if (fragment != null) {
+ fragment.scrollToBottom();
+ }
+ }
+
@Override
public void onStackDeleted(long stackLocalId) {
int nextStackPosition;
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java
index a024f1290..81f91aa82 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java
@@ -118,6 +118,12 @@ public abstract class PickStackActivity extends AppCompatActivity implements Bra
}
@Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onStackPicked(@NonNull Account account, @Nullable Board board, @Nullable Stack stack) {
viewModel.setSelected(account, board, stack);
applyBrand(board == null
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
index 540575d1d..f76187a04 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
@@ -74,6 +74,12 @@ public class PushNotificationActivity extends AppCompatActivity {
}));
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
private void openCardOnSubmit(@NonNull Account account, long boardLocalId, long cardLocalId) {
DeckLog.info("Starting", EditActivity.class.getSimpleName(), "with [" + account + ", " + boardLocalId + ", " + cardLocalId + "]");
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java
index c37d0bc46..552e9b5fd 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java
@@ -1,5 +1,7 @@
package it.niedermann.nextcloud.deck.ui.about;
+import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToPrimaryTabLayout;
+
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -19,8 +21,6 @@ import it.niedermann.nextcloud.deck.databinding.ActivityAboutBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
-import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToPrimaryTabLayout;
-
public class AboutActivity extends AppCompatActivity {
private static final String BUNDLE_KEY_ACCOUNT = "account";
@@ -46,6 +46,12 @@ public class AboutActivity extends AppCompatActivity {
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(tabTitles[position])).attach();
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
private static class TabsPagerAdapter extends FragmentStateAdapter {
@Nullable
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentContributingTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentContributingTab.java
index 8b0c18a7a..17965e1aa 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentContributingTab.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentContributingTab.java
@@ -13,12 +13,20 @@ import it.niedermann.nextcloud.deck.databinding.FragmentAboutContributionTabBind
public class AboutFragmentContributingTab extends Fragment {
+ private FragmentAboutContributionTabBinding binding;
+
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- FragmentAboutContributionTabBinding binding = FragmentAboutContributionTabBinding.inflate(inflater, container, false);
+ binding = FragmentAboutContributionTabBinding.inflate(inflater, container, false);
binding.aboutSource.setText(getString(R.string.about_source, getString(R.string.url_source)));
binding.aboutIssues.setText(getString(R.string.about_issues, getString(R.string.url_issues)));
binding.aboutTranslate.setText(getString(R.string.about_translate, getString(R.string.url_translations)));
return binding.getRoot();
}
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
index 6dac2a2a1..0491b70a6 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
@@ -1,5 +1,10 @@
package it.niedermann.nextcloud.deck.ui.about;
+import static it.niedermann.nextcloud.deck.util.SpannableUtil.disabled;
+import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL;
+import static it.niedermann.nextcloud.deck.util.SpannableUtil.strong;
+import static it.niedermann.nextcloud.deck.util.SpannableUtil.url;
+
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
@@ -18,11 +23,6 @@ import it.niedermann.nextcloud.deck.databinding.FragmentAboutCreditsTabBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.util.DateUtil;
-import static it.niedermann.nextcloud.deck.util.SpannableUtil.disabled;
-import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL;
-import static it.niedermann.nextcloud.deck.util.SpannableUtil.strong;
-import static it.niedermann.nextcloud.deck.util.SpannableUtil.url;
-
public class AboutFragmentCreditsTab extends Fragment {
private static final String BUNDLE_KEY_ACCOUNT = "account";
@@ -63,6 +63,12 @@ public class AboutFragmentCreditsTab extends Fragment {
return binding.getRoot();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static Fragment newInstance() {
return new AboutFragmentCreditsTab();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java
index 5e7b7a1ec..39a30ec2e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java
@@ -1,5 +1,9 @@
package it.niedermann.nextcloud.deck.ui.about;
+import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme;
+import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas;
+import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL;
+
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
@@ -21,10 +25,6 @@ import it.niedermann.nextcloud.deck.DeckApplication;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.FragmentAboutLicenseTabBinding;
-import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme;
-import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas;
-import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL;
-
public class AboutFragmentLicenseTab extends Fragment {
private FragmentAboutLicenseTabBinding binding;
@@ -49,4 +49,10 @@ public class AboutFragmentLicenseTab extends Fragment {
binding.aboutAppLicenseButton.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(finalMainColor));
});
}
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java
index 3b30e4563..98690e0ca 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java
@@ -1,5 +1,7 @@
package it.niedermann.nextcloud.deck.ui.accountswitcher;
+import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
+
import android.app.Dialog;
import android.net.Uri;
import android.os.Bundle;
@@ -29,8 +31,6 @@ import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.ui.MainViewModel;
import it.niedermann.nextcloud.deck.ui.manageaccounts.ManageAccountsActivity;
-import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
-
public class AccountSwitcherDialog extends DialogFragment {
private AccountSwitcherAdapter adapter;
@@ -98,6 +98,12 @@ public class AccountSwitcherDialog extends DialogFragment {
.create();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance() {
return new AccountSwitcherDialog();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java
index 083606019..4a19b78e3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java
@@ -67,6 +67,12 @@ public class ArchivedBoardsActvitiy extends AppCompatActivity implements DeleteB
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
@NonNull
public static Intent createIntent(@NonNull Context context, @NonNull Account account) {
return new Intent(context, ArchivedBoardsActvitiy.class)
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java
index 86aa749e7..ae023a7d8 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java
@@ -69,7 +69,12 @@ public class ArchivedCardsActvitiy extends AppCompatActivity {
viewModel.getArchivedFullCardsForBoard(account.getId(), boardId).observe(this, (fullCards) -> adapter.setCardList(fullCards));
});
+ }
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
}
@NonNull
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java
index bfc21b787..f633cd534 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java
@@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.ui.attachments;
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -14,6 +15,7 @@ import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
+import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemAttachmentBinding;
import it.niedermann.nextcloud.deck.model.Account;
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
index b65b727aa..855ddf087 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
@@ -25,10 +25,11 @@ import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ActivityAttachmentsBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.ui.card.attachments.AttachmentImageZoomListener;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
import it.niedermann.nextcloud.deck.util.MimeTypeUtil;
-public class AttachmentsActivity extends AppCompatActivity {
+public class AttachmentsActivity extends AppCompatActivity implements AttachmentImageZoomListener {
private static final String BUNDLE_KEY_ACCOUNT = "account";
private static final String BUNDLE_KEY_CARD_ID = "cardId";
@@ -139,6 +140,7 @@ public class AttachmentsActivity extends AppCompatActivity {
protected void onDestroy() {
binding.viewPager.unregisterOnPageChangeCallback(onPageChangeCallback);
super.onDestroy();
+ this.binding = null;
}
@NonNull
@@ -149,4 +151,9 @@ public class AttachmentsActivity extends AppCompatActivity {
.putExtra(BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID, attachmentLocalId)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
+
+ @Override
+ public void onAbleToChangePage(boolean canChange) {
+ binding.viewPager.setUserInputEnabled(canChange);
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
index 79e29c08b..eff80cea6 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
@@ -1,5 +1,7 @@
package it.niedermann.nextcloud.deck.ui.board;
+import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout;
+
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
@@ -22,8 +24,6 @@ import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding;
import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.ui.MainViewModel;
-import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout;
-
public class EditBoardDialogFragment extends DialogFragment {
private DialogTextColorInputBinding binding;
@@ -90,6 +90,12 @@ public class EditBoardDialogFragment extends DialogFragment {
return super.onCreateView(inflater, container, savedInstanceState);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance(long boardId) {
final DialogFragment dialog = new EditBoardDialogFragment();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
index 241fa6121..17f8e6891 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
@@ -99,6 +99,12 @@ public class AccessControlDialogFragment extends DialogFragment implements Acces
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void updateAccessControl(AccessControl accessControl) {
viewModel.updateAccessControl(accessControl, new IResponseCallback<>() {
@Override
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java
index 73a2bdf3e..b372e04c7 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java
@@ -1,5 +1,7 @@
package it.niedermann.nextcloud.deck.ui.board.managelabels;
+import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout;
+
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
@@ -13,8 +15,6 @@ import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding;
import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment;
-import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout;
-
public class EditLabelDialogFragment extends BrandedDialogFragment {
private DialogTextColorInputBinding binding;
@@ -72,6 +72,12 @@ public class EditLabelDialogFragment extends BrandedDialogFragment {
.create();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance(@NonNull Label label) {
final DialogFragment dialog = new EditLabelDialogFragment();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java
index 8f778c749..34abebf8e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java
@@ -112,6 +112,12 @@ public class ManageLabelsDialogFragment extends BrandedDialogFragment implements
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void applyBrand(int mainColor) {
applyBrandToFAB(mainColor, binding.fab);
applyBrandToEditTextInputLayout(mainColor, binding.addLabelTitleWrapper);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java
new file mode 100644
index 000000000..522b7dc60
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java
@@ -0,0 +1,11 @@
+package it.niedermann.nextcloud.deck.ui.card;
+
+import it.niedermann.nextcloud.deck.model.full.FullCard;
+
+public interface CreateCardListener {
+ /**
+ * This method is called when a new Card is created
+ * @param createdCard The new Card's data
+ */
+ void onCardCreated(FullCard createdCard);
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
index b5317c9a8..292c6466d 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
@@ -98,6 +98,12 @@ public class EditActivity extends AppCompatActivity {
loadDataFromIntent();
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
private void loadDataFromIntent() {
final var args = getIntent().getExtras();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
index f8bfbe25b..6d6a5434d 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
@@ -36,6 +36,8 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
private PrepareCreateViewModel viewModel;
+ private CreateCardListener createCardListener;
+
private static final String ARG_ACCOUNT = "account";
private static final String ARG_BOARD_LOCAL_ID = "board_id";
private static final String ARG_STACK_LOCAL_ID = "stack_id";
@@ -53,6 +55,13 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
+
+ if (context instanceof CreateCardListener) {
+ this.createCardListener = (CreateCardListener) context;
+ } else {
+ throw new ClassCastException("Caller must implement " + CreateCardListener.class.getCanonicalName());
+ }
+
final var args = getArguments();
if (args == null) {
throw new IllegalArgumentException("Provide " + ARG_ACCOUNT + ", " + ARG_BOARD_LOCAL_ID + " and " + ARG_STACK_LOCAL_ID);
@@ -145,6 +154,12 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onClick(DialogInterface dialog, int which) {
final boolean openOnSuccess;
switch (which) {
@@ -166,6 +181,8 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
@Override
public void onResponse(FullCard createdCard) {
requireActivity().runOnUiThread(() -> {
+ createCardListener.onCardCreated(createdCard);
+
if (openOnSuccess) {
startActivity(EditActivity.createEditCardIntent(requireContext(), account, boardLocalId, createdCard.getLocalId()));
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
index d00ce05dd..c204b1658 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
@@ -48,4 +48,10 @@ public class CardActivityFragment extends Fragment {
}));
return binding.getRoot();
}
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java
index 8ee2c6318..6a15a4f6c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java
@@ -98,6 +98,12 @@ public class CardAssigneeDialog extends DialogFragment {
binding.title.setText(user.getDisplayname());
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance(@NonNull User user) {
final var fragment = new CardAssigneeDialog();
final var args = new Bundle();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java
new file mode 100644
index 000000000..38c6209f3
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java
@@ -0,0 +1,63 @@
+package it.niedermann.nextcloud.deck.ui.card.attachments;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.otaliastudios.zoom.ZoomImageView;
+
+public class AttachmentImageView extends ZoomImageView {
+ public AttachmentImageZoomListener zoomListener;
+ private GestureDetector gestureDetector;
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ gestureDetector = new GestureDetector(getContext(), new GestureListener());
+
+ if (getContext() instanceof AttachmentImageZoomListener) {
+ this.zoomListener = (AttachmentImageZoomListener) getContext();
+ } else {
+ throw new ClassCastException("Caller must implement " + AttachmentImageZoomListener.class.getCanonicalName());
+ }
+ }
+
+ public AttachmentImageView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @SuppressLint("ClickableViewAccessibility")
+ @Override
+ public boolean onTouchEvent(@NonNull MotionEvent ev) {
+ int pointerCount = ev.getPointerCount();
+
+ boolean canChange = pointerCount == 1 && getZoom() <= 1;
+ zoomListener.onAbleToChangePage(canChange);
+
+ gestureDetector.onTouchEvent(ev);
+
+ return super.onTouchEvent(ev);
+ }
+
+ private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+
+ @Override
+ public boolean onDown(MotionEvent e) {
+ return true;
+ }
+
+ @Override
+ public boolean onDoubleTap(MotionEvent e) {
+ float zoomLevel = 2;
+ zoomTo(getZoom() < zoomLevel ? zoomLevel : 1, true);
+
+ return true;
+ }
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java
new file mode 100644
index 000000000..3503d9763
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java
@@ -0,0 +1,5 @@
+package it.niedermann.nextcloud.deck.ui.card.attachments;
+
+public interface AttachmentImageZoomListener {
+ void onAbleToChangePage(boolean canChange);
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
index 8ddb0add9..182d7d9fa 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
@@ -4,8 +4,6 @@ import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.READ_CONTACTS;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.app.Activity.RESULT_OK;
-import static android.os.Build.VERSION.SDK_INT;
-import static android.os.Build.VERSION_CODES.M;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static androidx.core.content.PermissionChecker.PERMISSION_GRANTED;
@@ -252,7 +250,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet
private void showGalleryPicker() {
if (!(pickerAdapter instanceof GalleryAdapter)) {
- if (isPermissionRequestNeeded(READ_EXTERNAL_STORAGE) || isPermissionRequestNeeded(CAMERA)) {
+ if (checkSelfPermission(requireActivity(), READ_EXTERNAL_STORAGE) != PERMISSION_GRANTED || checkSelfPermission(requireActivity(), CAMERA) != PERMISSION_GRANTED) {
requestPermissions(new String[]{READ_EXTERNAL_STORAGE, CAMERA}, REQUEST_CODE_PICK_GALLERY_PERMISSION);
} else {
unbindPickerAdapter();
@@ -276,7 +274,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet
private void showContactPicker() {
if (!(pickerAdapter instanceof ContactAdapter)) {
- if (isPermissionRequestNeeded(READ_CONTACTS)) {
+ if (checkSelfPermission(requireActivity(), READ_CONTACTS) != PERMISSION_GRANTED) {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_CODE_PICK_CONTACT_PICKER_PERMISSION);
} else {
unbindPickerAdapter();
@@ -298,7 +296,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet
private void showFilePicker() {
if (!(pickerAdapter instanceof FileAdapter)) {
- if (isPermissionRequestNeeded(READ_EXTERNAL_STORAGE)) {
+ if (checkSelfPermission(requireActivity(), READ_EXTERNAL_STORAGE) != PERMISSION_GRANTED) {
requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, REQUEST_CODE_PICK_FILE_PERMISSION);
} else {
openNativeFilePicker();
@@ -336,16 +334,6 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet
.setType("*/*"), REQUEST_CODE_PICK_FILE);
}
- /**
- * Checks the current Android version and whether the permission has already been granted.
- *
- * @param permission see {@link android.Manifest.permission}
- * @return whether or not requesting permission is needed
- */
- private boolean isPermissionRequestNeeded(@NonNull String permission) {
- return SDK_INT >= M && checkSelfPermission(requireActivity(), permission) != PERMISSION_GRANTED;
- }
-
private void unbindPickerAdapter() {
if (pickerAdapter != null) {
pickerAdapter.onDestroy();
@@ -393,6 +381,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet
this.binding.pickerRecyclerView.setAdapter(null);
}
super.onDestroy();
+ this.binding = null;
}
private void uploadNewAttachmentFromUri(@NonNull Uri sourceUri, String mimeType) throws UploadAttachmentFailedException {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java
index bbe0dc8a1..52aa36128 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java
@@ -88,6 +88,7 @@ public class PreviewDialog extends DialogFragment {
this.imageBuilder$.removeObservers(requireActivity());
this.title$.removeObservers(requireActivity());
super.onDestroy();
+ this.binding = null;
}
public static DialogFragment newInstance() {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java
index 2f1ed7b09..b6f6df906 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java
@@ -69,6 +69,12 @@ public class CardCommentsEditDialogFragment extends BrandedDialogFragment {
return super.onCreateView(inflater, container, savedInstanceState);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance(@NonNull Long commentLocalId, String message) {
final var fragment = new CardCommentsEditDialogFragment();
final var args = new Bundle();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java
index 08ef5cdf1..7e90e513a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java
@@ -135,6 +135,12 @@ public class CardCommentsFragment extends Fragment implements CommentEditedListe
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onCommentEdited(Long id, String comment) {
commentsViewModel.updateComment(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), id, comment);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
index 11b565cb3..b21f2f7ad 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
@@ -116,6 +116,12 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener,
if (dpd != null) dpd.setOnDateSetListener(this);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
private void applyBrand(@ColorInt int boardColor) {
// TODO apply correct branding on the BrandedDatePicker
applyBrandToEditTextInputLayout(boardColor, binding.labelsWrapper);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
index 1a2803d7e..de9c3460c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
@@ -57,6 +57,12 @@ public class CardProjectResourcesDialog extends DialogFragment {
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
final var adapter = new CardProjectResourceAdapter(viewModel, resources, requireActivity());
binding.getRoot().setAdapter(adapter);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
index 31a20bb33..e6a62c4e0 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
@@ -18,12 +18,13 @@ import it.niedermann.nextcloud.exception.ExceptionUtil;
public class ExceptionActivity extends AppCompatActivity {
private static final String KEY_THROWABLE = "throwable";
+ private ActivityExceptionBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- final var binding = ActivityExceptionBinding.inflate(getLayoutInflater());
+ binding = ActivityExceptionBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
@@ -48,6 +49,12 @@ public class ExceptionActivity extends AppCompatActivity {
adapter.setThrowable(this, null, throwable);
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
@NonNull
public static Intent createIntent(@NonNull Context context, Throwable throwable) {
return new Intent(context, ExceptionActivity.class)
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/tips/TipsAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/tips/TipsAdapter.java
index 5588c12dc..589bc187a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/tips/TipsAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/tips/TipsAdapter.java
@@ -7,8 +7,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@@ -85,11 +83,7 @@ public class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
add(R.string.error_dialog_tip_offline);
add(R.string.error_dialog_tip_sync_only_on_wifi);
} else if (throwable instanceof NextcloudApiNotRespondingException) {
- if (VERSION.SDK_INT >= VERSION_CODES.M) {
- add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
- } else {
- add(R.string.error_dialog_tip_disable_battery_optimizations);
- }
+ add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
add(R.string.error_dialog_tip_files_force_stop);
add(R.string.error_dialog_tip_files_delete_storage);
} else if (throwable instanceof SocketTimeoutException || throwable instanceof ConnectException) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java
index 94101fff9..a06a1c8f4 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java
@@ -97,6 +97,12 @@ public class FilterDialogFragment extends BrandedDialogFragment {
.create();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance() {
return new FilterDialogFragment();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeFragment.java
index 5134498b2..ac23faf6c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeFragment.java
@@ -18,12 +18,12 @@ import it.niedermann.nextcloud.deck.model.enums.EDueType;
public class FilterDueTypeFragment extends Fragment implements SelectionListener<EDueType> {
private FilterViewModel filterViewModel;
+ private DialogFilterDuedateBinding binding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
- final var binding = DialogFilterDuedateBinding.inflate(requireActivity().getLayoutInflater());
+ binding = DialogFilterDuedateBinding.inflate(requireActivity().getLayoutInflater());
filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class);
@@ -34,6 +34,12 @@ public class FilterDueTypeFragment extends Fragment implements SelectionListener
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onItemSelected(EDueType item) {
filterViewModel.setFilterInformationDraftDueType(item);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
index 708e2e541..59768de39 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
@@ -22,12 +22,12 @@ import it.niedermann.nextcloud.deck.ui.MainViewModel;
public class FilterUserFragment extends Fragment implements SelectionListener<User> {
private FilterViewModel filterViewModel;
+ private DialogFilterAssigneesBinding binding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
- final var binding = DialogFilterAssigneesBinding.inflate(requireActivity().getLayoutInflater());
+ binding = DialogFilterAssigneesBinding.inflate(requireActivity().getLayoutInflater());
final var mainViewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class);
@@ -47,6 +47,12 @@ public class FilterUserFragment extends Fragment implements SelectionListener<Us
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onItemSelected(@Nullable User item) {
if (item == null) {
filterViewModel.setNotAssignedUser(true);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java
index aec258d59..a843551c1 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java
@@ -1,5 +1,8 @@
package it.niedermann.nextcloud.deck.ui.manageaccounts;
+import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentAccountId;
+import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
+
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -13,9 +16,6 @@ import androidx.lifecycle.ViewModelProvider;
import it.niedermann.nextcloud.deck.databinding.ActivityManageAccountsBinding;
import it.niedermann.nextcloud.deck.model.Account;
-import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentAccountId;
-import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
-
public class ManageAccountsActivity extends AppCompatActivity {
private static final String TAG = ManageAccountsActivity.class.getSimpleName();
@@ -66,7 +66,13 @@ public class ManageAccountsActivity extends AppCompatActivity {
public void onBackPressed() {
onSupportNavigateUp();
}
-
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static Intent createIntent(@NonNull Context context) {
return new Intent(context, ManageAccountsActivity.class);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/movecard/MoveCardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/movecard/MoveCardDialogFragment.java
index 19fc401c8..95b234439 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/movecard/MoveCardDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/movecard/MoveCardDialogFragment.java
@@ -98,6 +98,12 @@ public class MoveCardDialogFragment extends BrandedDialogFragment implements Pic
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
+ @Override
public void onStackPicked(@NonNull Account account, @Nullable Board board, @Nullable Stack stack) {
this.selectedAccount = account;
this.selectedBoard = board;
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/pickstack/PickStackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/pickstack/PickStackFragment.java
index 35454d496..06b1eb44f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/pickstack/PickStackFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/pickstack/PickStackFragment.java
@@ -179,6 +179,12 @@ public class PickStackFragment extends Fragment {
return binding.getRoot();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
/**
* Updates the source of the given liveData and de- and reregisters the given observer.
*/
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java
index f41a7592a..07df2ac20 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java
@@ -14,12 +14,14 @@ import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
public class SettingsActivity extends AppCompatActivity {
+ private ActivitySettingsBinding binding;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler(this));
- final var binding = ActivitySettingsBinding.inflate(getLayoutInflater());
+ binding = ActivitySettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
@@ -37,6 +39,12 @@ public class SettingsActivity extends AppCompatActivity {
return true;
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
@NonNull
public static Intent createIntent(@NonNull Context context) {
return new Intent(context, SettingsActivity.class);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java
index fc093c471..26f37e88d 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java
@@ -110,6 +110,12 @@ public class ShareProgressDialogFragment extends BrandedDialogFragment {
requireActivity().finish();
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static ShareProgressDialogFragment newInstance() {
return new ShareProgressDialogFragment();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java
index 2c67556a9..a9e5a4f9a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java
@@ -9,7 +9,6 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.Menu;
-import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
@@ -193,15 +192,11 @@ public class ShareTargetActivity extends MainActivity implements SelectCardListe
@Override
protected void setCurrentBoard(@NonNull Board board) {
super.setCurrentBoard(board);
- binding.listMenuButton.setVisibility(View.GONE);
- binding.fab.setVisibility(View.GONE);
binding.toolbar.setTitle(R.string.simple_select);
+ showEditButtonsIfPermissionsGranted();
}
@Override
- protected void showFabIfEditPermissionGranted() { /* Silence is gold */ }
-
- @Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java
index 897969671..5888329b0 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java
@@ -66,6 +66,12 @@ public class EditStackDialogFragment extends BrandedDialogFragment {
return super.onCreateView(inflater, container, savedInstanceState);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static DialogFragment newInstance() {
return new EditStackDialogFragment();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
index 61f58a9d4..91b8df21b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
@@ -13,6 +13,7 @@ import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
@@ -130,6 +131,12 @@ public class StackFragment extends Fragment implements DragAndDropTab<CardAdapte
DeckApplication.readCurrentBoardColor().observe(getViewLifecycleOwner(), this::applyBrand);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
@Nullable
@Override
public CardAdapter getAdapter() {
@@ -175,4 +182,27 @@ public class StackFragment extends Fragment implements DragAndDropTab<CardAdapte
});
}
+ /**
+ * Scroll to the bottom of the fragment
+ */
+ public void scrollToBottom() {
+ activity.runOnUiThread(() -> {
+ if (adapter == null) {
+ DeckLog.warn("Adapter is null");
+ return;
+ }
+ final var layoutManager = (LinearLayoutManager) binding.recyclerView.getLayoutManager();
+ if (layoutManager == null) {
+ DeckLog.warn("LayoutManager is null");
+ return;
+ }
+ int currentItem = layoutManager.findFirstVisibleItemPosition();
+
+ if (adapter.getItemCount() - currentItem < 40) {
+ binding.recyclerView.smoothScrollToPosition(adapter.getItemCount());
+ } else {
+ binding.recyclerView.scrollToPosition(adapter.getItemCount() - 1);
+ }
+ });
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/takephoto/TakePhotoActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/takephoto/TakePhotoActivity.java
index 0bfddd76d..0ee0f0157 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/takephoto/TakePhotoActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/takephoto/TakePhotoActivity.java
@@ -169,6 +169,12 @@ public class TakePhotoActivity extends AppCompatActivity {
}
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
public static Intent createIntent(@NonNull Context context) {
return new Intent(context, TakePhotoActivity.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java
index 9bfa165c4..a30d928c3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java
@@ -24,6 +24,7 @@ import it.niedermann.nextcloud.deck.ui.movecard.MoveCardListener;
public class UpcomingCardsActivity extends AppCompatActivity implements MoveCardListener {
private UpcomingCardsViewModel viewModel;
+ private ActivityUpcomingCardsBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -31,7 +32,7 @@ public class UpcomingCardsActivity extends AppCompatActivity implements MoveCard
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
- final var binding = ActivityUpcomingCardsBinding.inflate(getLayoutInflater());
+ binding = ActivityUpcomingCardsBinding.inflate(getLayoutInflater());
viewModel = new ViewModelProvider(this).get(UpcomingCardsViewModel.class);
setContentView(binding.getRoot());
@@ -83,6 +84,12 @@ public class UpcomingCardsActivity extends AppCompatActivity implements MoveCard
});
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
+
@NonNull
public static Intent createIntent(@NonNull Context context) {
return new Intent(context, UpcomingCardsActivity.class)
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/filter/FilterWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/filter/FilterWidgetConfigurationActivity.java
index 102860d7c..49d731108 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/filter/FilterWidgetConfigurationActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/filter/FilterWidgetConfigurationActivity.java
@@ -64,4 +64,10 @@ public class FilterWidgetConfigurationActivity extends AppCompatActivity {
finish();
});
}
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ this.binding = null;
+ }
}
diff --git a/app/src/main/res/layout/item_attachment.xml b/app/src/main/res/layout/item_attachment.xml
index 08a31cf7d..9542bef9a 100644
--- a/app/src/main/res/layout/item_attachment.xml
+++ b/app/src/main/res/layout/item_attachment.xml
@@ -1,7 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
-<androidx.appcompat.widget.AppCompatImageView xmlns:android="http://schemas.android.com/apk/res/android"
+<it.niedermann.nextcloud.deck.ui.card.attachments.AttachmentImageView
+ xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
- app:srcCompat="@drawable/ic_image_grey600_24dp" /> \ No newline at end of file
+ android:scrollbars="none"
+ app:transformation="centerInside"
+ app:transformationGravity="auto"
+ app:alignment="center"
+ app:overScrollHorizontal="false"
+ app:overScrollVertical="false"
+ app:overPinchable="true"
+ app:horizontalPanEnabled="true"
+ app:verticalPanEnabled="true"
+ app:zoomEnabled="true"
+ app:flingEnabled="false"
+ app:scrollEnabled="true"
+ app:oneFingerScrollEnabled="true"
+ app:twoFingersScrollEnabled="false"
+ app:threeFingersScrollEnabled="false"
+ app:minZoom="0.7"
+ app:minZoomType="zoom"
+ app:maxZoom="5"
+ app:maxZoomType="zoom"
+ app:animationDuration="280" />
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index e3556a483..793b0674c 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -243,6 +243,7 @@
<string name="error_dialog_certificate">يبدو أن هناك خطأ ما في شهادة الخادم، من فضلك قم بمراجعة جميع الحسابات في تطبيق نكست كلاود لمزيد من المعلومات.</string>
<string name="error_dialog_tip_disable_battery_optimizations">يرجى تعطيل جميع تحسينات البطارية لنكست كلاود وتطبيق Deck.</string>
<string name="error_dialog_unknown_error">يبدو أن مثيل Nextcloud الخاص بك لا يمكن الوصول إليه . يرجى التحقق من اتصالك بالإنترنت وما إذا كنت قادرًا على الاتصال بالمثيل الخاص بك عبر المتصفح.</string>
+ <string name="error_dialog_min_version">يتطلب تطبيق Deck للأندرويد أن يكون تطبيق Nextcloud للأندرويد في الإصدار 3.18 على الأقل.</string>
<string name="error_action_open_deck_info">افتح معلومات التطبيق</string>
<string name="error_action_open_nextcloud_app">فتح تطبيق نكست كلاود</string>
<string name="error_action_open_network">إعدادات الشبكة</string>
@@ -250,6 +251,7 @@
<string name="error_action_open_in_browser">فتح في المتصفح</string>
<string name="error_action_install">تثبيت</string>
<string name="error_action_report_issue">ابلغ عنه</string>
+ <string name="error_action_update_files_app">تحديث</string>
<string name="info_box_maintenance_mode">الخادم في وضع الصيانة</string>
<string name="info_box_version_not_supported">إصدار الخادم %1$s غير مدعوم، من فضلك قم بالتحديث إلى %2$s</string>
<string name="share_link">مشاركة الرابط</string>
@@ -341,4 +343,7 @@
<string name="saving_new_card">يجري حفظ بطاقة جديدة ...</string>
<string name="progress_import">يجري استعادة لوحة %1$d من %2$d ...</string>
<string name="progress_import_indeterminate">يجري استعادة اللوحات ...</string>
+ <string name="card_outdated">ربما يكون محتوى هذه البطاقة قديمًا.</string>
+ <string name="show_error">عرض الخطأ</string>
+ <string name="push_notification_link_empty">نظرًا لوجود مشكلة معروفة في تطبيق الويب \"Deck\"، لا يمكننا للأسف عرض هذه البطاقة. لمزيد من المعلومات، راجع: %1$s</string>
</resources>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 94a683195..7eb5dffdd 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -50,7 +50,7 @@
<string name="about_translators_transifex_label">Transifex</string>
<string name="about_testers_title">Probatzaileak</string>
<string name="about_source_title">Iturburu-kodea</string>
- <string name="about_source">Proiektu hau GitHuben ostatatuta dago: %1$s</string>
+ <string name="about_source">Proiektu hau GitHub-en du ostatu: %1$s</string>
<string name="about_issues_title">Arazoak</string>
<string name="about_issues">Akatsen berri eman, hobekuntzak proposatu eta ezaugarri berriak eskatu ditzakezu GitHub arazo kontrolatzailean: %1$s</string>
<string name="about_translate_title">Itzuli</string>
@@ -235,6 +235,7 @@
<string name="error_dialog_certificate">Badirudi zerbait gaizki dagoela zerbitzariaren ziurtagirian. Informazio gehiagorako, egiaztatu Nextcloud aplikazioko kontu guztiak.</string>
<string name="error_dialog_tip_disable_battery_optimizations">Desgaitu bateria optimizazio guztiak Nextcloudentzat eta Deck aplikazioarentzat.</string>
<string name="error_dialog_unknown_error">Badirudi ezin dela zure Nextcloud instantzia atzitu. Mesedez, egiaztatu zure internet konexioa eta zure instantziara nabigatzailearen bidez konektatu ahal zarela.</string>
+ <string name="error_dialog_min_version">Deck Android aplikazioak Nextcloud Android aplikazioa gutxienez 3.18 bertsioa izatea eskatzen du.</string>
<string name="error_action_open_deck_info">Ireki aplikazioaren informazioa</string>
<string name="error_action_open_nextcloud_app">Ireki Nextcloud aplikazioa</string>
<string name="error_action_open_network">Sareko ezarpenak</string>
@@ -325,5 +326,7 @@
<string name="saving_new_card">Txartel berria gordetzen...</string>
<string name="progress_import">%2$dtik %1$darbela inportatzen ...</string>
<string name="progress_import_indeterminate">Arbelak inportatzen…</string>
+ <string name="card_outdated">Baliteke txartel honen edukia zaharkituta egotea.</string>
<string name="show_error">Erakutsi errorea</string>
+ <string name="push_notification_link_empty">Deck web aplikazioaren arazo ezagun bat dela eta, zoritxarrez, ezin dugu txartel hau erakutsi. Informazio gehiagorako, ikus: %1$s</string>
</resources>
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index f7a1f6a53..bc133e36a 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -31,6 +31,8 @@
<string name="simple_copied">コピーしました</string>
<string name="simple_archive">アーカイブ</string>
<string name="simple_unassigned">未割り当て</string>
+ <string name="hint_error_appeared">エラーが発生しました</string>
+
<string name="edit_board">ボードを編集</string>
<string name="archive_board">ボードをアーカイブ</string>
<string name="delete_board">ボードを削除</string>
@@ -122,6 +124,8 @@
<string name="pref_value_wifi_only">Wi-Fi接続時のみ同期する</string>
<string-array name="darkmode_entries">
<item>システムのデフォルト</item>
+ <item>明るい</item>
+ <item>暗い</item>
</string-array>
<string name="unassigned_user">未割当の%1$s</string>
<string name="no_activities">このカードにはアクティビティがありません。アクティビティを読み込んで表示するにはインターネットへの接続が必要です。</string>
@@ -138,6 +142,7 @@
<string name="hours_6">6時間</string>
<string name="action_card_move">カードの移動</string>
<string name="action_card_move_title">%1$sを移動</string>
+ <string name="title_is_mandatory">タイトルは必要です</string>
<string name="provide_at_least_a_title_or_description">少なくともタイトルまたは説明を入力してください</string>
<string name="welcome_text">%1$sにようこそ</string>
<string name="maintenance_mode_explanation">サーバー%1$sは現在メンテナンスモードです。管理者に問い合わせるか後で試してください。</string>
@@ -220,6 +225,7 @@
<string name="error_action_open_nextcloud_app">Nextcloudアプリを開く</string>
<string name="error_action_open_network">ネットワーク設定</string>
<string name="error_action_server_logs">サーバーログ</string>
+ <string name="error_action_open_in_browser">ブラウザーで開く</string>
<string name="error_action_install">インストール</string>
<string name="error_action_report_issue">報告</string>
<string name="info_box_version_not_supported">サーバーのバージョン%1$sはサポートしていませんので、%2$sにアップデートしてください。</string>
@@ -294,4 +300,5 @@
<string name="copying_logs_to_file">ログをファイルにコピー…</string>
<string name="simple_search">検索</string>
<string name="saving_new_card">新しいカードを保存…</string>
+ <string name="show_error">エラーを表示</string>
</resources>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 1b353a68f..1c0fc4b62 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -296,7 +296,7 @@
<string name="single_card">Pojedyncza karta</string>
<string name="project_type_room">Pokój rozmów</string>
<string name="simple_move">Przenieś</string>
- <string name="cannot_upload_files_without_permission">Nie można przesłać plików bez uprawnień</string>
+ <string name="cannot_upload_files_without_permission">Nie można wysyłać plików bez uprawnień</string>
<string name="clone_cards">Klonuj karty</string>
<string name="simple_clone">Klonuj</string>
<string name="user_avatar">Awatar użytkownika</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index cb01afc8a..a5a2264dc 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -235,6 +235,7 @@
<string name="error_dialog_certificate">Algo parece estar errado com o certificado do servidor. Por favor, verifique todas as contas no aplicativo Nextcloud para maiores informações.</string>
<string name="error_dialog_tip_disable_battery_optimizations">Desative todas as otimizações de bateria para o Nextcloud e o aplicativo Deck.</string>
<string name="error_dialog_unknown_error">Sua instância Nextcloud parece estar inacessível. Verifique sua conexão com a Internet e se você consegue se conectar à sua instância por meio do navegador. </string>
+ <string name="error_dialog_min_version">O aplicativo Deck Android requer que o aplicativo Nextcloud Android tenha pelo menos a versão 3.18.</string>
<string name="error_action_open_deck_info">Abra as informações do Aplicativo</string>
<string name="error_action_open_nextcloud_app">Abrir o aplicativo Nextcloud</string>
<string name="error_action_open_network">Configurações da rede</string>
@@ -242,6 +243,7 @@
<string name="error_action_open_in_browser">Abra no navegador</string>
<string name="error_action_install">Instalar</string>
<string name="error_action_report_issue">Reportar</string>
+ <string name="error_action_update_files_app">Atualizar</string>
<string name="info_box_maintenance_mode">O servidor está em modo de manutenção </string>
<string name="info_box_version_not_supported">A versão %1$s do servidor não é suportada, atualize para %2$s</string>
<string name="share_link">Link de compartilhamento</string>
@@ -324,4 +326,7 @@
<string name="saving_new_card">Salvando novo cartão…</string>
<string name="progress_import">Importando placa %1$d de %2$d…</string>
<string name="progress_import_indeterminate">Importando placas…</string>
+ <string name="card_outdated">O conteúdo deste cartão pode estar desatualizado.</string>
+ <string name="show_error">Mostrar erro</string>
+ <string name="push_notification_link_empty">Devido a um problema conhecido no aplicativo da web Deck, infelizmente não podemos exibir este cartão. Para mais informações, veja: %1$s</string>
</resources>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 0dfbfa106..1745143f1 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -1,6 +1,8 @@
<resources>
<string name="navigation_drawer_open">Öppna navigeringspanelen</string>
<string name="navigation_drawer_close">Stäng navigeringslådan</string>
+ <string name="hint_search_deck">Sökskärm</string>
+
<string name="simple_boards">Tavlor</string>
<string name="simple_add">Lägg till</string>
<string name="simple_save">Spara</string>
@@ -31,6 +33,8 @@
<string name="simple_copied">Kopierad</string>
<string name="simple_archive">Arkivera</string>
<string name="simple_unassigned">Ej tilldelad</string>
+ <string name="hint_error_appeared">Ett fel uppstod</string>
+
<string name="edit_board">Ändra tavla</string>
<string name="archive_board">Arkivera tavla</string>
<string name="delete_board">Ta bort tavla</string>
@@ -116,6 +120,8 @@
<string name="settings_theme_title">Tema</string>
<string name="settings_branding_title">Varumärke</string>
<string name="settings_compact_title">Kompakt läge</string>
+ <string name="settings_cover_images_title">Omslagsbilder</string>
+ <string name="settings_debugging">Avbuggningsloggar</string>
<string name="settings_background_sync">Bakgrundssynkronisering</string>
<string name="pref_value_wifi_and_mobile">Synkronisera med Wi-Fi och mobildata</string>
<string name="pref_value_wifi_only">Synkronisera endast med Wi-Fi</string>
@@ -134,6 +140,9 @@
<string name="no_content">Inget innehåll än</string>
<string name="last_background_sync">Senaste bakgrundssynk:</string>
<string name="simple_off">Av</string>
+ <string name="minutes_15">15 minuter</string>
+ <string name="hour_1">1 timme</string>
+ <string name="hours_6">6 timmar</string>
<string name="action_card_move">Flytta kort</string>
<string name="action_card_move_title">Flytta %1$s</string>
<string name="provide_at_least_a_title_or_description">Ange åtminstone en titel eller beskrivning</string>
@@ -158,9 +167,11 @@
<string name="filter_no_filter">Alla</string>
<string name="filter_overdue">Förfallen</string>
<string name="filter_today">Idag</string>
+ <string name="filter_tomorrow">I morgon</string>
<string name="filter_week">Nästa 7 dagar</string>
<string name="filter_month">Nästa 30 dagar</string>
<string name="filter_no_due">Inget slutdatum</string>
+ <string name="filter_later">Senare</string>
<string name="filter_by_tag">Filtrera efter tagg</string>
<string name="filter_by_assigned_user">Filtrera efter tilldelad användare</string>
<string name="filter_by_duedate">Filtrera efter förfallodatum</string>
@@ -187,6 +198,7 @@
<string name="operation_not_yet_supported">Stöds inte än</string>
<string name="error_revoking_ac">Fel vid återkallande av åtkomst för %1$s</string>
<string name="error_create_label">Fel vid skapandet av etiketten %1$s</string>
+ <string name="maintenance_mode">Server är i underhållsläge</string>
<string name="server_error">Serverfel</string>
<string name="error_edit_activity_killed_by_android">Android avslutade redigeringsläget eftersom det behövde mer systemresurser för andra appar.</string>
@@ -214,10 +226,15 @@
<string name="error_action_open_deck_info">Öppna appinformation</string>
<string name="error_action_open_network">Nätverksinställningar</string>
<string name="error_action_server_logs">Serverloggar</string>
+ <string name="error_action_open_in_browser">Öppna i webbläsare</string>
<string name="error_action_install">Installera</string>
<string name="error_action_report_issue">Rapportera</string>
+ <string name="error_action_update_files_app">Uppdatera</string>
+ <string name="info_box_maintenance_mode">Servern är i underhållsläge</string>
<string name="info_box_version_not_supported">Serverversion %1$s stöds inte, uppdatera till %2$s</string>
<string name="share_link">Dela länk</string>
+ <string name="share_content">Dela innehåll</string>
+ <string name="share_content_duedate">Förfallodag: %1$s</string>
<string name="archive_cards">Arkivera kort</string>
<string name="manage_accounts">Hantera konton</string>
@@ -240,6 +257,7 @@
<string name="card_does_not_yet_exist">Kortet finns inte ännu i Deck</string>
<string name="widget_stack_title">Lista</string>
+ <string name="widget_filter_title">Filter</string>
<string name="widget_stack_header_icon">Ikon för widgetens sidhuvud</string>
<string name="select_stack">Välj lista</string>
<string name="project_type_deck_board">Deck-plank</string>
@@ -275,4 +293,6 @@
<string name="simple_attach">bifoga</string>
<string name="add_stack_widget">Lägg till listwidget</string>
<string name="edit_description">Ändra beskrivning</string>
+ <string name="simple_search">Sök</string>
+ <string name="saving_new_card">Sparar nya kort...</string>
</resources>
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index bd54f80b2..8ceb6b1ec 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -233,6 +233,7 @@
<string name="error_dialog_certificate">Có gì đó có vẻ sai với chứng chỉ của máy chủ. Vui lòng kiểm tra tất cả tài khoản trong ứng dụng Nextcloud để biết thêm thông tin.</string>
<string name="error_dialog_tip_disable_battery_optimizations">Vui lòng tắt tất cả tối ưu hoá pin cho Nextcloud và ứng dụng Deck.</string>
<string name="error_dialog_unknown_error">Bản sao Nextcloud của bạn có vẻ không kết nối đến được. Vui lòng kiểm tra kết nối internet và kiểm tra xem bạn có thể kết nối đến bản sao của bạn qua trình duyệt không.</string>
+ <string name="error_dialog_min_version">Ứng dụng Deck cho Android yêu cầu ứng dụng Nextcloud cho Android phiên bản ít nhất 3.18.</string>
<string name="error_action_open_deck_info">Mở Thông tin ứng dụng</string>
<string name="error_action_open_nextcloud_app">Mở ứng dụng Nextcloud</string>
<string name="error_action_open_network">Cài đặt mạng</string>
@@ -240,6 +241,7 @@
<string name="error_action_open_in_browser">Mở trong trình duyệt</string>
<string name="error_action_install">Cài đặt</string>
<string name="error_action_report_issue">Báo cáo</string>
+ <string name="error_action_update_files_app">Cập nhật</string>
<string name="info_box_maintenance_mode">Máy chủ đang trong chế độ bảo trì</string>
<string name="info_box_version_not_supported">Phiên bản máy chủ %1$s không được hỗ trợ, vui lòng cập nhật lên %2$s</string>
<string name="share_link">Chia sẽ liên kết</string>
@@ -320,4 +322,7 @@
<string name="saving_new_card">Đang lưu thẻ mới...</string>
<string name="progress_import">Đang nhập dự án %1$d trong số %2$d...</string>
<string name="progress_import_indeterminate">Đang nhập các dự án...</string>
+ <string name="card_outdated">Nội dung của thẻ này có thể đã lỗi thời.</string>
+ <string name="show_error">Hiện lỗi</string>
+ <string name="push_notification_link_empty">Do lỗi đã biết ở ứng dụng Deck trên web, không may là chúng tôi không thể hiển thị thẻ này. Để biết thêm thông tin hãy xem: %1$s</string>
</resources>
diff --git a/app/src/test/resources/robolectric.properties b/app/src/test/resources/robolectric.properties
index cf370c6fb..5d28440d3 100644
--- a/app/src/test/resources/robolectric.properties
+++ b/app/src/test/resources/robolectric.properties
@@ -1 +1 @@
-sdk=22, 30 \ No newline at end of file
+sdk=23, 30 \ No newline at end of file