/*
* Copyright (C) 2009 Apps Organizer
*
* This file is part of Apps Organizer
*
* Apps Organizer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Apps Organizer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Apps Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
package com.google.code.appsorganizer;
import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import com.google.code.appsorganizer.db.DatabaseHelper;
import com.google.code.appsorganizer.dialogs.GenericDialogCreator;
import com.google.code.appsorganizer.dialogs.GenericDialogManager;
import com.google.code.appsorganizer.dialogs.OnOkClickListener;
import com.google.code.appsorganizer.model.AppLabelSaver;
import com.google.code.appsorganizer.model.AppCache;
public class ChooseLabelDialogCreator extends GenericDialogCreator {
private static final String APPLICATION_BUNDLE_NAME = "application_label_dialog";
private static final String PACKAGE_BUNDLE_NAME = "application_package_label_dialog";
private String packageName;
private String name;
private ChooseLabelListAdapter adapter;
private final OnOkClickListener onOkClickListener;
private final NewLabelDialog newLabelDialog;
public ChooseLabelDialogCreator(GenericDialogManager dialogManager, OnOkClickListener onOkClickListener) {
super(dialogManager);
this.onOkClickListener = onOkClickListener;
newLabelDialog = new NewLabelDialog(dialogManager, new OnOkClickListener() {
private static final long serialVersionUID = 7421660517919410764L;
public void onClick(CharSequence t, DialogInterface dialog, int which) {
int count = adapter.getCount();
boolean[] checked = new boolean[count];
for (int i = 0; i < count; i++) {
checked[i] = listView.isItemChecked(i);
}
adapter.addLabel(t.toString());
for (int i = 1; i < count + 1; i++) {
listView.setItemChecked(i, checked[i - 1]);
}
listView.setItemChecked(0, true);
}
});
}
private ListView listView;
@Override
public void prepareDialog(final Dialog dialog) {
final DatabaseHelper dbHelper = DatabaseHelper.initOrSingleton(owner);
List<AppLabelBinding> allLabels = dbHelper.labelDao.getAppsLabelList(packageName, name);
adapter = new ChooseLabelListAdapter(owner, allLabels);
listView.setAdapter(adapter);
AppCache appCache = dbHelper.appCacheDao.queryForAppCache(packageName, name, false, false);
final CheckBox starCheck = (CheckBox)dialog.findViewById(R.id.starCheck);
starCheck.setChecked(appCache.starred);
int pos = 0;
for (AppLabelBinding appLabelBinding : allLabels) {
if (appLabelBinding.checked) {
listView.setItemChecked(pos, true);
}
pos++;
}
dialog.findViewById(R.id.newLabelButton).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
newLabelDialog.showDialog();
}
});
dialog.findViewById(R.id.okButton).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
adapter.getItem(i).checked = listView.isItemChecked(i);
}
List<AppLabelBinding> modifiedLabels = adapter.getModifiedLabels();
AppLabelSaver.save(DatabaseHelper.initOrSingleton(owner), packageName, name, modifiedLabels);
dbHelper.appCacheDao.updateStarred(packageName, name, starCheck.isChecked());
if (onOkClickListener != null) {
onOkClickListener.onClick(null, dialog, Dialog.BUTTON_POSITIVE);
}
dialog.hide();
}
});
dialog.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.hide();
}
});
}
@Override
public Dialog createDialog() {
View body = getChooseDialogBody();
listView = (ListView) body.findViewById(R.id.labelList);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
AlertDialog.Builder builder = new AlertDialog.Builder(owner);
builder = builder.setTitle(R.string.choose_labels_header);
builder = builder.setView(body);
return builder.create();
}
public View getChooseDialogBody() {
LayoutInflater factory = LayoutInflater.from(owner);
View body = factory.inflate(R.layout.choose_label_dialog_body, null);
return body;
}
public void setCurrentApp(String packageName, String name) {
this.packageName = packageName;
this.name = name;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(APPLICATION_BUNDLE_NAME, name);
outState.putString(PACKAGE_BUNDLE_NAME, packageName);
}
@Override
public void onRestoreInstanceState(Bundle state) {
name = state.getString(APPLICATION_BUNDLE_NAME);
packageName = state.getString(PACKAGE_BUNDLE_NAME);
}
}