/* * AndFHEM - Open Source Android application to control a FHEM home automation * server. * * Copyright (c) 2011, Matthias Klass or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Red Hat Inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU GENERAL PUBLIC LICENSE, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GENERAL PUBLIC LICENSE * for more details. * * You should have received a copy of the GNU GENERAL PUBLIC LICENSE * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package li.klass.fhem.service.advertisement; import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import javax.inject.Inject; import javax.inject.Singleton; import li.klass.fhem.AndFHEMApplication; import li.klass.fhem.R; import li.klass.fhem.activities.PremiumActivity; import li.klass.fhem.constants.Actions; import li.klass.fhem.constants.BundleExtraKeys; import li.klass.fhem.service.intent.LicenseIntentService; import li.klass.fhem.util.FhemResultReceiver; import static li.klass.fhem.constants.BundleExtraKeys.IS_PREMIUM; import static li.klass.fhem.constants.ResultCodes.SUCCESS; @Singleton public class AdvertisementService { private static final String TAG = AdvertisementService.class.getName(); private long lastErrorTimestamp = 0; @Inject public AdvertisementService() { } public void addAd(final View view, final Activity activity) { activity.startService(new Intent(Actions.IS_PREMIUM) .setClass(activity, LicenseIntentService.class) .putExtra(BundleExtraKeys.RESULT_RECEIVER, new FhemResultReceiver() { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { if (!resultData.containsKey(IS_PREMIUM)) { return; } boolean isPremium = resultCode == SUCCESS && resultData.getBoolean(IS_PREMIUM, false); showAdsBasedOnPremium(isPremium, view, activity); } }) ); } private void showAdsBasedOnPremium(boolean isPremium, View view, Activity activity) { boolean showAds = true; final LinearLayout adContainer = (LinearLayout) view.findViewById(R.id.adContainer); Log.i(TAG, "isPremium is " + isPremium); if (adContainer == null) { Log.i(TAG, "cannot find adContainer"); return; } else if (isPremium) { showAds = false; Log.i(TAG, "found premium version, skipping ads"); } else { Resources resources = activity.getResources(); if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE && !resources.getBoolean(R.bool.isTablet)) { showAds = false; Log.i(TAG, "found landscape orientation, skipping ads"); } } if (!showAds) { adContainer.setVisibility(View.GONE); } else if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity) != ConnectionResult.SUCCESS) { addErrorView(activity, adContainer); Log.e(TAG, "cannot find PlayServices"); } else { adContainer.setVisibility(View.VISIBLE); adContainer.removeAllViews(); if (System.currentTimeMillis() - lastErrorTimestamp < 1000 * 60 * 10) { addErrorView(activity, adContainer); Log.i(TAG, "still in timeout, showing error view"); return; } Log.i(TAG, "showing ad"); AdView adView = new AdView(activity); adView.setAdUnitId(AndFHEMApplication.AD_UNIT_ID); adView.setAdSize(AdSize.BANNER); addListener(activity, adContainer, adView); adView.loadAd(new AdRequest.Builder().build()); adContainer.addView(adView); } } private static void addErrorView(final Activity activity, LinearLayout container) { ImageView selfAd = (ImageView) activity.getLayoutInflater().inflate(R.layout.selfad, container, false); selfAd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(activity, PremiumActivity.class); activity.startActivity(intent); } }); container.addView(selfAd); } private void addListener(final Activity activity, final LinearLayout adContainer, AdView adView) { adView.setAdListener(new AdListener() { @Override public void onAdFailedToLoad(int errorCode) { super.onAdFailedToLoad(errorCode); adContainer.removeAllViews(); addErrorView(activity, adContainer); lastErrorTimestamp = System.currentTimeMillis(); Log.i(TAG, "failed to receive ads, showing error view"); } }); } }