edu.rosehulman.grocerydroid.MainActivityNonTouch.java Source code

Java tutorial

Introduction

Here is the source code for edu.rosehulman.grocerydroid.MainActivityNonTouch.java

Source

/*
 * Copyright (C) 2010 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 edu.rosehulman.grocerydroid;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;

import edu.rosehulman.grocerydroid.db.ItemDataAdapter;
import edu.rosehulman.grocerydroid.db.ShoppingListDataAdapter;
import edu.rosehulman.grocerydroid.model.ShoppingList;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

import java.util.ArrayList;

/**
 * The main screen displays all the user's shopping lists.
 * 
 * @author Matthew Boutell. Created Mar 29, 2012.
 */
public class MainActivityNonTouch extends SherlockFragmentActivity {
    private ShoppingListDataAdapter mSlda;
    private ItemDataAdapter mIda;
    private ArrayList<ShoppingList> mShoppingLists = null;
    private ShoppingList mSelectedList;
    private MainShoppingListAdapter mAdapter;
    private static final int REQUEST_STOCK = 0;

    /** Used for passing data via an Intent */
    static final String KEY_SELECTED_LIST = "KEY_SELECTED_LIST";

    /** Used for passing data via an Intent */
    static final String KEY_GO_SHOPPING = "GO SHOPPING";

    /**
     * To communicate that this activity should immediately go to the shopping
     * activity once the stock activity finishes.
     */
    static final int GO_SHOPPING = 1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_Sherlock_ForceOverflow); // ABS, must come first
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getSupportActionBar().setIcon(R.drawable.ic_list); // needs to be in
        // hdpi folder
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setSubtitle("Welcome");

        initializeDatabase();
        initializeShoppingLists();

        ListView lv = (ListView) findViewById(R.id.main_shopping_list_view);
        mAdapter = new MainShoppingListAdapter(this, R.layout.main_list, mShoppingLists);
        lv.setAdapter(mAdapter);

        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
                mSelectedList = MainActivityNonTouch.this.mShoppingLists.get(pos);
                DialogFragment df = ChooseActionDialogFragment.newInstance();
                df.show(getSupportFragmentManager(), "choose_action");
            }
        });
    }

    private void initializeDatabase() {
        mSlda = new ShoppingListDataAdapter();
        mSlda.open();

        mIda = new ItemDataAdapter();
        mIda.open();
    }

    /** Loads all of the shopping lists from the database */
    private void initializeShoppingLists() {
        mShoppingLists = new ArrayList<ShoppingList>();
        for (ShoppingList list : mSlda.getAllLists()) {
            mShoppingLists.add(list);
        }
        updateMainPrompt();
    }

    /** Use because the prompt is different if there are no lists. */
    private void updateMainPrompt() {
        TextView tv = (TextView) findViewById(R.id.main_screen_prompt);
        Log.d(MyApplication.GD, "There are " + mShoppingLists.size() + " lists");
        if (this.mShoppingLists.size() > 0) {
            tv.setText(R.string.main_screen_prompt_lists_present);
        } else {
            tv.setText(R.string.main_screen_prompt_default);
        }
    }

    /**
     * Adds the given list to the activity.
     * 
     * @param listName
     */
    void addList(String listName) {
        ShoppingList newList = new ShoppingList(listName);
        mSlda.insertList(newList);
        mShoppingLists.add(newList);
        mAdapter.notifyDataSetChanged();
        updateMainPrompt();
    }

    /**
     * Deletes the list and all its items.
     */
    void deleteList() {
        mShoppingLists.remove(mSelectedList);
        mSlda.deleteList(mSelectedList);
        mIda.deleteAllItemsWithListId(mSelectedList.getId());
        mAdapter.notifyDataSetChanged();
        updateMainPrompt();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.top_level, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // handle item selection
        switch (item.getItemId()) {
        case R.id.add_list:
            DialogFragment newFragment = new AddListDialogFragment();
            newFragment.show(getSupportFragmentManager(), "add_list");
            return true;
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /**
     * Launches the stock activity.
     * 
     */
    void launchStockActivity() {
        Log.d(MyApplication.GD, String.format("Stock list for %s", mSelectedList));
        Intent intent = new Intent(MainActivityNonTouch.this, StockActivity.class);
        intent.putExtra(MainActivityNonTouch.KEY_SELECTED_LIST, mSelectedList.getId());
        startActivityForResult(intent, REQUEST_STOCK);

    }

    /**
     * Launches the shop activity.
     * 
     */
    void launchShopActivity() {
        Log.d(MyApplication.GD, String.format("Shop at %s", mSelectedList));
        Intent intent = new Intent(MainActivityNonTouch.this, ShopActivity.class);
        intent.putExtra(MainActivityNonTouch.KEY_SELECTED_LIST, mSelectedList.getId());
        startActivity(intent);
    }

    @Override
    protected void onActivityResult(int reqCode, int resultCode, Intent data) {
        if (reqCode == REQUEST_STOCK && resultCode == RESULT_OK) {
            if (data.getIntExtra(KEY_GO_SHOPPING, -1) > 0) {
                launchShopActivity();
            }
        }
    }
}