Android Open Source - sdk-android-2 Badge






From Project

Back to project page sdk-android-2.

License

The source code is released under:

Apache License

If you think the Android project sdk-android-2 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright 2013 Medium Entertainment, Inc.
 */* w w w . ja v  a 2 s  .co  m*/
 * 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.playhaven.android.view;

import android.content.Context;
import android.graphics.*;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import com.jayway.jsonpath.JsonPath;
import com.playhaven.android.PlayHaven;
import com.playhaven.android.PlayHavenException;
import com.playhaven.android.compat.VendorCompat;
import com.playhaven.android.req.MetadataRequest;
import com.playhaven.android.req.RequestListener;
import com.jayway.jsonpath.InvalidPathException;
import com.playhaven.android.util.JsonUtil;

import static com.playhaven.android.compat.VendorCompat.DRAWABLE.playhaven_badge;

/**
 * A Badge
 */
public class Badge
extends Drawable implements RequestListener {
    /**
     * Default color of the numeric display
     */
    protected static int DEFAULT_TEXT_COLOR = Color.WHITE;

    /**
     * Handler for posting to the UI thread
     */
    private Handler handler;

    /**
     * Placement tag as displayed in the Dashboard
     * @see <a href="https://dashboard.playhaven.com/">https://dashboard.playhaven.com/</a>
     */
    private String placementTag;

    /**
     * Background image for the badge
     */
    private Drawable background;

    /**
     * Text color for the number on the badge
     */
    private int textColor = DEFAULT_TEXT_COLOR;

    /**
     * Badge number from server model
     */
    private String badgeNum = null;

    /**
     * Size of the Badge
     */
    private int size = 30;

    /**
     * Vendor compat lib for wrappers
     */
    private VendorCompat compat;

    /**
     * Construct a Badge (the number on the circle)
     *
     * @param context of the application
     * @param placementTag to request against
     * @see <a href="https://dashboard.playhaven.com/">https://dashboard.playhaven.com/</a>
     */
    public Badge(Context context, String placementTag)
    {
        super();
        handler = new Handler();
        compat = PlayHaven.getVendorCompat(context);

        // We must explicitely set the bounds
        setBounds(0, 0, size, size);

        this.placementTag = placementTag;
        int drawableId = compat.getDrawableId(context, playhaven_badge);
        background = context.getResources().getDrawable(drawableId);
    }

    /**
     * Load the metadata
     *
     * @param context of the application
     */
    public void load(Context context)
    {
        MetadataRequest req = new MetadataRequest(placementTag);
        req.setResponseHandler(this);
        req.send(context);
    }

    /**
     * Set the text color of the numeric display on the badge
     *
     * @param color for the text
     */
    public void setTextColor(int color)
    {
        this.textColor = color;
        invalidateSelf();
    }

    /**
     * Draw the badge
     *
     * @param canvas to draw on
     */
    @Override
    public void draw(Canvas canvas) {
        if(background == null || badgeNum == null) return;

        /**
         * Don't use the canvas.getWidth() or canvas.getHeight()
         * as that size is too large (button's size?)
         */
        int width = getBounds().width();
        int height = getBounds().height();

        background.setBounds(0, 0, width, height);
        background.draw(canvas);

        Paint paint = new Paint();
        paint.setColor(textColor);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setAntiAlias(true);
        paint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.BOLD));

//        paint.setTextSize();

        /**
         * canvas.drawText will draw the text on the baseline. What that means is that the text itself
         * will sit ABOVE the y coordinate specified.
         *
         * To fix that, we will specify that we want to move the text downwards 1/2 the text height
         */
        Rect bounds = new Rect();
        paint.getTextBounds(badgeNum, 0, badgeNum.length(), bounds);
        canvas.drawText(badgeNum, width/2, (height/2) + (bounds.height() / 2), paint);
    }

    /**
     * Ignored
     *
     * @param alpha to set
     */
    @Override
    public void setAlpha(int alpha) {
        /* no-op */
    }

    /**
     * Ignored
     *
     * @param cf to set
     */
    @Override
    public void setColorFilter(ColorFilter cf) {
        /* no-op */
    }

    /**
     * Retrieve the opacity
     *
     * @return opacity
     */
    @Override
    public int getOpacity() {
        return PixelFormat.OPAQUE;
    }

    /**
     * Force redraw
     */
    protected void invalidateOnUiThread()
    {
        handler.post(new Runnable() {
            @Override
            public void run() {
                invalidateSelf();
            }
        });
    }

    /**
     * Handle the databound model returned from the server call
     *
     * @param context of the request
     * @param json response from the server
     */
    @Override
    public void handleResponse(Context context, String json) {
        try{
            String text = JsonUtil.getPath(json, "$.response.notification.value");
            if(text == null || text.length() == 0) return;

            this.badgeNum = text;
            invalidateOnUiThread();
        }catch(InvalidPathException e){
            /**
             * If no metadata is returned, don't update the UI
             */
        }
    }

    /**
     * Handle the exception that occurred while trying to retrieve the model from the server
     *
     * @param context of the request
     * @param e that occurred
     */
    @Override
    public void handleResponse(Context context, PlayHavenException e) {
        this.badgeNum = null;
        invalidateOnUiThread();
    }
}




