/*
Swisscom Safe Connect
Copyright (C) 2014 Swisscom
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
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 program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.swisscom.safeconnect.activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.swisscom.safeconnect.BuildConfig;
import com.swisscom.safeconnect.R;
import com.swisscom.safeconnect.backend.BackendConnector;
import com.swisscom.safeconnect.backend.SubscriptionsManager;
import com.swisscom.safeconnect.billing.IabHelper;
import com.swisscom.safeconnect.billing.PurchaseManager;
import com.swisscom.safeconnect.model.PlumberResponse;
import com.swisscom.safeconnect.model.PlumberSubscriptionResponse;
import com.swisscom.safeconnect.model.Subscription;
import com.swisscom.safeconnect.utils.Config;
import com.swisscom.safeconnect.view.AboView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* Created by cianci on 6/10/14.
*/
public class SubscriptionActivity extends PipeActivity {
public static final Subscription S_MONTH = new Subscription("month");
public static final Subscription S_YEAR = new Subscription("year");
private BackendConnector backendConnector = new BackendConnector(this);
private TextView tvAboBuyErrorMessage;
private TextView tvAboBuyEncouragement;
private TextView tvAboBuyExplanation;
private AboView aboMonth, aboYear;
private PurchaseManager purchaseManager;
private List<Subscription> subscriptions;
private Subscription currentSubscription;
private boolean purchaseManagerReady = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.abo, false);
initActionBar(this, R.string.lab_abo, true);
TextView tvReadTerms = (TextView) findViewById(R.id.view_abo_terms_read);
tvReadTerms.setText(Html.fromHtml(getString(R.string.lab_abo_terms_read)));
tvReadTerms.setMovementMethod(LinkMovementMethod.getInstance());
tvAboBuyErrorMessage = (TextView) findViewById(R.id.view_abo_buy_error_message);
tvAboBuyEncouragement = (TextView) findViewById(R.id.view_abo_buy_encouragement);
tvAboBuyExplanation = (TextView) findViewById(R.id.view_abo_buy_explanation);
aboMonth = (AboView) findViewById(R.id.view_abo_month);
aboYear = (AboView) findViewById(R.id.view_abo_year);
currentSubscription = (Subscription) getIntent()
.getSerializableExtra(SubscriptionsManager.KEY_CURRENT_SUBSCR);
Object[] aa = (Object [])getIntent().getSerializableExtra(SubscriptionsManager.KEY_SUBSCRIPTIONS);
Subscription[] ss = Arrays.copyOf(aa, aa.length, Subscription[].class);
if (ss != null) {
subscriptions = new ArrayList<>(Arrays.asList(ss));
} else {
if (BuildConfig.DEBUG) Log.e(Config.TAG, "activity requires subscriptions in intent");
subscriptions = new LinkedList<>();
}
if (!BuildConfig.DEBUG) initPurchaseManager();
setSubscription(S_MONTH, aboMonth, AboView.PricePeriod.MONTH);
setSubscription(S_YEAR, aboYear, AboView.PricePeriod.YEAR);
aboMonth.setOnBuyListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aboMonth.setProgressVisible(true);
subscribe(aboMonth.getSubscription());
}
});
aboYear.setOnBuyListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aboYear.setProgressVisible(true);
subscribe(aboYear.getSubscription());
}
});
}
private void setSubscription(Subscription searchFor, AboView view, AboView.PricePeriod period) {
int index = subscriptions.indexOf(searchFor);
if (index >= 0) {
view.setSubscription(subscriptions.get(index), currentSubscription, period);
} else {
if (BuildConfig.DEBUG) Log.e(Config.TAG, "failed to find a subscription!");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (purchaseManager == null) return;
// Pass on the activity result to the helper for handling
if (!purchaseManager.handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void initPurchaseManager() {
Subscription[] s = new Subscription[subscriptions.size()];
subscriptions.toArray(s);
purchaseManager = new PurchaseManager(SubscriptionActivity.this, s);
purchaseManager.init(new PurchaseManager.Callback<PlumberResponse>() {
@Override
public void onRequestCompleted(PlumberResponse result) {
if (BuildConfig.DEBUG) Log.d(Config.TAG, "purchase manage init completed");
purchaseManagerReady = true;
}
@Override
public void onRequestFailed(int errorCode) {
if (BuildConfig.DEBUG) Log.d(Config.TAG, "purchase manager init failed");
purchaseManagerReady = false;
}
});
}
private void setSubscribeEnabled(boolean enabled) {
aboMonth.setBtnBuyEnabled(enabled);
aboYear.setBtnBuyEnabled(enabled);
}
private void subscribe(Subscription subscription) {
setSubscribeEnabled(false);
if (BuildConfig.DEBUG || BuildConfig.TESTING) {
backendConnector.subscribe(Config.getInstance().getPhoneNumber(),
Config.getInstance().getDeviceId(), subscription.getId(),
new BackendConnector.ResponseCallback<PlumberSubscriptionResponse>() {
@Override
public void onRequestComplete(int statusCode, PlumberSubscriptionResponse response) {
setSubscribeEnabled(true);
aboYear.setProgressVisible(false);
aboMonth.setProgressVisible(false);
tvAboBuyErrorMessage.setVisibility(View.GONE);
tvAboBuyEncouragement.setVisibility(View.VISIBLE);
tvAboBuyExplanation.setVisibility(View.VISIBLE);
if (statusCode != 200 || response == null) {
showErrorMsg();
return;
}
//inform widget
Config.getInstance().setSubscriptionValidTill(response.getValidTill());
sendBroadcast(new Intent(Config.UPDATE_SUBSCRIPTION));
finish();
}
}
);
} else {
if (!purchaseManagerReady) {
if (BuildConfig.DEBUG) Log.e(Config.TAG, "PurchaseManager is not ready!");
setSubscribeEnabled(true);
aboMonth.setProgressVisible(false);
aboYear.setProgressVisible(false);
return;
}
purchaseManager.purchaseSubscription(subscription, new PurchaseManager.Callback<Subscription>() {
@Override
public void onRequestCompleted(Subscription result) {
if (BuildConfig.DEBUG) Log.d(Config.TAG, "purchased!!!");
setSubscribeEnabled(true);
tvAboBuyErrorMessage.setVisibility(View.GONE);
tvAboBuyEncouragement.setVisibility(View.VISIBLE);
tvAboBuyExplanation.setVisibility(View.VISIBLE);
aboMonth.setProgressVisible(false);
aboYear.setProgressVisible(false);
//inform widget
sendBroadcast(new Intent(Config.UPDATE_SUBSCRIPTION));
finish();
}
@Override
public void onRequestFailed(int errorCode) {
aboMonth.setProgressVisible(false);
aboYear.setProgressVisible(false);
if (errorCode == IabHelper.IABHELPER_USER_CANCELLED) { // Back button pressed
aboYear.setBtnBuyEnabled(true);
aboMonth.setBtnBuyEnabled(true);
tvAboBuyErrorMessage.setVisibility(View.GONE);
tvAboBuyEncouragement.setVisibility(View.VISIBLE);
tvAboBuyExplanation.setVisibility(View.VISIBLE);
} else {
setSubscribeEnabled(true);
showErrorMsg();
}
}
});
}
}
private void showErrorMsg() {
tvAboBuyErrorMessage.setVisibility(View.VISIBLE);
tvAboBuyExplanation.setVisibility(View.GONE);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
tvAboBuyEncouragement.setVisibility(View.GONE);
}
}
}