Skip to content

Commit 261fd5b

Browse files
Merge branch 'refactor' into Uploader-reply-indicator
2 parents a633024 + 10c5a5d commit 261fd5b

235 files changed

Lines changed: 5857 additions & 5001 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ jobs:
7272
- api-level: 21
7373
target: default
7474
arch: x86
75-
- api-level: 33
76-
target: google_apis # emulator API 33 only exists with Google APIs
75+
- api-level: 35
76+
target: default
7777
arch: x86_64
7878

7979
permissions:

README.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,8 @@
99

1010
<p align="center">
1111
<a href="https://github.com/TeamNewPipe/NewPipe/releases" alt="GitHub NewPipe releases"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe.svg" ></a>
12-
<a href="https://github.com/TeamNewPipe/NewPipe-nightly/releases" alt="GitHub NewPipe nightly releases">
13-
<img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe-nightly.svg?labelColor=purple&label=dev%20nightly" >
14-
</a>
15-
<a href="https://github.com/TeamNewPipe/NewPipe-refactor-nightly/releases" alt="GitHub NewPipe refactor nightly releases">
16-
<img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe-refactor-nightly.svg?labelColor=purple&label=refactor%20nightly" >
17-
</a>
12+
<a href="https://github.com/TeamNewPipe/NewPipe-nightly/releases" alt="GitHub NewPipe nightly releases"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe-nightly.svg?labelColor=purple&label=dev%20nightly"></a>
13+
<a href="https://github.com/TeamNewPipe/NewPipe-refactor-nightly/releases" alt="GitHub NewPipe refactor nightly releases"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe-refactor-nightly.svg?labelColor=purple&label=refactor%20nightly"></a>
1814
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a>
1915
<a href="https://github.com/TeamNewPipe/NewPipe/actions" alt="Build Status"><img src="https://github.com/TeamNewPipe/NewPipe/actions/workflows/ci.yml/badge.svg?branch=dev&event=push"></a>
2016
<a href="https://hosted.weblate.org/engage/newpipe/" alt="Translation Status"><img src="https://hosted.weblate.org/widgets/newpipe/-/svg-badge.svg"></a>

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@ plugins {
1717
}
1818

