Skip to content

Commit

Permalink
Android: Changed all glyphs for player with ligher colors. Pretty muc…
Browse files Browse the repository at this point in the history
…h finished layout for mini playlist in Main Activity. Items can now be added to the playlist from the MobileLibraryBrowser.

Related to issue #406.
  • Loading branch information
ycastonguay committed Sep 8, 2013
1 parent a705fb0 commit ef94945
Show file tree
Hide file tree
Showing 98 changed files with 817 additions and 565 deletions.
129 changes: 57 additions & 72 deletions MPfm/MPfm.Android/Classes/Activities/MainActivity.cs
Expand Up @@ -23,21 +23,14 @@
using Android.Content;
using Android.Content.PM;
using Android.Graphics;
using Android.Net.Wifi.P2p;
using Android.Support.V4.App;
using Android.Support.V4.View;
using Android.Views;
using Android.OS;
using Android.Views.Animations;
using Android.Widget;
using Java.Lang;
using MPfm.Android.Classes.Adapters;
using MPfm.Android.Classes.Cache;
using MPfm.Android.Classes.Fragments;
using MPfm.Android.Classes.Listeners;
using MPfm.Android.Classes.Navigation;
using MPfm.Android.Classes.Receivers;
using MPfm.Android.Classes.Services;
using MPfm.MVP.Bootstrap;
using MPfm.MVP.Messages;
using MPfm.MVP.Navigation;
Expand All @@ -48,7 +41,6 @@
using DialogFragment = Android.App.DialogFragment;
using Fragment = Android.App.Fragment;
using FragmentTransaction = Android.App.FragmentTransaction;
using TaskStackBuilder = Android.Support.V4.App.TaskStackBuilder;

namespace MPfm.Android
{
Expand All @@ -70,21 +62,12 @@ public class MainActivity : BaseActivity, IMobileOptionsMenuView, View.IOnTouchL
private ImageButton _btnPlayPause;
private ImageButton _btnNext;
private ImageButton _btnPlaylist;
private ImageButton _btnPlayer;
private ImageButton _btnLeft;
private ImageButton _btnRight;
private bool _isPlaying;
private ArrayAdapter _spinnerAdapter;
private Fragment _fragment;

//private IntentFilter _intentFilter;
//private WifiP2pManager _wifiManager;
//private WifiP2pManager.Channel _wifiChannel;
//private WifiDirectReceiver _wifiDirectReceiver;
//private ActionListener _actionListener;

//#if __ANDROID_16__
//private AndroidDiscoveryService _discoveryService;
//#endif

public BitmapCache BitmapCache { get; private set; }

protected override void OnCreate(Bundle bundle)
Expand All @@ -109,26 +92,30 @@ protected override void OnCreate(Bundle bundle)
_btnPrevious = FindViewById<ImageButton>(Resource.Id.main_miniplayer_btnPrevious);
_btnPlayPause = FindViewById<ImageButton>(Resource.Id.main_miniplayer_btnPlayPause);
_btnNext = FindViewById<ImageButton>(Resource.Id.main_miniplayer_btnNext);
_btnPlaylist = FindViewById<ImageButton>(Resource.Id.main_miniplayer_btnPlaylist);
_btnPlayer = FindViewById<ImageButton>(Resource.Id.main_miniplaylist_btnPlayer);
_btnPlaylist = FindViewById<ImageButton>(Resource.Id.main_miniplaylist_btnPlaylist);
_btnLeft = FindViewById<ImageButton>(Resource.Id.main_miniplaylist_btnLeft);
_btnRight = FindViewById<ImageButton>(Resource.Id.main_miniplayer_btnRight);
_imageAlbum = FindViewById<SquareImageView>(Resource.Id.main_miniplayer_imageAlbum);
_miniPlayer.Visibility = ViewStates.Gone;
_miniPlayer.Click += (sender, args) => {
//Console.WriteLine("MainActivity - Mini player click - Showing player view...");
_messengerHub.PublishAsync<MobileNavigationManagerCommandMessage>(new MobileNavigationManagerCommandMessage(this, MobileNavigationManagerCommandMessageType.ShowPlayerView));
};
_btnLeft.SetOnTouchListener(this);
_btnRight.SetOnTouchListener(this);
_btnPrevious.SetOnTouchListener(this);
_btnPlayPause.SetOnTouchListener(this);
_btnNext.SetOnTouchListener(this);
_btnPlaylist.SetOnTouchListener(this);
_btnPrevious.Click += BtnPreviousOnClick;
_btnPlayPause.Click += BtnPlayPauseOnClick;
_btnNext.Click += BtnNextOnClick;
_btnPlaylist.Click += BtnPlaylistOnClick;
_btnPlayer.Click += BtnPlayerOnClick;
_btnLeft.Click += BtnLeftOnClick;
_btnRight.Click += BtnRightOnClick;

// Set initial view flipper item
int index = _viewFlipper.IndexOfChild(_miniPlayer);
_viewFlipper.DisplayedChild = index;
int realIndex = _viewFlipper.IndexOfChild(_miniPlayer);
_viewFlipper.DisplayedChild = realIndex;

// Create bitmap cache
Point size = new Point();
Expand Down Expand Up @@ -168,20 +155,14 @@ protected override void OnCreate(Bundle bundle)
_isPlaying = message.Status == PlayerStatusType.Playing;
//Console.WriteLine("MainActivity - PlayerStatusMessage - Status=" + message.Status.ToString());
RunOnUiThread(() => {
if (message.Status == PlayerStatusType.Stopped || message.Status == PlayerStatusType.Initialized)
{
//Animation anim = AnimationUtils.LoadAnimation(this, Resource.Animation.slide_out_right);
//anim.AnimationEnd += (sender, args) => {
// _miniPlayer.Visibility = ViewStates.Gone;
//};
//_miniPlayer.StartAnimation(anim);
}
if(hasStartedPlaying)
{
//_miniPlayer.Visibility = ViewStates.Visible;
//Animation anim = AnimationUtils.LoadAnimation(this, Resource.Animation.slide_in_left);
//_miniPlayer.StartAnimation(anim);
//Console.WriteLine("MainActivity - PlayerStatusMessage - HasStartedPlaying");
if (_viewFlipper.Visibility == ViewStates.Gone)
{
//Console.WriteLine("MainActivity - PlayerStatusMessage - Showing view flipper");
_viewFlipper.Visibility = ViewStates.Visible;
}
}
switch (message.Status)
Expand All @@ -196,37 +177,13 @@ protected override void OnCreate(Bundle bundle)
});
});

