Search in sources :

Example 11 with Account

use of it.niedermann.owncloud.notes.persistence.entity.Account in project nextcloud-notes by stefan-niedermann.

the class AccountDaoTest method updateDisplayName.

@Test
public void updateDisplayName() {
    final var account = db.getAccountDao().getAccountById(db.getAccountDao().insert(new Account("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", null, new Capabilities())));
    assertEquals("Should read userName in favor of displayName if displayName is NULL", "彼得", account.getDisplayName());
    db.getAccountDao().updateDisplayName(account.getId(), "");
    assertEquals("Should properly update the displayName, even if it is blank", "", db.getAccountDao().getAccountById(account.getId()).getDisplayName());
    db.getAccountDao().updateDisplayName(account.getId(), "Foo Bar");
    assertEquals("Foo Bar", db.getAccountDao().getAccountById(account.getId()).getDisplayName());
    db.getAccountDao().updateDisplayName(account.getId(), null);
    assertEquals("Should read userName in favor of displayName if displayName is NULL", "彼得", db.getAccountDao().getAccountById(account.getId()).getDisplayName());
}
Also used : Account(it.niedermann.owncloud.notes.persistence.entity.Account) Capabilities(it.niedermann.owncloud.notes.shared.model.Capabilities) Test(org.junit.Test)

Example 12 with Account

use of it.niedermann.owncloud.notes.persistence.entity.Account in project nextcloud-notes by stefan-niedermann.

the class NotesRepositoryTest method setupDB.

@Before
public void setupDB() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException {
    final var context = ApplicationProvider.getApplicationContext();
    db = Room.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), NotesDatabase.class).allowMainThreadQueries().build();
    final var constructor = NotesRepository.class.getDeclaredConstructor(Context.class, NotesDatabase.class, ExecutorService.class, ExecutorService.class, ExecutorService.class, ApiProvider.class);
    constructor.setAccessible(true);
    final var executor = MoreExecutors.newDirectExecutorService();
    final var apiProviderSpy = mock(ApiProvider.class);
    final var notesApiSpy = mock(NotesAPI.class);
    repo = constructor.newInstance(context, db, executor, executor, executor, apiProviderSpy);
    doReturn(notesApiSpy).when(apiProviderSpy).getNotesAPI(any(), any(), any());
    when(notesApiSpy.getNotesIDs()).thenReturn(Observable.just(Collections.emptyList()));
    when(notesApiSpy.getNote(anyLong())).thenReturn(Observable.just(ParsedResponse.of(new Note())));
    NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount("彼得@äöüß.example.com", "彼得", "1337", "https://äöüß.example.com", ""));
    repo.addAccount("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", new Capabilities(), null, new IResponseCallback<>() {

        @Override
        public void onSuccess(Account result) {
        }

        @Override
        public void onError(@NonNull Throwable t) {
            fail(t.getMessage());
        }
    });
    account = repo.getAccountByName("彼得@äöüß.example.com");
    NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount("test@example.org", "test", "1337", "https://example.org", ""));
    repo.addAccount("https://example.org", "test", "test@example.org", new Capabilities(), "Herbert", new IResponseCallback<>() {

        @Override
        public void onSuccess(Account result) {
        }

        @Override
        public void onError(@NonNull Throwable t) {
            fail(t.getMessage());
        }
    });
    secondAccount = repo.getAccountByName("test@example.org");
    Arrays.stream(new Note[] { new Note(1, 1001L, Calendar.getInstance(), "美好的一天", "C", "Movies", false, null, VOID, account.getId(), "", 0), new Note(2, null, Calendar.getInstance(), "T", "C", "Movies", false, null, LOCAL_EDITED, account.getId(), "", 0), new Note(3, 1003L, Calendar.getInstance(), "美好的一天", "C", "Movies", false, null, LOCAL_EDITED, account.getId(), "", 0), new Note(4, null, Calendar.getInstance(), "T", "C", "Music", false, null, VOID, account.getId(), "", 0), new Note(5, 1005L, Calendar.getInstance(), "美好的一天", "C", " 兄弟,这真是美好的一天。", false, null, LOCAL_EDITED, account.getId(), "", 0), new Note(6, 1006L, Calendar.getInstance(), "美好的一天", "C", " 兄弟,这真是美好的一天。", false, null, LOCAL_DELETED, account.getId(), "", 0), new Note(7, null, Calendar.getInstance(), "T", "C", "Music", true, null, LOCAL_EDITED, secondAccount.getId(), "", 0), new Note(8, 1008L, Calendar.getInstance(), "美好的一天", "C", "ToDo", true, null, LOCAL_EDITED, secondAccount.getId(), "", 0), new Note(9, 1009L, Calendar.getInstance(), "美好的一天", "C", "ToDo", true, null, LOCAL_DELETED, secondAccount.getId(), "", 0) }).forEach(note -> db.getNoteDao().addNote(note));
}
Also used : SingleSignOnAccount(com.nextcloud.android.sso.model.SingleSignOnAccount) SingleSignOnAccount(com.nextcloud.android.sso.model.SingleSignOnAccount) Account(it.niedermann.owncloud.notes.persistence.entity.Account) Capabilities(it.niedermann.owncloud.notes.shared.model.Capabilities) Note(it.niedermann.owncloud.notes.persistence.entity.Note) Before(org.junit.Before)

