com.jtxdriggers.android.ventriloid.Manage.java Source code

Java tutorial

Introduction

Here is the source code for com.jtxdriggers.android.ventriloid.Manage.java

Source

/*
 * Copyright 2013 Justin Driggers <jtxdriggers@gmail.com>
 *
 * This file is part of Ventriloid.
 *
 * Ventriloid 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.
 *
 * Ventriloid 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 Ventriloid.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.jtxdriggers.android.ventriloid;

import org.holoeverywhere.ArrayAdapter;
import org.holoeverywhere.app.AlertDialog;
import org.holoeverywhere.app.ListActivity;
import org.holoeverywhere.widget.ListView;

import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;

public class Manage extends ListActivity implements ActionMode.Callback {

    public static final int REQUEST_CODE_MANAGE = 1;

    private ServerAdapter db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.manage);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        db = new ServerAdapter(this);

        getListView().setLongClickable(true);
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (db.getServersCount() > 0) {
                    getListView().clearChoices();
                    getListView().setItemChecked(position, true);
                    startActionMode(Manage.this);
                    return true;
                }
                return false;
            }
        });

    }

    @Override
    public void onStart() {
        super.onStart();
        loadServers();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.manage, menu);
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if (menu.findItem(R.id.clear) != null)
            menu.findItem(R.id.clear).setVisible(db.getServersCount() > 0);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        case R.id.add:
            startActivity(new Intent(this, ServerEdit.class));
            return true;
        case R.id.clear:
            new AlertDialog.Builder(this).setTitle("Clear all server data?")
                    .setMessage("This action cannot be undone.").setNegativeButton("Cancel", null)
                    .setPositiveButton("Clear", new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            db.clearServers();
                            loadServers();
                        }
                    }).show();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        if (db.getServersCount() > 0)
            startActivity(new Intent(this, ServerEdit.class).putExtra("index", position));
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.manage_action, menu);
        mode.setTitle(db.getAllServersAsStrings().get(getListView().getCheckedItemPosition()));
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(final ActionMode mode, MenuItem item) {
        final int position = getListView().getCheckedItemPosition();
        switch (item.getItemId()) {
        case R.id.edit:
            startActivity(new Intent(this, ServerEdit.class).putExtra("index", position));
            mode.finish();
            return true;
        case R.id.remove:
            new AlertDialog.Builder(this).setTitle("Remove server?").setMessage("This action cannot be undone.")
                    .setNegativeButton("Cancel", null).setPositiveButton("Remove", new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Server s = db.getAllServers().get(position);
                            if (s.getId() == getDefaultSharedPreferences().getInt("default", -1))
                                getDefaultSharedPreferences().edit().remove("default").commit();
                            db.deleteServer(db.getAllServers().get(position));
                            loadServers();
                            mode.finish();
                        }
                    }).show();
            return true;
        case R.id.copy:
            Server server = db.getAllServers().get(position);
            server.setServername(server.getServername() + " - Copy");
            db.addServer(server);
            loadServers();
            mode.finish();
            return true;
        }
        return false;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
    }

    private void loadServers() {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1,
                android.R.id.text1, db.getAllServersAsStrings());
        setListAdapter(adapter);

        supportInvalidateOptionsMenu();
    }

}