package mil.nga.giat.mage.profile;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.Collections;
import mil.nga.giat.mage.R;
import mil.nga.giat.mage.sdk.datastore.user.User;
import mil.nga.giat.mage.sdk.datastore.user.UserHelper;
import mil.nga.giat.mage.sdk.datastore.user.UserLocal;
import mil.nga.giat.mage.sdk.exceptions.UserException;
import mil.nga.giat.mage.sdk.fetch.DownloadImageTask;
public class ProfilePictureViewerActivity extends AppCompatActivity {
private static final String LOG_NAME = ProfilePictureViewerActivity.class.getName();
public final static String USER_ID = "USER_ID";
private static final int MAX_DOWNLOAD_ATTEMPS = 1;
ImageView imageView;
View progress;
int attempts;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.attachment_viewer);
Long userID = getIntent().getLongExtra(USER_ID, -1);
imageView = (ImageView)findViewById(R.id.image);
progress = findViewById(R.id.progress);
attempts = 0;
if(userID >= 0) {
try {
final User user = UserHelper.getInstance(getApplicationContext()).read(userID);
final UserLocal userLocal = user.getUserLocal();
this.setTitle(user.getDisplayName());
String localAvatarPath = userLocal.getLocalAvatarPath();
if (StringUtils.isNotBlank(localAvatarPath)) {
setProfilePicture(user);
} else {
downloadProfilePicture(user);
}
} catch(Exception e) {
Log.e(LOG_NAME, "Could not set title.", e);
}
}
// findViewById(R.id.remove_btn).setVisibility(View.GONE);
}
private void downloadProfilePicture(final User user) {
if (attempts >= MAX_DOWNLOAD_ATTEMPS) {
showErrorDialog();
return;
}
attempts++;
if (user.getAvatarUrl() != null) {
new DownloadImageTask(getApplicationContext(), Collections.singletonList(user), DownloadImageTask.ImageType.AVATAR, true, new DownloadImageTask.OnImageDownloadListener() {
@Override
public void complete() {
try {
User updatedUser = UserHelper.getInstance(getApplicationContext()).read(user.getId());
String avatarPath = updatedUser.getUserLocal().getLocalAvatarPath();
if (avatarPath != null) {
setProfilePicture(updatedUser);
} else {
showErrorDialog();
}
} catch (UserException e) {
e.printStackTrace();
}
}
}).execute();
}
}
private void setProfilePicture(final User user) {
Glide.with(this)
.load(new File(user.getUserLocal().getLocalAvatarPath()))
.listener(new RequestListener<File, GlideDrawable>() {
@Override
public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
downloadProfilePicture(user);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
progress.setVisibility(View.GONE);
return false;
}
})
.into(imageView);
}
private void showErrorDialog() {
new AlertDialog.Builder(ProfilePictureViewerActivity.this, R.style.AppCompatAlertDialogStyle)
.setTitle("Error Downloading Avatar")
.setMessage("MAGE could not download this users avatar. Please try again later.")
.setPositiveButton(android.R.string.ok, null)
.create()
.show();
}
}