Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
295 changes: 205 additions & 90 deletions app/src/main/java/org/schabi/newpipe/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@
import org.schabi.newpipe.player.event.OnKeyDownListener;
import org.schabi.newpipe.player.helper.PlayerHolder;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.settings.drawer_items.DrawerItem;
import org.schabi.newpipe.settings.drawer_items.DrawerItemManager;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.KioskTranslator;
Expand All @@ -88,7 +90,9 @@
import org.schabi.newpipe.views.FocusOverlayView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
Expand All @@ -103,19 +107,27 @@ public class MainActivity extends AppCompatActivity {
private DrawerLayoutBinding drawerLayoutBinding;
private ToolbarLayoutBinding toolbarLayoutBinding;

private DrawerItemManager drawerItemManager;
private List<DrawerItem> drawerItemList = new ArrayList<>();

private ActionBarDrawerToggle toggle;

private boolean servicesShown = false;

private BroadcastReceiver broadcastReceiver;

private static final int ITEM_ID_SUBSCRIPTIONS = -1;
private static final int ITEM_ID_FEED = -2;
private static final int ITEM_ID_BOOKMARKS = -3;
private static final int ITEM_ID_DOWNLOADS = -4;
private static final int ITEM_ID_HISTORY = -5;
private static final int ITEM_ID_SETTINGS = 0;
private static final int ITEM_ID_ABOUT = 1;
static final int ITEM_ID_BLANK = -1;
static final int ITEM_ID_SETTINGS = -2;
static final int ITEM_ID_ABOUT = -3;
static final int ITEM_ID_BOOKMARKS = -4;
static final int ITEM_ID_FEED = -5;
static final int ITEM_ID_SUBSCRIPTIONS = -6;
static final int ITEM_ID_DOWNLOADS = -7;
static final int ITEM_ID_HISTORY = -8;
static final int ITEM_ID_DEFAULT_KIOSK = -9;
static final int ITEM_ID_KIOSK = -10;
static final int ITEM_ID_CHANNEL = -11;
static final int ITEM_ID_PLAYLIST = -12;

private static final int ORDER = 0;

Expand Down Expand Up @@ -166,44 +178,8 @@ protected void onCreate(final Bundle savedInstanceState) {
}

private void setupDrawer() throws Exception {
//Tabs
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
final StreamingService service = NewPipe.getService(currentServiceId);

int kioskId = 0;

for (final String ks : service.getKioskList().getAvailableKiosks()) {
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, kioskId, 0, KioskTranslator
.getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcon(ks, this));
kioskId++;
}

drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER,
R.string.tab_subscriptions)
.setIcon(R.drawable.ic_tv);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title)
.setIcon(R.drawable.ic_rss_feed);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks)
.setIcon(R.drawable.ic_bookmark);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads)
.setIcon(R.drawable.ic_file_download);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history)
.setIcon(R.drawable.ic_history);

//Settings and About
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings)
.setIcon(R.drawable.ic_settings);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about)
.setIcon(R.drawable.ic_info_outline);
drawerItemManager = DrawerItemManager.getManager(this);
setupDrawerItems();

toggle = new ActionBarDrawerToggle(this, mainBinding.getRoot(),
toolbarLayoutBinding.toolbar, R.string.drawer_open, R.string.drawer_close);
Expand Down Expand Up @@ -232,14 +208,192 @@ public void onDrawerClosed(final View drawerView) {
setupDrawerHeader();
}

private void setupDrawerItems() {
refreshDrawerItems();
}

private void drawerAddItem(
final int group,
final int menuId,
final int titleId,
final int iconRes) {
final String title = getResources().getString(titleId);

drawerAddItem(group, menuId, title, iconRes);
}

private void drawerAddItem(
final int group,
final int menuId,
final String title,
final int iconRes) {
drawerLayoutBinding.navigation.getMenu().add(
group,
menuId,
ORDER,
title)
.setIcon(iconRes);
}

