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

Commit dbb601a7 authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Handle exceptions in getting Dream Metadata." into main

parents 6afe4786 96b9e35a
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -1383,16 +1383,22 @@ public class DreamService extends Service implements Window.Callback {
                DreamService.DREAM_META_DATA, DREAM_META_DATA_ROOT_TAG,
                com.android.internal.R.styleable.Dream)) {
            if (rawMetadata == null) return null;
            try {
                return new DreamMetadata(
                        convertToComponentName(
                                rawMetadata.getString(
                            com.android.internal.R.styleable.Dream_settingsActivity), serviceInfo),
                                        com.android.internal.R.styleable.Dream_settingsActivity),
                                serviceInfo),
                        rawMetadata.getDrawable(
                                com.android.internal.R.styleable.Dream_previewImage),
                        rawMetadata.getBoolean(R.styleable.Dream_showClockAndComplications,
                                DEFAULT_SHOW_COMPLICATIONS),
                        rawMetadata.getInt(R.styleable.Dream_dreamCategory, DREAM_CATEGORY_DEFAULT)
                );
            } catch (Exception exception) {
                Log.e(TAG, "Failed to create read metadata", exception);
                return null;
            }
        }
    }

+18 −0
Original line number Diff line number Diff line
@@ -20,12 +20,17 @@ import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.res.TypedArray;
import android.os.Looper;
import android.platform.test.annotations.EnableFlags;
import android.service.dreams.DreamService;
@@ -41,6 +46,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

@SmallTest
@RunWith(AndroidJUnit4.class)
@@ -83,6 +89,18 @@ public class DreamServiceTest {
        assertThat(metadata.dreamCategory).isEqualTo(DreamService.DREAM_CATEGORY_DEFAULT);
    }

    @Test
    public void testMetadataParsing_exceptionReading() {
        final PackageManager packageManager = Mockito.mock(PackageManager.class);
        final ServiceInfo serviceInfo = Mockito.mock(ServiceInfo.class);
        final TypedArray rawMetadata = Mockito.mock(TypedArray.class);
        when(packageManager.extractPackageItemInfoAttributes(eq(serviceInfo), any(), any(), any()))
                .thenReturn(rawMetadata);
        when(rawMetadata.getString(anyInt())).thenThrow(new RuntimeException("failure"));

        assertThat(DreamService.getDreamMetadata(packageManager, serviceInfo)).isNull();
    }

    private DreamService.DreamMetadata getDreamMetadata(String dreamClassName)
            throws PackageManager.NameNotFoundException {
        final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();