Skip to content

Commit

Permalink
share downloadable url feature added
Browse files Browse the repository at this point in the history
  • Loading branch information
alexch33 committed Jan 26, 2025
1 parent f0ac8b8 commit fe85adc
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,11 @@ class CandidatesListRecyclerViewAdapter(
listener = object : CandidateFormatListener {
override fun onSelectFormat(videoInfo: VideoInfo, format: String) {
downloadDialogListener.onSelectFormat(videoInfo, format)
notifyDataSetChanged() // Consider using more efficient update methods
notifyDataSetChanged()
}

override fun onFormatUrlShare(videoInfo: VideoInfo, format: String): Boolean {
return downloadDialogListener.onFormatUrlShare(videoInfo, format)
}
}
val selected = selectedFormat.get()?.get(downloadCandidates.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ class VideoInfoAdapter(
candidateFormatListener.onPreviewVideo(videoInfo, format, isForce)
}

override fun onFormatUrlShare(videoInfo: VideoInfo, format: String) : Boolean {
return candidateFormatListener.onFormatUrlShare(videoInfo, format)
}

override fun onDownloadVideo(
videoInfo: VideoInfo,
format: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,11 @@ class CandidatesListAdapter(
downloadDialogListener.onSelectFormat(videoInfo, format)
notifyDataSetChanged()
}

override fun onFormatUrlShare(videoInfo: VideoInfo, format: String): Boolean {
downloadDialogListener.onFormatUrlShare(videoInfo, format)
return true
}
}
this.videoInfo = downloadCandidates
this.downloadCandidate = candidate
Expand Down Expand Up @@ -255,6 +260,8 @@ interface DownloadTabListener : DownloadTabVideoListener, CandidateFormatListene

interface CandidateFormatListener {
fun onSelectFormat(videoInfo: VideoInfo, format: String)

fun onFormatUrlShare(videoInfo: VideoInfo, format: String): Boolean
}

class TitleStore(var title: String)
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import android.widget.EditText
import android.widget.LinearLayout
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.core.app.ShareCompat
import androidx.databinding.Observable
import androidx.fragment.app.FragmentContainerView
import androidx.fragment.app.FragmentTransaction
Expand Down Expand Up @@ -785,5 +786,19 @@ class WebTabFragment : BaseWebTabFragment() {
formats[videoInfo.id] = format
videoDetectionTabViewModel.selectedFormats.set(formats)
}

override fun onFormatUrlShare(videoInfo: VideoInfo, format: String): Boolean {
val foundFormat = videoInfo.formats.formats.find { thisFormat ->
thisFormat.format?.contains(format) == true
}
if (foundFormat == null) {
return false
}

ShareCompat.IntentBuilder(mainActivity).setType("text/plain")
.setChooserTitle("Share Link")
.setText(foundFormat.url).startChooser()
return true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,13 @@ class LinkFragment : BaseFragment(), IDownloadInfoLinkListener {
mainActivity.mainViewModel.selectedFormatTitle.set(currentFormat.get()
?.let { Pair(format, it.second) })
}

override fun onFormatUrlShare(
videoInfo: VideoInfo,
format: String
): Boolean {
return false
}
}, mainActivity, videoInfo, appUtil
)
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/layout/download_candidate_item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
android:checkable="true"
android:checked="@{is_candidate_selected}"
android:onClick="@{() -> listener.onSelectFormat(videoInfo, download_candidate)}"
android:onLongClick="@{() -> listener.onFormatUrlShare(videoInfo, download_candidate)}"
app:cardCornerRadius="20dp"
app:checkedIconTint="@color/colorPrimary"
app:layout_constraintLeft_toLeftOf="parent"
Expand Down
61 changes: 40 additions & 21 deletions app/src/main/res/layout/item_video_info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,27 +26,27 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_title_edit"
android:layout_width="match_parent"
android:maxWidth="488dp"
android:hint="@string/video_title_edit"
android:layout_height="65dp"
android:hint="@string/video_title_edit"
android:imeOptions="actionDone"
android:inputType="text"
android:padding="@dimen/padding_small"/>
android:maxWidth="488dp"
android:padding="@dimen/padding_small" />

<com.google.android.material.button.MaterialButton
android:id="@+id/video_title_rename_button"
android:layout_width="150dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:textColor="@color/white"
android:text="@string/video_menu_rename" />
android:text="@string/video_menu_rename"
android:textColor="@color/white" />

<com.google.android.material.textview.MaterialTextView
android:id="@+id/urlTextView"
android:maxLength="200"
android:text="@{viewModel.selectedFormatUrl}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:maxLength="200"
android:text="@{viewModel.selectedFormatUrl}" />

<com.google.android.material.textview.MaterialTextView
android:id="@+id/typeTextView"
Expand All @@ -65,30 +65,49 @@
android:padding="8dp" />


<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv_preview"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_video_24dp"
android:drawablePadding="@dimen/padding_small"
android:onClick="@{() -> dialogListener.onPreviewVideo(videoInfo, viewModel.selectedFormats.get(videoInfo.id), false)}"
android:padding="@dimen/padding_normal"
android:text="@string/dialog_preview_video"
android:textSize="@dimen/text_large" />
android:orientation="horizontal">

<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv_preview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableStart="@drawable/ic_video_24dp"
android:drawablePadding="@dimen/padding_small"
android:onClick="@{() -> dialogListener.onPreviewVideo(videoInfo, viewModel.selectedFormats.get(videoInfo.id), false)}"
android:padding="@dimen/padding_normal"
android:text="@string/dialog_preview_video"
android:textSize="@dimen/text_large" />

<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv_share"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableStart="@drawable/share_24px"
android:drawablePadding="@dimen/padding_small"
android:onClick="@{() -> dialogListener.onFormatUrlShare(videoInfo, viewModel.selectedFormats.get(videoInfo.id))}"
android:padding="@dimen/padding_normal"
android:text="@string/share_link"
android:textSize="@dimen/text_large" />
</LinearLayout>

<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/padding_normal"
android:layout_marginBottom="@dimen/padding_large"
android:onClick="@{() -> dialogListener.onDownloadVideo(videoInfo, viewModel.selectedFormats.get(videoInfo.id), viewModel.formatsTitles.get(videoInfo.id))}"
android:text="@string/dialog_download_video"
app:icon="@drawable/ic_download_24dp"
app:iconTint="@color/white"
android:textColor="@color/white"
android:textFontWeight="8"
android:layout_marginBottom="@dimen/padding_large"
android:onClick="@{() -> dialogListener.onDownloadVideo(videoInfo, viewModel.selectedFormats.get(videoInfo.id), viewModel.formatsTitles.get(videoInfo.id))}"
app:icon="@drawable/ic_download_24dp"
app:iconTint="@color/white"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_preview"/>
app:layout_constraintTop_toBottomOf="@id/tv_preview" />

</LinearLayout>
</layout>

0 comments on commit fe85adc

Please sign in to comment.