private List<String> getUnusedKioskIdList(
final Map<String, Integer> kioskMap,
final List<DrawerItem> drawerItems) {
final List<String> kioskMapKeys = new ArrayList<>(kioskMap.keySet());

for (int i = 0; i < drawerItems.size(); i++) {
final DrawerItem drawerItem = drawerItems.get(i);
if (drawerItem.getDrawerItemId() != ITEM_ID_KIOSK) {
continue;
}

final DrawerItem.KioskDrawerItem kioskDrawerItem =
(DrawerItem.KioskDrawerItem) drawerItem;
final int kioskServiceId = kioskDrawerItem.getKioskServiceId();
final int serviceId = ServiceHelper.getSelectedServiceId(this);
if (kioskServiceId != serviceId) {
continue;
}
final String kioskId = kioskDrawerItem.getKioskId();
kioskMapKeys.remove(kioskId);
}
return kioskMapKeys;
}

private void fillDynamicDrawerContent() {
final Map<String, Integer> kioskMap = getKioskIdsMappedToMenuIds();
final List<String> unusedKioskIdList = getUnusedKioskIdList(kioskMap, drawerItemList);
final int serviceId = ServiceHelper.getSelectedServiceId(this);
int defaultKioskCount = 0;

for (int i = 0; i < drawerItemList.size(); i++) {
final DrawerItem drawerItem = drawerItemList.get(i);

switch (drawerItem.getDrawerItemId()) {
case ITEM_ID_BLANK:
// don't add blank DrawerItems
break;
case ITEM_ID_KIOSK:
final DrawerItem.KioskDrawerItem kioskDrawerItem
= (DrawerItem.KioskDrawerItem) drawerItem;

if (kioskDrawerItem.getKioskServiceId() != serviceId) {
continue;
}

drawerAddItem(
R.id.menu_tabs_group,
kioskMap.get(kioskDrawerItem.getKioskId()),
drawerItem.getDrawerItemName(this),
drawerItem.getDrawerItemIconRes(this));
break;
case ITEM_ID_DEFAULT_KIOSK:
// limits number of visible Kiosks to numbers of actual Kiosks
if (defaultKioskCount >= unusedKioskIdList.size()) {
continue;
}
final String kioskId = unusedKioskIdList.get(defaultKioskCount);
drawerAddItem(
R.id.menu_tabs_group,
kioskMap.get(unusedKioskIdList.get(defaultKioskCount)),
KioskTranslator.getTranslatedKioskName(kioskId, this),
KioskTranslator.getKioskIcon(kioskId, this));
defaultKioskCount++;
break;
default:
drawerAddItem(
R.id.menu_tabs_group,
drawerItem.getDrawerItemId(),
drawerItem.getDrawerItemName(this),
drawerItem.getDrawerItemIconRes(this));
}
}
}

private void fillCantMissingDrawerItems() {
//Settings and About
drawerAddItem(
R.id.menu_options_about_group,
ITEM_ID_SETTINGS,
R.string.settings,
R.drawable.ic_settings);
drawerAddItem(
R.id.menu_options_about_group,
ITEM_ID_ABOUT,
R.string.tab_about,
R.drawable.ic_info_outline);
}

private void updateVisibilityOfHistroySection() {
final SharedPreferences sharedPreferences = PreferenceManager.
getDefaultSharedPreferences(this);
final boolean isHistoryEnabled = sharedPreferences.getBoolean(
getString(R.string.enable_watch_history_key), true);
final MenuItem menuItem = drawerLayoutBinding
.navigation
.getMenu()
.findItem(ITEM_ID_HISTORY);
if (menuItem != null) {
drawerLayoutBinding.navigation.getMenu().findItem(ITEM_ID_HISTORY)
.setVisible(isHistoryEnabled);
}
}

private void fillDrawer() {
fillDynamicDrawerContent();
fillCantMissingDrawerItems();
updateVisibilityOfHistroySection();
}

