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

Commit 66eaa371 authored by Syaoran Kuo's avatar Syaoran Kuo Committed by Android (Google) Code Review
Browse files

Merge "Fix resource id not match issue." into sc-dev

parents 03d2f8d7 956b03d3
Loading
Loading
Loading
Loading
+49 −18
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;

import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
@@ -34,21 +34,22 @@ import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.lifecycle.Stage;

import com.android.settings.R;
import com.android.settings.testutils.CommonUtils;
import com.android.settings.testutils.UiUtils;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Arrays;
import java.util.List;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class AppNotificationComponentTest {
    private static final String TAG =
            AppNotificationComponentTest.class.getSimpleName();
    private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
    private final String mNoSlientAppName = "com.google.android.dialer";

    public final String TAG = this.getClass().getName();

    @Rule
    public ActivityScenarioRule<com.android.settings.Settings.AppNotificationSettingsActivity>
@@ -57,35 +58,65 @@ public class AppNotificationComponentTest {
                    .putExtra(Settings.EXTRA_APP_PACKAGE, mNoSlientAppName)
                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

    /**
     * Tests user should not able to modify notification settings for some system apps.
     * In this case, test `phone` app that will disabled notification configuration.
     * Steps:
     * 1. Open notification page of phone app.
     * 2. Checks system privilege notification should not able to be changed.
     */
    @Test
    public void test_special_app_could_not_disable_notification() {
        List<String> disabledList = Arrays.asList("Default", "Incoming calls",
                "Background Processing", "Missed calls",
                "Ongoing calls", "Voicemails");

        ActivityScenario ac = rule.getScenario();
        ac.onActivity(
                activity -> {
                    View rv = activity.findViewById(R.id.recycler_view);
                    View recyclerView = activity.findViewById(
                            CommonUtils.getResId("recycler_view"));

                    if (rv == null) {
                    if (recyclerView == null) {
                        Log.d("UI_UTILS",
                                "Target not found: R.id.recycler_view #" + Integer.toHexString(
                                        R.id.recycler_view));
                                        CommonUtils.getResId("recycler_view")));
                        UiUtils.dumpView(UiUtils.getFirstViewFromActivity(activity));
                        assertThat(Boolean.TRUE).isFalse();
                    }

                    UiUtils.waitUntilCondition(5000,
                            () -> rv.findViewById(R.id.main_switch_bar) != null);
                            () -> recyclerView.findViewById(CommonUtils.getResId("recycler_view"))
                                    != null);

                    View mainSwitchBar = rv.findViewById(R.id.main_switch_bar);
                    View mainSwitchBar = recyclerView.findViewById(
                            CommonUtils.getResId("main_switch_bar"));

                    assertThat(mainSwitchBar.isEnabled()).isEqualTo(false);
                    Log.d(TAG, "main switch bar = " + mainSwitchBar.isEnabled());

                    UiUtils.waitForActivitiesInStage(10000, Stage.RESUMED);
                    Log.d(TAG, "In stage!.");

                    UiUtils.waitForActivitiesInStage(1000, Stage.RESUMED);
                    UiUtils.dumpView(UiUtils.getFirstViewFromActivity(activity));

                    for (int i = 0; i < ((ViewGroup) rv).getChildCount(); i++) {
                        if (((ViewGroup) rv).getChildAt(i) instanceof LinearLayout) {
                            Switch sWidget = rv.findViewById(R.id.switchWidget);
                            if (sWidget != null) {
                                assertThat(sWidget.isEnabled()).isEqualTo(false);
                    // The privileges are under the recycle view. Fetch all of them and check.
                    ViewGroup viewGroup = (ViewGroup) recyclerView;

                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
                        if (viewGroup.getChildAt(i) instanceof LinearLayout) {
                            // A notification in Settings should have both switch_widget and text.
                            // There has another circle pin is no belongs to Settings package.
                            // But belongs to Switch in Android.
                            View sWidget = viewGroup.getChildAt(i).findViewById(
                                    CommonUtils.getResId("switchWidget"));
                            TextView sText = viewGroup.getChildAt(i).findViewById(
                                    android.R.id.title);
                            if (sText != null && sWidget != null
                                    && disabledList.stream().anyMatch(
                                            str -> str.equals(sText.getText().toString().trim()))) {

                                assertThat(sWidget.isEnabled()).isFalse();
                            }
                        }
                    }
+13 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.os.Environment;
import android.util.Log;
import android.view.View;

import androidx.test.platform.app.InstrumentationRegistry;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
@@ -93,4 +95,15 @@ public class CommonUtils {
        return false;
    }

    /**
     * Return a resource identifier for the given resource name in Settings app.
     *
     * @param name The name of the desired resource.
     * @return int The associated resource identifier.  Returns 0 if no such resource was found.  (0
     * is not a valid resource ID.)
     */
    public static int getResId(String name) {
        return InstrumentationRegistry.getInstrumentation().getTargetContext().getResources()
                .getIdentifier(name, "id", Constants.SETTINGS_PACKAGE_NAME);
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -20,4 +20,5 @@ public class Constants {
    public static final long ACTIVITY_LAUNCH_WAIT_TIMEOUT = 5000;
    public static final long VIEW_APPEAR_WAIT_MEDIUM_TIMEOUT = 5000;
    public static final long WIFI_CONNECT_WAIT_TIMEOUT = 15000;
    public static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
}