From 73d6e1de7c3eccc24d4f72da38f303c3ef3de8ed Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 24 Jul 2014 18:32:07 +0200 Subject: [PATCH] Added progress bar on list items while moving certificate. --- app/app.iml | 1 + .../nutomic/zertman/CertificateAdapter.java | 20 ++++++++++++++----- .../nutomic/zertman/CertificateManager.java | 15 ++++++++++++++ .../main/res/layout/certificate_list_item.xml | 11 ++++++++-- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/app/app.iml b/app/app.iml index ef32e5b..65fa877 100644 --- a/app/app.iml +++ b/app/app.iml @@ -58,6 +58,7 @@ + diff --git a/app/src/main/java/com/nutomic/zertman/CertificateAdapter.java b/app/src/main/java/com/nutomic/zertman/CertificateAdapter.java index cd981de..77b4026 100644 --- a/app/src/main/java/com/nutomic/zertman/CertificateAdapter.java +++ b/app/src/main/java/com/nutomic/zertman/CertificateAdapter.java @@ -8,6 +8,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.ProgressBar; import android.widget.TextView; import java.util.List; @@ -37,16 +38,25 @@ public class CertificateAdapter extends ArrayAdapter implements convertView = inflater.inflate(R.layout.certificate_list_item, parent, false); } + TextView title = (TextView) convertView.findViewById(R.id.title); + Button button = (Button) convertView.findViewById(R.id.button); + ProgressBar loading = (ProgressBar) convertView.findViewById(R.id.loading); + TextView summary = (TextView) convertView.findViewById(R.id.summary); + + button.setVisibility(View.VISIBLE); + loading.setVisibility(View.INVISIBLE); + final Certificate cert = getItem(position); // NOTE: This should be called asynchronously. Pair desc = CertificateManager.getDescription(cert); - TextView title = (TextView) convertView.findViewById(R.id.title); title.setText(desc.first); - TextView summary = (TextView) convertView.findViewById(R.id.summary); summary.setText(desc.second); - Button button = (Button) convertView.findViewById(R.id.button); - int colorRes; - if (cert.isSystemCertificate()) { + int colorRes = android.R.color.primary_text_light; + if (mCertificateManager.isMovingCertificate(cert)) { + button.setVisibility(View.INVISIBLE); + loading.setVisibility(View.VISIBLE); + } + else if (cert.isSystemCertificate()) { button.setText(R.string.delete); button.setOnClickListener(new View.OnClickListener() { @Override diff --git a/app/src/main/java/com/nutomic/zertman/CertificateManager.java b/app/src/main/java/com/nutomic/zertman/CertificateManager.java index 4add340..4bfcd65 100644 --- a/app/src/main/java/com/nutomic/zertman/CertificateManager.java +++ b/app/src/main/java/com/nutomic/zertman/CertificateManager.java @@ -13,6 +13,7 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import eu.chainfire.libsuperuser.Shell; @@ -40,6 +41,11 @@ public class CertificateManager { ReadWrite } + /** + * Contains all certificates that are currently being moved from user to system storage. + */ + private LinkedList mCurrentlyMoving = new LinkedList(); + private OnCertificateChangedListener mOnCertificateChangedListener; public void setOnCertificateChangedListener(OnCertificateChangedListener listener) { @@ -68,6 +74,10 @@ public class CertificateManager { * @return The updated certificate (located in system storage). */ public Certificate moveCertificateToSystem(Certificate certificate) { + mCurrentlyMoving.add(certificate); + if (mOnCertificateChangedListener != null) { + mOnCertificateChangedListener.onCertificateChanged(); + } remountSystem(Mode.ReadWrite); // NOTE: Using mv gives error: "failed on *file* - Cross-device link". run("cp " + USER_CERTIFICATES_DIR + "/" + certificate.getFile().getName() + @@ -75,6 +85,7 @@ public class CertificateManager { run("chmod 644 " + SYSTEM_CERTIFICATES_DIR + "/" + certificate.getFile().getName()); remountSystem(Mode.ReadOnly); deleteCertificate(certificate); + mCurrentlyMoving.remove(certificate); Certificate newCert = new Certificate(certificate.getFile().getName(), true); if (mOnCertificateChangedListener != null) { mOnCertificateChangedListener.onCertificateChanged(); @@ -171,4 +182,8 @@ public class CertificateManager { return new Pair(primary, secondary); } + public boolean isMovingCertificate(Certificate cert) { + return mCurrentlyMoving.contains(cert); + } + } diff --git a/app/src/main/res/layout/certificate_list_item.xml b/app/src/main/res/layout/certificate_list_item.xml index d9f0a35..776ad59 100644 --- a/app/src/main/res/layout/certificate_list_item.xml +++ b/app/src/main/res/layout/certificate_list_item.xml @@ -13,7 +13,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dip" - android:textAppearance="?android:attr/textAppearanceListItem"/> + android:textAppearance="?android:attr/textAppearanceListItem" />