Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93860b29 authored by daqi's avatar daqi Committed by android-build-merger
Browse files

Merge "Fix TrustedCredentialsSettings NPE"

am: c9e532f5

Change-Id: I2ce8ea95abbbd1d522be4897069d4515354d3b14
parents 8f42d1a4 c9e532f5
Loading
Loading
Loading
Loading
+86 −76
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.widget.Switch;
import android.widget.TabHost;
import android.widget.TextView;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.widget.LockPatternUtils;
@@ -152,6 +153,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
    private int mConfirmingCredentialUser;
    private IntConsumer mConfirmingCredentialListener;
    private Set<AdapterData.AliasLoader> mAliasLoaders = new ArraySet<AdapterData.AliasLoader>(2);
    @GuardedBy("mKeyChainConnectionByProfileId")
    private final SparseArray<KeyChainConnection>
            mKeyChainConnectionByProfileId = new SparseArray<KeyChainConnection>();

@@ -256,12 +258,14 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
    }

    private void closeKeyChainConnections() {
        synchronized (mKeyChainConnectionByProfileId) {
            final int n = mKeyChainConnectionByProfileId.size();
            for (int i = 0; i < n; ++i) {
                mKeyChainConnectionByProfileId.valueAt(i).close();
            }
            mKeyChainConnectionByProfileId.clear();
        }
    }

    private void addTab(Tab tab) {
        TabHost.TabSpec systemSpec = mTabHost.newTabSpec(tab.mTag)
@@ -684,6 +688,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
                SparseArray<List<CertHolder>> certHoldersByProfile =
                        new SparseArray<List<CertHolder>>();
                try {
                    synchronized(mKeyChainConnectionByProfileId) {
                        List<UserHandle> profiles = mUserManager.getUserProfiles();
                        final int n = profiles.size();
                        // First we get all aliases for all profiles in order to show progress
@@ -740,6 +745,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
                            certHoldersByProfile.put(profileId, certHolders);
                        }
                        return certHoldersByProfile;
                    }
                } catch (RemoteException e) {
                    Log.e(TAG, "Remote exception while loading aliases.", e);
                    return new SparseArray<List<CertHolder>>();
@@ -936,6 +942,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
    public List<X509Certificate> getX509CertsFromCertHolder(CertHolder certHolder) {
        List<X509Certificate> certificates = null;
        try {
            synchronized (mKeyChainConnectionByProfileId) {
                KeyChainConnection keyChainConnection = mKeyChainConnectionByProfileId.get(
                        certHolder.mProfileId);
                IKeyChainService service = keyChainConnection.getService();
@@ -947,6 +954,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
                    X509Certificate certificate = KeyChain.toCertificate(encodedCertificate);
                    certificates.add(certificate);
                }
            }
        } catch (RemoteException ex) {
            Log.e(TAG, "RemoteException while retrieving certificate chain for root "
                    + certHolder.mAlias, ex);
@@ -985,6 +993,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
        @Override
        protected Boolean doInBackground(Void... params) {
            try {
                synchronized (mKeyChainConnectionByProfileId) {
                    KeyChainConnection keyChainConnection = mKeyChainConnectionByProfileId.get(
                            mCertHolder.mProfileId);
                    IKeyChainService service = keyChainConnection.getService();
@@ -995,6 +1004,7 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
                    } else {
                        return service.deleteCaCertificate(mCertHolder.mAlias);
                    }
                }
            } catch (CertificateEncodingException | SecurityException | IllegalStateException
                    | RemoteException e) {
                Log.w(TAG, "Error while toggling alias " + mCertHolder.mAlias, e);