/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import WriteReviewOperation.MediaRef;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.location.Location;
import android.location.LocationListener;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.text.style.URLSpan;
import android.util.Log;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.galaxy.meetup.client.android.EsCursorLoader;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.LocationController;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.RecentImagesLoader;
import com.galaxy.meetup.client.android.StreamAdapter;
import com.galaxy.meetup.client.android.StreamTranslationAdapter;
import com.galaxy.meetup.client.android.analytics.EsAnalytics;
import com.galaxy.meetup.client.android.analytics.OzActions;
import com.galaxy.meetup.client.android.analytics.OzViews;
import com.galaxy.meetup.client.android.content.DbLocation;
import com.galaxy.meetup.client.android.content.DbPlusOneData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsAccountsData;
import com.galaxy.meetup.client.android.content.EsAnalyticsData;
import com.galaxy.meetup.client.android.content.EsPostsData;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.controller.ComposeBarController;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.EsServiceListener;
import com.galaxy.meetup.client.android.service.ServiceResult;
import com.galaxy.meetup.client.android.ui.activity.ProfileActivity;
import com.galaxy.meetup.client.android.ui.view.CardView;
import com.galaxy.meetup.client.android.ui.view.ClickableButton;
import com.galaxy.meetup.client.android.ui.view.ColumnGridView;
import com.galaxy.meetup.client.android.ui.view.HostActionBar;
import com.galaxy.meetup.client.android.ui.view.ItemClickListener;
import com.galaxy.meetup.client.android.ui.view.PlusOneAnimatorView;
import com.galaxy.meetup.client.android.ui.view.StreamCardView;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.Property;
import com.galaxy.meetup.client.util.ResourceRedirector;
import com.galaxy.meetup.client.util.ScreenMetrics;
/**
*
* @author sihai
*
*/
public class HostedStreamFragment extends HostedEsFragment implements
android.support.v4.app.LoaderManager.LoaderCallbacks, View.OnClickListener,
ComposeBarController.ComposeBarListener, StreamAdapter.ViewUseListener,
PlusOneAnimatorView.PlusOneAnimListener,
StreamCardView.StreamMediaClickListener,
StreamCardView.StreamPlusBarClickListener {
private static final String CIRCLES_PROJECTION[] = {
"circle_id", "circle_name", "contact_count", "volume"
};
private static int sNextPagePreloadTriggerRows;
private static boolean sUsePhotoOneUp = false;
protected StreamTranslationAdapter mAdapter;
protected PlusOneInfo mAnimatingPlusOneInfo;
protected String mCircleId;
protected ComposeBarController mComposeBarController;
protected String mContinuationToken;
private int mCurrentSpinnerPosition;
protected boolean mEndOfStream;
protected boolean mError;
protected boolean mFirstLoad;
private boolean mFragmentCreated;
private long mFragmentStartTime;
protected String mGaiaId;
protected ColumnGridView mGridView;
protected StreamAdapter mInnerAdapter;
private long mLastDeactivationTime;
protected Integer mLoaderHash;
protected Location mLocation;
protected LocationController mLocationController;
protected View mLocationDisabledView;
protected Button mLocationSettingsButton;
protected boolean mNearby;
private boolean mOptionsMenuIsSubscribeVisible;
private int mOptionsMenuSubscribeIcon;
private int mOptionsMenuSubscribeText;
protected Uri mPostsUri;
protected boolean mPreloadRequested;
private ArrayAdapter mPrimarySpinnerAdapter;
private long mRecentImagesSyncTimestamp;
private boolean mRefreshDisabled;
protected boolean mResetAnimationState;
protected boolean mResetPosition;
private int mScrollOffset;
private int mScrollPos;
private View mServerErrorRetryButton;
private View mServerErrorView;
protected final EsServiceListener mServiceListener = new ServiceListener();
private String mSetVolumeRequestCircleName;
private Integer mSetVolumeRequestId;
private int mSetVolumeRequestVolume;
private long mStreamChangeLastCheckTimeMs;
private boolean mStreamHasChanged;
private int mStreamLength;
protected String mStreamOwnerUserId;
protected int mView;
public HostedStreamFragment() {
mFirstLoad = true;
mStreamLength = -1;
}
private void addLocationListener(Location location) {
View view;
if(mLocationController == null)
mLocationController = new LocationController(getActivity(), mAccount, true, 3000L, location, new StreamLocationListener());
view = getView();
view.findViewById(R.id.stream_location_layout).setVisibility(0);
updateLocationHeader(view);
if(mLocationController.isProviderEnabled()) {
mLocationController.init();
if(mLocation == null)
showEmptyViewProgress(view, getString(R.string.finding_your_location));
} else {
removeProgressViewMessages();
view.findViewById(0x1020004).setVisibility(8);
view.findViewById(R.id.list_empty_text).setVisibility(8);
view.findViewById(R.id.list_empty_progress).setVisibility(8);
view.findViewById(R.id.stream_location_layout).setVisibility(8);
mGridView.setVisibility(8);
mLocationDisabledView.setVisibility(0);
removeLocationListener();
}
}
private static OzViews getViewForLogging(String s) {
OzViews ozviews;
if("v.all.circles".equals(s))
ozviews = OzViews.LOOP_EVERYONE;
else
if("v.whatshot".equals(s))
ozviews = OzViews.LOOP_WHATS_HOT;
else
if("v.nearby".equals(s))
ozviews = OzViews.LOOP_NEARBY;
else
if(s.startsWith("f."))
ozviews = OzViews.LOOP_CIRCLES;
else
if(s.startsWith("g."))
ozviews = OzViews.LOOP_USER;
else
ozviews = OzViews.HOME;
return ozviews;
}
private void handleOnSetVolumeControlCallback(ServiceResult serviceresult)
{
DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending");
if(dialogfragment != null)
dialogfragment.dismiss();
mSetVolumeRequestId = null;
if(serviceresult != null)
{
String s;
if(serviceresult.hasError())
s = getString(R.string.transient_server_error);
else
if(mSetVolumeRequestVolume == 2)
{
int j = R.string.toast_circle_unsubscribed;
Object aobj1[] = new Object[1];
aobj1[0] = mSetVolumeRequestCircleName;
s = getString(j, aobj1);
} else
if(mSetVolumeRequestVolume == 4)
{
int i = R.string.toast_circle_subscribed;
Object aobj[] = new Object[1];
aobj[0] = mSetVolumeRequestCircleName;
s = getString(i, aobj);
} else
{
s = getString(R.string.report_set_volume_completed_toast);
}
Toast.makeText(getActivity(), s, 0).show();
}
}
private void initRecentImagesLoader() {
getLoaderManager().restartLoader(6, null, this);
}
private void onShakeAnimFinished() {
if(!isPaused() && getActivity() != null) {
View view = getView();
if(view != null)
{
View view1 = view.findViewById(R.id.plus_one_glass);
if(view1 != null)
view1.setVisibility(8);
}
if(mAnimatingPlusOneInfo != null)
{
togglePlusOne(mAnimatingPlusOneInfo.activityId, mAnimatingPlusOneInfo.plusOneData);
mAnimatingPlusOneInfo = null;
}
}
}
private void prefetchContent() {
mPreloadRequested = true;
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", "prefetchContent - mPreloadRequested=true");
if(!mGridView.post(new Runnable() {
public final void run() {
if(isPaused()) {
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", "prefetchContent - paused!");
} else {
fetchContent(false);
}
}
}) && EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", "prefetchContent - posting the runnable returned false!");
}
private void removeLocationListener()
{
if(mLocationController != null)
{
mLocationController.release();
mLocationController = null;
}
}
private void startStreamOneUp(StreamCardView streamcardview, boolean flag)
{
String s = streamcardview.getAlbumId();
MediaRef mediaref = streamcardview.getMediaRef();
String s1 = streamcardview.getMediaLinkUrl();
int i = streamcardview.getDesiredWidth();
int j = streamcardview.getDesiredHeight();
boolean flag1 = streamcardview.isAlbum();
String s2 = streamcardview.getLinkTitle();
String s3 = streamcardview.getDeepLinkLabel();
String s4 = streamcardview.getLinkUrl();
String s5 = streamcardview.getSquareIdForOneUp();
if(mediaref != null)
{
Bundle bundle = EsAnalyticsData.createExtras("extra_gaia_id", mediaref.getOwnerGaiaId());
recordUserAction(OzActions.STREAM_SELECT_ACTIVITY, bundle);
}
String s6 = streamcardview.getActivityId();
if(s6 != null)
{
Intent intent = Intents.getStreamOneUpActivityIntent(getActivity().getApplicationContext(), mAccount, s6);
if(i > 0 && j > 0)
{
intent.putExtra("photo_width", i);
intent.putExtra("photo_height", j);
}
if(mediaref != null)
{
intent.putExtra("photo_ref", mediaref);
intent.putExtra("is_album", flag1);
}
if(!TextUtils.isEmpty(s1))
intent.putExtra("photo_link_url", s1);
if(!TextUtils.isEmpty(s))
intent.putExtra("album_id", s);
if(!TextUtils.isEmpty(s2))
intent.putExtra("link_title", s2);
if(!TextUtils.isEmpty(s3))
intent.putExtra("deep_link_label", s3);
if(!TextUtils.isEmpty(s4))
intent.putExtra("link_url", s4);
if(!TextUtils.isEmpty(s5))
intent.putExtra("square_id", s5);
intent.putExtra("show_keyboard", flag);
startStreamOneUp(intent);
}
}
private void togglePlusOne(String s, DbPlusOneData dbplusonedata)
{
if(!EsService.isPostPlusOnePending(s))
{
FragmentActivity fragmentactivity = getActivity();
if(dbplusonedata != null && dbplusonedata.isPlusOnedByMe())
EsService.deletePostPlusOne(fragmentactivity, mAccount, s);
else
EsService.createPostPlusOne(fragmentactivity, mAccount, s);
}
}
private void updateEmptyViewProgressText()
{
View view = getView();
if(view != null)
{
int i;
String s;
if(mNearby)
i = R.string.finding_your_location;
else
i = R.string.loading;
s = getString(i);
((TextView)view.findViewById(R.id.list_empty_progress_text)).setText(s);
}
}
private void updateLocationHeader(View view)
{
TextView textview = (TextView)view.findViewById(R.id.stream_location_text);
if(mLocation == null)
{
textview.setText(R.string.finding_your_location);
} else
{
String s = LocationController.getFormattedAddress(mLocation);
if(s != null)
textview.setText(s);
else
textview.setText(R.string.unknown_address);
}
}
private void updateOptionsMenuInfo(CircleSpinnerInfo circlespinnerinfo)
{
String s = circlespinnerinfo.getRealCircleId();
if("v.all.circles".equals(s))
{
mOptionsMenuIsSubscribeVisible = true;
mOptionsMenuSubscribeText = R.string.menu_subscribe_to_circles;
mOptionsMenuSubscribeIcon = R.drawable.ic_menu_unmute_conversation;
} else
if("v.whatshot".equals(s) || "v.nearby".equals(s))
{
mOptionsMenuIsSubscribeVisible = false;
mOptionsMenuSubscribeText = 0;
mOptionsMenuSubscribeIcon = 0;
} else
{
mOptionsMenuIsSubscribeVisible = true;
if(circlespinnerinfo.getVolume() == 4)
{
mOptionsMenuSubscribeText = R.string.menu_unsubscribe;
mOptionsMenuSubscribeIcon = R.drawable.ic_menu_mute_conversation;
} else
{
mOptionsMenuSubscribeText = R.string.menu_subscribe;
mOptionsMenuSubscribeIcon = R.drawable.ic_menu_unmute_conversation;
}
}
}
private void updateRefreshButton(boolean flag)
{
if(EsLog.isLoggable("HostedStreamFrag", 3))
Log.d("HostedStreamFrag", (new StringBuilder("Stream has changed: ")).append(flag).toString());
mStreamHasChanged = flag;
HostActionBar hostactionbar = getActionBar();
if(hostactionbar != null)
hostactionbar.updateRefreshButtonIcon(mStreamHasChanged);
}
protected final void checkResetAnimationState()
{
if(mResetAnimationState)
{
if(mResetPosition)
{
mScrollPos = 0;
mScrollOffset = 0;
mGridView.setSelectionToTop();
}
mResetPosition = true;
mInnerAdapter.resetAnimationState();
mResetAnimationState = false;
}
}
protected StreamAdapter createStreamAdapter(Context context, ColumnGridView columngridview, EsAccount esaccount, View.OnClickListener onclicklistener, ItemClickListener itemclicklistener, StreamAdapter.ViewUseListener viewuselistener, StreamCardView.StreamPlusBarClickListener streamplusbarclicklistener,
StreamCardView.StreamMediaClickListener streammediaclicklistener, ComposeBarController composebarcontroller)
{
return new StreamAdapter(context, columngridview, esaccount, onclicklistener, itemclicklistener, viewuselistener, streamplusbarclicklistener, streammediaclicklistener, composebarcontroller);
}
public final void doCircleSubscribe(String s, String s1)
{
mSetVolumeRequestId = EsService.setVolumeControl(getActivity(), mAccount, s, 4);
mSetVolumeRequestVolume = 4;
mSetVolumeRequestCircleName = s1;
showProgressDialog(R.string.dialog_pending_circle_subscribe);
}
public final void doCircleSubscriptions(Map hashmap)
{
mSetVolumeRequestId = EsService.setVolumeControl(getActivity(), mAccount, hashmap);
mSetVolumeRequestVolume = -1;
mSetVolumeRequestCircleName = null;
showProgressDialog(R.string.set_volume_multiple_pending);
}
public final void doCircleUnsubscribe(String s, String s1)
{
mSetVolumeRequestId = EsService.setVolumeControl(getActivity(), mAccount, s, 2);
mSetVolumeRequestVolume = 2;
mSetVolumeRequestCircleName = s1;
showProgressDialog(R.string.dialog_pending_circle_unsubscribe);
}
protected void doShowEmptyViewProgress(View view)
{
super.doShowEmptyViewProgress(view);
mLocationDisabledView.setVisibility(8);
}
protected void fetchContent(boolean flag) {
if(mPrimarySpinnerAdapter == null || mPrimarySpinnerAdapter.getCount() != 0) {
if(!showEmptyStream() && (flag || !mEndOfStream) && !fetchStreamContent(flag))
if(mNearby)
showEmptyViewProgress(getView(), getString(R.string.loading));
else
showEmptyViewProgress(getView());
} else {
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", (new StringBuilder("fetchContent: No circles... reloading: ")).append(isEmpty()).toString());
showEmptyViewProgress(getView(), getString(R.string.loading));
updateSpinner();
getLoaderManager().restartLoader(1, null, this);
}
}
protected final boolean fetchStreamContent(boolean flag) {
boolean flag1 = false;
if(!mNearby) {
if(!flag) {
if(mContinuationToken != null) {
Integer integer = Integer.valueOf(EsService.getActivityStream(getActivity(), mAccount, mView, mCircleId, mGaiaId, null, mContinuationToken, false));
if(flag)
mNewerReqId = integer;
else
mOlderReqId = integer;
updateSpinner();
flag1 = true;
} else {
flag1 = false;
}
} else {
mContinuationToken = null;
Integer integer = Integer.valueOf(EsService.getActivityStream(getActivity(), mAccount, mView, mCircleId, mGaiaId, null, mContinuationToken, false));
if(flag)
mNewerReqId = integer;
else
mOlderReqId = integer;
updateSpinner();
flag1 = true;
}
} else {
Location location;
location = mLocation;
flag1 = false;
if(location != null) {
if(!flag) {
if(mContinuationToken != null) {
Integer integer = Integer.valueOf(EsService.getNearbyActivities(getActivity(), mAccount, mView, new DbLocation(0, mLocation), mContinuationToken));
if(flag)
mNewerReqId = integer;
else
mOlderReqId = integer;
updateSpinner();
flag1 = true;
} else {
flag1 = false;
}
} else {
mContinuationToken = null;
Integer integer = Integer.valueOf(EsService.getNearbyActivities(getActivity(), mAccount, mView, new DbLocation(0, mLocation), mContinuationToken));
if(flag)
mNewerReqId = integer;
else
mOlderReqId = integer;
updateSpinner();
flag1 = true;
}
}
}
return flag1;
}
public OzViews getViewForLogging()
{
return OzViews.HOME;
}
protected void initCirclesLoader()
{
getLoaderManager().initLoader(1, null, this);
}
protected boolean isAdapterEmpty()
{
return mAdapter.isEmpty();
}
protected boolean isEmpty()
{
boolean flag;
if(isAdapterEmpty() || mFirstLoad)
flag = true;
else
flag = false;
return flag;
}
protected boolean isLocalDataAvailable(Cursor cursor)
{
boolean flag;
if(cursor != null && cursor.getCount() > 0)
flag = true;
else
flag = false;
return flag;
}
public boolean isSquareStream()
{
return false;
}
protected boolean needsAsyncData()
{
return true;
}
public void onActivityResult(int i, int j, Intent intent) {
if(1 == i) {
if(j == -1 && intent != null)
{
List arraylist = intent.getParcelableArrayListExtra("mediarefs");
Intent intent1 = Intents.getPostActivityIntent(getActivity(), null, (ArrayList)arraylist);
if(intent.hasExtra("insert_photo_request_id"))
intent1.putExtra("insert_photo_request_id", intent.getIntExtra("insert_photo_request_id", 0));
intent1.removeExtra("account");
startActivityForCompose(intent1);
}
}
}
protected final void onAsyncData()
{
super.onAsyncData();
FragmentActivity fragmentactivity = getActivity();
if(mFragmentStartTime > 0L && (fragmentactivity instanceof ProfileActivity))
mFragmentStartTime = 0L;
}
public void onClick(View view) {
if(view == mLocationSettingsButton) {
startActivity(Intents.getLocationSettingActivityIntent());
return;
}
if(view == mServerErrorRetryButton)
{
mError = false;
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", "onClick - mError=false");
if(isAdapterEmpty())
{
refresh();
} else
{
prefetchContent();
updateServerErrorView();
}
} else
if(view instanceof StreamCardView)
{
StreamCardView streamcardview = (StreamCardView)view;
String s = streamcardview.getEventId();
String s1 = streamcardview.getEventOwnerId();
if(!TextUtils.isEmpty(s) && !TextUtils.isEmpty(s1))
{
startActivity(Intents.getHostedEventIntent(getActivity(), mAccount, s, s1, null));
} else
{
String s2 = streamcardview.getSquareId();
if(!TextUtils.isEmpty(s2) && !isSquareStream())
startActivity(Intents.getSquareStreamActivityIntent(getActivity(), mAccount, s2, null, null));
else
startStreamOneUp(streamcardview, false);
}
} else
{
int i = view.getId();
FragmentActivity fragmentactivity = getActivity();
if(i == R.id.compose_post)
startActivityForCompose(Intents.getPostTextActivityIntent(fragmentactivity, mAccount));
else
if(i == R.id.compose_photos)
{
recordUserAction(OzActions.COMPOSE_CHOOSE_PHOTO);
startActivityForResult(Intents.newPhotosActivityIntentBuilder(getActivity()).setAccount(mAccount).setAlbumType("camera_photos").setPhotoPickerMode(Integer.valueOf(2)).setPhotoPickerTitleResourceId(Integer.valueOf(R.string.photo_picker_album_label_share)).setTakePhoto(true).setTakeVideo(true).build(), 1);
} else
if(i == R.id.compose_location)
{
recordUserAction(OzActions.LOOP_CHECKIN);
startActivityForCompose(Intents.getCheckinActivityIntent(fragmentactivity, mAccount));
} else
if(i == R.id.compose_custom)
{
ResourceRedirector.getInstance();
if(Property.ENABLE_EMOTISHARE.getBoolean())
{
recordUserAction(OzActions.EMOTISHARE_INSERT_CLICKED);
startActivityForCompose(Intents.getEmotiShareActivityIntent(fragmentactivity, mAccount, null));
}
}
}
}
public final void onCommentsClicked(StreamCardView streamcardview)
{
startStreamOneUp(streamcardview, true);
}
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
if(bundle != null)
{
mScrollPos = bundle.getInt("scroll_pos");
mScrollOffset = bundle.getInt("scroll_off");
mLocation = (Location)bundle.getParcelable("location");
if(bundle.containsKey("loader_hash"))
mLoaderHash = Integer.valueOf(bundle.getInt("loader_hash"));
mStreamLength = bundle.getInt("stream_length");
mLastDeactivationTime = bundle.getLong("last_deactivation");
mError = bundle.getBoolean("error");
mResetAnimationState = bundle.getBoolean("reset_animation", false);
mResetPosition = mResetAnimationState;
mStreamChangeLastCheckTimeMs = bundle.getLong("stream_change");
mStreamHasChanged = bundle.getBoolean("stream_change_flag");
mRefreshDisabled = true;
mFragmentCreated = false;
if(bundle.containsKey("set_volume_id"))
{
mSetVolumeRequestId = Integer.valueOf(bundle.getInt("set_volume_id"));
mSetVolumeRequestVolume = bundle.getInt("set_volume_value");
mSetVolumeRequestCircleName = bundle.getString("set_volume_circle");
}
mOptionsMenuIsSubscribeVisible = bundle.getBoolean("subscribe_visible", false);
mOptionsMenuSubscribeText = bundle.getInt("subscribe_text");
mOptionsMenuSubscribeIcon = bundle.getInt("subscribe_icon");
} else
{
mScrollPos = 0;
mScrollOffset = 0;
mFragmentStartTime = System.currentTimeMillis();
mFragmentCreated = true;
}
prepareLoaderUri();
initCirclesLoader();
initRecentImagesLoader();
}
public Loader onCreateLoader(int i, Bundle bundle) {
Loader loader = null;
switch(i) {
case 1:
loader = new CircleListLoader(getActivity(), mAccount, 3, CIRCLES_PROJECTION);
break;
case 2:
case 3:
if(showEmptyStream())
mStreamLength = 0;
int j;
String s;
boolean flag;
String as[];
FragmentActivity fragmentactivity;
Uri uri;
String s1;
Uri uri1;
if(i == 2)
j = 1;
else
j = mStreamLength;
s = "sort_index ASC";
if(j != -1)
s = (new StringBuilder()).append(s).append(" LIMIT ").append(j).toString();
if(i != 2 && mGaiaId == null)
flag = true;
else
flag = false;
if(i == 2)
as = ContinuationTokenQuery.PROJECTION;
else
as = StreamAdapter.StreamQuery.PROJECTION_STREAM;
fragmentactivity = getActivity();
uri = mPostsUri;
if(flag)
s1 = "has_muted=0";
else
s1 = null;
if(i == 3)
uri1 = EsProvider.EVENTS_ALL_URI;
else
uri1 = null;
loader = new EsCursorLoader(fragmentactivity, uri, as, s1, null, s, uri1);
break;
case 4:
loader = new StreamChangeLoader(getActivity(), mAccount, mView, mCircleId, mGaiaId, null, false);
break;
case 5:
loader = new NearbyStreamChangeLoader(getActivity(), mAccount, new DbLocation(0, mLocation));
break;
case 6:
loader = new RecentImagesLoader(getActivity(), mAccount);
break;
default:
loader = null;
break;
}
return loader;
}
public View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle)
{
View view = layoutinflater.inflate(R.layout.stream, viewgroup, false);
View view1;
View view2;
int i;
boolean flag;
if(sNextPagePreloadTriggerRows == 0)
if(ScreenMetrics.getInstance(view.getContext()).screenDisplayType == 0)
sNextPagePreloadTriggerRows = 6;
else
sNextPagePreloadTriggerRows = 8;
mGridView = (ColumnGridView)view.findViewById(R.id.grid);
view1 = view.findViewById(R.id.floating_compose_bar);
view1.findViewById(R.id.compose_post).setOnClickListener(this);
view1.findViewById(R.id.compose_photos).setOnClickListener(this);
view1.findViewById(R.id.compose_location).setOnClickListener(this);
view2 = view1.findViewById(R.id.compose_custom);
view2.setOnClickListener(this);
ResourceRedirector.getInstance();
if(Property.ENABLE_EMOTISHARE.getBoolean())
i = 0;
else
i = 8;
view2.setVisibility(i);
if(getResources().getConfiguration().orientation == 2)
flag = true;
else
flag = false;
mComposeBarController = new ComposeBarController(view1, flag, this);
mInnerAdapter = createStreamAdapter(getActivity(), mGridView, mAccount, this, new PostClickListener(), this, this, this, mComposeBarController);
mAdapter = new StreamTranslationAdapter(mInnerAdapter);
mGridView.setAdapter(mAdapter);
mGridView.setSelector(R.drawable.list_selected_holo);
setupEmptyView(view, R.string.no_posts);
mLocationDisabledView = view.findViewById(R.id.location_off);
mLocationSettingsButton = (Button)view.findViewById(R.id.location_off_settings);
mLocationSettingsButton.setOnClickListener(this);
mServerErrorView = view.findViewById(R.id.transient_server_error);
mServerErrorRetryButton = view.findViewById(R.id.error_retry_button);
mServerErrorRetryButton.setOnClickListener(this);
if(showEmptyStream())
showEmptyView(view, getString(R.string.no_posts));
if(bundle == null)
mRecentImagesSyncTimestamp = 0L;
else
mRecentImagesSyncTimestamp = bundle.getLong("recent_images_sync_timestamp");
updateServerErrorView();
return view;
}
public final void onDestroyView()
{
super.onDestroyView();
if(mGridView != null)
{
mGridView.setOnScrollListener(null);
mGridView = null;
}
}
public final void onDismissRecentImages(boolean flag)
{
FragmentActivity fragmentactivity = getActivity();
if(fragmentactivity != null)
{
EsAccountsData.saveRecentImagesTimestamp(fragmentactivity, mRecentImagesSyncTimestamp);
initRecentImagesLoader();
if(flag)
EsAnalytics.recordActionEvent(fragmentactivity, mAccount, OzActions.STREAM_DISMISS_INSTANT_UPLOAD_PHOTOS, getViewForLogging());
}
}
public void onLoadFinished(Loader loader, Cursor cursor) {
// TODO
}
public void onLoadFinished(Loader loader, Object obj)
{
onLoadFinished(loader, (Cursor)obj);
}
public void onLoaderReset(Loader loader)
{
}
public final void onMediaClicked(String s, String s1, MediaRef mediaref, boolean flag, StreamCardView streamcardview)
{
FragmentActivity fragmentactivity = getActivity();
if(flag)
{
String s2 = mediaref.getLocalUri().toString();
Intents.viewContent(fragmentactivity, mAccount, s2);
} else
{
startStreamOneUp(streamcardview, false);
}
}
public boolean onOptionsItemSelected(MenuItem menuitem)
{
boolean flag;
if(menuitem.getItemId() == R.id.subscribe)
{
CircleSpinnerInfo circlespinnerinfo = (CircleSpinnerInfo)mPrimarySpinnerAdapter.getItem(mCurrentSpinnerPosition);
if(circlespinnerinfo.getRealCircleId().equals("v.all.circles"))
{
ArrayList arraylist = new ArrayList();
int i = mPrimarySpinnerAdapter.getCount();
for(int j = 0; j < i; j++)
{
CircleSpinnerInfo circlespinnerinfo1 = (CircleSpinnerInfo)mPrimarySpinnerAdapter.getItem(j);
String s = circlespinnerinfo1.getRealCircleId();
if(!"v.all.circles".equals(s) && !"15".equals(s) && !"1c".equals(s) && !"v.nearby".equals(s) && !"v.whatshot".equals(s))
arraylist.add(new CircleSubscriptionsDialog.CircleInfo(circlespinnerinfo1.getCircleId(), circlespinnerinfo1.getCircleName(), circlespinnerinfo1.getMemberCount(), circlespinnerinfo1.getVolume()));
}
getActivity();
CircleSubscriptionsDialog circlesubscriptionsdialog = CircleSubscriptionsDialog.newInstance$51fb5134(arraylist);
circlesubscriptionsdialog.setTargetFragment(this, 0);
circlesubscriptionsdialog.show(getFragmentManager(), "circle_subscriptions");
} else
{
int k;
CircleSubscribeDialog circlesubscribedialog;
Bundle bundle;
if(circlespinnerinfo.getVolume() == 4)
k = 1;
else
k = 2;
circlesubscribedialog = new CircleSubscribeDialog();
bundle = new Bundle();
bundle.putInt("do_subscribe", k);
bundle.putString("circle_id", circlespinnerinfo.getCircleId());
bundle.putString("circle_name", circlespinnerinfo.getCircleName());
circlesubscribedialog.setArguments(bundle);
circlesubscribedialog.setTargetFragment(this, 0);
circlesubscribedialog.show(getFragmentManager(), "circle_subscribe");
}
flag = true;
} else
{
flag = super.onOptionsItemSelected(menuitem);
}
return flag;
}
public void onPause()
{
super.onPause();
mInnerAdapter.onPause();
mGridView.onPause();
EsService.unregisterListener(mServiceListener);
removeLocationListener();
}
public final void onPlusOneAnimFinished() {
if(isPaused() || getActivity() == null || mAnimatingPlusOneInfo == null || mGridView == null) {
return;
}
boolean flag = false;
int j = mGridView.getChildCount();
for(int i = 0; i < j; i++) {
View view = mGridView.getChildAt(i);
if((view instanceof StreamCardView)) {
StreamCardView streamcardview = (StreamCardView)view;
if(TextUtils.equals(streamcardview.getActivityId(), mAnimatingPlusOneInfo.activityId)) {
streamcardview.overridePlusOnedButtonDisplay(true, mAnimatingPlusOneInfo.overrideCount);
flag = true;
}
}
}
if(!flag)
onShakeAnimFinished();
}
public final void onPlusOneClicked(String s, DbPlusOneData dbplusonedata, StreamCardView streamcardview)
{
if(mAnimatingPlusOneInfo == null)
if(android.os.Build.VERSION.SDK_INT < 12 || dbplusonedata != null && dbplusonedata.isPlusOnedByMe())
{
togglePlusOne(s, dbplusonedata);
streamcardview.overridePlusOnedButtonDisplay(false, 0);
} else
{
View view = getView();
int i;
PlusOneAnimatorView plusoneanimatorview;
Pair pair;
if(dbplusonedata == null)
i = 1;
else
i = 1 + dbplusonedata.getCount();
mAnimatingPlusOneInfo = new PlusOneInfo(s, dbplusonedata, i);
plusoneanimatorview = (PlusOneAnimatorView)view.findViewById(R.id.plus_one_animator);
pair = streamcardview.getPlusOneButtonAnimationCopies();
plusoneanimatorview.startPlusOneAnim(this, (ClickableButton)pair.first, (ClickableButton)pair.second);
streamcardview.startDelayedShakeAnimation();
view.findViewById(R.id.plus_one_glass).setVisibility(0);
getView().postDelayed(new Runnable() {
public final void run()
{
onShakeAnimFinished();
}
}, 915L);
}
}
protected void onPrepareActionBar(HostActionBar hostactionbar)
{
if(mPrimarySpinnerAdapter == null)
{
mPrimarySpinnerAdapter = new ArrayAdapter(getActivity(), R.layout.simple_spinner_item);
mPrimarySpinnerAdapter.setDropDownViewResource(0x1090009);
}
hostactionbar.showPrimarySpinner(mPrimarySpinnerAdapter, mCurrentSpinnerPosition);
hostactionbar.showRefreshButton();
hostactionbar.updateRefreshButtonIcon(mStreamHasChanged);
updateSpinner();
}
public void onPrepareOptionsMenu(Menu menu)
{
MenuItem menuitem = menu.findItem(R.id.subscribe);
menuitem.setVisible(mOptionsMenuIsSubscribeVisible);
if(mOptionsMenuIsSubscribeVisible)
{
menuitem.setTitle(mOptionsMenuSubscribeText);
menuitem.setIcon(mOptionsMenuSubscribeIcon);
}
}
public void onPrimarySpinnerSelectionChange(int i)
{
if(mCurrentSpinnerPosition != i)
{
CircleSpinnerInfo circlespinnerinfo = (CircleSpinnerInfo)mPrimarySpinnerAdapter.getItem(i);
boolean flag;
View view;
android.content.SharedPreferences.Editor editor;
if(mAccount != null)
{
OzViews ozviews;
OzViews ozviews1;
if(mCurrentSpinnerPosition >= 0)
ozviews = getViewForLogging(((CircleSpinnerInfo)mPrimarySpinnerAdapter.getItem(mCurrentSpinnerPosition)).getRealCircleId());
else
ozviews = OzViews.HOME;
ozviews1 = getViewForLogging(circlespinnerinfo.getRealCircleId());
clearNavigationAction();
recordNavigationAction(ozviews, ozviews1, null, null, null);
}
mCurrentSpinnerPosition = i;
mCircleId = circlespinnerinfo.getCircleId();
mView = circlespinnerinfo.getView();
if(mView == 2)
flag = true;
else
flag = false;
mNearby = flag;
updateEmptyViewProgressText();
mFirstLoad = true;
mContinuationToken = null;
view = getView();
if(mNearby)
{
addLocationListener(null);
view.findViewById(R.id.stream_location_layout).setVisibility(0);
updateLocationHeader(view);
if(mLocation == null)
showEmptyViewProgress(view, getString(R.string.finding_your_location));
} else
{
removeLocationListener();
mLocation = null;
view.findViewById(R.id.stream_location_layout).setVisibility(8);
}
prepareLoaderUri();
getArguments().putString("circle_id", mCircleId);
getArguments().putInt("view", mView);
getLoaderManager().restartLoader(2, null, this);
editor = getActivity().getSharedPreferences("streams", 0).edit();
editor.putString("circle", ((CircleSpinnerInfo)mPrimarySpinnerAdapter.getItem(mCurrentSpinnerPosition)).getRealCircleId());
if(android.os.Build.VERSION.SDK_INT >= 9)
editor.apply();
else
editor.commit();
mResetAnimationState = true;
updateOptionsMenuInfo(circlespinnerinfo);
if(mComposeBarController != null)
mComposeBarController.forceShow();
refresh();
}
}
public final void onReshareClicked(String s, boolean flag)
{
Intent intent = Intents.getReshareActivityIntent(getActivity(), mAccount, s, flag);
if(flag)
ConfirmIntentDialog.newInstance(getString(R.string.reshare_dialog_title), getString(R.string.reshare_dialog_message), getString(R.string.reshare_dialog_positive_button), intent).show(getFragmentManager(), "confirm_reshare");
else
startActivity(intent);
}
public void onResume()
{
boolean flag;
if(mNewerReqId != null)
flag = true;
else
flag = false;
super.onResume();
EsService.registerListener(mServiceListener);
if(mGridView != null)
{
int i = 0;
for(int j = mGridView.getChildCount(); i < j; i++)
if(mGridView.getChildAt(i) instanceof CardView)
CardView.onStart();
mGridView.onResume();
}
if(mNearby)
addLocationListener(null);
if(flag && mNewerReqId == null)
updateRefreshButton(false);
updateSpinner();
if(EsLog.isLoggable("HostedStreamFrag", 3))
Log.d("HostedStreamFrag", (new StringBuilder("onResume mFragmentCreated: ")).append(mFragmentCreated).append(", mNewerReqId: ").append(mNewerReqId).append(", gaia id: ").append(mGaiaId).append(", time diff (ms): ").append(System.currentTimeMillis() - mStreamChangeLastCheckTimeMs).toString());
if(!mFragmentCreated && mNewerReqId == null && mGaiaId == null && System.currentTimeMillis() - mStreamChangeLastCheckTimeMs > 30000L)
if(mNearby)
{
if(mLocation != null)
getLoaderManager().restartLoader(5, null, this);
} else
{
getLoaderManager().restartLoader(4, null, this);
}
if(mSetVolumeRequestId != null && !EsService.isRequestPending(mSetVolumeRequestId.intValue()))
{
handleOnSetVolumeControlCallback(EsService.removeResult(mSetVolumeRequestId.intValue()));
mSetVolumeRequestId = null;
}
mFragmentCreated = false;
}
protected final void onResumeContentFetched(View view)
{
updateSpinner();
}
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
if(!getActivity().isFinishing() && mGridView != null)
{
saveScrollPosition();
bundle.putInt("scroll_pos", mScrollPos);
bundle.putInt("scroll_off", mScrollOffset);
}
if(mLocation != null)
bundle.putParcelable("location", mLocation);
if(mLoaderHash != null)
bundle.putInt("loader_hash", mLoaderHash.intValue());
bundle.putInt("stream_length", mStreamLength);
bundle.putLong("last_deactivation", mLastDeactivationTime);
bundle.putBoolean("error", mError);
bundle.putBoolean("reset_animation", mResetAnimationState);
bundle.putLong("stream_change", mStreamChangeLastCheckTimeMs);
bundle.putBoolean("stream_change_flag", mStreamHasChanged);
bundle.putLong("recent_images_sync_timestamp", mRecentImagesSyncTimestamp);
bundle.putBoolean("subscribe_visible", mOptionsMenuIsSubscribeVisible);
bundle.putInt("subscribe_text", mOptionsMenuSubscribeText);
bundle.putInt("subscribe_icon", mOptionsMenuSubscribeIcon);
if(mSetVolumeRequestId != null)
{
bundle.putInt("set_volume_id", mSetVolumeRequestId.intValue());
bundle.putInt("set_volume_value", mSetVolumeRequestVolume);
bundle.putString("set_volume_circle", mSetVolumeRequestCircleName);
}
}
protected void onSetArguments(Bundle bundle)
{
super.onSetArguments(bundle);
mGaiaId = bundle.getString("gaia_id");
int i;
boolean flag;
if(mGaiaId == null)
mStreamOwnerUserId = mAccount.getGaiaId();
else
mStreamOwnerUserId = mGaiaId;
mCircleId = bundle.getString("circle_id");
if(bundle.containsKey("view"))
mView = bundle.getInt("view");
else
mView = 0;
i = mView;
flag = false;
if(i == 2)
flag = true;
mNearby = flag;
updateEmptyViewProgressText();
}
public final void onShareRecentImages(ArrayList arraylist)
{
FragmentActivity fragmentactivity = getActivity();
if(fragmentactivity != null)
{
startActivityForCompose(Intents.getPostActivityIntent(fragmentactivity, EsAccountsData.getActiveAccount(fragmentactivity), arraylist));
EsAnalytics.recordActionEvent(fragmentactivity, mAccount, OzActions.STREAM_SHARE_INSTANT_UPLOAD_PHOTOS, getViewForLogging());
}
}
public final void onStop()
{
super.onStop();
int i = 0;
for(int j = mGridView.getChildCount(); i < j; i++)
if(mGridView.getChildAt(i) instanceof CardView)
CardView.onStop();
mGridView.invalidateViews();
}
public final void onViewUsed(int i)
{
if(!mPreloadRequested && !mEndOfStream && !mError && mGridView != null && i >= mInnerAdapter.getCount() - sNextPagePreloadTriggerRows)
prefetchContent();
}
protected void prepareLoaderUri()
{
if(mNearby && mLocation == null)
{
mPostsUri = EsProvider.buildStreamUri(mAccount, "no_location_stream_key");
} else
{
Location location = mLocation;
DbLocation dblocation = null;
if(location != null)
dblocation = new DbLocation(0, mLocation);
mPostsUri = EsProvider.buildStreamUri(mAccount, EsPostsData.buildActivitiesStreamKey(mGaiaId, mCircleId, dblocation, false, mView));
}
}
public void refresh()
{
if(mRefreshDisabled)
{
mRefreshDisabled = false;
} else
{
super.refresh();
if(mNearby)
{
Location location = mLocation;
mLocation = null;
addLocationListener(location);
updateSpinner();
} else
{
fetchContent(true);
}
}
}
protected final void restoreScrollPosition()
{
if(mGridView != null && (mScrollOffset != 0 || mScrollPos != 0))
{
mGridView.setSelectionFromTop(mScrollPos, mScrollOffset);
mScrollPos = 0;
mScrollOffset = 0;
}
}
protected final void saveScrollPosition()
{
if(mGridView != null)
{
mScrollPos = mGridView.getFirstVisiblePosition();
if(mAdapter != null)
{
View view = mGridView.getChildAt(0);
if(view != null)
mScrollOffset = view.getTop();
else
mScrollOffset = 0;
} else
{
mScrollOffset = 0;
}
}
}
protected final void showContent(View view)
{
super.showContent(view);
if(mNearby)
{
view.findViewById(R.id.stream_location_layout).setVisibility(0);
updateLocationHeader(view);
}
mGridView.setVisibility(0);
mLocationDisabledView.setVisibility(8);
}
protected boolean showEmptyStream()
{
return getArguments().getBoolean("show_empty_stream", false);
}
protected final void showEmptyView(View view, String s)
{
super.showEmptyView(view, s);
if(mNearby)
{
view.findViewById(R.id.stream_location_layout).setVisibility(0);
updateLocationHeader(view);
}
mLocationDisabledView.setVisibility(8);
}
protected final void showEmptyViewProgress(View view)
{
super.showEmptyViewProgress(view);
mLocationDisabledView.setVisibility(8);
}
protected final void showEmptyViewProgress(View view, String s)
{
super.showEmptyViewProgress(view, s);
mLocationDisabledView.setVisibility(8);
}
protected void showProgressDialog(int i)
{
ProgressFragmentDialog.newInstance(null, getString(i), false).show(getFragmentManager(), "req_pending");
}
protected void startActivityForCompose(Intent intent)
{
startActivity(intent);
}
protected void startStreamOneUp(Intent intent)
{
startActivity(intent);
}
protected final void updateServerErrorView()
{
View view = mServerErrorView;
int i;
if(mError)
i = 0;
else
i = 8;
view.setVisibility(i);
}
private static final class CircleSpinnerInfo {
private final String mCircleId;
private final String mCircleName;
private int mMemberCount;
private final String mRealCircleId;
private final int mView;
private int mVolume;
public CircleSpinnerInfo(Context context, String s, String s1, int i,
int j) {
mRealCircleId = s1;
mMemberCount = i;
mVolume = j;
if (s1.equals("v.all.circles")) {
mView = 0;
mCircleName = context.getString(R.string.stream_circles);
mCircleId = null;
} else if (s1.equals("v.whatshot")) {
mView = 1;
mCircleName = context.getString(R.string.stream_whats_hot);
mCircleId = null;
} else if (s1.equals("v.nearby")) {
mView = 2;
mCircleName = context.getString(R.string.stream_nearby);
mCircleId = null;
} else {
mView = 3;
mCircleName = s;
mCircleId = s1;
}
}
public final String getCircleId() {
return mCircleId;
}
public final String getCircleName() {
return mCircleName;
}
public final int getMemberCount() {
return mMemberCount;
}
public final String getRealCircleId() {
return mRealCircleId;
}
public final int getView() {
return mView;
}
public final int getVolume() {
return mVolume;
}
public final int setVolume(int i) {
mVolume = i;
return i;
}
public final String toString() {
return mCircleName;
}
}
private static interface ContinuationTokenQuery {
public static final String PROJECTION[] = { "token" };
}
private static final class PlusOneInfo {
public String activityId;
public int overrideCount;
public DbPlusOneData plusOneData;
public PlusOneInfo(String s, DbPlusOneData dbplusonedata, int i) {
activityId = s;
plusOneData = dbplusonedata;
overrideCount = i;
}
}
protected final class PostClickListener implements ItemClickListener {
public final void onSpanClick(URLSpan urlspan) {
}
public final void onUserImageClick(String s, String s1) {
if(getArguments().getBoolean("view_as_plus_page", false)) {
return;
}
String s2 = mGaiaId;
boolean flag = false;
if(s2 == null)
flag = true;
if(!TextUtils.equals(mStreamOwnerUserId, s) || flag) {
Bundle bundle = EsAnalyticsData.createExtras("extra_gaia_id", mStreamOwnerUserId);
OzActions ozactions = OzActions.STREAM_SELECT_AUTHOR;
EsAnalytics.recordActionEvent(getActivity(), mAccount, ozactions, getViewForLogging(), bundle);
startActivity(Intents.getProfileActivityByGaiaIdIntent(getActivity(), mAccount, s, null));
}
}
}
protected final class ServiceListener extends EsServiceListener
{
public final void onCreatePostPlusOne(ServiceResult serviceresult)
{
if(serviceresult != null && serviceresult.hasError())
Toast.makeText(getActivity(), R.string.plusone_error, 0).show();
}
public final void onDeletePostPlusOne(ServiceResult serviceresult)
{
if(serviceresult != null && serviceresult.hasError())
Toast.makeText(getActivity(), R.string.delete_plusone_error, 0).show();
}
public final void onGetActivities(int i, boolean flag, int j, ServiceResult serviceresult)
{
HostedStreamFragment hostedstreamfragment = HostedStreamFragment.this;
boolean flag1;
if(serviceresult != null && serviceresult.hasError())
flag1 = true;
else
flag1 = false;
hostedstreamfragment.mError = flag1;
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", (new StringBuilder("onGetActivities - mError=")).append(mError).toString());
if(!flag) {
if(mOlderReqId == null || !mOlderReqId.equals(Integer.valueOf(i))) {
return;
}
mOlderReqId = null;
if(mError)
{
mPreloadRequested = false;
if(EsLog.isLoggable("HostedStreamFrag", 4))
Log.i("HostedStreamFrag", "onGetActivities - mPreloadRequested=false");
}
} else {
if(!(mNewerReqId != null && mNewerReqId.equals(Integer.valueOf(i)))) {
return;
}
mNewerReqId = null;
if(!mError)
{
mStreamChangeLastCheckTimeMs = System.currentTimeMillis();
updateRefreshButton(false);
}
}
if(mStreamLength != -1 || mError)
{
if(!mError)
mStreamLength = j;
getLoaderManager().restartLoader(2, null, HostedStreamFragment.this);
}
updateSpinner();
updateServerErrorView();
}
public final void onSetVolumeControlsRequestComplete(int i, ServiceResult serviceresult)
{
if(mSetVolumeRequestId != null && mSetVolumeRequestId.intValue() == i)
handleOnSetVolumeControlCallback(serviceresult);
}
}
private final class StreamLocationListener implements LocationListener {
public final void onLocationChanged(Location location)
{
if(mLocation == null)
{
mLocation = location;
prepareLoaderUri();
mFirstLoad = true;
getLoaderManager().restartLoader(2, null, HostedStreamFragment.this);
updateLocationHeader(getView());
fetchContent(true);
}
}
public final void onProviderDisabled(String s)
{
}
public final void onProviderEnabled(String s)
{
}
public final void onStatusChanged(String s, int i, Bundle bundle)
{
}
}
}