1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.dreams.phototable; 17 18 import android.app.ListActivity; 19 import android.content.SharedPreferences; 20 import android.database.DataSetObserver; 21 import android.os.AsyncTask; 22 import android.os.AsyncTask.Status; 23 import android.os.Bundle; 24 import android.view.Menu; 25 import android.view.MenuInflater; 26 import android.view.MenuItem; 27 import android.view.View; 28 29 import java.util.LinkedList; 30 31 /** 32 * Settings panel for photo flipping dream. 33 */ 34 public class FlipperDreamSettings extends ListActivity { 35 @SuppressWarnings("unused") 36 private static final String TAG = "FlipperDreamSettings"; 37 public static final String PREFS_NAME = FlipperDream.TAG; 38 39 protected SharedPreferences mSettings; 40 41 private PhotoSourcePlexor mPhotoSource; 42 private SectionedAlbumDataAdapter mAdapter; 43 private MenuItem mSelectAll; 44 private AsyncTask<Void, Void, Void> mLoadingTask; 45 46 @Override 47 protected void onCreate(Bundle savedInstanceState){ 48 super.onCreate(savedInstanceState); 49 mSettings = getSharedPreferences(PREFS_NAME, 0); 50 init(); 51 } 52 53 @Override 54 protected void onResume(){ 55 super.onResume(); 56 init(); 57 } 58 59 protected void init() { 60 mPhotoSource = new PhotoSourcePlexor(this, mSettings); 61 setContentView(R.layout.settingslist); 62 if (mLoadingTask != null && mLoadingTask.getStatus() != Status.FINISHED) { 63 mLoadingTask.cancel(true); 64 } 65 showApology(false); 66 mLoadingTask = new AsyncTask<Void, Void, Void>() { 67 @Override 68 public Void doInBackground(Void... unused) { 69 mAdapter = new SectionedAlbumDataAdapter(FlipperDreamSettings.this, 70 mSettings, 71 R.layout.header, 72 R.layout.album, 73 new LinkedList<PhotoSource.AlbumData>(mPhotoSource.findAlbums())); 74 return null; 75 } 76 77 @Override 78 public void onPostExecute(Void unused) { 79 mAdapter.registerDataSetObserver(new DataSetObserver () { 80 @Override 81 public void onChanged() { 82 updateActionItem(); 83 } 84 @Override 85 public void onInvalidated() { 86 updateActionItem(); 87 } 88 }); 89 setListAdapter(mAdapter); 90 getListView().setItemsCanFocus(true); 91 updateActionItem(); 92 showApology(mAdapter.getCount() == 0); 93 } 94 }; 95 mLoadingTask.execute(); 96 } 97 98 @Override 99 public boolean onCreateOptionsMenu(Menu menu) { 100 MenuInflater inflater = getMenuInflater(); 101 inflater.inflate(R.menu.photodream_settings_menu, menu); 102 mSelectAll = menu.findItem(R.id.photodream_menu_all); 103 updateActionItem(); 104 return true; 105 } 106 107 @Override 108 public boolean onOptionsItemSelected(MenuItem item) { 109 switch (item.getItemId()) { 110 case R.id.photodream_menu_all: 111 mAdapter.selectAll(!mAdapter.areAllSelected()); 112 return true; 113 default: 114 return super.onOptionsItemSelected(item); 115 } 116 } 117 118 private void showApology(boolean apologize) { 119 View empty = findViewById(R.id.spinner); 120 View sorry = findViewById(R.id.sorry); 121 if (empty != null && sorry != null) { 122 empty.setVisibility(apologize ? View.GONE : View.VISIBLE); 123 sorry.setVisibility(apologize ? View.VISIBLE : View.GONE); 124 } 125 } 126 127 private void updateActionItem() { 128 if (mAdapter != null && mSelectAll != null) { 129 if (mAdapter.areAllSelected()) { 130 mSelectAll.setTitle(R.string.photodream_select_none); 131 } else { 132 mSelectAll.setTitle(R.string.photodream_select_all); 133 } 134 } 135 } 136 } 137