diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c13068f..d0dcede 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1032,7 +1032,8 @@
         <activity
             android:name=".slices.SliceDeepLinkSpringBoard"
             android:excludeFromRecents="true"
-            android:theme="@android:style/Theme.NoDisplay">
+            android:theme="@android:style/Theme.NoDisplay"
+            android:permission="android.permission.MODIFY_PHONE_STATE">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -2673,6 +2674,13 @@
         </activity>
 
         <activity
+            android:name=".flashlight.FlashlightHandleActivity"
+            android:theme="@android:style/Theme.NoDisplay"
+            android:excludeFromRecents="true"
+            android:exported="true"
+            android:label="@string/power_flashlight"/>
+
+        <activity
             android:name="Settings$WifiCallingSettingsActivity"
             android:label="@string/wifi_calling_settings_title">
             <intent-filter>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b27e9d0..2448d68 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7156,6 +7156,9 @@
     <string name="keywords_time_zone">timezone</string>
     <!-- Search keyword for "Display over other apps" settings [CHAR_LIMIT=NONE]-->
     <string name="keywords_draw_overlay">Chat head</string>
+
+    <!-- Search keyword for "Flashlight" settings [CHAR_LIMIT=NONE]-->
+    <string name="keywords_flashlight">Flashlight, Light, Torch</string>
     <string name="keywords_change_wifi_state">wifi, wi-fi, toggle, control</string>
     <string name="keywords_more_default_sms_app">text message, texting, messages, messaging, default</string>
     <string name="keywords_more_mobile_networks">cellular, mobile, cell carrier, wireless, data, 4g,3g, 2g, lte</string>
diff --git a/src/com/android/settings/backup/UserBackupSettingsActivity.java b/src/com/android/settings/backup/UserBackupSettingsActivity.java
index 4a0b80c..9baa9a3 100644
--- a/src/com/android/settings/backup/UserBackupSettingsActivity.java
+++ b/src/com/android/settings/backup/UserBackupSettingsActivity.java
@@ -112,7 +112,7 @@
                     data.screenTitle = context.getString(R.string.settings_label);
                     data.keywords = context.getString(R.string.keywords_backup);
                     data.intentTargetPackage = context.getPackageName();
-                    data.intentTargetClass = com.android.settings.backup.UserBackupSettingsActivity.class.getName();
+                    data.intentTargetClass = UserBackupSettingsActivity.class.getName();
                     data.intentAction = Intent.ACTION_MAIN;
                     data.key = BACKUP_SEARCH_INDEX_KEY;
                     result.add(data);
diff --git a/src/com/android/settings/flashlight/FlashlightHandleActivity.java b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
new file mode 100644
index 0000000..0c50f91
--- /dev/null
+++ b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2019 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.flashlight;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Headless activity that toggles flashlight state when launched.
+ */
+@SearchIndexable(forTarget = SearchIndexable.MOBILE)
+public class FlashlightHandleActivity extends Activity implements Indexable {
+
+    public static final String EXTRA_FALLBACK_TO_HOMEPAGE = "fallback_to_homepage";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        // Do nothing meaningful in this activity.
+        // The sole purpose of this activity is to provide a place to index flashlight
+        // into Settings search.
+
+        // Caller's choice: fallback to homepage, or just exit?
+        if (getIntent().getBooleanExtra(EXTRA_FALLBACK_TO_HOMEPAGE, false)) {
+            startActivity(new Intent(Settings.ACTION_SETTINGS));
+        }
+        finish();
+    }
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+
+                @Override
+                public List<SearchIndexableRaw> getRawDataToIndex(Context context,
+                        boolean enabled) {
+
+                    final List<SearchIndexableRaw> result = new ArrayList<>();
+
+                    SearchIndexableRaw data = new SearchIndexableRaw(context);
+                    data.title = context.getString(R.string.power_flashlight);
+                    data.screenTitle = context.getString(R.string.power_flashlight);
+                    data.keywords = context.getString(R.string.keywords_flashlight);
+                    data.intentTargetPackage = context.getPackageName();
+                    data.intentTargetClass = FlashlightHandleActivity.class.getName();
+                    data.intentAction = Intent.ACTION_MAIN;
+                    data.key = "flashlight";
+                    result.add(data);
+
+                    return result;
+                }
+            };
+}
