Merge "Flip default values of two gesture settings." into nyc-mr1-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1e54b8c..04a9e84 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2919,17 +2919,6 @@
                 android:value="true" />
         </activity>
 
-        <activity android:name="Settings$DeletionHelperActivity"
-                  android:label="@string/deletion_helper_title"
-                  android:taskAffinity="">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.DELETION_HELPER_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.deletionhelper.DeletionHelperFragment" />
-        </activity>
-
         <!-- activity for gesture settings -->
         <activity android:name="Settings$GestureSettingsActivity"
                   android:label="@string/gesture_preference_title"
@@ -3008,21 +2997,6 @@
             </intent-filter>
         </service>
 
-        <!-- Automatic storage management tasks. -->
-        <service
-            android:name=".deletionhelper.AutomaticStorageManagementJobService"
-            android:label="@string/automatic_storage_manager_service_label"
-            android:permission="android.permission.BIND_JOB_SERVICE"
-            android:enabled="@bool/enable_automatic_storage_management"
-            android:exported="false"/>
-
-        <receiver android:name=".deletionhelper.AutomaticStorageBroadcastReceiver"
-                  android:enabled="@bool/enable_automatic_storage_management">
-            <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED" />
-            </intent-filter>
-        </receiver>
-
         <!-- This is the longest AndroidManifest.xml ever. -->
     </application>
 </manifest>
diff --git a/res/drawable/ic_keyboard_arrow_down_black_32.xml b/res/drawable/ic_keyboard_arrow_down_black_32.xml
deleted file mode 100644
index 12ce9c2..0000000
--- a/res/drawable/ic_keyboard_arrow_down_black_32.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="32dp"
-        android:height="32dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-            android:fillColor="#FF000000"
-            android:pathData="M7.41,7.84L12,12.42l4.59,-4.58L18,9.25l-6,6 -6,-6z"/>
-</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_keyboard_arrow_up_black_32.xml b/res/drawable/ic_keyboard_arrow_up_black_32.xml
deleted file mode 100644
index d419800..0000000
--- a/res/drawable/ic_keyboard_arrow_up_black_32.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="32dp"
-        android:height="32dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-            android:fillColor="#FF000000"
-            android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/>
-</vector>
\ No newline at end of file
diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
index 834bba2..e11e997 100644
--- a/res/layout/radio_info.xml
+++ b/res/layout/radio_info.xml
@@ -190,6 +190,22 @@
                 android:layout_height="wrap_content"
                 android:text="@string/volte_provisioned_switch_string"/>
 
+        <!-- VT provisioned -->
+        <Switch android:id="@+id/vt_provisioned_switch"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/vt_provisioned_switch_string"/>
+
+        <!-- Wifi Calling provisioned -->
+        <Switch android:id="@+id/wfc_provisioned_switch"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/wfc_provisioned_switch_string"/>
+
         <!-- SMSC -->
         <RelativeLayout android:layout_width="match_parent"
                         android:layout_height="wrap_content">
diff --git a/res/values/bools.xml b/res/values/bools.xml
index 15706df..6f04457 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -41,6 +41,6 @@
     <!-- Whether none security option is hide or not  (country specific). -->
     <bool name="config_hide_none_security_option">false</bool>
 
-    <!-- Whether the automatic storage management job should be scheduled. -->
-    <bool name="enable_automatic_storage_management">false</bool>
+    <!--Whether the storage manager exists. -->
+    <bool name="config_has_storage_manager">false</bool>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cc16240..bb7c8ef 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -65,6 +65,12 @@
     <!-- VoLTE provisioning flag on. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="volte_provisioned_switch_string">VoLTE Provisioned</string>
 
+    <!-- Video calling provisioning flag on. Only shown in diagnostic screen, so precise translation is not needed. -->
+    <string name="vt_provisioned_switch_string">Video Calling Provisioned</string>
+
+    <!-- Wifi Calling provisioning flag on. Only shown in diagnostic screen, so precise translation is not needed. -->
+    <string name="wfc_provisioned_switch_string">Wifi Calling Provisioned</string>
+
     <!-- Cell Radio Power. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="radio_info_radio_power">Cellular Radio Power</string>
 
@@ -7493,17 +7499,6 @@
     <!-- [CHAR LIMIT=60] Name of dev option called demo mode -->
     <string name="demo_mode">Demo mode</string>
 
-    <!-- Activity title for deletion helper. [CHAR LIMIT=25] -->
-    <string name="deletion_helper_title">Remove from Device</string>
-    <!-- Summary of how much storage an app is using and the number of days since last use. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_app_summary"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Last used <xliff:g id="days" example="67">%2$d</xliff:g> days ago</string>
-    <!-- Summary of how much storage an app is using when it has never been used before. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_app_summary_never_used"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Never used before</string>
-    <!-- Summary of how much storage an app is using when its last use is unknown. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_app_summary_unknown_used"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Not sure when last used</string>
-    <!-- Button which clears out storage in the deletion helper. [CHAR LIMIT=60]-->
-    <string name="deletion_helper_free_button">Free up <xliff:g id="freeable" example="1.2GB">%1$s</xliff:g></string>
-
     <!-- Title text for connecting to customer support [CHAR LIMIT=80]-->
     <string name="support_escalation_title">We\'re here to help</string>
 
@@ -7610,27 +7605,6 @@
     <!-- Message for telling the user the kind of BT device being displayed in list. -->
     <string name="bluetooth_talkback_bluetooth">Bluetooth</string>
 
-    <!-- Preference group title for the photos and videos deletion service. [CHAR LIMIT=40]-->
-    <string name="deletion_helper_photos_title">Photos &amp; Videos (<xliff:g id="num_items">%1$d</xliff:g>)</string>
-
-    <!-- Summary of how much backed up storage that photos and videos service can clear from the local device. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_photos_summary"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Older than <xliff:g id="days">%2$d</xliff:g> days</string>
-
-    <!-- Preference title for the downloads deletion service. [CHAR LIMIT=40]-->
-    <string name="deletion_helper_downloads_title">Downloads (<xliff:g id="numItems" example="67">%1$d</xliff:g>)</string>
-
-    <!-- Summary of how much stale data can be cleared from the local download folder. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_downloads_summary"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Last modified <xliff:g id="days">%2$s</xliff:g></string>
-
-    <!-- Summary for when when there is nothing in the downloads folder to clear. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_downloads_summary_empty"><xliff:g id="used" example="1.2GB">%1$s</xliff:g></string>
-
-    <!-- Message to warn the user before clearing space in the deletion helper. [CHAR LIMIT=NONE] -->
-    <string name="deletion_helper_clear_dialog_message">Remove <xliff:g id="clearable_bytes" example="1.2GB">%1$s</xliff:g> from your device.</string>
-
-    <!-- Button label for the dialog prompt for clearing data in deletion helper. [CHAR LIMIT=40] -->
-    <string name="deletion_helper_clear_dialog_remove">Remove</string>
-
     <!-- Used as title on the automatic storage manager settings. [CHAR LIMIT=60] -->
     <string name="automatic_storage_manager_settings">Storage manager</string>
 
@@ -7640,21 +7614,6 @@
     <!-- Dropdown preference title for dropdown describing how many days of data to retain.-->
     <string name="automatic_storage_manager_days_title">Remove photos &amp; videos</string>
 
-    <!-- Title for the dialog to up sell the storage manager. [CHAR LIMIT=NONE] -->
-    <string name="deletion_helper_upsell_title"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> now free. Manage storage automatically?</string>
-    <!-- Summary for the dialog to up sell the storage manager. [CHAR LIMIT=NONE] -->
-    <string name="deletion_helper_upsell_summary">Let Storage manager automatically free up space by removing backed up content from your device?</string>
-    <!-- Button to delay turning on the storage manager on the storage manager upsell. [CHAR LIMIT=20]-->
-    <string name="deletion_helper_upsell_cancel">No thanks</string>
-    <!-- Button to activate the storage manager on the storage manager upsell. [CHAR LIMIT=20]-->
-    <string name="deletion_helper_upsell_activate">Turn on</string>
-
-    <!-- Title for the apps category in the deletion helper, showing how many apps to delete. [CHAR LIMIT=40]-->
-    <string name="deletion_helper_apps_group_title">Apps (<xliff:g id="num_items">%1$d</xliff:g>)</string>
-
-    <!-- Summary for the apps category in the deletion helper, showing how many space to clear. [CHAR LIMIT=NONE]-->
-    <string name="deletion_helper_apps_group_summary"><xliff:g id="used" example="1.2GB">%1$s</xliff:g> • Last used <xliff:g id="days">%2$d</xliff:g> days ago</string>
-
     <!-- Category title for the automatic settings in the storage manager settings. [CHAR LIMIT=40] -->
     <string name="deletion_helper_automatic_title">Automatic</string>
 
@@ -7664,12 +7623,6 @@
     <!-- Preference menu title for accessing the deletion helper from the storage manager settings. [CHAR LIMIT=30]-->
     <string name="deletion_helper_preference_title">Free space now</string>
 
-    <!-- Preference title for the automatic storage manager toggle. [CHAR LIMIT=60]-->
-    <string name="automatic_storage_manager_preference_title">Storage manager</string>
-
-    <!-- Automatic storage management service label. [CHAR LIMIT=40]-->
-    <string name="automatic_storage_manager_service_label">Automatic Storage Management Service</string>
-
     <!-- Preference title for gesture settings [CHAR LIMIT=25]-->
     <string name="gesture_preference_title">Gestures</string>
 
