/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.support.wearable.notifications;
import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Manages the background image pickers.
*/
public class BackgroundPickers {
public interface OnBackgroundPickersChangedListener {
public void onBackgroundPickersChanged(BackgroundPickers pickers);
}
private final ViewGroup mContainer;
private final OnPickedListener mOnPickedListener;
private final List<ViewGroup> mPickers;
private final OnBackgroundPickersChangedListener listener;
public BackgroundPickers(ViewGroup container, OnBackgroundPickersChangedListener listener) {
this.mContainer = container;
this.mOnPickedListener = new OnPickedListener();
this.mPickers = new ArrayList<ViewGroup>();
this.listener = listener;
}
/**
* Generates the pickers as necessary.
*/
public void generatePickers(int count) {
// Clear existing containers.
clear();
// Fill in new pickers.
LayoutInflater inflater = LayoutInflater.from(mContainer.getContext());
Resources res = mContainer.getResources();
for (int i = 0; i < count; i++) {
View picker = inflater.inflate(R.layout.background_picker, mContainer, false);
TextView label = (TextView) picker.findViewById(R.id.bg_picker_label);
label.setText(String.format(res.getString(R.string.bg_picker_label), i+1));
ViewGroup pickerBox = (ViewGroup) picker.findViewById(R.id.bg_picker_container);
mPickers.add(pickerBox);
for (int j = 0; j < pickerBox.getChildCount(); j++) {
ImageView img = (ImageView) pickerBox.getChildAt(j);
img.setOnClickListener(mOnPickedListener);
}
mContainer.addView(picker);
}
}
/**
* Returns the background resource for the picker at the given index.
* @param position Index of the background picker.
* @return Id of the background image resource. null if no image is picked.
*/
public Integer getRes(int position) {
String tag = (String) mPickers.get(position).getTag();
if (tag == null) {
return null;
}
Context context = mContainer.getContext();
return context.getResources().getIdentifier(tag, "drawable", context.getPackageName());
}
/**
* Returns the all the background resources for the pickers managed by this object. Returns null
* if no pickers exist.
*/
public Integer[] getRes() {
if (mPickers.size() == 0) {
return null;
}
Integer[] res = new Integer[mPickers.size()];
for (int i = 0; i < mPickers.size(); i++) {
res[i] = getRes(i);
}
return res;
}
/**
* Clears the pickers.
*/
public void clear() {
mContainer.removeAllViews();
mPickers.clear();
}
public int getCount() {
return mPickers.size();
}
private class OnPickedListener implements View.OnClickListener {
@Override
public void onClick(View view) {
ImageView pickedView = (ImageView) view;
ViewGroup pickerBox = (ViewGroup) view.getParent();
// Clear old selection.
for (int i = 0; i < pickerBox.getChildCount(); i++) {
ImageView childView = (ImageView) pickerBox.getChildAt(i);
childView.setBackgroundResource(R.drawable.unselected_background);
}
// Set new selection.
pickedView.setBackgroundResource(R.drawable.selected_background);
pickerBox.setTag(pickedView.getTag());
if (listener != null) {
listener.onBackgroundPickersChanged(BackgroundPickers.this);
}
}
}
}