summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/drawable/list_checker.xml22
-rw-r--r--res/layout/drawer_layout.xml6
-rw-r--r--res/layout/fixed_layout.xml4
-rw-r--r--res/menu/activity.xml40
-rw-r--r--res/values-night/styles.xml2
-rw-r--r--res/values-night/themes.xml38
-rw-r--r--res/values/styles.xml2
-rw-r--r--res/values/themes.xml41
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java10
-rw-r--r--src/com/android/documentsui/BaseActivity.java23
-rw-r--r--src/com/android/documentsui/CreateDirectoryFragment.java5
-rw-r--r--src/com/android/documentsui/DrawerController.java2
-rw-r--r--src/com/android/documentsui/MenuManager.java3
-rw-r--r--src/com/android/documentsui/NavigationViewManager.java3
-rw-r--r--src/com/android/documentsui/OperationDialogFragment.java7
-rw-r--r--src/com/android/documentsui/ScopedAccessActivity.java33
-rw-r--r--src/com/android/documentsui/dirlist/AnimationView.java3
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java11
-rw-r--r--src/com/android/documentsui/dirlist/RenameDocumentFragment.java10
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java4
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java8
-rw-r--r--src/com/android/documentsui/files/MenuManager.java2
-rw-r--r--src/com/android/documentsui/inspector/InspectorActivity.java3
-rw-r--r--src/com/android/documentsui/inspector/MetadataLoader.java3
-rw-r--r--src/com/android/documentsui/inspector/RuntimeDataSupplier.java19
-rw-r--r--src/com/android/documentsui/picker/ActionHandler.java14
-rw-r--r--src/com/android/documentsui/picker/OverwriteConfirmFragment.java9
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java19
-rw-r--r--src/com/android/documentsui/picker/PickFragment.java11
-rw-r--r--src/com/android/documentsui/picker/SaveFragment.java7
-rw-r--r--src/com/android/documentsui/queries/SearchViewManager.java4
-rw-r--r--src/com/android/documentsui/roots/RootsLoader.java3
-rw-r--r--src/com/android/documentsui/sidebar/RootsFragment.java13
-rw-r--r--src/com/android/documentsui/sorting/DropdownSortWidgetController.java3
-rw-r--r--src/com/android/documentsui/sorting/SortController.java7
-rw-r--r--src/com/android/documentsui/sorting/SortListFragment.java6
-rw-r--r--src/com/android/documentsui/ui/DialogController.java3
-rw-r--r--tests/common/com/android/documentsui/TestActivity.java13
-rw-r--r--tests/common/com/android/documentsui/bots/DirectoryListBot.java4
-rw-r--r--tests/common/com/android/documentsui/bots/SearchBot.java8
-rw-r--r--tests/common/com/android/documentsui/bots/UiBot.java8
-rw-r--r--tests/common/com/android/documentsui/testing/TestLoaderManager.java1
-rw-r--r--tests/common/com/android/documentsui/testing/TestMenu.java3
-rw-r--r--tests/common/com/android/documentsui/testing/TestSupportLoaderManager.java103
-rw-r--r--tests/common/com/android/documentsui/ui/TestDialogController.java3
-rw-r--r--tests/functional/com/android/documentsui/SearchViewUiTest.java27
-rw-r--r--tests/unit/com/android/documentsui/AbstractActionHandlerTest.java5
-rw-r--r--tests/unit/com/android/documentsui/inspector/DocumentLoaderTest.java6
48 files changed, 381 insertions, 203 deletions
diff --git a/res/drawable/list_checker.xml b/res/drawable/list_checker.xml
new file mode 100644
index 000000000..d0d3a1d9b
--- /dev/null
+++ b/res/drawable/list_checker.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_checked="true"
+ android:drawable="@drawable/ic_done"/>
+ <item
+ android:drawable="@android:color/transparent"/>
+</selector> \ No newline at end of file
diff --git a/res/layout/drawer_layout.xml b/res/layout/drawer_layout.xml
index 47c219c69..b319e4ee2 100644
--- a/res/layout/drawer_layout.xml
+++ b/res/layout/drawer_layout.xml
@@ -32,7 +32,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <Toolbar
+ <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
@@ -50,7 +50,7 @@
android:background="@android:color/transparent"
android:overlapAnchor="true" />
- </Toolbar>
+ </androidx.appcompat.widget.Toolbar>
<FrameLayout
android:layout_width="match_parent"
@@ -78,7 +78,7 @@
android:elevation="0dp"
android:background="?android:attr/colorPrimary">
- <Toolbar
+ <androidx.appcompat.widget.Toolbar
android:id="@+id/roots_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
diff --git a/res/layout/fixed_layout.xml b/res/layout/fixed_layout.xml
index a3933db73..f2604d962 100644
--- a/res/layout/fixed_layout.xml
+++ b/res/layout/fixed_layout.xml
@@ -28,7 +28,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <Toolbar
+ <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
@@ -43,7 +43,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
- </Toolbar>
+ </androidx.appcompat.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
diff --git a/res/menu/activity.xml b/res/menu/activity.xml
index fb53a2ad2..778e7acba 100644
--- a/res/menu/activity.xml
+++ b/res/menu/activity.xml
@@ -14,7 +14,9 @@
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- showAsAction flag impacts the behavior of SearchView.
When set to collapseActionView, collapsing SearchView to icon is the
default behavior. It would fit UX, however after expanding SearchView is
@@ -27,10 +29,10 @@
android:id="@+id/option_menu_search"
android:title="@string/menu_search"
android:icon="@drawable/ic_menu_search"
- android:showAsAction="always"
- android:actionViewClass="android.widget.SearchView"
android:imeOptions="actionSearch"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="always"
+ app:actionViewClass="androidx.appcompat.widget.SearchView"/>
<!-- This group is being hidden when searching is in full bar mode-->
<group android:id="@+id/group_hide_when_searching">
<item
@@ -38,30 +40,30 @@
android:title="Debug"
android:icon="@drawable/ic_debug_menu"
android:visible="false"
- android:showAsAction="always" />
+ app:showAsAction="always"/>
<item
android:id="@+id/option_menu_grid"
android:title="@string/menu_grid"
android:icon="@drawable/ic_menu_view_grid"
- android:showAsAction="always" />
+ app:showAsAction="always"/>
<item
android:id="@+id/option_menu_list"
android:title="@string/menu_list"
android:icon="@drawable/ic_menu_view_list"
- android:showAsAction="always" />
+ app:showAsAction="always"/>
<item
android:id="@+id/option_menu_new_window"
android:title="@string/menu_new_window"
android:alphabeticShortcut="n"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
<item
android:id="@+id/option_menu_create_dir"
android:title="@string/menu_create_dir"
android:icon="@drawable/ic_menu_new_folder"
android:alphabeticShortcut="e"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
<item
android:id="@+id/option_menu_sort"
android:title="@string/menu_sort"
@@ -71,21 +73,21 @@
android:id="@+id/option_menu_select_all"
android:title="@string/menu_select_all"
android:alphabeticShortcut="a"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
<item
android:id="@+id/option_menu_advanced"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
<item
android:id="@+id/option_menu_settings"
android:title="@string/menu_settings"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
<item
android:id="@+id/option_menu_inspect"
android:title="@string/menu_inspect"
- android:showAsAction="never"
- android:visible="false" />
+ android:visible="false"
+ app:showAsAction="never"/>
</group>
</menu>
diff --git a/res/values-night/styles.xml b/res/values-night/styles.xml
index 3a2f62729..a12bcba5c 100644
--- a/res/values-night/styles.xml
+++ b/res/values-night/styles.xml
@@ -26,7 +26,7 @@
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse</item>
</style>
- <style name="actionModeStyle" parent="@android:style/Widget.Material.ActionMode">
+ <style name="actionModeStyle" parent="Widget.AppCompat.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeBackground</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Material.Widget.ActionMode.Title.Inverse</item>
diff --git a/res/values-night/themes.xml b/res/values-night/themes.xml
index 892d67f27..733454842 100644
--- a/res/values-night/themes.xml
+++ b/res/values-night/themes.xml
@@ -23,24 +23,16 @@
<item name="snackbarButtonStyle">@style/SnackbarButtonStyle</item>
<item name="bottomSheetDialogTheme">@style/BottomSheetDialogStyle</item>
- <item name="android:windowBackground">?android:attr/colorPrimary</item>
- <item name="android:colorPrimaryDark">@color/g_grey</item>
- <item name="android:colorPrimary">@color/g_dark_grey</item>
- <item name="android:colorSecondary">@color/g_dark_grey</item>
- <item name="android:colorAccent">@color/accent_dark</item>
- <item name="android:colorBackground">?android:attr/colorPrimary</item>
- <item name="android:windowLightStatusBar">false</item>
- <item name="android:windowLightNavigationBar">false</item>
- <item name="android:queryBackground">@color/menu_search_background</item>
- <item name="android:listDivider">@drawable/list_divider</item>
- <item name="android:windowActionBar">false</item>
- <item name="android:windowActionModeOverlay">true</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
- <item name="android:actionModeBackground">?android:attr/colorBackground</item>
- <item name="android:actionModeCloseDrawable">@drawable/ic_action_clear</item>
- <item name="android:statusBarColor">?android:attr/colorPrimary</item>
-
+ <item name="colorPrimaryDark">@color/g_grey</item>
+ <item name="colorPrimary">@color/g_dark_grey</item>
+ <item name="colorSecondary">@color/g_dark_grey</item>
+ <item name="colorAccent">@color/accent_dark</item>
+
+ <item name="queryBackground">@color/menu_search_background</item>
+ <item name="windowActionBar">false</item>
+ <item name="windowActionModeOverlay">true</item>
+ <item name="windowNoTitle">true</item>
+ <item name="actionModeBackground">?android:attr/colorBackground</item>
<item name="materialCardViewStyle">@style/CardViewStyle</item>
<item name="textHandleColor">@color/text_handle_dark</item>
@@ -50,5 +42,13 @@
<item name="gridItemColor">@color/item_doc_background_dark</item>
<item name="gridItemSelectedColor">@color/item_doc_background_selected_dark</item>
<item name="gridItemDisableColor">@color/item_doc_background_disabled_dark</item>
+
+ <item name="android:windowBackground">?android:attr/colorPrimary</item>
+ <item name="android:colorBackground">?android:attr/colorPrimary</item>
+ <item name="android:statusBarColor">?android:attr/colorPrimary</item>
+ <item name="android:windowLightStatusBar">false</item>
+ <item name="android:windowLightNavigationBar">false</item>
+ <item name="android:listDivider">@drawable/list_divider</item>
+ <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
</style>
-</resources>
+</resources> \ No newline at end of file
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 20959e7b4..d79fd35b5 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -26,7 +26,7 @@
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Material.Widget.ActionBar.Subtitle</item>
</style>
- <style name="ActionModeStyle" parent="@android:style/Widget.Material.Light.ActionMode">
+ <style name="ActionModeStyle" parent="Widget.AppCompat.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeBackground</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Material.Widget.ActionMode.Title</item>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 75c5601c2..7475f514f 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -23,26 +23,17 @@
<item name="snackbarButtonStyle">@style/SnackbarButtonStyle</item>
<item name="bottomSheetDialogTheme">@style/BottomSheetDialogStyle</item>
- <item name="android:windowBackground">?android:attr/colorPrimary</item>
- <item name="android:colorPrimaryDark">@color/g_grey</item>
- <item name="android:colorPrimary">@color/primary</item>
- <item name="android:colorSecondary">@color/primary</item>
- <item name="android:colorAccent">@color/accent</item>
- <item name="android:colorBackground">?android:attr/colorPrimary</item>
- <item name="android:windowLightStatusBar">true</item>
- <item name="android:windowLightNavigationBar">true</item>
- <item name="android:queryBackground">@color/menu_search_background</item>
- <item name="android:listDivider">@drawable/list_divider</item>
- <item name="android:windowActionBar">false</item>
- <item name="android:windowActionModeOverlay">true</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
- <item name="android:actionModeBackground">?android:attr/colorBackground</item>
- <item name="android:actionModeCloseDrawable">@drawable/ic_action_clear</item>
- <item name="android:statusBarColor">?android:attr/colorPrimary</item>
- <item name="android:navigationBarColor">?android:attr/colorPrimary</item>
- <item name="android:navigationBarDividerColor">@color/drawer_border</item>
-
+ <item name="colorPrimaryDark">@color/g_grey</item>
+ <item name="colorPrimary">@android:color/white</item>
+ <item name="colorSecondary">@android:color/white</item>
+ <item name="colorAccent">@color/accent</item>
+
+ <item name="queryBackground">@color/menu_search_background</item>
+ <item name="windowActionBar">false</item>
+ <item name="windowActionModeOverlay">true</item>
+ <item name="windowNoTitle">true</item>
+ <item name="actionModeBackground">?android:attr/colorBackground</item>
+ <item name="actionModeCloseDrawable">@drawable/ic_action_clear</item>
<item name="materialCardViewStyle">@style/CardViewStyle</item>
<item name="textHandleColor">@color/text_handle</item>
@@ -52,5 +43,15 @@
<item name="gridItemColor">@color/item_doc_background</item>
<item name="gridItemSelectedColor">@color/item_doc_background_selected</item>
<item name="gridItemDisableColor">@color/item_doc_background_disabled</item>
+
+ <item name="android:windowBackground">?android:attr/colorPrimary</item>
+ <item name="android:colorBackground">?android:attr/colorPrimary</item>
+ <item name="android:statusBarColor">?android:attr/colorPrimary</item>
+ <item name="android:navigationBarColor">?android:attr/colorPrimary</item>
+ <item name="android:navigationBarDividerColor">@color/drawer_border</item>
+ <item name="android:windowLightStatusBar">true</item>
+ <item name="android:windowLightNavigationBar">true</item>
+ <item name="android:listDivider">@drawable/list_divider</item>
+ <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
</style>
</resources> \ No newline at end of file
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index 1ded9f697..a95b1ec9f 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -20,7 +20,6 @@ import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.app.PendingIntent;
import android.content.Context;
@@ -39,6 +38,7 @@ import android.util.Pair;
import android.view.DragEvent;
import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import androidx.recyclerview.selection.MutableSelection;
import androidx.recyclerview.selection.SelectionTracker;
@@ -77,7 +77,7 @@ import javax.annotation.Nullable;
/**
* Provides support for specializing the actions (openDocument etc.) to the host activity.
*/
-public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
+public abstract class AbstractActionHandler<T extends FragmentActivity & CommonAddons>
implements ActionHandler {
@VisibleForTesting
@@ -175,7 +175,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
}
private void onAuthenticationResult(int resultCode) {
- if (resultCode == Activity.RESULT_OK) {
+ if (resultCode == FragmentActivity.RESULT_OK) {
Log.v(TAG, "Authentication was successful. Refreshing directory now.");
mActivity.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
}
@@ -305,12 +305,12 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
public void showCreateDirectoryDialog() {
Metrics.logUserAction(mActivity, Metrics.USER_ACTION_CREATE_DIR);
- CreateDirectoryFragment.show(mActivity.getFragmentManager());
+ CreateDirectoryFragment.show(mActivity.getSupportFragmentManager());
}
@Override
public void showSortDialog() {
- SortListFragment.show(mActivity.getFragmentManager(), mState.sortModel);
+ SortListFragment.show(mActivity.getSupportFragmentManager(), mState.sortModel);
}
@Override
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 8b2003748..4a7764e51 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -20,8 +20,6 @@ import static com.android.documentsui.base.Shared.EXTRA_BENCHMARK;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.State.MODE_GRID;
-import android.app.Activity;
-import android.app.Fragment;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -36,11 +34,13 @@ import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.widget.Toolbar;
import androidx.annotation.CallSuper;
import androidx.annotation.LayoutRes;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.fragment.app.Fragment;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.Injector.Injected;
@@ -72,7 +72,7 @@ import java.util.List;
import javax.annotation.Nullable;
public abstract class BaseActivity
- extends Activity implements CommonAddons, NavigationViewManager.Environment {
+ extends AppCompatActivity implements CommonAddons, NavigationViewManager.Environment {
private static final String BENCHMARK_TESTING_PACKAGE = "com.android.documentsui.appperftests";
@@ -136,7 +136,7 @@ public abstract class BaseActivity
mDocs = DocumentsAccess.create(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setActionBar(toolbar);
+ setSupportActionBar(toolbar);
Breadcrumb breadcrumb =
Shared.findView(this, R.id.dropdown_breadcrumb, R.id.horizontal_breadcrumb);
@@ -194,7 +194,7 @@ public abstract class BaseActivity
mPreferencesMonitor.start();
// Base classes must update result in their onCreate.
- setResult(Activity.RESULT_CANCELED);
+ setResult(AppCompatActivity.RESULT_CANCELED);
}
public void onPreferenceChanged(String pref) {
@@ -366,7 +366,7 @@ public abstract class BaseActivity
}
protected final @Nullable DirectoryFragment getDirectoryFragment() {
- return DirectoryFragment.get(getFragmentManager());
+ return DirectoryFragment.get(getSupportFragmentManager());
}
/**
@@ -401,7 +401,7 @@ public abstract class BaseActivity
// chance to spawn a fragment before we need to do it now. However if we spawned a fragment
// already, system will automatically restore the fragment for us so we don't need to do
// that manually this time.
- if (DirectoryFragment.get(getFragmentManager()) == null) {
+ if (DirectoryFragment.get(getSupportFragmentManager()) == null) {
refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
}
}
@@ -425,7 +425,7 @@ public abstract class BaseActivity
refreshDirectory(anim);
- final RootsFragment roots = RootsFragment.get(getFragmentManager());
+ final RootsFragment roots = RootsFragment.get(getSupportFragmentManager());
if (roots != null) {
roots.onCurrentRootChanged();
}
@@ -478,7 +478,7 @@ public abstract class BaseActivity
private void updateDisplayAdvancedDevices(boolean display) {
mState.showAdvanced = display;
- @Nullable RootsFragment fragment = RootsFragment.get(getFragmentManager());
+ @Nullable RootsFragment fragment = RootsFragment.get(getSupportFragmentManager());
if (fragment != null) {
// This also takes care of updating launcher shortcuts (which are roots :)
fragment.onDisplayStateChanged();
@@ -580,6 +580,7 @@ public abstract class BaseActivity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
mInjector.actions.onActivityResult(requestCode, resultCode, data);
}
@@ -599,7 +600,7 @@ public abstract class BaseActivity
}
protected boolean focusSidebar() {
- RootsFragment rf = RootsFragment.get(getFragmentManager());
+ RootsFragment rf = RootsFragment.get(getSupportFragmentManager());
assert (rf != null);
return rf.requestFocus();
}
diff --git a/src/com/android/documentsui/CreateDirectoryFragment.java b/src/com/android/documentsui/CreateDirectoryFragment.java
index 76534d7e4..addb7897e 100644
--- a/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -20,8 +20,6 @@ import static com.android.documentsui.base.SharedMinimal.TAG;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
@@ -33,6 +31,9 @@ import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java
index 3a7e8a213..613ac3a8a 100644
--- a/src/com/android/documentsui/DrawerController.java
+++ b/src/com/android/documentsui/DrawerController.java
@@ -21,12 +21,12 @@ import static com.android.documentsui.base.SharedMinimal.DEBUG;
import androidx.annotation.IntDef;
import android.app.Activity;
import androidx.annotation.ColorRes;
+import androidx.appcompat.widget.Toolbar;
import androidx.legacy.app.ActionBarDrawerToggle;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener;
import android.util.Log;
import android.view.View;
-import android.widget.Toolbar;
import com.android.documentsui.base.Display;
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 6e34bb88f..fa60b6f70 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -16,8 +16,6 @@
package com.android.documentsui;
-import android.app.Fragment;
-import android.util.Log;
import android.view.KeyboardShortcutGroup;
import android.view.Menu;
import android.view.MenuInflater;
@@ -33,6 +31,7 @@ import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.sidebar.RootsFragment;
import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.Fragment;
import java.util.List;
import java.util.function.IntFunction;
diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java
index 2012415a9..c96682607 100644
--- a/src/com/android/documentsui/NavigationViewManager.java
+++ b/src/com/android/documentsui/NavigationViewManager.java
@@ -19,10 +19,11 @@ package com.android.documentsui;
import static com.android.documentsui.base.SharedMinimal.VERBOSE;
import androidx.annotation.Nullable;
+import androidx.appcompat.widget.Toolbar;
+
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
-import android.widget.Toolbar;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
diff --git a/src/com/android/documentsui/OperationDialogFragment.java b/src/com/android/documentsui/OperationDialogFragment.java
index 7fd31636e..7b36599e9 100644
--- a/src/com/android/documentsui/OperationDialogFragment.java
+++ b/src/com/android/documentsui/OperationDialogFragment.java
@@ -18,13 +18,14 @@ package com.android.documentsui;
import androidx.annotation.IntDef;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
import android.text.Html;
import com.android.documentsui.base.DocumentInfo;
diff --git a/src/com/android/documentsui/ScopedAccessActivity.java b/src/com/android/documentsui/ScopedAccessActivity.java
index 2c5081c1e..3e606bc61 100644
--- a/src/com/android/documentsui/ScopedAccessActivity.java
+++ b/src/com/android/documentsui/ScopedAccessActivity.java
@@ -16,55 +16,47 @@
package com.android.documentsui;
-import static android.os.Environment.isStandardDirectory;
import static android.os.storage.StorageVolume.EXTRA_DIRECTORY_NAME;
import static android.os.storage.StorageVolume.EXTRA_STORAGE_VOLUME;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_DENIED;
-import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST;
+import static com.android.documentsui.ScopedAccessMetrics
+ .SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_ERROR;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_GRANTED;
import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS;
-import static com.android.documentsui.ScopedAccessMetrics.SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY;
import static com.android.documentsui.ScopedAccessMetrics.logInvalidScopedAccessRequest;
import static com.android.documentsui.ScopedAccessMetrics.logValidScopedAccessRequest;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.SharedMinimal.DIRECTORY_ROOT;
-import static com.android.documentsui.base.SharedMinimal.getUriPermission;
import static com.android.documentsui.base.SharedMinimal.getInternalDirectoryName;
+import static com.android.documentsui.base.SharedMinimal.getUriPermission;
import static com.android.documentsui.prefs.ScopedAccessLocalPreferences.PERMISSION_ASK_AGAIN;
import static com.android.documentsui.prefs.ScopedAccessLocalPreferences.PERMISSION_NEVER_ASK;
-import static com.android.documentsui.prefs.ScopedAccessLocalPreferences.getScopedAccessPermissionStatus;
-import static com.android.documentsui.prefs.ScopedAccessLocalPreferences.setScopedAccessPermissionStatus;
+import static com.android.documentsui.prefs.ScopedAccessLocalPreferences
+ .getScopedAccessPermissionStatus;
+import static com.android.documentsui.prefs.ScopedAccessLocalPreferences
+ .setScopedAccessPermissionStatus;
-import androidx.annotation.Nullable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.app.GrantedUriPermission;
import android.content.ContentProviderClient;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
-import android.content.UriPermission;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.os.UserHandle;
-import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
-import android.os.storage.VolumeInfo;
-import android.provider.DocumentsContract;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -73,16 +65,19 @@ import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
import com.android.documentsui.base.Providers;
import java.io.File;
-import java.io.IOException;
-import java.util.List;
/**
* Activity responsible for handling {@link StorageVolume#createAccessIntent(String)}.
*/
-public class ScopedAccessActivity extends Activity {
+public class ScopedAccessActivity extends AppCompatActivity {
private static final String TAG = "ScopedAccessActivity";
private static final String FM_TAG = "open_external_directory";
private static final String EXTRA_FILE = "com.android.documentsui.FILE";
@@ -185,7 +180,7 @@ public class ScopedAccessActivity extends Activity {
args.putBoolean(EXTRA_IS_ROOT, isRoot);
args.putBoolean(EXTRA_IS_PRIMARY, isPrimary);
- final FragmentManager fm = activity.getFragmentManager();
+ final FragmentManager fm = activity.getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
final ScopedAccessDialogFragment fragment = new ScopedAccessDialogFragment();
fragment.setArguments(args);
diff --git a/src/com/android/documentsui/dirlist/AnimationView.java b/src/com/android/documentsui/dirlist/AnimationView.java
index fdeb6d4c1..d17bddf98 100644
--- a/src/com/android/documentsui/dirlist/AnimationView.java
+++ b/src/com/android/documentsui/dirlist/AnimationView.java
@@ -17,7 +17,8 @@
package com.android.documentsui.dirlist;
import androidx.annotation.IntDef;
-import android.app.FragmentTransaction;
+import androidx.fragment.app.FragmentTransaction;
+
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index bfa5b0259..2f7de3bb7 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -25,11 +25,7 @@ import static com.android.documentsui.base.State.MODE_LIST;
import androidx.annotation.DimenRes;
import androidx.annotation.FractionRes;
import androidx.annotation.IntDef;
-import android.app.Activity;
import android.app.ActivityManager;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
@@ -51,6 +47,10 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import androidx.recyclerview.selection.MutableSelection;
import androidx.recyclerview.selection.Selection;
@@ -246,7 +246,6 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
@Override
public void onDestroyView() {
- mSelectionMgr.clearSelection();
mInjector.actions.unregisterDisplayStateChangedListener(mOnDisplayStateChanged);
// Cancel any outstanding thumbnail requests
@@ -454,7 +453,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
FileOperation operation = mLocalState.claimPendingOperation();
- if (resultCode == Activity.RESULT_CANCELED || data == null) {
+ if (resultCode == FragmentActivity.RESULT_CANCELED || data == null) {
// User pressed the back button or otherwise cancelled the destination pick. Don't
// proceed with the copy.
operation.dispose();
diff --git a/src/com/android/documentsui/dirlist/RenameDocumentFragment.java b/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
index 03fcf2719..b950aa8d1 100644
--- a/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
+++ b/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
@@ -20,18 +20,14 @@ import static com.android.documentsui.base.SharedMinimal.TAG;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.provider.DocumentsContract;
import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 69319d325..a7cbf06bc 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -18,7 +18,6 @@ package com.android.documentsui.files;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ContentProviderClient;
@@ -30,6 +29,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.DragEvent;
+import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import androidx.recyclerview.selection.MutableSelection;
import androidx.recyclerview.selection.Selection;
@@ -80,7 +80,7 @@ import javax.annotation.Nullable;
/**
* Provides {@link FilesActivity} action specializations to fragments.
*/
-public class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T> {
+public class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionHandler<T> {
private static final String TAG = "ManagerActionHandler";
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index 5db68344c..fd05f666b 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -19,7 +19,6 @@ package com.android.documentsui.files;
import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_UNKNOWN;
import android.app.ActivityManager.TaskDescription;
-import android.app.FragmentManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@@ -29,6 +28,7 @@ import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.CallSuper;
+import androidx.fragment.app.FragmentManager;
import com.android.documentsui.ActionModeController;
import com.android.documentsui.BaseActivity;
@@ -154,7 +154,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
mInjector.features,
mDrawer);
- RootsFragment.show(getFragmentManager(), null);
+ RootsFragment.show(getSupportFragmentManager(), null);
final Intent intent = getIntent();
@@ -206,7 +206,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
final ArrayList<Uri> uriList =
intent.getParcelableArrayListExtra(FileOperationService.EXTRA_FAILED_URIS);
OperationDialogFragment.show(
- getFragmentManager(),
+ getSupportFragmentManager(),
dialogType,
docList,
uriList,
@@ -310,7 +310,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
@Override
public void refreshDirectory(@AnimationType int anim) {
- final FragmentManager fm = getFragmentManager();
+ final FragmentManager fm = getSupportFragmentManager();
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index e89b4084f..7c302f5a7 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -16,7 +16,6 @@
package com.android.documentsui.files;
-import android.app.Fragment;
import android.content.Context;
import android.content.res.Resources;
import android.net.Uri;
@@ -28,6 +27,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import androidx.fragment.app.Fragment;
import androidx.recyclerview.selection.SelectionTracker;
import com.android.documentsui.R;
diff --git a/src/com/android/documentsui/inspector/InspectorActivity.java b/src/com/android/documentsui/inspector/InspectorActivity.java
index ec973de37..4990ca4f8 100644
--- a/src/com/android/documentsui/inspector/InspectorActivity.java
+++ b/src/com/android/documentsui/inspector/InspectorActivity.java
@@ -28,6 +28,7 @@ import android.view.View;
import androidx.annotation.ColorInt;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+import androidx.loader.app.LoaderManager;
import com.android.documentsui.R;
import com.android.documentsui.base.Shared;
@@ -55,7 +56,7 @@ public class InspectorActivity extends AppCompatActivity {
AppBarLayout appBarLayout = findViewById(R.id.appBar);
appBarLayout.addOnOffsetChangedListener(this::onOffsetChanged);
- final DataSupplier loader = new RuntimeDataSupplier(this, getLoaderManager());
+ final DataSupplier loader = new RuntimeDataSupplier(this, LoaderManager.getInstance(this));
mView = findViewById(R.id.inspector_root);
mController = new InspectorController(this, loader, mView,
diff --git a/src/com/android/documentsui/inspector/MetadataLoader.java b/src/com/android/documentsui/inspector/MetadataLoader.java
index ae447645c..3d12d4e2c 100644
--- a/src/com/android/documentsui/inspector/MetadataLoader.java
+++ b/src/com/android/documentsui/inspector/MetadataLoader.java
@@ -15,12 +15,13 @@
*/
package com.android.documentsui.inspector;
-import android.content.AsyncTaskLoader;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.provider.DocumentsContract;
import androidx.annotation.Nullable;
+import androidx.loader.content.AsyncTaskLoader;
+
import android.util.Log;
import java.io.FileNotFoundException;
diff --git a/src/com/android/documentsui/inspector/RuntimeDataSupplier.java b/src/com/android/documentsui/inspector/RuntimeDataSupplier.java
index 1b7ff84ea..a7bac8140 100644
--- a/src/com/android/documentsui/inspector/RuntimeDataSupplier.java
+++ b/src/com/android/documentsui/inspector/RuntimeDataSupplier.java
@@ -17,10 +17,7 @@ package com.android.documentsui.inspector;
import static androidx.core.util.Preconditions.checkArgument;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
-import android.content.CursorLoader;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -29,6 +26,10 @@ import android.os.Handler;
import android.os.Looper;
import android.provider.DocumentsContract;
import androidx.annotation.Nullable;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.app.LoaderManager.LoaderCallbacks;
+import androidx.loader.content.CursorLoader;
+import androidx.loader.content.Loader;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.inspector.InspectorController.DataSupplier;
@@ -109,17 +110,17 @@ public class RuntimeDataSupplier implements DataSupplier {
public void getDocumentMetadata(Uri uri, Consumer<Bundle> callback) {
mMetadataCallbacks = new LoaderCallbacks<Bundle>() {
@Override
- public android.content.Loader<Bundle> onCreateLoader(int id, Bundle unused) {
+ public Loader<Bundle> onCreateLoader(int id, Bundle unused) {
return new MetadataLoader(mContext, uri);
}
@Override
- public void onLoadFinished(android.content.Loader<Bundle> loader, Bundle data) {
+ public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
callback.accept(data);
}
@Override
- public void onLoaderReset(android.content.Loader<Bundle> loader) {
+ public void onLoaderReset(Loader<Bundle> loader) {
}
};
@@ -173,12 +174,12 @@ public class RuntimeDataSupplier implements DataSupplier {
}
@Override
- public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(mContext, mUri, null, null, null, null);
}
@Override
- public void onLoadFinished(android.content.Loader<Cursor> loader, Cursor cursor) {
+ public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor != null) {
mObserver = new InspectorContentObserver(loader::onContentChanged);
@@ -189,7 +190,7 @@ public class RuntimeDataSupplier implements DataSupplier {
}
@Override
- public void onLoaderReset(android.content.Loader<Cursor> loader) {
+ public void onLoaderReset(Loader<Cursor> loader) {
if (mObserver != null) {
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
diff --git a/src/com/android/documentsui/picker/ActionHandler.java b/src/com/android/documentsui/picker/ActionHandler.java
index ff8a2dd71..ca4679b7a 100644
--- a/src/com/android/documentsui/picker/ActionHandler.java
+++ b/src/com/android/documentsui/picker/ActionHandler.java
@@ -23,8 +23,6 @@ import static com.android.documentsui.base.State.ACTION_OPEN;
import static com.android.documentsui.base.State.ACTION_OPEN_TREE;
import static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;
-import android.app.Activity;
-import android.app.FragmentManager;
import android.content.ClipData;
import android.content.ComponentName;
import android.content.Intent;
@@ -36,6 +34,8 @@ import android.provider.DocumentsContract;
import android.provider.Settings;
import android.util.Log;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import com.android.documentsui.AbstractActionHandler;
@@ -67,7 +67,7 @@ import javax.annotation.Nullable;
/**
* Provides {@link PickActivity} action specializations to fragments.
*/
-class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T> {
+class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionHandler<T> {
private static final String TAG = "PickerActionHandler";
@@ -208,7 +208,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
}
private void onExternalAppResult(int resultCode, Intent data) {
- if (resultCode != Activity.RESULT_CANCELED) {
+ if (resultCode != FragmentActivity.RESULT_CANCELED) {
// Remember that we last picked via external app
mLastAccessed.setLastAccessedToExternalApp(mActivity);
@@ -361,7 +361,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
}
- mActivity.setResult(Activity.RESULT_OK, intent, 0);
+ mActivity.setResult(FragmentActivity.RESULT_OK, intent, 0);
mActivity.finish();
}
@@ -379,8 +379,8 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
void onDocumentPicked(DocumentInfo doc);
/**
- * Overload final method {@link Activity#setResult(int, Intent)} so that we can intercept
- * this method call in test environment.
+ * Overload final method {@link FragmentActivity#setResult(int, Intent)} so that we can
+ * intercept this method call in test environment.
*/
@VisibleForTesting
void setResult(int resultCode, Intent result, int notUsed);
diff --git a/src/com/android/documentsui/picker/OverwriteConfirmFragment.java b/src/com/android/documentsui/picker/OverwriteConfirmFragment.java
index e4cb62341..5c36fe9d8 100644
--- a/src/com/android/documentsui/picker/OverwriteConfirmFragment.java
+++ b/src/com/android/documentsui/picker/OverwriteConfirmFragment.java
@@ -18,13 +18,14 @@ package com.android.documentsui.picker;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.content.DialogInterface;
import android.os.Bundle;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Shared;
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 4e1556275..76312a0da 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -22,13 +22,14 @@ import static com.android.documentsui.base.State.ACTION_OPEN;
import static com.android.documentsui.base.State.ACTION_OPEN_TREE;
import static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;
-import android.app.Fragment;
-import android.app.FragmentManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.DocumentsContract;
import androidx.annotation.CallSuper;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
import android.view.KeyEvent;
import android.view.Menu;
@@ -142,22 +143,22 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
if (mState.action == ACTION_CREATE) {
final String mimeType = intent.getType();
final String title = intent.getStringExtra(Intent.EXTRA_TITLE);
- SaveFragment.show(getFragmentManager(), mimeType, title);
+ SaveFragment.show(getSupportFragmentManager(), mimeType, title);
} else if (mState.action == ACTION_OPEN_TREE ||
mState.action == ACTION_PICK_COPY_DESTINATION) {
- PickFragment.show(getFragmentManager());
+ PickFragment.show(getSupportFragmentManager());
}
if (mState.action == ACTION_GET_CONTENT) {
final Intent moreApps = new Intent(intent);
moreApps.setComponent(null);
moreApps.setPackage(null);
- RootsFragment.show(getFragmentManager(), moreApps);
+ RootsFragment.show(getSupportFragmentManager(), moreApps);
} else if (mState.action == ACTION_OPEN ||
mState.action == ACTION_CREATE ||
mState.action == ACTION_OPEN_TREE ||
mState.action == ACTION_PICK_COPY_DESTINATION) {
- RootsFragment.show(getFragmentManager(), (Intent) null);
+ RootsFragment.show(getSupportFragmentManager(), (Intent) null);
}
}
@@ -238,7 +239,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
final DocumentInfo cwd = getCurrentDirectory();
if (mState.action == ACTION_CREATE) {
- final FragmentManager fm = getFragmentManager();
+ final FragmentManager fm = getSupportFragmentManager();
SaveFragment.get(fm).prepareForDirectory(cwd);
}
@@ -247,7 +248,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
@Override
protected void refreshDirectory(int anim) {
- final FragmentManager fm = getFragmentManager();
+ final FragmentManager fm = getSupportFragmentManager();
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
@@ -291,7 +292,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
@Override
public void onDocumentPicked(DocumentInfo doc) {
- final FragmentManager fm = getFragmentManager();
+ final FragmentManager fm = getSupportFragmentManager();
// Do not inline-open archives, as otherwise it would be impossible to pick
// archive files. Note, that picking files inside archives is not supported.
if (doc.isDirectory()) {
diff --git a/src/com/android/documentsui/picker/PickFragment.java b/src/com/android/documentsui/picker/PickFragment.java
index 3649cf409..bdb9f8058 100644
--- a/src/com/android/documentsui/picker/PickFragment.java
+++ b/src/com/android/documentsui/picker/PickFragment.java
@@ -23,10 +23,6 @@ import static com.android.documentsui.services.FileOperationService.OPERATION_EX
import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
import static com.android.documentsui.services.FileOperationService.OPERATION_UNKNOWN;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -34,6 +30,11 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
import com.android.documentsui.BaseActivity;
import com.android.documentsui.Injector;
import com.android.documentsui.R;
@@ -62,7 +63,7 @@ public class PickFragment extends Fragment {
@Override
public void onClick(View v) {
final BaseActivity activity = BaseActivity.get(PickFragment.this);
- activity.setResult(Activity.RESULT_CANCELED);
+ activity.setResult(FragmentActivity.RESULT_CANCELED);
activity.finish();
}
};
diff --git a/src/com/android/documentsui/picker/SaveFragment.java b/src/com/android/documentsui/picker/SaveFragment.java
index 9bdb27222..f881768b9 100644
--- a/src/com/android/documentsui/picker/SaveFragment.java
+++ b/src/com/android/documentsui/picker/SaveFragment.java
@@ -16,9 +16,6 @@
package com.android.documentsui.picker;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
@@ -34,6 +31,10 @@ import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
import com.android.documentsui.IconUtils;
import com.android.documentsui.Injector;
import com.android.documentsui.R;
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index 14fb1e933..70c893a43 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -31,8 +31,6 @@ import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
-import android.widget.SearchView;
-import android.widget.SearchView.OnQueryTextListener;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
@@ -42,6 +40,8 @@ import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import androidx.annotation.GuardedBy;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.widget.SearchView;
+import androidx.appcompat.widget.SearchView.OnQueryTextListener;
import java.util.Timer;
import java.util.TimerTask;
diff --git a/src/com/android/documentsui/roots/RootsLoader.java b/src/com/android/documentsui/roots/RootsLoader.java
index c6687c464..f197c77d3 100644
--- a/src/com/android/documentsui/roots/RootsLoader.java
+++ b/src/com/android/documentsui/roots/RootsLoader.java
@@ -16,11 +16,12 @@
package com.android.documentsui.roots;
-import android.content.AsyncTaskLoader;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+
+import androidx.loader.content.AsyncTaskLoader;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.android.documentsui.base.RootInfo;
diff --git a/src/com/android/documentsui/sidebar/RootsFragment.java b/src/com/android/documentsui/sidebar/RootsFragment.java
index c77baa3e2..62fdf0584 100644
--- a/src/com/android/documentsui/sidebar/RootsFragment.java
+++ b/src/com/android/documentsui/sidebar/RootsFragment.java
@@ -20,13 +20,8 @@ import static com.android.documentsui.base.Shared.compareToIgnoreCaseNullable;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.SharedMinimal.VERBOSE;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
import android.content.Intent;
-import android.content.Loader;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Color;
@@ -50,6 +45,12 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.app.LoaderManager.LoaderCallbacks;
+import androidx.loader.content.Loader;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -416,7 +417,7 @@ public class RootsFragment extends Fragment {
mList.setLongClickable(false);
}
- getLoaderManager().restartLoader(2, null, mCallbacks);
+ LoaderManager.getInstance(this).restartLoader(2, null, mCallbacks);
}
public void onCurrentRootChanged() {
diff --git a/src/com/android/documentsui/sorting/DropdownSortWidgetController.java b/src/com/android/documentsui/sorting/DropdownSortWidgetController.java
index 6dba172af..9e3a9c72a 100644
--- a/src/com/android/documentsui/sorting/DropdownSortWidgetController.java
+++ b/src/com/android/documentsui/sorting/DropdownSortWidgetController.java
@@ -16,10 +16,11 @@
package com.android.documentsui.sorting;
-import android.app.FragmentManager;
import android.view.View;
import android.widget.TextView;
+import androidx.fragment.app.FragmentManager;
+
import com.android.documentsui.R;
import com.android.documentsui.sorting.SortController.WidgetController;
import com.android.documentsui.sorting.SortModel.SortDimensionId;
diff --git a/src/com/android/documentsui/sorting/SortController.java b/src/com/android/documentsui/sorting/SortController.java
index 037a69c93..62e5741b7 100644
--- a/src/com/android/documentsui/sorting/SortController.java
+++ b/src/com/android/documentsui/sorting/SortController.java
@@ -17,7 +17,8 @@
package com.android.documentsui.sorting;
import androidx.annotation.Nullable;
-import android.app.Activity;
+import androidx.fragment.app.FragmentActivity;
+
import android.view.View;
import com.android.documentsui.Metrics;
@@ -73,7 +74,7 @@ public final class SortController {
}
public static SortController create(
- Activity activity,
+ FragmentActivity activity,
@ViewMode int initialMode,
SortModel sortModel) {
@@ -95,7 +96,7 @@ public final class SortController {
new DropdownSortWidgetController(
sortModel,
activity.findViewById(R.id.dropdown_sort_widget),
- activity.getFragmentManager()),
+ activity.getSupportFragmentManager()),
TableHeaderController.create(
sortModel,
activity.findViewById(R.id.table_header)));
diff --git a/src/com/android/documentsui/sorting/SortListFragment.java b/src/com/android/documentsui/sorting/SortListFragment.java
index e577f3b1f..3a602f199 100644
--- a/src/com/android/documentsui/sorting/SortListFragment.java
+++ b/src/com/android/documentsui/sorting/SortListFragment.java
@@ -1,8 +1,6 @@
package com.android.documentsui.sorting;
import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
@@ -14,6 +12,8 @@ import android.widget.FrameLayout;
import android.widget.ListView;
import androidx.annotation.StringRes;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
import com.android.documentsui.R;
import com.android.documentsui.sorting.SortDimension.SortDirection;
@@ -154,7 +154,7 @@ public class SortListFragment extends DialogFragment {
boolean selected = item.id == mModel.getSortedDimensionId()
&& item.direction == mModel.getCurrentSortDirection();
text.setChecked(selected);
- text.setCheckMarkDrawable(selected ? R.drawable.ic_done : 0);
+ text.setCheckMarkDrawable(R.drawable.list_checker);
return view;
}
}
diff --git a/src/com/android/documentsui/ui/DialogController.java b/src/com/android/documentsui/ui/DialogController.java
index 6b46ea41e..67ea5c5bf 100644
--- a/src/com/android/documentsui/ui/DialogController.java
+++ b/src/com/android/documentsui/ui/DialogController.java
@@ -17,11 +17,12 @@ package com.android.documentsui.ui;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.FragmentManager;
import android.content.DialogInterface;
import android.widget.Button;
import android.widget.TextView;
+import androidx.fragment.app.FragmentManager;
+
import com.google.android.material.snackbar.Snackbar;
import com.android.documentsui.R;
diff --git a/tests/common/com/android/documentsui/TestActivity.java b/tests/common/com/android/documentsui/TestActivity.java
index 3cdf78913..103fb404b 100644
--- a/tests/common/com/android/documentsui/TestActivity.java
+++ b/tests/common/com/android/documentsui/TestActivity.java
@@ -19,7 +19,8 @@ package com.android.documentsui;
import static junit.framework.Assert.assertEquals;
import androidx.annotation.Nullable;
-import android.app.Activity;
+import androidx.fragment.app.FragmentActivity;
+
import android.app.ActivityManager;
import android.app.LoaderManager;
import android.content.ComponentName;
@@ -42,6 +43,7 @@ import com.android.documentsui.testing.TestEventListener;
import com.android.documentsui.testing.TestLoaderManager;
import com.android.documentsui.testing.TestPackageManager;
import com.android.documentsui.testing.TestResources;
+import com.android.documentsui.testing.TestSupportLoaderManager;
import org.mockito.Mockito;
@@ -57,6 +59,7 @@ public abstract class TestActivity extends AbstractBase {
public RootInfo currentRoot;
public MockContentResolver contentResolver;
public TestLoaderManager loaderManager;
+ public TestSupportLoaderManager supportLoaderManager;
public ActivityManager activityManager;
public TestEventListener<Intent> startActivity;
@@ -90,6 +93,7 @@ public abstract class TestActivity extends AbstractBase {
notifyDirectoryNavigated = new TestEventListener<>();
contentResolver = env.contentResolver;
loaderManager = new TestLoaderManager();
+ supportLoaderManager = new TestSupportLoaderManager();
finishedHandler = new TestEventHandler<>();
}
@@ -198,6 +202,11 @@ public abstract class TestActivity extends AbstractBase {
}
@Override
+ public final androidx.loader.app.LoaderManager getSupportLoaderManager() {
+ return supportLoaderManager;
+ }
+
+ @Override
public final Object getSystemService(String service) {
switch (service) {
case Context.ACTIVITY_SERVICE:
@@ -215,4 +224,4 @@ public abstract class TestActivity extends AbstractBase {
// Trick Mockito into finding our Addons methods correctly. W/o this
// hack, Mockito thinks Addons methods are not implemented.
-abstract class AbstractBase extends Activity implements CommonAddons {}
+abstract class AbstractBase extends FragmentActivity implements CommonAddons {}
diff --git a/tests/common/com/android/documentsui/bots/DirectoryListBot.java b/tests/common/com/android/documentsui/bots/DirectoryListBot.java
index 4b1123235..cb287dbff 100644
--- a/tests/common/com/android/documentsui/bots/DirectoryListBot.java
+++ b/tests/common/com/android/documentsui/bots/DirectoryListBot.java
@@ -161,6 +161,10 @@ public class DirectoryListBot extends Bots.BaseBot {
"com.android.documentsui:id/message");
}
+ public void waitForHolderMessage() {
+ findPlaceholderMessageTextView().waitForExists(mTimeout);
+ }
+
public void assertSnackbar(int id) {
assertNotNull(getSnackbar(mContext.getString(id)));
}
diff --git a/tests/common/com/android/documentsui/bots/SearchBot.java b/tests/common/com/android/documentsui/bots/SearchBot.java
index fdd7a6cc9..0e2b7b132 100644
--- a/tests/common/com/android/documentsui/bots/SearchBot.java
+++ b/tests/common/com/android/documentsui/bots/SearchBot.java
@@ -58,7 +58,7 @@ public class SearchBot extends Bots.BaseBot {
// require this input be not clickable.
@SuppressWarnings("unchecked")
private static final Matcher<View> SEARCH_INPUT = allOf(
- withId(R.id.option_menu_search),
+ withId(R.id.search_src_text),
isDisplayed());
public SearchBot(UiDevice device, Context context, int timeout) {
@@ -113,12 +113,14 @@ public class SearchBot extends Bots.BaseBot {
}
private UiObject findSearchViewTextField() {
- return findObject("com.android.documentsui:id/option_menu_search", "android:id/search_src_text");
+ return findObject("com.android.documentsui:id/option_menu_search",
+ "com.android.documentsui:id/search_src_text");
}
private UiObject findSearchViewIcon() {
return mContext.getResources().getBoolean(R.bool.full_bar_search_view)
? findObject("com.android.documentsui:id/option_menu_search")
- : findObject("com.android.documentsui:id/option_menu_search", "android:id/search_button");
+ : findObject("com.android.documentsui:id/option_menu_search",
+ "android:id/search_button");
}
}
diff --git a/tests/common/com/android/documentsui/bots/UiBot.java b/tests/common/com/android/documentsui/bots/UiBot.java
index 11b98cc00..0d28c058c 100644
--- a/tests/common/com/android/documentsui/bots/UiBot.java
+++ b/tests/common/com/android/documentsui/bots/UiBot.java
@@ -44,7 +44,8 @@ import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.util.TypedValue;
import android.view.View;
-import android.widget.Toolbar;
+
+import androidx.appcompat.widget.Toolbar;
import com.android.documentsui.R;
@@ -193,7 +194,8 @@ public class UiBot extends Bots.BaseBot {
public boolean waitForActionModeBarToAppear() {
UiObject2 bar =
- mDevice.wait(Until.findObject(By.res("android:id/action_mode_bar")), mTimeout);
+ mDevice.wait(Until.findObject(
+ By.res("com.android.documentsui:id/action_mode_bar")), mTimeout);
return (bar != null);
}
@@ -278,7 +280,7 @@ public class UiBot extends Bots.BaseBot {
}
UiObject findMenuMoreOptions() {
- UiSelector selector = new UiSelector().className("android.widget.ImageButton")
+ UiSelector selector = new UiSelector().className("android.widget.ImageView")
.descriptionContains("More options");
// TODO: use the system string ? android.R.string.action_menu_overflow_description
return mDevice.findObject(selector);
diff --git a/tests/common/com/android/documentsui/testing/TestLoaderManager.java b/tests/common/com/android/documentsui/testing/TestLoaderManager.java
index 334439830..172b9f51d 100644
--- a/tests/common/com/android/documentsui/testing/TestLoaderManager.java
+++ b/tests/common/com/android/documentsui/testing/TestLoaderManager.java
@@ -86,7 +86,6 @@ public class TestLoaderManager extends LoaderManager {
public void runAsyncTaskLoader(int id) {
AsyncTaskLoader loader = (AsyncTaskLoader) getLoader(id);
loader.startLoading();
- loader.waitForLoader();
}
@Override
diff --git a/tests/common/com/android/documentsui/testing/TestMenu.java b/tests/common/com/android/documentsui/testing/TestMenu.java
index 20c22a0c1..32dfce0f4 100644
--- a/tests/common/com/android/documentsui/testing/TestMenu.java
+++ b/tests/common/com/android/documentsui/testing/TestMenu.java
@@ -18,7 +18,8 @@ package com.android.documentsui.testing;
import android.util.SparseArray;
import android.view.Menu;
-import android.widget.SearchView;
+
+import androidx.appcompat.widget.SearchView;
import com.android.documentsui.R;
diff --git a/tests/common/com/android/documentsui/testing/TestSupportLoaderManager.java b/tests/common/com/android/documentsui/testing/TestSupportLoaderManager.java
new file mode 100644
index 000000000..12ef540f0
--- /dev/null
+++ b/tests/common/com/android/documentsui/testing/TestSupportLoaderManager.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui.testing;
+
+import android.os.Bundle;
+import android.util.SparseArray;
+
+import androidx.loader.app.LoaderManager;
+import androidx.loader.content.AsyncTaskLoader;
+import androidx.loader.content.Loader;
+import androidx.loader.content.Loader.OnLoadCompleteListener;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/**
+ * A test double of {@link LoaderManager} that doesn't kick off loading when {@link Loader} is
+ * created. If caller needs to kick off loading caller can obtain the loader initialized and
+ * explicitly call {@link Loader#startLoading()}.
+ *
+ * This is androidx version of TestLoaderManager.
+ */
+public class TestSupportLoaderManager extends LoaderManager {
+
+ private final SparseArray<Loader> mLoaders = new SparseArray<>();
+ private final SparseArray<OnLoadCompleteListener> mListeners = new SparseArray<>();
+
+ @Override
+ public <D> Loader<D> initLoader(int id, Bundle args,
+ LoaderCallbacks<D> callback) {
+ Loader<D> loader = mLoaders.get(id);
+ OnLoadCompleteListener<D> listener = callback::onLoadFinished;
+ if (loader == null) {
+ loader = callback.onCreateLoader(id, args);
+ mLoaders.put(id, loader);
+ } else {
+ loader.unregisterListener(mListeners.get(id));
+ }
+
+ loader.registerListener(id, listener);
+ mListeners.put(id, listener);
+
+ return loader;
+ }
+
+ @Override
+ public <D> Loader<D> restartLoader(int id, Bundle args,
+ LoaderCallbacks<D> callback) {
+ if (mLoaders.get(id) != null) {
+ destroyLoader(id);
+ }
+
+ return initLoader(id, args, callback);
+ }
+
+ @Override
+ public void destroyLoader(int id) {
+ Loader loader = getLoader(id);
+ if (loader != null) {
+ loader.abandon();
+ mLoaders.remove(id);
+ mListeners.remove(id);
+ }
+ }
+
+ @Override
+ public <D> Loader<D> getLoader(int id) {
+ return mLoaders.get(id);
+ }
+
+ @Override
+ public void markForRedelivery() {
+
+ }
+
+ public <D> OnLoadCompleteListener<D> getListener(int id) {
+ return mListeners.get(id);
+ }
+
+ public void runAsyncTaskLoader(int id) {
+ AsyncTaskLoader loader = (AsyncTaskLoader) getLoader(id);
+ loader.startLoading();
+ }
+
+ @Override
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+
+ }
+}
diff --git a/tests/common/com/android/documentsui/ui/TestDialogController.java b/tests/common/com/android/documentsui/ui/TestDialogController.java
index 3bd6db6fb..ac4d5323b 100644
--- a/tests/common/com/android/documentsui/ui/TestDialogController.java
+++ b/tests/common/com/android/documentsui/ui/TestDialogController.java
@@ -15,7 +15,7 @@
*/
package com.android.documentsui.ui;
-import android.app.FragmentManager;
+import androidx.fragment.app.FragmentManager;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
@@ -26,7 +26,6 @@ import junit.framework.Assert;
import java.util.List;
-
public class TestDialogController implements DialogController {
public int mNextConfirmationCode;
diff --git a/tests/functional/com/android/documentsui/SearchViewUiTest.java b/tests/functional/com/android/documentsui/SearchViewUiTest.java
index 685ed2ac4..e84136149 100644
--- a/tests/functional/com/android/documentsui/SearchViewUiTest.java
+++ b/tests/functional/com/android/documentsui/SearchViewUiTest.java
@@ -83,7 +83,6 @@ public class SearchViewUiTest extends ActivityTest<FilesActivity> {
public void testSearchView_CollapsesOnBack() throws Exception {
bots.search.clickIcon();
device.pressBack();
- device.pressBack();
bots.search.assertIconVisible(true);
bots.search.assertInputExists(false);
@@ -94,7 +93,6 @@ public class SearchViewUiTest extends ActivityTest<FilesActivity> {
bots.search.setInputText("file2");
device.pressBack();
- device.pressBack();
// Wait for a file in the default directory to be listed.
bots.directory.waitForDocument(dirName1);
@@ -103,6 +101,31 @@ public class SearchViewUiTest extends ActivityTest<FilesActivity> {
bots.search.assertInputExists(false);
}
+ public void testSearchView_ClearsSearchOnBack() throws Exception {
+ bots.search.clickIcon();
+ bots.search.setInputText("file1");
+ bots.keyboard.pressEnter();
+ device.waitForIdle();
+
+ device.pressBack();
+
+ bots.search.assertIconVisible(true);
+ bots.search.assertInputExists(false);
+ }
+
+ public void testSearchView_ClearsAutoSearchOnBack() throws Exception {
+ bots.search.clickIcon();
+ bots.search.setInputText("chocolate");
+ //Wait for auto search result, it should be no results and show holder message.
+ bots.directory.waitForHolderMessage();
+
+ device.pressBack();
+ device.pressBack();
+
+ bots.search.assertIconVisible(true);
+ bots.search.assertInputExists(false);
+ }
+
public void testSearchView_StateAfterSearch() throws Exception {
bots.search.clickIcon();
bots.search.setInputText("file1");
diff --git a/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java b/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
index cc267bcc0..afb895251 100644
--- a/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/AbstractActionHandlerTest.java
@@ -47,6 +47,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/**
* A unit test *for* AbstractActionHandler, not an abstract test baseclass.
@@ -257,8 +259,11 @@ public class AbstractActionHandlerTest {
.setNextChildDocumentsReturns(TestEnv.FILE_APK, TestEnv.FILE_GIF);
mHandler.loadDocumentsForCurrentStack();
+ CountDownLatch latch = new CountDownLatch(1);
+ mEnv.model.addUpdateListener(event -> latch.countDown());
mActivity.loaderManager.runAsyncTaskLoader(AbstractActionHandler.LOADER_ID);
+ latch.await(1, TimeUnit.SECONDS);
assertEquals(2, mEnv.model.getItemCount());
String[] modelIds = mEnv.model.getModelIds();
assertEquals(TestEnv.FILE_APK, mEnv.model.getDocument(modelIds[0]));
diff --git a/tests/unit/com/android/documentsui/inspector/DocumentLoaderTest.java b/tests/unit/com/android/documentsui/inspector/DocumentLoaderTest.java
index 963c8d656..243bb8860 100644
--- a/tests/unit/com/android/documentsui/inspector/DocumentLoaderTest.java
+++ b/tests/unit/com/android/documentsui/inspector/DocumentLoaderTest.java
@@ -29,7 +29,7 @@ import com.android.documentsui.InspectorProvider;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.inspector.InspectorController.DataSupplier;
import com.android.documentsui.testing.LatchedConsumer;
-import com.android.documentsui.testing.TestLoaderManager;
+import com.android.documentsui.testing.TestSupportLoaderManager;
import junit.framework.TestCase;
@@ -49,7 +49,7 @@ public class DocumentLoaderTest extends TestCase {
private static final String NOT_DIRECTORY = "OpenInProviderTest";
private Context mContext;
- private TestLoaderManager mLoaderManager;
+ private TestSupportLoaderManager mLoaderManager;
private DataSupplier mLoader;
private ContentResolver mResolver;
@@ -58,7 +58,7 @@ public class DocumentLoaderTest extends TestCase {
super.setUp();
mContext = InstrumentationRegistry.getTargetContext();
mResolver = mContext.getContentResolver();
- mLoaderManager = new TestLoaderManager();
+ mLoaderManager = new TestSupportLoaderManager();
mLoader = new RuntimeDataSupplier(mContext, mLoaderManager);
if (Looper.myLooper() == null) {