diff options
Diffstat (limited to 'src/com/android/dreams/phototable/FlipperDreamSettings.java')
-rw-r--r-- | src/com/android/dreams/phototable/FlipperDreamSettings.java | 92 |
1 files changed, 81 insertions, 11 deletions
diff --git a/src/com/android/dreams/phototable/FlipperDreamSettings.java b/src/com/android/dreams/phototable/FlipperDreamSettings.java index 1252846..464029e 100644 --- a/src/com/android/dreams/phototable/FlipperDreamSettings.java +++ b/src/com/android/dreams/phototable/FlipperDreamSettings.java @@ -15,12 +15,16 @@ */ package com.android.dreams.phototable; -import android.content.SharedPreferences; import android.app.ListActivity; +import android.content.SharedPreferences; +import android.database.DataSetObserver; import android.os.AsyncTask; +import android.os.AsyncTask.Status; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; -import android.widget.ListAdapter; import java.util.LinkedList; @@ -28,22 +32,38 @@ import java.util.LinkedList; * Settings panel for photo flipping dream. */ public class FlipperDreamSettings extends ListActivity { + @SuppressWarnings("unused") private static final String TAG = "FlipperDreamSettings"; public static final String PREFS_NAME = FlipperDream.TAG; + protected SharedPreferences mSettings; + private PhotoSourcePlexor mPhotoSource; - private ListAdapter mAdapter; - private SharedPreferences mSettings; + private SectionedAlbumDataAdapter mAdapter; + private MenuItem mSelectAll; + private AsyncTask<Void, Void, Void> mLoadingTask; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); - mSettings = getSharedPreferences(PREFS_NAME, 0); + init(); + } + + @Override + protected void onResume(){ + super.onResume(); + init(); + } + + protected void init() { mPhotoSource = new PhotoSourcePlexor(this, mSettings); setContentView(R.layout.settingslist); - - new AsyncTask<Void, Void, Void>() { + if (mLoadingTask != null && mLoadingTask.getStatus() != Status.FINISHED) { + mLoadingTask.cancel(true); + } + showApology(false); + mLoadingTask = new AsyncTask<Void, Void, Void>() { @Override public Void doInBackground(Void... unused) { mAdapter = new SectionedAlbumDataAdapter(FlipperDreamSettings.this, @@ -56,11 +76,61 @@ public class FlipperDreamSettings extends ListActivity { @Override public void onPostExecute(Void unused) { + mAdapter.registerDataSetObserver(new DataSetObserver () { + @Override + public void onChanged() { + updateActionItem(); + } + @Override + public void onInvalidated() { + updateActionItem(); + } + }); setListAdapter(mAdapter); - if (mAdapter.getCount() == 0) { - findViewById(android.R.id.empty).setVisibility(View.GONE); - } + getListView().setItemsCanFocus(true); + updateActionItem(); + showApology(mAdapter.getCount() == 0); } - }.execute(); + }; + mLoadingTask.execute(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.photodream_settings_menu, menu); + mSelectAll = menu.findItem(R.id.photodream_menu_all); + updateActionItem(); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.photodream_menu_all: + mAdapter.selectAll(!mAdapter.areAllSelected()); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private void showApology(boolean apologize) { + View empty = findViewById(R.id.spinner); + View sorry = findViewById(R.id.sorry); + if (empty != null && sorry != null) { + empty.setVisibility(apologize ? View.GONE : View.VISIBLE); + sorry.setVisibility(apologize ? View.VISIBLE : View.GONE); + } + } + + private void updateActionItem() { + if (mAdapter != null && mSelectAll != null) { + if (mAdapter.areAllSelected()) { + mSelectAll.setTitle(R.string.photodream_select_none); + } else { + mSelectAll.setTitle(R.string.photodream_select_all); + } + } } } |