Skip to content

Commit

Permalink
[Palette list] Adapt the palette list to the kids/adult falvors.
Browse files Browse the repository at this point in the history
The PaletteListWrapper describes the common contract of the wrapper.
The FlavorPaletteListWrapper defines the specific behaviors.

For the kids flavor, the palettes are presented in a grid.
Only a preview of the palette is presented.

For the adult flavor, the palettes are presented in a vertical list.
The name of the palette is displayed next to the preview.
  • Loading branch information
vbarthel-fr committed Jul 24, 2016
1 parent c167660 commit aacfc8c
Show file tree
Hide file tree
Showing 8 changed files with 336 additions and 102 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package fr.tvbarthel.apps.cameracolorpicker.views;

import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import fr.tvbarthel.apps.cameracolorpicker.R;
import fr.tvbarthel.apps.cameracolorpicker.data.Palette;
import fr.tvbarthel.apps.cameracolorpicker.wrappers.PaletteListWrapper;

/**
* A flavor {@link PaletteListWrapper}.
*/
public class FlavorPaletteListWrapper extends PaletteListWrapper {

/**
* Create a {@link FlavorPaletteListWrapper}.
*
* @param recyclerView the {@link RecyclerView} that will be wrapped.
* @param listener the {@link fr.tvbarthel.apps.cameracolorpicker.wrappers.PaletteListWrapper.PaletteListWrapperListener} that will be notified of the clicks.
* @return a newly created {@link FlavorPaletteListWrapper}.
*/
public static FlavorPaletteListWrapper create(RecyclerView recyclerView, PaletteListWrapperListener listener) {
final PaletteAdapter paletteAdapter = new PaletteAdapter(listener);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(recyclerView.getContext());
return new FlavorPaletteListWrapper(recyclerView, listener, paletteAdapter, linearLayoutManager);
}

protected FlavorPaletteListWrapper(RecyclerView recyclerView, PaletteListWrapperListener listener, Adapter adapter, RecyclerView.LayoutManager layoutManager) {
super(recyclerView, listener, adapter, layoutManager);
}

/**
* A {@link fr.tvbarthel.apps.cameracolorpicker.wrappers.PaletteListWrapper.Adapter}
* of {@link PaletteHolder}.
* <p/>
* It adapts {@link Palette} into {@link fr.tvbarthel.apps.cameracolorpicker.R.layout#row_palette}
*/
private static class PaletteAdapter extends PaletteListWrapper.Adapter<PaletteHolder> {

protected PaletteAdapter(PaletteListWrapperListener listener) {
super(listener);
}

@Override
public PaletteHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_palette, parent, false);
return new PaletteHolder(view, mListener);
}

@Override
public void onBindViewHolder(PaletteHolder holder, int position) {
final Palette palette = get(position);
holder.bind(palette);
}

}

/**
* A {@link android.support.v7.widget.RecyclerView.ViewHolder} used by {@link PaletteAdapter}.
*/
private static class PaletteHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

private final View mUnderlyingView;
private final PaletteListWrapperListener mListener;
private final PaletteView mPaletteRoundedThumbnail;
private final TextView mPaletteName;
private Palette mPalette;

public PaletteHolder(View view, PaletteListWrapperListener listener) {
super(view);
mUnderlyingView = view;
mListener = listener;
mPaletteRoundedThumbnail = (PaletteView) view.findViewById(R.id.row_color_palette_thumbnail);
mPaletteName = (TextView) view.findViewById(R.id.row_color_palette_name);

view.setOnClickListener(this);
}

public void bind(Palette palette) {
mPalette = palette;
mPaletteRoundedThumbnail.setPalette(palette);
mPaletteName.setText(palette.getName());
}

