Skip to content

Commit

Permalink
Android: Fixed bugs for secondary menu in AlbumCell. Added different …
Browse files Browse the repository at this point in the history
…layout for 7" tablets (i.e. Nexus 7); the button layout is much different and adds text. The album title/artist name panel has been updated to make it a bit bigger.

Related to issue #406.
  • Loading branch information
ycastonguay committed Sep 7, 2013
1 parent f280d20 commit ef98aa4
Show file tree
Hide file tree
Showing 6 changed files with 752 additions and 569 deletions.
197 changes: 146 additions & 51 deletions MPfm/MPfm.Android/Classes/Adapters/MobileLibraryBrowserGridAdapter.cs
Expand Up @@ -37,7 +37,9 @@ public class MobileLibraryBrowserGridAdapter : BaseAdapter<LibraryBrowserEntity>
readonly MobileLibraryBrowserFragment _fragment;
GridView _gridView;
List<LibraryBrowserEntity> _items;
int _buttonsRowPosition;
private int _editingRowPosition;

public bool IsEditingRow { get; private set; }

public MobileLibraryBrowserGridAdapter(Activity context, MobileLibraryBrowserFragment fragment, GridView gridView, List<LibraryBrowserEntity> items)
{
Expand All @@ -50,7 +52,8 @@ public MobileLibraryBrowserGridAdapter(Activity context, MobileLibraryBrowserFra

public void SetData(IEnumerable<LibraryBrowserEntity> items)
{
_buttonsRowPosition = -1;
//_buttonsRowPosition = -1;
_editingRowPosition = -1;
_items = items.ToList();
NotifyDataSetChanged();
}
Expand All @@ -73,7 +76,6 @@ public override int Count
public override View GetView(int position, View convertView, ViewGroup parent)
{
//Console.WriteLine("MobileLibraryBrowserGridAdapter - GetView - position: {0}", position);
//var mainActivity = (MainActivity)_context;
var item = _items[position];
string bitmapKey = item.Query.ArtistName + "_" + item.Query.AlbumTitle;
View view = convertView;
Expand All @@ -83,7 +85,12 @@ public override View GetView(int position, View convertView, ViewGroup parent)
var artistName = view.FindViewById<TextView>(Resource.Id.albumCell_artistName);
var albumTitle = view.FindViewById<TextView>(Resource.Id.albumCell_albumTitle);
var imageView = view.FindViewById<ImageView>(Resource.Id.albumCell_image);
var layoutButtons = view.FindViewById<FrameLayout>(Resource.Id.albumCell_layoutButtons);

// ImageButton is used on phones; Button with text and drawableLeft is used on tablets.
var imageAdd = view.FindViewById(Resource.Id.albumCell_btnAddToPlaylist);
var imagePlay = view.FindViewById(Resource.Id.albumCell_btnPlay);
var imageDelete = view.FindViewById(Resource.Id.albumCell_btnDelete);

artistName.Text = _items[position].Title;
albumTitle.Text = _items[position].Subtitle;

Expand All @@ -93,10 +100,26 @@ public override View GetView(int position, View convertView, ViewGroup parent)
//Console.WriteLine("MobileLibraryBrowserGridAdapter - GetView - View doesn't seem to be visible!!! position: {0} firstVisiblePosition: {1}", position, _gridView.FirstVisiblePosition);
return view;
}
view.Tag = position;
imageAdd.Tag = position;
imagePlay.Tag = position;
imageDelete.Tag = position;
imageAdd.SetOnClickListener(this);
imagePlay.SetOnClickListener(this);
imageDelete.SetOnClickListener(this);

layoutButtons.Tag = position;
layoutButtons.SetOnClickListener(this);
layoutButtons.Visibility = position == _buttonsRowPosition ? ViewStates.Visible : ViewStates.Gone;
if (IsEditingRow && _editingRowPosition == position)
{
imageAdd.Visibility = ViewStates.Visible;
imagePlay.Visibility = ViewStates.Visible;
imageDelete.Visibility = ViewStates.Visible;
}
else
{
imageAdd.Visibility = ViewStates.Gone;
imagePlay.Visibility = ViewStates.Gone;
imageDelete.Visibility = ViewStates.Gone;
}

//if (imageView.Drawable != null)
//{
Expand Down Expand Up @@ -146,36 +169,6 @@ public override View GetView(int position, View convertView, ViewGroup parent)
return view;
}

public void ShowCellButtons(int position)
{
int oldPosition = _buttonsRowPosition;
_buttonsRowPosition = position;

var viewOldPosition = _gridView.GetChildAt(oldPosition - _gridView.FirstVisiblePosition);
if (viewOldPosition != null)
{
var oldLayout = viewOldPosition.FindViewById<FrameLayout>(Resource.Id.albumCell_layoutButtons);
Animation animOld = AnimationUtils.LoadAnimation(_context, Resource.Animation.fade_out);
animOld.AnimationEnd += (sender, args) => {
oldLayout.Visibility = ViewStates.Gone;
};
oldLayout.StartAnimation(animOld);
}

var view = _gridView.GetChildAt(position - _gridView.FirstVisiblePosition);
if (view == null)
return;

// If the user long presses on the same item, fade out buttons
if (position == oldPosition)
return;

var layout = view.FindViewById<FrameLayout>(Resource.Id.albumCell_layoutButtons);
layout.Visibility = ViewStates.Visible;
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.fade_in);
layout.StartAnimation(anim);
}

