diff --git a/res/layout/more_settings_button.xml b/res/layout/more_settings_button.xml
new file mode 100644
index 00000000000..4bbe1191108
--- /dev/null
+++ b/res/layout/more_settings_button.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/res/xml/emergency_settings.xml b/res/xml/emergency_settings.xml
index 28ae8b19c56..80d6ac0ce7e 100644
--- a/res/xml/emergency_settings.xml
+++ b/res/xml/emergency_settings.xml
@@ -32,6 +32,13 @@
android:order="100"
android:fragment="com.android.settings.emergency.EmergencyGestureSettings"
settings:controller="com.android.settings.emergency.EmergencyGestureEntrypointPreferenceController" />
+
info = mContext.getPackageManager()
+ .queryIntentActivities(mIntent, MATCH_SYSTEM_ONLY);
+
+ if (info != null && !info.isEmpty()) {
+ mIntent.setClassName(packageName, info.get(0).activityInfo.name);
+ } else {
+ mIntent = null;
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final LayoutPreference pref = screen.findPreference(getPreferenceKey());
+ final Button button = pref.findViewById(R.id.button);
+ button.setText(getButtonText());
+ button.setOnClickListener(this);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (mIntent == null) {
+ return UNSUPPORTED_ON_DEVICE;
+ } else {
+ return AVAILABLE;
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ final Intent intent = new Intent(mIntent)
+ .addCategory(Intent.CATEGORY_LAUNCHER)
+ .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ Bundle bundle = new Bundle();
+ bundle.putString(EXTRA_KEY_ATTRIBUTION, mContext.getPackageName());
+ mContext.startActivity(intent, bundle);
+ }
+
+ private CharSequence getButtonText() {
+ final String packageName = mContext.getResources().getString(
+ R.string.config_emergency_package_name);
+ try {
+ final PackageManager pm = mContext.getPackageManager();
+ final ApplicationInfo appInfo = pm.getApplicationInfo(
+ packageName, MATCH_DISABLED_COMPONENTS
+ | MATCH_DISABLED_UNTIL_USED_COMPONENTS);
+ return mContext.getString(R.string.open_app_button, appInfo.loadLabel(pm));
+ } catch (Exception e) {
+ Log.d(TAG, "Failed to get open app button text, falling back.");
+ return "";
+ }
+ }
+}