@Override
public void onClick(View v) {
if (v != mUnderlyingView) {
throw new IllegalArgumentException("Unsupported view clicked. Found: " + v);
}

if (mPalette != null) {
mListener.onPaletteClicked(mPalette, mPaletteRoundedThumbnail);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="72dp">
android:layout_height="72dp"
android:background="?selectableItemBackground">

<fr.tvbarthel.apps.cameracolorpicker.views.PaletteView
android:id="@+id/row_color_palette_thumbnail"
android:layout_width="@dimen/row_color_palette_thumbnail_size"
android:layout_height="@dimen/row_color_palette_thumbnail_size"
android:layout_gravity="start"
android:layout_margin="16dp" />

<TextView
android:id="@+id/row_color_palette_name"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_toEndOf="@+id/row_color_palette_thumbnail"
android:layout_toRightOf="@+id/row_color_palette_thumbnail"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:gravity="center_vertical"
android:maxLines="1"
android:minLines="1"
Expand All @@ -27,4 +27,4 @@
android:textColor="@color/abc_primary_text_material_light"
tools:text="My awesome color palette" />

</RelativeLayout>
</FrameLayout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package fr.tvbarthel.apps.cameracolorpicker.views;

import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import fr.tvbarthel.apps.cameracolorpicker.R;
import fr.tvbarthel.apps.cameracolorpicker.data.Palette;
import fr.tvbarthel.apps.cameracolorpicker.wrappers.PaletteListWrapper;

/**
* A flavor {@link PaletteListWrapper}.
*/
public class FlavorPaletteListWrapper extends PaletteListWrapper {

/**
* Create a {@link FlavorPaletteListWrapper}.
*
* @param recyclerView the {@link RecyclerView} that will be wrapped.
* @param listener the {@link PaletteListWrapperListener} that will be notified of the clicks.
* @return a newly created {@link FlavorPaletteListWrapper}.
*/
public static FlavorPaletteListWrapper create(RecyclerView recyclerView, PaletteListWrapperListener listener) {
final PaletteAdapter paletteAdapter = new PaletteAdapter(listener);
final LinearLayoutManager linearLayoutManager = new GridLayoutManager(recyclerView.getContext(), 5);
return new FlavorPaletteListWrapper(recyclerView, listener, paletteAdapter, linearLayoutManager);
}

protected FlavorPaletteListWrapper(RecyclerView recyclerView, PaletteListWrapperListener listener, Adapter adapter, RecyclerView.LayoutManager layoutManager) {
super(recyclerView, listener, adapter, layoutManager);
}

/**
* A {@link Adapter}
* of {@link PaletteHolder}.
* <p/>
* It adapts {@link Palette} into {@link R.layout#row_palette}
*/
private static class PaletteAdapter extends Adapter<PaletteHolder> {

protected PaletteAdapter(PaletteListWrapperListener listener) {
super(listener);
}

@Override
public PaletteHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_palette, parent, false);
return new PaletteHolder(view, mListener);
}

@Override
public void onBindViewHolder(PaletteHolder holder, int position) {
final Palette palette = get(position);
holder.bind(palette);
}

}

/**
* A {@link RecyclerView.ViewHolder} used by {@link PaletteAdapter}.
*/
private static class PaletteHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

private final View mUnderlyingView;
private final PaletteListWrapperListener mListener;
private final PaletteView mPaletteRoundedThumbnail;
private Palette mPalette;

public PaletteHolder(View view, PaletteListWrapperListener listener) {
super(view);
mUnderlyingView = view;
mListener = listener;
mPaletteRoundedThumbnail = (PaletteView) view.findViewById(R.id.row_color_palette_thumbnail);

view.setOnClickListener(this);
}

public void bind(Palette palette) {
mPalette = palette;
mPaletteRoundedThumbnail.setPalette(palette);
}

@Override
public void onClick(View v) {
if (v != mUnderlyingView) {
throw new IllegalArgumentException("Unsupported view clicked. Found: " + v);
}

if (mPalette != null) {
mListener.onPaletteClicked(mPalette, mPaletteRoundedThumbnail);
}
}
}
}
14 changes: 14 additions & 0 deletions CameraColorPicker/app/src/kids/res/layout/row_palette.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="96dp"
android:background="?selectableItemBackground">

<fr.tvbarthel.apps.cameracolorpicker.views.PaletteView
android:id="@+id/row_color_palette_thumbnail"
android:layout_width="@dimen/row_color_palette_thumbnail_size"
android:layout_height="@dimen/row_color_palette_thumbnail_size"
android:layout_gravity="center"
android:layout_margin="16dp" />

</FrameLayout>

This file was deleted.

0 comments on commit aacfc8c

Please sign in to comment.