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

Commit 47704787 authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Merge "DO NOT MERGE Perform disk operations in background thread" into cw-e-dev

am: ead5ace8

* commit 'ead5ace8':
  DO NOT MERGE Perform disk operations in background thread
parents 3af29778 ead5ace8
Loading
Loading
Loading
Loading
+26 −8
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.telecom;

import android.net.Uri;
import android.os.AsyncTask;
import android.telecom.PhoneAccount;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
@@ -217,8 +218,26 @@ public class Log {
    private static final LinkedBlockingQueue<CallEventRecord> mCallEventRecords =
            new LinkedBlockingQueue<CallEventRecord>(MAX_CALLS_TO_CACHE);

    private static MessageDigest sMessageDigest;

    private Log() {}

    public static void initMd5Sum() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            public Void doInBackground(Void... args) {
                MessageDigest md;
                try {
                    md = MessageDigest.getInstance("SHA-1");
                } catch (NoSuchAlgorithmException e) {
                    md = null;
                }
                sMessageDigest = md;
                return null;
            }
        }.execute();
    }

    @VisibleForTesting
    public static void setTag(String tag) {
        TAG = tag;
@@ -396,15 +415,14 @@ public class Log {
    }

    private static String secureHash(byte[] input) {
        MessageDigest messageDigest;
        try {
            messageDigest = MessageDigest.getInstance("SHA-1");
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        messageDigest.update(input);
        byte[] result = messageDigest.digest();
        if (sMessageDigest != null) {
            sMessageDigest.reset();
            sMessageDigest.update(input);
            byte[] result = sMessageDigest.digest();
            return encodeHex(result);
        } else {
            return "Uninitialized SHA1";
        }
    }

    private static String encodeHex(byte[] bytes) {
+29 −16
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.PersistableBundle;
import android.os.Process;
@@ -133,6 +134,9 @@ public final class PhoneAccountRegistrar {
    private final SubscriptionManager mSubscriptionManager;
    private State mState;
    private UserHandle mCurrentUserHandle;
    private interface PhoneAccountRegistrarWriteLock {}
    private final PhoneAccountRegistrarWriteLock mWriteLock =
            new PhoneAccountRegistrarWriteLock() {};

    @VisibleForTesting
    public PhoneAccountRegistrar(Context context) {
@@ -864,26 +868,35 @@ public final class PhoneAccountRegistrar {
    // State management
    //

    private void write() {
        final FileOutputStream os;
    private class AsyncXmlWriter extends AsyncTask<ByteArrayOutputStream, Void, Void> {
        @Override
        public Void doInBackground(ByteArrayOutputStream... args) {
            final ByteArrayOutputStream buffer = args[0];
            FileOutputStream fileOutput = null;
            try {
            os = mAtomicFile.startWrite();
            boolean success = false;
                synchronized (mWriteLock) {
                    fileOutput = mAtomicFile.startWrite();
                    buffer.writeTo(fileOutput);
                    mAtomicFile.finishWrite(fileOutput);
                }
            } catch (IOException e) {
                Log.e(this, e, "Writing state to XML file");
                mAtomicFile.failWrite(fileOutput);
            }
            return null;
        }
    }

    private void write() {
        try {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            XmlSerializer serializer = new FastXmlSerializer();
                serializer.setOutput(new BufferedOutputStream(os), "utf-8");
            serializer.setOutput(os, "utf-8");
            writeToXml(mState, serializer, mContext);
            serializer.flush();
                success = true;
            } finally {
                if (success) {
                    mAtomicFile.finishWrite(os);
                } else {
                    mAtomicFile.failWrite(os);
                }
            }
            new AsyncXmlWriter().execute(os);
        } catch (IOException e) {
            Log.e(this, e, "Writing state to XML file");
            Log.e(this, e, "Writing state to XML buffer");
        }
    }

+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ public final class TelecomSystem {
            ProximitySensorManagerFactory proximitySensorManagerFactory,
            InCallWakeLockControllerFactory inCallWakeLockControllerFactory) {
        mContext = context.getApplicationContext();
        Log.initMd5Sum();

        mMissedCallNotifier = missedCallNotifier;
        mPhoneAccountRegistrar = new PhoneAccountRegistrar(mContext);