/* * Copyright (C) 2013 Chris Lacy Licensed under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law * or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package com.tweetlanes.android.core.view; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ViewSwitcher; import com.tweetlanes.android.core.R; import com.tweetlanes.android.core.util.LazyImageLoader; import com.tweetlanes.android.core.widget.pulltorefresh.PullToRefreshBase.OnRefreshListener; import com.tweetlanes.android.core.widget.pulltorefresh.PullToRefreshListView; import org.tweetalib.android.TwitterFetchResult; import org.tweetalib.android.TwitterFetchStatus.FinishedCallback; import org.tweetalib.android.TwitterManager; import org.tweetalib.android.model.TwitterStatus; public final class TweetSpotlightFragment extends BaseLaneFragment { public static TweetSpotlightFragment newInstance(int laneIndex, final TwitterStatus status) { TweetSpotlightFragment fragment = new TweetSpotlightFragment(); fragment.configureBaseLaneFragment(laneIndex, "TweetSpotlight", new ConfigureBundleListener() { @Override public void addValues(Bundle args) { args.putLong(KEY_STATUS_ID, status.mId); } }); fragment.mStatus = status; return fragment; } private PullToRefreshListView mTweetFeedListView; private TweetFeedListAdapter mTweetFeedListAdapter; private FinishedCallback mGetStatusCallback; private ViewSwitcher mViewSwitcher; private TwitterStatus mStatus; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); // // // /* * mContentHandle = * TwitterManager.get().getContentHandle(getContentHandleBase(), * getScreenName(), null); */ mGetStatusCallback = TwitterManager.get().getFetchStatusInstance().new FinishedCallback() { @Override public void finished(TwitterFetchResult result, TwitterStatus status) { if (mTweetFeedListAdapter != null) { onStatusRefresh(status); updateViewVisibility(); } else { String errorMessage = ""; if (result != null) { errorMessage = result.getErrorMessage(); if (errorMessage == null) { errorMessage = ""; } } if (errorMessage.contains("does not exist")) { TweetSpotlightActivity spotlightActivity = (TweetSpotlightActivity) getActivity(); if (spotlightActivity != null) { spotlightActivity.TweetDeleted(errorMessage); } } } mGetStatusCallback = null; } }; TweetSpotlightActivity spotlightActivity = (TweetSpotlightActivity) getActivity(); if (spotlightActivity != null) { mStatus = spotlightActivity.mStatus; } if (mStatus == null) { mStatus = TwitterManager.get().getStatus(getStatusId(), mGetStatusCallback); } setInitialDownloadState(InitialDownloadState.DOWNLOADED); // // // View resultView = inflater.inflate(R.layout.lane, null); configureLaneWidth(resultView); mViewSwitcher = (ViewSwitcher) resultView .findViewById(R.id.profileSwitcher); mTweetFeedListView = (PullToRefreshListView) resultView .findViewById(R.id.pull_to_refresh_listview); mTweetFeedListView.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { mGetStatusCallback = TwitterManager.get() .getFetchStatusInstance().new FinishedCallback() { @Override public void finished(TwitterFetchResult result, TwitterStatus status) { // TODO: Handle error properly if (result.isSuccessful()) { if (mStatus.mIsRetweet && mStatus.mOriginalRetweetId > 0) { mGetStatusCallback = TwitterManager.get() .getFetchStatusInstance().new FinishedCallback() { @Override public void finished(TwitterFetchResult result, TwitterStatus status) { // TODO: Handle error properly if (result.isSuccessful()) { mStatus.mIsRetweetedByMe = status.mIsRetweetedByMe; onStatusRefresh(mStatus); } else if (result.getErrorMessage().contains("does not exist")) { TweetSpotlightActivity spotlightActivity = (TweetSpotlightActivity) getActivity(); if (spotlightActivity != null) { spotlightActivity.TweetDeleted(result.getErrorMessage()); } } mGetStatusCallback = null; } }; mStatus = status; if (mStatus != null) { TwitterManager.get().getStatus(mStatus.mOriginalRetweetId, mGetStatusCallback); } } else { onStatusRefresh(status); } } else if (result.getErrorMessage().contains("does not exist")) { TweetSpotlightActivity spotlightActivity = (TweetSpotlightActivity) getActivity(); if (spotlightActivity != null) { spotlightActivity.TweetDeleted(result.getErrorMessage()); } } mGetStatusCallback = null; } }; TwitterManager.get().getStatus(mStatus.mId, mGetStatusCallback); } }); mTweetFeedListAdapter = new TweetFeedListAdapter(inflater); mTweetFeedListView.getRefreshableView().setAdapter( mTweetFeedListAdapter); updateViewVisibility(); return resultView; } public void onDestroyView() { mTweetFeedListAdapter = null; super.onDestroyView(); } /* * */ private void updateViewVisibility() { mViewSwitcher.reset(); if (mStatus == null) { mViewSwitcher.setDisplayedChild(0); } else { mViewSwitcher.setDisplayedChild(1); mTweetFeedListAdapter.notifyDataSetChanged(); } } private static final String KEY_STATUS_ID = "statusId"; private long getStatusId() { return getArguments().getLong(KEY_STATUS_ID); } /* * */ private void onStatusRefresh(TwitterStatus status) { if (mTweetFeedListAdapter != null) { mStatus = status; mTweetFeedListAdapter.notifyDataSetChanged(); mTweetFeedListView.onRefreshComplete(); TweetSpotlightActivity spotlightActivity = (TweetSpotlightActivity) getActivity(); if (spotlightActivity != null) { spotlightActivity.onGetStatus(mStatus); } } } /* * */ private class TweetFeedListAdapter extends BaseAdapter { public TweetFeedListAdapter(LayoutInflater inflater) { mInflater = inflater; } /** * The number of items in the list is determined by the number of * speeches in our array. * * @see android.widget.ListAdapter#getCount() */ public int getCount() { return 1; } /** * Since the data comes from an array, just returning the index is * sufficent to get at the data. If we were using a more complex data * structure, we would return whatever object represents one row in the * list. * * @see android.widget.ListAdapter#getItem(int) */ public Object getItem(int position) { return position; } /** * Use the array index as a unique id. * * @see android.widget.ListAdapter#getItemId(int) */ public long getItemId(int position) { return position; } /** * Make a TweetFeedItemView to hold each row. */ public View getView(int position, View convertView, ViewGroup parent) { View resultView = null; if (position == 0) { resultView = getTweetFeedView(position); } else if (position == 1) { } return resultView; } /* * */ View getTweetFeedView(int position) { View convertView = mInflater.inflate(R.layout.tweet_feed_item_spotlight, null); TwitterStatus item = mStatus; TweetFeedItemView tweetFeedItemView = (TweetFeedItemView) convertView .findViewById(R.id.tweetFeedItem); TweetFeedItemView.Callbacks callbacks = new TweetFeedItemView.Callbacks() { @Override public boolean onSingleTapConfirmed(View view, int position) { return false; } @Override public void onLongPress(View view, int position) { } @Override public void onUrlClicked(TwitterStatus status) { } @Override public Activity getActivity() { return TweetSpotlightFragment.this.getActivity(); } @Override public LayoutInflater getLayoutInflater() { return mInflater; } @Override public void onConversationViewToggle(long statusId, boolean show) { } @Override public LazyImageLoader getProfileImageLoader() { return getApp().getProfileImageLoader(); } @Override public LazyImageLoader getPreviewImageLoader() { return getApp().getPreviewImageLoader(); } }; tweetFeedItemView.configure(item, position + 1, callbacks, false, true, false, false, false, getApp().getCurrentAccount().getSocialNetType(), getApp().getCurrentAccountKey()); return tweetFeedItemView; } /** * Remember our context so we can use it when constructing views. */ // private Context mContext; private final LayoutInflater mInflater; } /* * (non-Javadoc) * * @see * com.tweetlanes.android.core.view.BaseLaneFragment#triggerInitialDownload() */ @Override public void triggerInitialDownload() { } /* * (non-Javadoc) * * @see com.tweetlanes.android.core.view.BaseLaneFragment#UpdateTweetCache() */ @Override public void UpdateTweetCache(TwitterStatus status, boolean deleteStatus) { } /* * (non-Javadoc) * * @see com.tweetlanes.android.core.view.BaseLaneFragment#onJumpToTop() */ @Override public void onJumpToTop() { } /* * (non-Javadoc) * * @see com.tweetlanes.android.core.view.BaseLaneFragment#clearLocalCache() */ @Override public void clearLocalCache() { mStatus = null; } /* * (non-Javadoc) * * @see com.tweetlanes.android.core.view.BaseLaneFragment#getContentToCache() */ @Override public String getDataToCache() { return null; } }