1919
android {
20-
compileSdk 35
20+
compileSdk 36
2121
namespace 'org.schabi.newpipe'
2222

2323
defaultConfig {
2424
applicationId "org.schabi.newpipe"
2525
resValue "string", "app_name", "NewPipe"
2626
minSdk 21
27-
targetSdk 33
27+
targetSdk 35
2828
if (System.properties.containsKey('versionCodeOverride')) {
2929
versionCode System.getProperty('versionCodeOverride') as Integer
3030
} else {
31-
versionCode 1004
31+
versionCode 1005
3232
}
33-
versionName "0.27.7"
33+
versionName "0.28.0"
3434
if (System.properties.containsKey('versionNameSuffix')) {
3535
versionNameSuffix System.getProperty('versionNameSuffix')
3636
}

app/src/main/AndroidManifest.xml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
1111
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
1212
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
13+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
1314
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
1415

1516
<!-- We need to be able to open links in the browser on API 30+ -->
@@ -58,6 +59,15 @@
5859
</intent-filter>
5960
</receiver>
6061

62+
<service
63+
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
64+
android:enabled="false"
65+
android:exported="false">
66+
<meta-data
67+
android:name="autoStoreLocales"
68+
android:value="true" />
69+
</service>
70+
6171
<service
6272
android:name=".player.PlayerService"
6373
android:exported="true"
@@ -95,7 +105,10 @@
95105
android:name="androidx.work.impl.foreground.SystemForegroundService"
96106
android:foregroundServiceType="dataSync"
97107
tools:node="merge" />
98-
<service android:name=".local.feed.service.FeedLoadService" />
108+
109+
<service
110+
android:name=".local.feed.service.FeedLoadService"
111+
android:foregroundServiceType="dataSync" />
99112

100113
<activity
101114
android:name=".PanicResponderActivity"
@@ -127,7 +140,9 @@
127140
android:label="@string/app_name"
128141
android:launchMode="singleTask" />
129142

130-
<service android:name="us.shandian.giga.service.DownloadManagerService" />
143+
<service
144+
android:name="us.shandian.giga.service.DownloadManagerService"
145+
android:foregroundServiceType="dataSync" />
131146

132147
<activity
133148
android:name=".util.FilePickerActivityHelper"

app/src/main/java/org/schabi/newpipe/App.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ open class App :
9797
Localization.getPreferredLocalization(this),
9898
Localization.getPreferredContentCountry(this),
9999
)
100-
Localization.initPrettyTime(Localization.resolvePrettyTime(this))
100+
Localization.initPrettyTime(Localization.resolvePrettyTime())
101101

102102
BridgeStateSaverInitializer.init(this)
103103
StateSaver.init(this)

app/src/main/java/org/schabi/newpipe/DownloaderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
public final class DownloaderImpl extends Downloader {
3131
public static final String USER_AGENT =
32-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0";
32+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0";
3333
public static final String YOUTUBE_RESTRICTED_MODE_COOKIE_KEY =
3434
"youtube_restricted_mode_key";
3535
public static final String YOUTUBE_RESTRICTED_MODE_COOKIE = "PREF=f2=8000000";

app/src/main/java/org/schabi/newpipe/MainActivity.java

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020

2121
package org.schabi.newpipe;
2222

23-
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
24-
2523
import android.content.BroadcastReceiver;
2624
import android.content.Context;
2725
import android.content.Intent;
@@ -49,6 +47,7 @@
4947
import androidx.appcompat.app.ActionBarDrawerToggle;
5048
import androidx.appcompat.app.AppCompatActivity;
5149
import androidx.core.app.ActivityCompat;
50+
import androidx.core.content.ContextCompat;
5251
import androidx.core.view.GravityCompat;
5352
import androidx.drawerlayout.widget.DrawerLayout;
5453
import androidx.fragment.app.Fragment;
@@ -77,6 +76,7 @@
7776
import org.schabi.newpipe.player.helper.PlayerHolder;
7877
import org.schabi.newpipe.player.playqueue.PlayQueue;
7978
import org.schabi.newpipe.settings.UpdateSettingsFragment;
79+
import org.schabi.newpipe.settings.migration.MigrationManager;
8080
import org.schabi.newpipe.util.Constants;
8181
import org.schabi.newpipe.util.DeviceUtils;
8282
import org.schabi.newpipe.util.KioskTranslator;
@@ -137,6 +137,7 @@ protected void onCreate(final Bundle savedInstanceState) {
137137
+ "savedInstanceState = [" + savedInstanceState + "]");
138138
}
139139

140+
Localization.migrateAppLanguageSettingIfNecessary(getApplicationContext());
140141
ThemeHelper.setDayNightMode(this);
141142
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
142143

@@ -153,7 +154,6 @@ protected void onCreate(final Bundle savedInstanceState) {
153154
}
154155
}
155156

156-
assureCorrectAppLanguage(this);
157157
super.onCreate(savedInstanceState);
158158
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
159159
sharedPrefEditor = sharedPreferences.edit();
@@ -192,7 +192,7 @@ protected void onCreate(final Bundle savedInstanceState) {
192192
UpdateSettingsFragment.askForConsentToUpdateChecks(this);
193193
}
194194

195-
Localization.migrateAppLanguageSettingIfNecessary(getApplicationContext());
195+
MigrationManager.showUserInfoIfPresent(this);
196196
}
197197

