Bug 1232968 - Choosing to import only one option from onboarding screen will import both bookmarks and history. r=sebastian
--- a/mobile/android/base/java/org/mozilla/gecko/firstrun/ImportPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/ImportPanel.java
@@ -12,28 +12,27 @@ import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
+import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.ListView;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Telemetry;
import org.mozilla.gecko.TelemetryContract;
import org.mozilla.gecko.preferences.AndroidImport;
import org.mozilla.gecko.util.ThreadUtils;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
public class ImportPanel extends FirstrunPanel {
public static final String LOGTAG = "GeckoImportPanel";
public static final int TITLE_RES = R.string.firstrun_import_title;
private static final int AUTOADVANCE_DELAY_MS = 1500;
// These match the item positions in R.array.pref_import_android_entries.
private static int BOOKMARKS_INDEX = 0;
@@ -46,61 +45,66 @@ public class ImportPanel extends Firstru
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
final ViewGroup root = (ViewGroup) inflater.inflate(R.layout.firstrun_import_fragment, container, false);
choiceButton = (Button) root.findViewById(R.id.import_action_button);
confirmImage = (ImageView) root.findViewById(R.id.confirm_check);
choiceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- final List<Integer> checked = new ArrayList<>(Arrays.asList(0, 1));
+ final Boolean[] checked = new Boolean[2];
+ Arrays.fill(checked, true);
Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "firstrun-import-action");
+
+ // We set ListView.OnItemClickListener later, which overrides OnMultiChoiceClickListener, so don't make one here.
builder.setTitle(R.string.firstrun_import_action)
- .setMultiChoiceItems(R.array.pref_import_android_entries, makeBooleanArray(R.array.pref_import_android_defaults), new DialogInterface.OnMultiChoiceClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int index, boolean isChecked) {
- // Add telemetry for toggling checkboxes.
- Telemetry.sendUIEvent(TelemetryContract.Event.EDIT, TelemetryContract.Method.DIALOG, "firstrun-import-dialog-checkbox");
- if (isChecked && !checked.contains(index)) {
- checked.add(index);
- } else if (!isChecked && checked.contains(index)) {
- checked.remove(checked.indexOf(index));
- }
- }
- })
+ .setMultiChoiceItems(R.array.pref_import_android_entries, makeBooleanArray(R.array.pref_import_android_defaults), null)
.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
Telemetry.sendUIEvent(TelemetryContract.Event.CANCEL, TelemetryContract.Method.BUTTON, "firstrun-import-dialog");
dialog.dismiss();
}
})
.setPositiveButton(R.string.firstrun_import_dialog_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
- final boolean importBookmarks = checked.contains(BOOKMARKS_INDEX);
- final boolean importHistory = checked.contains(HISTORY_INDEX);
+ final boolean importBookmarks = checked[BOOKMARKS_INDEX];
+ final boolean importHistory = checked[HISTORY_INDEX];
runImport(importBookmarks, importHistory);
// Telemetry for what options are confirmed.
final int importState = (importBookmarks ? 1 : 0) + (importHistory ? 2 : 0);
Telemetry.sendUIEvent(TelemetryContract.Event.SAVE, TelemetryContract.Method.BUTTON, "firstrun-import-dialog-" + importState);
dialog.dismiss();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
final Button importButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
final ListView listView = dialog.getListView();
+
+ // Setting this listView listener is equivalent to setting OnMultiChoiceClickListener.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+ Telemetry.sendUIEvent(TelemetryContract.Event.EDIT, TelemetryContract.Method.DIALOG, "firstrun-import-dialog-checkbox");
+
+ // Keep track of checked state.
+ final boolean isChecked = ((CheckedTextView) view).isChecked();
+ if (isChecked) {
+ checked[i] = true;
+ } else {
+ checked[i] = false;
+ }
+
+ // Update importButton state.
if (AppConstants.Versions.feature11Plus) {
if (listView.getCheckedItemCount() == 0) {
importButton.setEnabled(false);
} else {
importButton.setEnabled(true);
}
} else {
final SparseBooleanArray checkedItems = listView.getCheckedItemPositions();