/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.hangout; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.ActionBar; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.text.Html; import android.text.Html.ImageGetter; import android.text.SpannableString; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; import android.widget.TextView; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.MeetupFeedback; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.ShakeDetector; import com.galaxy.meetup.client.android.analytics.OzActions; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.content.AudienceData; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsAccountsData; import com.galaxy.meetup.client.android.hangout.HangoutTile.HangoutTileActivity; import com.galaxy.meetup.client.android.hangout.crash.CrashReport; import com.galaxy.meetup.client.android.service.Hangout; import com.galaxy.meetup.client.android.ui.fragments.AlertFragmentDialog; import com.galaxy.meetup.client.android.ui.fragments.EsFragmentActivity; import com.galaxy.meetup.client.android.ui.view.Tile; import com.galaxy.meetup.client.util.HelpUrl; import com.galaxy.meetup.client.util.Property; /** * * @author sihai * */ public class HangoutActivity extends EsFragmentActivity implements ImageGetter, HangoutTileActivity { private Hangout.Info hangoutInfo; private final Tile.ParticipantPresenceListener hangoutParticipantPresenceListener = new HangoutParticipantPresenceListener(); private EsAccount mAccount; HangoutTile mHangoutTile; private boolean mShakeDetectorWasRunning; private boolean mSkipGreenRoom; private boolean mSkipMinorWarning; public HangoutActivity() { mSkipGreenRoom = false; } private boolean canTransfer() { try { GCommNativeWrapper.GCommAppState gcommappstate = GCommApp.getInstance(this).getGCommNativeWrapper().getCurrentState(); boolean flag; boolean flag1 = Property.ENABLE_HANGOUT_SWITCH.getBoolean(); flag = false; if(flag1) { GCommNativeWrapper.GCommAppState gcommappstate1 = GCommNativeWrapper.GCommAppState.IN_MEETING_WITH_MEDIA; flag = false; if(gcommappstate == gcommappstate1) flag = true; } return flag; } catch (LinkageError linkageerror) { return false; } } private void displayParticipantsInTray() { mHangoutTile.setParticipants(null, null); } public final void blockPerson(Serializable serializable) { mHangoutTile.blockPerson(serializable); } protected final EsAccount getAccount() { return mAccount; } public Drawable getDrawable(String s) { BitmapDrawable bitmapdrawable = null; Resources resources = getResources(); Bitmap bitmap = null; if("block_icon".equals(s)) { bitmap = BitmapFactory.decodeResource(resources, R.drawable.icn_drop_block_unpadded); } else if("exit_icon".equals(s)) { bitmap = BitmapFactory.decodeResource(resources, R.drawable.hangout_ic_menu_exit_unpadded); } if(null != bitmap) { bitmapdrawable = new BitmapDrawable(resources, bitmap); bitmapdrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); } return bitmapdrawable; } public final Intent getGreenRoomParticipantListActivityIntent(List arraylist) { return Intents.getHangoutParticipantListActivityIntent(this, mHangoutTile.getAccount(), arraylist); } public final Intent getHangoutNotificationIntent() { GCommNativeWrapper gcommnativewrapper = GCommApp.getInstance(this).getGCommNativeWrapper(); Intent intent = getIntent(); boolean flag = intent.hasExtra("audience"); AudienceData audiencedata = null; if(flag) audiencedata = (AudienceData)intent.getParcelableExtra("audience"); Intent intent1 = Intents.getHangoutActivityAudienceIntent(this, gcommnativewrapper.getAccount(), gcommnativewrapper.getHangoutInfo(), mSkipGreenRoom, audiencedata); intent1.putExtra("hangout_skip_minor_warning", mSkipMinorWarning); return intent1; } public final Intent getParticipantListActivityIntent() { List list = GCommApp.getInstance(this).getGCommNativeWrapper().getMeetingMembersOrderedByEntry(); ArrayList arraylist = new ArrayList(list.size()); Iterator iterator = list.iterator(); do { if(!iterator.hasNext()) break; MeetingMember meetingmember = (MeetingMember)iterator.next(); if(!meetingmember.isSelf()) { String s = ""; if(meetingmember.getVCard() != null) s = meetingmember.getVCard().getFullName(); // TODO //arraylist.add(com.google.wireless.realtimechat.proto.Data.Participant.newBuilder().setParticipantId(meetingmember.getId()).setFullName(s).setFirstName(Hangout.getFirstNameFromFullName(s)).build()); } } while(true); return Intents.getHangoutParticipantListActivityIntent(this, mHangoutTile.getAccount(), arraylist); } public final OzViews getViewForLogging() { return OzViews.HANGOUT; } public void onActivityResult(int i, int j, Intent intent) { mHangoutTile.onActivityResult(i, j, intent); super.onActivityResult(i, j, intent); } public final void onBlockCompleted(boolean flag) { } protected void onCreate(Bundle bundle) { int i; String s; View view; AlertFragmentDialog alertfragmentdialog; try { super.onCreate(bundle); Log.debug((new StringBuilder("HangoutActivity.onCreate: ")).append(this).toString()); GCommApp.getInstance(this).getGCommNativeWrapper().getCurrentState(); ActionBar actionbar; Intent intent = getIntent(); mAccount = (EsAccount)intent.getParcelableExtra("account"); boolean flag; boolean flag1; boolean flag2; List arraylist; int j; android.view.ViewGroup.LayoutParams layoutparams; MinorWarningDialog minorwarningdialog; AbuseWarningDialog abusewarningdialog; if(mAccount.isChild() && !EsAccountsData.hasSeenMinorHangoutWarningDialog(this, mAccount) && !intent.getBooleanExtra("hangout_skip_minor_warning", false)) flag = true; else flag = false; if(Property.ENABLE_HANGOUT_RECORD_ABUSE.getBoolean() && Property.ENABLE_HANGOUT_RECORD_ABUSE_INTERSTITIAL.getBoolean() && !EsAccountsData.hasSeenReportAbusetWarningDialog(this, mAccount)) flag1 = true; else flag1 = false; if(!flag && !flag1 && intent.getBooleanExtra("hangout_skip_green_room", false)) flag2 = true; else flag2 = false; mSkipGreenRoom = flag2; hangoutInfo = (Hangout.Info)intent.getSerializableExtra("hangout_info"); arraylist = (ArrayList)intent.getSerializableExtra("hangout_participants"); if(hangoutInfo != null && (hangoutInfo.getLaunchSource() == Hangout.LaunchSource.Ring || hangoutInfo.getLaunchSource() == Hangout.LaunchSource.Transfer)) getWindow().addFlags(0x680080); else HangoutRingingActivity.stopRingActivity(); j = android.os.Build.VERSION.SDK_INT; actionbar = null; if(j >= 11) actionbar = getActionBar(); if(actionbar != null) actionbar.setDisplayHomeAsUpEnabled(true); if(!Hangout.isAdvancedUiSupported(this)) { mHangoutTile = new HangoutPhoneTile(this); if(actionbar != null) actionbar.hide(); } else { mHangoutTile = new HangoutTabletTile(this); } layoutparams = new android.view.ViewGroup.LayoutParams(-1, -1); setContentView(mHangoutTile, layoutparams); mHangoutTile.setHangoutInfo(mAccount, hangoutInfo, arraylist, true, mSkipGreenRoom); mHangoutTile.onCreate(bundle); if(flag) { minorwarningdialog = new MinorWarningDialog(); minorwarningdialog.setCancelable(false); minorwarningdialog.show(getSupportFragmentManager(), "warning"); } if(flag1) { abusewarningdialog = new AbuseWarningDialog(); abusewarningdialog.setCancelable(false); abusewarningdialog.show(getSupportFragmentManager(), "warning"); } } catch (LinkageError linkageerror) { view = new View(this); view.setBackgroundColor(getResources().getColor(R.color.clear)); setContentView(view); i = R.string.hangout_native_lib_error; s = getResources().getString(i); Log.debug("showError: message=%s", new Object[] { s }); alertfragmentdialog = AlertFragmentDialog.newInstance(null, s, getResources().getString(R.string.ok), null, 0x1080027); alertfragmentdialog.setCancelable(false); alertfragmentdialog.setListener(new AlertFragmentDialog.AlertDialogListener() { public final void onDialogCanceled(String s1) { } public final void onDialogListClick(int k, Bundle bundle1) { } public final void onDialogNegativeClick(String s1) { } public final void onDialogPositiveClick(Bundle bundle1, String s1) { finish(); } }); alertfragmentdialog.show(getSupportFragmentManager(), "error"); } } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuinflater = getMenuInflater(); menuinflater.inflate(R.menu.hangout_menu, menu); menuinflater.inflate(R.menu.hangout_transfer, menu); menu.findItem(R.id.hangout_transfer_menu_item).setVisible(canTransfer()); menu.findItem(R.id.help).setVisible(false); menu.findItem(R.id.feedback).setVisible(false); if(GCommApp.isDebuggable(this)) { android.view.SubMenu submenu = menu.addSubMenu("Debug"); menuinflater.inflate(R.menu.hangout_debug, submenu); } if(mHangoutTile != null) mHangoutTile.onCreateOptionsMenu(menu, menuinflater); return super.onCreateOptionsMenu(menu); } public final void onMeetingMediaStarted() { } protected void onNewIntent(Intent intent) { Log.debug((new StringBuilder("onNewIntent:")).append(this).toString()); setIntent(intent); } public boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag = true; int i = menuitem.getItemId(); if(!mHangoutTile.onOptionsItemSelected(menuitem)) if(i == 0x102002c) goHome(mAccount); else if(i == R.id.help) startExternalActivity(new Intent("android.intent.action.VIEW", Uri.parse(getResources().getString(R.string.hangout_help_url)))); else if(i == R.id.feedback) { recordUserAction(OzActions.SETTINGS_FEEDBACK); MeetupFeedback.launch(this); } else if(i == R.id.menu_hangout_debug_upload_logs) { CrashReport crashreport = new CrashReport(flag); try { throw new Exception("Dummy exception for testing crash reports"); } catch(Exception exception) { crashreport.generateReport(CrashReport.computeJavaCrashSignature(exception)); } crashreport.send(this, false); } else if(i == R.id.menu_hangout_debug_simulate_network_error) GCommApp.getInstance(this).raiseNetworkError(); else if(i == R.id.hangout_transfer_menu_item) mHangoutTile.transfer(); else flag = super.onOptionsItemSelected(menuitem); return flag; } protected void onPause() { if(mHangoutTile != null) { mHangoutTile.onTilePause(); mHangoutTile.onPause(); } super.onPause(); } public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.hangout_transfer_menu_item).setVisible(canTransfer()); if(mHangoutTile != null) mHangoutTile.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu); } protected void onResume() { super.onResume(); if(mHangoutTile != null) { mHangoutTile.onResume(); mHangoutTile.onTileResume(); } } protected void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); if(mHangoutTile != null) mHangoutTile.onSaveInstanceState(bundle); } public void onStart() { super.onStart(); if(mHangoutTile != null) { mHangoutTile.onStart(); mHangoutTile.onTileStart(); displayParticipantsInTray(); mHangoutTile.addParticipantPresenceListener(hangoutParticipantPresenceListener); } ShakeDetector shakedetector = ShakeDetector.getInstance(getApplicationContext()); if(shakedetector != null) mShakeDetectorWasRunning = shakedetector.stop(); } protected void onStop() { super.onStop(); if(mHangoutTile != null) { mHangoutTile.removeParticipantPresenceListener(hangoutParticipantPresenceListener); mHangoutTile.onTileStop(); mHangoutTile.onStop(); } if(mShakeDetectorWasRunning) { ShakeDetector shakedetector = ShakeDetector.getInstance(getApplicationContext()); if(shakedetector != null) shakedetector.start(); } } public final void stopHangoutTile() { finish(); } //================================================================================ // Inner class //================================================================================ private final class AbuseWarningDialog extends AlertFragmentDialog { public final Dialog onCreateDialog(Bundle bundle) { android.content.Context context = getDialogContext(); View view = LayoutInflater.from(context).inflate(R.layout.hangout_abuse_dialog, null); TextView textview = (TextView)view.findViewById(R.id.reportAbuseLink); String s = getString(R.string.hangout_abuse_learn_more); SpannableString spannablestring = new SpannableString(s); final Uri url = HelpUrl.getHelpUrl(getActivity(), "plusone_promo_abuse"); spannablestring.setSpan(new ClickableSpan() { public final void onClick(View view) { Intent intent = new Intent("android.intent.action.VIEW", url); intent.addFlags(0x80000); startActivity(intent); } }, 0, s.length(), 33); textview.setText(spannablestring); textview.setMovementMethod(LinkMovementMethod.getInstance()); textview.setClickable(true); android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context); builder.setCancelable(false).setIcon(0x1080027).setView(view).setTitle(R.string.hangout_abuse_warning_header).setPositiveButton(R.string.hangout_abuse_ok_button_text, new android.content.DialogInterface.OnClickListener() { public final void onClick(DialogInterface dialoginterface, int i) { EsAccountsData.saveReportAbuseWarningDialogSeenPreference(getActivity(), mAccount, true); } }); return builder.create(); } } private final class HangoutParticipantPresenceListener implements Tile.ParticipantPresenceListener { public final void onParticipantPresenceChanged() { displayParticipantsInTray(); } } private final class MinorWarningDialog extends AlertFragmentDialog { public final Dialog onCreateDialog(Bundle bundle) { android.content.Context context = getDialogContext(); View view = LayoutInflater.from(context).inflate(R.layout.hangout_minor_dialog, null); final CheckBox checkbox = (CheckBox)view.findViewById(R.id.minorHangoutDontShow); ((TextView)view.findViewById(R.id.minorHangoutMessage)).setText(Html.fromHtml(getResources().getString(R.string.hangout_minor_warning_message), HangoutActivity.this, null)); android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context); builder.setCancelable(false).setIcon(0x1080027).setView(view).setTitle(R.string.hangout_minor_warning_header).setPositiveButton(R.string.hangout_minor_ok_button_text, new android.content.DialogInterface.OnClickListener() { public final void onClick(DialogInterface dialoginterface, int i) { if(checkbox.isChecked()) EsAccountsData.saveMinorHangoutWarningDialogSeenPreference(getActivity(), mAccount, true); mSkipMinorWarning = true; } }); return builder.create(); } } }