1d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren/*
2d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * Copyright (C) 2012 The Android Open Source Project
3d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren *
4d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * Licensed under the Apache License, Version 2.0 (the "License");
5d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * you may not use this file except in compliance with the License.
6d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * You may obtain a copy of the License at
7d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren *
8d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren *      http://www.apache.org/licenses/LICENSE-2.0
9d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren *
10d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * Unless required by applicable law or agreed to in writing, software
11d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * distributed under the License is distributed on an "AS IS" BASIS,
12d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * See the License for the specific language governing permissions and
14d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * limitations under the License.
15d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren */
16d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenpackage com.android.dreams.phototable;
17d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
1888d80f4471c900628e2cb6eef23029b99af48e09Chris Wrenimport android.app.ListActivity;
19d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenimport android.content.SharedPreferences;
202ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wrenimport android.database.DataSetObserver;
21d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wrenimport android.os.AsyncTask;
22ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wrenimport android.os.AsyncTask.Status;
23d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenimport android.os.Bundle;
242ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wrenimport android.view.Menu;
252ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wrenimport android.view.MenuInflater;
262ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wrenimport android.view.MenuItem;
27146ce64b748e2393e80174240624c2e9f2b61c41Chris Wrenimport android.view.View;
28d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
29d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenimport java.util.LinkedList;
30d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
31d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren/**
32d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren * Settings panel for photo flipping dream.
33d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren */
34d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenpublic class FlipperDreamSettings extends ListActivity {
3588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    @SuppressWarnings("unused")
36d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    private static final String TAG = "FlipperDreamSettings";
37d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    public static final String PREFS_NAME = FlipperDream.TAG;
38d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
392ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    protected SharedPreferences mSettings;
402ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren
41d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    private PhotoSourcePlexor mPhotoSource;
422ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    private SectionedAlbumDataAdapter mAdapter;
432ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    private MenuItem mSelectAll;
44ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    private AsyncTask<Void, Void, Void> mLoadingTask;
45d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
46d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    @Override
47d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    protected void onCreate(Bundle savedInstanceState){
48d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        super.onCreate(savedInstanceState);
49d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        mSettings = getSharedPreferences(PREFS_NAME, 0);
502ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        init();
512ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    }
522ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren
53ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    @Override
54ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    protected void onResume(){
55ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        super.onResume();
56ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        init();
57ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    }
58ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren
592ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    protected void init() {
60d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        mPhotoSource = new PhotoSourcePlexor(this, mSettings);
61b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        setContentView(R.layout.settingslist);
62ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        if (mLoadingTask != null && mLoadingTask.getStatus() != Status.FINISHED) {
63ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren            mLoadingTask.cancel(true);
64ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        }
65ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        showApology(false);
66ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        mLoadingTask = new AsyncTask<Void, Void, Void>() {
67d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren            @Override
68d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren            public Void doInBackground(Void... unused) {
69d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                mAdapter = new SectionedAlbumDataAdapter(FlipperDreamSettings.this,
70d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                        mSettings,
71d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                        R.layout.header,
72d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                        R.layout.album,
73d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                        new LinkedList<PhotoSource.AlbumData>(mPhotoSource.findAlbums()));
74d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren                return null;
75d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren            }
76d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren
77d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren           @Override
78d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren           public void onPostExecute(Void unused) {
792ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren               mAdapter.registerDataSetObserver(new DataSetObserver () {
802ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       @Override
812ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       public void onChanged() {
822ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                           updateActionItem();
832ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       }
842ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       @Override
852ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       public void onInvalidated() {
862ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                           updateActionItem();
872ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                       }
882ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                   });
89d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren               setListAdapter(mAdapter);
907ec52545cbf2f26dac8e5e0105147075c57956acChris Wren               getListView().setItemsCanFocus(true);
912ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren               updateActionItem();
92ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren               showApology(mAdapter.getCount() == 0);
93d9b659aa5dfa4a3af96582ae49ba9ae145854a84Chris Wren           }
94ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        };
95ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        mLoadingTask.execute();
96d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    }
972ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren
982ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    @Override
992ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    public boolean onCreateOptionsMenu(Menu menu) {
1002ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        MenuInflater inflater = getMenuInflater();
1012ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        inflater.inflate(R.menu.photodream_settings_menu, menu);
1022ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        mSelectAll = menu.findItem(R.id.photodream_menu_all);
1032ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        updateActionItem();
1042ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        return true;
1052ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    }
1062ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren
1072ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    @Override
1082ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    public boolean onOptionsItemSelected(MenuItem item) {
1092ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        switch (item.getItemId()) {
1102ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        case R.id.photodream_menu_all:
11117bd2d15dd9630dabf8defb353fdda8ba379f528Chris Wren            if (mAdapter != null) {
11217bd2d15dd9630dabf8defb353fdda8ba379f528Chris Wren                mAdapter.selectAll(!mAdapter.areAllSelected());
11317bd2d15dd9630dabf8defb353fdda8ba379f528Chris Wren            }
1142ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren            return true;
1152ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        default:
1162ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren            return super.onOptionsItemSelected(item);
1172ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        }
1182ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    }
1192ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren
120ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    private void showApology(boolean apologize) {
121ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        View empty = findViewById(R.id.spinner);
122ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        View sorry = findViewById(R.id.sorry);
123ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        if (empty != null && sorry != null) {
124ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren            empty.setVisibility(apologize ? View.GONE : View.VISIBLE);
125ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren            sorry.setVisibility(apologize ? View.VISIBLE : View.GONE);
126ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren        }
127ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren    }
128ab617db46883ffbb9ee77dacd54613bdc026cc2dChris Wren
1292ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    private void updateActionItem() {
1302ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        if (mAdapter != null && mSelectAll != null) {
1312ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren            if (mAdapter.areAllSelected()) {
1322ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                mSelectAll.setTitle(R.string.photodream_select_none);
1332ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren            } else {
1342ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren                mSelectAll.setTitle(R.string.photodream_select_all);
1352ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren            }
1362ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren        }
1372ccf92a79a2749a6fdaf5c1242f5d72de48ef111Chris Wren    }
138d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren}
139