Added fab and handles, made cards cardier

This commit is contained in:
Somethingweirdhere 2018-06-18 11:34:59 +02:00 committed by Christian Schabesberger
parent 8d6d18e875
commit d694561980
3 changed files with 52 additions and 55 deletions

View File

@ -8,6 +8,7 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceManager;
@ -20,6 +21,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
@ -59,12 +61,12 @@ public class ContentSettingsMain extends Fragment {
tabNames(); tabNames();
initUsedTabs(); initUsedTabs();
initButton(rootView);
usedTabsView = rootView.findViewById(R.id.usedTabs); usedTabsView = rootView.findViewById(R.id.usedTabs);
usedTabsView.setLayoutManager(new LinearLayoutManager(getContext())); usedTabsView.setLayoutManager(new LinearLayoutManager(getContext()));
usedAdapter = new ContentSettingsMain.UsedAdapter(); usedAdapter = new ContentSettingsMain.UsedAdapter();
usedTabsView.setAdapter(usedAdapter); usedTabsView.setAdapter(usedAdapter);
usedTabsView.addItemDecoration(new ContentSettingsMain.DividerItemDecoration(getActivity()));
ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(usedAdapter); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(usedAdapter);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback); ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
@ -110,6 +112,17 @@ public class ContentSettingsMain extends Fragment {
allTabs[6] = getString(R.string.channel_page_summary); allTabs[6] = getString(R.string.channel_page_summary);
} }
private void initButton(View rootView) {
FloatingActionButton fab = rootView.findViewById(R.id.floatingActionButton);
fab.setImageResource(ThemeHelper.getIconByAttr(R.attr.ic_add, getContext()));
fab.setOnClickListener(v -> {
ContentSettingsMainDialog contentSettingsMainDialog = new ContentSettingsMainDialog();
contentSettingsMainDialog.setOnAddListener(ContentSettingsMain.this::addTab);
contentSettingsMainDialog.show(getFragmentManager(), "select_channel");
});
}
private void addTab(int position) { private void addTab(int position) {
if(position!=6) { if(position!=6) {
usedTabs.add(String.valueOf(position)); usedTabs.add(String.valueOf(position));
@ -131,10 +144,6 @@ public class ContentSettingsMain extends Fragment {
// ... code from gist // ... code from gist
@Override @Override
public void onItemDismiss(int position) { public void onItemDismiss(int position) {
if(position==getItemCount() - 1) {
notifyDataSetChanged();
return;
}
usedTabs.remove(position); usedTabs.remove(position);
notifyItemRemoved(position); notifyItemRemoved(position);
saveChanges(); saveChanges();
@ -142,7 +151,6 @@ public class ContentSettingsMain extends Fragment {
@Override @Override
public void onItemMove(int fromPosition, int toPosition) { public void onItemMove(int fromPosition, int toPosition) {
if(fromPosition==getItemCount() - 1 || toPosition==getItemCount() - 1) return;
if (fromPosition < toPosition) { if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) { for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(usedTabs, i, i + 1); Collections.swap(usedTabs, i, i + 1);
@ -171,7 +179,7 @@ public class ContentSettingsMain extends Fragment {
@Override @Override
public int getItemCount() { public int getItemCount() {
return usedTabs.size() + 1; return usedTabs.size();
} }
class TabViewHolder extends RecyclerView.ViewHolder { class TabViewHolder extends RecyclerView.ViewHolder {
@ -179,25 +187,21 @@ public class ContentSettingsMain extends Fragment {
TextView text; TextView text;
View view; View view;
CardView cardView; CardView cardView;
ImageView handle;
public TabViewHolder(View itemView) { public TabViewHolder(View itemView) {
super(itemView); super(itemView);
text = itemView.findViewById(R.id.tabName); text = itemView.findViewById(R.id.tabName);
cardView = itemView.findViewById(R.id.layoutCard); cardView = itemView.findViewById(R.id.layoutCard);
handle = itemView.findViewById(R.id.handle);
view = itemView; view = itemView;
} }
void bind(int position) { void bind(int position) {
if(position == getItemCount() - 1) { handle.setImageResource(ThemeHelper.getIconByAttr(R.attr.drag_handle, getContext()));
String newTabString = "+ " + getString(R.string.tab_new);
text.setText(newTabString); if(usedTabs.get(position).startsWith("6\t")) {
view.setOnClickListener(v -> {
ContentSettingsMainDialog contentSettingsMainDialog = new ContentSettingsMainDialog();
contentSettingsMainDialog.setOnAddListener(ContentSettingsMain.this::addTab);
contentSettingsMainDialog.show(getFragmentManager(), "select_channel");
});
} else if(usedTabs.get(position).startsWith("6\t")) {
String channelInfo[] = usedTabs.get(position).split("\t"); String channelInfo[] = usedTabs.get(position).split("\t");
String channelName = ""; String channelName = "";
if(channelInfo.length==4) channelName = channelInfo[2]; if(channelInfo.length==4) channelName = channelInfo[2];
@ -210,39 +214,6 @@ public class ContentSettingsMain extends Fragment {
} }
} }
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private final int[] ATTRS = new int[]{android.R.attr.listDivider};
private Drawable divider;
public DividerItemDecoration(Context context) {
final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS);
divider = styledAttributes.getDrawable(0);
styledAttributes.recycle();
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin;
int bottom = top + divider.getIntrinsicHeight();
divider.setBounds(left, top, right, bottom);
divider.draw(c);
}
}
}
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback { public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
private final ItemTouchHelperAdapter mAdapter; private final ItemTouchHelperAdapter mAdapter;

View File

@ -1,16 +1,29 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/relLay" android:id="@+id/relLay"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:clickable="true" />
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/usedTabs" android:id="@+id/usedTabs"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_margin="0dp" android:layout_margin="0dp"
android:paddingBottom="0dp" android:paddingBottom="0dp"
android:paddingTop="0dp" /> android:paddingTop="0dp" >
</android.support.v7.widget.RecyclerView>
</RelativeLayout> </RelativeLayout>

View File

@ -4,9 +4,22 @@
android:id="@+id/layoutCard" android:id="@+id/layoutCard"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="0dp" android:layout_marginBottom="3dp"
android:layout_marginTop="1dp" android:layout_marginLeft="5dp"
android:orientation="horizontal"> android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:orientation="horizontal"
android:paddingBottom="4dp"
android:paddingTop="4dp"
app:cardCornerRadius="5dp"
app:cardElevation="12dp">
<ImageView
android:id="@+id/handle"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
android:layout_marginRight="10dp" />
<TextView <TextView
android:id="@+id/tabName" android:id="@+id/tabName"
@ -17,8 +30,8 @@
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:paddingBottom="9dp" android:paddingBottom="9dp"
android:paddingLeft="19dp" android:paddingLeft="15dp"
android:paddingRight="19dp" android:paddingRight="15dp"
android:paddingStart="3dp" android:paddingStart="3dp"
android:paddingTop="9dp" android:paddingTop="9dp"
android:textAppearance="?android:attr/textAppearanceListItem" android:textAppearance="?android:attr/textAppearanceListItem"