From: Tobias Brunner Date: Tue, 14 Aug 2012 07:36:56 +0000 (+0200) Subject: Added a ListFragment that lists trusted certificates (loaded via a custom Loader) X-Git-Tag: 5.0.1~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=caf85c872f697235a2908d8c32096626297611a2;p=thirdparty%2Fstrongswan.git Added a ListFragment that lists trusted certificates (loaded via a custom Loader) --- diff --git a/src/frontends/android/res/values-de/strings.xml b/src/frontends/android/res/values-de/strings.xml index bc426e6ea8..ce5cb6adbc 100644 --- a/src/frontends/android/res/values-de/strings.xml +++ b/src/frontends/android/res/values-de/strings.xml @@ -57,6 +57,9 @@ Kein CA-Zertifikat ausgewählt Bitte wählen Sie eines aus oder aktivieren Sie Automatisch wählen + + Keine Zertifikate + Status: Profil: diff --git a/src/frontends/android/res/values/strings.xml b/src/frontends/android/res/values/strings.xml index 855914015a..591bfff5ef 100644 --- a/src/frontends/android/res/values/strings.xml +++ b/src/frontends/android/res/values/strings.xml @@ -57,6 +57,9 @@ No CA certificate selected Please select one or activate Select automatically + + No certificates + Status: Profile: diff --git a/src/frontends/android/src/org/strongswan/android/ui/TrustedCertificateListFragment.java b/src/frontends/android/src/org/strongswan/android/ui/TrustedCertificateListFragment.java new file mode 100644 index 0000000000..a64a927551 --- /dev/null +++ b/src/frontends/android/src/org/strongswan/android/ui/TrustedCertificateListFragment.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2012 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See . + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +package org.strongswan.android.ui; + +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Hashtable; +import java.util.List; +import java.util.Map.Entry; + +import org.strongswan.android.R; +import org.strongswan.android.data.TrustedCertificateEntry; +import org.strongswan.android.logic.TrustedCertificateManager; +import org.strongswan.android.ui.adapter.TrustedCertificateAdapter; + +import android.app.ListFragment; +import android.app.LoaderManager.LoaderCallbacks; +import android.content.AsyncTaskLoader; +import android.content.Context; +import android.content.Loader; +import android.os.Bundle; + +public class TrustedCertificateListFragment extends ListFragment implements LoaderCallbacks> +{ + private TrustedCertificateAdapter mAdapter; + private boolean mUser; + + @Override + public void onActivityCreated(Bundle savedInstanceState) + { + super.onActivityCreated(savedInstanceState); + + setEmptyText(getString(R.string.no_certificates)); + + mAdapter = new TrustedCertificateAdapter(getActivity()); + setListAdapter(mAdapter); + + setListShown(false); + + /* non empty arguments mean we list user certificate */ + mUser = getArguments() != null; + + getLoaderManager().initLoader(0, null, this); + } + + @Override + public void onDestroy() + { + super.onDestroy(); + } + + @Override + public Loader> onCreateLoader(int id, Bundle args) + { /* we don't need the id as we have only one loader */ + return new CertificateListLoader(getActivity(), mUser); + } + + @Override + public void onLoadFinished(Loader> loader, List data) + { + mAdapter.setData(data); + + if (isResumed()) + { + setListShown(true); + } + else + { + setListShownNoAnimation(true); + } + } + + @Override + public void onLoaderReset(Loader> loader) + { + mAdapter.setData(null); + } + + public static class CertificateListLoader extends AsyncTaskLoader> + { + private List mData; + private final boolean mUser; + + public CertificateListLoader(Context context, boolean user) + { + super(context); + mUser = user; + } + + @Override + public List loadInBackground() + { + TrustedCertificateManager certman = TrustedCertificateManager.getInstance().load(); + Hashtable certificates; + List selected; + + certificates = mUser ? certman.getUserCACertificates() : certman.getSystemCACertificates(); + selected = new ArrayList(); + for (Entry entry : certificates.entrySet()) + { + selected.add(new TrustedCertificateEntry(entry.getKey(), entry.getValue())); + } + Collections.sort(selected); + return selected; + } + + @Override + protected void onStartLoading() + { + if (mData != null) + { /* if we have data ready, deliver it directly */ + deliverResult(mData); + return; + } + forceLoad(); + } + + @Override + public void deliverResult(List data) + { + if (isReset()) + { + return; + } + mData = data; + if (isStarted()) + { /* if it is started we deliver the data directly, + * otherwise this is handled in onStartLoading */ + super.deliverResult(data); + } + } + + @Override + protected void onReset() + { + mData = null; + } + } +}