/**
* Copyright 2010 Mark Wyszomierski
*/
package com.joelapenna.foursquared;
import com.joelapenna.foursquare.Foursquare;
import com.joelapenna.foursquare.error.FoursquareException;
import com.joelapenna.foursquare.types.User;
import com.joelapenna.foursquared.location.LocationUtils;
import com.joelapenna.foursquared.preferences.Preferences;
import com.joelapenna.foursquared.util.ImageUtils;
import com.joelapenna.foursquared.util.MenuUtils;
import com.joelapenna.foursquared.util.NotificationsUtil;
import com.joelapenna.foursquared.util.RemoteResourceManager;
import com.joelapenna.foursquared.util.StringFormatters;
import com.joelapenna.foursquared.util.TabsUtil;
import com.joelapenna.foursquared.util.UserUtils;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TabActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
/**
* Displays information on a user. If the user is the logged-in user, we can
* show our checkin history. If viewing a stranger, we can show info and
* friends. Should look like this: Self History | Friends Stranger Info |
* Friends
*
* @date March 8, 2010.
* @author Mark Wyszomierski (markww@gmail.com)
*/
public class UserDetailsActivity extends TabActivity {
private static final String TAG = "UserDetailsActivity";
private static final boolean DEBUG = FoursquaredSettings.DEBUG;
private static final int ACTIVITY_REQUEST_CODE_GALLERY = 814;
public static final String EXTRA_USER_PARCEL = "com.joelapenna.foursquared.UserParcel";
public static final String EXTRA_USER_ID = "com.joelapenna.foursquared.UserId";
public static final String EXTRA_SHOW_ADD_FRIEND_OPTIONS = Foursquared.PACKAGE_NAME
+ ".UserDetailsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS";
private static final int MENU_FRIEND_REQUESTS = 0;
private static final int MENU_SHOUT = 1;
private static final int DIALOG_SET_USER_PHOTO_YES_NO = 8;
private ImageView mImageViewPhoto;
private TextView mTextViewName;
private LinearLayout mLayoutNumMayorships;
private LinearLayout mLayoutNumBadges;
private TextView mTextViewNumMayorships;
private TextView mTextViewNumBadges;
private TabHost mTabHost;
private LinearLayout mLayoutProgressBar;
private StateHolder mStateHolder;
private boolean mIsUsersPhotoSet;
private RemoteResourceManager mRrm;
private RemoteResourceManagerObserver mResourcesObserver;
private ProgressDialog mDlgProgress;
private BroadcastReceiver mLoggedOutReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) Log.d(TAG, "onReceive: " + intent);
finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_details_activity);
registerReceiver(mLoggedOutReceiver, new IntentFilter(Foursquared.INTENT_ACTION_LOGGED_OUT));
mIsUsersPhotoSet = false;
Object retained = getLastNonConfigurationInstance();
if (retained != null && retained instanceof StateHolder) {
mStateHolder = (StateHolder) retained;
mStateHolder.setActivityForTasks(this);
} else {
mStateHolder = new StateHolder();
mStateHolder.setShowAddFriendOptions(getIntent().getBooleanExtra(
EXTRA_SHOW_ADD_FRIEND_OPTIONS, false));
String userId = null;
if (getIntent().getExtras() != null) {
if (getIntent().getExtras().containsKey(EXTRA_USER_PARCEL)) {
User user = getIntent().getExtras().getParcelable(EXTRA_USER_PARCEL);
userId = user.getId();
mStateHolder.setUser(user);
} else if (getIntent().getExtras().containsKey(EXTRA_USER_ID)) {
userId = getIntent().getExtras().getString(EXTRA_USER_ID);
} else {
Log.e(TAG, "UserDetailsActivity requires a userid in its intent extras.");
finish();
return;
}
} else if (getIntent().getData() != null) {
if (!((Foursquared) getApplication()).isReady()) {
Log.i(TAG, "application is not ready; redirecting to login");
setVisible(false);
Intent redirectToLogin = LoginActivity.loginAndProceedTo(this, getIntent());
startActivity(redirectToLogin);
finish();
} else {
Log.i(TAG, "application is ready; proceeding");
}
Cursor cursor = managedQuery(getIntent().getData(), null, null, null, null);
if (cursor.moveToNext()) {
userId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DATA1));
}
} else {
Log.e(TAG, "UserDetailsActivity requires a userid in its intent extras, or a cursor to a contacts profile in its intents data");
finish();
return;
}
mStateHolder.startTaskUserDetails(this, userId);
}
mRrm = ((Foursquared) getApplication()).getRemoteResourceManager();
mResourcesObserver = new RemoteResourceManagerObserver();
mRrm.addObserver(mResourcesObserver);
ensureUi();
populateUi();
if (mStateHolder.getIsRunningUserDetailsTask() == false) {
populateUiAfterFullUserObjectFetched();
}
}
@Override
public void onResume() {
super.onResume();
if (mStateHolder.getIsRunningSetUserPhotoTask()) {
startProgressBar(
getResources().getString(R.string.user_details_activity_set_photo_progress_title),
getResources().getString(R.string.user_details_activity_set_photo_progress_message));
} else {
stopProgressBar();
}
}
@Override
public void onPause() {
super.onPause();
if (mStateHolder.getIsRunningSetUserPhotoTask()) {
stopProgressBar();
}
if (isFinishing()) {
mStateHolder.cancelTasks();
unregisterReceiver(mLoggedOutReceiver);
RemoteResourceManager rrm = ((Foursquared) getApplication()).getRemoteResourceManager();
rrm.deleteObserver(mResourcesObserver);
}
}
private void ensureUi() {
mImageViewPhoto = (ImageView) findViewById(R.id.userDetailsActivityPhoto);
mImageViewPhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mStateHolder.getUser() != null) {
// If we're viewing our own page, clicking the thumbnail should let the
// user choose a new photo from the camera gallery.
if (mStateHolder.getUser().getId().equals(((Foursquared) getApplication()).getUserId())) {
startGalleryIntent();
}
else {
// If "_thumbs" exists, remove it to get the url of the
// full-size image.
String photoUrl = mStateHolder.getUser().getPhoto().replace("_thumbs", "");
Intent intent = new Intent();
intent.setClass(UserDetailsActivity.this, FetchImageForViewIntent.class);
intent.putExtra(FetchImageForViewIntent.IMAGE_URL, photoUrl);
intent.putExtra(FetchImageForViewIntent.PROGRESS_BAR_TITLE, getResources()
.getString(R.string.user_activity_fetch_full_image_title));
intent.putExtra(FetchImageForViewIntent.PROGRESS_BAR_MESSAGE, getResources()
.getString(R.string.user_activity_fetch_full_image_message));
startActivity(intent);
}
}
}
});
mTextViewName = (TextView) findViewById(R.id.userDetailsActivityName);
mTextViewNumMayorships = (TextView) findViewById(R.id.userDetailsActivityNumMayorships);
mTextViewNumBadges = (TextView) findViewById(R.id.userDetailsActivityNumBadges);
// When the user clicks the mayorships section, then launch the mayorships activity.
mLayoutNumMayorships = (LinearLayout) findViewById(R.id.userDetailsActivityNumMayorshipsLayout);
mLayoutNumMayorships.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startMayorshipsActivity();
}
});
mLayoutNumMayorships.setEnabled(false);
// When the user clicks the badges section, then launch the badges
// activity.
mLayoutNumBadges = (LinearLayout) findViewById(R.id.userDetailsActivityNumBadgesLayout);
mLayoutNumBadges.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startBadgesActivity();
}
});
mLayoutNumBadges.setEnabled(false);
// At startup, we need to have at least one tab. Once we load the full
// user object, we can clear all tabs, and add our real tabs once we know
// what they are.
mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("dummy").setIndicator("").setContent(
R.id.userDetailsActivityTextViewTabDummy));
mTabHost.getTabWidget().setVisibility(View.GONE);
mLayoutProgressBar = (LinearLayout) findViewById(R.id.userDetailsActivityLayoutProgressBar);
}
private void populateUi() {
User user = mStateHolder.getUser();
// User photo.
if (user != null && mIsUsersPhotoSet == false) {
if (Foursquare.MALE.equals(user.getGender())) {
mImageViewPhoto.setImageResource(R.drawable.blank_boy);
} else {
mImageViewPhoto.setImageResource(R.drawable.blank_girl);
}
if (user != null) {
Uri uriPhoto = Uri.parse(user.getPhoto());
if (mRrm.exists(uriPhoto)) {
try {
Bitmap bitmap = BitmapFactory.decodeStream(mRrm.getInputStream(Uri.parse(user
.getPhoto())));
mImageViewPhoto.setImageBitmap(bitmap);
mIsUsersPhotoSet = true;
} catch (IOException e) {
}
} else {
mRrm.request(uriPhoto);
}
}
}
// User name.
if (user != null) {
if (UserUtils.isFriend(user)
|| user.getId().equals(((Foursquared) getApplication()).getUserId())) {
mTextViewName.setText(StringFormatters.getUserFullName(user));
} else {
mTextViewName.setText(StringFormatters.getUserAbbreviatedName(user));
}
} else {
mTextViewName.setText("");
}
// Number of mayorships.
if (user != null) {
if (mStateHolder.getFetchedUserDetails()) {
mTextViewNumMayorships.setText(String.valueOf(user.getMayorCount()));
} else {
mTextViewNumMayorships.setText("-");
}
} else {
mTextViewNumMayorships.setText("-");
}
// Number of badges.
if (user != null) {
if (mStateHolder.getFetchedUserDetails()) {
mTextViewNumBadges.setText(String.valueOf(user.getBadges().size()));
} else {
mTextViewNumBadges.setText("-");
}
} else {
mTextViewNumBadges.setText("-");
}
}
private void populateUiAfterFullUserObjectFetched() {
populateUi();
// User object may still be unavailable.
User user = mStateHolder.getUser();
if (user == null) {
return;
}
mLayoutProgressBar.setVisibility(View.GONE);
mTabHost.clearAllTabs();
mTabHost.getTabWidget().setVisibility(View.VISIBLE);
// Add tab1.
TabHost.TabSpec specTab1 = mTabHost.newTabSpec("tab1");
if (mStateHolder.getUser().getId().equals(((Foursquared) getApplication()).getUserId())) {
// Ourselves, History tab.
View tabView = prepareTabView(getResources().getString(
R.string.user_details_activity_tab_title_history));
TabsUtil.setTabIndicator(specTab1, getResources().getString(
R.string.user_details_activity_tab_title_history), null, tabView);
Intent intent = new Intent(this, UserHistoryActivity.class);
specTab1.setContent(intent);
} else {
// Friend or stranger, Info tab.
View tabView = prepareTabView(getResources().getString(
R.string.user_details_activity_tab_title_info));
TabsUtil.setTabIndicator(specTab1, getResources().getString(
R.string.user_details_activity_tab_title_info), null, tabView);
Intent intent = new Intent(this, UserActionsActivity.class);
intent.putExtra(UserActionsActivity.EXTRA_USER_PARCEL, mStateHolder.getUser());
intent.putExtra(UserActionsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS, mStateHolder
.getShowAddFriendOptions());
specTab1.setContent(intent);
}
mTabHost.addTab(specTab1);
// Add tab2, always Friends tab.
TabHost.TabSpec specTab2 = mTabHost.newTabSpec("tab2");
View tabView = prepareTabView(getResources().getString(
R.string.user_details_activity_tab_title_friends));
TabsUtil.setTabIndicator(specTab2, getResources().getString(
R.string.user_details_activity_tab_title_friends), null, tabView);
Intent intent = new Intent(this, UserFriendsActivity.class);
intent.putExtra(UserFriendsActivity.EXTRA_USER_ID, mStateHolder.getUser().getId());
intent.putExtra(UserFriendsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS, mStateHolder
.getShowAddFriendOptions());
specTab2.setContent(intent);
mTabHost.addTab(specTab2);
// User can also now click on the badges.
mLayoutNumBadges.setEnabled(true);
// If user is a friend of ours, we may be able to see their mayorships.
if (user.getMayorships() != null && user.getMayorships().size() > 0) {
mLayoutNumMayorships.setEnabled(true);
} else {
mLayoutNumMayorships.setEnabled(false);
}
}
private View prepareTabView(String text) {
View view = LayoutInflater.from(this).inflate(R.layout.user_details_activity_tabs, null);
TextView tv = (TextView) view.findViewById(R.id.userDetailsActivityTabTextView);
tv.setText(text);
return view;
}
@Override
public Object onRetainNonConfigurationInstance() {
mStateHolder.setActivityForTasks(null);
return mStateHolder;
}
private void startBadgesActivity() {
if (mStateHolder.getUser() != null) {
Intent intent = new Intent(UserDetailsActivity.this, BadgesActivity.class);
intent.putParcelableArrayListExtra(BadgesActivity.EXTRA_BADGE_ARRAY_LIST_PARCEL,
mStateHolder.getUser().getBadges());
startActivity(intent);
}
}
private void startMayorshipsActivity() {
if (mStateHolder.getUser() != null) {
Intent intent = new Intent(UserDetailsActivity.this, UserMayorshipsActivity.class);
intent.putExtra(UserMayorshipsActivity.EXTRA_USER_ID, mStateHolder.getUser().getId());
startActivity(intent);
}
}
private void onUserDetailsTaskComplete(User user, Exception ex) {
setProgressBarIndeterminateVisibility(false);
mStateHolder.setFetchedUserDetails(true);
mStateHolder.setIsRunningUserDetailsTask(false);
if (user != null) {
mStateHolder.setUser(user);
populateUiAfterFullUserObjectFetched();
} else {
NotificationsUtil.ToastReasonForFailure(this, ex);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// We have a different set of menu options for the logged-in user vs
// viewing a friend and potentially a stranger even.
User user = mStateHolder.getUser();
if (user != null && user.getId().equals(((Foursquared) getApplication()).getUserId())) {
menu.add(Menu.NONE, MENU_FRIEND_REQUESTS, Menu.NONE,
R.string.preferences_friend_requests_title).setIcon(R.drawable.ic_menu_friends);
menu.add(Menu.NONE, MENU_SHOUT, Menu.NONE,
R.string.shout_action_label).setIcon(R.drawable.ic_menu_shout);
MenuUtils.addPreferencesToMenu(this, menu);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_FRIEND_REQUESTS:
startActivity(new Intent(this, FriendRequestsActivity.class));
return true;
case MENU_SHOUT:
Intent intent = new Intent(this, CheckinOrShoutGatherInfoActivity.class);
intent.putExtra(CheckinOrShoutGatherInfoActivity.INTENT_EXTRA_IS_SHOUT, true);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String pathInput = null;
switch (requestCode) {
case ACTIVITY_REQUEST_CODE_GALLERY:
if (resultCode == Activity.RESULT_OK) {
try {
String [] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(data.getData(), proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
pathInput = cursor.getString(column_index);
}
catch (Exception ex) {
Toast.makeText(this, getResources().getString(R.string.user_details_activity_error_set_photo_load),
Toast.LENGTH_SHORT).show();
}
// If everything worked ok, ask the user if they're sure they want to upload?
try {
String pathOutput = Environment.getExternalStorageDirectory() + "/tmp_fsquare.jpg";
ImageUtils.resampleImageAndSaveToNewLocation(pathInput, pathOutput);
mStateHolder.setNewUserPhotoPath(pathOutput);
showDialog(DIALOG_SET_USER_PHOTO_YES_NO);
}
catch (Exception ex) {
Toast.makeText(this, getResources().getString(R.string.user_details_activity_error_set_photo_resample),
Toast.LENGTH_SHORT).show();
}
}
else {
return;
}
break;
}
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_SET_USER_PHOTO_YES_NO:
return new AlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.user_details_activity_set_photo_confirm_title))
.setMessage(getResources().getString(R.string.user_details_activity_set_photo_confirm_message))
.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(UserDetailsActivity.this);
String username = sp.getString(Preferences.PREFERENCE_LOGIN, "");
String password = sp.getString(Preferences.PREFERENCE_PASSWORD, "");
mStateHolder.startTaskSetUserPhoto(
UserDetailsActivity.this, mStateHolder.getNewUserPhotoPath(), username, password);
}
})
.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.create();
default:
return null;
}
}
private void startGalleryIntent() {
try {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, ACTIVITY_REQUEST_CODE_GALLERY);
}
catch (Exception ex) {
Toast.makeText(this, getResources().getString(R.string.user_details_activity_error_no_photo_gallery),
Toast.LENGTH_SHORT).show();
}
}
private void startProgressBar(String title, String message) {
if (mDlgProgress == null) {
mDlgProgress = ProgressDialog.show(this, title, message);
}
mDlgProgress.show();
}
private void stopProgressBar() {
if (mDlgProgress != null) {
mDlgProgress.dismiss();
mDlgProgress = null;
}
}
private void onSetUserPhotoTaskComplete(User user, Exception ex) {
stopProgressBar();
mStateHolder.setIsRunningSetUserPhotoTask(false);
if (user != null) {
Toast.makeText(this, getResources().getString(R.string.user_details_activity_set_photo_success),
Toast.LENGTH_SHORT).show();
mStateHolder.getUser().setPhoto(user.getPhoto());
Uri uriPhoto = Uri.parse(user.getPhoto());
mRrm.request(uriPhoto);
} else {
NotificationsUtil.ToastReasonForFailure(this, ex);
}
}
/**
* Even if the caller supplies us with a User object parcelable, it won't
* have all the badge etc extra info in it. As soon as the activity starts,
* we launch this task to fetch a full user object, and merge it with
* whatever is already supplied in mUser.
*/
private static class UserDetailsTask extends AsyncTask<String, Void, User> {
private UserDetailsActivity mActivity;
private Exception mReason;
public UserDetailsTask(UserDetailsActivity activity) {
mActivity = activity;
}
@Override
protected void onPreExecute() {
mActivity.setProgressBarIndeterminateVisibility(true);
}
@Override
protected User doInBackground(String... params) {
try {
return ((Foursquared) mActivity.getApplication()).getFoursquare().user(
params[0],
true,
true,
LocationUtils.createFoursquareLocation(((Foursquared) mActivity
.getApplication()).getLastKnownLocation()));
} catch (Exception e) {
mReason = e;
}
return null;
}
@Override
protected void onPostExecute(User user) {
if (mActivity != null) {
mActivity.onUserDetailsTaskComplete(user, mReason);
}
}
@Override
protected void onCancelled() {
if (mActivity != null) {
mActivity.onUserDetailsTaskComplete(null, mReason);
}
}
public void setActivity(UserDetailsActivity activity) {
mActivity = activity;
}
}
private static class SetUserPhotoTask extends AsyncTask<String, Void, User> {
private UserDetailsActivity mActivity;
private Exception mReason;
public SetUserPhotoTask(UserDetailsActivity activity) {
mActivity = activity;
}
public void setActivity(UserDetailsActivity activity) {
mActivity = activity;
}
@Override
protected void onPreExecute() {
mActivity.startProgressBar(
mActivity.getResources().getString(
R.string.user_details_activity_set_photo_progress_title),
mActivity.getResources().getString(
R.string.user_details_activity_set_photo_progress_message));
}
/** Params should be image path, username, password. */
@Override
protected User doInBackground(String... params) {
try {
return ((Foursquared) mActivity.getApplication()).getFoursquare().userUpdate(
params[0], params[1], params[2]);
} catch (Exception e) {
Log.e(TAG, "Error submitting new profile photo.", e);
mReason = e;
}
return null;
}
@Override
protected void onPostExecute(User user) {
if (mActivity != null) {
mActivity.onSetUserPhotoTaskComplete(user, mReason);
}
}
@Override
protected void onCancelled() {
if (mActivity != null) {
mActivity.onSetUserPhotoTaskComplete(null, new FoursquareException(
mActivity.getResources().getString(R.string.user_details_activity_set_photo_cancel)));
}
}
}
private static class StateHolder {
/** The user object we are rendering. */
private User mUser;
/** Show options to add friends for strangers. */
private boolean mShowAddFriendOptions;
/** Only used if logged-in user wants to update their photo. */
private String mNewUserPhotoPath;
private UserDetailsTask mTaskUserDetails;
private boolean mIsRunningUserDetailsTask;
private boolean mFetchedUserDetails;
private SetUserPhotoTask mTaskSetUserPhoto;
private boolean mIsRunningSetUserPhotoTask;
public StateHolder() {
mShowAddFriendOptions = false;
mIsRunningUserDetailsTask = false;
mIsRunningSetUserPhotoTask = false;
mFetchedUserDetails = false;
}
public void setFetchedUserDetails(boolean fetched) {
mFetchedUserDetails = fetched;
}
public boolean getFetchedUserDetails() {
return mFetchedUserDetails;
}
public User getUser() {
return mUser;
}
public void setUser(User user) {
mUser = user;
}
public void setShowAddFriendOptions(boolean showAddFriendOptions) {
mShowAddFriendOptions = showAddFriendOptions;
}
public boolean getShowAddFriendOptions() {
return mShowAddFriendOptions;
}
public void startTaskUserDetails(UserDetailsActivity activity, String userId) {
mIsRunningUserDetailsTask = true;
mTaskUserDetails = new UserDetailsTask(activity);
mTaskUserDetails.execute(userId);
}
public void startTaskSetUserPhoto(UserDetailsActivity activity, String pathImage, String username, String password) {
mIsRunningSetUserPhotoTask = true;
mTaskSetUserPhoto = new SetUserPhotoTask(activity);
mTaskSetUserPhoto.execute(pathImage, username, password);
}
public void setActivityForTasks(UserDetailsActivity activity) {
if (mTaskUserDetails != null) {
mTaskUserDetails.setActivity(activity);
}
if (mTaskSetUserPhoto != null) {
mTaskSetUserPhoto.setActivity(activity);
}
}
public boolean getIsRunningUserDetailsTask() {
return mIsRunningUserDetailsTask;
}
public void setIsRunningUserDetailsTask(boolean isRunning) {
mIsRunningUserDetailsTask = isRunning;
}
public boolean getIsRunningSetUserPhotoTask() {
return mIsRunningSetUserPhotoTask;
}
public void setIsRunningSetUserPhotoTask(boolean isRunning) {
mIsRunningSetUserPhotoTask = isRunning;
}
public String getNewUserPhotoPath() {
return mNewUserPhotoPath;
}
public void setNewUserPhotoPath(String path) {
mNewUserPhotoPath = path;
}
public void cancelTasks() {
if (mTaskUserDetails != null) {
mTaskUserDetails.setActivity(null);
mTaskUserDetails.cancel(true);
}
if (mTaskSetUserPhoto != null) {
mTaskSetUserPhoto.setActivity(null);
mTaskSetUserPhoto.cancel(true);
}
}
}
private class RemoteResourceManagerObserver implements Observer {
@Override
public void update(Observable observable, Object data) {
mImageViewPhoto.getHandler().post(new Runnable() {
@Override
public void run() {
if (mStateHolder.getUser() != null) {
Uri uriPhoto = Uri.parse(mStateHolder.getUser().getPhoto());
if (mRrm.exists(uriPhoto)) {
try {
Bitmap bitmap = BitmapFactory.decodeStream(mRrm.getInputStream(uriPhoto));
mImageViewPhoto.setImageBitmap(bitmap);
mIsUsersPhotoSet = true;
mImageViewPhoto.setImageBitmap(bitmap);
mImageViewPhoto.postInvalidate();
} catch (IOException e) {
}
}
}
}
});
}
}
}