diff --git a/res/layout/support_disclaimer_content.xml b/res/layout/support_disclaimer_content.xml
new file mode 100644
index 0000000..c7a5689
--- /dev/null
+++ b/res/layout/support_disclaimer_content.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:padding="24dp">
+
+    <TextView
+        android:id="@+id/support_disclaimer_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/support_disclaimer_content"/>
+
+</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 10ad16b..95ce23b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7532,6 +7532,13 @@
 
     <!-- Button label that redirects user who needs help for signin to help screen [CHAR LIMIT=NONE]-->
     <string name="support_sign_in_required_help">Can\'t access your account?</string>
+
+    <!-- Dialog title displayed before initiating real time support [CHAR LIMIT=80]-->
+    <string name="support_disclaimer_title">Send system information</string>
+
+    <!-- Dialog content displayed before initiating real time support  [CHAR LIMIT=NONE]-->
+    <string name="support_disclaimer_content">To help address your issue quickly, we need system information for diagnosis.</string>
+
     <!-- [CHAR LIMIT=60] Title of work profile setting page -->
     <string name="managed_profile_settings_title">Work profile settings</string>
     <!-- [CHAR LIMIT=60] The preference title for enabling cross-profile remote contact search -->
diff --git a/src/com/android/settings/PhotosDeletionPreference.java b/src/com/android/settings/PhotosDeletionPreference.java
index 8c98370..643b3f1 100644
--- a/src/com/android/settings/PhotosDeletionPreference.java
+++ b/src/com/android/settings/PhotosDeletionPreference.java
@@ -26,8 +26,7 @@
  * Preference to handle the deletion of photos and videos in the Deletion Helper.
  */
 public class PhotosDeletionPreference extends DeletionPreference {
-    // TODO(b/28560570): Remove this dummy value.
-    private static final int FAKE_DAYS_TO_KEEP = 30;
+    public static final int DAYS_TO_KEEP = 30;
 
     public PhotosDeletionPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -42,7 +41,7 @@
         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), FAKE_DAYS_TO_KEEP));
+                Formatter.formatFileSize(context, bytes), DAYS_TO_KEEP));
     }
 
     @Override
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index aac7053..d9de56d 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -24,6 +24,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.provider.Settings;
+import android.util.Log;
 import android.widget.Switch;
 import android.widget.Toast;
 
@@ -189,7 +190,16 @@
         MetricsLogger.action(mContext, MetricsEvent.ACTION_BLUETOOTH_TOGGLE, isChecked);
 
         if (mLocalAdapter != null) {
-            mLocalAdapter.setBluetoothEnabled(isChecked);
+            boolean status = mLocalAdapter.setBluetoothEnabled(isChecked);
+            // If we cannot toggle it ON then reset the UI assets:
+            // a) The switch should be OFF but it should still be togglable (enabled = True)
+            // b) The switch bar should have OFF text.
+            if (isChecked && !status) {
+                switchView.setChecked(false);
+                mSwitch.setEnabled(true);
+                mSwitchBar.setTextViewLabel(false);
+                return;
+            }
         }
         mSwitch.setEnabled(false);
     }
diff --git a/src/com/android/settings/dashboard/SupportItemAdapter.java b/src/com/android/settings/dashboard/SupportItemAdapter.java
index d3862b4..4956464 100644
--- a/src/com/android/settings/dashboard/SupportItemAdapter.java
+++ b/src/com/android/settings/dashboard/SupportItemAdapter.java
@@ -20,6 +20,7 @@
 import android.annotation.LayoutRes;
 import android.annotation.StringRes;
 import android.app.Activity;
+import android.app.DialogFragment;
 import android.content.Intent;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
@@ -30,6 +31,7 @@
 
 import com.android.settings.R;
 import com.android.settings.overlay.SupportFeatureProvider;
