Signal-Android/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementActivity.java

154 wiersze
5.0 KiB
Java

package org.thoughtcrime.securesms.stickers;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment;
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.sharing.MultiShareArgs;
import org.thoughtcrime.securesms.util.DeviceProperties;
import org.thoughtcrime.securesms.util.DynamicTheme;
import java.util.Collections;
/**
* Allows the user to view and manage (install, uninstall, etc) their stickers.
*/
public final class StickerManagementActivity extends PassphraseRequiredActivity implements StickerManagementAdapter.EventListener {
private final DynamicTheme dynamicTheme = new DynamicTheme();
private RecyclerView list;
private StickerManagementAdapter adapter;
private StickerManagementViewModel viewModel;
public static Intent getIntent(@NonNull Context context) {
return new Intent(context, StickerManagementActivity.class);
}
@Override
protected void onPreCreate() {
super.onPreCreate();
dynamicTheme.onCreate(this);
}
@Override
protected void onCreate(Bundle savedInstanceState, boolean ready) {
setContentView(R.layout.sticker_management_activity);
initView();
initToolbar();
initViewModel();
getSupportFragmentManager().setFragmentResultListener(MultiselectForwardFragment.RESULT_KEY, this, (requestKey, result) -> {
if (result.getBoolean(MultiselectForwardFragment.RESULT_SENT, false)) {
finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
viewModel.onVisible();
}
@Override
protected void onResume() {
super.onResume();
dynamicTheme.onResume(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onStickerPackClicked(@NonNull String packId, @NonNull String packKey) {
startActivity(StickerPackPreviewActivity.getIntent(packId, packKey));
}
@Override
public void onStickerPackUninstallClicked(@NonNull String packId, @NonNull String packKey) {
viewModel.onStickerPackUninstallClicked(packId, packKey);
}
@Override
public void onStickerPackInstallClicked(@NonNull String packId, @NonNull String packKey) {
viewModel.onStickerPackInstallClicked(packId, packKey);
}
@Override
public void onStickerPackShareClicked(@NonNull String packId, @NonNull String packKey) {
MultiselectForwardFragment.showBottomSheet(
getSupportFragmentManager(),
new MultiselectForwardFragmentArgs(
true,
Collections.singletonList(new MultiShareArgs.Builder()
.withDraftText(StickerUrl.createShareLink(packId, packKey))
.build()),
R.string.MultiselectForwardFragment__share_with
)
);
}
private void initView() {
this.list = findViewById(R.id.sticker_management_list);
this.adapter = new StickerManagementAdapter(GlideApp.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(this));
list.setLayoutManager(new LinearLayoutManager(this));
list.setAdapter(adapter);
new ItemTouchHelper(new StickerManagementItemTouchHelper(new ItemTouchCallback())).attachToRecyclerView(list);
}
private void initToolbar() {
getSupportActionBar().setTitle(R.string.StickerManagementActivity_stickers);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void initViewModel() {
StickerManagementRepository repository = new StickerManagementRepository(this);
viewModel = new ViewModelProvider(this, new StickerManagementViewModel.Factory(getApplication(), repository)).get(StickerManagementViewModel.class);
viewModel.init();
viewModel.getStickerPacks().observe(this, packResult -> {
if (packResult == null) return;
adapter.setPackLists(packResult.getInstalledPacks(), packResult.getAvailablePacks(), packResult.getBlessedPacks());
});
}
private class ItemTouchCallback implements StickerManagementItemTouchHelper.Callback {
@Override
public boolean onMove(int start, int end) {
return adapter.onMove(start, end);
}
@Override
public boolean isMovable(int position) {
return adapter.isMovable(position);
}
@Override
public void onMoveCommitted() {
viewModel.onOrderChanged(adapter.getInstalledPacksInOrder());
}
}
}