gecko-dev/mobile/android/base/preferences/AndroidImportPreference.java
Sebastian Kaspari d7f1de6d04 Bug 1187260 - Simplify RestrictedProfiles class. r=ally
This patch transforms RestrictedProfiles to delegate isAllowed() and
canLoadUrl() calls to an object implementing the RestrictionConfiguration
interface.

DefaultConfiguration, GuestProfileConfiguration and
RestrictedProfileConfiguration are implementing RestrictionConfiguration
and will take care of handling the restrictions for the different types
of profiles.

--HG--
extra : commitid : LQ2YsdyG6oR
extra : rebase_source : 015f7f02c6e7fded16d3811a71f0ae23547e5f71
2015-07-24 19:47:31 +02:00

113 lines
4.0 KiB
Java

/* -*- 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.AppConstants.Versions;
import org.mozilla.gecko.R;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.gecko.RestrictedProfiles;
import org.mozilla.gecko.restrictions.Restriction;
import java.util.Set;
import android.app.ProgressDialog;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
import android.util.Log;
class AndroidImportPreference extends MultiPrefMultiChoicePreference {
private static final String LOGTAG = "AndroidImport";
public static final String PREF_KEY = "android.not_a_preference.import_android";
private static final String PREF_KEY_PREFIX = "import_android.data.";
private final Context mContext;
public static class Handler implements GeckoPreferences.PrefHandler {
public boolean setupPref(Context context, Preference pref) {
// Feature disabled on devices running Android M+ (Bug 1183559)
return Versions.preM && RestrictedProfiles.isAllowed(context, Restriction.DISALLOW_IMPORT_SETTINGS);
}
public void onChange(Context context, Preference pref, Object newValue) { }
}
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;
Set<String> values = getValues();
for (String value : values) {
// Import checkbox values are stored in Android prefs to
// remember their check states. The key names are import_android.data.X
String key = value.substring(PREF_KEY_PREFIX.length());
if ("bookmarks".equals(key)) {
bookmarksChecked = true;
} else if ("history".equals(key)) {
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();
}
}
);
}
}