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

Commit b69ec770 authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

Check Bridge init before disposing.

In some cases ADT may dispose the Bridge even before init is called on
it. This caused an NPE. Fixed this by checking for the initialization
before disposing resources.

Bug: http://b.android.com/77726
Change-Id: I741d6ea3595a3b7cb816abd0417f23aecca6370e
parent 908a4f9a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -213,6 +213,10 @@ public class FontFamily_Delegate {
        return null;
    }

    @Nullable
    /*package*/ static String getFontLocation() {
        return sFontLocation;
    }

    // ---- native methods ----

+0 −27
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 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 android.graphics;

/**
 * Class allowing access to package-protected methods/fields.
 */
public class Typeface_Accessor {

    public static void resetDefaults() {
        Typeface.sDefaults = null;
    }
}
+16 −7
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;

import static android.graphics.FontFamily_Delegate.getFontLocation;

/**
 * Delegate implementing the native methods of android.graphics.Typeface
 *
@@ -48,8 +50,6 @@ public final class Typeface_Delegate {
    private static final DelegateManager<Typeface_Delegate> sManager =
            new DelegateManager<Typeface_Delegate>(Typeface_Delegate.class);

    // ---- delegate helper data ----
    private static String sFontLocation;

    // ---- delegate data ----

@@ -61,11 +61,8 @@ public final class Typeface_Delegate {

    private static long sDefaultTypeface;


    // ---- Public Helper methods ----
    public static synchronized void setFontLocation(String fontLocation) {
        sFontLocation = fontLocation;
        FontFamily_Delegate.setFontLocation(fontLocation);
    }

    public static Typeface_Delegate getDelegate(long nativeTypeface) {
        return sManager.getDelegate(nativeTypeface);
@@ -131,6 +128,18 @@ public final class Typeface_Delegate {
        return fonts;
    }

    /**
     * Clear the default typefaces when disposing bridge.
     */
    public static void resetDefaults() {
        // Sometimes this is called before the Bridge is initialized. In that case, we don't want to
        // initialize Typeface because the SDK fonts location hasn't been set.
        if (FontFamily_Delegate.getFontLocation() != null) {
            Typeface.sDefaults = null;
        }
    }


    // ---- native methods ----

    @LayoutlibDelegate
@@ -193,7 +202,7 @@ public final class Typeface_Delegate {

    @LayoutlibDelegate
    /*package*/ static File getSystemFontConfigLocation() {
        return new File(sFontLocation);
        return new File(getFontLocation());
    }

    // ---- Private delegate/helper methods ----
+3 −3
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ import com.ibm.icu.util.ULocale;

import android.content.res.BridgeAssetManager;
import android.graphics.Bitmap;
import android.graphics.Typeface_Accessor;
import android.graphics.FontFamily_Delegate;
import android.graphics.Typeface_Delegate;
import android.os.Looper;
import android.os.Looper_Accessor;
@@ -250,7 +250,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
        }

        // load the fonts.
        Typeface_Delegate.setFontLocation(fontLocation.getAbsolutePath());
        FontFamily_Delegate.setFontLocation(fontLocation.getAbsolutePath());

        // now parse com.android.internal.R (and only this one as android.R is a subset of
        // the internal version), and put the content in the maps.
@@ -303,7 +303,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
        BridgeAssetManager.clearSystem();

        // dispose of the default typeface.
        Typeface_Accessor.resetDefaults();
        Typeface_Delegate.resetDefaults();

        return true;
    }