//#if __ANDROID_16__
// if (((int)global::Android.OS.Build.VERSION.SdkInt) >= 16) {
// _discoveryService = new AndroidDiscoveryService();
// _discoveryService.StartDiscovery();
// }
//#endif

Console.WriteLine("MainActivity - OnCreate - Starting navigation manager...");
_navigationManager = (AndroidNavigationManager) Bootstrapper.GetContainer().Resolve<MobileNavigationManager>();
_navigationManager.MainActivity = this; // TODO: Is this OK? Shouldn't the reference be cleared when MainActivity is destroyed? Can lead to memory leaks.
_navigationManager.BindOptionsMenuView(this);
_navigationManager.Start();
}

//private void SetupWifiDirect()
//{
// _intentFilter = new IntentFilter();
// _intentFilter.AddAction(WifiP2pManager.WifiP2pStateChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pPeersChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pConnectionChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pThisDeviceChangedAction);

// _actionListener = new ActionListener();
// _wifiManager = (WifiP2pManager) GetSystemService(Context.WifiP2pService);
// _wifiChannel = _wifiManager.Initialize(this, MainLooper, null);
// _wifiDirectReceiver = new WifiDirectReceiver();
// RegisterReceiver(_wifiDirectReceiver, _intentFilter);

// _wifiManager.DiscoverPeers(_wifiChannel, _actionListener);
//}