198198
@Override
@@ -260,19 +260,6 @@ public void onDrawerClosed(final View drawerView) {
260260
*/
261261
private void addDrawerMenuForCurrentService() throws ExtractionException {
262262
//Tabs
263-
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
264-
final StreamingService service = NewPipe.getService(currentServiceId);
265-
266-
int kioskMenuItemId = 0;
267-
268-
for (final String ks : service.getKioskList().getAvailableKiosks()) {
269-
drawerLayoutBinding.navigation.getMenu()
270-
.add(R.id.menu_tabs_group, kioskMenuItemId, 0, KioskTranslator
271-
.getTranslatedKioskName(ks, this))
272-
.setIcon(KioskTranslator.getKioskIcon(ks));
273-
kioskMenuItemId++;
274-
}
275-
276263
drawerLayoutBinding.navigation.getMenu()
277264
.add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER,
278265
R.string.tab_subscriptions)
@@ -290,6 +277,20 @@ private void addDrawerMenuForCurrentService() throws ExtractionException {
290277
.add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history)
291278
.setIcon(R.drawable.ic_history);
292279

280+
//Kiosks
281+
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
282+
final StreamingService service = NewPipe.getService(currentServiceId);
283+
284+
int kioskMenuItemId = 0;
285+
286+
for (final String ks : service.getKioskList().getAvailableKiosks()) {
287+
drawerLayoutBinding.navigation.getMenu()
288+
.add(R.id.menu_kiosks_group, kioskMenuItemId, 0, KioskTranslator
289+
.getTranslatedKioskName(ks, this))
290+
.setIcon(KioskTranslator.getKioskIcon(ks));
291+
kioskMenuItemId++;
292+
}
293+
293294
//Settings and About
294295
drawerLayoutBinding.navigation.getMenu()
295296
.add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings)
@@ -309,10 +310,13 @@ private boolean drawerItemSelected(final MenuItem item) {
309310
changeService(item);
310311
break;
311312
case R.id.menu_tabs_group:
313+
tabSelected(item);
314+
break;
315+
case R.id.menu_kiosks_group:
312316
try {
313-
tabSelected(item);
317+
kioskSelected(item);
314318
} catch (final Exception e) {
315-
ErrorUtil.showUiErrorSnackbar(this, "Selecting main page tab", e);
319+
ErrorUtil.showUiErrorSnackbar(this, "Selecting drawer kiosk", e);
316320
}
317321
break;
318322
case R.id.menu_options_about_group:
@@ -336,7 +340,7 @@ private void changeService(final MenuItem item) {
336340
.setChecked(true);
337341
}
338342

339-
private void tabSelected(final MenuItem item) throws ExtractionException {
343+
private void tabSelected(final MenuItem item) {
340344
switch (item.getItemId()) {
341345
case ITEM_ID_SUBSCRIPTIONS:
342346
NavigationHelper.openSubscriptionFragment(getSupportFragmentManager());
@@ -353,18 +357,19 @@ private void tabSelected(final MenuItem item) throws ExtractionException {
353357
case ITEM_ID_HISTORY:
354358
NavigationHelper.openStatisticFragment(getSupportFragmentManager());
355359
break;
356-
default:
357-
final StreamingService currentService = ServiceHelper.getSelectedService(this);
358-
int kioskMenuItemId = 0;
359-
for (final String kioskId : currentService.getKioskList().getAvailableKiosks()) {
360-
if (kioskMenuItemId == item.getItemId()) {
361-
NavigationHelper.openKioskFragment(getSupportFragmentManager(),
362-
currentService.getServiceId(), kioskId);
363-
break;
364-
}
365-
kioskMenuItemId++;
366-
}
360+
}
361+
}
362+
363+
private void kioskSelected(final MenuItem item) throws ExtractionException {
364+
final StreamingService currentService = ServiceHelper.getSelectedService(this);
365+
int kioskMenuItemId = 0;
366+
for (final String kioskId : currentService.getKioskList().getAvailableKiosks()) {
367+
if (kioskMenuItemId == item.getItemId()) {
368+
NavigationHelper.openKioskFragment(getSupportFragmentManager(),
369+
currentService.getServiceId(), kioskId);
367370
break;
371+
}
372+
kioskMenuItemId++;
368373
}
369374
}
370375

@@ -405,6 +410,7 @@ private void toggleServices() {
405410

406411
drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_services_group);
407412
drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_tabs_group);
413+
drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_kiosks_group);
408414
drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_options_about_group);
409415

