Added ArrayAdapterCompat so addAll doesn't need to be wrapped in a guard condition.

This commit is contained in:
Peter Serwylo 2014-02-11 10:12:29 +11:00
parent ef784dffa8
commit 7ca6db9555
2 changed files with 59 additions and 26 deletions

View File

@ -0,0 +1,22 @@
package org.fdroid.fdroid.compat;
import android.annotation.TargetApi;
import android.os.Build;
import android.widget.ArrayAdapter;
import java.util.List;
public class ArrayAdapterCompat {
@TargetApi(11)
public static <T> void addAll(ArrayAdapter<T> adapter, List<T> list) {
if (Build.VERSION.SDK_INT >= 11) {
adapter.addAll(list);
} else {
for (T category : list) {
adapter.add(category);
}
}
}
}

View File

@ -3,7 +3,9 @@ package org.fdroid.fdroid.views.fragments;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -12,6 +14,7 @@ import android.view.ViewGroup;
import android.widget.*; import android.widget.*;
import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
import org.fdroid.fdroid.compat.ArrayAdapterCompat;
import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.views.AppListAdapter; import org.fdroid.fdroid.views.AppListAdapter;
import org.fdroid.fdroid.views.AvailableAppListAdapter; import org.fdroid.fdroid.views.AvailableAppListAdapter;
@ -43,24 +46,15 @@ public class AvailableAppsFragment extends AppListFragment implements
return adapter; return adapter;
} }
private Spinner createCategorySpinner() { private class CategoryObserver extends ContentObserver {
final List<String> categories = AppProvider.Helper.categories(getActivity()); private ArrayAdapter adapter;
Spinner spinner = new Spinner(getActivity()); public CategoryObserver(ArrayAdapter<String> adapter) {
// Giving it an ID lets the default save/restore state super(null);
// functionality do its stuff. this.adapter = adapter;
spinner.setId(R.id.categorySpinner); }
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_spinner_item, categories);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
getActivity().getContentResolver().registerContentObserver(
AppProvider.getContentUri(), false,
new ContentObserver(null) {
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange) {
// Wanted to just do this update here, but android tells // Wanted to just do this update here, but android tells
@ -70,8 +64,8 @@ public class AvailableAppsFragment extends AppListFragment implements
@Override @Override
public void run() { public void run() {
adapter.clear(); adapter.clear();
adapter.addAll(AppProvider.Helper.categories(getActivity())); List<String> catList = AppProvider.Helper.categories(getActivity());
// adapter.notifyDataSetChanged(); ArrayAdapterCompat.addAll(adapter, catList);
} }
}); });
} }
@ -81,7 +75,24 @@ public class AvailableAppsFragment extends AppListFragment implements
onChange(selfChange); onChange(selfChange);
} }
} }
);
private Spinner createCategorySpinner() {
final List<String> categories = AppProvider.Helper.categories(getActivity());
Spinner spinner = new Spinner(getActivity());
// Giving it an ID lets the default save/restore state
// functionality do its stuff.
spinner.setId(R.id.categorySpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_spinner_item, categories);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
getActivity().getContentResolver().registerContentObserver(
AppProvider.getContentUri(), false, new CategoryObserver(adapter));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override @Override