Java Source Code List

com.playhaven.android.DeviceId.java
com.playhaven.android.PlacementListener.java
com.playhaven.android.Placement.java
com.playhaven.android.PlayHavenException.java
com.playhaven.android.PlayHaven.java
com.playhaven.android.PushPlacement.java
com.playhaven.android.cache.BulkCacheDownloader.java
com.playhaven.android.cache.CacheCleaner.java
com.playhaven.android.cache.CacheDownloader.java
com.playhaven.android.cache.CacheResponseHandler.java
com.playhaven.android.cache.Cache.java
com.playhaven.android.cache.CachedInfo.java
com.playhaven.android.cache.package-info.java
com.playhaven.android.compat.UnityCompat.java
com.playhaven.android.compat.VendorCompat.java
com.playhaven.android.data.ContentUnitType.java
com.playhaven.android.data.CustomEvent.java
com.playhaven.android.data.DataCollectionField.java
com.playhaven.android.data.JsonUrlExtractor.java
com.playhaven.android.data.Purchase.java
com.playhaven.android.data.Reward.java
com.playhaven.android.data.package-info.java
com.playhaven.android.diagnostic.APIValidationIndicators.java
com.playhaven.android.diagnostic.DiagnosticApp.java
com.playhaven.android.diagnostic.DiagnosticPreferences.java
com.playhaven.android.diagnostic.InstrumentationReceiver.java
com.playhaven.android.diagnostic.Launcher.java
com.playhaven.android.diagnostic.OutputBox.java
com.playhaven.android.diagnostic.RequestTypeAdapter.java
com.playhaven.android.diagnostic.RequestType.java
com.playhaven.android.examples.ContentExample2.java
com.playhaven.android.examples.ContentExample.java
com.playhaven.android.examples.DialogExample.java
com.playhaven.android.examples.DisplayOptExample.java
com.playhaven.android.examples.EmbeddedExample.java
com.playhaven.android.examples.IAPTrackingExample.java
com.playhaven.android.examples.LoggingExample.java
com.playhaven.android.examples.MoreGamesExample.java
com.playhaven.android.examples.NoContent1Example.java
com.playhaven.android.examples.NoContent2Example.java
com.playhaven.android.examples.OnResumeExample.java
com.playhaven.android.examples.OpenExample.java
com.playhaven.android.examples.OptInExample.java
com.playhaven.android.examples.PreloadDialogExample.java
com.playhaven.android.examples.PreloadExample.java
com.playhaven.android.examples.PurchaseExample.java
com.playhaven.android.examples.RewardExample.java
com.playhaven.android.examples.WebviewFullscreenExample.java
com.playhaven.android.push.GCMBroadcastReceiver.java
com.playhaven.android.push.GCMRegistrationRequest.java
com.playhaven.android.push.NotificationBuilder.java
com.playhaven.android.push.PushReceiver.java
com.playhaven.android.req.ContentDispatchRequest.java
com.playhaven.android.req.ContentDispatchType.java
com.playhaven.android.req.ContentRequest.java
com.playhaven.android.req.ContentUnitRequest.java
com.playhaven.android.req.CustomEventRequest.java
com.playhaven.android.req.Identifier.java
com.playhaven.android.req.InstallRequest.java
com.playhaven.android.req.MetadataRequest.java
com.playhaven.android.req.NoContentException.java
com.playhaven.android.req.NoIdentifierException.java
com.playhaven.android.req.OpenRequest.java
com.playhaven.android.req.PlayHavenRequest.java
com.playhaven.android.req.PurchaseTrackingRequest.java
com.playhaven.android.req.PushTrackingRequest.java
com.playhaven.android.req.RequestListener.java
com.playhaven.android.req.ServerErrorHandler.java
com.playhaven.android.req.SignatureException.java
com.playhaven.android.req.SubcontentRequest.java
com.playhaven.android.req.UrlRequest.java
com.playhaven.android.req.UserAgent.java
com.playhaven.android.req.package-info.java
com.playhaven.android.util.DisplayUtil.java
com.playhaven.android.util.GoogleAdvertisementUtil.java
com.playhaven.android.util.GooglePlayServicesUtil.java
com.playhaven.android.util.JsonUtil.java
com.playhaven.android.util.KontagentUtil.java
com.playhaven.android.util.MemoryReporter.java
com.playhaven.android.util.TimeZoneFormatter.java
com.playhaven.android.util.package-info.java
com.playhaven.android.view.Badge.java
com.playhaven.android.view.ChildView.java
com.playhaven.android.view.DefaultPlayHavenListener.java
com.playhaven.android.view.FrameManager.java
com.playhaven.android.view.FullScreen.java
com.playhaven.android.view.HTMLView.java
com.playhaven.android.view.MoreGames.java
com.playhaven.android.view.NativeView.java
com.playhaven.android.view.PlayHavenListener.java
com.playhaven.android.view.PlayHavenView.java
com.playhaven.android.view.Windowed.java
com.playhaven.android.view.package-info.java
com.playhaven.android.package-info.java
javax.annotation.Generated.java
javax.annotation.package-info.java
${package}.__artifactId__Activity.java