diff --git a/res/xml/deletion_helper_list.xml b/res/xml/deletion_helper_list.xml
deleted file mode 100644
index 64bd3b5..0000000
--- a/res/xml/deletion_helper_list.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:title="@string/deletion_helper_title">
-
-    <com.android.settings.PhotosDeletionPreference
-        android:key="delete_photos" />
-
-    <com.android.settings.deletionhelper.DownloadsDeletionPreferenceGroup
-        android:key="delete_downloads"
-        android:icon="@drawable/ic_keyboard_arrow_down_black_32"/>
-
-    <com.android.settings.CollapsibleCheckboxPreferenceGroup
-            android:key="apps_group"
-            android:icon="@drawable/ic_keyboard_arrow_down_black_32"/>
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/CollapsibleCheckboxPreferenceGroup.java b/src/com/android/settings/CollapsibleCheckboxPreferenceGroup.java
deleted file mode 100644
index a0f9d98..0000000
--- a/src/com/android/settings/CollapsibleCheckboxPreferenceGroup.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings;
-
-import android.content.Context;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
-import android.support.v7.preference.PreferenceViewHolder;
-import android.util.AttributeSet;
-
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.View;
-import android.widget.Checkable;
-import android.widget.TextView;
-
-import java.util.LinkedHashMap;
-
-/**
- * CollapsibleCheckboxPreferenceGroup is a preference group that can be expanded or collapsed and
- * also has a checkbox.
- */
-public class CollapsibleCheckboxPreferenceGroup extends PreferenceGroup implements
-        View.OnClickListener {
-    private boolean mCollapsed;
-    private boolean mChecked;
-
-    public CollapsibleCheckboxPreferenceGroup(Context context) {
-        this(context, null);
-    }
-
-    public CollapsibleCheckboxPreferenceGroup(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setWidgetLayoutResource(com.android.settings.R.layout.preference_widget_checkbox);
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder holder) {
-        super.onBindViewHolder(holder);
-        View checkbox = holder.findViewById(com.android.internal.R.id.checkbox);
-        if (checkbox != null && checkbox instanceof Checkable) {
-            ((Checkable) checkbox).setChecked(mChecked);
-            checkbox.setClickable(true);
-            checkbox.setFocusable(true);
-            checkbox.setOnClickListener(this);
-        }
-
-        final TextView titleView = (TextView) holder.findViewById(android.R.id.title);
-        if (titleView != null) {
-            Context context = getContext();
-            TypedValue value = new TypedValue();
-            context.getTheme().resolveAttribute(android.R.attr.colorAccent, value, true);
-            titleView.setTextColor(context.getColor(value.resourceId));
-        }
-    }
-
-    @Override
-    public boolean addPreference(Preference p) {
-        super.addPreference(p);
-        p.setVisible(!isCollapsed());
-        return true;
-    }
-
-    // The preference click handler.
-    @Override
-    protected void onClick() {
-        super.onClick();
-        setCollapse(!isCollapsed());
-    }
-
-    // The checkbox view click handler.
-    @Override
-    public void onClick(View v) {
-        setChecked(!isChecked());
-    }
-
-    /**
-     * Return if the view is collapsed.
-     */
-    public boolean isCollapsed() {
-        return mCollapsed;
-    }
-
-    /**
-     * Returns the checked state of the preference.
-     */
-    public boolean isChecked() {
-        return mChecked;
-    }
-
-    /**
-     * Sets the checked state and notifies listeners of the state change.
-     */
-    public void setChecked(boolean checked) {
-        if (mChecked != checked) {
-            mChecked = checked;
-
-            callChangeListener(checked);
-            notifyDependencyChange(shouldDisableDependents());
-            notifyChanged();
-        }
-    }
-
-    private void setCollapse(boolean isCollapsed) {
-        if (mCollapsed == isCollapsed) {
-            return;
-        }
-
-        mCollapsed = isCollapsed;
-        if (isCollapsed) {
-            hideDropdownPreferences();
-        } else {
-            showDropdownPreferences();
-        }
-    }
-
-    private void showDropdownPreferences() {
-        setAllPreferencesVisibility(true);
-        setIcon(R.drawable.ic_keyboard_arrow_down_black_32);
-    }
-
-    private void hideDropdownPreferences() {
-        setAllPreferencesVisibility(false);
-        setIcon(R.drawable.ic_keyboard_arrow_up_black_32);
-    }
-
-    private void setAllPreferencesVisibility(boolean visible) {
-        for (int i = 0; i < getPreferenceCount(); i++) {
-            Preference p = getPreference(i);
-            p.setVisible(visible);
-        }
-    }
-}
diff --git a/src/com/android/settings/DeletionPreference.java b/src/com/android/settings/DeletionPreference.java
deleted file mode 100644
index 93d76e6..0000000
--- a/src/com/android/settings/DeletionPreference.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.PreferenceViewHolder;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.text.format.Formatter;
-import android.widget.TextView;
-import com.android.settings.deletionhelper.DeletionType;
-
-/**
- * Preference to handle the deletion of various data types in the Deletion Helper.
- */
-public abstract class DeletionPreference extends CheckBoxPreference implements
-        DeletionType.FreeableChangedListener, OnPreferenceChangeListener {
-    private DeletionType.FreeableChangedListener mListener;
-    private boolean mChecked;
-    private long mFreeableBytes;
-    private int mFreeableItems;
-    private DeletionType mDeletionService;
-
-    public DeletionPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setOnPreferenceChangeListener(this);
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder holder) {
-        super.onBindViewHolder(holder);
-        final TextView titleView = (TextView) holder.findViewById(android.R.id.title);
-        if (titleView != null) {
-            titleView.setTextColor(getTintColor(getContext()));
-        }
-    }
-
-    /**
-     * Returns the number of bytes which can be cleared by the deletion service.
-     * @return The number of bytes.
-     */
-    public long getFreeableBytes() {
-        return mChecked ? mFreeableBytes : 0;
-    }
-
-    /**
-     * Register a listener to be called back on when the freeable bytes have changed.
-     * @param listener The callback listener.
-     */
-    public void registerFreeableChangedListener(DeletionType.FreeableChangedListener listener) {
-        mListener = listener;
-    }
-
-    /**
-     * Registers a deletion service to update the preference's information.
-     * @param deletionService A photo/video deletion service.
-     */
-    public void registerDeletionService(DeletionType deletionService) {
-        mDeletionService = deletionService;
-        if (mDeletionService != null) {
-            mDeletionService.registerFreeableChangedListener(this);
-        }
-    }
-
-    /**
-     * Returns the deletion service powering the preference.
-     * @return The deletion service.
-     */
-    public DeletionType getDeletionService() {
-        return mDeletionService;
-    }
-
-    @Override
-    public void onFreeableChanged(int numItems, long freeableBytes) {
-        mFreeableItems = numItems;
-        mFreeableBytes = freeableBytes;
-        maybeUpdateListener();
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        mChecked = (boolean) newValue;
-        maybeUpdateListener();
-        return true;
-    }
-
-    private int getTintColor(Context context) {
-        TypedValue value = new TypedValue();
-        context.getTheme().resolveAttribute(android.R.attr.colorAccent, value, true);
-        return context.getColor(value.resourceId);
-    }
-
-    private void maybeUpdateListener() {
-        if (mListener != null) {
-            mListener.onFreeableChanged(mFreeableItems, getFreeableBytes());
-        }
-    }
-}
diff --git a/src/com/android/settings/PhotosDeletionPreference.java b/src/com/android/settings/PhotosDeletionPreference.java
deleted file mode 100644
index 643b3f1..0000000
--- a/src/com/android/settings/PhotosDeletionPreference.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.text.format.Formatter;
-
-/**
- * Preference to handle the deletion of photos and videos in the Deletion Helper.
- */
-public class PhotosDeletionPreference extends DeletionPreference {
-    public static final int DAYS_TO_KEEP = 30;
-
-    public PhotosDeletionPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setIcon(getIcon(context));
-        updatePreferenceText(0, 0);
-    }
-
-    /**
-     * Updates the title and summary of the preference with fresh information.
-     */
-    public void updatePreferenceText(int items, long bytes) {
-        Context context = getContext();
-        setTitle(context.getString(R.string.deletion_helper_photos_title, items));
-        setSummary(context.getString(R.string.deletion_helper_photos_summary,
-                Formatter.formatFileSize(context, bytes), DAYS_TO_KEEP));
-    }
-
-    @Override
-    public void onFreeableChanged(int items, long bytes) {
-        super.onFreeableChanged(items, bytes);
-        updatePreferenceText(items, bytes);
-    }
-
-    private Drawable getIcon(Context context) {
-        final Drawable iconDrawable;
-        try {
-            Resources resources = context.getResources();
-            final int resId = resources.getIdentifier("ic_photos_black_24", "drawable",
-                    context.getPackageName());
-            iconDrawable = context.getDrawable(resId);
-        } catch (Resources.NotFoundException e) {
-            return null;
-        }
-        return iconDrawable;
-    }
-}
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index 9a2d14a..396e5fa 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -218,51 +218,6 @@
         return R.string.help_url_backup_reset;
     }
 
-    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
-
-        private final Context mContext;
-        private final SummaryLoader mSummaryLoader;
-
-        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
-            mContext = context;
-            mSummaryLoader = summaryLoader;
-        }
-
-        @Override
-        public void setListening(boolean listening) {
-            if (listening) {
-                IBackupManager backupManager = IBackupManager.Stub.asInterface(
-                        ServiceManager.getService(Context.BACKUP_SERVICE));
-                try {
-                    boolean backupEnabled = backupManager.isBackupEnabled();
-                    if (backupEnabled) {
-                        String transport = backupManager.getCurrentTransport();
-                        String configSummary = backupManager.getDestinationString(transport);
-                        if (configSummary != null) {
-                            mSummaryLoader.setSummary(this, configSummary);
-                        } else {
-                            mSummaryLoader.setSummary(this, mContext.getString(
-                                    R.string.backup_configure_account_default_summary));
-                        }
-                    } else {
-                        mSummaryLoader.setSummary(this, mContext.getString(
-                                R.string.backup_disabled));
-                    }
-                } catch (RemoteException e) {
-                }
-            }
-        }
-    }
-
-    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
-            = new SummaryLoader.SummaryProviderFactory() {
-        @Override
-        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
-                                                                   SummaryLoader summaryLoader) {
-            return new SummaryProvider(activity, summaryLoader);
-        }
-    };
-
     /**
      * For Search.
      */
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index 031a1ae..b071cc3 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -118,6 +118,16 @@
     private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
     private static final int CELL_INFO_LIST_RATE_MAX = 0;
 
+
+    private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
+        ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
+
+    private static final int IMS_VT_PROVISIONED_CONFIG_ID =
+        ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
+
+    private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
+        ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
+
     //Values in must match mCellInfoRefreshRates
     private static final String[] mCellInfoRefreshRateLabels = {
             "Disabled",
@@ -184,7 +194,9 @@
     private Button updateSmscButton;
     private Button refreshSmscButton;
     private Button oemInfoButton;
-    private Switch imsVoLteProvisionedSwitch;
+    private Switch imsVolteProvisionedSwitch;
+    private Switch imsVtProvisionedSwitch;
+    private Switch imsWfcProvisionedSwitch;
     private Spinner preferredNetworkType;
     private Spinner cellInfoRefreshRateSpinner;
 
@@ -270,7 +282,7 @@
             updateServiceState(serviceState);
             updateRadioPowerState();
             updateNetworkType();
-            updateImsVoLteProvisionedState();
+            updateImsProvisionedState();
         }
     };
 
@@ -382,7 +394,9 @@
         cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
 
-        imsVoLteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
+        imsVolteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
+        imsVtProvisionedSwitch = (Switch) findViewById(R.id.vt_provisioned_switch);
+        imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
 
         radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
 
@@ -425,7 +439,7 @@
         updateDataState();
         updateDataStats2();
         updateRadioPowerState();
-        updateImsVoLteProvisionedState();
+        updateImsProvisionedState();
         updateProperties();
         updateDnsCheckState();
         updateNetworkType();
@@ -447,7 +461,9 @@
         preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
 
         radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
-        imsVoLteProvisionedSwitch.setOnCheckedChangeListener(mImsVoLteCheckedChangeListener);
+        imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
+        imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
+        imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
 
         mTelephonyManager.listen(mPhoneStateListener,
                   PhoneStateListener.LISTEN_CALL_STATE
@@ -1099,6 +1115,37 @@
         radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
     }
 
+    void setImsVolteProvisionedState( boolean state ) {
+        Log.d(TAG, "setImsVolteProvisioned state: " + ((state)? "on":"off"));
+        setImsConfigProvisionedState( IMS_VOLTE_PROVISIONED_CONFIG_ID, state );
+    }
+
+    void setImsVtProvisionedState( boolean state ) {
+        Log.d(TAG, "setImsVtProvisioned() state: " + ((state)? "on":"off"));
+        setImsConfigProvisionedState( IMS_VT_PROVISIONED_CONFIG_ID, state );
+    }
+
+    void setImsWfcProvisionedState( boolean state ) {
+        Log.d(TAG, "setImsWfcProvisioned() state: " + ((state)? "on":"off"));
+        setImsConfigProvisionedState( IMS_WFC_PROVISIONED_CONFIG_ID, state );
+    }
+
+    void setImsConfigProvisionedState( int configItem, boolean state ) {
+        if (phone != null && mImsManager != null) {
+            QueuedWork.singleThreadExecutor().submit(new Runnable() {
+                public void run() {
+                    try {
+                        mImsManager.getConfigInterface().setProvisionedValue(
+                                configItem,
+                                state? 1 : 0);
+                    } catch (ImsException e) {
+                        Log.e(TAG, "setImsConfigProvisioned() exception:", e);
+                    }
+                }
+            });
+        }
+    }
+
     OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -1107,25 +1154,7 @@
        }
     };
 
