Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.preferences.privacy; | 5 package org.chromium.chrome.browser.preferences.privacy; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.app.ProgressDialog; | 8 import android.app.ProgressDialog; |
| 9 import android.content.Intent; | 9 import android.content.Intent; |
| 10 import android.os.Bundle; | 10 import android.os.Bundle; |
| 11 import android.preference.Preference; | 11 import android.preference.Preference; |
| 12 import android.preference.PreferenceFragment; | 12 import android.preference.PreferenceFragment; |
| 13 import android.support.annotation.Nullable; | 13 import android.support.annotation.Nullable; |
| 14 import android.widget.ListView; | 14 import android.widget.ListView; |
| 15 | 15 |
| 16 import org.chromium.base.VisibleForTesting; | 16 import org.chromium.base.VisibleForTesting; |
| 17 import org.chromium.base.metrics.RecordHistogram; | 17 import org.chromium.base.metrics.RecordHistogram; |
| 18 import org.chromium.base.metrics.RecordUserAction; | 18 import org.chromium.base.metrics.RecordUserAction; |
| 19 import org.chromium.chrome.R; | 19 import org.chromium.chrome.R; |
| 20 import org.chromium.chrome.browser.ChromeFeatureList; | 20 import org.chromium.chrome.browser.ChromeFeatureList; |
| 21 import org.chromium.chrome.browser.browsing_data.BrowsingDataType; | 21 import org.chromium.chrome.browser.browsing_data.BrowsingDataType; |
| 22 import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataPreferenceType ; | |
| 22 import org.chromium.chrome.browser.browsing_data.TimePeriod; | 23 import org.chromium.chrome.browser.browsing_data.TimePeriod; |
| 23 import org.chromium.chrome.browser.help.HelpAndFeedback; | 24 import org.chromium.chrome.browser.help.HelpAndFeedback; |
| 24 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; | 25 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; |
| 25 import org.chromium.chrome.browser.preferences.ButtonPreference; | 26 import org.chromium.chrome.browser.preferences.ButtonPreference; |
| 26 import org.chromium.chrome.browser.preferences.ClearBrowsingDataCheckBoxPreferen ce; | 27 import org.chromium.chrome.browser.preferences.ClearBrowsingDataCheckBoxPreferen ce; |
| 27 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 28 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 28 import org.chromium.chrome.browser.preferences.SpinnerPreference; | 29 import org.chromium.chrome.browser.preferences.SpinnerPreference; |
| 29 import org.chromium.chrome.browser.preferences.TextMessageWithLinkAndIconPrefere nce; | 30 import org.chromium.chrome.browser.preferences.TextMessageWithLinkAndIconPrefere nce; |
| 30 import org.chromium.chrome.browser.preferences.privacy.BrowsingDataCounterBridge .BrowsingDataCounterCallback; | 31 import org.chromium.chrome.browser.preferences.privacy.BrowsingDataCounterBridge .BrowsingDataCounterCallback; |
| 31 import org.chromium.chrome.browser.profiles.Profile; | 32 import org.chromium.chrome.browser.profiles.Profile; |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 59 | 60 |
| 60 public Item(ClearBrowsingDataPreferences parent, | 61 public Item(ClearBrowsingDataPreferences parent, |
| 61 DialogOption option, | 62 DialogOption option, |
| 62 ClearBrowsingDataCheckBoxPreference checkbox, | 63 ClearBrowsingDataCheckBoxPreference checkbox, |
| 63 boolean selected, | 64 boolean selected, |
| 64 boolean enabled) { | 65 boolean enabled) { |
| 65 super(); | 66 super(); |
| 66 mParent = parent; | 67 mParent = parent; |
| 67 mOption = option; | 68 mOption = option; |
| 68 mCheckbox = checkbox; | 69 mCheckbox = checkbox; |
| 69 mCounter = new BrowsingDataCounterBridge(this, mOption.getDataType() ); | 70 mCounter = new BrowsingDataCounterBridge( |
| 71 this, mOption.getDataType(), mParent.getPreferenceType()); | |
| 70 | 72 |
| 71 mCheckbox.setOnPreferenceClickListener(this); | 73 mCheckbox.setOnPreferenceClickListener(this); |
| 72 mCheckbox.setEnabled(enabled); | 74 mCheckbox.setEnabled(enabled); |
| 73 mCheckbox.setChecked(selected); | 75 mCheckbox.setChecked(selected); |
| 74 | 76 |
| 75 if (!ClearBrowsingDataTabsFragment.isFeatureEnabled()) { | 77 if (!ClearBrowsingDataTabsFragment.isFeatureEnabled()) { |
| 76 // No summary when unchecked. The redesigned basic and advanced | 78 // No summary when unchecked. The redesigned basic and advanced |
| 77 // CBD views will always show the checkbox summary. | 79 // CBD views will always show the checkbox summary. |
| 78 mCheckbox.setSummaryOff(""); | 80 mCheckbox.setSummaryOff(""); |
| 79 } | 81 } |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 91 return mCheckbox.isChecked(); | 93 return mCheckbox.isChecked(); |
| 92 } | 94 } |
| 93 | 95 |
| 94 @Override | 96 @Override |
| 95 public boolean onPreferenceClick(Preference preference) { | 97 public boolean onPreferenceClick(Preference preference) { |
| 96 assert mCheckbox == preference; | 98 assert mCheckbox == preference; |
| 97 | 99 |
| 98 mParent.updateButtonState(); | 100 mParent.updateButtonState(); |
| 99 mShouldAnnounceCounterResult = true; | 101 mShouldAnnounceCounterResult = true; |
| 100 PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( | 102 PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( |
| 101 mOption.getDataType(), mCheckbox.isChecked()); | 103 mOption.getDataType(), mParent.getPreferenceType(), mCheckbo x.isChecked()); |
| 102 return true; | 104 return true; |
| 103 } | 105 } |
| 104 | 106 |
| 105 @Override | 107 @Override |
| 106 public void onCounterFinished(String result) { | 108 public void onCounterFinished(String result) { |
| 107 mCheckbox.setSummaryOn(result); | 109 mCheckbox.setSummaryOn(result); |
| 108 if (ClearBrowsingDataTabsFragment.isFeatureEnabled()) { | 110 if (ClearBrowsingDataTabsFragment.isFeatureEnabled()) { |
| 109 mCheckbox.setSummaryOff(result); | 111 mCheckbox.setSummaryOff(result); |
| 110 } | 112 } |
| 111 if (mShouldAnnounceCounterResult) { | 113 if (mShouldAnnounceCounterResult) { |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 292 return new DialogOption[] { | 294 return new DialogOption[] { |
| 293 DialogOption.CLEAR_HISTORY, | 295 DialogOption.CLEAR_HISTORY, |
| 294 DialogOption.CLEAR_COOKIES_AND_SITE_DATA, | 296 DialogOption.CLEAR_COOKIES_AND_SITE_DATA, |
| 295 DialogOption.CLEAR_CACHE, | 297 DialogOption.CLEAR_CACHE, |
| 296 DialogOption.CLEAR_PASSWORDS, | 298 DialogOption.CLEAR_PASSWORDS, |
| 297 DialogOption.CLEAR_FORM_DATA | 299 DialogOption.CLEAR_FORM_DATA |
| 298 }; | 300 }; |
| 299 } | 301 } |
| 300 | 302 |
| 301 /** | 303 /** |
| 304 * Returns whether this preference page is a basic or advanced tab in order to use separate | |
|
msramek
2017/02/08 10:55:55
// This method returns 1 or 2.
int method() { retu
dullweber
2017/02/08 23:03:18
ahh right, that's stupid :D Should be solved now,
| |
| 305 * preferences. | |
| 306 */ | |
| 307 protected int getPreferenceType() { | |
| 308 return ClearBrowsingDataPreferenceType.DEFAULT; | |
| 309 } | |
| 310 | |
| 311 /** | |
| 302 * Returns the Array of time periods. Options are displayed in the same orde r as they appear | 312 * Returns the Array of time periods. Options are displayed in the same orde r as they appear |
| 303 * in the array. | 313 * in the array. |
| 304 */ | 314 */ |
| 305 private TimePeriodSpinnerOption[] getTimePeriodSpinnerOptions() { | 315 private TimePeriodSpinnerOption[] getTimePeriodSpinnerOptions() { |
| 306 Activity activity = getActivity(); | 316 Activity activity = getActivity(); |
| 307 | 317 |
| 308 TimePeriodSpinnerOption[] options = new TimePeriodSpinnerOption[] { | 318 TimePeriodSpinnerOption[] options = new TimePeriodSpinnerOption[] { |
| 309 new TimePeriodSpinnerOption(TimePeriod.LAST_HOUR, | 319 new TimePeriodSpinnerOption(TimePeriod.LAST_HOUR, |
| 310 activity.getString(R.string.clear_browsing_data_period_h our)), | 320 activity.getString(R.string.clear_browsing_data_period_h our)), |
| 311 new TimePeriodSpinnerOption(TimePeriod.LAST_DAY, | 321 new TimePeriodSpinnerOption(TimePeriod.LAST_DAY, |
| 312 activity.getString(R.string.clear_browsing_data_period_d ay)), | 322 activity.getString(R.string.clear_browsing_data_period_d ay)), |
| 313 new TimePeriodSpinnerOption(TimePeriod.LAST_WEEK, | 323 new TimePeriodSpinnerOption(TimePeriod.LAST_WEEK, |
| 314 activity.getString(R.string.clear_browsing_data_period_w eek)), | 324 activity.getString(R.string.clear_browsing_data_period_w eek)), |
| 315 new TimePeriodSpinnerOption(TimePeriod.FOUR_WEEKS, | 325 new TimePeriodSpinnerOption(TimePeriod.FOUR_WEEKS, |
| 316 activity.getString(R.string.clear_browsing_data_period_f our_weeks)), | 326 activity.getString(R.string.clear_browsing_data_period_f our_weeks)), |
| 317 new TimePeriodSpinnerOption(TimePeriod.ALL_TIME, | 327 new TimePeriodSpinnerOption(TimePeriod.ALL_TIME, |
| 318 activity.getString(R.string.clear_browsing_data_period_e verything))}; | 328 activity.getString(R.string.clear_browsing_data_period_e verything))}; |
| 319 | 329 |
| 320 return options; | 330 return options; |
| 321 } | 331 } |
| 322 | 332 |
| 323 /** | 333 /** |
| 324 * Decides whether a given dialog option should be selected when the dialog is initialized. | 334 * Decides whether a given dialog option should be selected when the dialog is initialized. |
| 325 * | 335 * |
| 326 * @param option The option in question. | 336 * @param option The option in question. |
| 327 * @return boolean Whether the given option should be preselected. | 337 * @return boolean Whether the given option should be preselected. |
| 328 */ | 338 */ |
| 329 private boolean isOptionSelectedByDefault(DialogOption option) { | 339 private boolean isOptionSelectedByDefault(DialogOption option) { |
| 330 return PrefServiceBridge.getInstance().getBrowsingDataDeletionPreference ( | 340 return PrefServiceBridge.getInstance().getBrowsingDataDeletionPreference ( |
| 331 option.getDataType()); | 341 option.getDataType(), getPreferenceType()); |
| 332 } | 342 } |
| 333 | 343 |
| 334 /** | 344 /** |
| 335 * Called when clearing browsing data completes. | 345 * Called when clearing browsing data completes. |
| 336 * Implements the ChromePreferences.OnClearBrowsingDataListener interface. | 346 * Implements the ChromePreferences.OnClearBrowsingDataListener interface. |
| 337 */ | 347 */ |
| 338 @Override | 348 @Override |
| 339 public void onBrowsingDataCleared() { | 349 public void onBrowsingDataCleared() { |
| 340 if (getActivity() == null) return; | 350 if (getActivity() == null) return; |
| 341 | 351 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 409 @Override | 419 @Override |
| 410 public boolean onPreferenceChange(Preference preference, Object value) { | 420 public boolean onPreferenceChange(Preference preference, Object value) { |
| 411 if (preference.getKey().equals(PREF_TIME_RANGE)) { | 421 if (preference.getKey().equals(PREF_TIME_RANGE)) { |
| 412 // Inform the items that a recalculation is going to happen as a res ult of the time | 422 // Inform the items that a recalculation is going to happen as a res ult of the time |
| 413 // period change. | 423 // period change. |
| 414 for (Item item : mItems) { | 424 for (Item item : mItems) { |
| 415 item.setShouldAnnounceCounterResult(false); | 425 item.setShouldAnnounceCounterResult(false); |
| 416 } | 426 } |
| 417 | 427 |
| 418 PrefServiceBridge.getInstance().setBrowsingDataDeletionTimePeriod( | 428 PrefServiceBridge.getInstance().setBrowsingDataDeletionTimePeriod( |
| 419 ((TimePeriodSpinnerOption) value).getTimePeriod()); | 429 getPreferenceType(), ((TimePeriodSpinnerOption) value).getTi mePeriod()); |
| 420 return true; | 430 return true; |
| 421 } | 431 } |
| 422 return false; | 432 return false; |
| 423 } | 433 } |
| 424 | 434 |
| 425 /** | 435 /** |
| 426 * Disable the "Clear" button if none of the options are selected. Otherwise , enable it. | 436 * Disable the "Clear" button if none of the options are selected. Otherwise , enable it. |
| 427 */ | 437 */ |
| 428 protected void updateButtonState() { | 438 protected void updateButtonState() { |
| 429 ButtonPreference clearButton = (ButtonPreference) findPreference(PREF_CL EAR_BUTTON); | 439 ButtonPreference clearButton = (ButtonPreference) findPreference(PREF_CL EAR_BUTTON); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 450 DialogOption[] options = getDialogOptions(); | 460 DialogOption[] options = getDialogOptions(); |
| 451 mItems = new Item[options.length]; | 461 mItems = new Item[options.length]; |
| 452 for (int i = 0; i < options.length; i++) { | 462 for (int i = 0; i < options.length; i++) { |
| 453 boolean enabled = true; | 463 boolean enabled = true; |
| 454 | 464 |
| 455 // It is possible to disable the deletion of browsing history. | 465 // It is possible to disable the deletion of browsing history. |
| 456 if (options[i] == DialogOption.CLEAR_HISTORY | 466 if (options[i] == DialogOption.CLEAR_HISTORY |
| 457 && !PrefServiceBridge.getInstance().canDeleteBrowsingHistory ()) { | 467 && !PrefServiceBridge.getInstance().canDeleteBrowsingHistory ()) { |
| 458 enabled = false; | 468 enabled = false; |
| 459 PrefServiceBridge.getInstance().setBrowsingDataDeletionPreferenc e( | 469 PrefServiceBridge.getInstance().setBrowsingDataDeletionPreferenc e( |
| 460 DialogOption.CLEAR_HISTORY.getDataType(), false); | 470 DialogOption.CLEAR_HISTORY.getDataType(), |
| 471 ClearBrowsingDataPreferenceType.DEFAULT, false); | |
| 461 } | 472 } |
| 462 | 473 |
| 463 mItems[i] = new Item( | 474 mItems[i] = new Item( |
| 464 this, | 475 this, |
| 465 options[i], | 476 options[i], |
| 466 (ClearBrowsingDataCheckBoxPreference) findPreference(options[i]. getPreferenceKey()), | 477 (ClearBrowsingDataCheckBoxPreference) findPreference(options[i]. getPreferenceKey()), |
| 467 isOptionSelectedByDefault(options[i]), | 478 isOptionSelectedByDefault(options[i]), |
| 468 enabled); | 479 enabled); |
| 469 } | 480 } |
| 470 | 481 |
| 471 // Not all checkboxes defined in the layout are necessarily handled by t his class | 482 // Not all checkboxes defined in the layout are necessarily handled by t his class |
| 472 // or a particular subclass. Hide those that are not. | 483 // or a particular subclass. Hide those that are not. |
| 473 EnumSet<DialogOption> unboundOptions = EnumSet.allOf(DialogOption.class) ; | 484 EnumSet<DialogOption> unboundOptions = EnumSet.allOf(DialogOption.class) ; |
| 474 unboundOptions.removeAll(Arrays.asList(getDialogOptions())); | 485 unboundOptions.removeAll(Arrays.asList(getDialogOptions())); |
| 475 for (DialogOption option : unboundOptions) { | 486 for (DialogOption option : unboundOptions) { |
| 476 getPreferenceScreen().removePreference(findPreference(option.getPref erenceKey())); | 487 getPreferenceScreen().removePreference(findPreference(option.getPref erenceKey())); |
| 477 } | 488 } |
| 478 | 489 |
| 479 // The time range selection spinner. | 490 // The time range selection spinner. |
| 480 SpinnerPreference spinner = (SpinnerPreference) findPreference(PREF_TIME _RANGE); | 491 SpinnerPreference spinner = (SpinnerPreference) findPreference(PREF_TIME _RANGE); |
| 481 spinner.setOnPreferenceChangeListener(this); | 492 spinner.setOnPreferenceChangeListener(this); |
| 482 TimePeriodSpinnerOption[] spinnerOptions = getTimePeriodSpinnerOptions() ; | 493 TimePeriodSpinnerOption[] spinnerOptions = getTimePeriodSpinnerOptions() ; |
| 483 int selectedTimePeriod = | 494 int selectedTimePeriod = PrefServiceBridge.getInstance().getBrowsingData DeletionTimePeriod( |
| 484 PrefServiceBridge.getInstance().getBrowsingDataDeletionTimePerio d(); | 495 getPreferenceType()); |
| 485 int spinnerOptionIndex = -1; | 496 int spinnerOptionIndex = -1; |
| 486 for (int i = 0; i < spinnerOptions.length; ++i) { | 497 for (int i = 0; i < spinnerOptions.length; ++i) { |
| 487 if (spinnerOptions[i].getTimePeriod() == selectedTimePeriod) { | 498 if (spinnerOptions[i].getTimePeriod() == selectedTimePeriod) { |
| 488 spinnerOptionIndex = i; | 499 spinnerOptionIndex = i; |
| 489 break; | 500 break; |
| 490 } | 501 } |
| 491 } | 502 } |
| 492 assert spinnerOptionIndex != -1; | 503 assert spinnerOptionIndex != -1; |
| 493 spinner.setOptions(spinnerOptions, spinnerOptionIndex); | 504 spinner.setOptions(spinnerOptions, spinnerOptionIndex); |
| 494 | 505 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 675 "History.ClearBrowsingData.ImportantIgnoredPercent", | 686 "History.ClearBrowsingData.ImportantIgnoredPercent", |
| 676 ignoredDomains.length * IMPORTANT_SITES_PERCENTAGE_BUCKE T_COUNT | 687 ignoredDomains.length * IMPORTANT_SITES_PERCENTAGE_BUCKE T_COUNT |
| 677 / mSortedImportantDomains.length, | 688 / mSortedImportantDomains.length, |
| 678 IMPORTANT_SITES_PERCENTAGE_BUCKET_COUNT + 1); | 689 IMPORTANT_SITES_PERCENTAGE_BUCKET_COUNT + 1); |
| 679 } | 690 } |
| 680 clearBrowsingData(getSelectedOptions(), deselectedDomains, deselecte dDomainReasons, | 691 clearBrowsingData(getSelectedOptions(), deselectedDomains, deselecte dDomainReasons, |
| 681 ignoredDomains, ignoredDomainReasons); | 692 ignoredDomains, ignoredDomainReasons); |
| 682 } | 693 } |
| 683 } | 694 } |
| 684 } | 695 } |
| OLD | NEW |