Loading app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +84 −101 Original line number Original line Diff line number Diff line Loading @@ -43,13 +43,10 @@ import com.bumptech.glide.request.RequestOptions; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.model.SingleSignOnAccount; import com.nextcloud.android.sso.model.SingleSignOnAccount; import com.nextcloud.android.sso.ui.UiExceptionManager; import java.net.MalformedURLException; import java.net.MalformedURLException; import java.net.URL; import java.net.URL; Loading @@ -74,6 +71,7 @@ import it.niedermann.owncloud.notes.util.NoteUtil; import it.niedermann.owncloud.notes.util.NotesClientUtil; import it.niedermann.owncloud.notes.util.NotesClientUtil; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; import static it.niedermann.owncloud.notes.util.SSOUtil.askForNewAccount; public class NotesListViewActivity extends AppCompatActivity implements ItemAdapter.NoteClickListener { public class NotesListViewActivity extends AppCompatActivity implements ItemAdapter.NoteClickListener { Loading Loading @@ -199,18 +197,16 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap setupNavigationMenu(); setupNavigationMenu(); setupNotesList(); setupNotesList(); try { try { // to get current account from SingleAccountHelper localAccount = db.getLocalAccountByAccountName(SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()).name); selectAccount(SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()).name); Log.v("Notes", "NextcloudRequest account: " + localAccount); Log.v("Notes", "NextcloudRequest account: " + localAccount); } catch (NextcloudFilesAppAccountNotFoundException e) { } catch (NextcloudFilesAppAccountNotFoundException e) { e.printStackTrace(); e.printStackTrace(); } catch (NoCurrentAccountSelectedException e) { } catch (NoCurrentAccountSelectedException e) { if (db.hasAccounts()) { if (db.hasAccounts()) { // If nothing is stored in SingleAccountHelper, check db for accounts localAccount = db.getAccount(1); selectAccount(db.getAccounts().get(0).getAccountName()); SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); } else { } else { askForNewAccount(); askForNewAccount(this); } } } } Loading @@ -235,17 +231,50 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap //} //} } } private void askForNewAccount() { @Override try { protected void onResume() { AccountImporter.pickNewAccount(this); // refresh and sync every time the activity gets } catch (NextcloudFilesAppNotInstalledException e1) { if (localAccount != null) { UiExceptionManager.showDialogForException(this, e1); refreshLists(); Log.w(NotesListViewActivity.class.toString(), "============================================================="); db.getNoteServerSyncHelper().addCallbackPull(syncCallBack); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); if (db.getNoteServerSyncHelper().isSyncPossible()) { e1.printStackTrace(); synchronize(); } catch (AndroidGetAccountsPermissionNotGranted e2) { } AccountImporter.requestAndroidAccountPermissionsAndPickAccount(this); } super.onResume(); } } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.syncState(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); if (localAccount != null) { outState.putSerializable(SAVED_STATE_NAVIGATION_SELECTION, navigationSelection); outState.putString(SAVED_STATE_NAVIGATION_ADAPTER_SLECTION, adapterCategories.getSelectedItem()); outState.putString(SAVED_STATE_NAVIGATION_OPEN, navigationOpen); } } private void selectAccount(String accountName) { SingleAccountHelper.setCurrentAccount(getApplicationContext(), accountName); localAccount = db.getLocalAccountByAccountName(accountName); db.getNoteServerSyncHelper().updateAccount(); synchronize(); refreshLists(); setupHeader(); setupNavigationList(ADAPTER_KEY_RECENT); updateUsernameInDrawer(); } } private void setupHeader() { private void setupHeader() { Loading @@ -260,14 +289,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap .apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.circleCropTransform()) .into(((ImageView) v.findViewById(R.id.accountItemAvatar))); .into(((ImageView) v.findViewById(R.id.accountItemAvatar))); v.setOnClickListener(clickedView -> { v.setOnClickListener(clickedView -> { SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.getAccountName()); selectAccount(account.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); localAccount = db.getLocalAccountByAccountName(account.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); synchronize(); refreshLists(); setupHeader(); updateUsernameInDrawer(); headerView.performClick(); headerView.performClick(); drawerLayout.closeDrawer(GravityCompat.START); drawerLayout.closeDrawer(GravityCompat.START); }); }); Loading @@ -277,15 +299,10 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap List<LocalAccount> remainingAccounts = db.getAccounts(); List<LocalAccount> remainingAccounts = db.getAccounts(); if (remainingAccounts.size() > 0) { if (remainingAccounts.size() > 0) { localAccount = remainingAccounts.get(0); localAccount = remainingAccounts.get(0); SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()); selectAccount(localAccount.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); synchronize(); updateUsernameInDrawer(); } else { } else { localAccount = null; selectAccount(null); SingleAccountHelper.setCurrentAccount(getApplicationContext(), null); askForNewAccount(this); db.getNoteServerSyncHelper().updateAccount(); recreate(); } } } } setupHeader(); setupHeader(); Loading @@ -297,18 +314,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap View addButton = getLayoutInflater().inflate(R.layout.item_account, null); View addButton = getLayoutInflater().inflate(R.layout.item_account, null); ((TextView) addButton.findViewById(R.id.accountItemLabel)).setText(getString(R.string.add_account)); ((TextView) addButton.findViewById(R.id.accountItemLabel)).setText(getString(R.string.add_account)); ((AppCompatImageView) addButton.findViewById(R.id.accountItemAvatar)).setImageResource(R.drawable.ic_person_add_grey600_24dp); ((AppCompatImageView) addButton.findViewById(R.id.accountItemAvatar)).setImageResource(R.drawable.ic_person_add_grey600_24dp); addButton.setOnClickListener((btn) -> { addButton.setOnClickListener((btn) -> askForNewAccount(this)); try { AccountImporter.pickNewAccount(this); } catch (NextcloudFilesAppNotInstalledException e1) { UiExceptionManager.showDialogForException(this, e1); Log.w(NotesListViewActivity.class.toString(), "============================================================="); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); e1.printStackTrace(); } catch (AndroidGetAccountsPermissionNotGranted e2) { AccountImporter.requestAndroidAccountPermissionsAndPickAccount(this); } }); addButton.findViewById(R.id.delete).setVisibility(View.GONE); addButton.findViewById(R.id.delete).setVisibility(View.GONE); accountChooser.addView(addButton); accountChooser.addView(addButton); headerView.setOnClickListener((view) -> { headerView.setOnClickListener((view) -> { Loading @@ -324,41 +330,6 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap }); }); } } @Override protected void onResume() { // refresh and sync every time the activity gets if (localAccount != null) { refreshLists(); db.getNoteServerSyncHelper().addCallbackPull(syncCallBack); if (db.getNoteServerSyncHelper().isSyncPossible()) { synchronize(); } } super.onResume(); } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.syncState(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); if (localAccount != null) { outState.putSerializable(SAVED_STATE_NAVIGATION_SELECTION, navigationSelection); outState.putString(SAVED_STATE_NAVIGATION_ADAPTER_SLECTION, adapterCategories.getSelectedItem()); outState.putString(SAVED_STATE_NAVIGATION_OPEN, navigationOpen); } } private void setupActionBar() { private void setupActionBar() { setSupportActionBar(toolbar); setSupportActionBar(toolbar); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.action_drawer_open, R.string.action_drawer_close); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.action_drawer_open, R.string.action_drawer_close); Loading Loading @@ -456,6 +427,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationAdapter.NavigationItem>> { private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationAdapter.NavigationItem>> { @Override @Override protected List<NavigationAdapter.NavigationItem> doInBackground(Void... voids) { protected List<NavigationAdapter.NavigationItem> doInBackground(Void... voids) { if(localAccount == null) { return new ArrayList<>(); } List<NavigationAdapter.NavigationItem> categories = db.getCategories(localAccount.getId()); List<NavigationAdapter.NavigationItem> categories = db.getCategories(localAccount.getId()); if (!categories.isEmpty() && categories.get(0).label.isEmpty()) { if (!categories.isEmpty() && categories.get(0).label.isEmpty()) { itemUncategorized = categories.get(0); itemUncategorized = categories.get(0); Loading Loading @@ -649,6 +623,11 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap } } private void refreshLists(final boolean scrollToTop) { private void refreshLists(final boolean scrollToTop) { if (localAccount == null) { fabCreate.hide(); adapter.removeAll(); return; } fabCreate.show(); fabCreate.show(); String subtitle; String subtitle; if (navigationSelection.category != null) { if (navigationSelection.category != null) { Loading Loading @@ -761,13 +740,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap AccountImporter.onActivityResult(requestCode, resultCode, data, this, (SingleSignOnAccount account) -> { AccountImporter.onActivityResult(requestCode, resultCode, data, this, (SingleSignOnAccount account) -> { Log.v("Notes", "Added account: " + "name:" + account.name + ", " + account.url + ", userId" + account.userId); Log.v("Notes", "Added account: " + "name:" + account.name + ", " + account.url + ", userId" + account.userId); localAccount = db.getAccount(db.addAccount(account.url, account.userId, account.name, account.token)); db.addAccount(account.url, account.userId, account.name, account.token); SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.name); selectAccount(account.name); db.getNoteServerSyncHelper().updateAccount(); headerView.performClick(); synchronize(); refreshLists(); setupHeader(); updateUsernameInDrawer(); drawerLayout.closeDrawer(GravityCompat.START); drawerLayout.closeDrawer(GravityCompat.START); }); }); Loading Loading @@ -799,23 +774,31 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap private void updateUsernameInDrawer() { private void updateUsernameInDrawer() { try { try { SingleSignOnAccount a = SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()); String url = localAccount.getUrl(); String url = a.url; if (url != null) { if (url != null) { String croppedUrl = new URL(url).getHost(); String croppedUrl = url; this.account.setText(a.userId + "@" + croppedUrl); try { croppedUrl = new URL(url).getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } this.account.setText(localAccount.getUserName() + "@" + croppedUrl); Glide Glide .with(this) .with(this) .load(url + "/index.php/avatar/" + Uri.encode(a.userId) + "/64") .load(url + "/index.php/avatar/" + Uri.encode(localAccount.getUserName()) + "/64") .error(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.circleCropTransform()) .into(this.currentAccountImage); .into(this.currentAccountImage); } else { } else { Log.w(NotesListViewActivity.class.getSimpleName(), "url is null"); Log.w(NotesListViewActivity.class.getSimpleName(), "url is null"); } } } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { } catch (NullPointerException e) { e.printStackTrace(); this.account.setText(R.string.app_name_long); } catch (MalformedURLException e) { Glide .with(this) .load(R.mipmap.ic_launcher) .apply(RequestOptions.circleCropTransform()) .into(this.currentAccountImage); e.printStackTrace(); e.printStackTrace(); } } } } Loading app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -704,6 +704,9 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper { } } public LocalAccount getLocalAccountByAccountName(String accountName) { public LocalAccount getLocalAccountByAccountName(String accountName) { if(accountName == null) { return null; } SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(table_accounts, new String[]{key_id, key_url, key_account_name, key_username, key_display_name, key_token}, key_account_name + " = ?", new String[]{accountName}, null, null, null, null); Cursor cursor = db.query(table_accounts, new String[]{key_id, key_url, key_account_name, key_username, key_display_name, key_token}, key_account_name + " = ?", new String[]{accountName}, null, null, null, null); LocalAccount account = new LocalAccount(); LocalAccount account = new LocalAccount(); Loading app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java +6 −0 Original line number Original line Diff line number Diff line package it.niedermann.owncloud.notes.util; package it.niedermann.owncloud.notes.util; import android.content.Context; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; Loading @@ -13,6 +14,11 @@ import it.niedermann.owncloud.notes.R; * Created by stefan on 06.10.15. * Created by stefan on 06.10.15. */ */ public class NoteUtil { public class NoteUtil { private NoteUtil() { } private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE); private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE); private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE); private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE); private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE); private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE); Loading app/src/main/java/it/niedermann/owncloud/notes/util/SSOUtil.java 0 → 100644 +31 −0 Original line number Original line Diff line number Diff line package it.niedermann.owncloud.notes.util; import android.app.Activity; import android.util.Log; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; import com.nextcloud.android.sso.ui.UiExceptionManager; import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; public class SSOUtil { private SSOUtil() { } public static void askForNewAccount(Activity activity) { try { AccountImporter.pickNewAccount(activity); } catch (NextcloudFilesAppNotInstalledException e1) { UiExceptionManager.showDialogForException(activity, e1); Log.w(NotesListViewActivity.class.toString(), "============================================================="); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); e1.printStackTrace(); } catch (AndroidGetAccountsPermissionNotGranted e2) { AccountImporter.requestAndroidAccountPermissionsAndPickAccount(activity); } } } Loading
app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +84 −101 Original line number Original line Diff line number Diff line Loading @@ -43,13 +43,10 @@ import com.bumptech.glide.request.RequestOptions; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.model.SingleSignOnAccount; import com.nextcloud.android.sso.model.SingleSignOnAccount; import com.nextcloud.android.sso.ui.UiExceptionManager; import java.net.MalformedURLException; import java.net.MalformedURLException; import java.net.URL; import java.net.URL; Loading @@ -74,6 +71,7 @@ import it.niedermann.owncloud.notes.util.NoteUtil; import it.niedermann.owncloud.notes.util.NotesClientUtil; import it.niedermann.owncloud.notes.util.NotesClientUtil; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; import static it.niedermann.owncloud.notes.util.SSOUtil.askForNewAccount; public class NotesListViewActivity extends AppCompatActivity implements ItemAdapter.NoteClickListener { public class NotesListViewActivity extends AppCompatActivity implements ItemAdapter.NoteClickListener { Loading Loading @@ -199,18 +197,16 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap setupNavigationMenu(); setupNavigationMenu(); setupNotesList(); setupNotesList(); try { try { // to get current account from SingleAccountHelper localAccount = db.getLocalAccountByAccountName(SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()).name); selectAccount(SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()).name); Log.v("Notes", "NextcloudRequest account: " + localAccount); Log.v("Notes", "NextcloudRequest account: " + localAccount); } catch (NextcloudFilesAppAccountNotFoundException e) { } catch (NextcloudFilesAppAccountNotFoundException e) { e.printStackTrace(); e.printStackTrace(); } catch (NoCurrentAccountSelectedException e) { } catch (NoCurrentAccountSelectedException e) { if (db.hasAccounts()) { if (db.hasAccounts()) { // If nothing is stored in SingleAccountHelper, check db for accounts localAccount = db.getAccount(1); selectAccount(db.getAccounts().get(0).getAccountName()); SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); } else { } else { askForNewAccount(); askForNewAccount(this); } } } } Loading @@ -235,17 +231,50 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap //} //} } } private void askForNewAccount() { @Override try { protected void onResume() { AccountImporter.pickNewAccount(this); // refresh and sync every time the activity gets } catch (NextcloudFilesAppNotInstalledException e1) { if (localAccount != null) { UiExceptionManager.showDialogForException(this, e1); refreshLists(); Log.w(NotesListViewActivity.class.toString(), "============================================================="); db.getNoteServerSyncHelper().addCallbackPull(syncCallBack); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); if (db.getNoteServerSyncHelper().isSyncPossible()) { e1.printStackTrace(); synchronize(); } catch (AndroidGetAccountsPermissionNotGranted e2) { } AccountImporter.requestAndroidAccountPermissionsAndPickAccount(this); } super.onResume(); } } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.syncState(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); if (localAccount != null) { outState.putSerializable(SAVED_STATE_NAVIGATION_SELECTION, navigationSelection); outState.putString(SAVED_STATE_NAVIGATION_ADAPTER_SLECTION, adapterCategories.getSelectedItem()); outState.putString(SAVED_STATE_NAVIGATION_OPEN, navigationOpen); } } private void selectAccount(String accountName) { SingleAccountHelper.setCurrentAccount(getApplicationContext(), accountName); localAccount = db.getLocalAccountByAccountName(accountName); db.getNoteServerSyncHelper().updateAccount(); synchronize(); refreshLists(); setupHeader(); setupNavigationList(ADAPTER_KEY_RECENT); updateUsernameInDrawer(); } } private void setupHeader() { private void setupHeader() { Loading @@ -260,14 +289,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap .apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.circleCropTransform()) .into(((ImageView) v.findViewById(R.id.accountItemAvatar))); .into(((ImageView) v.findViewById(R.id.accountItemAvatar))); v.setOnClickListener(clickedView -> { v.setOnClickListener(clickedView -> { SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.getAccountName()); selectAccount(account.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); localAccount = db.getLocalAccountByAccountName(account.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); synchronize(); refreshLists(); setupHeader(); updateUsernameInDrawer(); headerView.performClick(); headerView.performClick(); drawerLayout.closeDrawer(GravityCompat.START); drawerLayout.closeDrawer(GravityCompat.START); }); }); Loading @@ -277,15 +299,10 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap List<LocalAccount> remainingAccounts = db.getAccounts(); List<LocalAccount> remainingAccounts = db.getAccounts(); if (remainingAccounts.size() > 0) { if (remainingAccounts.size() > 0) { localAccount = remainingAccounts.get(0); localAccount = remainingAccounts.get(0); SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()); selectAccount(localAccount.getAccountName()); db.getNoteServerSyncHelper().updateAccount(); synchronize(); updateUsernameInDrawer(); } else { } else { localAccount = null; selectAccount(null); SingleAccountHelper.setCurrentAccount(getApplicationContext(), null); askForNewAccount(this); db.getNoteServerSyncHelper().updateAccount(); recreate(); } } } } setupHeader(); setupHeader(); Loading @@ -297,18 +314,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap View addButton = getLayoutInflater().inflate(R.layout.item_account, null); View addButton = getLayoutInflater().inflate(R.layout.item_account, null); ((TextView) addButton.findViewById(R.id.accountItemLabel)).setText(getString(R.string.add_account)); ((TextView) addButton.findViewById(R.id.accountItemLabel)).setText(getString(R.string.add_account)); ((AppCompatImageView) addButton.findViewById(R.id.accountItemAvatar)).setImageResource(R.drawable.ic_person_add_grey600_24dp); ((AppCompatImageView) addButton.findViewById(R.id.accountItemAvatar)).setImageResource(R.drawable.ic_person_add_grey600_24dp); addButton.setOnClickListener((btn) -> { addButton.setOnClickListener((btn) -> askForNewAccount(this)); try { AccountImporter.pickNewAccount(this); } catch (NextcloudFilesAppNotInstalledException e1) { UiExceptionManager.showDialogForException(this, e1); Log.w(NotesListViewActivity.class.toString(), "============================================================="); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); e1.printStackTrace(); } catch (AndroidGetAccountsPermissionNotGranted e2) { AccountImporter.requestAndroidAccountPermissionsAndPickAccount(this); } }); addButton.findViewById(R.id.delete).setVisibility(View.GONE); addButton.findViewById(R.id.delete).setVisibility(View.GONE); accountChooser.addView(addButton); accountChooser.addView(addButton); headerView.setOnClickListener((view) -> { headerView.setOnClickListener((view) -> { Loading @@ -324,41 +330,6 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap }); }); } } @Override protected void onResume() { // refresh and sync every time the activity gets if (localAccount != null) { refreshLists(); db.getNoteServerSyncHelper().addCallbackPull(syncCallBack); if (db.getNoteServerSyncHelper().isSyncPossible()) { synchronize(); } } super.onResume(); } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.syncState(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); if (localAccount != null) { outState.putSerializable(SAVED_STATE_NAVIGATION_SELECTION, navigationSelection); outState.putString(SAVED_STATE_NAVIGATION_ADAPTER_SLECTION, adapterCategories.getSelectedItem()); outState.putString(SAVED_STATE_NAVIGATION_OPEN, navigationOpen); } } private void setupActionBar() { private void setupActionBar() { setSupportActionBar(toolbar); setSupportActionBar(toolbar); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.action_drawer_open, R.string.action_drawer_close); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.action_drawer_open, R.string.action_drawer_close); Loading Loading @@ -456,6 +427,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationAdapter.NavigationItem>> { private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationAdapter.NavigationItem>> { @Override @Override protected List<NavigationAdapter.NavigationItem> doInBackground(Void... voids) { protected List<NavigationAdapter.NavigationItem> doInBackground(Void... voids) { if(localAccount == null) { return new ArrayList<>(); } List<NavigationAdapter.NavigationItem> categories = db.getCategories(localAccount.getId()); List<NavigationAdapter.NavigationItem> categories = db.getCategories(localAccount.getId()); if (!categories.isEmpty() && categories.get(0).label.isEmpty()) { if (!categories.isEmpty() && categories.get(0).label.isEmpty()) { itemUncategorized = categories.get(0); itemUncategorized = categories.get(0); Loading Loading @@ -649,6 +623,11 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap } } private void refreshLists(final boolean scrollToTop) { private void refreshLists(final boolean scrollToTop) { if (localAccount == null) { fabCreate.hide(); adapter.removeAll(); return; } fabCreate.show(); fabCreate.show(); String subtitle; String subtitle; if (navigationSelection.category != null) { if (navigationSelection.category != null) { Loading Loading @@ -761,13 +740,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap AccountImporter.onActivityResult(requestCode, resultCode, data, this, (SingleSignOnAccount account) -> { AccountImporter.onActivityResult(requestCode, resultCode, data, this, (SingleSignOnAccount account) -> { Log.v("Notes", "Added account: " + "name:" + account.name + ", " + account.url + ", userId" + account.userId); Log.v("Notes", "Added account: " + "name:" + account.name + ", " + account.url + ", userId" + account.userId); localAccount = db.getAccount(db.addAccount(account.url, account.userId, account.name, account.token)); db.addAccount(account.url, account.userId, account.name, account.token); SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.name); selectAccount(account.name); db.getNoteServerSyncHelper().updateAccount(); headerView.performClick(); synchronize(); refreshLists(); setupHeader(); updateUsernameInDrawer(); drawerLayout.closeDrawer(GravityCompat.START); drawerLayout.closeDrawer(GravityCompat.START); }); }); Loading Loading @@ -799,23 +774,31 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap private void updateUsernameInDrawer() { private void updateUsernameInDrawer() { try { try { SingleSignOnAccount a = SingleAccountHelper.getCurrentSingleSignOnAccount(getApplicationContext()); String url = localAccount.getUrl(); String url = a.url; if (url != null) { if (url != null) { String croppedUrl = new URL(url).getHost(); String croppedUrl = url; this.account.setText(a.userId + "@" + croppedUrl); try { croppedUrl = new URL(url).getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } this.account.setText(localAccount.getUserName() + "@" + croppedUrl); Glide Glide .with(this) .with(this) .load(url + "/index.php/avatar/" + Uri.encode(a.userId) + "/64") .load(url + "/index.php/avatar/" + Uri.encode(localAccount.getUserName()) + "/64") .error(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.circleCropTransform()) .into(this.currentAccountImage); .into(this.currentAccountImage); } else { } else { Log.w(NotesListViewActivity.class.getSimpleName(), "url is null"); Log.w(NotesListViewActivity.class.getSimpleName(), "url is null"); } } } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { } catch (NullPointerException e) { e.printStackTrace(); this.account.setText(R.string.app_name_long); } catch (MalformedURLException e) { Glide .with(this) .load(R.mipmap.ic_launcher) .apply(RequestOptions.circleCropTransform()) .into(this.currentAccountImage); e.printStackTrace(); e.printStackTrace(); } } } } Loading
app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -704,6 +704,9 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper { } } public LocalAccount getLocalAccountByAccountName(String accountName) { public LocalAccount getLocalAccountByAccountName(String accountName) { if(accountName == null) { return null; } SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(table_accounts, new String[]{key_id, key_url, key_account_name, key_username, key_display_name, key_token}, key_account_name + " = ?", new String[]{accountName}, null, null, null, null); Cursor cursor = db.query(table_accounts, new String[]{key_id, key_url, key_account_name, key_username, key_display_name, key_token}, key_account_name + " = ?", new String[]{accountName}, null, null, null, null); LocalAccount account = new LocalAccount(); LocalAccount account = new LocalAccount(); Loading
app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java +6 −0 Original line number Original line Diff line number Diff line package it.niedermann.owncloud.notes.util; package it.niedermann.owncloud.notes.util; import android.content.Context; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; Loading @@ -13,6 +14,11 @@ import it.niedermann.owncloud.notes.R; * Created by stefan on 06.10.15. * Created by stefan on 06.10.15. */ */ public class NoteUtil { public class NoteUtil { private NoteUtil() { } private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE); private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE); private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE); private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE); private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE); private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE); Loading
app/src/main/java/it/niedermann/owncloud/notes/util/SSOUtil.java 0 → 100644 +31 −0 Original line number Original line Diff line number Diff line package it.niedermann.owncloud.notes.util; import android.app.Activity; import android.util.Log; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; import com.nextcloud.android.sso.ui.UiExceptionManager; import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; public class SSOUtil { private SSOUtil() { } public static void askForNewAccount(Activity activity) { try { AccountImporter.pickNewAccount(activity); } catch (NextcloudFilesAppNotInstalledException e1) { UiExceptionManager.showDialogForException(activity, e1); Log.w(NotesListViewActivity.class.toString(), "============================================================="); Log.w(NotesListViewActivity.class.toString(), "Nextcloud app is not installed. Cannot choose account"); e1.printStackTrace(); } catch (AndroidGetAccountsPermissionNotGranted e2) { AccountImporter.requestAndroidAccountPermissionsAndPickAccount(activity); } } }