From a55acd38dfad9027030f3668fbd895b947955448 Mon Sep 17 00:00:00 2001
From: TiA4f8R <74829229+TiA4f8R@users.noreply.github.com>
Date: Sat, 4 Sep 2021 19:32:38 +0200
Subject: [PATCH] Use a custom TextView everywhere to be able to share with
ShareUtils the selected text
This TextView class extends the AppCompatTextView class from androidx.
These changes (only in XML ressources) allow us to share the selected text by using ShareUtils.shareText, which opens the Android system chooser instead of the Huawei system chooser on EMUI devices.
---
.../schabi/newpipe/views/NewPipeTextView.java | 60 +++++++++
.../activity_player_queue_control.xml | 12 +-
.../fragment_video_detail.xml | 40 +++---
app/src/main/res/layout-large-land/player.xml | 20 +--
app/src/main/res/layout/activity_error.xml | 20 +--
.../layout/activity_player_queue_control.xml | 122 +++++++++---------
app/src/main/res/layout/channel_header.xml | 6 +-
.../res/layout/dialog_feed_group_create.xml | 8 +-
.../res/layout/dialog_playback_parameter.xml | 35 ++---
app/src/main/res/layout/dialog_playlists.xml | 2 +-
app/src/main/res/layout/dialog_title.xml | 4 +-
app/src/main/res/layout/download_dialog.xml | 6 +-
app/src/main/res/layout/drawer_header.xml | 4 +-
app/src/main/res/layout/error_panel.xml | 6 +-
.../res/layout/feed_group_add_new_item.xml | 2 +-
.../main/res/layout/feed_group_card_item.xml | 2 +-
.../res/layout/feed_group_reorder_item.xml | 2 +-
.../res/layout/feed_import_export_group.xml | 6 +-
app/src/main/res/layout/fragment_about.xml | 20 +--
app/src/main/res/layout/fragment_channel.xml | 6 +-
.../main/res/layout/fragment_choose_tabs.xml | 2 +-
app/src/main/res/layout/fragment_comments.xml | 4 +-
.../main/res/layout/fragment_description.xml | 6 +-
app/src/main/res/layout/fragment_feed.xml | 6 +-
app/src/main/res/layout/fragment_import.xml | 2 +-
.../res/layout/fragment_instance_list.xml | 2 +-
app/src/main/res/layout/fragment_kiosk.xml | 4 +-
app/src/main/res/layout/fragment_licenses.xml | 6 +-
app/src/main/res/layout/fragment_playlist.xml | 4 +-
.../res/layout/fragment_related_items.xml | 4 +-
app/src/main/res/layout/fragment_search.xml | 8 +-
.../main/res/layout/fragment_video_detail.xml | 40 +++---
.../main/res/layout/header_with_menu_item.xml | 2 +-
.../main/res/layout/item_stream_segment.xml | 6 +-
.../res/layout/list_choose_tabs_dialog.xml | 2 +-
.../main/res/layout/list_comments_item.xml | 10 +-
.../res/layout/list_comments_mini_item.xml | 8 +-
app/src/main/res/layout/list_empty_view.xml | 4 +-
.../res/layout/list_playlist_grid_item.xml | 6 +-
.../main/res/layout/list_playlist_item.xml | 6 +-
.../res/layout/list_playlist_mini_item.xml | 6 +-
.../main/res/layout/list_stream_grid_item.xml | 8 +-
app/src/main/res/layout/list_stream_item.xml | 8 +-
.../main/res/layout/list_stream_mini_item.xml | 6 +-
.../layout/list_stream_playlist_grid_item.xml | 6 +-
.../res/layout/list_stream_playlist_item.xml | 6 +-
.../main/res/layout/local_playlist_header.xml | 4 +-
app/src/main/res/layout/main_bg.xml | 4 +-
app/src/main/res/layout/mission_item.xml | 6 +-
.../main/res/layout/mission_item_linear.xml | 6 +-
app/src/main/res/layout/missions_header.xml | 2 +-
.../res/layout/picker_subscription_item.xml | 2 +-
app/src/main/res/layout/play_queue_item.xml | 6 +-
app/src/main/res/layout/player.xml | 20 +--
app/src/main/res/layout/playlist_control.xml | 6 +-
app/src/main/res/layout/playlist_header.xml | 6 +-
.../main/res/layout/related_items_header.xml | 2 +-
.../res/layout/select_channel_fragment.xml | 6 +-
.../main/res/layout/select_channel_item.xml | 2 +-
.../main/res/layout/select_kiosk_fragment.xml | 4 +-
app/src/main/res/layout/select_kiosk_item.xml | 2 +-
.../res/layout/select_playlist_fragment.xml | 4 +-
.../settings_category_header_layout.xml | 2 +-
.../layout/settings_category_header_title.xml | 2 +-
.../main/res/layout/settings_notification.xml | 2 +-
.../layout/settings_notification_action.xml | 4 +-
.../res/layout/statistic_playlist_control.xml | 2 +-
.../main/res/layout/stream_quality_item.xml | 6 +-
.../subscription_import_export_item.xml | 2 +-
69 files changed, 362 insertions(+), 295 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java
diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java
new file mode 100644
index 000000000..f69dfb33b
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java
@@ -0,0 +1,60 @@
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.text.Selection;
+import android.text.Spannable;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatTextView;
+
+import org.schabi.newpipe.util.external_communication.ShareUtils;
+
+public class NewPipeTextView extends AppCompatTextView {
+
+ public NewPipeTextView(@NonNull final Context context) {
+ super(context);
+ }
+
+ public NewPipeTextView(@NonNull final Context context, @Nullable final AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NewPipeTextView(@NonNull final Context context,
+ @Nullable final AttributeSet attrs,
+ final int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onTextContextMenuItem(final int id) {
+ final CharSequence text = getText();
+ if (id == android.R.id.shareText) {
+ final String selectedText = getSelectedText(text).toString();
+ if (!selectedText.isEmpty()) {
+ ShareUtils.shareText(getContext(), "", selectedText);
+ }
+ final Spannable spannable = (text instanceof Spannable) ? (Spannable) text : null;
+ Selection.setSelection(spannable, getSelectionEnd());
+ return true;
+ } else {
+ return super.onTextContextMenuItem(id);
+ }
+ }
+
+ @NonNull
+ private CharSequence getSelectedText(@NonNull final CharSequence charSequence) {
+ int min = 0;
+ int max = charSequence.length();
+
+ if (isFocused()) {
+ final int selStart = getSelectionStart();
+ final int selEnd = getSelectionEnd();
+
+ min = Math.max(0, Math.min(selStart, selEnd));
+ max = Math.max(0, Math.max(selStart, selEnd));
+ }
+ return charSequence.subSequence(min, max);
+ }
+}
diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml
index 4b79d92f6..c2359552e 100644
--- a/app/src/main/res/layout-land/activity_player_queue_control.xml
+++ b/app/src/main/res/layout-land/activity_player_queue_control.xml
@@ -60,7 +60,7 @@
android:padding="8dp"
tools:ignore="RtlHardcoded,RtlSymmetry">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -82,7 +82,7 @@
-
-
-
-
-
-
-
+ android:layout_above="@+id/playback_controls">
-
+ android:background="?attr/selectableItemBackground"
+ android:clickable="true"
+ android:focusable="true"
+ android:orientation="vertical"
+ android:padding="8dp"
+ tools:ignore="RtlHardcoded,RtlSymmetry">
-
+
+
+
+
+
-
+ android:layout_centerInParent="true"
+ android:background="#c0000000"
+ android:paddingLeft="30dp"
+ android:paddingTop="5dp"
+ android:paddingRight="30dp"
+ android:paddingBottom="5dp"
+ android:textColor="@android:color/white"
+ android:textSize="22sp"
+ android:textStyle="bold"
+ android:visibility="gone"
+ tools:ignore="RtlHardcoded"
+ tools:text="1:06:29"
+ tools:visibility="visible" />
+
+ android:paddingRight="12dp">
-
-
-
+
diff --git a/app/src/main/res/layout/channel_header.xml b/app/src/main/res/layout/channel_header.xml
index aebb5d613..9366faf2c 100644
--- a/app/src/main/res/layout/channel_header.xml
+++ b/app/src/main/res/layout/channel_header.xml
@@ -49,7 +49,7 @@
tools:visibility="visible" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -85,14 +85,14 @@
android:layout_gravity="end"
android:text="@string/give_back" />
-
-
@@ -105,14 +105,14 @@
android:layout_gravity="end"
android:text="@string/open_in_browser" />
-
-
diff --git a/app/src/main/res/layout/fragment_channel.xml b/app/src/main/res/layout/fragment_channel.xml
index 873f3c884..9e2257539 100644
--- a/app/src/main/res/layout/fragment_channel.xml
+++ b/app/src/main/res/layout/fragment_channel.xml
@@ -30,7 +30,7 @@
android:visibility="gone"
tools:visibility="visible">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -->
-
-
-
- -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ tools:listitem="@layout/select_channel_item" />
-
-
-
+ tools:listitem="@layout/select_kiosk_item" />
diff --git a/app/src/main/res/layout/select_kiosk_item.xml b/app/src/main/res/layout/select_kiosk_item.xml
index 6cd04ae34..680767bba 100644
--- a/app/src/main/res/layout/select_kiosk_item.xml
+++ b/app/src/main/res/layout/select_kiosk_item.xml
@@ -22,7 +22,7 @@
app:tint="@color/contrastColor"
tools:ignore="RtlHardcoded" />
-
-
-
-
diff --git a/app/src/main/res/layout/settings_category_header_title.xml b/app/src/main/res/layout/settings_category_header_title.xml
index 679b9048c..c7d6920b0 100644
--- a/app/src/main/res/layout/settings_category_header_title.xml
+++ b/app/src/main/res/layout/settings_category_header_title.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
-
-
-
-