kopia lustrzana https://github.com/ryukoposting/Signal-Android
154 wiersze
5.0 KiB
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());
|
|
}
|
|
}
|
|
}
|