// Path: adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/CodeLabelAdapter.java
// public class CodeLabelAdapter extends ArrayAdapter<ICodeLabel> {
//     @LayoutRes
//     private int mResource;
//     @LayoutRes
//     private int mDropDownResource;
// 
//     public static CodeLabelAdapter newInstance(Context context, ICodeLabel[] objects, boolean withNullValue) {
//         if (withNullValue) {
//             List<ICodeLabel> values = new ArrayList<>();
//             values.add(null);
//             values.addAll(Arrays.asList(objects));
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, values);
//         } else {
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, objects);
//         }
//     }
// 
//     public static CodeLabelAdapter newInstance(Context context, List<ICodeLabel> objects, boolean withNullValue) {
//         if (withNullValue) {
//             List<ICodeLabel> values = new ArrayList<>();
//             values.add(null);
//             values.addAll(objects);
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, values);
//         } else {
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, objects);
//         }
//     }
// 
//     public CodeLabelAdapter(Context context, @LayoutRes int resource, @LayoutRes int dropDownResource, ICodeLabel[] objects) {
//         super(context, resource, objects);
//         mResource = resource;
//         mDropDownResource = dropDownResource;
//     }
// 
//     public CodeLabelAdapter(Context context, @LayoutRes int resource, @LayoutRes int dropDownResource, List<ICodeLabel> objects) {
//         super(context, resource, objects);
//         mResource = resource;
//         mDropDownResource = dropDownResource;
//     }
// 
//     @Override
//     public View getView(int position, View convertView, ViewGroup parent) {
//         if (convertView == null) {
//             convertView = LayoutInflater.from(getContext()).inflate(mResource, null);
//         }
//         TextView view = (TextView) convertView.findViewById(android.R.id.text1);
//         ICodeLabel item = getItem(position);
//         if (item != null) {
//             view.setText(item.getLabel(getContext().getResources()));
//         } else {
//             view.setText("");
//         }
//         return view;
//     }
// 
//     @Override
//     public View getDropDownView(int position, View convertView, ViewGroup parent) {
//         if (convertView == null) {
//             convertView = LayoutInflater.from(getContext()).inflate(mDropDownResource, null);
//         }
//         TextView view = (TextView) convertView.findViewById(android.R.id.text1);
//         ICodeLabel item = getItem(position);
//         if (item != null) {
//             view.setText(item.getLabel(getContext().getResources()));
//         } else {
//             view.setText("");
//         }
//         return view;
//     }
// }
// 
// Path: example/src/main/java/net/cattaka/android/adaptertoolbox/example/data/OrdinalLabel.java
// public enum OrdinalLabel implements ICodeLabel {
//     FIRST("first", R.string.ordinal_label_first),
//     SECOND("second", R.string.ordinal_label_second),
//     THIRD("third", R.string.ordinal_label_third),
//     FOURTH("fourth", R.string.ordinal_label_fourth),
//     //
//     ;
// 
//     final String code;
//     @StringRes
//     final int resId;
// 
//     OrdinalLabel(String code, @StringRes int resId) {
//         this.code = code;
//         this.resId = resId;
//     }
// 
//     @Override
//     public String getCode() {
//         return code;
//     }
// 
//     @Override
//     public String getLabel(Resources res) {
//         return res.getString(resId);
//     }
// }
// 
// Path: example/src/main/java/net/cattaka/android/adaptertoolbox/example/logic/SnackbarLogic.java
// public class SnackbarLogic {
//     public SnackbarLogic() {
//     }
// 
//     @NonNull
//     public ISnackbarWrapper make(@NonNull View view, @NonNull CharSequence text, int duration) {
//         return new SnackbarWrapperImpl(Snackbar.make(view, text, duration));
//     }
// 
//     @NonNull
//     public ISnackbarWrapper make(@NonNull View view, @StringRes int resId, int duration) {
//         return new SnackbarWrapperImpl(Snackbar.make(view, resId, duration));
//     }
// 
//     /**
//      * For InstrumentationTest
//      */
//     public interface ISnackbarWrapper {
//         void show();
//     }
// 
//     private static class SnackbarWrapperImpl implements ISnackbarWrapper {
//         private Snackbar orig;
// 
//         public SnackbarWrapperImpl(Snackbar orig) {
//             this.orig = orig;
//         }
// 
//         @Override
//         public void show() {
//             orig.show();
//         }
//     }
// }


import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import net.cattaka.android.adaptertoolbox.adapter.CodeLabelAdapter;
import net.cattaka.android.adaptertoolbox.example.data.OrdinalLabel;
import net.cattaka.android.adaptertoolbox.example.logic.SnackbarLogic;
package net.cattaka.android.adaptertoolbox.example;



/**
 * Created by cattaka on 16/05/02.
 */
public class CodeLabelExampleActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    SnackbarLogic mSnackbarLogic = new SnackbarLogic();
    Spinner mSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code_label_example);

        // find views
        mSpinner = (Spinner) findViewById(R.id.spinner);

        // set adapter
