From 0d83f7c0625c522bdf34b7a695892991f01e2f7c Mon Sep 17 00:00:00 2001 From: Adnan Begovic Date: Wed, 16 Mar 2016 10:40:43 -0700 Subject: [PATCH] SetupWizard: Fixup backup/restore for Marshmallow. Since Marshmallow broke the ability to utilize complex matrix queries against the SettingsProvider because it is now backed by XML, rewrite the logic for the backup enabled flag to work within the new constraints. Change-Id: I8ad993564184fa14b5a3267689c69af2f7e8638e TICKET: CYNGNOS-2233 --- .../setupwizard/setup/GmsAccountPage.java | 55 ++++++++----------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java b/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java index 34a344c..2fc1243 100644 --- a/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java @@ -25,12 +25,12 @@ import android.app.Activity; import android.app.ActivityOptions; import android.app.Fragment; import android.app.FragmentManager; -import android.content.ContentQueryMap; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.database.Cursor; +import android.database.ContentObserver; import android.os.Bundle; +import android.os.Handler; import android.provider.Settings; import android.service.persistentdata.PersistentDataBlockManager; import android.util.Log; @@ -42,8 +42,6 @@ import com.cyanogenmod.setupwizard.ui.LoadingFragment; import com.cyanogenmod.setupwizard.util.SetupWizardUtils; import java.io.IOException; -import java.util.Observable; -import java.util.Observer; public class GmsAccountPage extends SetupPage { @@ -53,32 +51,33 @@ public class GmsAccountPage extends SetupPage { private static final String RESTORE_WIZARD_SCRIPT = "android.resource://com.google.android.setupwizard/xml/wizard_script"; - private ContentQueryMap mContentQueryMap; - private Observer mSettingsObserver; - private boolean mBackupEnabled = false; private Fragment mFragment; + private ContentResolver mContentResolver; public GmsAccountPage(final Context context, SetupDataCallbacks callbacks) { super(context, callbacks); - final ContentResolver res = context.getContentResolver(); - mBackupEnabled = Settings.Secure.getInt(res, - Settings.Secure.BACKUP_ENABLED, 0) == 1; - mSettingsObserver = new Observer() { - public void update(Observable o, Object arg) { - mBackupEnabled = (Settings.Secure.getInt(res, - Settings.Secure.BACKUP_AUTO_RESTORE, 0) == 1) || - (Settings.Secure.getInt(res, - Settings.Secure.BACKUP_ENABLED, 0) == 1); - } - }; - //Cursor settingsCursor = res.query(Settings.Secure.CONTENT_URI, null, - // "(" + Settings.System.NAME + "=? OR " + Settings.System.NAME + "=?)", - // new String[]{Settings.Secure.BACKUP_AUTO_RESTORE, Settings.Secure.BACKUP_ENABLED}, - // null); - //mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); - //mContentQueryMap.addObserver(mSettingsObserver); + mContentResolver = context.getContentResolver(); + mContentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.BACKUP_AUTO_RESTORE), false, mSettingsObserver); + mContentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.BACKUP_ENABLED), false, mSettingsObserver); + } + + private ContentObserver mSettingsObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + super.onChange(selfChange); + onBackupEnabledChanged(); + } + }; + + private void onBackupEnabledChanged() { + mBackupEnabled = (Settings.Secure.getInt(mContentResolver, + Settings.Secure.BACKUP_AUTO_RESTORE, 0) == 1) || + (Settings.Secure.getInt(mContentResolver, + Settings.Secure.BACKUP_ENABLED, 0) == 1); } @Override @@ -139,13 +138,7 @@ public class GmsAccountPage extends SetupPage { @Override public void onFinishSetup() { - try { - if (mContentQueryMap != null) { - mContentQueryMap.close(); - } - } catch (Exception e) { - Log.wtf(TAG, e.toString()); - } + mContentResolver.unregisterContentObserver(mSettingsObserver); } private void handleResult(int requestCode, int resultCode) {