fully get rid of library_row_expandable

This commit is contained in:
Adrian Ulrich 2016-07-24 15:23:27 +02:00
parent 4611a6c533
commit f78485ed38
6 changed files with 42 additions and 103 deletions

View File

@ -1,62 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2012 Christopher Eby <kreed@kreed.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ch.blinkenlights.android.vanilla.LazyCoverView
android:id="@+id/cover"
android:scaleType="centerCrop"
android:layout_width="@dimen/cover_size"
android:layout_height="@dimen/cover_size"
android:layout_marginLeft="@dimen/cover_padding"
android:layout_gravity="center_vertical"
android:visibility="gone" />
<TextView
android:id="@+id/text"
android:maxLines="2"
android:textColor="?android:textColorPrimary"
android:gravity="left|center_vertical"
android:layout_width="0px"
android:layout_height="@dimen/row_normal_height"
android:layout_marginLeft="@dimen/text_padding"
android:layout_weight="1" />
<View
android:id="@+id/divider"
android:layout_width="@dimen/divider_size"
android:layout_height="fill_parent"
android:visibility="gone"
android:background="?android:attr/dividerHorizontal" />
<ImageView
android:id="@+id/arrow"
android:background="?android:attr/selectableItemBackground"
android:src="@drawable/arrow"
android:scaleType="center"
android:layout_width="@dimen/row_normal_height"
android:layout_height="@dimen/row_normal_height"
android:visibility="gone"
android:contentDescription="@string/expand" />
</LinearLayout>

View File

@ -24,6 +24,5 @@ THE SOFTWARE.
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@drawable/inset_divider"
android:dividerHeight="1dip"
android:divider="@null"
android:fastScrollEnabled="true"/>

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2014 Adrian Ulrich <adrian@blinkenlights.ch>
* Copyright (C) 2014-2016 Adrian Ulrich <adrian@blinkenlights.ch>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -19,6 +19,7 @@ package ch.blinkenlights.android.vanilla;
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ImageView;
@ -45,9 +46,10 @@ public class DraggableRow extends LinearLayout implements Checkable {
/**
* Layout types for use with setupLayout
*/
public static final int LAYOUT_CHECKBOXES = 1;
public static final int LAYOUT_DRAGGABLE = 2;
public static final int LAYOUT_LISTVIEW = 3;
public static final int LAYOUT_TEXTONLY = 0;
public static final int LAYOUT_CHECKBOXES = 1;
public static final int LAYOUT_DRAGGABLE = 2;
public static final int LAYOUT_LISTVIEW = 3;
public DraggableRow(Context context, AttributeSet attrs) {
@ -85,6 +87,7 @@ public class DraggableRow extends LinearLayout implements Checkable {
mCoverView.setVisibility(View.VISIBLE);
mDragger.setImageResource(R.drawable.arrow);
break;
case LAYOUT_TEXTONLY:
default:
break; // do not care
}
@ -139,6 +142,14 @@ public class DraggableRow extends LinearLayout implements Checkable {
mDragger.setVisibility( state ? View.VISIBLE : View.INVISIBLE );
}
public void setDraggerOnClickListener(View.OnClickListener listener) {
TypedValue v = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, v, true);
mDragger.setBackgroundResource(v.resourceId);
mDragger.setOnClickListener(listener);
}
/**
* Returns an instance of our textview
*/

View File

@ -165,9 +165,9 @@ public class LibraryPagerAdapter
* song limiters.
*/
private String mHeaderText;
private LinearLayout mArtistHeader;
private LinearLayout mAlbumHeader;
private LinearLayout mSongHeader;
private DraggableRow mArtistHeader;
private DraggableRow mAlbumHeader;
private DraggableRow mSongHeader;
/**
* The current filter text, or null if none.
*/
@ -311,24 +311,24 @@ public class LibraryPagerAdapter
LibraryActivity activity = mActivity;
LayoutInflater inflater = activity.getLayoutInflater();
LibraryAdapter adapter;
LinearLayout header = null;
DraggableRow header = null;
switch (type) {
case MediaUtils.TYPE_ARTIST:
adapter = mArtistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ARTIST, mPendingArtistLimiter, activity);
mArtistAdapter.setExpandable(mSongsPosition != -1 || mAlbumsPosition != -1);
mArtistHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
mArtistHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null);
break;
case MediaUtils.TYPE_ALBUM:
adapter = mAlbumAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ALBUM, mPendingAlbumLimiter, activity);
mAlbumAdapter.setExpandable(mSongsPosition != -1);
mPendingAlbumLimiter = null;
mAlbumHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
mAlbumHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null);
break;
case MediaUtils.TYPE_SONG:
adapter = mSongAdapter = new MediaAdapter(activity, MediaUtils.TYPE_SONG, mPendingSongLimiter, activity);
mPendingSongLimiter = null;
mSongHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
mSongHeader = header = (DraggableRow)inflater.inflate(R.layout.draggable_row, null);
break;
case MediaUtils.TYPE_PLAYLIST:
adapter = mPlaylistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_PLAYLIST, null, activity);
@ -351,8 +351,7 @@ public class LibraryPagerAdapter
view.setTag(type);
if (header != null) {
TextView headerText = (TextView)header.findViewById(R.id.text);
headerText.setText(mHeaderText);
header.getTextView().setText(mHeaderText);
header.setTag(new ViewHolder()); // behave like a normal library row
view.addHeaderView(header);
}
@ -455,11 +454,11 @@ public class LibraryPagerAdapter
public void setHeaderText(String text)
{
if (mArtistHeader != null)
((TextView)mArtistHeader.findViewById(R.id.text)).setText(text);
mArtistHeader.getTextView().setText(text);
if (mAlbumHeader != null)
((TextView)mAlbumHeader.findViewById(R.id.text)).setText(text);
mAlbumHeader.getTextView().setText(text);
if (mSongHeader != null)
((TextView)mSongHeader.findViewById(R.id.text)).setText(text);
mSongHeader.getTextView().setText(text);
mHeaderText = text;
}

