1045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne/*
2045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Copyright (C) 2010 The Android Open Source Project
3045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne *
4045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Licensed under the Apache License, Version 2.0 (the "License");
5045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * you may not use this file except in compliance with the License.
6045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * You may obtain a copy of the License at
7045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne *
8045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne *      http://www.apache.org/licenses/LICENSE-2.0
9045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne *
10045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Unless required by applicable law or agreed to in writing, software
11045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * distributed under the License is distributed on an "AS IS" BASIS,
12045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * See the License for the specific language governing permissions and
14045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * limitations under the License.
15045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne */
16045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunnepackage com.example.android.apis.view;
17045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
18045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport com.example.android.apis.R;
19045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
20045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.app.ListActivity;
21045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.os.Bundle;
22045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.ActionMode;
23045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.Menu;
24045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.MenuInflater;
25045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.MenuItem;
26045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.ArrayAdapter;
27045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.ListView;
28045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.Toast;
29045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
30045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne/**
31045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * This demo illustrates the use of CHOICE_MODE_MULTIPLE_MODAL, a.k.a. selection mode on ListView
328fc1811242f98370c1e5882f7a7f8135198cd242Dianne Hackborn * couple with the new simple_list_item_activated_1 which uses a highlighted border for selected
338fc1811242f98370c1e5882f7a7f8135198cd242Dianne Hackborn * items.
34045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne */
35045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunnepublic class List16 extends ListActivity {
36045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    @Override
37045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    protected void onCreate(Bundle savedInstanceState) {
38045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        super.onCreate(savedInstanceState);
39045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        ListView lv = getListView();
40045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
41045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        lv.setMultiChoiceModeListener(new ModeCallback());
42045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        setListAdapter(new ArrayAdapter<String>(this,
43b39c4ba316a523e4ecf0ac9e71377b8c5b35c25cJeff Brown                android.R.layout.simple_list_item_activated_1, Cheeses.sCheeseStrings));
44045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    }
45045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
46045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    @Override
47045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    protected void onPostCreate(Bundle savedInstanceState) {
48045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        super.onPostCreate(savedInstanceState);
49045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        getActionBar().setSubtitle("Long press to start selection");
50045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    }
51045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
52045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    private class ModeCallback implements ListView.MultiChoiceModeListener {
53045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
54045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
55045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            MenuInflater inflater = getMenuInflater();
56045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            inflater.inflate(R.menu.list_select_menu, menu);
57045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            mode.setTitle("Select Items");
58045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            return true;
59045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        }
60045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
61045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
62045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            return true;
63045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        }
64045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
65045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
66045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            switch (item.getItemId()) {
67045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            case R.id.share:
68045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                Toast.makeText(List16.this, "Shared " + getListView().getCheckedItemCount() +
69045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                        " items", Toast.LENGTH_SHORT).show();
70045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                mode.finish();
71045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                break;
72045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            default:
73045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                Toast.makeText(List16.this, "Clicked " + item.getTitle(),
74045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                        Toast.LENGTH_SHORT).show();
75045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                break;
76045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            }
77045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            return true;
78045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        }
79045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
80045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        public void onDestroyActionMode(ActionMode mode) {
81045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        }
82045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
83045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        public void onItemCheckedStateChanged(ActionMode mode,
84045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                int position, long id, boolean checked) {
85045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            final int checkedCount = getListView().getCheckedItemCount();
86045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            switch (checkedCount) {
87045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                case 0:
88045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    mode.setSubtitle(null);
89045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    break;
90045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                case 1:
91045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    mode.setSubtitle("One item selected");
92045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    break;
93045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                default:
94045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    mode.setSubtitle("" + checkedCount + " items selected");
95045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne                    break;
96045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne            }
97045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne        }
98045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne
99045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne    }
100045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne}
101