That fuck shit the fascists are using
at master 147 lines 6.1 kB view raw
1package org.tm.archive; 2 3import android.app.Activity; 4import android.content.Context; 5import android.content.Intent; 6import android.content.res.Resources; 7import android.graphics.Bitmap; 8import android.graphics.drawable.Drawable; 9import android.os.Bundle; 10import android.transition.TransitionInflater; 11import android.view.View; 12import android.widget.ImageView; 13 14import androidx.annotation.NonNull; 15import androidx.annotation.Nullable; 16import androidx.appcompat.app.AppCompatDelegate; 17import androidx.appcompat.widget.Toolbar; 18import androidx.core.app.ActivityOptionsCompat; 19import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; 20 21import com.bumptech.glide.Glide; 22import com.bumptech.glide.load.DataSource; 23import com.bumptech.glide.load.engine.DiskCacheStrategy; 24import com.bumptech.glide.load.engine.GlideException; 25import com.bumptech.glide.request.RequestListener; 26import com.bumptech.glide.request.target.CustomTarget; 27import com.bumptech.glide.request.target.Target; 28import com.bumptech.glide.request.transition.Transition; 29 30import org.signal.core.util.logging.Log; 31import org.tm.archive.components.emoji.EmojiTextView; 32import org.tm.archive.contacts.avatars.ContactPhoto; 33import org.tm.archive.contacts.avatars.FallbackContactPhoto; 34import org.tm.archive.contacts.avatars.ProfileContactPhoto; 35import org.tm.archive.contacts.avatars.ResourceContactPhoto; 36import org.tm.archive.recipients.Recipient; 37import org.tm.archive.recipients.RecipientId; 38import org.tm.archive.util.FullscreenHelper; 39 40/** 41 * Activity for displaying avatars full screen. 42 */ 43public final class AvatarPreviewActivity extends PassphraseRequiredActivity { 44 45 private static final String TAG = Log.tag(AvatarPreviewActivity.class); 46 47 private static final String RECIPIENT_ID_EXTRA = "recipient_id"; 48 49 public static @NonNull Intent intentFromRecipientId(@NonNull Context context, 50 @NonNull RecipientId recipientId) 51 { 52 Intent intent = new Intent(context, AvatarPreviewActivity.class); 53 intent.putExtra(RECIPIENT_ID_EXTRA, recipientId.serialize()); 54 return intent; 55 } 56 57 public static Bundle createTransitionBundle(@NonNull Activity activity, @NonNull View from) { 58 return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, from, "avatar").toBundle(); 59 } 60 61 @Override 62 protected void attachBaseContext(@NonNull Context newBase) { 63 getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES); 64 super.attachBaseContext(newBase); 65 } 66 67 @Override 68 protected void onCreate(Bundle savedInstanceState, boolean ready) { 69 super.onCreate(savedInstanceState, ready); 70 71 setTheme(R.style.TextSecure_MediaPreview); 72 setContentView(R.layout.contact_photo_preview_activity); 73 74 postponeEnterTransition(); 75 TransitionInflater inflater = TransitionInflater.from(this); 76 getWindow().setSharedElementEnterTransition(inflater.inflateTransition(R.transition.full_screen_avatar_image_enter_transition_set)); 77 getWindow().setSharedElementReturnTransition(inflater.inflateTransition(R.transition.full_screen_avatar_image_return_transition_set)); 78 79 Toolbar toolbar = findViewById(R.id.toolbar); 80 EmojiTextView title = findViewById(R.id.title); 81 ImageView avatar = findViewById(R.id.avatar); 82 83 setSupportActionBar(toolbar); 84 85 requireSupportActionBar().setDisplayHomeAsUpEnabled(true); 86 requireSupportActionBar().setDisplayShowTitleEnabled(false); 87 88 Context context = getApplicationContext(); 89 RecipientId recipientId = RecipientId.from(getIntent().getStringExtra(RECIPIENT_ID_EXTRA)); 90 91 Recipient.live(recipientId).observe(this, recipient -> { 92 ContactPhoto contactPhoto = recipient.isSelf() ? new ProfileContactPhoto(recipient) 93 : recipient.getContactPhoto(); 94 FallbackContactPhoto fallbackPhoto = recipient.isSelf() ? new ResourceContactPhoto(R.drawable.ic_profile_outline_40, R.drawable.ic_profile_outline_20, R.drawable.ic_person_large) 95 : recipient.getFallbackContactPhoto(); 96 97 Resources resources = this.getResources(); 98 99 Glide.with(this) 100 .asBitmap() 101 .load(contactPhoto) 102 .fallback(fallbackPhoto.asCallCard(this)) 103 .error(fallbackPhoto.asCallCard(this)) 104 .diskCacheStrategy(DiskCacheStrategy.ALL) 105 .addListener(new RequestListener<Bitmap>() { 106 @Override 107 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { 108 Log.w(TAG, "Unable to load avatar, or avatar removed, closing"); 109 finish(); 110 return false; 111 } 112 113 @Override 114 public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) { 115 return false; 116 } 117 }) 118 .into(new CustomTarget<Bitmap>() { 119 @Override 120 public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { 121 avatar.setImageDrawable(RoundedBitmapDrawableFactory.create(resources, resource)); 122 startPostponedEnterTransition(); 123 } 124 125 @Override 126 public void onLoadCleared(@Nullable Drawable placeholder) { 127 } 128 }); 129 130 title.setText(recipient.getDisplayName(context)); 131 }); 132 133 FullscreenHelper fullscreenHelper = new FullscreenHelper(this); 134 135 findViewById(android.R.id.content).setOnClickListener(v -> fullscreenHelper.toggleUiVisibility()); 136 137 fullscreenHelper.configureToolbarLayout(findViewById(R.id.toolbar_cutout_spacer), toolbar); 138 139 fullscreenHelper.showAndHideWithSystemUI(getWindow(), findViewById(R.id.toolbar_layout)); 140 } 141 142 @Override 143 public boolean onSupportNavigateUp() { 144 onBackPressed(); 145 return true; 146 } 147}