package org.fdroid.fdroid.views; import android.content.Context; import android.database.Cursor; import android.os.Build; import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.TextView; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.Repo; public class RepoAdapter extends CursorAdapter { public interface EnabledListener { void onSetEnabled(Repo repo, boolean isEnabled); } private final LayoutInflater inflater; private EnabledListener enabledListener; public static RepoAdapter create(Context context, Cursor cursor, int flags) { if (Build.VERSION.SDK_INT >= 11) { return new RepoAdapter(context, cursor, flags); } return new RepoAdapter(context, cursor); } private RepoAdapter(Context context, Cursor c, int flags) { super(context, c, flags); inflater = LayoutInflater.from(context); } public RepoAdapter(Context context, Cursor c, boolean autoRequery) { super(context, c, autoRequery); inflater = LayoutInflater.from(context); } @SuppressWarnings("deprecation") private RepoAdapter(Context context, Cursor c) { super(context, c); inflater = LayoutInflater.from(context); } public void setEnabledListener(EnabledListener listener) { enabledListener = listener; } @Override public boolean hasStableIds() { return true; } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = inflater.inflate(R.layout.repo_item, parent, false); setupView(cursor, view, (CompoundButton) view.findViewById(R.id.repo_switch)); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { CompoundButton switchView = (CompoundButton) view.findViewById(R.id.repo_switch); // Remove old listener (because we are reusing this view, we don't want // to invoke the listener for the last repo to use it - particularly // because we are potentially about to change the checked status // which would in turn invoke this listener.... switchView.setOnCheckedChangeListener(null); setupView(cursor, view, switchView); } private void setupView(Cursor cursor, View view, CompoundButton switchView) { final Repo repo = new Repo(cursor); switchView.setChecked(repo.inuse); // Add this listener *after* setting the checked status, so we don't // invoke the listener while setting up the view... switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (enabledListener != null) { enabledListener.onSetEnabled(repo, isChecked); } } }); TextView nameView = (TextView) view.findViewById(R.id.repo_name); nameView.setText(repo.getName()); View unsignedView = view.findViewById(R.id.repo_unsigned); View unverifiedView = view.findViewById(R.id.repo_unverified); if (repo.isSigned()) { unsignedView.setVisibility(View.GONE); unverifiedView.setVisibility(View.GONE); } else if (repo.isSignedButUnverified()) { unsignedView.setVisibility(View.GONE); unverifiedView.setVisibility(View.VISIBLE); } else { unsignedView.setVisibility(View.VISIBLE); unverifiedView.setVisibility(View.GONE); } } }