diff -r 000000000000 -r 6474c204b198 mobile/android/base/preferences/AndroidImportPreference.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobile/android/base/preferences/AndroidImportPreference.java Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,100 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.preferences; + +import org.mozilla.gecko.R; +import org.mozilla.gecko.util.ThreadUtils; + +import android.app.ProgressDialog; +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; + +class AndroidImportPreference extends MultiChoicePreference { + static final private String LOGTAG = "AndroidImport"; + private static final String PREF_KEY_PREFIX = "import_android.data."; + private Context mContext; + + public AndroidImportPreference(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + + if (!positiveResult) + return; + + boolean bookmarksChecked = false; + boolean historyChecked = false; + + CharSequence keys[] = getEntryKeys(); + boolean values[] = getValues(); + + for (int i = 0; i < keys.length; i++) { + // Privacy pref checkbox values are stored in Android prefs to + // remember their check states. The key names are import_android.data.X + String key = keys[i].toString().substring(PREF_KEY_PREFIX.length()); + boolean value = values[i]; + + if (key.equals("bookmarks") && value) { + bookmarksChecked = true; + } + if (key.equals("history") && value) { + historyChecked = true; + } + } + + runImport(bookmarksChecked, historyChecked); + } + + protected void runImport(final boolean doBookmarks, final boolean doHistory) { + Log.i(LOGTAG, "Importing Android history/bookmarks"); + if (!doBookmarks && !doHistory) { + return; + } + + final String dialogTitle; + if (doBookmarks && doHistory) { + dialogTitle = mContext.getString(R.string.bookmarkhistory_import_both); + } else if (doBookmarks) { + dialogTitle = mContext.getString(R.string.bookmarkhistory_import_bookmarks); + } else { + dialogTitle = mContext.getString(R.string.bookmarkhistory_import_history); + } + + final ProgressDialog dialog = + ProgressDialog.show(mContext, + dialogTitle, + mContext.getString(R.string.bookmarkhistory_import_wait), + true); + + final Runnable stopCallback = new Runnable() { + @Override + public void run() { + ThreadUtils.postToUiThread(new Runnable() { + @Override + public void run() { + dialog.dismiss(); + } + }); + } + }; + + ThreadUtils.postToBackgroundThread( + // Constructing AndroidImport may need finding the profile, + // which hits disk, so it needs to go into a Runnable too. + new Runnable() { + @Override + public void run() { + new AndroidImport(mContext, stopCallback, doBookmarks, doHistory).run(); + } + } + ); + } +}