/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.service;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import android.content.Context;
import android.content.Intent;
import android.content.pm.FeatureInfo;
import android.os.Build;
import android.view.TextureView;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.DbEmbedHangout;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.hangout.GCommApp;
import com.galaxy.meetup.client.android.realtimechat.Data;
import com.galaxy.meetup.client.util.Property;
/**
*
* @author sihai
*
*/
public class Hangout {
static final boolean assertionsDisabled;
public static final String CONSUMER_HANGOUT_DOMAIN = null;
private static final Pattern HANGOUT_URL_PATTERN = Pattern.compile("http s? ://plus.google.com/hangouts/( \\p{Alnum}+)", 6);
private static EsAccount sAccountForCachedStatus;
private static boolean sCachedIsCreationSupported;
private static SupportStatus sCachedStatus;
private static boolean sHangoutCreationSupportCacheIsDirty = true;
private static boolean sHangoutSupportStatusCacheIsDirty = true;
static {
boolean flag;
if(!Hangout.class.desiredAssertionStatus())
flag = true;
else
flag = false;
assertionsDisabled = flag;
}
public Hangout() {
}
public static void enterGreenRoom(EsAccount esaccount, Context context, String s, String s1, DbEmbedHangout dbembedhangout) {
if(!assertionsDisabled && !dbembedhangout.isInProgress())
throw new AssertionError();
List arraylist = new ArrayList();
arraylist.add(Data.Participant.newBuilder().setParticipantId((new StringBuilder("g:")).append(s).toString()).setFullName(s1).setFirstName(getFirstNameFromFullName(s1)).build());
List arraylist1 = dbembedhangout.getAttendeeGaiaIds();
List arraylist2 = dbembedhangout.getAttendeeNames();
int i = 0;
for(int j = dbembedhangout.getNumAttendees(); i < j; i++)
{
String s2 = (String)arraylist2.get(i);
arraylist.add(Data.Participant.newBuilder().setParticipantId((new StringBuilder("g:")).append((String)arraylist1.get(i)).toString()).setFullName(s2).setFirstName(getFirstNameFromFullName(s2)).build());
}
Intent intent = Intents.getHangoutActivityIntent(context, esaccount, RoomType.CONSUMER, null, null, dbembedhangout.getHangoutId(), null, LaunchSource.Stream, false, false, arraylist);
GCommApp gcommapp = GCommApp.getInstance(context);
if(gcommapp.isInAHangout())
{
Intent intent1 = gcommapp.getGCommService().getNotificationIntent();
if(intent1 != null)
{
Info info = (Info)intent1.getSerializableExtra("hangout_info");
if(info != null && info.id.equals(dbembedhangout.getHangoutId()))
intent = intent1;
}
}
context.startActivity(intent);
}
public static String getFirstNameFromFullName(String s) {
int i = s.indexOf(' ');
if(i != -1)
s = s.substring(0, i);
return s;
}
public static SupportStatus getSupportedStatus(Context context, EsAccount esaccount) {
updateCacheDirtyFlags(esaccount);
if(sHangoutSupportStatusCacheIsDirty) {
SupportStatus supportstatus;
if(android.os.Build.VERSION.SDK_INT < 8) {
supportstatus = SupportStatus.OS_NOT_SUPPORTED;
} else {
FeatureInfo afeatureinfo[] = context.getPackageManager().getSystemAvailableFeatures();
boolean flag;
if(afeatureinfo != null && afeatureinfo.length > 0) {
int i = afeatureinfo.length;
int j = 0;
flag = false;
while(j < i) {
FeatureInfo featureinfo = afeatureinfo[j];
if(featureinfo.name == null)
if((short)(featureinfo.reqGlEsVersion >> 16) >= 2)
flag = true;
else
flag = false;
j++;
}
} else {
flag = false;
}
if(!flag)
supportstatus = SupportStatus.DEVICE_NOT_SUPPORTED;
else
if(!Build.CPU_ABI.equals("armeabi-v7a") && !Build.CPU_ABI2.equals("armeabi-v7a"))
supportstatus = SupportStatus.DEVICE_NOT_SUPPORTED;
else
if(esaccount == null || esaccount.getName() == null || esaccount.isPlusPage())
supportstatus = SupportStatus.ACCOUNT_NOT_CONFIGURED;
else
supportstatus = SupportStatus.SUPPORTED;
}
sCachedStatus = supportstatus;
sHangoutSupportStatusCacheIsDirty = false;
}
return sCachedStatus;
}
public static boolean isAdvancedUiSupported(Context context)
{
boolean flag = true;
if(android.os.Build.VERSION.SDK_INT < 14 || !Property.ENABLE_ADVANCED_HANGOUTS.getBoolean() || (new TextureView(context)).getLayerType() != 2)
return false;
else {
boolean flag1;
if(Build.MANUFACTURER.equals("samsung") && !Build.BRAND.equals("google") && android.os.Build.VERSION.SDK_INT <= 15)
flag1 = flag;
else
flag1 = false;
if(flag1) {
return false;
}
return true;
}
}
public static boolean isHangoutCreationSupported(Context context, EsAccount esaccount)
{
boolean flag = false;
updateCacheDirtyFlags(esaccount);
if(!sHangoutCreationSupportCacheIsDirty)
return sCachedIsCreationSupported;
else {
if(getSupportedStatus(context, esaccount) == SupportStatus.SUPPORTED) {
FeatureInfo afeatureinfo[] = context.getPackageManager().getSystemAvailableFeatures();
if(null != afeatureinfo) {
for(FeatureInfo featureinfo : afeatureinfo) {
if("android.hardware.camera.front".equals(featureinfo.name) || "android.hardware.camera".equals(featureinfo.name)) {
flag = true;
}
}
}
}
sCachedIsCreationSupported = flag;
sHangoutCreationSupportCacheIsDirty = false;
return sCachedIsCreationSupported;
}
}
private static void updateCacheDirtyFlags(EsAccount esaccount)
{
if(sAccountForCachedStatus == null || !sAccountForCachedStatus.equals(esaccount))
{
sHangoutCreationSupportCacheIsDirty = true;
sHangoutSupportStatusCacheIsDirty = true;
sAccountForCachedStatus = esaccount;
}
}
public static interface ApplicationEventListener {
}
public static enum LaunchSource {
None,
Stream,
Url,
MissedCall,
Ring,
Ding,
Creation,
Messenger,
Transfer,
Event;
}
public static enum RoomType {
CONSUMER,
WITH_EXTRAS,
EXTERNAL,
UNKNOWN;
}
public static enum SupportStatus {
OS_NOT_SUPPORTED,
DEVICE_NOT_SUPPORTED,
CHILD_NOT_SUPPORTED,
ACCOUNT_NOT_CONFIGURED,
TYPE_NOT_SUPPORTED,
SUPPORTED;
public String getErrorMessage(Context context) {
String errorMsg = null;
switch(this) {
case OS_NOT_SUPPORTED:
errorMsg = context.getResources().getString(R.string.hangout_not_supported_os);;
break;
case DEVICE_NOT_SUPPORTED:
errorMsg = context.getResources().getString(R.string.hangout_not_supported_device);;
break;
case CHILD_NOT_SUPPORTED:
errorMsg = context.getResources().getString(R.string.hangout_not_supported_child);;
break;
case ACCOUNT_NOT_CONFIGURED:
errorMsg = context.getResources().getString(R.string.hangout_not_supported_account);;
break;
case TYPE_NOT_SUPPORTED:
errorMsg = context.getResources().getString(R.string.hangout_not_supported_type);;
break;
}
return errorMsg;
}
}
public static class Info implements Serializable {
private final String domain;
private final String id;
private final LaunchSource launchSource;
private final String nick;
private boolean ringInvitees;
private final RoomType roomType;
private final String serviceId;
public Info(RoomType roomtype, String s, String s1, String s2, String s3, LaunchSource launchsource, boolean flag)
{
ringInvitees = false;
roomType = roomtype;
domain = s;
serviceId = s1;
id = s2.toLowerCase();
nick = s3;
launchSource = launchsource;
ringInvitees = flag;
}
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(!(obj instanceof Info)) {
return false;
}
Info info = (Info)obj;
boolean flag1;
boolean flag2;
if(domain == null || domain.equals(""))
flag1 = true;
else
flag1 = false;
if(info.domain == null || info.domain.equals(""))
flag2 = true;
else
flag2 = false;
if(roomType != info.roomType || (!flag1 || !flag2) && (domain == null || !domain.equals(info.domain)) || !id.equals(info.id))
return false;
return true;
}
public final String getDomain()
{
return domain;
}
public final String getId()
{
return id;
}
public final LaunchSource getLaunchSource()
{
return launchSource;
}
public final String getNick()
{
return nick;
}
public final boolean getRingInvitees()
{
return ringInvitees;
}
public final RoomType getRoomType()
{
return roomType;
}
public final String getServiceId()
{
return serviceId;
}
public int hashCode()
{
int i = roomType.hashCode() ^ id.hashCode();
if(domain != null && !domain.equals(""))
i ^= domain.hashCode();
return i;
}
public String toString()
{
String s;
if(serviceId == null)
{
Object aobj1[] = new Object[6];
aobj1[0] = id;
aobj1[1] = domain;
aobj1[2] = roomType;
aobj1[3] = nick;
aobj1[4] = launchSource;
aobj1[5] = Boolean.valueOf(ringInvitees);
s = String.format("%s@%s %s (%s, %s, %s)", aobj1);
} else
{
Object aobj[] = new Object[7];
aobj[0] = serviceId;
aobj[1] = id;
aobj[2] = domain;
aobj[3] = roomType;
aobj[4] = nick;
aobj[5] = launchSource;
aobj[6] = Boolean.valueOf(ringInvitees);
s = String.format("%s:%s@%s %s (%s, %s, %s)", aobj);
}
return s;
}
}
}