Commit 7c92257a authored by Xing Liu's avatar Xing Liu Committed by Commit Bot

Download later: Glue later dialog to download home.

This CL adds a wrapper of DownloadLaterDialogCoordinator, and use it
to implement the change button flow in download home.

Bug: 1102230,1078454
Change-Id: I16d3499ad3b491b50fbde2e0f88dfe80a3623fe5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2281091
Commit-Queue: Xing Liu <xingliu@chromium.org>
Reviewed-by: default avatarHesen Zhang <hesen@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786061}
parent 782fc629
......@@ -16,6 +16,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.vr.VrModeProviderImpl;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.ui.modaldialog.ModalDialogManager;
/** A helper class to build and return an {@link DownloadManagerCoordinator}. */
......@@ -38,10 +39,10 @@ public class DownloadManagerCoordinatorFactoryHelper {
config.useNewDownloadPath ? null : new LegacyDownloadProviderImpl();
return new DownloadManagerCoordinatorImpl(activity, config, new PrefetchEnabledSupplier(),
DownloadManagerCoordinatorFactoryHelper::settingsLaunchHelper, snackbarManager,
modalDialogManager, TrackerFactory.getTrackerForProfile(profile),
new FaviconProviderImpl(profile), OfflineContentAggregatorFactory.get(),
legacyProvider, GlobalDiscardableReferencePool.getReferencePool(),
new VrModeProviderImpl());
modalDialogManager, UserPrefs.get(profile),
TrackerFactory.getTrackerForProfile(profile), new FaviconProviderImpl(profile),
OfflineContentAggregatorFactory.get(), legacyProvider,
GlobalDiscardableReferencePool.getReferencePool(), new VrModeProviderImpl());
}
private static void settingsLaunchHelper(Context context) {
......
......@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.components.offline_items_collection.OfflineContentProvider;
import org.chromium.components.prefs.PrefService;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.ui.vr.VrModeProvider;
......@@ -60,8 +61,9 @@ class DownloadManagerCoordinatorImpl
public DownloadManagerCoordinatorImpl(Activity activity, DownloadManagerUiConfig config,
ObservableSupplier<Boolean> isPrefetchEnabledSupplier,
Callback<Context> settingsLauncher, SnackbarManager snackbarManager,
ModalDialogManager modalDialogManager, Tracker tracker, FaviconProvider faviconProvider,
OfflineContentProvider provider, LegacyDownloadProvider legacyProvider,
ModalDialogManager modalDialogManager, PrefService prefService, Tracker tracker,
FaviconProvider faviconProvider, OfflineContentProvider provider,
LegacyDownloadProvider legacyProvider,
DiscardableReferencePool discardableReferencePool, VrModeProvider vrModeProvider) {
mActivity = activity;
mSettingsLauncher = settingsLauncher;
......@@ -70,7 +72,7 @@ class DownloadManagerCoordinatorImpl
mListCoordinator = new DateOrderedListCoordinator(mActivity, config,
isPrefetchEnabledSupplier, provider, legacyProvider,
mDeleteCoordinator::showSnackbar, mSelectionDelegate, this::notifyFilterChanged,
createDateOrderedListObserver(), modalDialogManager, faviconProvider,
createDateOrderedListObserver(), modalDialogManager, prefService, faviconProvider,
discardableReferencePool);
mToolbarCoordinator = new ToolbarCoordinator(mActivity, this, mListCoordinator,
mSelectionDelegate, config.isSeparateActivity, tracker, vrModeProvider);
......
......@@ -17,6 +17,7 @@ import org.chromium.base.DiscardableReferencePool;
import org.chromium.base.Log;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.download.dialogs.DownloadLaterDialogHelper;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.FaviconProvider;
import org.chromium.chrome.browser.download.home.LegacyDownloadProvider;
......@@ -32,6 +33,7 @@ import org.chromium.chrome.browser.download.home.toolbar.ToolbarCoordinator;
import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate;
import org.chromium.components.offline_items_collection.OfflineContentProvider;
import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.prefs.PrefService;
import org.chromium.ui.modaldialog.ModalDialogManager;
import java.util.List;
......@@ -105,6 +107,7 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
* components that need to take action based on the visual
* state of the list.
* @param dateOrderedListObserver A {@link DateOrderedListObserver}.
* @param prefService Used to update user preferences.
* @param discardableReferencePool A {@linK DiscardableReferencePool} reference to use for
* large objects (e.g. bitmaps) in the UI.
*/
......@@ -114,7 +117,8 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
SelectionDelegate<ListItem> selectionDelegate,
FilterCoordinator.Observer filterObserver,
DateOrderedListObserver dateOrderedListObserver, ModalDialogManager modalDialogManager,
FaviconProvider faviconProvider, DiscardableReferencePool discardableReferencePool) {
PrefService prefService, FaviconProvider faviconProvider,
DiscardableReferencePool discardableReferencePool) {
mContext = context;
ListItemModel model = new ListItemModel();
......@@ -122,10 +126,10 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
mListView =
new DateOrderedListView(context, config, decoratedModel, dateOrderedListObserver);
mRenameDialogManager = new RenameDialogManager(context, modalDialogManager);
mMediator = new DateOrderedListMediator(provider, legacyProvider, faviconProvider,
this::startShareIntent, deleteController, this::startRename, selectionDelegate,
config, dateOrderedListObserver, model, discardableReferencePool);
DownloadLaterDialogHelper.create(context, modalDialogManager, prefService), config,
dateOrderedListObserver, model, discardableReferencePool);
mEmptyCoordinator = new EmptyCoordinator(context, mMediator.getEmptySource());
......
......@@ -14,6 +14,7 @@ import androidx.core.util.Pair;
import org.chromium.base.Callback;
import org.chromium.base.CollectionUtil;
import org.chromium.base.DiscardableReferencePool;
import org.chromium.chrome.browser.download.dialogs.DownloadLaterDialogHelper;
import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig;
import org.chromium.chrome.browser.download.home.FaviconProvider;
import org.chromium.chrome.browser.download.home.JustNowProvider;
......@@ -108,6 +109,7 @@ class DateOrderedListMediator {
private final MediatorSelectionObserver mSelectionObserver;
private final SelectionDelegate<ListItem> mSelectionDelegate;
private final DownloadManagerUiConfig mUiConfig;
private final DownloadLaterDialogHelper mDownloadLaterDialogHelper;
private final OffTheRecordOfflineItemFilter mOffTheRecordFilter;
private final InvalidStateOfflineItemFilter mInvalidStateFilter;
......@@ -163,8 +165,9 @@ class DateOrderedListMediator {
LegacyDownloadProvider legacyProvider, FaviconProvider faviconProvider,
ShareController shareController, DeleteController deleteController,
RenameController renameController, SelectionDelegate<ListItem> selectionDelegate,
DownloadManagerUiConfig config, DateOrderedListObserver dateOrderedListObserver,
ListItemModel model, DiscardableReferencePool discardableReferencePool) {
DownloadLaterDialogHelper downloadLaterDialogHelper, DownloadManagerUiConfig config,
DateOrderedListObserver dateOrderedListObserver, ListItemModel model,
DiscardableReferencePool discardableReferencePool) {
// Build a chain from the data source to the model. The chain will look like:
// [OfflineContentProvider] ->
// [OfflineItemSource] ->
......@@ -185,6 +188,7 @@ class DateOrderedListMediator {
mDeleteController = deleteController;
mRenameController = renameController;
mSelectionDelegate = selectionDelegate;
mDownloadLaterDialogHelper = downloadLaterDialogHelper;
mUiConfig = config;
mSource = new OfflineItemSource(mProvider);
......@@ -230,6 +234,7 @@ class DateOrderedListMediator {
mSource.destroy();
mProvider.destroy();
mThumbnailProvider.destroy();
mDownloadLaterDialogHelper.destroy();
}
/**
......@@ -343,8 +348,8 @@ class DateOrderedListMediator {
private void onChangeItem(OfflineItem item) {
UmaUtils.recordItemAction(ViewAction.MENU_CHANGE);
// TODO(xingliu): Hook to download later dialog to generate the schedule.
mProvider.changeSchedule(item, null);
mDownloadLaterDialogHelper.showChangeScheduleDialog(
item.schedule, (newSchedule) -> { mProvider.changeSchedule(item, newSchedule); });
}
/**
......
......@@ -21,8 +21,10 @@ import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.core.AllOf.allOf;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.when;
import android.content.Context;
......@@ -47,12 +49,14 @@ import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.FlakyTest;
import org.chromium.base.test.util.JniMocker;
import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.browser.download.DownloadLaterPromptStatus;
import org.chromium.chrome.browser.download.R;
import org.chromium.chrome.browser.download.home.rename.RenameUtils;
import org.chromium.chrome.browser.download.home.toolbar.DownloadHomeToolbar;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.download.ui.StubbedProvider;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.vr.VrModeProviderImpl;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
......@@ -64,6 +68,7 @@ import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.offline_items_collection.OfflineItemFilter;
import org.chromium.components.offline_items_collection.OfflineItemState;
import org.chromium.components.offline_items_collection.RenameResult;
import org.chromium.components.prefs.PrefService;
import org.chromium.components.url_formatter.SchemeDisplay;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.components.url_formatter.UrlFormatterJni;
......@@ -89,6 +94,9 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
@Mock
private UrlFormatter.Natives mUrlFormatterJniMock;
@Mock
PrefService mPrefService;
private ModalDialogManager.Presenter mAppModalPresenter;
private ModalDialogManager mModalDialogManager;
......@@ -107,6 +115,9 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
when(mUrlFormatterJniMock.formatStringUrlForSecurityDisplay(
anyString(), eq(SchemeDisplay.OMIT_HTTP_AND_HTTPS)))
.then(inv -> inv.getArgument(0));
when(mPrefService.getInteger(eq(Pref.DOWNLOAD_LATER_PROMPT_STATUS)))
.thenReturn(DownloadLaterPromptStatus.SHOW_INITIAL);
doNothing().when(mPrefService).setInteger(anyString(), anyInt());
Map<String, Boolean> features = new HashMap<>();
features.put(ChromeFeatureList.DOWNLOADS_LOCATION_CHANGE, true);
......@@ -164,7 +175,7 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
mDownloadCoordinator = new DownloadManagerCoordinatorImpl(getActivity(), config,
isPrefetchEnabledSupplier, settingsLauncher, mSnackbarManager, mModalDialogManager,
mTracker, faviconProvider, OfflineContentAggregatorFactory.get(),
mPrefService, mTracker, faviconProvider, OfflineContentAggregatorFactory.get(),
/* LegacyDownloadProvider */ null, mDiscardableReferencePool,
new VrModeProviderImpl());
getActivity().setContentView(mDownloadCoordinator.getView());
......
......@@ -27,6 +27,7 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogChoice.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogController.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogCoordinator.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogHelper.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogProperties.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogView.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java",
......@@ -126,7 +127,10 @@ android_library("junit_tests") {
bypass_platform_checks = true
testonly = true
sources = [ "java/src/org/chromium/chrome/browser/download/DownloadDialogBridgeUnitTest.java" ]
sources = [
"java/src/org/chromium/chrome/browser/download/DownloadDialogBridgeUnitTest.java",
"java/src/org/chromium/chrome/browser/download/dialogs/DownloadLaterDialogHelperUnitTest.java",
]
deps = [
":java",
......@@ -136,6 +140,7 @@ android_library("junit_tests") {
"//chrome/browser/flags:java",
"//chrome/browser/preferences:java",
"//chrome/test/android:chrome_java_test_support",
"//components/offline_items_collection/core:core_java",
"//components/prefs/android:java",
"//third_party/android_deps:robolectric_all_java",
"//third_party/junit",
......
......@@ -70,7 +70,8 @@
android:layout_marginBottom="11dp"
android:layout_marginStart="-5dp"
android:text="@string/download_location_dialog_checkbox"
style="@style/TextAppearance.TextMedium.Tertiary" />
style="@style/TextAppearance.TextMedium.Tertiary"
android:visibility="gone" />
<TextView
android:id="@+id/edit_location"
......
......@@ -177,7 +177,11 @@ public class DownloadLaterDialogCoordinator
private void updatePromptStatus() {
assert mCustomView != null;
assert mPrefService != null;
mPrefService.setInteger(Pref.DOWNLOAD_LATER_PROMPT_STATUS, mCustomView.getPromptStatus());
Integer promptStatus = mCustomView.getPromptStatus();
if (promptStatus != null) {
mPrefService.setInteger(
Pref.DOWNLOAD_LATER_PROMPT_STATUS, mCustomView.getPromptStatus());
}
}
// ModalDialogProperties.Controller implementation.
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.download.dialogs;
import android.content.Context;
import androidx.annotation.Nullable;
import org.chromium.base.Callback;
import org.chromium.components.offline_items_collection.OfflineItemSchedule;
import org.chromium.components.prefs.PrefService;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.ui.modelutil.PropertyModel;
/**
* A wrapper of {@link DownloadLaterDialogCoordinator}, always use the same Android {@link Context}
* and relevant dependencies, and supports to show dialog based on a {@link
* org.chromium.components.offline_items_collection.OfflineItem}.
*/
public class DownloadLaterDialogHelper implements DownloadLaterDialogController {
private final Context mContext;
private final ModalDialogManager mModalDialogManager;
private final PrefService mPrefService;
private final DownloadLaterDialogCoordinator mDownloadLaterDialog;
Callback<OfflineItemSchedule> mCallback;
/**
* Creates the download later dialog helper.
* @param context The {@link Context} associated with the dialog.
* @param manager The {@link ModalDialogManager} to show the modal dialog.
* @param prefService Used to update user preferences.
* @return The download later dialog helper.
*/
public static DownloadLaterDialogHelper create(
Context context, ModalDialogManager manager, PrefService prefService) {
DownloadDateTimePickerDialogCoordinator dateTimePicker =
new DownloadDateTimePickerDialogCoordinator();
DownloadLaterDialogCoordinator dialog = new DownloadLaterDialogCoordinator(dateTimePicker);
dateTimePicker.initialize(dialog);
return new DownloadLaterDialogHelper(context, manager, prefService, dialog);
}
DownloadLaterDialogHelper(Context context, ModalDialogManager manager, PrefService prefService,
DownloadLaterDialogCoordinator downloadLaterDialog) {
mContext = context;
mModalDialogManager = manager;
mPrefService = prefService;
mDownloadLaterDialog = downloadLaterDialog;
mDownloadLaterDialog.initialize(this);
}
/**
* Shows a download later dialog when the user wants to change the {@link OfflineItemSchedule}.
* @param currentSchedule The current {@link OfflineItemSchedule}.
* @param callback The callback to reply the new schedule selected by the user. May reply null
* if the user cancels the dialog.
*/
public void showChangeScheduleDialog(@Nullable final OfflineItemSchedule currentSchedule,
Callback<OfflineItemSchedule> callback) {
@DownloadLaterDialogChoice
int initialChoice = DownloadLaterDialogChoice.DOWNLOAD_NOW;
if (currentSchedule != null) {
initialChoice = currentSchedule.onlyOnWifi ? DownloadLaterDialogChoice.ON_WIFI
: DownloadLaterDialogChoice.DOWNLOAD_LATER;
}
mCallback = callback;
PropertyModel model =
new PropertyModel.Builder(DownloadLaterDialogProperties.ALL_KEYS)
.with(DownloadLaterDialogProperties.CONTROLLER, mDownloadLaterDialog)
.with(DownloadLaterDialogProperties.DOWNLOAD_TIME_INITIAL_SELECTION,
initialChoice)
.build();
mDownloadLaterDialog.showDialog(mContext, mModalDialogManager, mPrefService, model);
}
/**
* Destroys the download later dialog.
*/
public void destroy() {
mDownloadLaterDialog.destroy();
}
// DownloadLaterDialogController implementation.
@Override
public void onDownloadLaterDialogComplete(int choice, long startTime) {
if (mCallback == null) return;
OfflineItemSchedule schedule =
new OfflineItemSchedule(choice == DownloadLaterDialogChoice.ON_WIFI, startTime);
mCallback.onResult(schedule);
mCallback = null;
}
@Override
public void onDownloadLaterDialogCanceled() {
if (mCallback == null) return;
mCallback.onResult(null);
mCallback = null;
}
@Override
public void onEditLocationClicked() {
// Do nothing, no edit location text for the change schedule dialog.
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.download.dialogs;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.shadows.ShadowLog;
import org.chromium.base.Callback;
import org.chromium.chrome.browser.download.DownloadLaterPromptStatus;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.components.offline_items_collection.OfflineItemSchedule;
import org.chromium.components.prefs.PrefService;
import org.chromium.testing.local.LocalRobolectricTestRunner;
import org.chromium.ui.modaldialog.ModalDialogManager;
/**
* Unit test for {@link DownloadLaterDialogHelper}.
*/
@RunWith(LocalRobolectricTestRunner.class)
public class DownloadLaterDialogHelperUnitTest {
private static final long START_TIME = 100;
@Mock
private DownloadLaterDialogCoordinator mDownloadLaterDialog;
@Mock
private Context mContext;
@Mock
private ModalDialogManager mModalDialogManager;
@Mock
private PrefService mPrefService;
@Mock
private Callback<OfflineItemSchedule> mMockCallback;
private DownloadLaterDialogHelper mDownloadLaterDialogHelper;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ShadowLog.stream = System.out;
when(mPrefService.getInteger(Pref.DOWNLOAD_LATER_PROMPT_STATUS))
.thenReturn(DownloadLaterPromptStatus.SHOW_INITIAL);
doNothing().when(mPrefService).setInteger(anyString(), anyInt());
mDownloadLaterDialogHelper = new DownloadLaterDialogHelper(
mContext, mModalDialogManager, mPrefService, mDownloadLaterDialog);
}
@Test
public void testShowDialog() {
OfflineItemSchedule schedule = new OfflineItemSchedule(true, -1);
doAnswer(invocation -> {
mDownloadLaterDialogHelper.onDownloadLaterDialogComplete(
DownloadLaterDialogChoice.DOWNLOAD_LATER, START_TIME);
return null;
})
.when(mDownloadLaterDialog)
.showDialog(any(), any(), any(), any());
mDownloadLaterDialogHelper.showChangeScheduleDialog(schedule, mMockCallback);
verify(mDownloadLaterDialog, times(1)).showDialog(any(), any(), any(), any());
ArgumentCaptor<OfflineItemSchedule> captor =
ArgumentCaptor.forClass(OfflineItemSchedule.class);
verify(mMockCallback, times(1)).onResult(captor.capture());
Assert.assertEquals(START_TIME, captor.getValue().startTimeMs);
Assert.assertFalse(captor.getValue().onlyOnWifi);
}
@Test
public void testCancel() {
OfflineItemSchedule schedule = new OfflineItemSchedule(true, -1);
doAnswer(invocation -> {
mDownloadLaterDialogHelper.onDownloadLaterDialogCanceled();
return null;
})
.when(mDownloadLaterDialog)
.showDialog(any(), any(), any(), any());
mDownloadLaterDialogHelper.showChangeScheduleDialog(schedule, mMockCallback);
verify(mDownloadLaterDialog, times(1)).showDialog(any(), any(), any(), any());
verify(mMockCallback, times(1)).onResult(null);
}
@Test
public void testDestory() {
mDownloadLaterDialogHelper.destroy();
verify(mDownloadLaterDialog, times(1)).destroy();
verify(mMockCallback, times(0)).onResult(any());
}
}
......@@ -12,6 +12,7 @@ import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.StyleSpan;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
......@@ -119,11 +120,13 @@ public class DownloadLaterDialogView extends LinearLayout implements OnCheckedCh
void setCheckbox(@DownloadLaterPromptStatus int promptStatus) {
boolean checked = (promptStatus == DownloadLaterPromptStatus.SHOW_INITIAL)
|| (promptStatus == DownloadLaterPromptStatus.DONT_SHOW);
mCheckBox.setVisibility(VISIBLE);
mCheckBox.setChecked(checked);
}
@DownloadLaterPromptStatus
int getPromptStatus() {
Integer getPromptStatus() {
if (mCheckBox.getVisibility() == View.GONE) return null;
return mCheckBox.isChecked() ? DownloadLaterPromptStatus.DONT_SHOW
: DownloadLaterPromptStatus.SHOW_PREFERENCE;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment