mirror of
https://github.com/zoriya/Opus.git
synced 2025-12-06 06:26:15 +00:00
Resolving majors bugs
This commit is contained in:
@@ -23,14 +23,12 @@ using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Auth;
|
||||
using YoutubeExplode;
|
||||
using YoutubeExplode.Models.MediaStreams;
|
||||
using SearchView = Android.Support.V7.Widget.SearchView;
|
||||
|
||||
namespace MusicApp
|
||||
{
|
||||
[Activity(Label = "MusicApp", MainLauncher = true, Icon = "@drawable/MusicIcon", Theme = "@style/Theme")]
|
||||
public class MainActivity : AppCompatActivity
|
||||
public class MainActivity : AppCompatActivity, ViewPager.IOnPageChangeListener
|
||||
{
|
||||
public static MainActivity instance;
|
||||
public Android.Support.V7.Widget.Toolbar ToolBar;
|
||||
@@ -46,7 +44,7 @@ namespace MusicApp
|
||||
public static YouTubeService youtubeService;
|
||||
public static OAuth2Authenticator auth;
|
||||
public static string refreshToken;
|
||||
|
||||
private bool searchDisplayed;
|
||||
|
||||
public void Login()
|
||||
{
|
||||
@@ -144,15 +142,9 @@ namespace MusicApp
|
||||
return true;
|
||||
}
|
||||
|
||||
public /*async*/ void RequestNewToken(string refreshToken)
|
||||
public void RequestNewToken(string refreshToken)
|
||||
{
|
||||
Console.WriteLine("Token has expire getting a new one");
|
||||
//Dictionary<string, string> queryValues = new Dictionary<string, string>
|
||||
//{
|
||||
// {"refresh_token", refreshToken },
|
||||
// {"client_id", clientID },
|
||||
// {"grant_type", "refresh_token" }
|
||||
//};
|
||||
|
||||
IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = new ClientSecrets() { ClientId = clientID } });
|
||||
Console.WriteLine("Flow created");
|
||||
@@ -200,11 +192,22 @@ namespace MusicApp
|
||||
var bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottomView);
|
||||
bottomNavigation.NavigationItemSelected += PreNavigate;
|
||||
|
||||
Navigate(Resource.Id.musicLayout);
|
||||
|
||||
ToolBar = (Android.Support.V7.Widget.Toolbar) FindViewById(Resource.Id.toolbar);
|
||||
SetSupportActionBar(ToolBar);
|
||||
SupportActionBar.Title = "MusicApp";
|
||||
|
||||
if (MusicPlayer.queue.Count > 0)
|
||||
ReCreateSmallPlayer();
|
||||
else
|
||||
Navigate(Resource.Id.musicLayout);
|
||||
}
|
||||
|
||||
private async void ReCreateSmallPlayer()
|
||||
{
|
||||
await Task.Delay(100);
|
||||
PrepareSmallPlayer();
|
||||
ShowSmallPlayer();
|
||||
Navigate(Resource.Id.musicLayout);
|
||||
}
|
||||
|
||||
public override bool OnCreateOptionsMenu(IMenu menu)
|
||||
@@ -253,7 +256,7 @@ namespace MusicApp
|
||||
else if(item.ItemId == Resource.Id.search)
|
||||
{
|
||||
var searchItem = MenuItemCompat.GetActionView(item);
|
||||
var searchView = searchItem.JavaCast<Android.Support.V7.Widget.SearchView>();
|
||||
var searchView = searchItem.JavaCast<SearchView>();
|
||||
|
||||
searchView.QueryTextChange += Search;
|
||||
|
||||
@@ -301,12 +304,17 @@ namespace MusicApp
|
||||
|
||||
public void HideSearch()
|
||||
{
|
||||
if (!searchDisplayed)
|
||||
return;
|
||||
|
||||
searchDisplayed = false;
|
||||
|
||||
if (menu == null)
|
||||
return;
|
||||
|
||||
var item = menu.FindItem(Resource.Id.search);
|
||||
var searchItem = MenuItemCompat.GetActionView(item);
|
||||
var searchView = searchItem.JavaCast<Android.Support.V7.Widget.SearchView>();
|
||||
var searchView = searchItem.JavaCast<SearchView>();
|
||||
|
||||
searchView.SetQuery("", false);
|
||||
searchView.ClearFocus();
|
||||
@@ -322,11 +330,16 @@ namespace MusicApp
|
||||
|
||||
public void DisplaySearch(int id = 0)
|
||||
{
|
||||
if (searchDisplayed)
|
||||
return;
|
||||
|
||||
searchDisplayed = true;
|
||||
|
||||
var item = menu.FindItem(Resource.Id.search);
|
||||
item.SetVisible(true);
|
||||
item.CollapseActionView();
|
||||
var searchItem = MenuItemCompat.GetActionView(item);
|
||||
var searchView = searchItem.JavaCast<Android.Support.V7.Widget.SearchView>();
|
||||
var searchView = searchItem.JavaCast<SearchView>();
|
||||
|
||||
searchView.SetQuery("", false);
|
||||
searchView.ClearFocus();
|
||||
@@ -351,26 +364,49 @@ namespace MusicApp
|
||||
switch (layout)
|
||||
{
|
||||
case Resource.Id.musicLayout:
|
||||
if (Queue.instance != null)
|
||||
{
|
||||
Queue.instance.Refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
HideTabs();
|
||||
HideSearch();
|
||||
fragment = Queue.NewInstance();
|
||||
break;
|
||||
|
||||
case Resource.Id.browseLayout:
|
||||
if (Browse.instance != null)
|
||||
{
|
||||
Browse.instance.Refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
SetBrowseTabs();
|
||||
DisplaySearch();
|
||||
break;
|
||||
|
||||
case Resource.Id.downloadLayout:
|
||||
if (YoutubeEngine.instance != null)
|
||||
{
|
||||
YoutubeEngine.instance.Refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
HideTabs();
|
||||
DisplaySearch();
|
||||
fragment = YoutubeEngine.NewInstance();
|
||||
break;
|
||||
|
||||
case Resource.Id.playlistLayout:
|
||||
if (Playlist.instance != null)
|
||||
{
|
||||
Playlist.instance.Refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
SetYtTabs();
|
||||
HideSearch();
|
||||
fragment = Playlist.NewInstance();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -380,25 +416,41 @@ namespace MusicApp
|
||||
SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, fragment).Commit();
|
||||
}
|
||||
|
||||
async void SetBrowseTabs(int selectedTab = 0)
|
||||
void SetBrowseTabs(int selectedTab = 0)
|
||||
{
|
||||
await ResetTabs();
|
||||
if (Browse.instance != null)
|
||||
return;
|
||||
|
||||
FrameLayout frame = FindViewById<FrameLayout>(Resource.Id.contentView);
|
||||
frame.Visibility = ViewStates.Gone;
|
||||
|
||||
TabLayout tabs = FindViewById<TabLayout>(Resource.Id.tabs);
|
||||
tabs.Visibility = ViewStates.Visible;
|
||||
tabs.RemoveAllTabs();
|
||||
tabs.AddTab(tabs.NewTab().SetText("Songs"));
|
||||
tabs.AddTab(tabs.NewTab().SetText("Folders"));
|
||||
Console.WriteLine("tabs created");
|
||||
|
||||
ViewPager pager = FindViewById<ViewPager>(Resource.Id.pager);
|
||||
pager.SetPadding(0, (int) Math.Round(paddinTop * 1.90f), 0, 0);
|
||||
pager.ClearOnPageChangeListeners();
|
||||
pager.AddOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));
|
||||
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
|
||||
|
||||
ViewPagerAdapter oldAdapter = (ViewPagerAdapter)pager.Adapter;
|
||||
if (oldAdapter != null)
|
||||
{
|
||||
for (int i = 0; i < oldAdapter.Count; i++)
|
||||
{
|
||||
SupportFragmentManager.BeginTransaction().Remove(oldAdapter.GetItem(i)).Commit();
|
||||
}
|
||||
oldAdapter.Dispose();
|
||||
}
|
||||
Console.WriteLine("old adapter removed");
|
||||
|
||||
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
|
||||
adapter.AddFragment(Browse.NewInstance(), "Songs");
|
||||
adapter.AddFragment(FolderBrowse.NewInstance(), "Folders");
|
||||
Console.WriteLine("new adapter created");
|
||||
|
||||
pager.Adapter = adapter;
|
||||
tabs.SetupWithViewPager(pager);
|
||||
@@ -407,9 +459,10 @@ namespace MusicApp
|
||||
tabs.SetScrollPosition(selectedTab, 0f, true);
|
||||
}
|
||||
|
||||
async void SetYtTabs(int selectedTab = 0)
|
||||
void SetYtTabs(int selectedTab = 0)
|
||||
{
|
||||
await ResetTabs();
|
||||
if (Playlist.instance != null)
|
||||
return;
|
||||
|
||||
FrameLayout frame = FindViewById<FrameLayout>(Resource.Id.contentView);
|
||||
frame.Visibility = ViewStates.Gone;
|
||||
@@ -419,12 +472,23 @@ namespace MusicApp
|
||||
tabs.RemoveAllTabs();
|
||||
tabs.AddTab(tabs.NewTab().SetText("Playlists"));
|
||||
tabs.AddTab(tabs.NewTab().SetText("Youtube playlists"));
|
||||
|
||||
ViewPager pager = FindViewById<ViewPager>(Resource.Id.pager);
|
||||
pager.SetPadding(0, (int)Math.Round(paddinTop * 1.90f), 0, 0);
|
||||
pager.ClearOnPageChangeListeners();
|
||||
pager.AddOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));
|
||||
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
|
||||
pager.AddOnPageChangeListener(this);
|
||||
|
||||
ViewPagerAdapter oldAdapter = (ViewPagerAdapter)pager.Adapter;
|
||||
if (oldAdapter != null)
|
||||
{
|
||||
for (int i = 0; i < oldAdapter.Count; i++)
|
||||
{
|
||||
SupportFragmentManager.BeginTransaction().Remove(oldAdapter.GetItem(i)).Commit();
|
||||
}
|
||||
oldAdapter.Dispose();
|
||||
}
|
||||
|
||||
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
|
||||
adapter.AddFragment(Playlist.NewInstance(), "Playlists");
|
||||
adapter.AddFragment(YtPlaylist.NewInstance(), "Youtube playlists");
|
||||
|
||||
@@ -435,22 +499,29 @@ namespace MusicApp
|
||||
tabs.SetScrollPosition(selectedTab, 0f, true);
|
||||
}
|
||||
|
||||
async Task ResetTabs()
|
||||
public void OnPageScrollStateChanged(int state)
|
||||
{
|
||||
TabLayout tabs = FindViewById<TabLayout>(Resource.Id.tabs);
|
||||
tabs.RemoveAllTabs();
|
||||
ViewPager pager = FindViewById<ViewPager>(Resource.Id.pager);
|
||||
}
|
||||
|
||||
ViewPagerAdapter adapter = (ViewPagerAdapter)pager.Adapter;
|
||||
if (adapter != null)
|
||||
public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnPageSelected(int position)
|
||||
{
|
||||
if(position == 0)
|
||||
{
|
||||
for (int i = 0; i < adapter.Count; i++)
|
||||
SupportFragmentManager.BeginTransaction().Remove(adapter.GetItem(i)).Commit();
|
||||
|
||||
adapter.Dispose();
|
||||
pager.Adapter = null;
|
||||
|
||||
await Task.Delay(250);
|
||||
if (Playlist.instance.isEmpty)
|
||||
Playlist.instance.AddEmptyView();
|
||||
if (YtPlaylist.instance.isEmpty)
|
||||
YtPlaylist.instance.RemoveEmptyView();
|
||||
}
|
||||
if(position == 1)
|
||||
{
|
||||
if (Playlist.instance.isEmpty)
|
||||
Playlist.instance.RemoveEmptyView();
|
||||
if (YtPlaylist.instance.isEmpty)
|
||||
YtPlaylist.instance.AddEmptyView();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
|
||||
<AndroidLinkMode>Full</AndroidLinkMode>
|
||||
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
|
||||
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
|
||||
<AndroidLinkMode>None</AndroidLinkMode>
|
||||
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
|
||||
<AotAssemblies>false</AotAssemblies>
|
||||
<EnableLLVM>false</EnableLLVM>
|
||||
<BundleAssemblies>false</BundleAssemblies>
|
||||
@@ -403,6 +403,11 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_query_builder_black_24dp.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\NoYtPlaylist.xml">
|
||||
<SubType>Designer</SubType>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
|
||||
@@ -118,6 +118,11 @@ namespace MusicApp.Resources.Portable_Class
|
||||
}
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Search(string search)
|
||||
{
|
||||
result = new List<Song>();
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
using Android.Content;
|
||||
using Android.Database;
|
||||
using Android.Net;
|
||||
using Android.OS;
|
||||
using Android.Provider;
|
||||
using Android.Support.V4.App;
|
||||
using Android.Support.V4.View;
|
||||
using Android.Support.V7.App;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
using Android.Support.V7.App;
|
||||
using Android.Support.V4.App;
|
||||
using System.Collections.Generic;
|
||||
using Android.Provider;
|
||||
using Android.Database;
|
||||
using Android.Content.PM;
|
||||
using Android.Support.Design.Widget;
|
||||
using Android;
|
||||
using Android.Net;
|
||||
using static Android.Provider.MediaStore.Audio;
|
||||
|
||||
namespace MusicApp.Resources.Portable_Class
|
||||
@@ -20,12 +18,12 @@ namespace MusicApp.Resources.Portable_Class
|
||||
public static Playlist instance;
|
||||
public Adapter adapter;
|
||||
public View emptyView;
|
||||
public bool isEmpty = false;
|
||||
|
||||
private List<string> playList = new List<string>();
|
||||
private List<int> playListCount = new List<int>();
|
||||
private List<long> playlistId = new List<long>();
|
||||
private string[] actions = new string[] { "Random play", "Rename", "Delete" };
|
||||
private bool isEmpty = false;
|
||||
|
||||
|
||||
public override void OnActivityCreated(Bundle savedInstanceState)
|
||||
@@ -41,6 +39,17 @@ namespace MusicApp.Resources.Portable_Class
|
||||
MainActivity.instance.GetStoragePermission();
|
||||
}
|
||||
|
||||
public void AddEmptyView()
|
||||
{
|
||||
Activity.AddContentView(emptyView, View.LayoutParameters);
|
||||
}
|
||||
|
||||
public void RemoveEmptyView()
|
||||
{
|
||||
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
|
||||
public override void OnDestroy()
|
||||
{
|
||||
if (isEmpty)
|
||||
@@ -94,12 +103,18 @@ namespace MusicApp.Resources.Portable_Class
|
||||
|
||||
if (adapter == null || adapter.Count == 0)
|
||||
{
|
||||
if (isEmpty)
|
||||
return;
|
||||
isEmpty = true;
|
||||
if(emptyView != null)
|
||||
Activity.AddContentView(emptyView, View.LayoutParameters);
|
||||
Activity.AddContentView(emptyView, View.LayoutParameters);
|
||||
}
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
|
||||
{
|
||||
AppCompatActivity act = (AppCompatActivity)Activity;
|
||||
|
||||
@@ -67,6 +67,11 @@ namespace MusicApp.Resources.Portable_Class
|
||||
}
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
|
||||
{
|
||||
Song item = MusicPlayer.queue[e.Position];
|
||||
|
||||
@@ -59,6 +59,7 @@ namespace MusicApp.Resources.Portable_Class
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
base.OnDestroy();
|
||||
instance = null;
|
||||
}
|
||||
|
||||
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
|
||||
@@ -107,6 +108,11 @@ namespace MusicApp.Resources.Portable_Class
|
||||
ListAdapter = new Adapter(Android.App.Application.Context, Resource.Layout.SongList, result);
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
|
||||
{
|
||||
string videoID = result[e.Position].GetPath();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Android.Content;
|
||||
using Android.Net;
|
||||
using Android.Net;
|
||||
using Android.OS;
|
||||
using Android.Support.V4.App;
|
||||
using Android.Support.V4.View;
|
||||
using Android.Support.V7.App;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
@@ -9,9 +9,9 @@ using Google.Apis.YouTube.v3;
|
||||
using Google.Apis.YouTube.v3.Data;
|
||||
using Java.Util;
|
||||
using MusicApp.Resources.values;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
|
||||
namespace MusicApp.Resources.Portable_Class
|
||||
{
|
||||
@@ -20,18 +20,17 @@ namespace MusicApp.Resources.Portable_Class
|
||||
public static YtPlaylist instance;
|
||||
public Adapter adapter;
|
||||
public View emptyView;
|
||||
public static Credentials credentials;
|
||||
public bool isEmpty = false;
|
||||
|
||||
private List<Song> playlists = new List<Song>();
|
||||
private List<Google.Apis.YouTube.v3.Data.Playlist> YtPlaylists = new List<Google.Apis.YouTube.v3.Data.Playlist>();
|
||||
private string[] actions = new string[] { "Random play", "Rename", "Delete", "Download" };
|
||||
private bool isEmpty = false;
|
||||
|
||||
|
||||
public override void OnActivityCreated(Bundle savedInstanceState)
|
||||
{
|
||||
base.OnActivityCreated(savedInstanceState);
|
||||
emptyView = LayoutInflater.Inflate(Resource.Layout.NoPlaylist, null);
|
||||
emptyView = LayoutInflater.Inflate(Resource.Layout.NoYtPlaylist, null);
|
||||
ListView.EmptyView = emptyView;
|
||||
|
||||
if (YoutubeEngine.youtubeService == null)
|
||||
@@ -40,6 +39,17 @@ namespace MusicApp.Resources.Portable_Class
|
||||
GetYoutubePlaylists();
|
||||
}
|
||||
|
||||
public void AddEmptyView()
|
||||
{
|
||||
Activity.AddContentView(emptyView, View.LayoutParameters);
|
||||
}
|
||||
|
||||
public void RemoveEmptyView()
|
||||
{
|
||||
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
|
||||
public override void OnDestroy()
|
||||
{
|
||||
if (isEmpty)
|
||||
@@ -126,6 +136,14 @@ namespace MusicApp.Resources.Portable_Class
|
||||
ListView.Adapter = adapter;
|
||||
ListView.ItemClick += ListView_ItemClick;
|
||||
ListView.ItemLongClick += ListView_ItemLongClick;
|
||||
|
||||
if (adapter == null || adapter.Count == 0)
|
||||
{
|
||||
if (isEmpty)
|
||||
return;
|
||||
isEmpty = true;
|
||||
Activity.AddContentView(emptyView, View.LayoutParameters);
|
||||
}
|
||||
}
|
||||
|
||||
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
|
||||
@@ -276,5 +294,32 @@ namespace MusicApp.Resources.Portable_Class
|
||||
}
|
||||
YoutubeEngine.DownloadFiles(names.ToArray(), videoIDs.ToArray());
|
||||
}
|
||||
|
||||
public void OnPageScrollStateChanged(int state)
|
||||
{
|
||||
if (isEmpty)
|
||||
{
|
||||
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels)
|
||||
{
|
||||
if (isEmpty)
|
||||
{
|
||||
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPageSelected(int position)
|
||||
{
|
||||
if (isEmpty)
|
||||
{
|
||||
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
|
||||
rootView.RemoveView(emptyView);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
55
MusicApp/Resources/Resource.Designer.cs
generated
55
MusicApp/Resources/Resource.Designer.cs
generated
@@ -3483,82 +3483,85 @@ namespace MusicApp
|
||||
public const int notification_template_part_time = 2130903107;
|
||||
|
||||
// aapt resource value: 0x7f030044
|
||||
public const int player = 2130903108;
|
||||
public const int NoYtPlaylist = 2130903108;
|
||||
|
||||
// aapt resource value: 0x7f030045
|
||||
public const int playerInfo = 2130903109;
|
||||
public const int player = 2130903109;
|
||||
|
||||
// aapt resource value: 0x7f030046
|
||||
public const int PlaylistList = 2130903110;
|
||||
public const int playerInfo = 2130903110;
|
||||
|
||||
// aapt resource value: 0x7f030047
|
||||
public const int preference = 2130903111;
|
||||
public const int PlaylistList = 2130903111;
|
||||
|
||||
// aapt resource value: 0x7f030048
|
||||
public const int preference_category = 2130903112;
|
||||
public const int preference = 2130903112;
|
||||
|
||||
// aapt resource value: 0x7f030049
|
||||
public const int preference_dialog_edittext = 2130903113;
|
||||
public const int preference_category = 2130903113;
|
||||
|
||||
// aapt resource value: 0x7f03004a
|
||||
public const int preference_dropdown = 2130903114;
|
||||
public const int preference_dialog_edittext = 2130903114;
|
||||
|
||||
// aapt resource value: 0x7f03004b
|
||||
public const int preference_information = 2130903115;
|
||||
public const int preference_dropdown = 2130903115;
|
||||
|
||||
// aapt resource value: 0x7f03004c
|
||||
public const int preference_list_fragment = 2130903116;
|
||||
public const int preference_information = 2130903116;
|
||||
|
||||
// aapt resource value: 0x7f03004d
|
||||
public const int preference_recyclerview = 2130903117;
|
||||
public const int preference_list_fragment = 2130903117;
|
||||
|
||||
// aapt resource value: 0x7f03004e
|
||||
public const int preference_widget_checkbox = 2130903118;
|
||||
public const int preference_recyclerview = 2130903118;
|
||||
|
||||
// aapt resource value: 0x7f03004f
|
||||
public const int preference_widget_seekbar = 2130903119;
|
||||
public const int preference_widget_checkbox = 2130903119;
|
||||
|
||||
// aapt resource value: 0x7f030050
|
||||
public const int preference_widget_switch_compat = 2130903120;
|
||||
public const int preference_widget_seekbar = 2130903120;
|
||||
|
||||
// aapt resource value: 0x7f030051
|
||||
public const int Preferences = 2130903121;
|
||||
public const int preference_widget_switch_compat = 2130903121;
|
||||
|
||||
// aapt resource value: 0x7f030052
|
||||
public const int PreferenceToolbar = 2130903122;
|
||||
public const int Preferences = 2130903122;
|
||||
|
||||
// aapt resource value: 0x7f030053
|
||||
public const int search_layout = 2130903123;
|
||||
public const int PreferenceToolbar = 2130903123;
|
||||
|
||||
// aapt resource value: 0x7f030054
|
||||
public const int select_dialog_item_material = 2130903124;
|
||||
public const int search_layout = 2130903124;
|
||||
|
||||
// aapt resource value: 0x7f030055
|
||||
public const int select_dialog_multichoice_material = 2130903125;
|
||||
public const int select_dialog_item_material = 2130903125;
|
||||
|
||||
// aapt resource value: 0x7f030056
|
||||
public const int select_dialog_singlechoice_material = 2130903126;
|
||||
public const int select_dialog_multichoice_material = 2130903126;
|
||||
|
||||
// aapt resource value: 0x7f030057
|
||||
public const int SmallPlayer = 2130903127;
|
||||
public const int select_dialog_singlechoice_material = 2130903127;
|
||||
|
||||
// aapt resource value: 0x7f030058
|
||||
public const int SongList = 2130903128;
|
||||
public const int SmallPlayer = 2130903128;
|
||||
|
||||
// aapt resource value: 0x7f030059
|
||||
public const int support_simple_spinner_dropdown_item = 2130903129;
|
||||
public const int SongList = 2130903129;
|
||||
|
||||
// aapt resource value: 0x7f03005a
|
||||
public const int tabs = 2130903130;
|
||||
public const int support_simple_spinner_dropdown_item = 2130903130;
|
||||
|
||||
// aapt resource value: 0x7f03005b
|
||||
public const int TimerLayout = 2130903131;
|
||||
public const int tabs = 2130903131;
|
||||
|
||||
// aapt resource value: 0x7f03005c
|
||||
public const int TwoLineLayout = 2130903132;
|
||||
public const int TimerLayout = 2130903132;
|
||||
|
||||
// aapt resource value: 0x7f03005d
|
||||
public const int YtList = 2130903133;
|
||||
public const int TwoLineLayout = 2130903133;
|
||||
|
||||
// aapt resource value: 0x7f03005e
|
||||
public const int YtList = 2130903134;
|
||||
|
||||
static Layout()
|
||||
{
|
||||
|
||||
13
MusicApp/Resources/layout/NoYtPlaylist.xml
Normal file
13
MusicApp/Resources/layout/NoYtPlaylist.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<TextView
|
||||
android:text="No playlist found on your youtube account"
|
||||
android:gravity="center"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:id="@+id/noPlaylist"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent" />
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user