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

Commit 4ac9a3ca authored by Sunny Goyal's avatar Sunny Goyal Committed by Android (Google) Code Review
Browse files

Merge "Making all provider calls using content resolver." into ub-launcher3-master

parents 653fa678 d249748a
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ public class LauncherAppState {
    }

    LauncherModel setLauncher(Launcher launcher) {
        getLauncherProvider().setLauncherProviderChangeListener(launcher);
        sLauncherProvider.get().setLauncherProviderChangeListener(launcher);
        mModel.initialize(launcher);
        mAccessibilityDelegate = ((launcher != null) && Utilities.ATLEAST_LOLLIPOP) ?
            new LauncherAccessibilityDelegate(launcher) : null;
@@ -157,10 +157,6 @@ public class LauncherAppState {
        sLauncherProvider = new WeakReference<LauncherProvider>(provider);
    }

    public static LauncherProvider getLauncherProvider() {
        return sLauncherProvider.get();
    }

    public WidgetPreviewLoader getWidgetCache() {
        return mWidgetCache;
    }
+10 −5
Original line number Diff line number Diff line
@@ -73,7 +73,8 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper {
        }

        // Clear dB before restore
        LauncherAppState.getLauncherProvider().createEmptyDB();
        LauncherSettings.Settings.call(getContentResolver(),
                LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB);

        boolean hasData;
        try {
@@ -90,12 +91,14 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper {
        }

        if (hasData && mHelper.restoreSuccessful) {
            LauncherAppState.getLauncherProvider().clearFlagEmptyDbCreated();
            LauncherSettings.Settings.call(getContentResolver(),
                    LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG);
            LauncherClings.synchonouslyMarkFirstRunClingDismissed(this);

            // Rank was added in v4.
            if (mHelper.restoredBackupVersion <= 3) {
                LauncherAppState.getLauncherProvider().updateFolderItemsRank();
                LauncherSettings.Settings.call(getContentResolver(),
                        LauncherSettings.Settings.METHOD_UPDATE_FOLDER_ITEMS_RANK);
            }

            if (MigrateFromRestoreTask.ENABLED && mHelper.shouldAttemptWorkspaceMigration()) {
@@ -105,10 +108,12 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper {
                        mHelper.widgetSizes);
            }

            LauncherAppState.getLauncherProvider().convertShortcutsToLauncherActivities();
            LauncherSettings.Settings.call(getContentResolver(),
                    LauncherSettings.Settings.METHOD_CONVERT_SHORTCUTS_TO_ACTIVITIES);
        } else {
            if (VERBOSE) Log.v(TAG, "Nothing was restored, clearing DB");
            LauncherAppState.getLauncherProvider().createEmptyDB();
            LauncherSettings.Settings.call(getContentResolver(),
                    LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB);
        }
    }
}
+17 −7
Original line number Diff line number Diff line
@@ -481,7 +481,9 @@ public class LauncherModel extends BroadcastReceiver

        if (!found) {
            // Still no position found. Add a new screen to the end.
            screenId = LauncherAppState.getLauncherProvider().generateNewScreenId();
            screenId = LauncherSettings.Settings.call(context.getContentResolver(),
                    LauncherSettings.Settings.METHOD_NEW_SCREEN_ID)
                    .getLong(LauncherSettings.Settings.EXTRA_VALUE);

            // Save the screen id for binding in the workspace
            workspaceScreens.add(screenId);
@@ -990,7 +992,9 @@ public class LauncherModel extends BroadcastReceiver
        final ContentResolver cr = context.getContentResolver();
        item.onAddToDatabase(context, values);

        item.id = LauncherAppState.getLauncherProvider().generateNewItemId();
        item.id = LauncherSettings.Settings.call(cr, LauncherSettings.Settings.METHOD_NEW_ITEM_ID)
                .getLong(LauncherSettings.Settings.EXTRA_VALUE);

        values.put(LauncherSettings.Favorites._ID, item.id);

        final StackTraceElement[] stackTrace = new Throwable().getStackTrace();
@@ -1727,17 +1731,20 @@ public class LauncherModel extends BroadcastReceiver

            if ((mFlags & LOADER_FLAG_CLEAR_WORKSPACE) != 0) {
                Log.d(TAG, "loadWorkspace: resetting launcher database");
                LauncherAppState.getLauncherProvider().deleteDatabase();
                LauncherSettings.Settings.call(contentResolver,
                        LauncherSettings.Settings.METHOD_DELETE_DB);
            }

            if ((mFlags & LOADER_FLAG_MIGRATE_SHORTCUTS) != 0) {
                // append the user's Launcher2 shortcuts
                Log.d(TAG, "loadWorkspace: migrating from launcher2");
                LauncherAppState.getLauncherProvider().migrateLauncher2Shortcuts();
                LauncherSettings.Settings.call(contentResolver,
                        LauncherSettings.Settings.METHOD_MIGRATE_LAUNCHER2_SHORTCUTS);
            } else {
                // Make sure the default workspace is loaded
                Log.d(TAG, "loadWorkspace: loading default favorites");
                LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary();
                LauncherSettings.Settings.call(contentResolver,
                        LauncherSettings.Settings.METHOD_LOAD_DEFAULT_FAVORITES);
            }

            synchronized (sBgLock) {
@@ -2232,8 +2239,11 @@ public class LauncherModel extends BroadcastReceiver
                    }

                    // Remove any empty folder
                    for (long folderId : LauncherAppState.getLauncherProvider()
                            .deleteEmptyFolders()) {
                    ArrayList<Long> deletedFolderIds = (ArrayList<Long>) LauncherSettings.Settings
                            .call(contentResolver,
                                    LauncherSettings.Settings.METHOD_DELETE_EMPTY_FOLDERS)
                            .getSerializable(LauncherSettings.Settings.EXTRA_VALUE);
                    for (long folderId : deletedFolderIds) {
                        sBgWorkspaceItems.remove(sBgFolders.get(folderId));
                        sBgFolders.remove(folderId);
                        sBgItemsIdMap.remove(folderId);
+51 −34
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

public class LauncherProvider extends ContentProvider {
    private static final String TAG = "LauncherProvider";
@@ -91,10 +90,6 @@ public class LauncherProvider extends ContentProvider {
        return true;
    }

    public boolean wasNewDbCreated() {
        return mOpenHelper.wasNewDbCreated();
    }

    public void setLauncherProviderChangeListener(LauncherProviderChangeListener listener) {
        mListener = listener;
        mOpenHelper.mListener = mListener;
@@ -271,6 +266,50 @@ public class LauncherProvider extends ContentProvider {
                result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, value);
                return result;
            }
            case LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG: {
                clearFlagEmptyDbCreated();
                return null;
            }
            case LauncherSettings.Settings.METHOD_DELETE_EMPTY_FOLDERS: {
                Bundle result = new Bundle();
                result.putSerializable(LauncherSettings.Settings.EXTRA_VALUE, deleteEmptyFolders());
                return result;
            }
            case LauncherSettings.Settings.METHOD_NEW_ITEM_ID: {
                Bundle result = new Bundle();
                result.putLong(LauncherSettings.Settings.EXTRA_VALUE, mOpenHelper.generateNewItemId());
                return result;
            }
            case LauncherSettings.Settings.METHOD_NEW_SCREEN_ID: {
                Bundle result = new Bundle();
                result.putLong(LauncherSettings.Settings.EXTRA_VALUE, mOpenHelper.generateNewScreenId());
                return result;
            }
            case LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB: {
                createEmptyDB();
                return null;
            }
            case LauncherSettings.Settings.METHOD_LOAD_DEFAULT_FAVORITES: {
                loadDefaultFavoritesIfNecessary();
                return null;
            }
            case LauncherSettings.Settings.METHOD_MIGRATE_LAUNCHER2_SHORTCUTS: {
                mOpenHelper.migrateLauncher2Shortcuts(mOpenHelper.getWritableDatabase(),
                        Uri.parse(getContext().getString(R.string.old_launcher_provider_uri)));
                return null;
            }
            case LauncherSettings.Settings.METHOD_UPDATE_FOLDER_ITEMS_RANK: {
                mOpenHelper.updateFolderItemsRank(mOpenHelper.getWritableDatabase(), false);
                return null;
            }
            case LauncherSettings.Settings.METHOD_CONVERT_SHORTCUTS_TO_ACTIVITIES: {
                mOpenHelper.convertShortcutsToLauncherActivities(mOpenHelper.getWritableDatabase());
                return null;
            }
            case LauncherSettings.Settings.METHOD_DELETE_DB: {
                deleteDatabase();
                return null;
            }
        }
        return null;
    }
@@ -279,8 +318,8 @@ public class LauncherProvider extends ContentProvider {
     * Deletes any empty folder from the DB.
     * @return Ids of deleted folders.
     */
    public List<Long> deleteEmptyFolders() {
        ArrayList<Long> folderIds = new ArrayList<Long>();
    private ArrayList<Long> deleteEmptyFolders() {
        ArrayList<Long> folderIds = new ArrayList<>();
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        db.beginTransaction();
        try {
@@ -297,7 +336,7 @@ public class LauncherProvider extends ContentProvider {
                folderIds.add(c.getLong(0));
            }
            c.close();
            if (folderIds.size() > 0) {
            if (!folderIds.isEmpty()) {
                db.delete(TABLE_FAVORITES, Utilities.createDbSelectionQuery(
                        LauncherSettings.Favorites._ID, folderIds), null);
            }
@@ -323,22 +362,14 @@ public class LauncherProvider extends ContentProvider {
        values.put(LauncherSettings.ChangeLogColumns.MODIFIED, System.currentTimeMillis());
    }

    public long generateNewItemId() {
        return mOpenHelper.generateNewItemId();
    }

    public long generateNewScreenId() {
        return mOpenHelper.generateNewScreenId();
    }

    /**
     * Clears all the data for a fresh start.
     */
    synchronized public void createEmptyDB() {
    synchronized private void createEmptyDB() {
        mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase());
    }

    public void clearFlagEmptyDbCreated() {
    private void clearFlagEmptyDbCreated() {
        Utilities.getPrefs(getContext()).edit().remove(EMPTY_DATABASE_CREATED).commit();
    }

@@ -349,7 +380,7 @@ public class LauncherProvider extends ContentProvider {
     *   3) From a partner configuration APK, already in the system image
     *   4) The default configuration for the particular device
     */
    synchronized public void loadDefaultFavoritesIfNecessary() {
    synchronized private void loadDefaultFavoritesIfNecessary() {
        SharedPreferences sp = Utilities.getPrefs(getContext());

        if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) {
@@ -434,21 +465,7 @@ public class LauncherProvider extends ContentProvider {
                mOpenHelper, getContext().getResources(), defaultLayout);
    }

    public void migrateLauncher2Shortcuts() {
        mOpenHelper.migrateLauncher2Shortcuts(mOpenHelper.getWritableDatabase(),
                Uri.parse(getContext().getString(R.string.old_launcher_provider_uri)));
    }

    public void updateFolderItemsRank() {
        mOpenHelper.updateFolderItemsRank(mOpenHelper.getWritableDatabase(), false);
    }

    public void convertShortcutsToLauncherActivities() {
        mOpenHelper.convertShortcutsToLauncherActivities(mOpenHelper.getWritableDatabase());
    }


    public void deleteDatabase() {
    private void deleteDatabase() {
        // Are you sure? (y/n)
        final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        final File dbFile = new File(db.getPath());
+21 −0
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@

package com.android.launcher3;

import android.content.ContentResolver;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;

import com.android.launcher3.config.ProviderConfig;
@@ -321,8 +323,27 @@ public class LauncherSettings {

        public static final String METHOD_GET_BOOLEAN = "get_boolean_setting";
        public static final String METHOD_SET_BOOLEAN = "set_boolean_setting";
        public static final String METHOD_CLEAR_EMPTY_DB_FLAG = "clear_empty_db_flag";

        public static final String METHOD_DELETE_EMPTY_FOLDERS = "delete_empty_folders";
        public static final String METHOD_UPDATE_FOLDER_ITEMS_RANK = "update_folder_items_rank";
        public static final String METHOD_CONVERT_SHORTCUTS_TO_ACTIVITIES =
                "convert_shortcuts_to_launcher_activities";

        public static final String METHOD_NEW_ITEM_ID = "generate_new_item_id";
        public static final String METHOD_NEW_SCREEN_ID = "generate_new_screen_id";

        public static final String METHOD_CREATE_EMPTY_DB = "create_empty_db";
        public static final String METHOD_DELETE_DB = "delete_db";

        public static final String METHOD_LOAD_DEFAULT_FAVORITES = "load_default_favorites";
        public static final String METHOD_MIGRATE_LAUNCHER2_SHORTCUTS = "migrate_l2_shortcuts";

        public static final String EXTRA_VALUE = "value";
        public static final String EXTRA_DEFAULT_VALUE = "default_value";

        public static Bundle call(ContentResolver cr, String method) {
            return cr.call(CONTENT_URI, method, null, null);
        }
    }
}
Loading