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:15:29 +0300
committerstefan-niedermann <info@niedermann.it>2019-10-20 15:15:29 +0300
commit58bc2caf7e11b3faab7b73da49b7be1898b84e17 (patch)
tree320883c38304f20cfdf9f77bf5f32c6f97e6a6f8 /app/src
parent4494205873cdc306ec62b3a0cee052469a5a7e92 (diff)
Allow happy path creation via EditActivity without any given ID
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/EditActivity.java126
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/BoardAdapter.java38
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/SelectBoardDialogFragment.java94
-rw-r--r--app/src/main/res/layout/activity_edit.xml8
-rw-r--r--app/src/main/res/layout/item_board.xml16
5 files changed, 108 insertions, 174 deletions
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 29e4aa78a..0c8a4c6b1 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
@@ -1,18 +1,21 @@
package it.niedermann.nextcloud.deck.ui;
import android.app.Activity;
-import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
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;
@@ -25,6 +28,7 @@ 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;
@@ -39,7 +43,7 @@ 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.SelectBoardDialogFragment;
+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;
@@ -53,7 +57,7 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID;
public class EditActivity extends AppCompatActivity implements
CardDetailsFragment.CardDetailsListener,
- SelectBoardDialogFragment.OnBoardSelectedListener {
+ AdapterView.OnItemSelectedListener {
SyncManager syncManager;
@@ -63,6 +67,8 @@ public class EditActivity extends AppCompatActivity implements
TextInputLayout titleTextInputLayout;
@BindView(R.id.title)
EditText title;
+ @BindView(R.id.boardSelector)
+ AppCompatSpinner boardSelector;
@BindView(R.id.tab_layout)
TabLayout tabLayout;
@BindView(R.id.pager)
@@ -98,51 +104,71 @@ public class EditActivity extends AppCompatActivity implements
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(boardId == 0L) {
- try {
- SingleSignOnAccount ssoa = SingleAccountHelper.getCurrentSingleSignOnAccount(this);
- syncManager.readAccount(ssoa.name).observe(this, (Account account) -> {
- SelectBoardDialogFragment.newInstance(account.getId()).show(getSupportFragmentManager(), getString(R.string.simple_select));
+ 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();
+ boardSelector.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 {
- observeOnce(syncManager.getFullBoardById(accountId, boardId), EditActivity.this, (fullBoard -> {
- canEdit = fullBoard.getBoard().isPermissionEdit();
- invalidateOptionsMenu();
- if (createMode) {
- fullCard = new FullCard();
- fullCard.setLabels(new ArrayList<>());
- fullCard.setAssignedUsers(new ArrayList<>());
- Card card = new Card();
- card.setStackId(stackId);
- fullCard.setCard(card);
- setupViewPager();
- setupTitle(createMode);
- } else {
- observeOnce(syncManager.getCardByLocalId(accountId, localId), EditActivity.this, (next) -> {
- fullCard = next;
- originalCard = new FullCard(fullCard);
- setupViewPager();
- setupTitle(createMode);
- });
- }
- }));
+ });
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ e.printStackTrace();
}
} else {
- throw new IllegalArgumentException("No localId argument");
+ if (accountId == 0L) {
+ throw new IllegalArgumentException("No accountId given");
+ }
+ whenBoardIdIsAvailable();
}
}
+ private void whenBoardIdIsAvailable() {
+ observeOnce(syncManager.getFullBoardById(accountId, boardId), EditActivity.this, (fullBoard -> {
+ canEdit = fullBoard.getBoard().isPermissionEdit();
+ invalidateOptionsMenu();
+ if (createMode) {
+ fullCard = new FullCard();
+ fullCard.setLabels(new ArrayList<>());
+ fullCard.setAssignedUsers(new ArrayList<>());
+ Card card = new Card();
+ card.setStackId(stackId);
+ fullCard.setCard(card);
+ setupViewPager();
+ setupTitle(createMode);
+ } else {
+ observeOnce(syncManager.getCardByLocalId(accountId, localId), EditActivity.this, (next) -> {
+ fullCard = next;
+ originalCard = new FullCard(fullCard);
+ setupViewPager();
+ setupTitle(createMode);
+ });
+ }
+ }));
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (canEdit) {
@@ -275,12 +301,14 @@ public class EditActivity extends AppCompatActivity implements
}
@Override
- public void onBoardSelected(Board board) {
- syncManager.getFullBoardById(accountId, board.getLocalId());
- Intent intent = new Intent(this, EditActivity.class);
- intent.putExtra(BUNDLE_KEY_ACCOUNT_ID, accountId);
- intent.putExtra(BUNDLE_KEY_BOARD_ID, boardId);
- intent.putExtra(BUNDLE_KEY_LOCAL_ID, localId);
- startActivityForResult(intent, -1); // FIXME
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ boardId = ((Board) boardSelector.getItemAtPosition(position)).getLocalId();
+ stackId = 1; // FIXME
+ whenBoardIdIsAvailable();
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+
}
}
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
index 4c61e89e6..457889f26 100644
--- 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
@@ -4,52 +4,50 @@ 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 java.util.List;
-
import butterknife.BindView;
import butterknife.ButterKnife;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.util.ViewUtil;
-public class BoardAdapter extends RecyclerView.Adapter<BoardAdapter.BoardViewHolder> {
+public class BoardAdapter extends ArrayAdapter<Board> {
@NonNull
- private List<Board> boardsList;
- @Nullable
private Context context;
+ private Board selectedBoard;
- public BoardAdapter(@Nullable Context context, @NonNull List<Board> boardsList) {
- super();
- this.boardsList = boardsList;
+ public BoardAdapter(@NonNull Context context, @NonNull Board[] boardsList) {
+ super(context, R.layout.item_board, boardsList);
this.context = context;
}
@NonNull
@Override
- public BoardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_board, parent, false);
- return new BoardViewHolder(v);
- }
+ 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);
- @Override
- public void onBindViewHolder(@NonNull BoardViewHolder holder, int position) {
- Board board = boardsList.get(position);
- holder.boardName.setText(board.getTitle());
- if(context != null) {
- holder.boardName.setCompoundDrawables(ViewUtil.getTintedImageView(context, R.drawable.circle_grey600_36dp, "#" + board.getColor()), null, null, null);
}
+ TextView boardName = convertView.findViewById(R.id.boardName);
+ boardName.setText(board.getTitle());
+ boardName.setCompoundDrawables(ViewUtil.getTintedImageView(context, R.drawable.circle_grey600_36dp, "#" + board.getColor()), null, null, null);
+ return convertView;
}
@Override
- public int getItemCount() {
- return boardsList.size();
+ public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ return getView(position, convertView, parent);
}
static class BoardViewHolder extends RecyclerView.ViewHolder {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/SelectBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/SelectBoardDialogFragment.java
deleted file mode 100644
index 930fa3095..000000000
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/SelectBoardDialogFragment.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package it.niedermann.nextcloud.deck.ui.board;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.Context;
-import android.os.Bundle;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.DialogFragment;
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.List;
-import java.util.Objects;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import it.niedermann.nextcloud.deck.Application;
-import it.niedermann.nextcloud.deck.R;
-import it.niedermann.nextcloud.deck.model.Board;
-import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
-
-public class SelectBoardDialogFragment extends DialogFragment {
-
- private static final String KEY_ACCOUNT_ID = "account_id";
-
- private OnBoardSelectedListener onBoardSelectedListener;
-
- private Board board = null;
-
- @BindView(R.id.boards)
- RecyclerView boards;
-
- /**
- * Use newInstance()-Method
- */
- public SelectBoardDialogFragment() {
- }
-
- @Override
- public void onAttach(@NonNull Context context) {
- super.onAttach(context);
- if (context instanceof OnBoardSelectedListener) {
- this.onBoardSelectedListener = (OnBoardSelectedListener) context;
- } else {
- throw new ClassCastException("Caller must implement " + OnBoardSelectedListener.class.getCanonicalName());
- }
- }
-
- @NonNull
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final long accountId = Objects.requireNonNull(getArguments()).getLong(KEY_ACCOUNT_ID);
- if(accountId == 0L) {
- throw new IllegalArgumentException("You must provide an accountId");
- }
-
- Activity activity = Objects.requireNonNull(getActivity());
- View view = activity.getLayoutInflater().inflate(R.layout.dialog_board_select, null);
-
- ButterKnife.bind(this, view);
-
- AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity, Application.getAppTheme(getContext()) ? R.style.DialogDarkTheme : R.style.ThemeOverlay_AppCompat_Dialog_Alert);
- dialogBuilder.setTitle(R.string.simple_select);
- dialogBuilder.setPositiveButton(R.string.simple_select, (dialog, which) -> onBoardSelectedListener.onBoardSelected(board));
- SyncManager syncManager = new SyncManager(activity);
- syncManager.getBoards(accountId).observe(this, (List<Board> boardsList) -> {
- boards.setAdapter(new BoardAdapter(getContext(), boardsList));
- });
-
- return dialogBuilder
- .setView(view)
- .setNegativeButton(R.string.simple_cancel, null)
- .create();
- }
-
- public static SelectBoardDialogFragment newInstance(@NonNull Long accountId) {
- SelectBoardDialogFragment dialog = new SelectBoardDialogFragment();
-
- Bundle args = new Bundle();
- args.putLong(KEY_ACCOUNT_ID, accountId);
- dialog.setArguments(args);
-
- return dialog;
- }
-
- public interface OnBoardSelectedListener {
- void onBoardSelected(Board board);
- }
-
-} \ No newline at end of file
diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml
index c5250a20e..90c155433 100644
--- a/app/src/main/res/layout/activity_edit.xml
+++ b/app/src/main/res/layout/activity_edit.xml
@@ -41,6 +41,14 @@
</androidx.appcompat.widget.Toolbar>
+ <androidx.appcompat.widget.AppCompatSpinner
+ android:id="@+id/boardSelector"
+ android:visibility="gone"
+ tools:visibility="visible"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:theme="@style/ThemeOverlay.AppCompat.Dark"/>
+
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/item_board.xml b/app/src/main/res/layout/item_board.xml
index b7da959fb..ac60360b5 100644
--- a/app/src/main/res/layout/item_board.xml
+++ b/app/src/main/res/layout/item_board.xml
@@ -1,15 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:orientation="vertical"
- android:padding="@dimen/standard_padding">
-
- <TextView
- android:id="@+id/boardName"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="@color/fg_secondary"
- tools:text="4 days ago" />
-</LinearLayout> \ No newline at end of file
+ android:textColor="@color/fg_secondary"
+ tools:text="4 days ago" /> \ No newline at end of file