mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
136 lines
4.5 KiB
Java
136 lines
4.5 KiB
Java
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.gecko.home;
|
|
|
|
import org.mozilla.gecko.GeckoAppShell;
|
|
import org.mozilla.gecko.GeckoEvent;
|
|
import org.mozilla.gecko.R;
|
|
import org.mozilla.gecko.gfx.BitmapUtils;
|
|
import org.mozilla.gecko.util.GeckoEventListener;
|
|
import org.mozilla.gecko.util.ThreadUtils;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.util.Log;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.widget.ImageButton;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
|
|
public class HomeBanner extends LinearLayout
|
|
implements GeckoEventListener {
|
|
private static final String LOGTAG = "GeckoHomeBanner";
|
|
|
|
public HomeBanner(Context context) {
|
|
this(context, null);
|
|
}
|
|
|
|
public HomeBanner(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
|
|
LayoutInflater.from(context).inflate(R.layout.home_banner, this);
|
|
}
|
|
|
|
@Override
|
|
public void onAttachedToWindow() {
|
|
super.onAttachedToWindow();
|
|
|
|
// Tapping on the close button will ensure that the banner is never
|
|
// showed again on this session.
|
|
final ImageButton closeButton = (ImageButton) findViewById(R.id.close);
|
|
|
|
// The drawable should have 50% opacity.
|
|
closeButton.getDrawable().setAlpha(127);
|
|
|
|
closeButton.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
HomeBanner.this.setVisibility(View.GONE);
|
|
}
|
|
});
|
|
|
|
setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
// Send the current message id back to JS.
|
|
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("HomeBanner:Click", (String) getTag()));
|
|
}
|
|
});
|
|
|
|
GeckoAppShell.getEventDispatcher().registerEventListener("HomeBanner:Data", this);
|
|
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("HomeBanner:Get", null));
|
|
}
|
|
|
|
@Override
|
|
public void onDetachedFromWindow() {
|
|
super.onDetachedFromWindow();
|
|
|
|
GeckoAppShell.getEventDispatcher().unregisterEventListener("HomeBanner:Data", this);
|
|
}
|
|
|
|
public boolean isDismissed() {
|
|
return (getVisibility() == View.GONE);
|
|
}
|
|
|
|
@Override
|
|
public void handleMessage(String event, JSONObject message) {
|
|
try {
|
|
// Store the current message id to pass back to JS in the view's OnClickListener.
|
|
setTag(message.getString("id"));
|
|
|
|
final String text = message.getString("text");
|
|
final TextView textView = (TextView) findViewById(R.id.text);
|
|
|
|
// Update the banner message on the UI thread.
|
|
ThreadUtils.postToUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
textView.setText(text);
|
|
setVisibility(View.VISIBLE);
|
|
}
|
|
});
|
|
} catch (JSONException e) {
|
|
Log.e(LOGTAG, "Exception handling " + event + " message", e);
|
|
return;
|
|
}
|
|
|
|
final String iconURI = message.optString("iconURI");
|
|
final ImageView iconView = (ImageView) findViewById(R.id.icon);
|
|
|
|
if (TextUtils.isEmpty(iconURI)) {
|
|
// Hide the image view if we don't have an icon to show.
|
|
iconView.setVisibility(View.GONE);
|
|
return;
|
|
}
|
|
|
|
BitmapUtils.getDrawable(getContext(), iconURI, new BitmapUtils.BitmapLoader() {
|
|
@Override
|
|
public void onBitmapFound(final Drawable d) {
|
|
// Bail if getDrawable doesn't find anything.
|
|
if (d == null) {
|
|
iconView.setVisibility(View.GONE);
|
|
return;
|
|
}
|
|
|
|
// Update the banner icon on the UI thread.
|
|
ThreadUtils.postToUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
iconView.setImageDrawable(d);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|