public bool OnNavigationItemSelected(int itemPosition, long itemId)
{
Console.WriteLine("MainActivity - OnNavigationItemSelected - itemPosition: {0} - itemId: {1}", itemPosition, itemId);
Expand All @@ -235,9 +192,6 @@ public bool OnNavigationItemSelected(int itemPosition, long itemId)
{
Console.WriteLine("MainActivity - OnNavigationItemSelected - Updating fragment - itemPosition: {0} - itemId: {1}", itemPosition, itemId);
_navigationManager.ChangeMobileLibraryBrowserType(MobileNavigationTabType.Artists, (MobileLibraryBrowserType)itemPosition);

// var mobileLibraryBrowserFragment = (MobileLibraryBrowserFragment) _fragment;
// mobileLibraryBrowserFragment.OnChangeBrowserType((MobileLibraryBrowserType)itemPosition);
}
return true;
}
Expand Down Expand Up @@ -355,6 +309,7 @@ public override bool OnCreateOptionsMenu(IMenu menu)
{
Console.WriteLine("MainActivity - OnCreateOptionsMenu");

// Crashed on all Samsung devices when using the options menu
//MenuInflater.Inflate(Resource.Menu.main_menu, menu);
//var menuItem = menu.Add(new Java.Lang.String("Test"));
//var menuItem2 = menu.Add(new Java.Lang.String("Test2"));
Expand Down Expand Up @@ -418,20 +373,20 @@ private void BtnNextOnClick(object sender, EventArgs eventArgs)

private void BtnPlaylistOnClick(object sender, EventArgs eventArgs)
{
_viewFlipper.SetInAnimation(this, Resource.Animation.flipper_slide_in);
_viewFlipper.SetOutAnimation(this, Resource.Animation.flipper_slide_out);

int index = _viewFlipper.IndexOfChild(_miniPlaylist);
_viewFlipper.DisplayedChild = index;
}

private void BtnPlayerOnClick(object sender, EventArgs eventArgs)
private void BtnLeftOnClick(object sender, EventArgs eventArgs)
{
_viewFlipper.SetInAnimation(this, Resource.Animation.flipper_back_slide_in);
_viewFlipper.SetOutAnimation(this, Resource.Animation.flipper_back_slide_out);
ShowMiniPlayerSlide(0);
}

int index = _viewFlipper.IndexOfChild(_miniPlayer);
_viewFlipper.DisplayedChild = index;
private void BtnRightOnClick(object sender, EventArgs eventArgs)
{
_viewFlipper.SetInAnimation(this, Resource.Animation.flipper_slide_in);
_viewFlipper.SetOutAnimation(this, Resource.Animation.flipper_slide_out);
ShowMiniPlayerSlide(1);
}

public bool OnTouch(View v, MotionEvent e)
Expand All @@ -453,6 +408,15 @@ public bool OnTouch(View v, MotionEvent e)
case Resource.Id.main_miniplayer_btnNext:
_btnNext.SetImageResource(Resource.Drawable.player_next_on);
break;
case Resource.Id.main_miniplaylist_btnPlaylist:
_btnPlaylist.SetImageResource(Resource.Drawable.player_playlist_on);
break;
case Resource.Id.main_miniplaylist_btnLeft:
_btnLeft.SetImageResource(Resource.Drawable.miniplayer_chevronleft_on);
break;
case Resource.Id.main_miniplayer_btnRight:
_btnRight.SetImageResource(Resource.Drawable.miniplayer_chevronright_on);
break;
}
break;
case MotionEventActions.Up:
Expand All @@ -470,6 +434,15 @@ public bool OnTouch(View v, MotionEvent e)
case Resource.Id.main_miniplayer_btnNext:
_btnNext.SetImageResource(Resource.Drawable.player_next);
break;
case Resource.Id.main_miniplaylist_btnPlaylist:
_btnPlaylist.SetImageResource(Resource.Drawable.player_playlist);
break;
case Resource.Id.main_miniplaylist_btnLeft:
_btnLeft.SetImageResource(Resource.Drawable.miniplayer_chevronleft);
break;
case Resource.Id.main_miniplayer_btnRight:
_btnRight.SetImageResource(Resource.Drawable.miniplayer_chevronright);
break;
}
break;
}
Expand All @@ -490,6 +463,18 @@ public void HideSplash()
_splashFragment.Dialog.Dismiss();
}

public void ShowMiniPlayerSlide(int index)
{
// Refresh new index (if the same index, prevent animation)
int realIndex = _viewFlipper.IndexOfChild(index == 0 ? _miniPlayer : _miniPlaylist);
if(_viewFlipper.DisplayedChild != realIndex)
_viewFlipper.DisplayedChild = realIndex;

// Make sure view flipper is visible
if (_viewFlipper.Visibility == ViewStates.Gone)
_viewFlipper.Visibility = ViewStates.Visible;
}

#region IMobileOptionsMenuView implementation

public Action<MobileOptionsMenuType> OnItemClick { get; set; }
Expand Down
Expand Up @@ -307,6 +307,7 @@ public void OnClick(View v)
{
case Resource.Id.albumCell_btnAddToPlaylist:
Console.WriteLine("MLBGA - ADD - position: {0}", position);
_fragment.OnAddItemToPlaylist(position);
break;
case Resource.Id.albumCell_btnPlay:
Console.WriteLine("MLBGA - PLAY - position: {0}", position);
Expand All @@ -325,6 +326,8 @@ public void OnClick(View v)
ad.Show();
break;
}

