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

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-10-16 18:54:20 +0300
committerStefan Niedermann <info@niedermann.it>2020-10-16 18:54:20 +0300
commitfafca46f90b761e7e6e54e4c525a8599acde0136 (patch)
treec2045392eaee4fab510c8501b91f513f793437b6 /app
parent033ae67ef38fe5cdd4bd2a8425f2c57a23f7e068 (diff)
Introduce LoginActivity
Diffstat (limited to 'app')
-rw-r--r--app/src/main/AndroidManifest.xml4
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/ImportAccountActivity.java128
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java3
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/main/ImportViewModel.java74
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java71
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java5
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java3
-rw-r--r--app/src/main/res/layout/activity_import_account.xml63
-rw-r--r--app/src/main/res/values/colors.xml1
-rw-r--r--app/src/main/res/values/strings.xml2
10 files changed, 296 insertions, 58 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea5992b1..e3a01dbc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,6 +48,10 @@
</activity>
<activity
+ android:name=".ImportAccountActivity"
+ android:label="@string/add_account" />
+
+ <activity
android:name=".AppendToNoteActivity"
android:label="@string/append_to_note">
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/ImportAccountActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/ImportAccountActivity.java
new file mode 100644
index 00000000..316f31a6
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/ImportAccountActivity.java
@@ -0,0 +1,128 @@
+package it.niedermann.owncloud.notes;
+
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.nextcloud.android.sso.AccountImporter;
+import com.nextcloud.android.sso.exceptions.AccountImportCancelledException;
+import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException;
+import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.ui.UiExceptionManager;
+
+import it.niedermann.owncloud.notes.branding.BrandingUtil;
+import it.niedermann.owncloud.notes.databinding.ActivityImportAccountBinding;
+import it.niedermann.owncloud.notes.exception.ExceptionDialogFragment;
+import it.niedermann.owncloud.notes.exception.ExceptionHandler;
+import it.niedermann.owncloud.notes.main.ImportViewModel;
+import it.niedermann.owncloud.notes.persistence.CapabilitiesClient;
+import it.niedermann.owncloud.notes.persistence.entity.Account;
+import it.niedermann.owncloud.notes.shared.model.Capabilities;
+
+public class ImportAccountActivity extends AppCompatActivity {
+
+ private static final String TAG = ImportAccountActivity.class.getSimpleName();
+ public static final int REQUEST_CODE_IMPORT_ACCOUNT = 1;
+
+ private ImportViewModel importViewModel;
+ private ActivityImportAccountBinding binding;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler(this));
+
+ binding = ActivityImportAccountBinding.inflate(getLayoutInflater());
+ importViewModel = new ViewModelProvider(this).get(ImportViewModel.class);
+
+ setContentView(binding.getRoot());
+
+ binding.welcomeText.setText(getString(R.string.welcome_text, getString(R.string.app_name)));
+ binding.addButton.setOnClickListener((v) -> {
+ binding.addButton.setEnabled(false);
+ try {
+ AccountImporter.pickNewAccount(this);
+ } catch (NextcloudFilesAppNotInstalledException e) {
+ UiExceptionManager.showDialogForException(this, e);
+ Log.w(TAG, "=============================================================");
+ Log.w(TAG, "Nextcloud app is not installed. Cannot choose account");
+ e.printStackTrace();
+ } catch (AndroidGetAccountsPermissionNotGranted e) {
+ binding.addButton.setEnabled(true);
+ AccountImporter.requestAndroidAccountPermissionsAndPickAccount(this);
+ }
+ });
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ Drawable wrapDrawable = DrawableCompat.wrap(binding.progressCircular.getIndeterminateDrawable());
+ DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(this, R.color.defaultBrand));
+ binding.progressCircular.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
+ }
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ super.onSupportNavigateUp();
+ setResult(RESULT_CANCELED);
+ return true;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ try {
+ AccountImporter.onActivityResult(requestCode, resultCode, data, ImportAccountActivity.this, ssoAccount -> {
+ runOnUiThread(() -> binding.progressCircular.setVisibility(View.VISIBLE));
+
+ SingleAccountHelper.setCurrentAccount(getApplicationContext(), ssoAccount.name);
+ new Thread(() -> {
+ Log.i(TAG, "Added account: " + "name:" + ssoAccount.name + ", " + ssoAccount.url + ", userId" + ssoAccount.userId);
+ try {
+ Log.i(TAG, "Loading capabilities for " + ssoAccount.name);
+ final Capabilities capabilities = CapabilitiesClient.getCapabilities(getApplicationContext(), ssoAccount, null);
+ LiveData<Account> createLiveData = importViewModel.addAccount(ssoAccount.url, ssoAccount.userId, ssoAccount.name, capabilities);
+ runOnUiThread(() -> createLiveData.observe(this, (account) -> {
+ if (account != null) {
+ Log.i(TAG, capabilities.toString());
+ BrandingUtil.saveBrandColors(this, capabilities.getColor(), capabilities.getTextColor());
+ setResult(RESULT_OK);
+ finish();
+ } else {
+ binding.addButton.setEnabled(true);
+ ExceptionDialogFragment.newInstance(new IllegalStateException("Created account is null.")).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }));
+ } catch (Throwable e) {
+ e.printStackTrace();
+ runOnUiThread(() -> {
+ binding.addButton.setEnabled(true);
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ });
+ }
+ }).start();
+ });
+ } catch (AccountImportCancelledException e) {
+ runOnUiThread(() -> binding.addButton.setEnabled(true));
+ Log.i(TAG, "Account import has been canceled.");
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ AccountImporter.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
index 0a23f67a..105eb8f3 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
@@ -24,7 +24,6 @@ import it.niedermann.owncloud.notes.persistence.NotesDatabase;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;
-import static it.niedermann.owncloud.notes.main.MainActivity.manage_account;
/**
* Displays all available {@link Account} entries and provides basic operations for them, like adding or switching
@@ -93,7 +92,7 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
});
binding.manageAccounts.setOnClickListener((v) -> {
- requireActivity().startActivityForResult(new Intent(requireContext(), ManageAccountsActivity.class), manage_account);
+ requireActivity().startActivity(new Intent(requireContext(), ManageAccountsActivity.class));
dismiss();
});
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/ImportViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/ImportViewModel.java
new file mode 100644
index 00000000..bc382daa
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/ImportViewModel.java
@@ -0,0 +1,74 @@
+package it.niedermann.owncloud.notes.main;
+
+import android.app.Application;
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.WorkerThread;
+import androidx.core.util.Pair;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import com.nextcloud.android.sso.AccountImporter;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
+import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
+import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.model.SingleSignOnAccount;
+
+import java.net.HttpURLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import it.niedermann.owncloud.notes.R;
+import it.niedermann.owncloud.notes.branding.BrandingUtil;
+import it.niedermann.owncloud.notes.main.navigation.NavigationAdapter;
+import it.niedermann.owncloud.notes.main.navigation.NavigationItem;
+import it.niedermann.owncloud.notes.persistence.CapabilitiesClient;
+import it.niedermann.owncloud.notes.persistence.NoteServerSyncHelper;
+import it.niedermann.owncloud.notes.persistence.NotesDatabase;
+import it.niedermann.owncloud.notes.persistence.entity.Account;
+import it.niedermann.owncloud.notes.persistence.entity.Category;
+import it.niedermann.owncloud.notes.persistence.entity.CategoryWithNotesCount;
+import it.niedermann.owncloud.notes.persistence.entity.NoteWithCategory;
+import it.niedermann.owncloud.notes.persistence.entity.SingleNoteWidgetData;
+import it.niedermann.owncloud.notes.shared.model.Capabilities;
+import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod;
+import it.niedermann.owncloud.notes.shared.model.ISyncCallback;
+import it.niedermann.owncloud.notes.shared.model.Item;
+import it.niedermann.owncloud.notes.shared.model.NavigationCategory;
+
+import static androidx.lifecycle.Transformations.distinctUntilChanged;
+import static androidx.lifecycle.Transformations.map;
+import static androidx.lifecycle.Transformations.switchMap;
+import static it.niedermann.owncloud.notes.main.MainActivity.ADAPTER_KEY_RECENT;
+import static it.niedermann.owncloud.notes.main.MainActivity.ADAPTER_KEY_STARRED;
+import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByCategory;
+import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByInitials;
+import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByTime;
+import static it.niedermann.owncloud.notes.shared.model.CategorySortingMethod.SORT_MODIFIED_DESC;
+import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.DEFAULT_CATEGORY;
+import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES;
+import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT;
+import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.UNCATEGORIZED;
+import static it.niedermann.owncloud.notes.shared.util.DisplayUtils.convertToCategoryNavigationItem;
+
+public class ImportViewModel extends AndroidViewModel {
+
+ private static final String TAG = ImportViewModel.class.getSimpleName();
+
+ @NonNull
+ private final NotesDatabase db;
+
+ public ImportViewModel(@NonNull Application application) {
+ super(application);
+ this.db = NotesDatabase.getInstance(application.getApplicationContext());
+ }
+
+ public LiveData<Account> addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities) {
+ return db.addAccount(url, username, accountName, capabilities);
+ }
+}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
index 49f796ef..9bdc3371 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
@@ -47,6 +47,7 @@ import com.nextcloud.android.sso.model.SingleSignOnAccount;
import java.util.List;
+import it.niedermann.owncloud.notes.ImportAccountActivity;
import it.niedermann.owncloud.notes.LockedActivity;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.accountpicker.AccountPickerListener;
@@ -107,14 +108,11 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
private final static int create_note_cmd = 0;
private final static int show_single_note_cmd = 1;
- public final static int manage_account = 4;
protected ItemAdapter adapter;
private NavigationAdapter adapterCategories;
private MenuAdapter menuAdapter;
- private boolean notAuthorizedAccountHandled = false;
-
protected SingleSignOnAccount ssoAccount;
protected Account localAccount;
@@ -133,12 +131,12 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
super.onCreate(savedInstanceState);
mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
-
CapabilitiesWorker.update(this);
binding = DrawerLayoutBinding.inflate(getLayoutInflater());
activityBinding = ActivityNotesListViewBinding.bind(binding.activityNotesListView.getRoot());
setContentView(binding.getRoot());
+
this.coordinatorLayout = binding.activityNotesListView.activityNotesListView;
this.swipeRefreshLayout = binding.activityNotesListView.swiperefreshlayout;
this.fabCreate = binding.activityNotesListView.fabCreate;
@@ -154,6 +152,18 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
setupNavigationList();
setupNotesList();
+ mainViewModel.getAccountsCount().observe(this, (count) -> {
+ if (count == 0) {
+ startActivityForResult(new Intent(this, ImportAccountActivity.class), ImportAccountActivity.REQUEST_CODE_IMPORT_ACCOUNT);
+ } else {
+ try {
+ mainViewModel.postCurrentAccount(mainViewModel.getLocalAccountByAccountName(SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()).name));
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }
+ });
+
mainViewModel.hasMultipleAccountsConfigured().observe(this, (hasMultipleAccountsConfigured) -> canMoveNoteToAnotherAccounts = hasMultipleAccountsConfigured);
mainViewModel.getSyncStatus().observe(this, (syncStatus) -> swipeRefreshLayout.setRefreshing(syncStatus));
mainViewModel.getSyncErrors().observe(this, (exceptions) -> BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG)
@@ -245,15 +255,10 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
}
} catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
Log.i(TAG, "Tried to select account, but got an " + e.getClass().getSimpleName() + ". Asking for importing an account...");
- handleNotAuthorizedAccount();
}
fabCreate.show();
activityBinding.launchAccountSwitcher.setOnClickListener((v) -> {
- if (localAccount == null) {
- handleNotAuthorizedAccount();
- } else {
- AccountSwitcherDialog.newInstance(localAccount.getId()).show(getSupportFragmentManager(), AccountSwitcherDialog.class.getSimpleName());
- }
+ AccountSwitcherDialog.newInstance(localAccount.getId()).show(getSupportFragmentManager(), AccountSwitcherDialog.class.getSimpleName());
});
if (menuAdapter == null) {
@@ -275,43 +280,13 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
@Override
protected void onResume() {
- try {
- ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext());
- if (localAccount == null || !localAccount.getAccountName().equals(ssoAccount.name)) {
- Account account = mainViewModel.getLocalAccountByAccountName(ssoAccount.name);
- if (account == null) {
- askForNewAccount(this);
- } else {
- mainViewModel.postCurrentAccount(account);
- }
- }
- } catch (NoCurrentAccountSelectedException | NextcloudFilesAppAccountNotFoundException e) {
- if (localAccount == null) {
- List<Account> localAccounts = mainViewModel.getAccounts();
- if (localAccounts.size() > 0) {
- mainViewModel.postCurrentAccount(localAccount);
- }
- }
- if (!notAuthorizedAccountHandled) {
- handleNotAuthorizedAccount();
- }
- }
-
// refresh and sync every time the activity gets
- if (localAccount != null) {
- if (!mainViewModel.synchronize(ssoAccount)) {
- BrandedSnackbar.make(coordinatorLayout, getString(R.string.error_sync, getString(R.string.error_no_network)), Snackbar.LENGTH_LONG).show();
- }
+ if (!mainViewModel.synchronize(ssoAccount)) {
+ BrandedSnackbar.make(coordinatorLayout, getString(R.string.error_sync, getString(R.string.error_no_network)), Snackbar.LENGTH_LONG).show();
}
super.onResume();
}
- private void handleNotAuthorizedAccount() {
- fabCreate.hide();
- askForNewAccount(this);
- notAuthorizedAccountHandled = true;
- }
-
private void setupToolbars() {
setSupportActionBar(binding.activityNotesListView.toolbar);
activityBinding.homeToolbar.setOnClickListener((v) -> {
@@ -320,7 +295,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
}
});
- activityBinding.launchAccountSwitcher.setOnClickListener((v) -> askForNewAccount(this));
activityBinding.menuButton.setOnClickListener((v) -> binding.drawerLayout.openDrawer(GravityCompat.START));
final LinearLayout searchEditFrame = activityBinding.searchView.findViewById(R.id.search_edit_frame);
@@ -408,7 +382,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
Log.i(TAG, "Clearing Glide disk cache");
Glide.get(getApplicationContext()).clearDiskCache();
}).start();
- Log.i(TAG, "Refreshing capabilities for " + ssoAccount.name);
final LiveData<Boolean> syncLiveData = mainViewModel.performFullSynchronizationForCurrentAccount();
final Observer<Boolean> syncObserver = syncSuccess -> {
if (!syncSuccess) {
@@ -568,13 +541,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
recreate();
break;
}
- case manage_account: {
- if (resultCode == RESULT_FIRST_USER) {
- recreate(); // TODO
- askForNewAccount(this);
- }
- break;
- }
default: {
try {
AccountImporter.onActivityResult(requestCode, resultCode, data, this, (ssoAccount) -> {
@@ -589,9 +555,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
Log.i(TAG, capabilities.toString());
runOnUiThread(() -> mainViewModel.postCurrentAccount(mainViewModel.getLocalAccountByAccountName(ssoAccount.name)));
}));
- } catch (SQLiteException e) {
- // Happens when upgrading from version ≤ 1.0.1 and importing the account
- runOnUiThread(() -> mainViewModel.postCurrentAccount(mainViewModel.getLocalAccountByAccountName(ssoAccount.name)));
} catch (Exception e) {
// Happens when importing an already existing account the second time
if (e instanceof TokenMismatchException && mainViewModel.getLocalAccountByAccountName(ssoAccount.name) != null) {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java
index c93e8bdd..47079011 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java
@@ -358,6 +358,7 @@ public class MainViewModel extends AndroidViewModel {
if (currentAccount == null) {
return insufficientInformation;
} else {
+ Log.i(TAG, "[performFullSynchronizationForCurrentAccount] Refreshing capabilities for " + currentAccount.getAccountName());
MutableLiveData<Boolean> syncSuccess = new MutableLiveData<>();
new Thread(() -> {
try {
@@ -448,4 +449,8 @@ public class MainViewModel extends AndroidViewModel {
public void createOrUpdateSingleNoteWidgetData(SingleNoteWidgetData data) {
db.getWidgetSingleNoteDao().createOrUpdateSingleNoteWidgetData(data);
}
+
+ public LiveData<Integer> getAccountsCount() {
+ return db.getAccountDao().getAccountsCountLiveData();
+ }
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
index 5bcbb4a5..00dd9d0e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
@@ -3,7 +3,6 @@ package it.niedermann.owncloud.notes.manageaccounts;
import android.os.Bundle;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.LiveData;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
@@ -50,7 +49,7 @@ public class ManageAccountsActivity extends LockedActivity {
SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccounts.get(0).getAccountName());
adapter.setCurrentLocalAccount(localAccounts.get(0));
} else {
- setResult(AppCompatActivity.RESULT_FIRST_USER);
+ SingleAccountHelper.setCurrentAccount(getApplicationContext(), null);
finish();
}
deleteLiveData.removeObservers(this);
diff --git a/app/src/main/res/layout/activity_import_account.xml b/app/src/main/res/layout/activity_import_account.xml
new file mode 100644
index 00000000..4ad83f02
--- /dev/null
+++ b/app/src/main/res/layout/activity_import_account.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/scrollView"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true">
+
+ <RelativeLayout
+ android:id="@+id/relativeLayout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="@dimen/spacer_2x">
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/image"
+ android:layout_width="match_parent"
+ android:layout_height="96dp"
+ android:layout_above="@+id/welcome_text"
+ android:layout_gravity="center"
+ android:layout_marginBottom="32dp"
+ android:contentDescription="@null"
+ android:tint="@color/fg_secondary"
+ app:srcCompat="@drawable/ic_launcher_foreground_full" />
+
+ <TextView
+ android:id="@+id/welcome_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:layout_centerVertical="true"
+ android:layout_marginBottom="48dp"
+ android:gravity="center_horizontal"
+ android:textSize="24sp"
+ tools:text="Welcome to Nextcloud Notes" />
+
+ <Button
+ android:id="@+id/add_button"
+ style="@style/Widget.AppCompat.Button.Colored"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/welcome_text"
+ android:layout_centerHorizontal="true"
+ android:paddingStart="32dp"
+ android:paddingTop="24dp"
+ android:paddingEnd="32dp"
+ android:paddingBottom="24dp"
+ android:text="@string/choose_account"
+ app:backgroundTint="@color/defaultBrand" />
+
+ <ProgressBar
+ android:id="@+id/progress_circular"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/add_button"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="32dp"
+ android:indeterminateTint="@color/defaultBrand"
+ android:visibility="gone" />
+ </RelativeLayout>
+</ScrollView> \ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 39559c4c..8efeb927 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -18,6 +18,7 @@
<color name="fg_default_selection">#333333</color>
<color name="fg_default_low">#666666</color>
<color name="fg_default_high">#cccccc</color>
+ <color name="fg_secondary">#999999</color>
<color name="fg_contrast">#ffffff</color>
<color name="icon_color_default">#757575</color>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9c48717a..60a3809d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
<string name="label_all_notes">All notes</string>
<string name="label_favorites">Favorites</string>
<string name="action_create">New note</string>
+ <string name="welcome_text">Welcome to %1$s</string>
<string name="action_settings">Settings</string>
<string name="action_trashbin">Deleted notes</string>
<string name="action_search">Search</string>
@@ -314,4 +315,5 @@
<string name="error_action_open_deck_info">Open App info</string>
<string name="error_action_open_network">Network settings</string>
<string name="no_other_accounts">You don\'t have configured any other accounts yet.</string>
+ <string name="choose_account">Choose account</string>
</resources>