Apply the requested changes and little improvements

Apply the requested changes, use ShareUtils.shareText to share an stream in the play queue and optimize imports for Java files, using Android Studio functionality.

Apply the requested changes and do little improvements
Apply the requested changes, use ShareUtils.shareText to share an stream in the play queue and optimize imports for Java files, using Android Studio functionality.
This commit is contained in:
TiA4f8R 2021-01-15 17:11:04 +01:00 committed by Stypox
parent a57fd69fb4
commit 79e98db3bd
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
45 changed files with 145 additions and 122 deletions

View File

@ -10,6 +10,7 @@ import android.widget.OverScroller;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.lang.reflect.Field; import java.lang.reflect.Field;

View File

@ -6,26 +6,16 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.multidex.MultiDexApplication; import androidx.multidex.MultiDexApplication;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache; import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.exceptions.CompositeException;
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
import io.reactivex.rxjava3.exceptions.UndeliverableException;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.plugins.RxJavaPlugins;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.SocketException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.acra.ACRA; import org.acra.ACRA;
import org.acra.config.ACRAConfigurationException; import org.acra.config.ACRAConfigurationException;
import org.acra.config.CoreConfiguration; import org.acra.config.CoreConfiguration;
@ -41,6 +31,21 @@ import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.StateSaver;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.SocketException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.exceptions.CompositeException;
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
import io.reactivex.rxjava3.exceptions.UndeliverableException;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.plugins.RxJavaPlugins;
/* /*
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org> * Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
* App.java is part of NewPipe. * App.java is part of NewPipe.

View File

@ -2,10 +2,10 @@ package org.schabi.newpipe;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import androidx.preference.PreferenceManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.downloader.Request; import org.schabi.newpipe.extractor.downloader.Request;

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader; import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

View File

@ -20,8 +20,6 @@
package org.schabi.newpipe; package org.schabi.newpipe;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -43,6 +41,7 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.Spinner; import android.widget.Spinner;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.ActionBarDrawerToggle;
@ -53,10 +52,9 @@ import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetBehavior;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.schabi.newpipe.databinding.ActivityMainBinding; import org.schabi.newpipe.databinding.ActivityMainBinding;
import org.schabi.newpipe.databinding.DrawerHeaderBinding; import org.schabi.newpipe.databinding.DrawerHeaderBinding;
import org.schabi.newpipe.databinding.DrawerLayoutBinding; import org.schabi.newpipe.databinding.DrawerLayoutBinding;
@ -89,6 +87,12 @@ import org.schabi.newpipe.util.TLSSocketFactoryCompat;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView; import org.schabi.newpipe.views.FocusOverlayView;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release"); public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");

View File

@ -188,7 +188,7 @@ public class RouterActivity extends AppCompatActivity {
.setPositiveButton(R.string.open_in_browser, .setPositiveButton(R.string.open_in_browser,
(dialog, which) -> ShareUtils.openUrlInBrowser(this, url)) (dialog, which) -> ShareUtils.openUrlInBrowser(this, url))
.setNegativeButton(R.string.share, .setNegativeButton(R.string.share,
(dialog, which) -> ShareUtils.shareUrl(this, "", url)) // no subject (dialog, which) -> ShareUtils.shareText(this, "", url)) // no subject
.setNeutralButton(R.string.cancel, null) .setNeutralButton(R.string.cancel, null)
.setOnDismissListener(dialog -> finish()) .setOnDismissListener(dialog -> finish())
.show(); .show();

View File

@ -146,16 +146,13 @@ public class AboutActivity extends AppCompatActivity {
aboutBinding.appVersion.setText(BuildConfig.VERSION_NAME); aboutBinding.appVersion.setText(BuildConfig.VERSION_NAME);
aboutBinding.githubLink.setOnClickListener(nv -> aboutBinding.githubLink.setOnClickListener(nv ->
openUrlInBrowser(context, context.getString(R.string.github_url), openUrlInBrowser(context, context.getString(R.string.github_url), false));
false));
aboutBinding.donationLink.setOnClickListener(v -> aboutBinding.donationLink.setOnClickListener(v ->
openUrlInBrowser(context, context.getString(R.string.donation_url), openUrlInBrowser(context, context.getString(R.string.donation_url), false));
false));
aboutBinding.websiteLink.setOnClickListener(nv -> aboutBinding.websiteLink.setOnClickListener(nv ->
openUrlInBrowser(context, context.getString(R.string.website_url), openUrlInBrowser(context, context.getString(R.string.website_url), false));
false));
aboutBinding.privacyPolicyLink.setOnClickListener(v -> aboutBinding.privacyPolicyLink.setOnClickListener(v ->
openUrlInBrowser(context, context.getString(R.string.privacy_policy_url), openUrlInBrowser(context, context.getString(R.string.privacy_policy_url),

View File

@ -95,12 +95,12 @@ import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.ExtractorHelper;
import org.schabi.newpipe.util.ImageDisplayConstants; import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.LinkHelper;
import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ShareUtils; import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.TextLinkifier;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.AnimatedProgressBar; import org.schabi.newpipe.views.AnimatedProgressBar;
import org.schabi.newpipe.views.LargeTextMovementMethod; import org.schabi.newpipe.views.LargeTextMovementMethod;
@ -1230,16 +1230,16 @@ public final class VideoDetailFragment
} }
if (description.getType() == Description.HTML) { if (description.getType() == Description.HTML) {
LinkHelper.createLinksFromHtmlBlock(requireContext(), description.getContent(), TextLinkifier.createLinksFromHtmlBlock(requireContext(), description.getContent(),
videoDescriptionView, HtmlCompat.FROM_HTML_MODE_LEGACY); videoDescriptionView, HtmlCompat.FROM_HTML_MODE_LEGACY);
videoDescriptionView.setVisibility(View.VISIBLE); videoDescriptionView.setVisibility(View.VISIBLE);
} else if (description.getType() == Description.MARKDOWN) { } else if (description.getType() == Description.MARKDOWN) {
LinkHelper.createLinksFromMarkdownText(requireContext(), description.getContent(), TextLinkifier.createLinksFromMarkdownText(requireContext(), description.getContent(),
videoDescriptionView); videoDescriptionView);
videoDescriptionView.setVisibility(View.VISIBLE); videoDescriptionView.setVisibility(View.VISIBLE);
} else { } else {
//== Description.PLAIN_TEXT //== Description.PLAIN_TEXT
LinkHelper.createLinksFromPlainText(requireContext(), description.getContent(), TextLinkifier.createLinksFromPlainText(requireContext(), description.getContent(),
videoDescriptionView); videoDescriptionView);
videoDescriptionView.setVisibility(View.VISIBLE); videoDescriptionView.setVisibility(View.VISIBLE);
} }

View File

@ -206,7 +206,7 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo>
break; break;
case R.id.menu_item_share: case R.id.menu_item_share:
if (currentInfo != null) { if (currentInfo != null) {
ShareUtils.shareUrl(requireContext(), name, currentInfo.getOriginalUrl()); ShareUtils.shareText(requireContext(), name, currentInfo.getOriginalUrl());
} }
break; break;
default: default:

View File

@ -242,7 +242,7 @@ public class PlaylistFragment extends BaseListInfoFragment<PlaylistInfo> {
ShareUtils.openUrlInBrowser(requireContext(), url); ShareUtils.openUrlInBrowser(requireContext(), url);
break; break;
case R.id.menu_item_share: case R.id.menu_item_share:
ShareUtils.shareUrl(requireContext(), name, url); ShareUtils.shareText(requireContext(), name, url);
break; break;
case R.id.menu_item_bookmark: case R.id.menu_item_bookmark:
onBookmarkClicked(); onBookmarkClicked();

View File

@ -13,15 +13,14 @@ import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.info_list.InfoItemBuilder;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.CommentTextOnTouchListener; import org.schabi.newpipe.util.CommentTextOnTouchListener;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ImageDisplayConstants; import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.NavigationHelper;

View File

@ -1,10 +1,11 @@
package org.schabi.newpipe.info_list.holder; package org.schabi.newpipe.info_list.holder;
import androidx.preference.PreferenceManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;

View File

@ -4,16 +4,15 @@ import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.View; import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;

View File

@ -33,9 +33,9 @@ import org.schabi.newpipe.util.OnClickGesture;
import java.util.List; import java.util.List;
import icepick.State; import icepick.State;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;

View File

@ -300,7 +300,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
val actions = DialogInterface.OnClickListener { _, i -> val actions = DialogInterface.OnClickListener { _, i ->
when (i) { when (i) {
0 -> ShareUtils.shareUrl(requireContext(), selectedItem.name, selectedItem.url) 0 -> ShareUtils.shareText(requireContext(), selectedItem.name, selectedItem.url)
1 -> deleteChannel(selectedItem) 1 -> deleteChannel(selectedItem)
} }
} }

View File

@ -34,8 +34,8 @@ import android.view.WindowManager;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import org.schabi.newpipe.databinding.PlayerBinding;
import org.schabi.newpipe.App; import org.schabi.newpipe.App;
import org.schabi.newpipe.databinding.PlayerBinding;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;

View File

@ -46,6 +46,7 @@ import java.util.List;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed; import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
import static org.schabi.newpipe.util.ShareUtils.shareText;
public final class PlayQueueActivity extends AppCompatActivity public final class PlayQueueActivity extends AppCompatActivity
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener, implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
@ -311,7 +312,7 @@ public final class PlayQueueActivity extends AppCompatActivity
final MenuItem share = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 3, final MenuItem share = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 3,
Menu.NONE, R.string.share); Menu.NONE, R.string.share);
share.setOnMenuItemClickListener(menuItem -> { share.setOnMenuItemClickListener(menuItem -> {
shareUrl(item.getTitle(), item.getUrl()); shareText(getApplicationContext(), item.getTitle(), item.getUrl());
return true; return true;
}); });
@ -505,18 +506,6 @@ public final class PlayQueueActivity extends AppCompatActivity
() -> PlaylistCreationDialog.newInstance(d).show(getSupportFragmentManager(), TAG)); () -> PlaylistCreationDialog.newInstance(d).show(getSupportFragmentManager(), TAG));
} }
////////////////////////////////////////////////////////////////////////////
// Share
////////////////////////////////////////////////////////////////////////////
private void shareUrl(final String subject, final String url) {
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, url);
startActivity(Intent.createChooser(intent, getString(R.string.share_dialog_title)));
}
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Binding Service Listener // Binding Service Listener
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////

View File

@ -3553,7 +3553,7 @@ public final class Player implements
&& currentMetadata.getMetadata().getServiceId() == YouTube.getServiceId()) { && currentMetadata.getMetadata().getServiceId() == YouTube.getServiceId()) {
videoUrl += ("&t=" + ts); videoUrl += ("&t=" + ts);
} }
ShareUtils.shareUrl(context, getVideoTitle(), videoUrl); ShareUtils.shareText(context, getVideoTitle(), videoUrl);
} }
private void onPlayWithKodiClicked() { private void onPlayWithKodiClicked() {

View File

@ -6,9 +6,12 @@ import android.util.AttributeSet;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetBehavior;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.util.Arrays; import java.util.Arrays;

View File

@ -3,7 +3,6 @@ package org.schabi.newpipe.player.helper;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import androidx.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
@ -14,6 +13,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.util.SliderStrategy; import org.schabi.newpipe.util.SliderStrategy;

View File

@ -21,8 +21,8 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import io.reactivex.rxjava3.core.BackpressureStrategy;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.BackpressureStrategy;
import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.subjects.BehaviorSubject; import io.reactivex.rxjava3.subjects.BehaviorSubject;

View File

@ -244,7 +244,7 @@ public class ErrorActivity extends AppCompatActivity {
goToReturnActivity(); goToReturnActivity();
break; break;
case R.id.menu_item_share_error: case R.id.menu_item_share_error:
ShareUtils.shareUrl(this, getString(R.string.error_report_title), buildJson()); ShareUtils.shareText(this, getString(R.string.error_report_title), buildJson());
break; break;
} }
return false; return false;
@ -267,7 +267,7 @@ public class ErrorActivity extends AppCompatActivity {
.putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT) .putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT)
.putExtra(Intent.EXTRA_TEXT, buildJson()); .putExtra(Intent.EXTRA_TEXT, buildJson());
if (i.resolveActivity(getPackageManager()) != null) { if (i.resolveActivity(getPackageManager()) != null) {
ShareUtils.openContentInApp(context, i); ShareUtils.openIntentInApp(context, i);
} }
} else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub
ShareUtils.openUrlInBrowser(this, ERROR_GITHUB_ISSUE_URL, false); ShareUtils.openUrlInBrowser(this, ERROR_GITHUB_ISSUE_URL, false);

View File

@ -2,12 +2,12 @@ package org.schabi.newpipe.settings;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import androidx.preference.PreferenceManager;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;

View File

@ -30,8 +30,8 @@ import java.util.List;
import java.util.Vector; import java.util.Vector;
import de.hdodenhof.circleimageview.CircleImageView; import de.hdodenhof.circleimageview.CircleImageView;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.schedulers.Schedulers;

View File

@ -15,6 +15,7 @@ import android.widget.RadioButton;
import android.widget.RadioGroup; import android.widget.RadioGroup;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
@ -22,7 +23,7 @@ import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.widget.TextViewCompat; import androidx.core.widget.TextViewCompat;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import java.util.List;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.player.MainPlayer; import org.schabi.newpipe.player.MainPlayer;
import org.schabi.newpipe.player.NotificationConstants; import org.schabi.newpipe.player.NotificationConstants;
@ -30,6 +31,8 @@ import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView; import org.schabi.newpipe.views.FocusOverlayView;
import java.util.List;
public class NotificationActionsPreference extends Preference { public class NotificationActionsPreference extends Preference {
public NotificationActionsPreference(final Context context, final AttributeSet attrs) { public NotificationActionsPreference(final Context context, final AttributeSet attrs) {

View File

@ -2,9 +2,10 @@ package org.schabi.newpipe.settings.tabs;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.preference.PreferenceManager;
import android.widget.Toast; import android.widget.Toast;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.util.List; import java.util.List;

View File

@ -23,8 +23,8 @@ import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.schedulers.Schedulers;
public class CommentTextOnTouchListener implements View.OnTouchListener { public class CommentTextOnTouchListener implements View.OnTouchListener {

View File

@ -365,7 +365,7 @@ public final class ExtractorHelper {
} }
} }
LinkHelper.createLinksFromHtmlBlock(context, stringBuilder.toString(), TextLinkifier.createLinksFromHtmlBlock(context, stringBuilder.toString(),
metaInfoTextView, HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING); metaInfoTextView, HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING);
metaInfoTextView.setMovementMethod(LinkMovementMethod.getInstance()); metaInfoTextView.setMovementMethod(LinkMovementMethod.getInstance());
metaInfoTextView.setVisibility(View.VISIBLE); metaInfoTextView.setVisibility(View.VISIBLE);

View File

@ -2,6 +2,7 @@ package org.schabi.newpipe.util;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;

View File

@ -4,11 +4,10 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.MediaFormat; import org.schabi.newpipe.extractor.MediaFormat;

View File

@ -9,10 +9,19 @@ import android.icu.text.CompactDecimalFormat;
import android.os.Build; import android.os.Build;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.PluralsRes; import androidx.annotation.PluralsRes;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import org.ocpsoft.prettytime.PrettyTime;
import org.ocpsoft.prettytime.units.Decade;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.localization.ContentCountry;
import org.schabi.newpipe.ktx.OffsetDateTimeKt;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.NumberFormat; import java.text.NumberFormat;
@ -24,12 +33,6 @@ import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import org.ocpsoft.prettytime.PrettyTime;
import org.ocpsoft.prettytime.units.Decade;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.localization.ContentCountry;
import org.schabi.newpipe.ktx.OffsetDateTimeKt;
/* /*

View File

@ -2,7 +2,6 @@ package org.schabi.newpipe.util;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
@ -46,9 +45,9 @@ import org.schabi.newpipe.local.history.StatisticsPlaylistFragment;
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment; import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
import org.schabi.newpipe.local.subscription.SubscriptionFragment; import org.schabi.newpipe.local.subscription.SubscriptionFragment;
import org.schabi.newpipe.local.subscription.SubscriptionsImportFragment; import org.schabi.newpipe.local.subscription.SubscriptionsImportFragment;
import org.schabi.newpipe.player.MainPlayer;
import org.schabi.newpipe.player.PlayQueueActivity; import org.schabi.newpipe.player.PlayQueueActivity;
import org.schabi.newpipe.player.Player; import org.schabi.newpipe.player.Player;
import org.schabi.newpipe.player.MainPlayer;
import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.helper.PlayerHolder; import org.schabi.newpipe.player.helper.PlayerHolder;
import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueue;
@ -57,6 +56,8 @@ import org.schabi.newpipe.settings.SettingsActivity;
import java.util.ArrayList; import java.util.ArrayList;
import static org.schabi.newpipe.util.ShareUtils.installApp;
public final class NavigationHelper { public final class NavigationHelper {
public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag"; public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag";
public static final String SEARCH_FRAGMENT_TAG = "search_fragment_tag"; public static final String SEARCH_FRAGMENT_TAG = "search_fragment_tag";
@ -246,7 +247,7 @@ public final class NavigationHelper {
public static void resolveActivityOrAskToInstall(final Context context, final Intent intent) { public static void resolveActivityOrAskToInstall(final Context context, final Intent intent) {
if (intent.resolveActivity(context.getPackageManager()) != null) { if (intent.resolveActivity(context.getPackageManager()) != null) {
ShareUtils.openContentInApp(context, intent); ShareUtils.openIntentInApp(context, intent);
} else { } else {
if (context instanceof Activity) { if (context instanceof Activity) {
new AlertDialog.Builder(context) new AlertDialog.Builder(context)
@ -566,17 +567,6 @@ public final class NavigationHelper {
return getOpenIntent(context, url, service.getServiceId(), linkType); return getOpenIntent(context, url, service.getServiceId(), linkType);
} }
private static void installApp(final Context context, final String packageName) {
try {
// Try market:// scheme
ShareUtils.openUrlInBrowser(context, "market://details?id=" + packageName, false);
} catch (final ActivityNotFoundException e) {
// Fall back to google play URL (don't worry F-Droid can handle it :)
ShareUtils.openUrlInBrowser(context,
"https://play.google.com/store/apps/details?id=" + packageName, false);
}
}
/** /**
* Start an activity to install Kore. * Start an activity to install Kore.
* *

View File

@ -2,6 +2,7 @@ package org.schabi.newpipe.util;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonArray;

View File

@ -2,10 +2,10 @@ package org.schabi.newpipe.util;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.preference.PreferenceManager;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.preference.PreferenceManager;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParser;

View File

@ -6,7 +6,6 @@ import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri; import android.net.Uri;
import android.widget.Toast; import android.widget.Toast;
@ -18,6 +17,27 @@ public final class ShareUtils {
private ShareUtils() { private ShareUtils() {
} }
/**
* Open an Intent to install an app.
* <p>
* This method will first try open to Google Play Store with the market scheme and falls back to
* Google Play Store web url if this first cannot be found.
*
* @param context the context to use
* @param packageName the package to be installed
*/
public static void installApp(final Context context, final String packageName) {
try {
// Try market:// scheme
openIntentInApp(context, new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + packageName)));
} catch (final ActivityNotFoundException e) {
// Fall back to Google Play Store Web URL (don't worry, F-Droid can handle it :))
openUrlInBrowser(context,
"https://play.google.com/store/apps/details?id=" + packageName, false);
}
}
/** /**
* Open the url with the system default browser. * Open the url with the system default browser.
* <p> * <p>
@ -26,12 +46,11 @@ public final class ShareUtils {
* *
* @param context the context to use * @param context the context to use
* @param url the url to browse * @param url the url to browse
* @param httpDefaultBrowserTest the boolean to set if the * @param httpDefaultBrowserTest the boolean to set if the test for the default browser will be
* test for the default browser will be for HTTP protocol * for HTTP protocol or for the created intent
* or for the created intent
*/ */
public static void openUrlInBrowser(final Context context, final String url, public static void openUrlInBrowser(final Context context, final String url,
final Boolean httpDefaultBrowserTest) { final boolean httpDefaultBrowserTest) {
final String defaultPackageName; final String defaultPackageName;
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)) final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@ -42,14 +61,14 @@ public final class ShareUtils {
} }
if (defaultPackageName.equals("android")) { if (defaultPackageName.equals("android")) {
// no browser set as default (doesn't work on some devices) // No browser set as default (doesn't work on some devices)
openInDefaultApp(context, intent); openInDefaultApp(context, intent);
} else { } else {
try { try {
intent.setPackage(defaultPackageName); intent.setPackage(defaultPackageName);
context.startActivity(intent); context.startActivity(intent);
} catch (final ActivityNotFoundException e) { } catch (final ActivityNotFoundException e) {
// not a browser but an app chooser because of OEMs changes // Not a browser but an app chooser because of OEMs changes
intent.setPackage(null); intent.setPackage(null);
openInDefaultApp(context, intent); openInDefaultApp(context, intent);
} }
@ -62,7 +81,7 @@ public final class ShareUtils {
* If no browser is set as default, fallbacks to * If no browser is set as default, fallbacks to
* {@link ShareUtils#openInDefaultApp(Context, Intent)} * {@link ShareUtils#openInDefaultApp(Context, Intent)}
* <p> * <p>
* This call {@link ShareUtils#openUrlInBrowser(Context, String, Boolean)} with true * This calls {@link ShareUtils#openUrlInBrowser(Context, String, boolean)} with true
* for the boolean parameter * for the boolean parameter
* *
* @param context the context to use * @param context the context to use
@ -73,26 +92,29 @@ public final class ShareUtils {
} }
/** /**
* Open a content with the system default browser. * Open an intent with the system default app.
* <p>
* The intent can be of every type, excepted a web intent for which
* {@link ShareUtils#openUrlInBrowser(Context, String, boolean)} should be used.
* <p> * <p>
* If no app is set as default, fallbacks to * If no app is set as default, fallbacks to
* {@link ShareUtils#openInDefaultApp(Context, Intent)} * {@link ShareUtils#openInDefaultApp(Context, Intent)}
* *
* @param context the context to use * @param context the context to use
* @param intent the intent of the file to open * @param intent the intent to open
*/ */
public static void openContentInApp(final Context context, final Intent intent) { public static void openIntentInApp(final Context context, final Intent intent) {
final String defaultAppPackageName = getDefaultAppPackageName(context, intent); final String defaultAppPackageName = getDefaultAppPackageName(context, intent);
if (defaultAppPackageName.equals("android")) { if (defaultAppPackageName.equals("android")) {
// no app set as default (doesn't work on some devices) // No app set as default (doesn't work on some devices)
openInDefaultApp(context, intent); openInDefaultApp(context, intent);
} else { } else {
try { try {
intent.setPackage(defaultAppPackageName); intent.setPackage(defaultAppPackageName);
context.startActivity(intent); context.startActivity(intent);
} catch (final ActivityNotFoundException e) { } catch (final ActivityNotFoundException e) {
// not an app to open a file but an app chooser because of OEMs changes // Not an app to open the intent but an app chooser because of OEMs changes
intent.setPackage(null); intent.setPackage(null);
openInDefaultApp(context, intent); openInDefaultApp(context, intent);
} }
@ -143,9 +165,8 @@ public final class ShareUtils {
private static String getDefaultBrowserPackageName(final Context context) { private static String getDefaultBrowserPackageName(final Context context) {
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://")) final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
final ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, return context.getPackageManager().resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY); PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName;
return resolveInfo.activityInfo.packageName;
} }
/** /**
@ -155,11 +176,12 @@ public final class ShareUtils {
* @param subject the url subject, typically the title * @param subject the url subject, typically the title
* @param url the url to share * @param url the url to share
*/ */
public static void shareUrl(final Context context, final String subject, final String url) { public static void shareText(final Context context, final String subject, final String url) {
final Intent shareIntent = new Intent(Intent.ACTION_SEND); final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain"); shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject); shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
shareIntent.putExtra(Intent.EXTRA_TEXT, url); shareIntent.putExtra(Intent.EXTRA_TEXT, url);
final Intent intent = new Intent(Intent.ACTION_CHOOSER); final Intent intent = new Intent(Intent.ACTION_CHOOSER);
intent.putExtra(Intent.EXTRA_INTENT, shareIntent); intent.putExtra(Intent.EXTRA_INTENT, shareIntent);
intent.putExtra(Intent.EXTRA_TITLE, context.getString(R.string.share_dialog_title)); intent.putExtra(Intent.EXTRA_TITLE, context.getString(R.string.share_dialog_title));

View File

@ -81,7 +81,7 @@ public enum StreamDialogEntry {
}), }),
share(R.string.share, (fragment, item) -> share(R.string.share, (fragment, item) ->
ShareUtils.shareUrl(fragment.getContext(), item.getName(), item.getUrl())); ShareUtils.shareText(fragment.getContext(), item.getName(), item.getUrl()));
/////////////// ///////////////

View File

@ -14,15 +14,15 @@ import androidx.core.text.HtmlCompat;
import io.noties.markwon.Markwon; import io.noties.markwon.Markwon;
import io.noties.markwon.linkify.LinkifyPlugin; import io.noties.markwon.linkify.LinkifyPlugin;
public final class LinkHelper { public final class TextLinkifier {
private LinkHelper() { private TextLinkifier() {
} }
/** /**
* Create web links for contents with an HTML description. * Create web links for contents with an HTML description.
* <p> * <p>
* This will call * This will call
* {@link LinkHelper#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)} * {@link TextLinkifier#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)}
* after linked the URLs with {@link HtmlCompat#fromHtml(String, int)}. * after linked the URLs with {@link HtmlCompat#fromHtml(String, int)}.
* *
* @param context the context to use * @param context the context to use
@ -43,7 +43,7 @@ public final class LinkHelper {
* Create web links for contents with a plain text description. * Create web links for contents with a plain text description.
* <p> * <p>
* This will call * This will call
* {@link LinkHelper#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)} * {@link TextLinkifier#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)}
* after linked the URLs with {@link TextView#setAutoLinkMask(int)} and * after linked the URLs with {@link TextView#setAutoLinkMask(int)} and
* {@link TextView#setText(CharSequence, TextView.BufferType)}. * {@link TextView#setText(CharSequence, TextView.BufferType)}.
* *
@ -63,7 +63,7 @@ public final class LinkHelper {
* Create web links for contents with a markdown description. * Create web links for contents with a markdown description.
* <p> * <p>
* This will call * This will call
* {@link LinkHelper#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)} * {@link TextLinkifier#changeIntentsOfDescriptionLinks(Context, CharSequence, TextView)}
* after creating an {@link Markwon} object and using * after creating an {@link Markwon} object and using
* {@link Markwon#setMarkdown(TextView, String)}. * {@link Markwon#setMarkdown(TextView, String)}.
* *
@ -84,7 +84,7 @@ public final class LinkHelper {
* <p> * <p>
* Instead of using an ACTION_VIEW intent in the description of a content, this method will * Instead of using an ACTION_VIEW intent in the description of a content, this method will
* parse the CharSequence and replace all current web links with * parse the CharSequence and replace all current web links with
* {@link ShareUtils#openUrlInBrowser(Context, String, Boolean)}. * {@link ShareUtils#openUrlInBrowser(Context, String, boolean)}.
* <p> * <p>
* This method is required in order to intercept links and maybe, show a confirmation dialog * This method is required in order to intercept links and maybe, show a confirmation dialog
* before opening a web link. * before opening a web link.
@ -105,6 +105,7 @@ public final class LinkHelper {
ShareUtils.openUrlInBrowser(context, span.getURL(), false); ShareUtils.openUrlInBrowser(context, span.getURL(), false);
} }
}; };
textBlockLinked.setSpan(clickableSpan, textBlockLinked.getSpanStart(span), textBlockLinked.setSpan(clickableSpan, textBlockLinked.getSpanStart(span),
textBlockLinked.getSpanEnd(span), textBlockLinked.getSpanFlags(span)); textBlockLinked.getSpanEnd(span), textBlockLinked.getSpanFlags(span));
textBlockLinked.removeSpan(span); textBlockLinked.removeSpan(span);

View File

@ -22,7 +22,6 @@ package org.schabi.newpipe.util;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import androidx.preference.PreferenceManager;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
@ -32,6 +31,7 @@ import androidx.annotation.StyleRes;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;

View File

@ -2,10 +2,12 @@ package org.schabi.newpipe.views;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout;
public class CustomCollapsingToolbarLayout extends CollapsingToolbarLayout { public class CustomCollapsingToolbarLayout extends CollapsingToolbarLayout {

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.os.Build; import android.os.Build;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.SurfaceView; import android.view.SurfaceView;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIT; import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIT;

View File

@ -24,11 +24,12 @@ import android.os.Build;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowInsets; import android.view.WindowInsets;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
public final class FocusAwareCoordinator extends CoordinatorLayout { public final class FocusAwareCoordinator extends CoordinatorLayout {

View File

@ -24,10 +24,6 @@ import android.os.Handler.Callback;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.os.Parcelable; import android.os.Parcelable;
import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import android.widget.Toast; import android.widget.Toast;
@ -37,6 +33,9 @@ import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationCompat.Builder; import androidx.core.app.NotificationCompat.Builder;
import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.download.DownloadActivity; import org.schabi.newpipe.download.DownloadActivity;

View File

@ -364,7 +364,7 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
//mContext.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); //mContext.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (intent.resolveActivity(mContext.getPackageManager()) != null) { if (intent.resolveActivity(mContext.getPackageManager()) != null) {
ShareUtils.openContentInApp(mContext, intent); ShareUtils.openIntentInApp(mContext, intent);
} else { } else {
Toast.makeText(mContext, R.string.toast_no_player, Toast.LENGTH_LONG).show(); Toast.makeText(mContext, R.string.toast_no_player, Toast.LENGTH_LONG).show();
} }

View File

@ -11,7 +11,6 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import androidx.preference.PreferenceManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -21,6 +20,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;

View File

@ -13,7 +13,7 @@
<suppress checks="FinalParameters" <suppress checks="FinalParameters"
files="ListHelper.java" files="ListHelper.java"
lines="281,313"/> lines="280,312"/>
<suppress checks="EmptyBlock" <suppress checks="EmptyBlock"
files="ContentSettingsFragment.java" files="ContentSettingsFragment.java"