That fuck shit the fascists are using
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}