session-android/src/org/thoughtcrime/securesms/giph/ui/GiphyActivity.java

168 lines
5.6 KiB
Java

package org.thoughtcrime.securesms.giph.ui;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.concurrent.ExecutionException;
public class GiphyActivity extends PassphraseRequiredActionBarActivity
implements GiphyActivityToolbar.OnLayoutChangedListener,
GiphyActivityToolbar.OnFilterChangedListener,
GiphyAdapter.OnItemClickListener
{
private static final String TAG = GiphyActivity.class.getSimpleName();
public static final String EXTRA_IS_MMS = "extra_is_mms";
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
private GiphyGifFragment gifFragment;
private GiphyStickerFragment stickerFragment;
private boolean forMms;
private GiphyAdapter.GiphyViewHolder finishingImage;
@Override
public void onPreCreate() {
dynamicTheme.onCreate(this);
dynamicLanguage.onCreate(this);
}
@Override
public void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
setContentView(R.layout.giphy_activity);
initializeToolbar();
initializeResources();
}
private void initializeToolbar() {
GiphyActivityToolbar toolbar = ViewUtil.findById(this, R.id.giphy_toolbar);
toolbar.setOnFilterChangedListener(this);
toolbar.setOnLayoutChangedListener(this);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
private void initializeResources() {
ViewPager viewPager = ViewUtil.findById(this, R.id.giphy_pager);
TabLayout tabLayout = ViewUtil.findById(this, R.id.tab_layout);
this.gifFragment = new GiphyGifFragment();
this.stickerFragment = new GiphyStickerFragment();
this.forMms = getIntent().getBooleanExtra(EXTRA_IS_MMS, false);
gifFragment.setClickListener(this);
stickerFragment.setClickListener(this);
viewPager.setAdapter(new GiphyFragmentPagerAdapter(this, getSupportFragmentManager(),
gifFragment, stickerFragment));
tabLayout.setupWithViewPager(viewPager);
}
@Override
public void onFilterChanged(String filter) {
this.gifFragment.setSearchString(filter);
this.stickerFragment.setSearchString(filter);
}
@Override
public void onLayoutChanged(int type) {
this.gifFragment.setLayoutManager(type);
this.stickerFragment.setLayoutManager(type);
}
@Override
public void onClick(final GiphyAdapter.GiphyViewHolder viewHolder) {
if (finishingImage != null) finishingImage.gifProgress.setVisibility(View.GONE);
finishingImage = viewHolder;
finishingImage.gifProgress.setVisibility(View.VISIBLE);
new AsyncTask<Void, Void, Uri>() {
@Override
protected Uri doInBackground(Void... params) {
try {
return Uri.fromFile(viewHolder.getFile(forMms));
} catch (InterruptedException | ExecutionException e) {
Log.w(TAG, e);
return null;
}
}
protected void onPostExecute(@Nullable Uri uri) {
if (uri == null) {
Toast.makeText(GiphyActivity.this, R.string.GiphyActivity_error_while_retrieving_full_resolution_gif, Toast.LENGTH_LONG).show();
} else if (viewHolder == finishingImage) {
setResult(RESULT_OK, new Intent().setData(uri));
finish();
} else {
Log.w(TAG, "Resolved Uri is no longer the selected element...");
}
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private static class GiphyFragmentPagerAdapter extends FragmentPagerAdapter {
private final Context context;
private final GiphyGifFragment gifFragment;
private final GiphyStickerFragment stickerFragment;
private GiphyFragmentPagerAdapter(@NonNull Context context,
@NonNull FragmentManager fragmentManager,
@NonNull GiphyGifFragment gifFragment,
@NonNull GiphyStickerFragment stickerFragment)
{
super(fragmentManager);
this.context = context.getApplicationContext();
this.gifFragment = gifFragment;
this.stickerFragment = stickerFragment;
}
@Override
public Fragment getItem(int position) {
if (position == 0) return gifFragment;
else return stickerFragment;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) return context.getString(R.string.GiphyFragmentPagerAdapter_gifs);
else return context.getString(R.string.GiphyFragmentPagerAdapter_stickers);
}
}
}