diff options
author | stefan-niedermann <info@niedermann.it> | 2019-10-20 15:15:29 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2019-10-20 15:15:29 +0300 |
commit | 58bc2caf7e11b3faab7b73da49b7be1898b84e17 (patch) | |
tree | 320883c38304f20cfdf9f77bf5f32c6f97e6a6f8 /app/src | |
parent | 4494205873cdc306ec62b3a0cee052469a5a7e92 (diff) |
Allow happy path creation via EditActivity without any given ID
Diffstat (limited to 'app/src')
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 |