Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bde70bd2 authored by stefan-niedermann's avatar stefan-niedermann
Browse files

Some refactoring

parent 1a2c2c64
Loading
Loading
Loading
Loading
+84 −101
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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 {


@@ -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);
            }
            }
        }
        }


@@ -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() {
@@ -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);
            });
            });
@@ -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();
@@ -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) -> {
@@ -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);
@@ -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);
@@ -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) {
@@ -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);
        });
        });


@@ -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();
        }
        }
    }
    }
+3 −0
Original line number Original line Diff line number Diff line
@@ -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();
+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;


@@ -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);
+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);
        }
    }
}