Example 13 with Account

use of it.niedermann.owncloud.notes.persistence.entity.Account in project nextcloud-notes by stefan-niedermann.

the class MainActivity method setupNotesList.

private void setupNotesList() {
    adapter = new ItemAdapter(this, gridView);
    listView.setAdapter(adapter);
    listView.setItemAnimator(null);
    if (gridView) {
        final int spanCount = getResources().getInteger(R.integer.grid_view_span_count);
        final var gridLayoutManager = new StaggeredGridLayoutManager(spanCount, StaggeredGridLayoutManager.VERTICAL);
        listView.setLayoutManager(gridLayoutManager);
        listView.addItemDecoration(new GridItemDecoration(adapter, spanCount, getResources().getDimensionPixelSize(R.dimen.spacer_3x), getResources().getDimensionPixelSize(R.dimen.spacer_5x), getResources().getDimensionPixelSize(R.dimen.spacer_3x), getResources().getDimensionPixelSize(R.dimen.spacer_1x), getResources().getDimensionPixelSize(R.dimen.spacer_activity_sides) + getResources().getDimensionPixelSize(R.dimen.spacer_1x)));
    } else {
        final var layoutManager = new LinearLayoutManager(this);
        listView.setLayoutManager(layoutManager);
        listView.addItemDecoration(new SectionItemDecoration(adapter, getResources().getDimensionPixelSize(R.dimen.spacer_activity_sides) + getResources().getDimensionPixelSize(R.dimen.spacer_1x) + getResources().getDimensionPixelSize(R.dimen.spacer_3x) + getResources().getDimensionPixelSize(R.dimen.spacer_2x), getResources().getDimensionPixelSize(R.dimen.spacer_5x), getResources().getDimensionPixelSize(R.dimen.spacer_1x), 0));
    }
    listView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            if (dy > 0)
                fabCreate.hide();
            else if (dy < 0)
                fabCreate.show();
        }
    });
    swipeRefreshLayout.setOnRefreshListener(() -> {
        CustomAppGlideModule.clearCache(this);
        final var syncLiveData = mainViewModel.getCurrentAccount();
        final Observer<Account> syncObserver = currentAccount -> {
            syncLiveData.removeObservers(this);
            mainViewModel.synchronizeCapabilitiesAndNotes(currentAccount, new IResponseCallback<>() {

                @Override
                public void onSuccess(Void v) {
                    Log.d(TAG, "Successfully synchronized capabilities and notes for " + currentAccount.getAccountName());
                }

                @Override
                public void onError(@NonNull Throwable t) {
                    runOnUiThread(() -> {
                        swipeRefreshLayout.setRefreshing(false);
                        if (t instanceof IntendedOfflineException) {
                            Log.i(TAG, "Capabilities and notes not updated because " + currentAccount.getAccountName() + " is offline by intention.");
                        } else if (t instanceof NextcloudHttpRequestFailedException && ((NextcloudHttpRequestFailedException) t).getStatusCode() == HttpURLConnection.HTTP_UNAVAILABLE) {
                            BrandedSnackbar.make(coordinatorLayout, R.string.error_maintenance_mode, Snackbar.LENGTH_LONG).show();
                        } else if (t instanceof NetworkErrorException) {
                            BrandedSnackbar.make(coordinatorLayout, getString(R.string.error_sync, getString(R.string.error_no_network)), Snackbar.LENGTH_LONG).show();
                        } else {
                            BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG).setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show();
                        }
                    });
                }
            });
        };
        syncLiveData.observe(this, syncObserver);
    });
    tracker = ItemSelectionTracker.build(listView, adapter);
    adapter.setTracker(tracker);
    tracker.addObserver(new SelectionTracker.SelectionObserver<Long>() {

        @Override
        public void onSelectionChanged() {
            super.onSelectionChanged();
            if (tracker.hasSelection() && mActionMode == null) {
                mActionMode = startSupportActionMode(new MultiSelectedActionModeCallback(MainActivity.this, coordinatorLayout, mainViewModel, MainActivity.this, canMoveNoteToAnotherAccounts, tracker, getSupportFragmentManager()));
            }
            if (mActionMode != null) {
                if (tracker.hasSelection()) {
                    int selected = tracker.getSelection().size();
                    mActionMode.setTitle(getResources().getQuantityString(R.plurals.ab_selected, selected, selected));
                } else {
                    mActionMode.finish();
                    mActionMode = null;
                }
            }
        }
    });
    itemTouchHelper = new NotesListViewItemTouchHelper(this, mainViewModel, this, tracker, adapter, swipeRefreshLayout, coordinatorLayout, gridView);
    itemTouchHelper.attachToRecyclerView(listView);
}
Also used : HttpURLConnection(java.net.HttpURLConnection) ImportAccountActivity(it.niedermann.owncloud.notes.importaccount.ImportAccountActivity) NotesApplication.isDarkThemeActive(it.niedermann.owncloud.notes.NotesApplication.isDarkThemeActive) Bundle(android.os.Bundle) BrandedSnackbar(it.niedermann.owncloud.notes.branding.BrandedSnackbar) NonNull(androidx.annotation.NonNull) NoteClickListener(it.niedermann.owncloud.notes.shared.model.NoteClickListener) Uri(android.net.Uri) NotesColorUtil.contrastRatioIsSufficient(it.niedermann.owncloud.notes.shared.util.NotesColorUtil.contrastRatioIsSufficient) AccountPickerListener(it.niedermann.owncloud.notes.accountpicker.AccountPickerListener) SDK_INT(android.os.Build.VERSION.SDK_INT) ItemSelectionTracker(it.niedermann.owncloud.notes.main.items.selection.ItemSelectionTracker) GridItemDecoration(it.niedermann.owncloud.notes.main.items.grid.GridItemDecoration) UNCATEGORIZED(it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.UNCATEGORIZED) IntendedOfflineException(it.niedermann.owncloud.notes.exception.IntendedOfflineException) ApiProvider(it.niedermann.owncloud.notes.persistence.ApiProvider) ActionBarDrawerToggle(androidx.appcompat.app.ActionBarDrawerToggle) ActivityNotesListViewBinding(it.niedermann.owncloud.notes.databinding.ActivityNotesListViewBinding) FloatingActionButton(com.google.android.material.floatingactionbutton.FloatingActionButton) ItemAdapter(it.niedermann.owncloud.notes.main.items.ItemAdapter) VISIBLE(android.view.View.VISIBLE) View(android.view.View) CategoryDialogFragment(it.niedermann.owncloud.notes.edit.category.CategoryDialogFragment) RecyclerView(androidx.recyclerview.widget.RecyclerView) ContextCompat(androidx.core.content.ContextCompat) TokenMismatchException(com.nextcloud.android.sso.exceptions.TokenMismatchException) Log(android.util.Log) AccountSwitcherDialog(it.niedermann.owncloud.notes.accountswitcher.AccountSwitcherDialog) NavigationAdapter(it.niedermann.owncloud.notes.main.navigation.NavigationAdapter) IResponseCallback(it.niedermann.owncloud.notes.shared.model.IResponseCallback) CoordinatorLayout(androidx.coordinatorlayout.widget.CoordinatorLayout) O(android.os.Build.VERSION_CODES.O) CategoryViewModel(it.niedermann.owncloud.notes.edit.category.CategoryViewModel) R(it.niedermann.owncloud.notes.R) SearchView(androidx.appcompat.widget.SearchView) PorterDuff(android.graphics.PorterDuff) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) NetworkErrorException(android.accounts.NetworkErrorException) AccountImporter(com.nextcloud.android.sso.AccountImporter) Nullable(androidx.annotation.Nullable) UnknownErrorException(com.nextcloud.android.sso.exceptions.UnknownErrorException) SingleAccountHelper(com.nextcloud.android.sso.helper.SingleAccountHelper) GONE(android.view.View.GONE) RECENT(it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) SearchManager(android.app.SearchManager) Snackbar(com.google.android.material.snackbar.Snackbar) StaggeredGridLayoutManager(androidx.recyclerview.widget.StaggeredGridLayoutManager) Account(it.niedermann.owncloud.notes.persistence.entity.Account) Note(it.niedermann.owncloud.notes.persistence.entity.Note) AlertDialog(androidx.appcompat.app.AlertDialog) LockedActivity(it.niedermann.owncloud.notes.LockedActivity) CategorySortingMethod(it.niedermann.owncloud.notes.shared.model.CategorySortingMethod) NotesApplication.isGridViewEnabled(it.niedermann.owncloud.notes.NotesApplication.isGridViewEnabled) NavigationClickListener(it.niedermann.owncloud.notes.main.navigation.NavigationClickListener) Intent(android.content.Intent) CapabilitiesWorker(it.niedermann.owncloud.notes.persistence.CapabilitiesWorker) DEFAULT_CATEGORY(it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.DEFAULT_CATEGORY) DrawableCompat(androidx.core.graphics.drawable.DrawableCompat) NextcloudFilesAppAccountNotFoundException(com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException) BrandingUtil.getSecondaryForegroundColorDependingOnTheme(it.niedermann.owncloud.notes.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme) NavigationCategory(it.niedermann.owncloud.notes.shared.model.NavigationCategory) CustomAppGlideModule(it.niedermann.owncloud.notes.shared.util.CustomAppGlideModule) NoteUtil(it.niedermann.owncloud.notes.shared.util.NoteUtil) MenuAdapter(it.niedermann.owncloud.notes.main.menu.MenuAdapter) LinkedList(java.util.LinkedList) ExecutorService(java.util.concurrent.ExecutorService) RequestOptions(com.bumptech.glide.request.RequestOptions) ViewModelProvider(androidx.lifecycle.ViewModelProvider) ActivityCompat(androidx.core.app.ActivityCompat) SwipeRefreshLayout(androidx.swiperefreshlayout.widget.SwipeRefreshLayout) FAVORITES(it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES) DrawerLayoutBinding(it.niedermann.owncloud.notes.databinding.DrawerLayoutBinding) NotesListViewItemTouchHelper(it.niedermann.owncloud.notes.main.items.list.NotesListViewItemTouchHelper) GravityCompat(androidx.core.view.GravityCompat) AccountImportCancelledException(com.nextcloud.android.sso.exceptions.AccountImportCancelledException) NextcloudHttpRequestFailedException(com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException) CapabilitiesClient(it.niedermann.owncloud.notes.persistence.CapabilitiesClient) NavigationItem(it.niedermann.owncloud.notes.main.navigation.NavigationItem) TextUtils(android.text.TextUtils) AccountSwitcherListener(it.niedermann.owncloud.notes.accountswitcher.AccountSwitcherListener) ShareUtil(it.niedermann.owncloud.notes.shared.util.ShareUtil) ActionMode(androidx.appcompat.view.ActionMode) AnimatorInflater(android.animation.AnimatorInflater) Color(android.graphics.Color) ExceptionDialogFragment(it.niedermann.owncloud.notes.exception.ExceptionDialogFragment) SelectionTracker(androidx.recyclerview.selection.SelectionTracker) NoCurrentAccountSelectedException(com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException) Observer(androidx.lifecycle.Observer) Glide(com.bumptech.glide.Glide) EditNoteActivity(it.niedermann.owncloud.notes.edit.EditNoteActivity) SectionItemDecoration(it.niedermann.owncloud.notes.main.items.section.SectionItemDecoration) SSOUtil.askForNewAccount(it.niedermann.owncloud.notes.shared.util.SSOUtil.askForNewAccount) Account(it.niedermann.owncloud.notes.persistence.entity.Account) SSOUtil.askForNewAccount(it.niedermann.owncloud.notes.shared.util.SSOUtil.askForNewAccount) IResponseCallback(it.niedermann.owncloud.notes.shared.model.IResponseCallback) NextcloudHttpRequestFailedException(com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException) StaggeredGridLayoutManager(androidx.recyclerview.widget.StaggeredGridLayoutManager) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) NonNull(androidx.annotation.NonNull) GridItemDecoration(it.niedermann.owncloud.notes.main.items.grid.GridItemDecoration) ItemAdapter(it.niedermann.owncloud.notes.main.items.ItemAdapter) NotesListViewItemTouchHelper(it.niedermann.owncloud.notes.main.items.list.NotesListViewItemTouchHelper) NetworkErrorException(android.accounts.NetworkErrorException) IntendedOfflineException(it.niedermann.owncloud.notes.exception.IntendedOfflineException) ExceptionDialogFragment(it.niedermann.owncloud.notes.exception.ExceptionDialogFragment) ItemSelectionTracker(it.niedermann.owncloud.notes.main.items.selection.ItemSelectionTracker) SelectionTracker(androidx.recyclerview.selection.SelectionTracker) RecyclerView(androidx.recyclerview.widget.RecyclerView) SectionItemDecoration(it.niedermann.owncloud.notes.main.items.section.SectionItemDecoration)

