blob: e5faaac618fb3636df970a87ffcb141baf490f45 [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.google.android.apps.adk2.activity;
import java.io.IOException;
import java.util.ArrayList;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.SparseBooleanArray;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.android.apps.adk2.Presets;
import com.google.android.apps.adk2.R;
public class PresetsActivity extends ListActivity {
Presets mPresets;
boolean mWasPolling;
ArrayAdapter<Presets.Preset> mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresets = new Presets();
try {
mPresets.load(this);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Adk2BaseActivity.maybeDisplayHomeAsUp(this);
setContentView(R.layout.presets);
mAdapter = new ArrayAdapter<Presets.Preset>(this,
android.R.layout.simple_list_item_multiple_choice,
mPresets.getPresets());
setListAdapter(mAdapter);
getListView().setMultiChoiceModeListener(new ModeCallback());
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mWasPolling = HomeActivity.get().startPollingSettings();
}
protected void onDestroy() {
if (!mWasPolling) {
HomeActivity.get().stopPollingSettings();
}
super.onDestroy();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Presets.Preset p = mPresets.getPresets().get(position);
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
p.applyToPreferences(sharedPreferences);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.presets_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (Adk2BaseActivity.maybeHandleHomeMenuItem(item, this)) {
return true;
}
switch (item.getItemId()) {
case R.id.new_preset:
makeNewPreset();
return true;
default:
return false;
}
}
private void makeNewPreset() {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Presets.Preset p = mPresets.makeNewPreset(sharedPreferences);
onContentChanged();
RenamePresetController rpc = new RenamePresetController(p, true);
rpc.start();
}
void deletePreset(Presets.Preset preset) {
mAdapter.remove(preset);
}
private void savePresets() {
try {
mPresets.save(this);
} catch (IOException e) {
// TODO Error message for save fail
e.printStackTrace();
}
}
void deleteSelectedItems() {
ListView lv = getListView();
SparseBooleanArray checkedPositions = lv.getCheckedItemPositions();
int count = checkedPositions.size();
Resources res = getResources();
String presetsDeleted = res.getQuantityString(
R.plurals.number_of_presets_deleted, count, count);
Toast.makeText(PresetsActivity.this, presetsDeleted, Toast.LENGTH_SHORT)
.show();
ArrayList<Presets.Preset> presets = mPresets.getPresets();
for (int i = count - 1; i >= 0; --i) {
int index = checkedPositions.keyAt(i);
if (index != -1) {
Presets.Preset p = presets.get(index);
deletePreset(p);
}
}
savePresets();
}
void editSelectedItems() {
ListView lv = getListView();
SparseBooleanArray checkedPositions = lv.getCheckedItemPositions();
int firstIndex = checkedPositions.keyAt(0);
if (firstIndex != -1) {
ArrayList<Presets.Preset> presets = mPresets.getPresets();
Presets.Preset p = presets.get(firstIndex);
RenamePresetController rpc = new RenamePresetController(p, false);
rpc.start();
}
}
private class RenamePresetController implements OnClickListener {
Dialog mDialog;
Presets.Preset mPreset;
EditText mNameEdit;
Boolean mDeleteOnCancel;
public RenamePresetController(Presets.Preset preset,
Boolean deleteOnCancel) {
mPreset = preset;
mDeleteOnCancel = deleteOnCancel;
}
public void start() {
mDialog = new Dialog(PresetsActivity.this);
mDialog.setContentView(R.layout.preset_name_dialog);
Button cancel = (Button) mDialog
.findViewById(R.id.preset_edit_cancel);
cancel.setOnClickListener(this);
Button rename = (Button) mDialog
.findViewById(R.id.preset_edit_rename);
if (mDeleteOnCancel) {
rename.setText(R.string.create);
}
rename.setOnClickListener(this);
mNameEdit = (EditText) mDialog.findViewById(R.id.preset_name_edit);
mNameEdit.setText(mPreset.getName());
mNameEdit.selectAll();
mDialog.setTitle("Preset Name");
mDialog.show();
}
public void onClick(View v) {
if (v.getId() == R.id.preset_edit_rename) {
mPreset.setName(mNameEdit.getText().toString());
onContentChanged();
savePresets();
} else {
if (mDeleteOnCancel) {
deletePreset(mPreset);
}
}
mDialog.dismiss();
}
}
private class ModeCallback implements ListView.MultiChoiceModeListener {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_select_menu, menu);
mode.setTitle("Select Items");
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete_preset:
deleteSelectedItems();
mode.finish();
break;
case R.id.edit_preset:
editSelectedItems();
mode.finish();
break;
}
return true;
}
public void onDestroyActionMode(ActionMode mode) {
}
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
final int checkedCount = getListView().getCheckedItemCount();
switch (checkedCount) {
case 0:
mode.setSubtitle(null);
break;
case 1:
mode.setSubtitle("One item selected");
break;
default:
mode.setSubtitle("" + checkedCount + " items selected");
break;
}
}
}
}