-    void setImsVoLteProvisionedState( boolean state ) {
-        log(String.format("toggle VoLTE provisioned: %s", ((state) ? "on":"off")));
-
-        if (phone != null && mImsManager != null) {
-            QueuedWork.singleThreadExecutor().submit(new Runnable() {
-                public void run() {
-                    try {
-                        mImsManager.getConfigInterface().setProvisionedValue(
-                                ImsConfig.ConfigConstants.VLT_SETTING_ENABLED,
-                                state? 1 : 0);
-                    } catch (ImsException e) {
-                        Log.e(TAG, "setImsVoLteProvisioned() exception:", e);
-                    }
-                }
-            });
-        }
-    }
-
-    private boolean isImsVoLteProvisioned() {
+    private boolean isImsVolteProvisioned() {
         if (phone != null && mImsManager != null) {
             return mImsManager.isVolteEnabledByPlatform(phone.getContext())
                 && mImsManager.isVolteProvisionedOnDevice(phone.getContext());
@@ -1133,20 +1162,58 @@
         return false;
     }
 
-    OnCheckedChangeListener mImsVoLteCheckedChangeListener = new OnCheckedChangeListener() {
+    OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-            setImsVoLteProvisionedState(isChecked);
+            setImsVolteProvisionedState(isChecked);
        }
     };
 
-    private void updateImsVoLteProvisionedState() {
-        log("updateImsVoLteProvisionedState isImsVoLteProvisioned()=" + isImsVoLteProvisioned());
+    private boolean isImsVtProvisioned() {
+        if (phone != null && mImsManager != null) {
+            return mImsManager.isVtEnabledByPlatform(phone.getContext())
+                && mImsManager.isVtProvisionedOnDevice(phone.getContext());
+        }
+        return false;
+    }
+
+    OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
+        @Override
+        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+            setImsVtProvisionedState(isChecked);
+       }
+    };
+
+    private boolean isImsWfcProvisioned() {
+        if (phone != null && mImsManager != null) {
+            return mImsManager.isWfcEnabledByPlatform(phone.getContext())
+                && mImsManager.isWfcProvisionedOnDevice(phone.getContext());
+        }
+        return false;
+    }
+
+    OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
+        @Override
+        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+            setImsWfcProvisionedState(isChecked);
+       }
+    };
+
+    private void updateImsProvisionedState() {
+        log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
         //delightful hack to prevent on-checked-changed calls from
         //actually forcing the ims provisioning to its transient/current value.
-        imsVoLteProvisionedSwitch.setOnCheckedChangeListener(null);
-        imsVoLteProvisionedSwitch.setChecked(isImsVoLteProvisioned());
-        imsVoLteProvisionedSwitch.setOnCheckedChangeListener(mImsVoLteCheckedChangeListener);
+        imsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
+        imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
+        imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
+
+        imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
+        imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
+        imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
+
+        imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
+        imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
+        imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
     }
 
     OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 2e8d399..3036bd18 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -77,6 +77,7 @@
     public static class UsageAccessSettingsActivity extends SettingsActivity { /* empty */ }
     public static class LocationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class PrivacySettingsActivity extends SettingsActivity { /* empty */ }
+    public static class FactoryResetActivity extends SettingsActivity { /* empty */ }
     public static class RunningServicesActivity extends SettingsActivity { /* empty */ }
     public static class ManageAccountsSettingsActivity extends SettingsActivity { /* empty */ }
     public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 223d536..fcee935 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -74,7 +74,6 @@
 import com.android.settings.dashboard.DashboardContainerFragment;
 import com.android.settings.dashboard.SearchResultsSummary;
 import com.android.settings.datausage.DataUsageSummary;
-import com.android.settings.deletionhelper.DeletionHelperFragment;
 import com.android.settings.deviceinfo.ImeiInformation;
 import com.android.settings.deviceinfo.PrivateVolumeForget;
 import com.android.settings.deviceinfo.PrivateVolumeSettings;
@@ -343,7 +342,6 @@
             WallpaperTypeSettings.class.getName(),
             VrListenerSettings.class.getName(),
             ManagedProfileSettings.class.getName(),
-            DeletionHelperFragment.class.getName(),
             ChooseAccountActivity.class.getName(),
             IccLockSettings.class.getName(),
             ImeiInformation.class.getName(),
@@ -352,6 +350,7 @@
             TestingSettings.class.getName(),
             WifiAPITest.class.getName(),
             WifiInfo.class.getName(),
+            MasterClear.class.getName(),
     };
 
 
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 86fb1d3..3f91293 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -273,6 +273,14 @@
                     Log.d(TAG, "Restarting WifiAp due to prior config change.");
                     startTethering(TETHERING_WIFI);
                 }
