mirror of
https://github.com/TeamNewPipe/NewPipe.git
synced 2024-11-22 11:02:35 +01:00
Store/retrieve parcelable arrays as lists instead.
This commit is contained in:
parent
76f1e588f7
commit
f9fc1cd817
@ -25,6 +25,7 @@ import android.view.ViewGroup;
|
|||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.os.BundleCompat;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.viewpager.widget.PagerAdapter;
|
import androidx.viewpager.widget.PagerAdapter;
|
||||||
|
|
||||||
@ -284,7 +285,7 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
|
|||||||
Bundle state = null;
|
Bundle state = null;
|
||||||
if (!mSavedState.isEmpty()) {
|
if (!mSavedState.isEmpty()) {
|
||||||
state = new Bundle();
|
state = new Bundle();
|
||||||
state.putParcelableArray("states", mSavedState.toArray(new Fragment.SavedState[0]));
|
state.putParcelableArrayList("states", mSavedState);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < mFragments.size(); i++) {
|
for (int i = 0; i < mFragments.size(); i++) {
|
||||||
final Fragment f = mFragments.get(i);
|
final Fragment f = mFragments.get(i);
|
||||||
@ -311,13 +312,12 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
|
|||||||
if (state != null) {
|
if (state != null) {
|
||||||
final Bundle bundle = (Bundle) state;
|
final Bundle bundle = (Bundle) state;
|
||||||
bundle.setClassLoader(loader);
|
bundle.setClassLoader(loader);
|
||||||
final Parcelable[] fss = bundle.getParcelableArray("states");
|
final var states = BundleCompat.getParcelableArrayList(bundle, "states",
|
||||||
|
Fragment.SavedState.class);
|
||||||
mSavedState.clear();
|
mSavedState.clear();
|
||||||
mFragments.clear();
|
mFragments.clear();
|
||||||
if (fss != null) {
|
if (states != null) {
|
||||||
for (final Parcelable parcelable : fss) {
|
mSavedState.addAll(states);
|
||||||
mSavedState.add((Fragment.SavedState) parcelable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
final Iterable<String> keys = bundle.keySet();
|
final Iterable<String> keys = bundle.keySet();
|
||||||
for (final String key : keys) {
|
for (final String key : keys) {
|
||||||
|
@ -116,7 +116,7 @@ class AboutActivity : AppCompatActivity() {
|
|||||||
/**
|
/**
|
||||||
* List of all software components.
|
* List of all software components.
|
||||||
*/
|
*/
|
||||||
private val SOFTWARE_COMPONENTS = arrayOf(
|
private val SOFTWARE_COMPONENTS = arrayListOf(
|
||||||
SoftwareComponent(
|
SoftwareComponent(
|
||||||
"ACRA", "2013", "Kevin Gaudin",
|
"ACRA", "2013", "Kevin Gaudin",
|
||||||
"https://github.com/ACRA/acra", StandardLicenses.APACHE2
|
"https://github.com/ACRA/acra", StandardLicenses.APACHE2
|
||||||
|
@ -18,6 +18,7 @@ import org.schabi.newpipe.BuildConfig
|
|||||||
import org.schabi.newpipe.R
|
import org.schabi.newpipe.R
|
||||||
import org.schabi.newpipe.databinding.FragmentLicensesBinding
|
import org.schabi.newpipe.databinding.FragmentLicensesBinding
|
||||||
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
|
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
|
||||||
|
import org.schabi.newpipe.ktx.parcelableArrayList
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils
|
import org.schabi.newpipe.util.external_communication.ShareUtils
|
||||||
|
|
||||||
@ -25,16 +26,15 @@ import org.schabi.newpipe.util.external_communication.ShareUtils
|
|||||||
* Fragment containing the software licenses.
|
* Fragment containing the software licenses.
|
||||||
*/
|
*/
|
||||||
class LicenseFragment : Fragment() {
|
class LicenseFragment : Fragment() {
|
||||||
private lateinit var softwareComponents: Array<SoftwareComponent>
|
private lateinit var softwareComponents: List<SoftwareComponent>
|
||||||
private var activeSoftwareComponent: SoftwareComponent? = null
|
private var activeSoftwareComponent: SoftwareComponent? = null
|
||||||
private val compositeDisposable = CompositeDisposable()
|
private val compositeDisposable = CompositeDisposable()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
softwareComponents = arguments?.getParcelableArray(ARG_COMPONENTS) as Array<SoftwareComponent>
|
softwareComponents = arguments?.parcelableArrayList<SoftwareComponent>(ARG_COMPONENTS)!!
|
||||||
|
.sortedBy { it.name } // Sort components by name
|
||||||
activeSoftwareComponent = savedInstanceState?.getSerializable(SOFTWARE_COMPONENT_KEY) as? SoftwareComponent
|
activeSoftwareComponent = savedInstanceState?.getSerializable(SOFTWARE_COMPONENT_KEY) as? SoftwareComponent
|
||||||
// Sort components by name
|
|
||||||
softwareComponents.sortBy { it.name }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
@ -130,7 +130,8 @@ class LicenseFragment : Fragment() {
|
|||||||
StandardLicenses.GPL3,
|
StandardLicenses.GPL3,
|
||||||
BuildConfig.VERSION_NAME
|
BuildConfig.VERSION_NAME
|
||||||
)
|
)
|
||||||
fun newInstance(softwareComponents: Array<SoftwareComponent>): LicenseFragment {
|
|
||||||
|
fun newInstance(softwareComponents: ArrayList<SoftwareComponent>): LicenseFragment {
|
||||||
val fragment = LicenseFragment()
|
val fragment = LicenseFragment()
|
||||||
fragment.arguments = bundleOf(ARG_COMPONENTS to softwareComponents)
|
fragment.arguments = bundleOf(ARG_COMPONENTS to softwareComponents)
|
||||||
return fragment
|
return fragment
|
||||||
|
@ -74,6 +74,7 @@ import org.schabi.newpipe.util.ThemeHelper;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -1052,7 +1053,7 @@ public class DownloadDialog extends DialogFragment
|
|||||||
final char kind;
|
final char kind;
|
||||||
int threads = dialogBinding.threads.getProgress() + 1;
|
int threads = dialogBinding.threads.getProgress() + 1;
|
||||||
final String[] urls;
|
final String[] urls;
|
||||||
final MissionRecoveryInfo[] recoveryInfo;
|
final List<MissionRecoveryInfo> recoveryInfo;
|
||||||
String psName = null;
|
String psName = null;
|
||||||
String[] psArgs = null;
|
String[] psArgs = null;
|
||||||
long nearLength = 0;
|
long nearLength = 0;
|
||||||
@ -1117,9 +1118,7 @@ public class DownloadDialog extends DialogFragment
|
|||||||
urls = new String[] {
|
urls = new String[] {
|
||||||
selectedStream.getContent()
|
selectedStream.getContent()
|
||||||
};
|
};
|
||||||
recoveryInfo = new MissionRecoveryInfo[] {
|
recoveryInfo = List.of(new MissionRecoveryInfo(selectedStream));
|
||||||
new MissionRecoveryInfo(selectedStream)
|
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
if (secondaryStream.getDeliveryMethod() != PROGRESSIVE_HTTP) {
|
if (secondaryStream.getDeliveryMethod() != PROGRESSIVE_HTTP) {
|
||||||
throw new IllegalArgumentException("Unsupported stream delivery format"
|
throw new IllegalArgumentException("Unsupported stream delivery format"
|
||||||
@ -1129,12 +1128,14 @@ public class DownloadDialog extends DialogFragment
|
|||||||
urls = new String[] {
|
urls = new String[] {
|
||||||
selectedStream.getContent(), secondaryStream.getContent()
|
selectedStream.getContent(), secondaryStream.getContent()
|
||||||
};
|
};
|
||||||
recoveryInfo = new MissionRecoveryInfo[] {new MissionRecoveryInfo(selectedStream),
|
recoveryInfo = List.of(
|
||||||
new MissionRecoveryInfo(secondaryStream)};
|
new MissionRecoveryInfo(selectedStream),
|
||||||
|
new MissionRecoveryInfo(secondaryStream)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadManagerService.startMission(context, urls, storage, kind, threads,
|
DownloadManagerService.startMission(context, urls, storage, kind, threads,
|
||||||
currentInfo.getUrl(), psName, psArgs, nearLength, recoveryInfo);
|
currentInfo.getUrl(), psName, psArgs, nearLength, new ArrayList<>(recoveryInfo));
|
||||||
|
|
||||||
Toast.makeText(context, getString(R.string.download_has_started),
|
Toast.makeText(context, getString(R.string.download_has_started),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
|
9
app/src/main/java/org/schabi/newpipe/ktx/Bundle.kt
Normal file
9
app/src/main/java/org/schabi/newpipe/ktx/Bundle.kt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package org.schabi.newpipe.ktx
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.Parcelable
|
||||||
|
import androidx.core.os.BundleCompat
|
||||||
|
|
||||||
|
inline fun <reified T : Parcelable> Bundle.parcelableArrayList(key: String?): ArrayList<T>? {
|
||||||
|
return BundleCompat.getParcelableArrayList(this, key, T::class.java)
|
||||||
|
}
|
@ -23,7 +23,6 @@ import android.os.Handler;
|
|||||||
import android.os.Handler.Callback;
|
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.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -36,6 +35,7 @@ import androidx.core.app.NotificationCompat.Builder;
|
|||||||
import androidx.core.app.PendingIntentCompat;
|
import androidx.core.app.PendingIntentCompat;
|
||||||
import androidx.core.app.ServiceCompat;
|
import androidx.core.app.ServiceCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.content.IntentCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
@ -49,6 +49,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import us.shandian.giga.get.DownloadMission;
|
import us.shandian.giga.get.DownloadMission;
|
||||||
import us.shandian.giga.get.MissionRecoveryInfo;
|
import us.shandian.giga.get.MissionRecoveryInfo;
|
||||||
@ -359,29 +360,29 @@ public class DownloadManagerService extends Service {
|
|||||||
*/
|
*/
|
||||||
public static void startMission(Context context, String[] urls, StoredFileHelper storage,
|
public static void startMission(Context context, String[] urls, StoredFileHelper storage,
|
||||||
char kind, int threads, String source, String psName,
|
char kind, int threads, String source, String psName,
|
||||||
String[] psArgs, long nearLength, MissionRecoveryInfo[] recoveryInfo) {
|
String[] psArgs, long nearLength,
|
||||||
Intent intent = new Intent(context, DownloadManagerService.class);
|
ArrayList<MissionRecoveryInfo> recoveryInfo) {
|
||||||
intent.setAction(Intent.ACTION_RUN);
|
final Intent intent = new Intent(context, DownloadManagerService.class)
|
||||||
intent.putExtra(EXTRA_URLS, urls);
|
.setAction(Intent.ACTION_RUN)
|
||||||
intent.putExtra(EXTRA_KIND, kind);
|
.putExtra(EXTRA_URLS, urls)
|
||||||
intent.putExtra(EXTRA_THREADS, threads);
|
.putExtra(EXTRA_KIND, kind)
|
||||||
intent.putExtra(EXTRA_SOURCE, source);
|
.putExtra(EXTRA_THREADS, threads)
|
||||||
intent.putExtra(EXTRA_POSTPROCESSING_NAME, psName);
|
.putExtra(EXTRA_SOURCE, source)
|
||||||
intent.putExtra(EXTRA_POSTPROCESSING_ARGS, psArgs);
|
.putExtra(EXTRA_POSTPROCESSING_NAME, psName)
|
||||||
intent.putExtra(EXTRA_NEAR_LENGTH, nearLength);
|
.putExtra(EXTRA_POSTPROCESSING_ARGS, psArgs)
|
||||||
intent.putExtra(EXTRA_RECOVERY_INFO, recoveryInfo);
|
.putExtra(EXTRA_NEAR_LENGTH, nearLength)
|
||||||
|
.putExtra(EXTRA_RECOVERY_INFO, recoveryInfo)
|
||||||
intent.putExtra(EXTRA_PARENT_PATH, storage.getParentUri());
|
.putExtra(EXTRA_PARENT_PATH, storage.getParentUri())
|
||||||
intent.putExtra(EXTRA_PATH, storage.getUri());
|
.putExtra(EXTRA_PATH, storage.getUri())
|
||||||
intent.putExtra(EXTRA_STORAGE_TAG, storage.getTag());
|
.putExtra(EXTRA_STORAGE_TAG, storage.getTag());
|
||||||
|
|
||||||
context.startService(intent);
|
context.startService(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startMission(Intent intent) {
|
private void startMission(Intent intent) {
|
||||||
String[] urls = intent.getStringArrayExtra(EXTRA_URLS);
|
String[] urls = intent.getStringArrayExtra(EXTRA_URLS);
|
||||||
Uri path = intent.getParcelableExtra(EXTRA_PATH);
|
Uri path = IntentCompat.getParcelableExtra(intent, EXTRA_PATH, Uri.class);
|
||||||
Uri parentPath = intent.getParcelableExtra(EXTRA_PARENT_PATH);
|
Uri parentPath = IntentCompat.getParcelableExtra(intent, EXTRA_PARENT_PATH, Uri.class);
|
||||||
int threads = intent.getIntExtra(EXTRA_THREADS, 1);
|
int threads = intent.getIntExtra(EXTRA_THREADS, 1);
|
||||||
char kind = intent.getCharExtra(EXTRA_KIND, '?');
|
char kind = intent.getCharExtra(EXTRA_KIND, '?');
|
||||||
String psName = intent.getStringExtra(EXTRA_POSTPROCESSING_NAME);
|
String psName = intent.getStringExtra(EXTRA_POSTPROCESSING_NAME);
|
||||||
@ -389,7 +390,9 @@ public class DownloadManagerService extends Service {
|
|||||||
String source = intent.getStringExtra(EXTRA_SOURCE);
|
String source = intent.getStringExtra(EXTRA_SOURCE);
|
||||||
long nearLength = intent.getLongExtra(EXTRA_NEAR_LENGTH, 0);
|
long nearLength = intent.getLongExtra(EXTRA_NEAR_LENGTH, 0);
|
||||||
String tag = intent.getStringExtra(EXTRA_STORAGE_TAG);
|
String tag = intent.getStringExtra(EXTRA_STORAGE_TAG);
|
||||||
Parcelable[] parcelRecovery = intent.getParcelableArrayExtra(EXTRA_RECOVERY_INFO);
|
final var recovery = IntentCompat.getParcelableArrayListExtra(intent, EXTRA_RECOVERY_INFO,
|
||||||
|
MissionRecoveryInfo.class);
|
||||||
|
Objects.requireNonNull(recovery);
|
||||||
|
|
||||||
StoredFileHelper storage;
|
StoredFileHelper storage;
|
||||||
try {
|
try {
|
||||||
@ -404,15 +407,11 @@ public class DownloadManagerService extends Service {
|
|||||||
else
|
else
|
||||||
ps = Postprocessing.getAlgorithm(psName, psArgs);
|
ps = Postprocessing.getAlgorithm(psName, psArgs);
|
||||||
|
|
||||||
MissionRecoveryInfo[] recovery = new MissionRecoveryInfo[parcelRecovery.length];
|
|
||||||
for (int i = 0; i < parcelRecovery.length; i++)
|
|
||||||
recovery[i] = (MissionRecoveryInfo) parcelRecovery[i];
|
|
||||||
|
|
||||||
final DownloadMission mission = new DownloadMission(urls, storage, kind, ps);
|
final DownloadMission mission = new DownloadMission(urls, storage, kind, ps);
|
||||||
mission.threadCount = threads;
|
mission.threadCount = threads;
|
||||||
mission.source = source;
|
mission.source = source;
|
||||||
mission.nearLength = nearLength;
|
mission.nearLength = nearLength;
|
||||||
mission.recoveryInfo = recovery;
|
mission.recoveryInfo = recovery.toArray(MissionRecoveryInfo[]::new);
|
||||||
|
|
||||||
if (ps != null)
|
if (ps != null)
|
||||||
ps.setTemporalDir(DownloadManager.pickAvailableTemporalDir(this));
|
ps.setTemporalDir(DownloadManager.pickAvailableTemporalDir(this));
|
||||||
|
Loading…
Reference in New Issue
Block a user