Example 14 with Account

use of it.niedermann.owncloud.notes.persistence.entity.Account in project nextcloud-notes by stefan-niedermann.

the class AccountSwitcherDialog method onCreateDialog.

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    binding = DialogAccountSwitcherBinding.inflate(requireActivity().getLayoutInflater());
    final var account$ = repo.getAccountById$(currentAccountId);
    account$.observe(requireActivity(), (currentLocalAccount) -> {
        account$.removeObservers(requireActivity());
        binding.accountName.setText(currentLocalAccount.getDisplayName());
        binding.accountHost.setText(Uri.parse(currentLocalAccount.getUrl()).getHost());
        Glide.with(requireContext()).load(currentLocalAccount.getUrl() + "/index.php/avatar/" + Uri.encode(currentLocalAccount.getUserName()) + "/64").error(R.drawable.ic_account_circle_grey_24dp).apply(RequestOptions.circleCropTransform()).into(binding.currentAccountItemAvatar);
        binding.accountLayout.setOnClickListener((v) -> dismiss());
        final var adapter = new AccountSwitcherAdapter((localAccount -> {
            accountSwitcherListener.onAccountChosen(localAccount);
            dismiss();
        }));
        binding.accountsList.setAdapter(adapter);
        final var localAccounts$ = repo.getAccounts$();
        localAccounts$.observe(requireActivity(), (localAccounts) -> {
            localAccounts$.removeObservers(requireActivity());
            for (final var localAccount : localAccounts) {
                if (localAccount.getId() == currentLocalAccount.getId()) {
                    localAccounts.remove(localAccount);
                    break;
                }
            }
            adapter.setLocalAccounts(localAccounts);
        });
    });
    binding.addAccount.setOnClickListener((v) -> {
        accountSwitcherListener.addAccount();
        dismiss();
    });
    binding.manageAccounts.setOnClickListener((v) -> {
        requireActivity().startActivity(new Intent(requireContext(), ManageAccountsActivity.class));
        dismiss();
    });
    return new AlertDialog.Builder(requireContext()).setView(binding.getRoot()).create();
}
Also used : Context(android.content.Context) LayerDrawable(android.graphics.drawable.LayerDrawable) LiveData(androidx.lifecycle.LiveData) DialogAccountSwitcherBinding(it.niedermann.owncloud.notes.databinding.DialogAccountSwitcherBinding) BrandingUtil.applyBrandToLayerDrawable(it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable) Bundle(android.os.Bundle) AlertDialog(androidx.appcompat.app.AlertDialog) RequestOptions(com.bumptech.glide.request.RequestOptions) NonNull(androidx.annotation.NonNull) R(it.niedermann.owncloud.notes.R) Uri(android.net.Uri) ManageAccountsActivity(it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity) Dialog(android.app.Dialog) Intent(android.content.Intent) BrandedDialogFragment(it.niedermann.owncloud.notes.branding.BrandedDialogFragment) NotesRepository(it.niedermann.owncloud.notes.persistence.NotesRepository) List(java.util.List) Glide(com.bumptech.glide.Glide) Account(it.niedermann.owncloud.notes.persistence.entity.Account) DialogFragment(androidx.fragment.app.DialogFragment) Intent(android.content.Intent) ManageAccountsActivity(it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity) NonNull(androidx.annotation.NonNull)