+            } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
+                int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, 0);
+                if (state == WifiManager.WIFI_AP_STATE_DISABLED
+                        && mRestartWifiApAfterConfigChange) {
+                    mRestartWifiApAfterConfigChange = false;
+                    Log.d(TAG, "Restarting WifiAp due to prior config change.");
+                    startTethering(TETHERING_WIFI);
+                }
             } else if (action.equals(Intent.ACTION_MEDIA_SHARED)) {
                 mMassStorageActive = true;
                 updateState();
@@ -324,6 +332,7 @@
         mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
         mTetherChangeReceiver = new TetherChangeReceiver();
         IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
+        filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
         Intent intent = activity.registerReceiver(mTetherChangeReceiver, filter);
 
         filter = new IntentFilter();
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index 352e317..d1464d3 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -354,6 +354,8 @@
             preferenceScreen.addPreference(mButtonWfcMode);
             if (updateAddressEnabled) {
                 preferenceScreen.addPreference(mUpdateAddress);
+            } else {
+                preferenceScreen.removePreference(mUpdateAddress);
             }
         } else {
             preferenceScreen.removePreference(mButtonWfcMode);
diff --git a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
index 9933672..f246204 100644
--- a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
@@ -67,6 +67,7 @@
      */
     @Override
     protected void commit() {
+        if (getContext() == null) return;
         final ContentResolver resolver = getContext().getContentResolver();
         Settings.System.putFloat(resolver, Settings.System.FONT_SCALE, mValues[mCurrentIndex]);
     }
diff --git a/src/com/android/settings/deletionhelper/AppDeletionPreference.java b/src/com/android/settings/deletionhelper/AppDeletionPreference.java
deleted file mode 100644
index 97420c2..0000000
--- a/src/com/android/settings/deletionhelper/AppDeletionPreference.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.content.Context;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceViewHolder;
-import android.text.format.Formatter;
-import android.view.View;
-import android.widget.Switch;
-import android.widget.TextView;
-import com.android.settings.deletionhelper.AppStateUsageStatsBridge.UsageStatsState;
-import com.android.settings.R;
-
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.applications.ApplicationsState.AppEntry;
-
-/**
- * Preference item for an app with a switch to signify if it should be uninstalled.
- * This shows the name and icon of the app along with the days since its last use.
- */
-public class AppDeletionPreference extends SwitchPreference {
-    private AppEntry mEntry;
-    private Context mContext;
-
-    public AppDeletionPreference(Context context, AppEntry item, ApplicationsState state) {
-        super(context);
-        mEntry = item;
-        mContext = context;
-        setLayoutResource(com.android.settings.R.layout.preference_app);
-        setWidgetLayoutResource(R.layout.widget_text_views);
-
-        synchronized (item) {
-            state.ensureIcon(item);
-            if (item.icon != null)
-                setIcon(item.icon);
-            if (item.label != null)
-                setTitle(item.label);
-        }
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder holder) {
-        super.onBindViewHolder(holder);
-        Switch switchWidget = (Switch) holder.findViewById(com.android.internal.R.id.switch_widget);
-        switchWidget.setVisibility(View.VISIBLE);
-
-        TextView summary = (TextView) holder.findViewById(R.id.widget_text1);
-        updateSummaryText(summary);
-    }
-
-    public String getPackageName() {
-        return mEntry.label;
-    }
-
-    private void updateSummaryText(TextView summary) {
-        if (mEntry.extraInfo == null) return;
-        if (mEntry.size == ApplicationsState.SIZE_UNKNOWN ||
-                mEntry.size == ApplicationsState.SIZE_INVALID) {
-            return;
-        }
-
-        UsageStatsState extraData = (UsageStatsState) mEntry.extraInfo;
-        String fileSize = Formatter.formatFileSize(mContext, mEntry.size);
-        if (extraData.daysSinceLastUse == AppStateUsageStatsBridge.NEVER_USED) {
-            summary.setText(mContext.getString(R.string.deletion_helper_app_summary_never_used,
-                    fileSize));
-        } else if (extraData.daysSinceLastUse == AppStateUsageStatsBridge.UNKNOWN_LAST_USE) {
-            summary.setText(mContext.getString(R.string.deletion_helper_app_summary_unknown_used,
-                    fileSize));
-        } else {
-            summary.setText(mContext.getString(R.string.deletion_helper_app_summary,
-                    fileSize,
-                    extraData.daysSinceLastUse));
-        }
-    }
-
-}
diff --git a/src/com/android/settings/deletionhelper/AppStateUsageStatsBridge.java b/src/com/android/settings/deletionhelper/AppStateUsageStatsBridge.java
deleted file mode 100644
index 6f77a29..0000000
--- a/src/com/android/settings/deletionhelper/AppStateUsageStatsBridge.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.usage.UsageStats;
-import android.app.usage.UsageStatsManager;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.util.Log;
-import com.android.settings.applications.AppStateBaseBridge;
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import com.android.settingslib.applications.ApplicationsState.AppFilter;
-
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Connects data from the UsageStatsManager to the ApplicationsState.
- */
-public class AppStateUsageStatsBridge extends AppStateBaseBridge {
-    private static final String TAG = "AppStateUsageStatsBridge";
-    private UsageStatsManager mUsageStatsManager;
-    private PackageManager mPm;
-    public static final long NEVER_USED = -1;
-    public static final long UNKNOWN_LAST_USE = -2;
-    public static final long UNUSED_DAYS_DELETION_THRESHOLD = 60;
-
-    public AppStateUsageStatsBridge(Context context, ApplicationsState appState,
-                                    Callback callback) {
-        super(appState, callback);
-        mUsageStatsManager =
-                (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
-        mPm = context.getPackageManager();
-    }
-
-    @Override
-    protected void loadAllExtraInfo() {
-        ArrayList<AppEntry> apps = mAppSession.getAllApps();
-        if (apps == null) return;
-
-        final Map<String, UsageStats> map = mUsageStatsManager.queryAndAggregateUsageStats(0,
-                System.currentTimeMillis());
-        for (AppEntry entry : apps) {
-            UsageStats usageStats = map.get(entry.info.packageName);
-            entry.extraInfo = new UsageStatsState(getDaysSinceLastUse(usageStats),
-                    getDaysSinceInstalled(entry.info.packageName));
-        }
-    }
-
-    @Override
-    protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
-        Map<String, UsageStats> map = mUsageStatsManager.queryAndAggregateUsageStats(0,
-                System.currentTimeMillis());
-        UsageStats usageStats = map.get(app.info.packageName);
-        app.extraInfo = new UsageStatsState(getDaysSinceLastUse(usageStats),
-                getDaysSinceInstalled(app.info.packageName));
-    }
-
-    private long getDaysSinceLastUse(UsageStats stats) {
-        if (stats == null) {
-            return NEVER_USED;
-        }
-        long lastUsed = stats.getLastTimeUsed();
-        // Sometimes, a usage is recorded without a time and we don't know when the use was.
-        if (lastUsed == 0) {
-            return UNKNOWN_LAST_USE;
-        }
-        return TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis() - lastUsed);
-    }
-
-    private long getDaysSinceInstalled(String packageName) {
-        PackageInfo pi = null;
-        try {
-            pi = mPm.getPackageInfo(packageName, 0);
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, packageName + " was not found.");
-        }
-
-        if (pi == null) {
-            return NEVER_USED;
-        }
-
-        return (TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis() - pi.firstInstallTime));
-    }
-
-    /**
-     * Filters only non-system apps which haven't been used in the last 60 days. If an app's last
-     * usage is unknown, it is skipped.
-     */
-    public static final AppFilter FILTER_USAGE_STATS = new AppFilter() {
-
-        @Override
-        public void init() {
-        }
-
-        @Override
-        public boolean filterApp(AppEntry info) {
-            if (info == null) return false;
-            return isExtraInfoValid(info.extraInfo) && !isBundled(info)
-                    && !isPersistentProcess(info);
-        }
-
-        private boolean isExtraInfoValid(Object extraInfo) {
-            if (extraInfo == null || !(extraInfo instanceof UsageStatsState)) {
-                return false;
-            }
-
-            UsageStatsState state = (UsageStatsState) extraInfo;
-            long mostRecentUse = Math.max(state.daysSinceFirstInstall, state.daysSinceLastUse);
-            return mostRecentUse >= UNUSED_DAYS_DELETION_THRESHOLD || mostRecentUse == NEVER_USED;
-        }
-
-        private boolean isBundled(AppEntry info) {
-            return (info.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-        }
-
-        private boolean isPersistentProcess(AppEntry info) {
-            return (info.info.flags & ApplicationInfo.FLAG_PERSISTENT) != 0;
-        }
-    };
-
-    /**
-     * UsageStatsState contains the days since the last use and first install of a given app.
-     */
-    public static class UsageStatsState {
-        public long daysSinceLastUse;
-        public long daysSinceFirstInstall;
-
-        public UsageStatsState(long daysSinceLastUse, long daysSinceFirstInstall) {
-            this.daysSinceLastUse = daysSinceLastUse;
-            this.daysSinceFirstInstall = daysSinceFirstInstall;
-        }
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageBroadcastReceiver.java b/src/com/android/settings/deletionhelper/AutomaticStorageBroadcastReceiver.java
deleted file mode 100644
index e7b0469..0000000
--- a/src/com/android/settings/deletionhelper/AutomaticStorageBroadcastReceiver.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.job.JobInfo;
-import android.app.job.JobScheduler;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.text.format.DateUtils;
-
-/**
- * A {@link BroadcastReceiver} listening for {@link Intent#ACTION_BOOT_COMPLETED} broadcasts to
- * schedule an automatic storage management job. Automatic storage management jobs are only
- * scheduled once a day for a plugged in device.
- */
-public class AutomaticStorageBroadcastReceiver extends BroadcastReceiver {
-    private static final int AUTOMATIC_STORAGE_JOB_ID = 0;
-    private static final long PERIOD = DateUtils.DAY_IN_MILLIS;
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        JobScheduler jobScheduler =
-                (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
-        ComponentName component = new ComponentName(context,
-                AutomaticStorageManagementJobService.class);
-        JobInfo job = new JobInfo.Builder(AUTOMATIC_STORAGE_JOB_ID, component)
-                .setRequiresCharging(true)
-                .setRequiresDeviceIdle(true)
-                .setPeriodic(PERIOD)
-                .build();
-        jobScheduler.schedule(job);
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagementJobService.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagementJobService.java
deleted file mode 100644
index 990e328..0000000
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagementJobService.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.job.JobParameters;
-import android.app.job.JobService;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.storage.StorageManager;
-import android.os.storage.VolumeInfo;
-import android.provider.Settings;
-import android.util.Log;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.overlay.StorageManagementJobProvider;
-
-import java.io.File;
-
-/**
- * {@link JobService} class to start automatic storage clearing jobs to free up space. The job only
- * starts if the device is under a certain percent of free storage.
- */
-public class AutomaticStorageManagementJobService extends JobService {
-    private static final String TAG = "AsmJobService";
-    private static final String SHARED_PREFRENCES_NAME = "automatic_storage_manager_settings";
-    private static final String KEY_DAYS_TO_RETAIN = "days_to_retain";
-
-    private static final long DEFAULT_LOW_FREE_PERCENT = 15;
-
-    private StorageManagementJobProvider mProvider;
-
-    @Override
-    public boolean onStartJob(JobParameters args) {
-        boolean isEnabled =
-                Settings.Secure.getInt(getContentResolver(),
-                        Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 0) != 0;
-        if (!isEnabled) {
-            return false;
-        }
-
-        StorageManager manager = getSystemService(StorageManager.class);
-        VolumeInfo internalVolume = manager.findVolumeById(VolumeInfo.ID_PRIVATE_INTERNAL);
-
-        final File dataPath = internalVolume.getPath();
-        if (!volumeNeedsManagement(dataPath)) {
-            Log.i(TAG, "Skipping automatic storage management.");
-            return false;
-        }
-        mProvider = FeatureFactory.getFactory(this).getStorageManagementJobProvider();
-        if (mProvider != null) {
-            return mProvider.onStartJob(this, args, getDaysToRetain());
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onStopJob(JobParameters args) {
-        if (mProvider != null) {
-            return mProvider.onStopJob(this, args);
-        }
-
-        return false;
-    }
-
-    private int getDaysToRetain() {
-        SharedPreferences sharedPreferences =
-                getSharedPreferences(SHARED_PREFRENCES_NAME, Context.MODE_PRIVATE);
-        return sharedPreferences.getInt(KEY_DAYS_TO_RETAIN,
-                AutomaticStorageManagerSettings.DEFAULT_DAYS_TO_RETAIN);
-    }
-
-    private boolean volumeNeedsManagement(final File dataPath) {
-        long lowStorageThreshold = (dataPath.getTotalSpace() * DEFAULT_LOW_FREE_PERCENT) / 100;
-        return dataPath.getFreeSpace() < lowStorageThreshold;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 670eed1..4946016 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.provider.Settings;
@@ -115,8 +116,8 @@
     @Override
     public boolean onPreferenceClick(Preference preference) {
         if (KEY_DELETION_HELPER.equals(preference.getKey())) {
-            startFragment(this, DeletionHelperFragment.class.getCanonicalName(),
-                    R.string.deletion_helper_title, 0, null);
+            Intent intent = new Intent(Settings.ACTION_DELETION_HELPER_SETTINGS);
+            getContext().startActivity(intent);
         }
         return true;
     }
diff --git a/src/com/android/settings/deletionhelper/ConfirmDeletionDialog.java b/src/com/android/settings/deletionhelper/ConfirmDeletionDialog.java
deleted file mode 100644
index fc6033e..0000000
--- a/src/com/android/settings/deletionhelper/ConfirmDeletionDialog.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.text.format.Formatter;
-import com.android.settings.R;
-
-/**
- * Fragment used to confirm that the user wishes to delete a certain amount of data.
- */
-public class ConfirmDeletionDialog extends DialogFragment implements
-        DialogInterface.OnClickListener {
-    public static final String TAG = "ConfirmDeletionDialog";
-    private static final String ARG_TOTAL_SPACE = "total_freeable";
-
-    public static ConfirmDeletionDialog newInstance(long freeableBytes) {
-        Bundle args = new Bundle(1);
-        args.putLong(ARG_TOTAL_SPACE, freeableBytes);
-
-        ConfirmDeletionDialog dialog = new ConfirmDeletionDialog();
-        dialog.setArguments(args);
-
-        return dialog;
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final Bundle args = getArguments();
-        long totalFreeableSpace = args.getLong(ARG_TOTAL_SPACE);
-
-        final Context context = getContext();
-        return new AlertDialog.Builder(context)
-                .setMessage(context.getString(R.string.deletion_helper_clear_dialog_message,
-                        Formatter.formatFileSize(context, totalFreeableSpace)))
-                .setPositiveButton(R.string.deletion_helper_clear_dialog_remove, this)
-                .setNegativeButton(android.R.string.cancel, null)
-                .create();
-    }
-
-    @Override
-    public void onClick(DialogInterface dialog, int which) {
-        ((DeletionHelperFragment) getTargetFragment()).clearData();
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/DeletionHelperFragment.java b/src/com/android/settings/deletionhelper/DeletionHelperFragment.java
deleted file mode 100644
index 9e1d0ea..0000000
--- a/src/com/android/settings/deletionhelper/DeletionHelperFragment.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.Activity;
-import android.app.Application;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v7.preference.Preference;
-import android.text.format.Formatter;
-import android.util.ArraySet;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import com.android.settings.CollapsibleCheckboxPreferenceGroup;
-import com.android.settings.PhotosDeletionPreference;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.R;
-import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.applications.AppStateBaseBridge;
-import com.android.settings.overlay.DeletionHelperFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import com.android.settingslib.applications.ApplicationsState.Callbacks;
-import com.android.settingslib.applications.ApplicationsState.Session;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-/**
- * Settings screen for the deletion helper, which manually removes data which is not recently used.
- */
-public class DeletionHelperFragment extends SettingsPreferenceFragment implements
-        ApplicationsState.Callbacks, AppStateBaseBridge.Callback,
-        Preference.OnPreferenceChangeListener, DeletionType.FreeableChangedListener,
-        View.OnClickListener {
-    public static final int CLEAR_DATA_RESULT = 1;
-    public static final String FREED_BYTES_KEY = "freed";
-
-    private static final String TAG = "DeletionHelperFragment";
-
-    private static final String EXTRA_HAS_BRIDGE = "hasBridge";
-    private static final String EXTRA_HAS_SIZES = "hasSizes";
-    private static final String EXTRA_CHECKED_SET = "checkedSet";
-
-    private static final String KEY_APPS_GROUP = "apps_group";
-    private static final String KEY_PHOTOS_VIDEOS_PREFERENCE = "delete_photos";
-    private static final String KEY_DOWNLOADS_PREFERENCE = "delete_downloads";
-
-    private static final int DOWNLOADS_LOADER_ID = 1;
-
-    private Button mCancel, mFree;
-    private CollapsibleCheckboxPreferenceGroup mApps;
-    private PhotosDeletionPreference mPhotoPreference;
-    private DownloadsDeletionPreferenceGroup mDownloadsPreference;
-
-    private ApplicationsState mState;
-    private Session mSession;
-    private HashSet<String> mCheckedApplications;
-    private AppStateUsageStatsBridge mDataUsageBridge;
-    private ArrayList<AppEntry> mAppEntries;
-    private boolean mHasReceivedAppEntries, mHasReceivedBridgeCallback, mFinishedLoading;
-    private DeletionHelperFeatureProvider mProvider;
-    private DeletionType mPhotoVideoDeletion;
-    private DownloadsDeletionType mDownloadsDeletion;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setAnimationAllowed(true);
-        Application app = getActivity().getApplication();
-        mState = ApplicationsState.getInstance(app);
-        mSession = mState.newSession(this);
-        mCheckedApplications = new HashSet<>();
-        mDataUsageBridge = new AppStateUsageStatsBridge(getActivity(), mState, this);
-
-        addPreferencesFromResource(R.xml.deletion_helper_list);
-        mApps = (CollapsibleCheckboxPreferenceGroup) findPreference(KEY_APPS_GROUP);
-        mPhotoPreference = (PhotosDeletionPreference) findPreference(KEY_PHOTOS_VIDEOS_PREFERENCE);
-        mDownloadsPreference =
-                (DownloadsDeletionPreferenceGroup) findPreference(KEY_DOWNLOADS_PREFERENCE);
-        mProvider =
-                FeatureFactory.getFactory(app).getDeletionHelperFeatureProvider();
-        if (mProvider != null) {
-            mPhotoVideoDeletion = mProvider.createPhotoVideoDeletionType(getContext());
-        }
-        mDownloadsDeletion = new DownloadsDeletionType(getActivity());
-
-        if (savedInstanceState != null) {
-            mHasReceivedAppEntries =
-                    savedInstanceState.getBoolean(EXTRA_HAS_SIZES, false);
-            mHasReceivedBridgeCallback =
-                    savedInstanceState.getBoolean(EXTRA_HAS_BRIDGE, false);
-            mCheckedApplications =
-                    (HashSet<String>) savedInstanceState.getSerializable(EXTRA_CHECKED_SET);
-        }
-    }
-
-    private void initializeButtons(View v) {
-        mCancel = (Button) v.findViewById(R.id.skip_button);
-        mCancel.setText(R.string.cancel);
-        mCancel.setOnClickListener(this);
-        mCancel.setVisibility(View.VISIBLE);
-
-        mFree = (Button) v.findViewById(R.id.next_button);
-        mFree.setText(R.string.storage_menu_free);
-        mFree.setOnClickListener(this);
-
-        Button back = (Button) v.findViewById(R.id.back_button);
-        back.setVisibility(View.GONE);
-    }
-
-    private void initializeDeletionPreferences() {
-        if (mProvider == null) {
-            getPreferenceScreen().removePreference(mPhotoPreference);
-            mPhotoPreference = null;
-        } else {
-            mPhotoPreference.registerFreeableChangedListener(this);
-            mPhotoPreference.registerDeletionService(mPhotoVideoDeletion);
-        }
-
-        mDownloadsPreference.registerFreeableChangedListener(this);
-        mDownloadsPreference.registerDeletionService(mDownloadsDeletion);
-        mApps.setOnPreferenceChangeListener(this);
-    }
-
-    @Override
-    public void onViewCreated(View v, Bundle savedInstanceState) {
-        super.onViewCreated(v, savedInstanceState);
-        initializeButtons(v);
-        initializeDeletionPreferences();
-        setLoading(true, false);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        mSession.resume();
-        mDataUsageBridge.resume();
-        mDownloadsDeletion.onResume();
-        getLoaderManager().initLoader(DOWNLOADS_LOADER_ID, new Bundle(), mDownloadsDeletion);
-
-        if (mPhotoVideoDeletion != null) {
-            mPhotoVideoDeletion.onResume();
-        }
-    }
-
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putBoolean(EXTRA_HAS_SIZES, mHasReceivedAppEntries);
-        outState.putBoolean(EXTRA_HAS_BRIDGE, mHasReceivedBridgeCallback);
-        outState.putSerializable(EXTRA_CHECKED_SET, mCheckedApplications);
-    }
-
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mDataUsageBridge.pause();
-        mSession.pause();
-        mDownloadsDeletion.onPause();
-
-        if (mPhotoVideoDeletion != null) {
-            mPhotoVideoDeletion.onPause();
-        }
-    }
-
-    private void rebuild() {
-        // Only rebuild if we have the packages and their usage stats.
-        if (!mHasReceivedBridgeCallback || !mHasReceivedAppEntries) {
-            return;
-        }
-
-        final ArrayList<AppEntry> apps =
-                mSession.rebuild(AppStateUsageStatsBridge.FILTER_USAGE_STATS,
-                        ApplicationsState.SIZE_COMPARATOR);
-        if (apps == null) return;
-        mAppEntries = apps;
-        refreshAppGroup(apps);
-
-        // All applications should be filled in if we've received the sizes.
-        // setLoading being called multiple times causes flickering, so we only do it once.
-        if (mHasReceivedAppEntries && !mFinishedLoading) {
-            mFinishedLoading = true;
-            setLoading(false, true);
-            getButtonBar().setVisibility(View.VISIBLE);
-        }
-        updateFreeButtonText();
-    }
-
-    private void updateFreeButtonText() {
-        mFree.setText(String.format(getActivity().getString(R.string.deletion_helper_free_button),
-                Formatter.formatFileSize(getActivity(), getTotalFreeableSpace())));
-    }
-
-    @Override
-    public void onRunningStateChanged(boolean running) {
-        // No-op.
-    }
-
-    @Override
-    public void onPackageListChanged() {
-        rebuild();
-    }
-
-    @Override
-    public void onRebuildComplete(ArrayList<AppEntry> apps) {
-    }
-
-    @Override
-    public void onPackageIconChanged() {
-    }
-
-    @Override
-    public void onPackageSizeChanged(String packageName) {
-        rebuild();
-    }
-
-    @Override
-    public void onAllSizesComputed() {
-        rebuild();
-    }
-
-    @Override
-    public void onLauncherInfoChanged() {
-    }
-
-    @Override
-    public void onLoadEntriesCompleted() {
-        mHasReceivedAppEntries = true;
-        rebuild();
-    }
-
-    @Override
-    public void onExtraInfoUpdated() {
-        mHasReceivedBridgeCallback = true;
-        rebuild();
-    }
-
-    @Override
-    protected int getMetricsCategory() {
-        return MetricsEvent.DEVICEINFO_STORAGE;
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        boolean checked = (boolean) newValue;
-        if (preference.getKey().equals(mApps.getKey())) {
-            return toggleAllApps(checked);
-        }
-
-        String packageName = ((AppDeletionPreference) preference).getPackageName();
-        if (checked) {
-            mCheckedApplications.add(packageName);
-        } else {
-            mCheckedApplications.remove(packageName);
-
-            // We remove the preference change listener to avoid toggling every app on and off.
-            mApps.setOnPreferenceChangeListener(null);
-            mApps.setChecked(false);
-            mApps.setOnPreferenceChangeListener(this);
-        }
-        updateFreeButtonText();
-        return true;
-    }
-
-    @Override
-    public void onFreeableChanged(int numItems, long freeableBytes) {
-        updateFreeButtonText();
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v.getId() == mFree.getId()) {
-            ConfirmDeletionDialog dialog =
-                    ConfirmDeletionDialog.newInstance(getTotalFreeableSpace());
-            // The 0 is a placeholder for an optional result code.
-            dialog.setTargetFragment(this, 0);
-            dialog.show(getFragmentManager(), ConfirmDeletionDialog.TAG);
-        } else {
-            finishFragment();
-        }
-    }
-
-    /**
-     * Clears out the selected apps and data from the device and closes the fragment.
-     */
-    protected void clearData() {
-        // This should be fine as long as there is only one extra deletion feature.
-        // In the future, this should be done in an async queue in order to not
-        // interfere with the simultaneous PackageDeletionTask.
-        if (mPhotoPreference != null && mPhotoPreference.isChecked()) {
-            mPhotoVideoDeletion.clearFreeableData();
-        }
-        mDownloadsDeletion.clearFreeableData();
-
-        ArraySet<String> apps = new ArraySet<>();
-        for (AppEntry entry : mAppEntries) {
-            if (mCheckedApplications.contains(entry.label)) {
-                synchronized (entry) {
-                    apps.add(entry.info.packageName);
-                }
-            }
-        }
-        // TODO: If needed, add an action on the callback.
-        PackageDeletionTask task = new PackageDeletionTask(getActivity().getPackageManager(), apps,
-                new PackageDeletionTask.Callback() {
-                    @Override
-                    public void onSuccess() {
-                    }
-
-                    @Override
-                    public void onError() {
-                        Log.e(TAG, "An error occurred while uninstalling packages.");
-                    }
-                });
-        Intent data = new Intent();
-        data.putExtra(FREED_BYTES_KEY, getTotalFreeableSpace());
-        getActivity().setResult(CLEAR_DATA_RESULT, data);
-
-        task.run();
-        finishFragment();
-    }
-
-    private long getTotalFreeableSpace() {
-        long freeableSpace = 0;
-        freeableSpace += getTotalAppsFreeableSpace(false);
-        if (mPhotoPreference != null) {
-            freeableSpace += mPhotoPreference.getFreeableBytes();
-        }
-        freeableSpace += mDownloadsDeletion.getFreeableBytes();
-        return freeableSpace;
-    }
-
-    private void refreshAppGroup(ArrayList<AppEntry> apps) {
-        int entryCount = apps.size();
-        cacheRemoveAllPrefs(mApps);
-        for (int i = 0; i < entryCount; i++) {
-            AppEntry entry = apps.get(i);
-            final String packageName = entry.label;
-            AppDeletionPreference preference =
-                    (AppDeletionPreference) getCachedPreference(entry.label);
-            if (preference == null) {
-                preference = new AppDeletionPreference(getActivity(), entry, mState);
-                preference.setKey(packageName);
-                preference.setOnPreferenceChangeListener(this);
-                mApps.addPreference(preference);
-            }
-            preference.setChecked(mCheckedApplications.contains(packageName));
-            preference.setOrder(i);
-        }
-        removeCachedPrefs(mApps);
-        updateAppsGroupText();
-    }
-
-    private long getTotalAppsFreeableSpace(boolean countUnchecked) {
-        long freeableSpace = 0;
-        if (mAppEntries != null) {
-            for (int i = 0; i < mAppEntries.size(); i++) {
-                final AppEntry entry = mAppEntries.get(i);
-                long entrySize = mAppEntries.get(i).size;
-                // If the entrySize is negative, it is either an unknown size or an error occurred.
-                if ((countUnchecked ||
-                        mCheckedApplications.contains(entry.label)) && entrySize > 0) {
-                    freeableSpace += entrySize;
-                }
-            }
-        }
-
-        return freeableSpace;
-    }
-
-    private void updateAppsGroupText() {
-        if (mAppEntries != null) {
-            Activity app = getActivity();
-            mApps.setTitle(app.getString(R.string.deletion_helper_apps_group_title,
-                    mAppEntries.size()));
-            mApps.setSummary(app.getString(R.string.deletion_helper_apps_group_summary,
-                    Formatter.formatFileSize(app,
-                            getTotalAppsFreeableSpace(true)),
-                    AppStateUsageStatsBridge.UNUSED_DAYS_DELETION_THRESHOLD));
-        }
-    }
-
-    private boolean toggleAllApps(boolean checked) {
-        for (AppEntry entry : mAppEntries) {
-            final String packageName = entry.label;
-            if (checked) {
-                mCheckedApplications.add(packageName);
-            } else {
-                mCheckedApplications.remove(packageName);
-            }
-        }
-        refreshAppGroup(mAppEntries);
-        updateFreeButtonText();
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/deletionhelper/DeletionType.java b/src/com/android/settings/deletionhelper/DeletionType.java
deleted file mode 100644
index ee1e0f7..0000000
--- a/src/com/android/settings/deletionhelper/DeletionType.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.content.Context;
-import android.support.v7.preference.PreferenceGroup;
-import android.support.v7.preference.Preference;
-
-/**
- * Helper for the Deletion Helper which can query, clear out, and visualize deletable data.
- * This could represent a helper for deleting photos, downloads, movies, etc.
- */
-public interface DeletionType {
-    /**
-     * Registers a callback to call when the amount of freeable space is updated.
-     * @param listener A callback.
-     */
-    void registerFreeableChangedListener(FreeableChangedListener listener);
-
-    /**
-     * Resumes an operation, intended to be called when the deletion fragment resumes.
-     */
-    void onResume();
-
-    /**
-     * Pauses the feature's operations, intended to be called when the deletion fragment is paused.
-     */
-    void onPause();
-
-    /**
-     * Asynchronously free up the freeable information for the feature.
-     */
-    void clearFreeableData();
-
-    /**
-     * Callback interface to listen for when a deletion feature's amount of freeable space updates.
-     */
-    interface FreeableChangedListener {
-        void onFreeableChanged(int numItems, long bytesFreeable);
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/DownloadsDeletionPreferenceGroup.java b/src/com/android/settings/deletionhelper/DownloadsDeletionPreferenceGroup.java
deleted file mode 100644
index 440b962..0000000
--- a/src/com/android/settings/deletionhelper/DownloadsDeletionPreferenceGroup.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.content.Context;
-import android.support.v7.preference.Preference;
-import android.text.format.DateUtils;
-import android.text.format.Formatter;
-import android.util.ArrayMap;
-import android.util.AttributeSet;
-import com.android.settings.CollapsibleCheckboxPreferenceGroup;
-import com.android.settings.R;
-
-import java.io.File;
-import java.util.Set;
-
-/**
- * DownloadsDeletionPreferenceGroup defines a checkable preference group which contains
- * downloads file deletion preferences.
- */
-public class DownloadsDeletionPreferenceGroup extends CollapsibleCheckboxPreferenceGroup
-        implements DeletionType.FreeableChangedListener, Preference.OnPreferenceChangeListener {
-    private DownloadsDeletionType mDeletionType;
-    private DeletionType.FreeableChangedListener mListener;
-
-    public DownloadsDeletionPreferenceGroup(Context context) {
-        this(context, null);
-    }
-
-    public DownloadsDeletionPreferenceGroup(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setOrderingAsAdded(false);
-        setOnPreferenceChangeListener(this);
-    }
-
-    /**
-     * Set up a deletion type to get info for the preference group.
-     * @param type A {@link DownloadsDeletionType}.
-     */
-    public void registerDeletionService(DownloadsDeletionType type) {
-        mDeletionType = type;
-        mDeletionType.registerFreeableChangedListener(this);
-    }
-
-    /**
-     * Registers a callback to be called when the amount of freeable space updates.
-     * @param listener The callback listener.
-     */
-    public void registerFreeableChangedListener(DeletionType.FreeableChangedListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void onFreeableChanged(int numItems, long freeableBytes) {
-        updatePreferenceText(numItems, freeableBytes, mDeletionType.getMostRecentLastModified());
-        maybeUpdateListener(numItems, freeableBytes);
-        updateFiles();
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        boolean checked = (boolean) newValue;
-        if (!checked) {
-            // Temporarily stop listening to avoid propagating the checked change to children.
-            setOnPreferenceChangeListener(null);
-            setChecked(false);
-            setOnPreferenceChangeListener(this);
-        }
-
-        // If the group checkbox changed, we need to toggle every child preference.
-        if (preference == this) {
-            for (int i = 0; i < getPreferenceCount(); i++) {
-                DownloadsFilePreference p = (DownloadsFilePreference) getPreference(i);
-                p.setOnPreferenceChangeListener(null);
-                mDeletionType.toggleFile(p.getFile(), checked);
-                p.setChecked(checked);
-                p.setOnPreferenceChangeListener(this);
-            }
-            maybeUpdateListener(mDeletionType.getFiles().size(), mDeletionType.getFreeableBytes());
-            return true;
-        }
-
-        // If a single DownloadFilePreference changed, we need to toggle just itself.
-        DownloadsFilePreference p = (DownloadsFilePreference) preference;
-        mDeletionType.toggleFile(p.getFile(), checked);
-        maybeUpdateListener(mDeletionType.getFiles().size(), mDeletionType.getFreeableBytes());
-        return true;
-    }
-
-
-    private void updatePreferenceText(int itemCount, long bytes, long mostRecent) {
-        Context context = getContext();
-        setTitle(context.getString(R.string.deletion_helper_downloads_title, itemCount));
-        // If there are no files to clear, show the empty text instead.
-        if (itemCount != 0) {
-            setSummary(context.getString(R.string.deletion_helper_downloads_summary,
-                    Formatter.formatFileSize(context, bytes),
-                    DateUtils.getRelativeTimeSpanString(mostRecent,
-                            System.currentTimeMillis(),
-                            DateUtils.DAY_IN_MILLIS,
-                            DateUtils.FORMAT_ABBREV_RELATIVE)));
-        } else {
-            setSummary(context.getString(R.string.deletion_helper_downloads_summary_empty,
-                    Formatter.formatFileSize(context, bytes)));
-        }
-    }
-
-    private void maybeUpdateListener(int numItems, long bytesFreeable) {
-        if (mListener != null) {
-            mListener.onFreeableChanged(numItems, bytesFreeable);
-        }
-    }
-
-    private void updateFiles() {
-        // TODO: Remove impl overlap with the cached preferences methods in
-        // SettingsPreferenceFragment.
-
-        // Cache the existing file preferences.
-        ArrayMap<String, Preference> cachedPreferences = new ArrayMap<>();
-        for (int i = 0; i < getPreferenceCount(); i++) {
-            Preference p = getPreference(i);
-            cachedPreferences.put(p.getKey(), p);
-        }
-
-        // Iterate over all of the files and re-use the old file preference, if it exists.
-        Set<File> files = mDeletionType.getFiles();
-        for (File file : files) {
-            DownloadsFilePreference filePreference =
-                    (DownloadsFilePreference) cachedPreferences.remove(file.getPath());
-            if (filePreference == null) {
-                filePreference = new DownloadsFilePreference(getContext(), file);
-                filePreference.setChecked(isChecked());
-                filePreference.setOnPreferenceChangeListener(this);
-            }
-            addPreference(filePreference);
-        }
-
-        // Remove all of the unused preferences.
-        for (Preference p : cachedPreferences.values()) {
-            removePreference(p);
-        }
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/DownloadsDeletionType.java b/src/com/android/settings/deletionhelper/DownloadsDeletionType.java
deleted file mode 100644
index 3a251eb..0000000
--- a/src/com/android/settings/deletionhelper/DownloadsDeletionType.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
-import android.content.Loader;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Environment;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import com.android.settings.deletionhelper.FetchDownloadsLoader.DownloadsResult;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * The DownloadsDeletionType provides stale download file information to the
- * {@link DownloadsDeletionPreferenceGroup}.
- */
-public class DownloadsDeletionType implements DeletionType, LoaderCallbacks<DownloadsResult> {
-    private long mBytes;
-    private long mMostRecent;
-    private FreeableChangedListener mListener;
-    private Context mContext;
-    private ArrayMap<File, Boolean> mFiles;
-
-    public DownloadsDeletionType(Context context) {
-        mContext = context;
-        mFiles = new ArrayMap<>();
-    }
-
-    @Override
-    public void registerFreeableChangedListener(FreeableChangedListener listener) {
-        mListener = listener;
-        if (mFiles != null) {
-            maybeUpdateListener();
-        }
-    }
-
-    @Override
-    public void onResume() {
-    }
-
-    @Override
-    public void onPause() {
-    }
-
-    @Override
-    public void clearFreeableData() {
-        if (mFiles != null) {
-            AsyncTask.execute(new Runnable() {
-                @Override
-                public void run() {
-                    for (Map.Entry<File, Boolean> entry : mFiles.entrySet()) {
-                        if (entry.getValue()) {
-                            entry.getKey().delete();
-                        }
-                    }
-                }
-            });
-        }
-    }
-
-    @Override
-    public Loader<DownloadsResult> onCreateLoader(int id, Bundle args) {
-        return new FetchDownloadsLoader(mContext,
-                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
-    }
-
-    @Override
-    public void onLoadFinished(Loader<DownloadsResult> loader, DownloadsResult data) {
-        mMostRecent = data.youngestLastModified;
-        for (File file : data.files) {
-            if (mFiles.containsKey(file)) {
-                continue;
-            }
-            mFiles.put(file, false);
-        }
-        mBytes = data.totalSize;
-        maybeUpdateListener();
-    }
-
-    @Override
-    public void onLoaderReset(Loader<DownloadsResult> loader) {
-    }
-
-    /**
-     * Returns the most recent last modified time for any clearable file.
-     * @return The last modified time.
-     */
-    public long getMostRecentLastModified() {
-        return mMostRecent;
-    }
-
-    /**
-     * Returns the files in the Downloads folder after the loader task finishes.
-     */
-    public Set<File> getFiles() {
-        if (mFiles == null) {
-            return null;
-        }
-        return mFiles.keySet();
-    }
-
-    /**
-     * Toggle if a file should be deleted when the service is asked to clear files.
-     */
-    public void toggleFile(File file, boolean checked) {
-        mFiles.put(file, checked);
-    }
-
-    /**
-     * Returns the number of bytes that would be cleared if the deletion tasks runs.
-     */
-    public long getFreeableBytes() {
-        long freedBytes = 0;
-        for (Map.Entry<File, Boolean> entry : mFiles.entrySet()) {
-            if (entry.getValue()) {
-                freedBytes += entry.getKey().length();
-            }
-        }
-        return freedBytes;
-    }
-
-    private void maybeUpdateListener() {
-        if (mListener != null) {
-            mListener.onFreeableChanged(mFiles.size(), mBytes);
-        }
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/DownloadsFilePreference.java b/src/com/android/settings/deletionhelper/DownloadsFilePreference.java
deleted file mode 100644
index af8f6b6..0000000
--- a/src/com/android/settings/deletionhelper/DownloadsFilePreference.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.content.Context;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.CheckBoxPreference;
-import android.text.format.DateUtils;
-import android.text.format.Formatter;
-import com.android.settings.R;
-
-import java.io.File;
-
-/**
- * DownloadsFilePreference is a preference representing a file in the Downloads folder
- * with a checkbox that represents if the file should be deleted.
- */
-public class DownloadsFilePreference extends CheckBoxPreference {
-    private File mFile;
-
-    public DownloadsFilePreference(Context context, File file) {
-        super(context);
-        mFile = file;
-        setKey(mFile.getPath());
-        setTitle(file.getName());
-        setSummary(context.getString(R.string.deletion_helper_downloads_summary,
-                Formatter.formatFileSize(getContext(), file.length()),
-                DateUtils.getRelativeTimeSpanString(mFile.lastModified(),
-                        System.currentTimeMillis(),
-                        DateUtils.DAY_IN_MILLIS,
-                        DateUtils.FORMAT_ABBREV_RELATIVE)));
-    }
-
-    public File getFile() {
-        return mFile;
-    }
-
-    @Override
-    public int compareTo(Preference other) {
-        if (other == null) {
-            return 1;
-        }
-
-        if (other instanceof DownloadsFilePreference) {
-            DownloadsFilePreference preference = (DownloadsFilePreference) other;
-            return Long.compare(getFile().length(), preference.getFile().length());
-        } else {
-            // If a non-DownloadsFilePreference appears, consider ourselves to be greater.
-            // This means if a non-DownloadsFilePreference sneaks into a DownloadsPreferenceGroup
-            // then the DownloadsFilePreference will appear higher.
-            return 1;
-        }
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/FetchDownloadsLoader.java b/src/com/android/settings/deletionhelper/FetchDownloadsLoader.java
deleted file mode 100644
index 86352c9..0000000
--- a/src/com/android/settings/deletionhelper/FetchDownloadsLoader.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.content.Context;
-import android.support.annotation.VisibleForTesting;
-import com.android.settings.utils.AsyncLoader;
-
-import java.io.File;
-import java.util.ArrayList;
-
-/**
- * FetchDownloadsLoader is an asynchronous task which returns files in the Downloads
- * directory which have not been modified in longer than 90 days.
- */
-public class FetchDownloadsLoader extends
-        AsyncLoader<FetchDownloadsLoader.DownloadsResult> {
-    private File mDirectory;
-
-    /**
-     * Sets up a FetchDownloadsLoader in any directory.
-     * @param directory The directory to look into.
-     */
-    public FetchDownloadsLoader(Context context, File directory) {
-        super(context);
-        mDirectory = directory;
-    }
-
-    @Override
-    protected void onDiscardResult(DownloadsResult result) {}
-
-    @Override
-    public DownloadsResult loadInBackground() {
-        return collectFiles(mDirectory);
-    }
-
-    @VisibleForTesting
-    static DownloadsResult collectFiles(File dir) {
-        return collectFiles(dir, new DownloadsResult());
-    }
-
-    private static DownloadsResult collectFiles(File dir, DownloadsResult result) {
-        File downloadFiles[] = dir.listFiles();
-        if (downloadFiles == null) {
-        }
-        if (downloadFiles != null && downloadFiles.length > 0) {
-            for (File currentFile : downloadFiles) {
-                if (currentFile.isDirectory()) {
-                    collectFiles(currentFile, result);
-                } else {
-                    if (currentFile.lastModified() < result.youngestLastModified) {
-                        result.youngestLastModified = currentFile.lastModified();
-                    }
-                    result.files.add(currentFile);
-                    result.totalSize += currentFile.length();
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * The DownloadsResult is the result of a {@link FetchDownloadsLoader} with the files
-     * and the amount of space they use.
-     */
-    public static class DownloadsResult {
-        public long totalSize;
-        public long youngestLastModified;
-        public ArrayList<File> files;
-
-        public DownloadsResult() {
-            this(0, Long.MAX_VALUE, new ArrayList<File>());
-        }
-
-        public DownloadsResult(long totalSize, long youngestLastModified, ArrayList<File> files) {
-            this.totalSize = totalSize;
-            this.youngestLastModified = youngestLastModified;
-            this.files = files;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/deletionhelper/PackageDeletionTask.java b/src/com/android/settings/deletionhelper/PackageDeletionTask.java
deleted file mode 100644
index 69e6a6c..0000000
--- a/src/com/android/settings/deletionhelper/PackageDeletionTask.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.android.settings.deletionhelper;
-
-import android.content.pm.IPackageDeleteObserver;
-import android.content.pm.PackageManager;
-import android.os.UserHandle;
-
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Deletes a specified set of apps as a specified user and calls back once done.
- */
-public class PackageDeletionTask {
-    private Set<String> mPackages;
-    private Callback mCallback;
-    private PackageManager mPm;
-    private UserHandle mUser;
-
-    public PackageDeletionTask(PackageManager pm, Set<String> packageNames, Callback callback) {
-        mPackages = packageNames;
-        mCallback = callback;
-        mPm = pm;
-        mUser = android.os.Process.myUserHandle();
-    }
-
-    public void run() {
-        PackageDeletionObserver observer = new PackageDeletionObserver(mPackages.size());
-        for (String packageName : mPackages) {
-            mPm.deletePackageAsUser(packageName, observer, 0, mUser.getIdentifier());
-        }
-    }
-
-    private class PackageDeletionObserver extends IPackageDeleteObserver.Stub {
-        private final AtomicInteger mPackagesRemaining = new AtomicInteger(0);
-
-        public PackageDeletionObserver(int packages) {
-            mPackagesRemaining.set(packages);
-        }
-
-        @Override
-        public void packageDeleted(String packageName, int returnCode) {
-            if (returnCode != PackageManager.DELETE_SUCCEEDED) {
-                mCallback.onError();
-                return;
-            }
-
-            int remaining = mPackagesRemaining.decrementAndGet();
-            if (remaining == 0) {
-                mCallback.onSuccess();
-            }
-        }
-    }
-
-    public static abstract class Callback {
-        public abstract void onSuccess();
-        public abstract void onError();
-    }
-}
diff --git a/src/com/android/settings/deletionhelper/StorageManagerUpsellDialog.java b/src/com/android/settings/deletionhelper/StorageManagerUpsellDialog.java
deleted file mode 100644
index e72933a..0000000
--- a/src/com/android/settings/deletionhelper/StorageManagerUpsellDialog.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.text.format.Formatter;
-import com.android.settings.R;
-import android.util.Log;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Fragment for activating the storage manager after a manual clear.
- */
-public class StorageManagerUpsellDialog extends DialogFragment
-        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
-    public static final String TAG = "StorageManagerUpsellDialog";
-    private static final String SHARED_PREFERENCES_NAME = "StorageManagerUpsellDialog";
-    private static final String NEXT_SHOW_TIME = "next_show_time";
-    private static final String DISMISSED_COUNT = "dismissed_count";
-    private static final String NO_THANKS_COUNT = "no_thanks_count";
-
-    private static final String ARGS_FREED_BYTES = "freed_bytes";
-
-    private static final long NEVER = -1;
-    private static final long DISMISS_SHORT_DELAY = TimeUnit.DAYS.toMillis(14);
-    private static final long DISMISS_LONG_DELAY = TimeUnit.DAYS.toMillis(90);
-    private static final int DISMISS_LONG_THRESHOLD = 9;
-    private static final long NO_THANKS_SHORT_DELAY = TimeUnit.DAYS.toMillis(90);
-    private static final long NO_THANKS_LONG_DELAY = NEVER;
-    private static final int NO_THANKS_LONG_THRESHOLD = 3;
-
-    public static StorageManagerUpsellDialog newInstance(long freedBytes) {
-        StorageManagerUpsellDialog dialog = new StorageManagerUpsellDialog();
-        Bundle args = new Bundle(1);
-        args.putLong(ARGS_FREED_BYTES, freedBytes);
-        dialog.setArguments(args);
-        return dialog;
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final Bundle args = getArguments();
-        long freedBytes = args.getLong(ARGS_FREED_BYTES);
-
-        final Context context = getContext();
-        return new AlertDialog.Builder(context)
-                .setTitle(context.getString(R.string.deletion_helper_upsell_title,
-                        Formatter.formatFileSize(context, freedBytes)))
-                .setMessage(context.getString(R.string.deletion_helper_upsell_summary))
-                .setPositiveButton(R.string.deletion_helper_upsell_activate, this)
-                .setNegativeButton(R.string.deletion_helper_upsell_cancel, this)
-                .create();
-    }
-
-    @Override
-    public void onClick(DialogInterface dialog, int buttonId) {
-        if (buttonId == DialogInterface.BUTTON_POSITIVE) {
-            // TODO: Activate the storage manager once the storage manager is landed.
-        } else {
-            SharedPreferences sp = getSharedPreferences(getContext());
-            int noThanksCount = sp.getInt(NO_THANKS_COUNT, 0) + 1;
-            SharedPreferences.Editor editor = sp.edit();
-            editor.putInt(NO_THANKS_COUNT, noThanksCount);
-            editor.putLong(NEXT_SHOW_TIME,
-                    System.currentTimeMillis() + getNoThanksDelay(noThanksCount));
-            editor.apply();
-        }
-    }
-
-    @Override
-    public void onCancel(DialogInterface dialog) {
-        SharedPreferences sp = getSharedPreferences(getContext());
-        int dismissCount = sp.getInt(DISMISSED_COUNT, 0) + 1;
-        SharedPreferences.Editor editor = sp.edit();
-        editor.putInt(DISMISSED_COUNT, dismissCount);
-        editor.putLong(NEXT_SHOW_TIME,
-                System.currentTimeMillis() + getDismissDelay(dismissCount));
-        editor.apply();
-    }
-
-    /**
-     * Returns if the dialog should be shown, given the delays between when it is shown.
-     * @param context Context to get shared preferences for determining the next show time.
-     */
-    public static boolean shouldShow(Context context) {
-        // TODO: If the Storage Manager is enabled, return false.
-        long nextTimeToShow = getSharedPreferences(context).getLong(NEXT_SHOW_TIME, 0);
-
-        if (nextTimeToShow == NEVER) {
-            return false;
-        }
-
-        return System.currentTimeMillis() > nextTimeToShow;
-    }
-
-    private static SharedPreferences getSharedPreferences(Context context) {
-        return context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
-    }
-
-    private static long getNoThanksDelay(int noThanksCount) {
-        return (noThanksCount > NO_THANKS_LONG_THRESHOLD)
-                ? NO_THANKS_LONG_DELAY : NO_THANKS_SHORT_DELAY;
-    }
-
-    private static long getDismissDelay(int dismissCount) {
-        return (dismissCount > DISMISS_LONG_THRESHOLD)
-                ? DISMISS_LONG_DELAY : DISMISS_SHORT_DELAY;
-    }
-}
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 7633407..0698666 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -38,6 +38,7 @@
 import android.os.storage.VolumeInfo;
 import android.os.storage.VolumeRecord;
 import android.provider.DocumentsContract;
+import android.provider.Settings;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceGroup;
@@ -59,9 +60,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.ManageApplications;
-import com.android.settings.deletionhelper.DeletionHelperFragment;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
-import com.android.settings.deletionhelper.StorageManagerUpsellDialog;
 import com.android.settings.deviceinfo.StorageSettings.MountTask;
 import com.android.settingslib.deviceinfo.StorageMeasurement;
 import com.android.settingslib.deviceinfo.StorageMeasurement.MeasurementDetails;
@@ -445,8 +444,9 @@
                 startActivity(intent);
                 return true;
             case R.id.storage_free:
-                startFragment(this, DeletionHelperFragment.class.getCanonicalName(),
-                        R.string.deletion_helper_title, DELETION_HELPER_SETTINGS, args);
+                final Intent deletion_helper_intent =
+                        new Intent(Settings.ACTION_DELETION_HELPER_SETTINGS);
+                startActivity(deletion_helper_intent);
                 return true;
         }
         return super.onOptionsItemSelected(item);
@@ -540,18 +540,6 @@
         return super.onPreferenceTreeClick(pref);
     }
 
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == DELETION_HELPER_SETTINGS && resultCode == DELETION_HELPER_CLEAR &&
-                StorageManagerUpsellDialog.shouldShow(getActivity())) {
-            long freedBytes = data.getLongExtra(DeletionHelperFragment.FREED_BYTES_KEY, 0);
-            StorageManagerUpsellDialog dialog =
-                    StorageManagerUpsellDialog.newInstance(freedBytes);
-            dialog.show(getFragmentManager(), StorageManagerUpsellDialog.TAG);
-        }
-    }
-
     private final MeasurementReceiver mReceiver = new MeasurementReceiver() {
         @Override
         public void onDetailsChanged(MeasurementDetails details) {
diff --git a/src/com/android/settings/fuelgauge/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/PowerGaugePreference.java
index b0bf4b4..9371a19 100644
--- a/src/com/android/settings/fuelgauge/PowerGaugePreference.java
+++ b/src/com/android/settings/fuelgauge/PowerGaugePreference.java
@@ -35,7 +35,7 @@
     private final int mIconSize;
 
     private BatteryEntry mInfo;
-    private final CharSequence mContentDescription;
+    private CharSequence mContentDescription;
     private CharSequence mProgress;
 
     public PowerGaugePreference(Context context, Drawable icon, CharSequence contentDescription,
@@ -48,6 +48,11 @@
         mIconSize = context.getResources().getDimensionPixelSize(R.dimen.app_icon_size);
     }
 
+    public void setContentDescription(String name) {
+        mContentDescription = name;
+        notifyChanged();
+    }
+
     public void setPercent(double percentOfMax, double percentOfTotal) {
         mProgress = Utils.formatPercentage((int) (percentOfTotal + 0.5));
         notifyChanged();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 78f9833..443b480 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -432,6 +432,9 @@
                         final UserHandle userHandle = new UserHandle(userId);
                         pgp.setIcon(mUm.getBadgedIconForUser(entry.getIcon(), userHandle));
                         pgp.setTitle(entry.name);
+                        if (entry.sipper.drainType == DrainType.APP) {
+                            pgp.setContentDescription(entry.name);
+                        }
                     }
                     break;
                 case BatteryEntry.MSG_REPORT_FULLY_DRAWN:
diff --git a/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java b/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java
deleted file mode 100644
index 15b5896..0000000
--- a/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.overlay;
-
-import android.content.Context;
-import android.support.v7.preference.PreferenceGroup;
-import com.android.settings.deletionhelper.DeletionType;
-
-/**
- * Feature provider for the manual deletion helper Settings page.
- */
-public interface DeletionHelperFeatureProvider {
-    /**
-     * Creates a {@link DeletionType} for clearing out stored photos and videos on the device.
-     */
-    DeletionType createPhotoVideoDeletionType(Context context);
-}
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 04f2f81..1bffc2b 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -61,12 +61,6 @@
 
     public abstract SupportFeatureProvider getSupportFeatureProvider(Context context);
 
-    /**
-     * Return a provider which adds additional deletion services to the Deletion Helper.
-     */
-    public abstract DeletionHelperFeatureProvider getDeletionHelperFeatureProvider();
-    public abstract StorageManagementJobProvider getStorageManagementJobProvider();
-
     public static final class FactoryNotFoundException extends RuntimeException {
         public FactoryNotFoundException(Throwable throwable) {
             super("Unable to create factory. Did you misconfigure Proguard?", throwable);
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 0547247..ce561f3 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -28,14 +28,4 @@
         return null;
     }
 
-    @Override
-    public DeletionHelperFeatureProvider getDeletionHelperFeatureProvider() {
-        return null;
-    }
-
-    @Override
-    public StorageManagementJobProvider getStorageManagementJobProvider() {
-        return null;
-    }
-
 }
diff --git a/src/com/android/settings/overlay/StorageManagementJobProvider.java b/src/com/android/settings/overlay/StorageManagementJobProvider.java
deleted file mode 100644
index 80f8737..0000000
--- a/src/com/android/settings/overlay/StorageManagementJobProvider.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.overlay;
-
-import android.app.job.JobParameters;
-import android.content.Context;
-
-/**
- * Feature provider for automatic storage management jobs.
- */
-public interface StorageManagementJobProvider {
-    /**
-     * Starts an asynchronous deletion job to clear out storage older than
-     * @param params Standard JobService parameters.
-     * @param daysToRetain Number of days of information to retain on the device.
-     * @return If the job needs to process the work on a separate thread.
-     */
-    boolean onStartJob(Context context, JobParameters params, int daysToRetain);
-
-    /**
-     * Attempt to stop the execution of the job.
-     * @param params Parameters specifying info about this job.
-     * @return If the job should be rescheduled.
-     */
-    boolean onStopJob(Context context, JobParameters params);
-}
diff --git a/src/com/android/settings/users/EditUserPhotoController.java b/src/com/android/settings/users/EditUserPhotoController.java
index 5229da0..d60b4c3 100644
--- a/src/com/android/settings/users/EditUserPhotoController.java
+++ b/src/com/android/settings/users/EditUserPhotoController.java
@@ -32,6 +32,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.os.StrictMode;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.ContactsContract.DisplayPhoto;
@@ -223,7 +224,12 @@
         appendOutputExtra(intent, mCropPictureUri);
         appendCropExtras(intent);
         if (intent.resolveActivity(mContext.getPackageManager()) != null) {
-            mFragment.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO);
+            try {
+                StrictMode.disableDeathOnFileUriExposure();
+                mFragment.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO);
+            } finally {
+                StrictMode.enableDeathOnFileUriExposure();
+            }
         } else {
             onPhotoCropped(pictureUri, false);
         }
diff --git a/tests/unit/src/com/android/settings/deletionhelper/FetchDownloadsLoaderTest.java b/tests/unit/src/com/android/settings/deletionhelper/FetchDownloadsLoaderTest.java
deleted file mode 100644
index 52312d1..0000000
--- a/tests/unit/src/com/android/settings/deletionhelper/FetchDownloadsLoaderTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import com.android.settings.deletionhelper.FetchDownloadsLoader.DownloadsResult;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runners.JUnit4;
-
-import java.io.File;
-import java.io.FileWriter;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertEquals;
-
-@RunWith(JUnit4.class)
-public class FetchDownloadsLoaderTest {
-    @Rule
-    public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
-    @Test
-    public void testEmptyDirectory() throws Exception {
-        DownloadsResult result =
-                FetchDownloadsLoader.collectFiles(temporaryFolder.getRoot());
-        assertNotNull(result);
-        assertEquals(0, result.totalSize);
-        assertEquals(0, result.files.size());
-    }
-
-    @Test
-    public void testFilesInDirectory() throws Exception {
-        temporaryFolder.newFile();
-        temporaryFolder.newFile();
-
-        DownloadsResult result =
-                FetchDownloadsLoader.collectFiles(temporaryFolder.getRoot());
-        assertNotNull(result);
-        assertEquals(0, result.totalSize);
-        assertEquals(2, result.files.size());
-    }
-
-    @Test
-    public void testNestedDirectories() throws Exception {
-        File tempDir = temporaryFolder.newFolder();
-
-        File testFile = File.createTempFile("test", null, tempDir);
-        testFile.deleteOnExit();
-        DownloadsResult result =
-                FetchDownloadsLoader.collectFiles(temporaryFolder.getRoot());
-        assertNotNull(result);
-        assertEquals(0, result.totalSize);
-        assertEquals(1, result.files.size());
-    }
-
-    @Test
-    public void testSumFileSizes() throws Exception {
-        File first = temporaryFolder.newFile();
-        FileWriter fileWriter = new FileWriter(first);
-        fileWriter.write("test");
-        fileWriter.close();
-
-        File second = temporaryFolder.newFile();
-        fileWriter = new FileWriter(second);
-        fileWriter.write("test2");
-        fileWriter.close();
-
-        DownloadsResult result =
-                FetchDownloadsLoader.collectFiles(temporaryFolder.getRoot());
-        assertNotNull(result);
-        assertEquals(9, result.totalSize);
-        assertEquals(2, result.files.size());
-    }
-}
diff --git a/tests/unit/src/com/android/settings/deletionhelper/PackageDeletionTaskTest.java b/tests/unit/src/com/android/settings/deletionhelper/PackageDeletionTaskTest.java
deleted file mode 100644
index 10ba585..0000000
--- a/tests/unit/src/com/android/settings/deletionhelper/PackageDeletionTaskTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.deletionhelper;
-
-import android.test.AndroidTestCase;
-import android.content.pm.IPackageDeleteObserver;
-import android.content.pm.PackageManager;
-import android.os.RemoteException;
-import android.test.mock.MockPackageManager;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.settings.deletionhelper.PackageDeletionTask;
-import com.android.settings.deletionhelper.PackageDeletionTask.Callback;
-
-import java.util.Set;
-import java.util.HashSet;
-
-public class PackageDeletionTaskTest extends AndroidTestCase {
-    private FakePackageManager mPackageManager;
-    private Set<String> mDeletedApps;
-
-    @Override
-    protected void setUp() throws Exception {
-        mPackageManager = new FakePackageManager();
-        mDeletedApps = new HashSet<String>();
-    }
-
-    @SmallTest
-    public void testDeleteNoApps() throws Exception {
-        runTask(new HashSet<String>(), false);
-    }
-
-    @SmallTest
-    public void testDeleteOneApp() throws Exception {
-        HashSet<String> appsToDelete = new HashSet<String>();
-        appsToDelete.add("app.test1");
-        runTask(appsToDelete, false);
-    }
-
-    @SmallTest
-    public void testDeleteManyApps() throws Exception {
-        HashSet<String> appsToDelete = new HashSet<String>();
-        appsToDelete.add("app.test1");
-        appsToDelete.add("app.test2");
-        runTask(appsToDelete, false);
-    }
-
-    @SmallTest
-    public void testDeleteFails() throws Exception {
-        HashSet<String> appsToDelete = new HashSet<String>();
-        appsToDelete.add("app.test1");
-        mPackageManager.deletionSucceeds = false;
-        runTask(appsToDelete, true);
-    }
-
-    private void runTask(HashSet<String> appsToDelete, boolean shouldFail) {
-        PackageDeletionTask task = new PackageDeletionTask(mPackageManager, appsToDelete,
-                new VerifierCallback(appsToDelete, shouldFail));
-        task.run();
-    }
-
-    class FakePackageManager extends MockPackageManager {
-        public boolean deletionSucceeds = true;
-
-        @Override
-        public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
-                                        int flags, int userId) {
-            int resultCode;
-            if (deletionSucceeds) {
-                resultCode = PackageManager.DELETE_SUCCEEDED;
-                mDeletedApps.add(packageName);
-            } else {
-                resultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR;
-            }
-
-            try {
-                observer.packageDeleted(packageName, resultCode);
-            } catch (RemoteException e) {
-                fail(e.toString());
-            }
-        }
-    }
-
-    class VerifierCallback extends Callback {
-        private Set<String> mExpectedDeletedApps;
-        private boolean mShouldFail;
-
-        public VerifierCallback(HashSet<String> expectedDeletedApps, boolean shouldFail) {
-            mExpectedDeletedApps = expectedDeletedApps;
-            mShouldFail = shouldFail;
-        }
-
-        @Override
-        public void onSuccess() {
-            System.out.println("lol");
-            assertFalse(mShouldFail);
-            assertEquals(mExpectedDeletedApps, mDeletedApps);
-        }
-
-        @Override
-        public void onError() {
-            assertTrue(mShouldFail);
-        }
-    }
-
-}