public void RefreshAlbumArtCell(string artistName, string albumTitle, byte[] albumArtData)
{
try
Expand Down Expand Up @@ -210,25 +203,127 @@ public void RefreshAlbumArtCell(string artistName, string albumTitle, byte[] alb
}
}

public void OnClick(View v)
public void ResetEditingRow()
{
// Do not block click on cells that doesn't have buttons shown
int position = (int)v.Tag;
if (position != _buttonsRowPosition)
int visibleCellIndex = _editingRowPosition - _gridView.FirstVisiblePosition;
var view = _gridView.GetChildAt(visibleCellIndex);
if (view == null)
return;

int oldPosition = _buttonsRowPosition;
_buttonsRowPosition = -1;
var imageAdd = view.FindViewById(Resource.Id.albumCell_btnAddToPlaylist);
var imagePlay = view.FindViewById(Resource.Id.albumCell_btnPlay);
var imageDelete = view.FindViewById(Resource.Id.albumCell_btnDelete);

var viewOldPosition = _gridView.GetChildAt(oldPosition - _gridView.FirstVisiblePosition);
if (viewOldPosition != null)
// Fade out the controls
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.gridviewoptions_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 - _gridView.FirstVisiblePosition;
var view = _gridView.GetChildAt(visibleCellIndex);
if (view == null)
return;

var imageAdd = view.FindViewById(Resource.Id.albumCell_btnAddToPlaylist);
var imagePlay = view.FindViewById(Resource.Id.albumCell_btnPlay);
var imageDelete = view.FindViewById(Resource.Id.albumCell_btnDelete);

int oldPosition = _editingRowPosition;
_editingRowPosition = position;

if (IsEditingRow && oldPosition == position)
{
ResetEditingRow();
}
else if (IsEditingRow && oldPosition >= 0)
{
// Fade in the new controls
imageAdd.Visibility = ViewStates.Visible;
imagePlay.Visibility = ViewStates.Visible;
imageDelete.Visibility = ViewStates.Visible;
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.gridviewoptions_fade_in);
imageAdd.StartAnimation(anim);
imagePlay.StartAnimation(anim);
imageDelete.StartAnimation(anim);

// Fade out the older controls
int oldPositionVisibleCellIndex = oldPosition - _gridView.FirstVisiblePosition;
var viewOldPosition = _gridView.GetChildAt(oldPositionVisibleCellIndex);
if (viewOldPosition != null)
{
var imageAddOld = viewOldPosition.FindViewById(Resource.Id.albumCell_btnAddToPlaylist);
var imagePlayOld = viewOldPosition.FindViewById(Resource.Id.albumCell_btnPlay);
var imageDeleteOld = viewOldPosition.FindViewById(Resource.Id.albumCell_btnDelete);

// Fade out the controls
Animation animOld = AnimationUtils.LoadAnimation(_context, Resource.Animation.gridviewoptions_fade_out);
animOld.AnimationEnd += (sender, args) =>
{
imageAddOld.Visibility = ViewStates.Gone;
imagePlayOld.Visibility = ViewStates.Gone;
imageDeleteOld.Visibility = ViewStates.Gone;
};
imageAddOld.StartAnimation(animOld);
imagePlayOld.StartAnimation(animOld);
imageDeleteOld.StartAnimation(animOld);
}

IsEditingRow = true;
}
else if (!IsEditingRow)
{
// Fade in the controls
imageAdd.Visibility = ViewStates.Visible;
imagePlay.Visibility = ViewStates.Visible;
imageDelete.Visibility = ViewStates.Visible;
Animation anim = AnimationUtils.LoadAnimation(_context, Resource.Animation.gridviewoptions_fade_in);
imageAdd.StartAnimation(anim);
imagePlay.StartAnimation(anim);
imageDelete.StartAnimation(anim);

IsEditingRow = true;
}
}