Example 15 with Account

use of it.niedermann.owncloud.notes.persistence.entity.Account in project nextcloud-notes by stefan-niedermann.

the class NotesDaoTest method setupDB.

@Before
public void setupDB() {
    db = Room.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), NotesDatabase.class).allowMainThreadQueries().build();
    db.getAccountDao().insert(new Account("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", null, new Capabilities()));
    account = db.getAccountDao().getAccountByName("彼得@äöüß.example.com");
}
Also used : Account(it.niedermann.owncloud.notes.persistence.entity.Account) Capabilities(it.niedermann.owncloud.notes.shared.model.Capabilities) Before(org.junit.Before)

Aggregations

Account (it.niedermann.owncloud.notes.persistence.entity.Account)16 Capabilities (it.niedermann.owncloud.notes.shared.model.Capabilities)7 Bundle (android.os.Bundle)6 Test (org.junit.Test)6 NetworkErrorException (android.accounts.NetworkErrorException)5 NonNull (androidx.annotation.NonNull)5 AlertDialog (androidx.appcompat.app.AlertDialog)5 NextcloudFilesAppAccountNotFoundException (com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException)5 R (it.niedermann.owncloud.notes.R)5 Intent (android.content.Intent)4 SDK_INT (android.os.Build.VERSION.SDK_INT)4 Nullable (androidx.annotation.Nullable)4 ViewModelProvider (androidx.lifecycle.ViewModelProvider)4 AccountImporter (com.nextcloud.android.sso.AccountImporter)4 LockedActivity (it.niedermann.owncloud.notes.LockedActivity)4 ExceptionDialogFragment (it.niedermann.owncloud.notes.exception.ExceptionDialogFragment)4 Note (it.niedermann.owncloud.notes.persistence.entity.Note)4 IResponseCallback (it.niedermann.owncloud.notes.shared.model.IResponseCallback)4 Uri (android.net.Uri)3 SingleSignOnAccount (com.nextcloud.android.sso.model.SingleSignOnAccount)3