// Path: adapter-toolbox/src/main/java/net/cattaka/android/adaptertoolbox/adapter/CodeLabelAdapter.java
// public class CodeLabelAdapter extends ArrayAdapter<ICodeLabel> {
//     @LayoutRes
//     private int mResource;
//     @LayoutRes
//     private int mDropDownResource;
// 
//     public static CodeLabelAdapter newInstance(Context context, ICodeLabel[] objects, boolean withNullValue) {
//         if (withNullValue) {
//             List<ICodeLabel> values = new ArrayList<>();
//             values.add(null);
//             values.addAll(Arrays.asList(objects));
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, values);
//         } else {
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, objects);
//         }
//     }
// 
//     public static CodeLabelAdapter newInstance(Context context, List<ICodeLabel> objects, boolean withNullValue) {
//         if (withNullValue) {
//             List<ICodeLabel> values = new ArrayList<>();
//             values.add(null);
//             values.addAll(objects);
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, values);
//         } else {
//             return new CodeLabelAdapter(context, android.R.layout.simple_list_item_1, android.R.layout.simple_spinner_dropdown_item, objects);
//         }
//     }
// 
//     public CodeLabelAdapter(Context context, @LayoutRes int resource, @LayoutRes int dropDownResource, ICodeLabel[] objects) {
//         super(context, resource, objects);
//         mResource = resource;
//         mDropDownResource = dropDownResource;
//     }
// 
//     public CodeLabelAdapter(Context context, @LayoutRes int resource, @LayoutRes int dropDownResource, List<ICodeLabel> objects) {
//         super(context, resource, objects);
//         mResource = resource;
//         mDropDownResource = dropDownResource;
//     }
// 
//     @Override
//     public View getView(int position, View convertView, ViewGroup parent) {
//         if (convertView == null) {
//             convertView = LayoutInflater.from(getContext()).inflate(mResource, null);
//         }
//         TextView view = (TextView) convertView.findViewById(android.R.id.text1);
//         ICodeLabel item = getItem(position);
//         if (item != null) {
//             view.setText(item.getLabel(getContext().getResources()));
//         } else {
//             view.setText("");
//         }
//         return view;
//     }
// 
//     @Override
//     public View getDropDownView(int position, View convertView, ViewGroup parent) {
//         if (convertView == null) {
//             convertView = LayoutInflater.from(getContext()).inflate(mDropDownResource, null);
//         }
//         TextView view = (TextView) convertView.findViewById(android.R.id.text1);
//         ICodeLabel item = getItem(position);
//         if (item != null) {
//             view.setText(item.getLabel(getContext().getResources()));
//         } else {
//             view.setText("");
//         }
//         return view;
//     }
// }
// 
// Path: example/src/main/java/net/cattaka/android/adaptertoolbox/example/data/OrdinalLabel.java
// public enum OrdinalLabel implements ICodeLabel {
//     FIRST("first", R.string.ordinal_label_first),
//     SECOND("second", R.string.ordinal_label_second),
//     THIRD("third", R.string.ordinal_label_third),
//     FOURTH("fourth", R.string.ordinal_label_fourth),
//     //
//     ;
// 
//     final String code;
//     @StringRes
//     final int resId;
// 
//     OrdinalLabel(String code, @StringRes int resId) {
//         this.code = code;
//         this.resId = resId;
//     }
// 
//     @Override
//     public String getCode() {
//         return code;
//     }
// 
//     @Override
//     public String getLabel(Resources res) {
//         return res.getString(resId);
//     }
// }
// 
// Path: example/src/main/java/net/cattaka/android/adaptertoolbox/example/logic/SnackbarLogic.java
// public class SnackbarLogic {
//     public SnackbarLogic() {
//     }
// 
//     @NonNull
//     public ISnackbarWrapper make(@NonNull View view, @NonNull CharSequence text, int duration) {
//         return new SnackbarWrapperImpl(Snackbar.make(view, text, duration));
//     }
// 
//     @NonNull
//     public ISnackbarWrapper make(@NonNull View view, @StringRes int resId, int duration) {
//         return new SnackbarWrapperImpl(Snackbar.make(view, resId, duration));
//     }
// 
//     /**
//      * For InstrumentationTest
//      */
//     public interface ISnackbarWrapper {
//         void show();
//     }
// 
//     private static class SnackbarWrapperImpl implements ISnackbarWrapper {
//         private Snackbar orig;
// 
//         public SnackbarWrapperImpl(Snackbar orig) {
//             this.orig = orig;
//         }
// 
//         @Override
//         public void show() {
//             orig.show();
//         }
//     }
// }


// Path: example/src/main/java/net/cattaka/android/adaptertoolbox/example/CodeLabelExampleActivity.java
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import net.cattaka.android.adaptertoolbox.adapter.CodeLabelAdapter;
import net.cattaka.android.adaptertoolbox.example.data.OrdinalLabel;
import net.cattaka.android.adaptertoolbox.example.logic.SnackbarLogic;

package net.cattaka.android.adaptertoolbox.example;



/**
 * Created by cattaka on 16/05/02.
 */
public class CodeLabelExampleActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    SnackbarLogic mSnackbarLogic = new SnackbarLogic();
    Spinner mSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code_label_example);

        // find views
        mSpinner = (Spinner) findViewById(R.id.spinner);

        // set adapter
        mSpinner.setAdapter(CodeLabelAdapter.newInstance(this, OrdinalLabel.values(), true));