mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-18 03:48:08 +00:00
243 lines
7.5 KiB
Java
243 lines
7.5 KiB
Java
package org.linphone.purchase;
|
|
/*
|
|
InAppPurchaseListener.java
|
|
Copyright (C) 2015 Belledonne Communications, Grenoble, France
|
|
|
|
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 2
|
|
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, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Locale;
|
|
|
|
import org.linphone.LinphoneManager;
|
|
import org.linphone.R;
|
|
import org.linphone.core.LinphoneProxyConfig;
|
|
import org.linphone.mediastream.Log;
|
|
import org.linphone.xmlrpc.XmlRpcHelper;
|
|
import org.linphone.xmlrpc.XmlRpcListenerBase;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.text.Editable;
|
|
import android.text.TextWatcher;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.EditText;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
/**
|
|
* @author Sylvain Berfini
|
|
*/
|
|
public class InAppPurchaseActivity extends Activity implements InAppPurchaseListener, OnClickListener {
|
|
private InAppPurchaseHelper inAppPurchaseHelper;
|
|
private LinearLayout purchasableItemsLayout;
|
|
private ArrayList<Purchasable> purchasedItems;
|
|
private ImageView buyItemButton, recoverAccountButton;
|
|
private Handler mHandler = new Handler();
|
|
|
|
private EditText username, email;
|
|
private TextView errorMessage;
|
|
private boolean usernameOk = false;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
inAppPurchaseHelper = new InAppPurchaseHelper(this, this);
|
|
|
|
setContentView(R.layout.in_app_store);
|
|
purchasableItemsLayout = (LinearLayout) findViewById(R.id.purchasable_items);
|
|
|
|
username = (EditText) findViewById(R.id.setup_username);
|
|
email = (EditText) findViewById(R.id.setup_email);
|
|
ImageView usernameOkIV = (ImageView) findViewById(R.id.setup_username_ok);
|
|
addUsernameHandler(username, usernameOkIV);
|
|
errorMessage = (TextView) findViewById(R.id.setup_error);
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
inAppPurchaseHelper.destroy();
|
|
super.onDestroy();
|
|
}
|
|
|
|
@Override
|
|
public void onServiceAvailableForQueries() {
|
|
email.setText(inAppPurchaseHelper.getGmailAccount());
|
|
email.setEnabled(false);
|
|
|
|
inAppPurchaseHelper.getPurchasedItemsAsync();
|
|
}
|
|
|
|
@Override
|
|
public void onAvailableItemsForPurchaseQueryFinished(ArrayList<Purchasable> items) {
|
|
purchasableItemsLayout.removeAllViews();
|
|
|
|
for (Purchasable item : items) {
|
|
displayBuySubscriptionButton(item);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPurchasedItemsQueryFinished(ArrayList<Purchasable> items) {
|
|
purchasedItems = items;
|
|
|
|
if (items == null || items.size() == 0) {
|
|
inAppPurchaseHelper.getAvailableItemsForPurchaseAsync();
|
|
} else {
|
|
for (Purchasable purchasedItem : purchasedItems) {
|
|
Log.d("[In-app purchase] Found already bought item, expires " + purchasedItem.getExpireDate());
|
|
displayRecoverAccountButton(purchasedItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPurchasedItemConfirmationQueryFinished(boolean success) {
|
|
if (success) {
|
|
XmlRpcHelper xmlRpcHelper = new XmlRpcHelper();
|
|
xmlRpcHelper.createAccountAsync(new XmlRpcListenerBase() {
|
|
@Override
|
|
public void onAccountCreated(String result) {
|
|
//TODO
|
|
}
|
|
}, getUsername(), email.getText().toString(), null);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
Purchasable item = (Purchasable) v.getTag();
|
|
if (v.equals(recoverAccountButton)) {
|
|
XmlRpcHelper xmlRpcHelper = new XmlRpcHelper();
|
|
xmlRpcHelper.createAccountAsync(new XmlRpcListenerBase() {
|
|
@Override
|
|
public void onAccountCreated(String result) {
|
|
//TODO
|
|
}
|
|
}, getUsername(), email.getText().toString(), null);
|
|
} else {
|
|
inAppPurchaseHelper.purchaseItemAsync(item.getId(), getUsername());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
inAppPurchaseHelper.parseAndVerifyPurchaseItemResultAsync(requestCode, resultCode, data);
|
|
}
|
|
|
|
@Override
|
|
public void onRecoverAccountSuccessful(boolean success) {
|
|
mHandler.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
recoverAccountButton.setEnabled(false);
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void onError(final String error) {
|
|
Log.e(error);
|
|
mHandler.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
Toast.makeText(InAppPurchaseActivity.this, error, Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void onActivateAccountSuccessful(boolean success) {
|
|
if (success) {
|
|
Log.d("[In-app purchase] Account activated");
|
|
}
|
|
}
|
|
|
|
private void displayBuySubscriptionButton(Purchasable item) {
|
|
View layout = LayoutInflater.from(this).inflate(R.layout.in_app_purchasable, purchasableItemsLayout);
|
|
TextView text = (TextView) layout.findViewById(R.id.text);
|
|
text.setText("Buy account (" + item.getPrice() + ")");
|
|
ImageView image = (ImageView) layout.findViewById(R.id.image);
|
|
image.setTag(item);
|
|
image.setOnClickListener(this);XmlRpcHelper xmlRpcHelper = new XmlRpcHelper();
|
|
xmlRpcHelper.createAccountAsync(new XmlRpcListenerBase() {
|
|
@Override
|
|
public void onAccountCreated(String result) {
|
|
//TODO
|
|
}
|
|
}, getUsername(), email.getText().toString(), null);
|
|
|
|
buyItemButton = image;
|
|
buyItemButton.setEnabled(usernameOk);
|
|
}
|
|
|
|
private void displayRecoverAccountButton(Purchasable item) {
|
|
View layout = LayoutInflater.from(this).inflate(R.layout.in_app_purchasable, purchasableItemsLayout);
|
|
TextView text = (TextView) layout.findViewById(R.id.text);
|
|
text.setText("Recover account");
|
|
ImageView image = (ImageView) layout.findViewById(R.id.image);
|
|
image.setTag(item);
|
|
image.setOnClickListener(this);
|
|
|
|
recoverAccountButton = image;
|
|
recoverAccountButton.setEnabled(usernameOk);
|
|
}
|
|
|
|
private String getUsername() {
|
|
String username = this.username.getText().toString();
|
|
LinphoneProxyConfig lpc = LinphoneManager.getLc().createProxyConfig();
|
|
username = lpc.normalizePhoneNumber(username);
|
|
return username.toLowerCase(Locale.getDefault());
|
|
}
|
|
|
|
private boolean isUsernameCorrect(String username) {
|
|
LinphoneProxyConfig lpc = LinphoneManager.getLc().createProxyConfig();
|
|
return lpc.isPhoneNumber(username);
|
|
}
|
|
|
|
private void addUsernameHandler(final EditText field, final ImageView icon) {
|
|
field.addTextChangedListener(new TextWatcher() {
|
|
public void afterTextChanged(Editable s) {
|
|
|
|
}
|
|
|
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
|
|
}
|
|
|
|
public void onTextChanged(CharSequence s, int start, int count, int after) {
|
|
usernameOk = false;
|
|
String username = s.toString();
|
|
if (isUsernameCorrect(username)) {
|
|
usernameOk = true;
|
|
icon.setImageResource(R.drawable.wizard_ok);
|
|
errorMessage.setText("");
|
|
} else {
|
|
errorMessage.setText(R.string.wizard_username_incorrect);
|
|
icon.setImageResource(R.drawable.wizard_notok);
|
|
}
|
|
if (buyItemButton != null) buyItemButton.setEnabled(usernameOk);
|
|
if (recoverAccountButton != null) recoverAccountButton.setEnabled(usernameOk);
|
|
}
|
|
});
|
|
}
|
|
}
|