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

Commit 261dd230 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Handle the case where no session exists" into oc-dev

parents 3134462c a55b3ba6
Loading
Loading
Loading
Loading
+78 −60
Original line number Diff line number Diff line
@@ -26,10 +26,13 @@ import com.android.layoutlib.bridge.impl.RenderSessionImpl;
import com.android.tools.layoutlib.java.System_Delegate;
import com.android.util.PropertiesMap;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;

import java.awt.image.BufferedImage;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@@ -42,7 +45,9 @@ import java.util.Map;
 */
public class BridgeRenderSession extends RenderSession {

    @Nullable
    private final RenderSessionImpl mSession;
    @NonNull
    private Result mLastResult;

    @Override
@@ -52,31 +57,33 @@ public class BridgeRenderSession extends RenderSession {

    @Override
    public BufferedImage getImage() {
        return mSession.getImage();
        return mSession != null ? mSession.getImage() :
                new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
    }

    @Override
    public boolean isAlphaChannelImage() {
        return mSession.isAlphaChannelImage();
        return mSession != null && mSession.isAlphaChannelImage();
    }

    @Override
    public List<ViewInfo> getRootViews() {
        return mSession.getViewInfos();
        return mSession != null ? mSession.getViewInfos() : Collections.emptyList();
    }

    @Override
    public List<ViewInfo> getSystemRootViews() {
        return mSession.getSystemViewInfos();
        return mSession != null ? mSession.getSystemViewInfos() : Collections.emptyList();
    }

    @Override
    public Map<Object, PropertiesMap> getDefaultProperties() {
        return mSession.getDefaultProperties();
        return mSession != null ? mSession.getDefaultProperties() : Collections.emptyMap();
    }

    @Override
    public Result measure(long timeout) {
        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(timeout);
@@ -88,12 +95,14 @@ public class BridgeRenderSession extends RenderSession {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }

    @Override
    public Result render(long timeout, boolean forceMeasure) {
        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(timeout);
@@ -107,6 +116,7 @@ public class BridgeRenderSession extends RenderSession {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }
@@ -114,6 +124,7 @@ public class BridgeRenderSession extends RenderSession {
    @Override
    public Result animate(Object targetObject, String animationName,
            boolean isFrameworkAnimation, IAnimationListener listener) {
        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT);
@@ -125,6 +136,7 @@ public class BridgeRenderSession extends RenderSession {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }
@@ -136,17 +148,19 @@ public class BridgeRenderSession extends RenderSession {
            throw new IllegalArgumentException("parentView is not a ViewGroup");
        }

        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT);
                if (mLastResult.isSuccess()) {
                mLastResult = mSession.insertChild((ViewGroup) parentView, childXml, index,
                        listener);
                    mLastResult =
                            mSession.insertChild((ViewGroup) parentView, childXml, index, listener);
                }
            } finally {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }
@@ -162,6 +176,7 @@ public class BridgeRenderSession extends RenderSession {
            throw new IllegalArgumentException("childView is not a View");
        }

        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT);
@@ -173,6 +188,7 @@ public class BridgeRenderSession extends RenderSession {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }
@@ -183,6 +199,7 @@ public class BridgeRenderSession extends RenderSession {
            throw new IllegalArgumentException("childView is not a View");
        }

        if (mSession != null) {
            try {
                Bridge.prepareThread();
                mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT);
@@ -193,6 +210,7 @@ public class BridgeRenderSession extends RenderSession {
                mSession.release();
                Bridge.cleanupThread();
            }
        }

        return mLastResult;
    }
@@ -221,7 +239,7 @@ public class BridgeRenderSession extends RenderSession {
        }
    }

    /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) {
    /*package*/ BridgeRenderSession(@Nullable RenderSessionImpl scene, @NonNull Result lastResult) {
        mSession = scene;
        if (scene != null) {
            mSession.setScene(this);
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.layoutlib.bridge;

import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.rendering.api.Result.Status;

import org.junit.Test;

import static org.junit.Assert.*;

public class BridgeRenderSessionTest {
    @Test
    public void testNullSession() {
        BridgeRenderSession renderSession = new BridgeRenderSession(null, Status.ERROR_UNKNOWN
                .createResult("Test result"));

        assertNotNull(renderSession.getImage());
        assertNotNull(renderSession.getRootViews());
        assertNotNull(renderSession.getSystemRootViews());
        assertNotNull(renderSession.getDefaultProperties());
    }
}
 No newline at end of file
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.layoutlib.bridge.intensive;

import com.android.layoutlib.bridge.BridgeRenderSessionTest;
import com.android.layoutlib.bridge.TestDelegates;
import com.android.layoutlib.bridge.android.BridgeXmlBlockParserTest;
import com.android.layoutlib.bridge.impl.LayoutParserWrapperTest;
@@ -34,7 +35,8 @@ import android.util.BridgeXmlPullAttributesTest;
@SuiteClasses({
        RenderTests.class, LayoutParserWrapperTest.class,
        BridgeXmlBlockParserTest.class, BridgeXmlPullAttributesTest.class,
        Matrix_DelegateTest.class, TestDelegates.class, PerformanceTests.class
        Matrix_DelegateTest.class, TestDelegates.class, PerformanceTests.class,
        BridgeRenderSessionTest.class
})
public class Main {
}