ResetEditingRow();
}

public void OnMovedToScrapHeap(View view)
Expand Down
Expand Up @@ -163,6 +163,33 @@ public void SetNowPlayingRow(int position, AudioFile audioFile)
}
}

public void ResetEditingRow()
{
int visibleCellIndex = _editingRowPosition - _listView.FirstVisiblePosition;
var view = _listView.GetChildAt(visibleCellIndex);
if (view == null)
return;

var imageAdd = view.FindViewById<ImageView>(Resource.Id.mobileLibraryBrowserCell_imageAdd);
var imagePlay = view.FindViewById<ImageView>(Resource.Id.mobileLibraryBrowserCell_imagePlay);
var imageDelete = view.FindViewById<ImageView>(Resource.Id.mobileLibraryBrowserCell_imageDelete);

// Fade out the controls
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.listviewoptions_fade_out);
anim.AnimationEnd += (sender, args) =>
{
imageAdd.Visibility = ViewStates.Gone;
imagePlay.Visibility = ViewStates.Gone;
imageDelete.Visibility = ViewStates.Gone;
};
imageAdd.StartAnimation(anim);
imagePlay.StartAnimation(anim);
imageDelete.StartAnimation(anim);

_editingRowPosition = -1;
IsEditingRow = false;
}

public void SetEditingRow(int position)
{
int visibleCellIndex = position - _listView.FirstVisiblePosition;
Expand All @@ -179,20 +206,7 @@ public void SetEditingRow(int position)

if(IsEditingRow && oldPosition == position)
{
// Fade out the controls
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.listviewoptions_fade_out);
anim.AnimationEnd += (sender, args) =>
{
imageAdd.Visibility = ViewStates.Gone;
imagePlay.Visibility = ViewStates.Gone;
imageDelete.Visibility = ViewStates.Gone;
};
imageAdd.StartAnimation(anim);
imagePlay.StartAnimation(anim);
imageDelete.StartAnimation(anim);

_editingRowPosition = -1;
IsEditingRow = false;
ResetEditingRow();
}
else if (IsEditingRow && oldPosition >= 0)
{
Expand Down Expand Up @@ -250,7 +264,8 @@ public void OnClick(View v)
switch(v.Id)
{
case Resource.Id.mobileLibraryBrowserCell_imageAdd:
Console.WriteLine("MLBLA - ADD - position: {0}", position);
Console.WriteLine("MLBLA - ADD - position: {0}", position);
_fragment.OnAddItemToPlaylist(position);
break;
case Resource.Id.mobileLibraryBrowserCell_imagePlay:
Console.WriteLine("MLBLA - PLAY - position: {0}", position);
Expand All @@ -269,6 +284,8 @@ public void OnClick(View v)
ad.Show();
break;
}

ResetEditingRow();
}
}
}
22 changes: 22 additions & 0 deletions MPfm/MPfm.Android/Classes/Application.cs
Expand Up @@ -42,6 +42,12 @@ public class MPfmApplication : Application
ConnectionChangeReceiver _connectionChangeReceiver;
private LockReceiver _lockReceiver;

//private IntentFilter _intentFilter;
//private WifiP2pManager _wifiManager;
//private WifiP2pManager.Channel _wifiChannel;
//private WifiDirectReceiver _wifiDirectReceiver;
//private ActionListener _actionListener;

#if __ANDROID_16__
private AndroidDiscoveryService _discoveryService;
#endif
Expand Down Expand Up @@ -143,6 +149,22 @@ public override void OnTerminate()
//#endif
}

//private void SetupWifiDirect()
//{
// _intentFilter = new IntentFilter();
// _intentFilter.AddAction(WifiP2pManager.WifiP2pStateChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pPeersChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pConnectionChangedAction);
// _intentFilter.AddAction(WifiP2pManager.WifiP2pThisDeviceChangedAction);

// _actionListener = new ActionListener();
// _wifiManager = (WifiP2pManager) GetSystemService(Context.WifiP2pService);
// _wifiChannel = _wifiManager.Initialize(this, MainLooper, null);
// _wifiDirectReceiver = new WifiDirectReceiver();
// RegisterReceiver(_wifiDirectReceiver, _intentFilter);

// _wifiManager.DiscoverPeers(_wifiChannel, _actionListener);
//}
public static Context GetApplicationContext()
{
return _context;
Expand Down

0 comments on commit ef94945

Please sign in to comment.