+import com.android.settings.support.SupportDisclaimerDialogFragment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -248,25 +250,44 @@
     }
 
     /**
+     * Show a disclaimer dialog and start support action after disclaimer has been acknowledged.
+     */
+    private void tryStartDisclaimerAndSupport(final @SupportFeatureProvider.SupportType int type) {
+        if (mSupportFeatureProvider.shouldShowDisclaimerDialog(mActivity)) {
+            DialogFragment fragment = SupportDisclaimerDialogFragment.newInstance(mAccount, type);
+            fragment.show(mActivity.getFragmentManager(), SupportDisclaimerDialogFragment.TAG);
+            return;
+        }
+        mSupportFeatureProvider.startSupport(mActivity, mAccount, type);
+    }
+
+    /**
      * Click handler for starting escalation options.
      */
     private final class EscalationClickListener implements View.OnClickListener {
         @Override
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case android.R.id.text1: {
-                    final Intent intent = mAccount == null
-                            ? mSupportFeatureProvider.getAccountLoginIntent()
-                            : mSupportFeatureProvider.getSupportIntent(mActivity, mAccount, PHONE);
-                    mActivity.startActivityForResult(intent, 0 /* requestCode */);
-                    break;
+        public void onClick(final View v) {
+            if (mAccount == null) {
+                switch (v.getId()) {
+                    case android.R.id.text1:
+                        mActivity.startActivityForResult(
+                                mSupportFeatureProvider.getAccountLoginIntent(),
+                                0 /* requestCode */);
+                        break;
+                    case android.R.id.text2:
+                        mActivity.startActivityForResult(
+                                mSupportFeatureProvider.getSignInHelpIntent(mActivity),
+                                0 /* requestCode */);
+                        break;
                 }
-                case android.R.id.text2: {
-                    final Intent intent = mAccount == null
-                            ? mSupportFeatureProvider.getSignInHelpIntent(mActivity)
-                            : mSupportFeatureProvider.getSupportIntent(mActivity, mAccount, CHAT);
-                    mActivity.startActivityForResult(intent, 0 /* requestCode */);
-                    break;
+            } else {
+                switch (v.getId()) {
+                    case android.R.id.text1:
+                        tryStartDisclaimerAndSupport(PHONE);
+                        break;
+                    case android.R.id.text2:
+                        tryStartDisclaimerAndSupport(CHAT);
+                        break;
                 }
             }
         }
@@ -321,10 +342,14 @@
         }
 
         static final class Builder {
-            @LayoutRes private final int mType;
-            @DrawableRes private int mIcon;
-            @StringRes private int mText1;
-            @StringRes private int mText2;
+            @LayoutRes
+            private final int mType;
+            @DrawableRes
+            private int mIcon;
+            @StringRes
+            private int mText1;
+            @StringRes
+            private int mText2;
             private String mSummary1;
             private String mSummary2;
             private Intent mIntent;
diff --git a/src/com/android/settings/deletionhelper/DeletionHelperFragment.java b/src/com/android/settings/deletionhelper/DeletionHelperFragment.java
index 357db90..e6b99df 100644
--- a/src/com/android/settings/deletionhelper/DeletionHelperFragment.java
+++ b/src/com/android/settings/deletionhelper/DeletionHelperFragment.java
@@ -98,7 +98,7 @@
         mProvider =
                 FeatureFactory.getFactory(app).getDeletionHelperFeatureProvider();
         if (mProvider != null) {
-            mPhotoVideoDeletion = mProvider.createPhotoVideoDeletionType();
+            mPhotoVideoDeletion = mProvider.createPhotoVideoDeletionType(getContext());
         }
         mDownloadsDeletion = new DownloadsDeletionType(getActivity());
 
diff --git a/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java b/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java
index 39b1edf..15b5896 100644
--- a/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java
+++ b/src/com/android/settings/overlay/DeletionHelperFeatureProvider.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.overlay;
 
+import android.content.Context;
 import android.support.v7.preference.PreferenceGroup;
 import com.android.settings.deletionhelper.DeletionType;
 
@@ -26,5 +27,5 @@
     /**
      * Creates a {@link DeletionType} for clearing out stored photos and videos on the device.
      */
-    DeletionType createPhotoVideoDeletionType();
+    DeletionType createPhotoVideoDeletionType(Context context);
 }
diff --git a/src/com/android/settings/overlay/SupportFeatureProvider.java b/src/com/android/settings/overlay/SupportFeatureProvider.java
index e0b7862..e95a928 100644
--- a/src/com/android/settings/overlay/SupportFeatureProvider.java
+++ b/src/com/android/settings/overlay/SupportFeatureProvider.java
@@ -18,6 +18,7 @@
 
 import android.accounts.Account;
 import android.annotation.IntDef;
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 
@@ -58,18 +59,23 @@
     String getEstimatedWaitTime(Context context, @SupportType int type);
 
     /**
+     * Whether or not a disclaimer dialog should be displayed.
+     */
+    boolean shouldShowDisclaimerDialog(Context context);
+
+    /**
      * Returns an {@link Account} that's eligible for support options.
      */
     Account getSupportEligibleAccount(Context context);
 
     /**
-     * Returns an {@link Intent} that opens email support for specified account.
+     * Starts support activity of specified type
      *
-     * @param context A UI Context
+     * @param activity Calling activity
      * @param account A account returned by {@link #getSupportEligibleAccount}
      * @param type The type of support account needs.
      */
-    Intent getSupportIntent(Context context, Account account, @SupportType int type);
+    void startSupport(Activity activity, Account account, @SupportType int type);
 
     /**
      * Returns an {@link Intent} that opens help and allow user get help on sign in.
diff --git a/src/com/android/settings/support/SupportDisclaimerDialogFragment.java b/src/com/android/settings/support/SupportDisclaimerDialogFragment.java
new file mode 100644
index 0000000..98f34bc
--- /dev/null
+++ b/src/com/android/settings/support/SupportDisclaimerDialogFragment.java
@@ -0,0 +1,114 @@
+/*
+ * 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.support;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.text.Spannable;
+import android.text.TextPaint;
+import android.text.method.LinkMovementMethod;
+import android.text.style.URLSpan;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.overlay.SupportFeatureProvider;
+
+/**
+ * {@link DialogFragment} for support disclaimer.
+ */
+public final class SupportDisclaimerDialogFragment extends DialogFragment implements
+        DialogInterface.OnClickListener {
+
+    public static final String TAG = "SupportDisclaimerDialog";
+    private static final String EXTRA_TYPE = "extra_type";
+    private static final String EXTRA_ACCOUNT = "extra_account";
+
+    public static SupportDisclaimerDialogFragment newInstance(Account account,
+            @SupportFeatureProvider.SupportType int type) {
+        final SupportDisclaimerDialogFragment fragment = new SupportDisclaimerDialogFragment();
+        final Bundle bundle = new Bundle(2);
+        bundle.putParcelable(SupportDisclaimerDialogFragment.EXTRA_ACCOUNT, account);
+        bundle.putInt(SupportDisclaimerDialogFragment.EXTRA_TYPE, type);
+        fragment.setArguments(bundle);
+        return fragment;
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.support_disclaimer_title)
+                .setPositiveButton(android.R.string.ok, this)
+                .setNegativeButton(android.R.string.cancel, null);
+        final View content = LayoutInflater.from(builder.getContext())
+                .inflate(R.layout.support_disclaimer_content, null);
+        final TextView disclaimer = (TextView) content.findViewById(R.id.support_disclaimer_text);
+        disclaimer.setMovementMethod(LinkMovementMethod.getInstance());
+        stripUnderlines((Spannable) disclaimer.getText());
+        return builder
+            .setView(content)
+            .create();
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        final Activity activity = getActivity();
+        final SupportFeatureProvider supportFeatureProvider =
+                FeatureFactory.getFactory(activity).getSupportFeatureProvider(activity);
+        final Bundle bundle = getArguments();
+        supportFeatureProvider.startSupport(getActivity(),
+                (Account) bundle.getParcelable(EXTRA_ACCOUNT), bundle.getInt(EXTRA_TYPE));
+    }
+
+    /**
+     * Removes the underlines of {@link android.text.style.URLSpan}s.
+     */
+    private static void stripUnderlines(Spannable input) {
+        final URLSpan[] urls = input.getSpans(0, input.length(), URLSpan.class);
+
+        for (URLSpan span : urls) {
+            final int start = input.getSpanStart(span);
+            final int end = input.getSpanEnd(span);
+            input.removeSpan(span);
+            input.setSpan(new NoUnderlineUrlSpan(span.getURL()), start, end,
+                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
+    }
+
+    /**
+     * A {@link URLSpan} that doesn't decorate the link with underline.
+     */
+    public static class NoUnderlineUrlSpan extends URLSpan {
+
+        public NoUnderlineUrlSpan(String url) {
+            super(url);
+        }
+
+        @Override
+        public void updateDrawState(TextPaint ds) {
+            super.updateDrawState(ds);
+            ds.setUnderlineText(false);
+        }
+    }
+}
