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