410416
// Show up or down arrow
@@ -498,9 +504,8 @@ protected void onDestroy() {
498504

499505
@Override
500506
protected void onResume() {
501-
assureCorrectAppLanguage(this);
502507
// Change the date format to match the selected language on resume
503-
Localization.initPrettyTime(Localization.resolvePrettyTime(getApplicationContext()));
508+
Localization.initPrettyTime(Localization.resolvePrettyTime());
504509
super.onResume();
505510

506511
// Close drawer on return, and don't show animation,
@@ -849,7 +854,7 @@ private void openMiniPlayerUponPlayerStarted() {
849854
return;
850855
}
851856

852-
if (PlayerHolder.getInstance().isPlayerOpen()) {
857+
if (PlayerHolder.INSTANCE.isPlayerOpen()) {
853858
// if the player is already open, no need for a broadcast receiver
854859
openMiniPlayerIfMissing();
855860
} else {
@@ -859,7 +864,7 @@ private void openMiniPlayerUponPlayerStarted() {
859864
public void onReceive(final Context context, final Intent intent) {
860865
if (Objects.equals(intent.getAction(),
861866
VideoDetailFragment.ACTION_PLAYER_STARTED)
862-
&& PlayerHolder.getInstance().isPlayerOpen()) {
867+
&& PlayerHolder.INSTANCE.isPlayerOpen()) {
863868
openMiniPlayerIfMissing();
864869
// At this point the player is added 100%, we can unregister. Other actions
865870
// are useless since the fragment will not be removed after that.
@@ -870,11 +875,12 @@ public void onReceive(final Context context, final Intent intent) {
870875
};
871876
final IntentFilter intentFilter = new IntentFilter();
872877
intentFilter.addAction(VideoDetailFragment.ACTION_PLAYER_STARTED);
873-
registerReceiver(broadcastReceiver, intentFilter);
878+
ContextCompat.registerReceiver(this, broadcastReceiver, intentFilter,
879+
ContextCompat.RECEIVER_EXPORTED);
874880

875881
// If the PlayerHolder is not bound yet, but the service is running, try to bind to it.
876882
// Once the connection is established, the ACTION_PLAYER_STARTED will be sent.
877-
PlayerHolder.getInstance().tryBindIfNeeded(this);
883+
PlayerHolder.INSTANCE.tryBindIfNeeded(this);
878884
}
879885
}
880886

app/src/main/java/org/schabi/newpipe/RouterActivity.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
import org.schabi.newpipe.util.Constants;
8585
import org.schabi.newpipe.util.DeviceUtils;
8686
import org.schabi.newpipe.util.ExtractorHelper;
87-
import org.schabi.newpipe.util.Localization;
8887
import org.schabi.newpipe.util.NavigationHelper;
8988
import org.schabi.newpipe.util.PermissionHelper;
9089
import org.schabi.newpipe.util.ThemeHelper;
@@ -132,7 +131,6 @@ protected void onCreate(final Bundle savedInstanceState) {
132131
ThemeHelper.setDayNightMode(this);
133132
setTheme(ThemeHelper.isLightThemeSelected(this)
134133
? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark);
135-
Localization.assureCorrectAppLanguage(this);
136134

137135
// Pass-through touch events to background activities
138136
// so that our transparent window won't lock UI in the mean time
@@ -701,7 +699,7 @@ private boolean canHandleChoiceLikeShowInfo(final String selectedChoiceKey) {
701699
}
702700

703701
// ...the player is not running or in normal Video-mode/type
704-
final PlayerType playerType = PlayerHolder.getInstance().getType();
702+
final PlayerType playerType = PlayerHolder.INSTANCE.getType();
705703
return playerType == null || playerType == PlayerType.MAIN;
706704
}
707705

app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@ import org.schabi.newpipe.R
99
import org.schabi.newpipe.ui.components.common.ScaffoldWithToolbar
1010
import org.schabi.newpipe.ui.screens.AboutScreen
1111
import org.schabi.newpipe.ui.theme.AppTheme
12-
import org.schabi.newpipe.util.Localization
1312

1413
class AboutActivity : AppCompatActivity() {
1514
override fun onCreate(savedInstanceState: Bundle?) {
16-
Localization.assureCorrectAppLanguage(this)
1715
enableEdgeToEdge()
1816
super.onCreate(savedInstanceState)
1917

app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import us.shandian.giga.service.DownloadManagerService;
2121
import us.shandian.giga.ui.fragment.MissionsFragment;
2222

23-
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
24-
2523
public class DownloadActivity extends AppCompatActivity {
2624

2725
private static final String MISSIONS_FRAGMENT_TAG = "fragment_tag";
@@ -33,7 +31,6 @@ protected void onCreate(final Bundle savedInstanceState) {
3331
i.setClass(this, DownloadManagerService.class);
3432
startService(i);
3533

36-
assureCorrectAppLanguage(this);
3734
ThemeHelper.setTheme(this);
3835

3936
super.onCreate(savedInstanceState);

0 commit comments

Comments
 (0)