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

Commit c9647bfb authored by Nick Chameyev's avatar Nick Chameyev
Browse files

RESTRICT AUTOMERGE Do not throw exception for unknown device state policy

Disables behavior when we throw an exception
when the class with a custom device state
policy not found.

Test: atest com.android.server.devicestate.DeviceStatePolicyProviderTest
Bug: 253490171
Change-Id: I25dcef291cc2700e7957c150f91bc2b94913bfe3
parent 663be784
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
import android.util.Slog;

import com.android.server.policy.DeviceStatePolicyImpl;

@@ -92,11 +93,16 @@ public abstract class DeviceStatePolicy {

            try {
                return (DeviceStatePolicy.Provider) Class.forName(name).newInstance();
            } catch (ReflectiveOperationException | ClassCastException e) {
            } catch (ClassCastException e) {
                throw new IllegalStateException("Couldn't instantiate class " + name
                        + " for config_deviceSpecificDeviceStatePolicyProvider:"
                        + " make sure it has a public zero-argument constructor"
                        + " and implements DeviceStatePolicy.Provider", e);
                        + " and implements DeviceStatePolicy.Provider");
            } catch (ReflectiveOperationException e) {
                Slog.e("DeviceStatePolicy", "Couldn't instantiate class " + name
                        + " for config_deviceSpecificDeviceStatePolicyProvider:"
                        + " using default provider", e);
                return new DeviceStatePolicy.DefaultProvider();
            }
        }
    }
+16 −18
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.devicestate;

import static org.hamcrest.Matchers.instanceOf;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertThrows;
@@ -24,8 +26,6 @@ import android.content.Context;
import android.content.res.Resources;
import android.platform.test.annotations.Presubmit;

import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;

/**
@@ -39,37 +39,35 @@ public class DeviceStatePolicyProviderTest {

    @Test
    public void test_emptyPolicyProvider() {
        Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider("")),
                Matchers.instanceOf(DeviceStatePolicy.DefaultProvider.class));
        assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider("")),
                instanceOf(DeviceStatePolicy.DefaultProvider.class));
    }

    @Test
    public void test_nullPolicyProvider() {
        Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(null)),
                Matchers.instanceOf(DeviceStatePolicy.DefaultProvider.class));
        assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(null)),
                instanceOf(DeviceStatePolicy.DefaultProvider.class));
    }

    @Test
    public void test_customPolicyProvider() {
        Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(
        assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(
                        TestProvider.class.getName())),
                Matchers.instanceOf(TestProvider.class));
                instanceOf(TestProvider.class));
    }

    @Test
    public void test_badPolicyProvider_notImplementingProviderInterface() {
        assertThrows(IllegalStateException.class, () -> {
        assertThrows(IllegalStateException.class, () ->
                DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(
                    Object.class.getName()));
        });
                        Object.class.getName())));
    }

    @Test
    public void test_badPolicyProvider_doesntExist() {
        assertThrows(IllegalStateException.class, () -> {
            DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(
                    "com.android.devicestate.nonexistent.policy"));
        });
    public void test_badPolicyProvider_returnsDefault() {
        assertThat(DeviceStatePolicy.Provider.fromResources(
                        resourcesWithProvider("com.android.devicestate.nonexistent.policy")),
                instanceOf(DeviceStatePolicy.DefaultProvider.class));
    }

    private static Resources resourcesWithProvider(String provider) {