blob: 699fe14d1bc0b4b60e04433d4617b023c38ad547 [file] [log] [blame]
/*
* 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.text.SpannableString;
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;
import java.util.Set;
/**
* Settings panel for photo flipping dream.
*/
public class AlbumDataAdapter extends ArrayAdapter<PhotoSource.AlbumData> {
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<String> mValidAlbumIds;
public AlbumDataAdapter(Context context, SharedPreferences settings,
int resource, List<PhotoSource.AlbumData> 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<String>(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<PhotoSource.AlbumData> {
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<PhotoSource.AlbumData> {
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<PhotoSource.AlbumData> {
@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);
}
}
}