Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3bb7a02 authored by Tsung-Mao Fang's avatar Tsung-Mao Fang
Browse files

Fallback to AOSP emergency info if the original intent is broken

If the variant of emergency info is broken, we should try to show
AOSP emergency info instead.

Test: Rebuilt rom and see the Ui. Run robo test
Fix: 154114259
Change-Id: I5bc3f6cbf9102a7b7299c3edf718a58101effbf8
parent 79a38a73
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -220,10 +220,21 @@
    <!-- Settings intelligence interaction log intent action -->
    <string name="config_settingsintelligence_log_action" translatable="false"></string>

    <!-- AOSP Emergency app package name -->
    <string name="config_aosp_emergency_package_name" translatable="false">
        com.android.emergency
    </string>

    <!-- AOSP Emergency app intent action -->
    <string name="config_aosp_emergency_intent_action" translatable="false">
        android.settings.EDIT_EMERGENCY_INFO
    </string>

    <!-- Emergency app package name -->
    <string name="config_emergency_package_name" translatable="false">
        com.android.emergency
    </string>

    <!-- Emergency app intent action -->
    <string name="config_emergency_intent_action" translatable="false">
        android.settings.EDIT_EMERGENCY_INFO
+36 −14
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;

import com.android.settings.R;
@@ -34,9 +35,8 @@ import java.util.List;

public class EmergencyInfoPreferenceController extends BasePreferenceController {

    public static String getIntentAction(Context context) {
        return context.getResources().getString(R.string.config_emergency_intent_action);
    }
    @VisibleForTesting
    Intent mIntent;

    public EmergencyInfoPreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
@@ -62,10 +62,9 @@ public class EmergencyInfoPreferenceController extends BasePreferenceController

    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (TextUtils.equals(getPreferenceKey(), preference.getKey())) {
            Intent intent = new Intent(getIntentAction(mContext));
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            mContext.startActivity(intent);
        if (TextUtils.equals(getPreferenceKey(), preference.getKey()) && mIntent != null) {
            mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            mContext.startActivity(mIntent);
            return true;
        }
        return false;
@@ -76,15 +75,38 @@ public class EmergencyInfoPreferenceController extends BasePreferenceController
        if (!mContext.getResources().getBoolean(R.bool.config_show_emergency_info_in_device_info)) {
            return UNSUPPORTED_ON_DEVICE;
        }
        final Intent intent = new Intent(getIntentAction(mContext)).setPackage(
                getPackageName(mContext));
        final List<ResolveInfo> infos = mContext.getPackageManager().queryIntentActivities(intent,

        // If the variant of emergency info can not work, we should fallback to AOSP version.
        if (isEmergencyInfoSupported()) {
            return AVAILABLE;
        } else if (isAOSPVersionSupported()) {
            return AVAILABLE;
        }
        return UNSUPPORTED_ON_DEVICE;
    }

    private boolean isEmergencyInfoSupported() {
        final String packageName = mContext.getResources().getString(
                R.string.config_emergency_package_name);
        final String intentName = mContext.getResources().getString(
                R.string.config_emergency_intent_action);
        mIntent = new Intent(intentName).setPackage(packageName);
        final List<ResolveInfo> infos = mContext.getPackageManager().queryIntentActivities(mIntent,
                0);
        return infos != null && !infos.isEmpty()
                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;

        return infos != null && !infos.isEmpty();
    }

    private static String getPackageName(Context context) {
        return context.getResources().getString(R.string.config_emergency_package_name);
    private boolean isAOSPVersionSupported() {
        final String aospPackageName = mContext.getResources().getString(
                R.string.config_aosp_emergency_package_name);
        final String aospIntentName = mContext.getResources().getString(
                R.string.config_aosp_emergency_intent_action);

        mIntent = new Intent(aospIntentName).setPackage(aospPackageName);
        final List<ResolveInfo> infos = mContext.getPackageManager().queryIntentActivities(mIntent,
                0);

        return infos != null && !infos.isEmpty();
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -156,10 +156,11 @@ public class EmergencyInfoPreferenceControllerTest {
        final Preference preference = new Preference(activity);
        preference.setKey("emergency_info");
        mController = new EmergencyInfoPreferenceController(activity, preference.getKey());
        mController.mIntent = new Intent("com.example.action.new").setPackage("com.example.test");

        mController.handlePreferenceTreeClick(preference);

        assertThat(application.getNextStartedActivity().getAction())
                .isEqualTo("android.settings.EDIT_EMERGENCY_INFO");
                .isEqualTo("com.example.action.new");
    }
}