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

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2019-10-20 15:46:04 +0300
committerstefan-niedermann <info@niedermann.it>2019-10-20 15:46:04 +0300
commita35a7a1c8ae4022b92b168f7fba5b5742755fb00 (patch)
tree2ce40a354ebc8bb44c9d99f799b7479efeb99e89 /app/src
parentd080085995b8062dbbb9e7243d27d9ff9fefe240 (diff)
parentfaaadc57861666eb4f8933a76651d2e6b2975fdc (diff)
Merge branch 'select-board'
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java8
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java111
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/BoardAdapter.java66
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java3
-rw-r--r--app/src/main/res/layout/activity_edit.xml24
-rw-r--r--app/src/main/res/layout/dialog_board_select.xml11
-rw-r--r--app/src/main/res/layout/item_board.xml10
-rw-r--r--app/src/main/res/values/strings.xml1
-rw-r--r--app/src/main/res/values/styles.xml3
12 files changed, 226 insertions, 21 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index eb85341f1..42209dfce 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -167,6 +167,10 @@ public class SyncManager {
return dataBaseAdapter.readAccount(id);
}
+ public LiveData<Account> readAccount(String name) {
+ return dataBaseAdapter.readAccount(name);
+ }
+
public LiveData<List<Account>> readAccounts() {
return dataBaseAdapter.readAccounts();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
index ddfa06dfb..bbe2c4e1b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
@@ -278,6 +278,10 @@ public class DataBaseAdapter {
return LiveDataHelper.onlyIfChanged(db.getAccountDao().selectById(id));
}
+ public LiveData<Account> readAccount(String name) {
+ return LiveDataHelper.onlyIfChanged(db.getAccountDao().selectById(name));
+ }
+
public Account readAccountDirectly(long id) {
return db.getAccountDao().getAccountByIdDirectly(id);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
index 3c0286ef4..56ac92008 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
@@ -1,10 +1,11 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import java.util.List;
-
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Query;
+
+import java.util.List;
+
import it.niedermann.nextcloud.deck.model.Account;
@Dao
@@ -28,6 +29,9 @@ public interface AccountDao extends GenericDao<Account> {
@Query("SELECT * from account where id = :id")
LiveData<Account> selectById(long id);
+ @Query("SELECT * from account where name = :name")
+ LiveData<Account> selectById(String name);
+
@Query("SELECT * from account")
LiveData<List<Account>> selectAll();
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java
index 53a1ea6a7..711227c27 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java
@@ -7,19 +7,28 @@ import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
import android.widget.EditText;
+import android.widget.SpinnerAdapter;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.AppCompatSpinner;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.textfield.TextInputLayout;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
+import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
+import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.model.SingleSignOnAccount;
import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import butterknife.BindString;
import butterknife.BindView;
@@ -27,11 +36,14 @@ import butterknife.ButterKnife;
import butterknife.Unbinder;
import it.niedermann.nextcloud.deck.Application;
import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.model.User;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.ui.board.BoardAdapter;
import it.niedermann.nextcloud.deck.ui.card.CardDetailsFragment;
import it.niedermann.nextcloud.deck.ui.card.CardTabAdapter;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
@@ -43,7 +55,9 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_
import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_STACK_ID;
import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID;
-public class EditActivity extends AppCompatActivity implements CardDetailsFragment.CardDetailsListener {
+public class EditActivity extends AppCompatActivity implements
+ CardDetailsFragment.CardDetailsListener,
+ AdapterView.OnItemSelectedListener {
SyncManager syncManager;
@@ -53,6 +67,10 @@ public class EditActivity extends AppCompatActivity implements CardDetailsFragme
TextInputLayout titleTextInputLayout;
@BindView(R.id.title)
EditText title;
+ @BindView(R.id.selectBoardWrapper)
+ View selectBoardWrapper;
+ @BindView(R.id.boardSelector)
+ AppCompatSpinner boardSelector;
@BindView(R.id.tab_layout)
TabLayout tabLayout;
@BindView(R.id.pager)
@@ -88,14 +106,43 @@ public class EditActivity extends AppCompatActivity implements CardDetailsFragme
setSupportActionBar(toolbar);
Bundle extras = getIntent().getExtras();
- if (extras != null) {
- accountId = extras.getLong(BUNDLE_KEY_ACCOUNT_ID);
- boardId = extras.getLong(BUNDLE_KEY_BOARD_ID);
- stackId = extras.getLong(BUNDLE_KEY_STACK_ID);
- localId = extras.getLong(BUNDLE_KEY_LOCAL_ID);
- syncManager = new SyncManager(this);
-
- createMode = NO_LOCAL_ID.equals(localId);
+ if (extras == null) {
+ throw new IllegalArgumentException("Provide localId");
+ }
+ accountId = extras.getLong(BUNDLE_KEY_ACCOUNT_ID);
+ boardId = extras.getLong(BUNDLE_KEY_BOARD_ID);
+ stackId = extras.getLong(BUNDLE_KEY_STACK_ID);
+ localId = extras.getLong(BUNDLE_KEY_LOCAL_ID);
+ syncManager = new SyncManager(this);
+
+ createMode = NO_LOCAL_ID.equals(localId);
+ if (boardId == 0L) {
+ try {
+ createMode = true;
+ SingleSignOnAccount ssoa = SingleAccountHelper.getCurrentSingleSignOnAccount(this);
+ syncManager.readAccount(ssoa.name).observe(this, (Account account) -> {
+ accountId = account.getId();
+ selectBoardWrapper.setVisibility(View.VISIBLE);
+ syncManager.getBoards(account.getId()).observe(this, (List<Board> boardsList) -> {
+ for (Board board : boardsList) {
+ if (!board.isPermissionEdit()) {
+ boardsList.remove(board);
+ }
+ }
+ Board[] boardsArray = new Board[boardsList.size()];
+ boardsArray = boardsList.toArray(boardsArray);
+ SpinnerAdapter adapter = new BoardAdapter(this, boardsArray);
+ boardSelector.setAdapter(adapter);
+ boardSelector.setOnItemSelectedListener(this);
+ });
+ });
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ e.printStackTrace();
+ }
+ } else {
+ if (accountId == 0L) {
+ throw new IllegalArgumentException("No accountId given");
+ }
observeOnce(syncManager.getFullBoardById(accountId, boardId), EditActivity.this, (fullBoard -> {
canEdit = fullBoard.getBoard().isPermissionEdit();
invalidateOptionsMenu();
@@ -117,8 +164,6 @@ public class EditActivity extends AppCompatActivity implements CardDetailsFragme
});
}
}));
- } else {
- throw new IllegalArgumentException("No localId argument");
}
}
@@ -151,9 +196,9 @@ public class EditActivity extends AppCompatActivity implements CardDetailsFragme
}
}
if (createMode) {
- observeOnce(syncManager.createFullCard(accountId, boardId, stackId, fullCard), EditActivity.this, (card) -> finish());
+ observeOnce(syncManager.createFullCard(accountId, boardId, stackId, fullCard), EditActivity.this, (card) -> super.finish());
} else {
- observeOnce(syncManager.updateCard(fullCard), EditActivity.this, (card) -> finish());
+ observeOnce(syncManager.updateCard(fullCard), EditActivity.this, (card) -> super.finish());
}
}
@@ -242,14 +287,48 @@ public class EditActivity extends AppCompatActivity implements CardDetailsFragme
@Override
public void onBackPressed() {
+ finish();
+ }
+
+ @Override
+ public void finish() {
if (!fullCard.equals(originalCard) && canEdit) {
new AlertDialog.Builder(this)
.setTitle(R.string.simple_save)
.setMessage(R.string.do_you_want_to_save_your_changes)
- .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> saveAndFinish())
- .setNegativeButton(R.string.simple_discard, (dialog, whichButton) -> super.onBackPressed()).show();
+ .setPositiveButton(R.string.simple_save, (dialog, whichButton) -> saveAndFinish())
+ .setNegativeButton(R.string.simple_discard, (dialog, whichButton) -> super.finish()).show();
} else {
- super.onBackPressed();
+ super.finish();
}
}
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ boardId = ((Board) boardSelector.getItemAtPosition(position)).getLocalId();
+ observeOnce(syncManager.getFullBoardById(accountId, boardId), EditActivity.this, (fullBoard -> {
+ canEdit = fullBoard.getBoard().isPermissionEdit();
+ observeOnce(syncManager.getStacksForBoard(accountId, boardId), EditActivity.this, (stacks -> {
+ if(stacks != null && stacks.size() > 0) {
+ stackId = stacks.get(0).getLocalId();
+ }
+ }));
+ if (fullCard == null) {
+ invalidateOptionsMenu();
+ fullCard = new FullCard();
+ fullCard.setLabels(new ArrayList<>());
+ fullCard.setAssignedUsers(new ArrayList<>());
+ Card card = new Card();
+ card.setStackId(stackId);
+ fullCard.setCard(card);
+ setupViewPager();
+ setupTitle(createMode);
+ }
+ }));
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
index c36a9b431..77d3be6bd 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
@@ -100,7 +100,7 @@ public class AccessControlDialogFragment extends DialogFragment implements
@Override
public void deleteAccessControl(AccessControl ac) {
// TODO implement in syncManager!
- Toast.makeText(getContext(), "Deleting user permisions is not yet supported.", Toast.LENGTH_LONG).show();
+ Toast.makeText(getContext(), "Deleting user permissions is not yet supported.", Toast.LENGTH_LONG).show();
}
@Override
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/BoardAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/BoardAdapter.java
new file mode 100644
index 000000000..986ce9237
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/BoardAdapter.java
@@ -0,0 +1,66 @@
+package it.niedermann.nextcloud.deck.ui.board;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Board;
+import it.niedermann.nextcloud.deck.util.ViewUtil;
+
+public class BoardAdapter extends ArrayAdapter<Board> {
+
+ @NonNull
+ private Context context;
+ private Board selectedBoard;
+
+ public BoardAdapter(@NonNull Context context, @NonNull Board[] boardsList) {
+ super(context, R.layout.item_board, boardsList);
+ this.context = context;
+ }
+
+ @NonNull
+ @Override
+ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ Board board = getItem(position);
+ // Check if an existing view is being reused, otherwise inflate the view
+
+ if (convertView == null) {
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_board, parent, false);
+ }
+ TextView boardName = convertView.findViewById(R.id.boardName);
+ if(board != null) {
+ boardName.setText(board.getTitle());
+ boardName.setCompoundDrawables(ViewUtil.getTintedImageView(context, R.drawable.circle_grey600_36dp, "#" + board.getColor()), null, null, null);
+ } else {
+ DeckLog.logError(new IllegalArgumentException("board at position " + position + "is null"));
+ }
+ return convertView;
+ }
+
+ @Override
+ public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ return getView(position, convertView, parent);
+ }
+
+ static class BoardViewHolder extends RecyclerView.ViewHolder {
+ @BindView(R.id.boardName)
+ TextView boardName;
+
+ private BoardViewHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
index 902d11066..a3f64798c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java
@@ -91,8 +91,7 @@ public class EditBoardDialogFragment extends DialogFragment {
return dialogBuilder
.setView(view)
- .setNegativeButton(R.string.simple_cancel, (dialog, which) -> {
- })
+ .setNegativeButton(R.string.simple_cancel, null)
.create();
}
diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml
index c5250a20e..d55af2f65 100644
--- a/app/src/main/res/layout/activity_edit.xml
+++ b/app/src/main/res/layout/activity_edit.xml
@@ -41,6 +41,30 @@
</androidx.appcompat.widget.Toolbar>
+ <LinearLayout
+ android:id="@+id/selectBoardWrapper"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ tools:visibility="visible">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:labelFor="@id/boardSelector"
+ android:padding="@dimen/standard_padding"
+ android:text="@string/simple_select"
+ android:textColor="@android:color/white" />
+
+ <androidx.appcompat.widget.AppCompatSpinner
+ android:id="@+id/boardSelector"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:theme="@style/Spinner"
+ tools:listitem="@layout/item_board" />
+ </LinearLayout>
+
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/dialog_board_select.xml b/app/src/main/res/layout/dialog_board_select.xml
new file mode 100644
index 000000000..c203a21d9
--- /dev/null
+++ b/app/src/main/res/layout/dialog_board_select.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.recyclerview.widget.RecyclerView 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/boards"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/standard_margin"
+ android:scrollbars="vertical"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ tools:listitem="@layout/dialog_board_select" /> \ No newline at end of file
diff --git a/app/src/main/res/layout/item_board.xml b/app/src/main/res/layout/item_board.xml
new file mode 100644
index 000000000..495b98bad
--- /dev/null
+++ b/app/src/main/res/layout/item_board.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/boardName"
+ android:padding="@dimen/standard_padding"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textColor="@android:color/white"
+ android:background="@android:color/transparent"
+ tools:text="Awesome board name" /> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6b019441a..5b8526ae4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -142,4 +142,5 @@
<string name="simple_manage">manage</string>
<string name="simple_share">share</string>
<string name="you_have_to_be_connected_to_the_internet_in_order_to_add_an_account">You have to be connected to the internet in order to add an account.</string>
+ <string name="simple_select">Select</string>
</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index d529f6ab5..300a9e22a 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -62,4 +62,7 @@
<item name="android:textColor">@color/danger</item>
</style>
+ <style name="Spinner" parent="ThemeOverlay.AppCompat.Dark">
+ <item name="android:textColor">@android:color/white</item>
+ </style>
</resources>