private void clearDrawer() {
drawerLayoutBinding.navigation.getMenu().clear();
}

private void refreshDrawerItems() {
drawerItemList.clear();
drawerItemList.addAll(drawerItemManager.getDrawerItems());

clearDrawer();
fillDrawer();
}

private HashMap<String, Integer> getKioskIdsMappedToMenuIds() {
final int serviceId = ServiceHelper.getSelectedServiceId(this);
final StreamingService service;
final HashMap<String, Integer> kioskList = new HashMap<>();
final List<String> ids = getKioskIdList();
try {
service = NewPipe.getService(serviceId);
for (int i = 0; i < ids.size(); i++) {
final String kioskId = ids.get(i);
kioskList.put(kioskId, i);
}
} catch (final ExtractionException e) {
e.printStackTrace();
}
return kioskList;
}

private List<String> getKioskIdList() {
final int serviceId = ServiceHelper.getSelectedServiceId(this);
final StreamingService service;
final List<String> kioskList = new ArrayList<>();
try {
service = NewPipe.getService(serviceId);
kioskList.addAll(service.getKioskList().getAvailableKiosks());
} catch (final ExtractionException e) {
e.printStackTrace();
}
return kioskList;
}

private boolean drawerItemSelected(final MenuItem item) {
switch (item.getGroupId()) {
case R.id.menu_services_group:
changeService(item);
break;
case R.id.menu_tabs_group:
try {
tabSelected(item);
drawerItemTabsGroupSelected(item);
} catch (final Exception e) {
ErrorActivity.reportUiErrorInSnackbar(this, "Selecting main page tab", e);
}
Expand All @@ -265,7 +419,7 @@ private void changeService(final MenuItem item) {
.setChecked(true);
}

private void tabSelected(final MenuItem item) throws ExtractionException {
private void drawerItemTabsGroupSelected(final MenuItem item) throws ExtractionException {
switch (item.getItemId()) {
case ITEM_ID_SUBSCRIPTIONS:
NavigationHelper.openSubscriptionFragment(getSupportFragmentManager());
Expand Down Expand Up @@ -341,7 +495,7 @@ private void toggleServices() {
showServices();
} else {
try {
showTabs();
showDrawerItems();
} catch (final Exception e) {
ErrorActivity.reportUiErrorInSnackbar(this, "Showing main page tabs", e);
}
Expand Down Expand Up @@ -414,46 +568,10 @@ public void onNothingSelected(final AdapterView<?> parent) {
menuItem.setActionView(spinner);
}

private void showTabs() throws ExtractionException {
private void showDrawerItems() throws ExtractionException {
drawerHeaderBinding.drawerArrow.setImageResource(R.drawable.ic_arrow_drop_down);

//Tabs
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
final StreamingService service = NewPipe.getService(currentServiceId);

int kioskId = 0;

for (final String ks : service.getKioskList().getAvailableKiosks()) {
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, kioskId, ORDER,
KioskTranslator.getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcon(ks, this));
kioskId++;
}

drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER, R.string.tab_subscriptions)
.setIcon(R.drawable.ic_tv);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title)
.setIcon(R.drawable.ic_rss_feed);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks)
.setIcon(R.drawable.ic_bookmark);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads)
.setIcon(R.drawable.ic_file_download);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history)
.setIcon(R.drawable.ic_history);

//Settings and About
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings)
.setIcon(R.drawable.ic_settings);
drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about)
.setIcon(R.drawable.ic_info_outline);
refreshDrawerItems();
}

@Override
Expand Down Expand Up @@ -511,10 +629,7 @@ protected void onResume() {
NavigationHelper.openMainActivity(this);
}

final boolean isHistoryEnabled = sharedPreferences.getBoolean(
getString(R.string.enable_watch_history_key), true);
drawerLayoutBinding.navigation.getMenu().findItem(ITEM_ID_HISTORY)
.setVisible(isHistoryEnabled);
setupDrawerItems();
}

@Override
Expand Down
Loading