public void OnClick(View v)
{
Console.WriteLine("MobileLibraryBrowserGridAdapter - OnClick - {0}", v.GetType().FullName);

int position = (int)v.Tag;
switch (v.Id)
{
var oldLayout = viewOldPosition.FindViewById<FrameLayout>(Resource.Id.albumCell_layoutButtons);
Animation animOld = AnimationUtils.LoadAnimation(_context, Resource.Animation.fade_out);
animOld.AnimationEnd += (sender, args) => {
oldLayout.Visibility = ViewStates.Gone;
};
oldLayout.StartAnimation(animOld);
case Resource.Id.albumCell_btnAddToPlaylist:
Console.WriteLine("MLBGA - ADD - position: {0}", position);
break;
case Resource.Id.albumCell_btnPlay:
Console.WriteLine("MLBGA - PLAY - position: {0}", position);
_fragment.OnPlayItem(position);
break;
case Resource.Id.albumCell_btnDelete:
Console.WriteLine("MLBGA - DELETE - position: {0}", position);
AlertDialog ad = new AlertDialog.Builder(_context)
.SetIconAttribute(global::Android.Resource.Attribute.AlertDialogIcon)
.SetTitle("Delete confirmation")
.SetMessage(string.Format("Are you sure you wish to delete {0}?", _items[position].Title))
.SetCancelable(true)
.SetPositiveButton("OK", (sender, args) => _fragment.OnDeleteItem(position))
.SetNegativeButton("Cancel", (sender, args) => { })
.Create();
ad.Show();
break;
}
}

Expand Down
Expand Up @@ -144,16 +144,18 @@ private void ListViewOnItemLongClick(object sender, AdapterView.ItemLongClickEve
private void GridViewOnItemClick(object sender, AdapterView.ItemClickEventArgs itemClickEventArgs)
{
// Reset long press buttons
Console.WriteLine("MobileLibraryBrowserFragment - GridViewOnItemClick - position: {0}", itemClickEventArgs.Position);
var gridAdapter = (MobileLibraryBrowserGridAdapter)((GridView)sender).Adapter;
gridAdapter.ShowCellButtons(-1);
gridAdapter.ResetEditingRow();

OnItemClick(itemClickEventArgs.Position);
}

private void GridViewOnItemLongClick(object sender, AdapterView.ItemLongClickEventArgs itemLongClickEventArgs)
{
Console.WriteLine("MobileLibraryBrowserFragment - GridViewOnItemLongClick - position: {0}", itemLongClickEventArgs.Position);
var gridAdapter = (MobileLibraryBrowserGridAdapter)((GridView)sender).Adapter;
gridAdapter.ShowCellButtons(itemLongClickEventArgs.Position);
gridAdapter.SetEditingRow(itemLongClickEventArgs.Position);
}

//public override void OnResume()
Expand Down

0 comments on commit ef98aa4

Please sign in to comment.