diff options
author | stefan-niedermann <info@niedermann.it> | 2020-03-15 20:24:14 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2020-03-15 20:24:14 +0300 |
commit | fc711d851a294e273436dad8dc0267857fcfb3fa (patch) | |
tree | 33da0a12e5f638b677a5266631f2843a793f235a /app/src | |
parent | d469d5f84512bf797312c1f38f307f947a43c494 (diff) |
#248 Add Deck as a "share to" location
Diffstat (limited to 'app/src')
4 files changed, 145 insertions, 19 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cc0f25840..025df338a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,19 +11,20 @@ <application android:name="it.niedermann.nextcloud.deck.Application" android:allowBackup="true" + android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:hardwareAccelerated="true" android:theme="@style/AppTheme" - android:networkSecurityConfig="@xml/network_security_config" tools:ignore="GoogleAppIndexingWarning"> <activity android:name=".ui.MainActivity" android:label="@string/app_name_short" android:theme="@style/SplashTheme"> + <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> @@ -41,21 +42,43 @@ </activity> <activity + android:name=".ui.SelectCardActivity" + android:label="@string/app_name_short" + android:theme="@style/SplashTheme"> + + <intent-filter> + <action android:name="android.intent.action.SEND" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="*/*" /> + </intent-filter> + + <meta-data + android:name="android.app.shortcuts" + android:resource="@xml/shortcuts" /> + <meta-data + android:name="android.app.searchable" + android:resource="@xml/searchable" /> + <meta-data + android:name="android.app.default_searchable" + android:value=".ui.MainActivity" /> + </activity> + + <activity android:name=".ui.EditActivity" android:label="@string/edit" - android:theme="@style/AppTheme" - android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" /> + android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" + android:theme="@style/AppTheme" /> <activity android:name=".ui.AttachmentsActivity" - android:theme="@style/TransparentTheme" - android:parentActivityName="it.niedermann.nextcloud.deck.ui.EditActivity" /> + android:parentActivityName="it.niedermann.nextcloud.deck.ui.EditActivity" + android:theme="@style/TransparentTheme" /> <activity android:name=".ui.SettingsActivity" android:label="@string/simple_settings" - android:theme="@style/AppTheme" - android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" /> + android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" + android:theme="@style/AppTheme" /> <activity android:name=".ui.ImportAccountActivity" @@ -65,8 +88,8 @@ <activity android:name=".ui.AboutActivity" android:label="@string/about" - android:theme="@style/AppTheme" - android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" /> + android:parentActivityName="it.niedermann.nextcloud.deck.ui.MainActivity" + android:theme="@style/AppTheme" /> <activity android:name=".ui.exception.ExceptionActivity" @@ -74,9 +97,9 @@ <service android:name=".ui.tiles.EditCardTileService" + android:description="@string/add_a_new_card_using_the_button" android:icon="@drawable/ic_app_logo" android:label="@string/add_card" - android:description="@string/add_a_new_card_using_the_button" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java new file mode 100644 index 000000000..ac9162265 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java @@ -0,0 +1,82 @@ +package it.niedermann.nextcloud.deck.ui; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.Menu; +import android.view.View; + +import androidx.annotation.NonNull; + +import java.io.File; + +import it.niedermann.nextcloud.deck.DeckLog; +import it.niedermann.nextcloud.deck.model.Attachment; +import it.niedermann.nextcloud.deck.model.full.FullCard; +import it.niedermann.nextcloud.deck.ui.card.CardAdapter; +import it.niedermann.nextcloud.deck.util.FileUtils; + +public class SelectCardActivity extends MainActivity implements CardAdapter.SelectCardListener { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding.addStackButton.setVisibility(View.GONE); + } + + @Override + public void onCardSelected(FullCard fullCard) { + Intent receivedIntent = getIntent(); + String receivedAction = receivedIntent.getAction(); + String receivedType = receivedIntent.getType(); + DeckLog.info(receivedAction); + DeckLog.info(receivedType); + if (receivedType != null) { + if (receivedType.startsWith("text/")) { + String receivedText = receivedIntent.getStringExtra(Intent.EXTRA_TEXT); + if (receivedText != null) { + appendText(fullCard, receivedText); + } else { + DeckLog.warn("Did not receive any text."); + } + } else if (receivedType.startsWith("image/")) { + Uri receivedUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); + if (receivedUri != null) { + appendAttachment(fullCard, receivedUri); + } else { + DeckLog.warn("Did not receive any extra."); + } + } + syncManager.updateCard(fullCard); + } else { + DeckLog.logError(new IllegalArgumentException("receivedType must not be null for " + SelectCardActivity.class.getCanonicalName())); + } + finish(); + } + + private void appendText(@NonNull FullCard fullCard, @NonNull String receivedText) { + DeckLog.log(receivedText); + String oldDescription = fullCard.getCard().getDescription(); + if (oldDescription == null || oldDescription.length() == 0) { + fullCard.getCard().setDescription(receivedText); + } else { + fullCard.getCard().setDescription(oldDescription + "\n\n" + receivedText); + } + } + + private void appendAttachment(@NonNull FullCard fullCard, @NonNull Uri uri) { + DeckLog.info("Uri: " + uri.toString()); + String path = FileUtils.getPath(this, uri); + if (path != null) { + File uploadFile = new File(path); + syncManager.addAttachmentToCard(fullCard.getAccountId(), fullCard.getCard().getLocalId(), Attachment.getMimetypeForUri(this, uri), uploadFile); + } else { + DeckLog.warn("path to file is null"); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } +}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java index 0c0143da9..4533b2260 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java @@ -19,6 +19,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -75,15 +76,23 @@ public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ItemCardViewHo private LifecycleOwner lifecycleOwner; private List<FullStack> availableStacks = new ArrayList<>(); + @Nullable + private final SelectCardListener selectCardListener; + private int maxAvatarCount; private int maxLabelsShown; private int maxLabelsChars; public CardAdapter(long boardId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull Fragment fragment) { + this(boardId, canEdit, syncManager, fragment, null); + } + + public CardAdapter(long boardId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull Fragment fragment, @Nullable SelectCardListener selectCardListener) { this.lifecycleOwner = fragment; this.boardId = boardId; this.canEdit = canEdit; this.syncManager = syncManager; + this.selectCardListener = selectCardListener; } @NonNull @@ -113,14 +122,18 @@ public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ItemCardViewHo FullCard card = cardList.get(position); viewHolder.binding.card.setOnClickListener((View clickedView) -> { - Intent intent = new Intent(clickedView.getContext(), EditActivity.class); - intent.putExtra(BUNDLE_KEY_ACCOUNT_ID, card.getAccountId()); - intent.putExtra(BUNDLE_KEY_BOARD_ID, boardId); - intent.putExtra(BUNDLE_KEY_LOCAL_ID, card.getLocalId()); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); + if (selectCardListener == null) { + Intent intent = new Intent(clickedView.getContext(), EditActivity.class); + intent.putExtra(BUNDLE_KEY_ACCOUNT_ID, card.getAccountId()); + intent.putExtra(BUNDLE_KEY_BOARD_ID, boardId); + intent.putExtra(BUNDLE_KEY_LOCAL_ID, card.getLocalId()); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } else { + selectCardListener.onCardSelected(card); + } }); - if (canEdit) { + if (canEdit && selectCardListener == null) { viewHolder.binding.card.setOnLongClickListener((View draggedView) -> { ClipData dragData = ClipData.newPlainText("cardid", card.getLocalId() + ""); @@ -402,4 +415,8 @@ public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ItemCardViewHo this.binding = binding; } } + + public interface SelectCardListener { + void onCardSelected(FullCard fullCard); + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java index e84ccb037..3eff9f512 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java @@ -81,7 +81,11 @@ public class StackFragment extends Fragment { syncManager = new SyncManager(activity); - adapter = new CardAdapter(boardId, getArguments().getBoolean(KEY_HAS_EDIT_PERMISSION), syncManager, this); + if(requireActivity() instanceof CardAdapter.SelectCardListener) { + adapter = new CardAdapter(boardId, getArguments().getBoolean(KEY_HAS_EDIT_PERMISSION), syncManager, this, (CardAdapter.SelectCardListener) requireActivity()); + } else { + adapter = new CardAdapter(boardId, getArguments().getBoolean(KEY_HAS_EDIT_PERMISSION), syncManager, this); + } binding.recyclerView.setAdapter(adapter); if (onScrollListener != null) { binding.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { |