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

Commit 502836b6 authored by Fyodor Kupolov's avatar Fyodor Kupolov Committed by Android (Google) Code Review
Browse files

Merge "Extracted persistence layer into a separate class"

parents 8861146e 1ce0161e
Loading
Loading
Loading
Loading
+40 −57
Original line number Diff line number Diff line
@@ -29,11 +29,14 @@ import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.util.PackageUtils;
import android.util.Pair;
import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageMonitor;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.XmlUtils;
import com.android.server.accounts.AccountsDb.DeDatabaseHelper;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -59,14 +62,6 @@ public final class AccountManagerBackupHelper {
    private static final String ATTR_PACKAGE = "package";
    private static final String ATTR_DIGEST = "digest";

    private static final String ACCOUNT_ACCESS_GRANTS = ""
            + "SELECT " + AccountManagerService.ACCOUNTS_NAME + ", "
            + AccountManagerService.GRANTS_GRANTEE_UID
            + " FROM " + AccountManagerService.TABLE_ACCOUNTS
            + ", " + AccountManagerService.TABLE_GRANTS
            + " WHERE " + AccountManagerService.GRANTS_ACCOUNTS_ID
            + "=" + AccountManagerService.ACCOUNTS_ID;

    private final Object mLock = new Object();

    private final AccountManagerService mAccountManagerService;
@@ -148,31 +143,22 @@ public final class AccountManagerBackupHelper {
                .getUserAccounts(userId);
        synchronized (accounts.cacheLock) {
            SQLiteDatabase db = accounts.openHelper.getReadableDatabase();
            try (
                Cursor cursor = db.rawQuery(ACCOUNT_ACCESS_GRANTS, null);
            ) {
                if (cursor == null || !cursor.moveToFirst()) {
            List<Pair<String, Integer>> allAccountGrants = DeDatabaseHelper.findAllAccountGrants(
                    db);
            if (allAccountGrants.isEmpty()) {
                return null;
            }

                final int nameColumnIdx = cursor.getColumnIndex(
                        AccountManagerService.ACCOUNTS_NAME);
                final int uidColumnIdx = cursor.getColumnIndex(
                        AccountManagerService.GRANTS_GRANTEE_UID);

                ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
            try {
                ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
                final XmlSerializer serializer = new FastXmlSerializer();
                serializer.setOutput(dataStream, StandardCharsets.UTF_8.name());
                serializer.startDocument(null, true);
                serializer.startTag(null, TAG_PERMISSIONS);

                    PackageManager packageManager = mAccountManagerService.mContext
                            .getPackageManager();

                    do {
                        final String accountName = cursor.getString(nameColumnIdx);
                        final int uid = cursor.getInt(uidColumnIdx);
                PackageManager packageManager = mAccountManagerService.mContext.getPackageManager();
                for (Pair<String, Integer> grant : allAccountGrants) {
                    final String accountName = grant.first;
                    final int uid = grant.second;

                    final String[] packageNames = packageManager.getPackagesForUid(uid);
                    if (packageNames == null) {
@@ -191,18 +177,15 @@ public final class AccountManagerBackupHelper {
                            serializer.endTag(null, TAG_PERMISSION);
                        }
                    }
                    } while (cursor.moveToNext());

                }
                serializer.endTag(null, TAG_PERMISSIONS);
                serializer.endDocument();
                serializer.flush();
                return dataStream.toByteArray();
            } catch (IOException e) {
                Log.e(TAG, "Error backing up account access grants", e);
                return null;
            }

                return dataStream.toByteArray();
            }
        }
    }

+118 −1171

File changed.

Preview size limit exceeded, changes collapsed.

+1174 −0

File added.

Preview size limit exceeded, changes collapsed.