Commit 89adb83c authored by 0xd9a's avatar 0xd9a
Browse files

Add UI for changing who can quote when composing

parent 8e2d0452
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1643,18 +1643,22 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
            switch (statusDraft.visibility.toLowerCase()) {
                case "public" -> {
                    holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_public);
                    holder.binding.buttonQuoteVisibility.setVisibility(View.VISIBLE);
                    statusDraft.visibility = MastodonHelper.visibility.PUBLIC.name();
                }
                case "unlisted" -> {
                    holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_unlisted);
                    holder.binding.buttonQuoteVisibility.setVisibility(View.VISIBLE);
                    statusDraft.visibility = MastodonHelper.visibility.UNLISTED.name();
                }
                case "private" -> {
                    holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_private);
                    holder.binding.buttonQuoteVisibility.setVisibility(View.GONE);
                    statusDraft.visibility = MastodonHelper.visibility.PRIVATE.name();
                }
                case "direct" -> {
                    holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_direct);
                    holder.binding.buttonQuoteVisibility.setVisibility(View.GONE);
                    statusDraft.visibility = MastodonHelper.visibility.DIRECT.name();
                }
            }
@@ -1666,29 +1670,54 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
                holder.binding.visibilityGroup.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
                holder.binding.buttonVisibility.setChecked(false);
            });
            holder.binding.buttonQuoteVisibility.setOnClickListener(v -> {
                holder.binding.quoteVisibilityPanel.setVisibility(View.VISIBLE);
                holder.binding.quoteVisibilityGroup.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
                holder.binding.buttonQuoteVisibility.setChecked(false);
            });
            holder.binding.buttonCloseVisibilityPanel.setOnClickListener(v -> holder.binding.visibilityPanel.setVisibility(View.GONE));
            holder.binding.buttonCloseQuoteVisibilityPanel.setOnClickListener(v -> holder.binding.quoteVisibilityPanel.setVisibility(View.GONE));
            holder.binding.buttonVisibilityDirect.setOnClickListener(v -> {
                holder.binding.visibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setVisibility(View.GONE);
                holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_direct);
                statusDraft.visibility = MastodonHelper.visibility.DIRECT.name();

            });
            holder.binding.buttonVisibilityPrivate.setOnClickListener(v -> {
                holder.binding.visibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setVisibility(View.GONE);
                holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_private);
                statusDraft.visibility = MastodonHelper.visibility.PRIVATE.name();
            });
            holder.binding.buttonVisibilityUnlisted.setOnClickListener(v -> {
                holder.binding.visibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setVisibility(View.VISIBLE);
                holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_unlisted);
                statusDraft.visibility = MastodonHelper.visibility.UNLISTED.name();
            });
            holder.binding.buttonVisibilityPublic.setOnClickListener(v -> {
                holder.binding.visibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setVisibility(View.VISIBLE);
                holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_public);
                statusDraft.visibility = MastodonHelper.visibility.PUBLIC.name();
                unlisted_changed = true;
            });
            holder.binding.buttonQuoteVisibilityNoOne.setOnClickListener(v -> {
                holder.binding.quoteVisibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setIconResource(R.drawable.ic_baseline_block_24);
                // Todo: "No one" quote visibility clicked
            });
            holder.binding.buttonQuoteVisibilityFollowersOnly.setOnClickListener(v -> {
                holder.binding.quoteVisibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setIconResource(R.drawable.ic_baseline_people_alt_24);
                // Todo: "No one" quote visibility clicked
            });
            holder.binding.buttonQuoteVisibilityAnyone.setOnClickListener(v -> {
                holder.binding.quoteVisibilityPanel.setVisibility(View.GONE);
                holder.binding.buttonQuoteVisibility.setIconResource(R.drawable.ic_compose_visibility_public);
                // Todo: "No one" quote visibility clicked
            });

            if (statusDraft.spoilerChecked || statusDraft.spoiler_text != null && !statusDraft.spoiler_text.trim().isEmpty()) {
                holder.binding.contentSpoiler.setVisibility(View.VISIBLE);
+112 −11
Original line number Diff line number Diff line
@@ -208,19 +208,40 @@
            app:layout_constraintTop_toBottomOf="@id/text_area_divider"
            app:toggleCheckedStateOnClick="true" />

        <com.google.android.material.button.MaterialButtonToggleGroup
            android:id="@+id/visibility_indicators_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="3dp"
            android:layout_marginVertical="6dp"
            app:layout_constraintBottom_toBottomOf="@id/action_buttons_barrier"
            app:layout_constraintStart_toEndOf="@id/button_sensitive"
            app:layout_constraintTop_toBottomOf="@id/text_area_divider"
            app:selectionRequired="false">

            <com.google.android.material.button.MaterialButton
                android:id="@+id/button_visibility"
                style="@style/Widget.Material3.Button.IconButton.Outlined"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
            android:layout_marginVertical="6dp"
                android:checkable="false"
                android:contentDescription="@string/change_visibility"
            app:icon="@drawable/ic_compose_visibility_public"
            app:iconGravity="textStart"
            app:iconPadding="0dp"
            app:layout_constraintBottom_toBottomOf="@id/action_buttons_barrier"
            app:layout_constraintStart_toEndOf="@id/button_sensitive"
            app:layout_constraintTop_toBottomOf="@id/text_area_divider" />
                android:insetLeft="0dp"
                android:insetRight="0dp"
                app:icon="@drawable/ic_compose_visibility_public" />

            <com.google.android.material.button.MaterialButton
                android:id="@+id/button_quote_visibility"
                style="@style/Widget.Material3.Button.IconButton.Outlined"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checkable="false"
                android:contentDescription="@string/change_visibility"
                android:insetLeft="0dp"
                android:insetRight="0dp"
                app:icon="@drawable/ic_baseline_people_alt_24" />

        </com.google.android.material.button.MaterialButtonToggleGroup>

        <com.google.android.material.button.MaterialButton
            android:id="@+id/button_language"
@@ -232,7 +253,7 @@
            android:fontFamily="monospace"
            android:minWidth="72dp"
            app:layout_constraintBottom_toBottomOf="@id/action_buttons_barrier"
            app:layout_constraintStart_toEndOf="@id/button_visibility"
            app:layout_constraintStart_toEndOf="@id/visibility_indicators_group"
            app:layout_constraintTop_toBottomOf="@id/text_area_divider"
            tools:text="EN" />

@@ -409,7 +430,87 @@
                style="@style/Widget.Material3.Button.IconButton.Outlined"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="96dp"
                android:layout_marginStart="98dp"
                android:insetLeft="0dp"
                android:insetRight="0dp"
                app:icon="@drawable/ic_baseline_close_24" />

        </androidx.appcompat.widget.LinearLayoutCompat>

        <androidx.appcompat.widget.LinearLayoutCompat
            android:id="@+id/quote_visibility_panel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_compose_panels"
            android:gravity="bottom"
            android:orientation="vertical"
            android:padding="6dp"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="@id/action_buttons_barrier"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="1">

            <com.google.android.material.textview.MaterialTextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginHorizontal="6dp"
                android:text="@string/who_can_quote"
                android:textAppearance="@style/TextAppearance.Material3.LabelLarge" />

            <com.google.android.material.button.MaterialButtonToggleGroup
                android:id="@+id/quote_visibility_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="6dp"
                android:orientation="vertical"
                app:singleSelection="true">

                <com.google.android.material.button.MaterialButton
                    android:id="@+id/button_quote_visibility_no_one"
                    style="@style/Widget.Material3.Button.OutlinedButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:insetTop="0dp"
                    android:insetBottom="0dp"
                    android:minHeight="36dp"
                    android:text="@string/no_one"
                    android:textAlignment="textStart"
                    app:icon="@drawable/ic_baseline_block_24" />

                <com.google.android.material.button.MaterialButton
                    android:id="@+id/button_quote_visibility_followers_only"
                    style="@style/Widget.Material3.Button.OutlinedButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:insetTop="0dp"
                    android:insetBottom="0dp"
                    android:minHeight="36dp"
                    android:text="@string/followers_only"
                    android:textAlignment="textStart"
                    app:icon="@drawable/ic_baseline_people_alt_24" />

                <com.google.android.material.button.MaterialButton
                    android:id="@+id/button_quote_visibility_anyone"
                    style="@style/Widget.Material3.Button.OutlinedButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:insetTop="0dp"
                    android:insetBottom="0dp"
                    android:minHeight="36dp"
                    android:text="@string/anyone"
                    android:textAlignment="textStart"
                    app:icon="@drawable/ic_compose_visibility_public" />

            </com.google.android.material.button.MaterialButtonToggleGroup>

            <com.google.android.material.button.MaterialButton
                android:id="@+id/button_close_quote_visibility_panel"
                style="@style/Widget.Material3.Button.IconButton.Outlined"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="137dp"
                android:insetLeft="0dp"
                android:insetRight="0dp"
                app:icon="@drawable/ic_baseline_close_24" />

        </androidx.appcompat.widget.LinearLayoutCompat>
@@ -419,7 +520,7 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="bottom"
            app:constraint_referenced_ids="button_attach,button_visibility, button_language,  button_post, character_progress, button_sensitive" />
            app:constraint_referenced_ids="button_attach, visibility_indicators_group, button_language,  button_post, character_progress, button_sensitive" />


        <com.google.android.material.checkbox.MaterialCheckBox
+3 −0
Original line number Diff line number Diff line
@@ -686,6 +686,9 @@
    <string name="boosted_by">Boosted by</string>
    <string name="favourited_by">Favourited by</string>
    <string name="followers_only">Followers only</string>
    <string name="who_can_quote">Who can quote</string>
    <string name="no_one">No one</string>
    <string name="anyone">Anyone</string>
    <string name="other">Other</string>
    <string name="eg_sensitive_content">Eg.: Sensitive Content</string>
    <string name="Pronouns">Pronouns</string>