View File

@ -508,29 +508,25 @@ public class MediaAdapter
}
@Override
public View getView(int position, View view, ViewGroup parent)
public View getView(int position, View convertView, ViewGroup parent)
{
DraggableRow row;
ViewHolder holder;
if (view == null) {
if (convertView == null) {
// We must create a new view if we're not given a recycle view or
// if the recycle view has the wrong layout.
row = (DraggableRow)mInflater.inflate(R.layout.draggable_row, null);
row.setupLayout(DraggableRow.LAYOUT_LISTVIEW);
view = mInflater.inflate(R.layout.library_row_expandable, null);
holder = new ViewHolder();
view.setTag(holder);
row.setTag(holder);
holder.text = (TextView)view.findViewById(R.id.text);
holder.divider = (View)view.findViewById(R.id.divider);
holder.arrow = (ImageView)view.findViewById(R.id.arrow);
holder.cover = (LazyCoverView)view.findViewById(R.id.cover);
holder.arrow.setOnClickListener(this);
holder.divider.setVisibility(mExpandable ? View.VISIBLE : View.GONE);
holder.arrow.setVisibility(mExpandable ? View.VISIBLE : View.GONE);
holder.cover.setVisibility(mCoverCacheType != MediaUtils.TYPE_INVALID ? View.VISIBLE : View.GONE);
row.setDraggerOnClickListener(this);
row.showDragger(mExpandable);
} else {
holder = (ViewHolder)view.getTag();
row = (DraggableRow)convertView;
holder = (ViewHolder)row.getTag();
}
Cursor cursor = mCursor;
@ -547,18 +543,18 @@ public class MediaAdapter
sb.append('\n');
sb.append(line2);
sb.setSpan(new ForegroundColorSpan(Color.GRAY), line1.length() + 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.text.setText(sb);
row.getTextView().setText(sb);
holder.title = line1;
} else {
String title = cursor.getString(2);
if(title == null) { title = DB_NULLSTRING_FALLBACK; }
holder.text.setText(title);
row.getTextView().setText(title);
holder.title = title;
}
holder.cover.setCover(mCoverCacheType, cacheId, holder.title);
row.getCoverView().setCover(mCoverCacheType, cacheId, holder.title);
return view;
return row;
}
/**
@ -640,7 +636,7 @@ public class MediaAdapter
public void onClick(View view)
{
int id = view.getId();
view = (View)view.getParent(); // get view of linear layout, not the click consumer
view = (View)view.getParent().getParent(); // get view of linear layout, not the click consumer
Intent intent = createData(view);
mActivity.onItemExpanded(intent);
}

View File

@ -25,8 +25,4 @@ import android.widget.ImageView;
public class ViewHolder {
public long id;
public String title;
public TextView text;
public View divider;
public ImageView arrow;
public LazyCoverView cover;
}