/* * Copyright (C) 2012 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.android.dreams.phototable; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.TextView; import java.util.Comparator; import java.util.HashSet; import java.util.List; /** * Settings panel for photo flipping dream. */ public class AlbumDataAdapter extends ArrayAdapter { private static final String TAG = "AlbumDataAdapter"; private static final boolean DEBUG = false; public static final String ALBUM_SET = "Enabled Album Set"; private final AlbumSettings mSettings; private final LayoutInflater mInflater; private final int mLayout; private final ItemClickListener mListener; private final HashSet mValidAlbumIds; public AlbumDataAdapter(Context context, SharedPreferences settings, int resource, List objects) { super(context, resource, objects); mSettings = AlbumSettings.getAlbumSettings(settings); mLayout = resource; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mListener = new ItemClickListener(); mValidAlbumIds = new HashSet(objects.size()); for (PhotoSource.AlbumData albumData: objects) { mValidAlbumIds.add(albumData.id); } mSettings.pruneObsoleteSettings(mValidAlbumIds); } public boolean isSelected(int position) { PhotoSource.AlbumData data = getItem(position); return mSettings.isAlbumEnabled(data.id); } public boolean areAllSelected() { return mSettings.areAllEnabled(mValidAlbumIds); } public void selectAll(boolean select) { if (select) { mSettings.enableAllAlbums(mValidAlbumIds); } else { mSettings.disableAllAlbums(); } notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View item = convertView; if (item == null) { item = mInflater.inflate(mLayout, parent, false); } PhotoSource.AlbumData data = getItem(position); View vCheckBox = item.findViewById(R.id.enabled); if (vCheckBox != null && vCheckBox instanceof CheckBox) { CheckBox checkBox = (CheckBox) vCheckBox; checkBox.setChecked(isSelected(position)); checkBox.setTag(R.id.data_payload, data); } View vTextView = item.findViewById(R.id.title); if (vTextView != null && vTextView instanceof TextView) { TextView textView = (TextView) vTextView; textView.setText(data.title); } item.setOnClickListener(mListener); return item; } public static class AccountComparator implements Comparator { private final RecencyComparator recency; public AccountComparator() { recency = new RecencyComparator(); } @Override public int compare(PhotoSource.AlbumData a, PhotoSource.AlbumData b) { if (a.account == b.account) { return recency.compare(a, b); } else { String typeAString = a.getType(); String typeBString = b.getType(); int typeA = 1; int typeB = 1; if (typeAString.equals(LocalSource.class.getName())) { typeA = 0; } if (typeBString.equals(LocalSource.class.getName())) { typeB = 0; } if (typeAString.equals(StockSource.class.getName())) { typeA = 2; } if (typeBString.equals(StockSource.class.getName())) { typeB = 2; } if (typeA == typeB) { return a.account.compareTo(b.account); } else { return (int) Math.signum(typeA - typeB); } } } } public static class RecencyComparator implements Comparator { private final TitleComparator title; public RecencyComparator() { title = new TitleComparator(); } @Override public int compare(PhotoSource.AlbumData a, PhotoSource.AlbumData b) { if (a.updated == b.updated) { return title.compare(a, b); } else { return (int) Math.signum(b.updated - a.updated); } } } public static class TitleComparator implements Comparator { @Override public int compare(PhotoSource.AlbumData a, PhotoSource.AlbumData b) { return a.title.compareTo(b.title); } } private class ItemClickListener implements OnClickListener { @Override public void onClick(View v) { final View vCheckBox = v.findViewById(R.id.enabled); if (vCheckBox != null && vCheckBox instanceof CheckBox) { final CheckBox checkBox = (CheckBox) vCheckBox; final PhotoSource.AlbumData data = (PhotoSource.AlbumData) checkBox.getTag(R.id.data_payload); final boolean isChecked = !checkBox.isChecked(); checkBox.setChecked(isChecked); mSettings.setAlbumEnabled(data.id, isChecked); notifyDataSetChanged(); if (DEBUG) Log.i(TAG, data.title + " is " + (isChecked ? "" : "not") + " enabled"); } else { if (DEBUG) Log.w(TAG, "no checkbox found in settings row!"); } v.setPressed(true); } } }