package com.androidsx.core.invitefriends;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.Toast;
import com.flurry.android.FlurryAgent;
import com.sromku.simple.fb.Permission;
import com.sromku.simple.fb.SimpleFacebook;
import com.sromku.simple.fb.SimpleFacebookConfiguration;
import com.sromku.simple.fb.listeners.OnInviteListener;
import com.sromku.simple.fb.listeners.OnLoginListener;
/**
* Invites friends to use your application with Facebook, WhatsApp or the standard share intent.
*/
public class InviteFriendsActivity extends Activity {
private static final String TAG = InviteFriendsActivity.class.getCanonicalName();
private SimpleFacebook simpleFacebook;
private OnTouchListener shareButtonTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
((ImageButton) arg0).getDrawable().setColorFilter(Color.argb(150, 155, 155, 155),
PorterDuff.Mode.DST_IN);
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
((ImageButton) arg0).getDrawable().clearColorFilter();
((ImageButton) arg0).invalidate();
break;
}
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_invite_friends);
configureFacebook();
findViewById(R.id.invite_friends_close).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.NONE,
Tracking.Properties.STATUS, Tracking.Values.OK));
finish();
}
});
ImageButton imageButtonFacebook = (ImageButton) findViewById(R.id.invite_friends_facebook);
imageButtonFacebook.setOnTouchListener(shareButtonTouchListener);
ImageButton imageButtonWhatsApp = (ImageButton) findViewById(R.id.invite_friends_whatsapp);
imageButtonWhatsApp.setOnTouchListener(shareButtonTouchListener);
ImageButton imageButtonOther = (ImageButton) findViewById(R.id.invite_friends_other);
imageButtonOther.setOnTouchListener(shareButtonTouchListener);
FlurryAgent.logEvent(Tracking.Events.INVITE_SHOWN);
}
@Override
protected void onStart() {
super.onStart();
FlurryAgent.onStartSession(this, getResources().getString(R.string.flurry_key));
}
@Override
protected void onStop() {
super.onStop();
FlurryAgent.onEndSession(this);
}
@Override
public void onResume() {
super.onResume();
simpleFacebook = SimpleFacebook.getInstance(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
simpleFacebook.onActivityResult(this, requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
public void onWhatsAppInvite(View v) {
Toast.makeText(this, R.string.invite_friends_toast_after_share, Toast.LENGTH_LONG).show();
final String shareBody = getResources().getString(R.string.invite_friends_market_url);
try {
Intent shareToWhatsApp = new Intent(Intent.ACTION_SEND);
shareToWhatsApp.setType("text/plain");
shareToWhatsApp.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
shareToWhatsApp.setClassName("com.whatsapp", "com.whatsapp.ContactPicker");
startActivity(shareToWhatsApp);
} catch (Exception e) {
Intent shareGeneric = new Intent(Intent.ACTION_SEND);
shareGeneric.setType("text/plain");
shareGeneric.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(shareGeneric, getResources().getString(R.string.invite_friends_share_chooser)));
}
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.WHATSAPP,
Tracking.Properties.STATUS, Tracking.Values.OK));
}
public void onOtherInvite(View v) {
final String marketUrl = getResources().getString(R.string.invite_friends_market_url);
final String shareBody = String.format(getResources().getString(R.string.invite_friends_share_other_message), marketUrl);
Intent shareGeneric = new Intent(Intent.ACTION_SEND);
shareGeneric.setType("text/plain");
shareGeneric.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(shareGeneric, "Share"));
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.OTHER,
Tracking.Properties.STATUS, Tracking.Values.OK));
}
public void onFacebookInvite(View v) {
if (!simpleFacebook.isLogin()) {
OnLoginListener onLoginListener = new OnLoginListener() {
@Override
public void onLogin() {
Log.v(TAG, "Logged in with facebook succesfully");
inviteFriends();
}
@Override
public void onNotAcceptingPermissions(Permission.Type type) {
Log.w(TAG, String.format("You didn't accept %s permissions", type.name()));
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.FACEBOOK,
Tracking.Properties.STATUS, Tracking.Values.ERROR,
Tracking.Properties.MESSAGE, "You didn't accept permissions: " + type.name()));
}
@Override
public void onThinking() {
}
@Override
public void onException(Throwable throwable) {
Log.w(TAG, "Exception thrown while accepting permissions", throwable);
}
@Override
public void onFail(String reason) {
Log.e(TAG, "Error during login: " + reason);
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.FACEBOOK,
Tracking.Properties.STATUS, Tracking.Values.ERROR,
Tracking.Properties.MESSAGE, "During login: " + reason));
}
};
simpleFacebook.login(onLoginListener);
} else {
inviteFriends();
}
}
private void inviteFriends() {
OnInviteListener onInviteListener = new OnInviteListener() {
@Override
public void onComplete(List<String> invitedFriends, String requestId) {
Log.i(TAG, "Invitation was sent to " + invitedFriends.size() + " users with request id " + requestId);
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.FACEBOOK,
Tracking.Properties.STATUS, Tracking.Values.OK,
Tracking.Properties.FRIENDS_INVITED, String.valueOf(invitedFriends.size())));
}
@Override
public void onCancel() {
Log.i(TAG, "Canceled the dialog");
}
@Override
public void onException(Throwable throwable) {
Log.w(TAG, "Exception thrown while inviting friends", throwable);
}
@Override
public void onFail(String reason) {
Log.e(TAG, "Failed: " + reason);
FlurryAgent.logEvent(Tracking.Events.INVITE,
Tracking.build(Tracking.Properties.METHOD, Tracking.Values.FACEBOOK,
Tracking.Properties.STATUS, Tracking.Values.ERROR,
Tracking.Properties.MESSAGE, "During inviting: " + reason));
}
};
simpleFacebook.invite(getResources().getString(R.string.invite_friends_facebook_dialog), onInviteListener, null);
}
private void configureFacebook() {
Permission[] permissions = new Permission[] {};
SimpleFacebookConfiguration configuration = new SimpleFacebookConfiguration.Builder()
.setAppId(getResources().getString(R.string.facebook_app_id))
.setNamespace(getResources().getString(R.string.facebook_app_namespace))
.setPermissions(permissions)
.build();
SimpleFacebook.setConfiguration(configuration);
}
}