Add full screen detail view to swipe through screenshots
This commit is contained in:
parent
30e498b049
commit
e38d02a59c
@ -201,6 +201,7 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".views.main.MainActivity" />
|
||||
</activity>
|
||||
<activity android:name=".views.ScreenShotsActivity" />
|
||||
<!-- Note: AppThemeTransparent, this activity shows dialogs only -->
|
||||
<activity
|
||||
android:name=".privileged.install.InstallExtensionDialogActivity"
|
||||
|
@ -578,7 +578,8 @@ public class AppDetailsRecyclerViewAdapter
|
||||
public abstract void bindModel();
|
||||
}
|
||||
|
||||
private class ScreenShotsViewHolder extends AppDetailsViewHolder {
|
||||
private class ScreenShotsViewHolder extends AppDetailsViewHolder
|
||||
implements ScreenShotsRecyclerViewAdapter.Listener {
|
||||
final RecyclerView recyclerView;
|
||||
LinearLayoutManagerSnapHelper snapHelper;
|
||||
|
||||
@ -591,7 +592,7 @@ public class AppDetailsRecyclerViewAdapter
|
||||
public void bindModel() {
|
||||
LinearLayoutManager lm = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
|
||||
recyclerView.setLayoutManager(lm);
|
||||
ScreenShotsRecyclerViewAdapter adapter = new ScreenShotsRecyclerViewAdapter(itemView.getContext(), app);
|
||||
ScreenShotsRecyclerViewAdapter adapter = new ScreenShotsRecyclerViewAdapter(itemView.getContext(), app, this);
|
||||
recyclerView.setAdapter(adapter);
|
||||
recyclerView.setHasFixedSize(true);
|
||||
recyclerView.setNestedScrollingEnabled(false);
|
||||
@ -601,6 +602,11 @@ public class AppDetailsRecyclerViewAdapter
|
||||
snapHelper = new LinearLayoutManagerSnapHelper(lm);
|
||||
snapHelper.attachToRecyclerView(recyclerView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScreenshotClick(int position) {
|
||||
context.startActivity(ScreenShotsActivity.getStartIntent(context, app.packageName, position));
|
||||
}
|
||||
}
|
||||
|
||||
private class DonateViewHolder extends AppDetailsViewHolder {
|
||||
|
@ -0,0 +1,126 @@
|
||||
package org.fdroid.fdroid.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
||||
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.data.App;
|
||||
import org.fdroid.fdroid.data.AppProvider;
|
||||
|
||||
/**
|
||||
* Full screen view of an apps screenshots to swipe through.
|
||||
*/
|
||||
public class ScreenShotsActivity extends AppCompatActivity {
|
||||
|
||||
private static final String EXTRA_PACKAGE_NAME = "EXTRA_PACKAGE_NAME";
|
||||
private static final String EXTRA_START_POSITION = "EXTRA_START_POSITION";
|
||||
|
||||
public static Intent getStartIntent(Context context, String packageName, int startPosition) {
|
||||
Intent intent = new Intent(context, ScreenShotsActivity.class);
|
||||
intent.putExtra(EXTRA_PACKAGE_NAME, packageName);
|
||||
intent.putExtra(EXTRA_START_POSITION, startPosition);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_screenshots);
|
||||
|
||||
String packageName = getIntent().getStringExtra(EXTRA_PACKAGE_NAME);
|
||||
int startPosition = getIntent().getIntExtra(EXTRA_START_POSITION, 0);
|
||||
|
||||
App app = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName);
|
||||
String[] screenshots = app.getAllScreenshots(this);
|
||||
|
||||
ViewPager viewPager = (ViewPager) findViewById(R.id.screenshot_view_pager);
|
||||
ScreenShotPagerAdapter adapter = new ScreenShotPagerAdapter(getSupportFragmentManager(), screenshots);
|
||||
viewPager.setAdapter(adapter);
|
||||
viewPager.setCurrentItem(startPosition);
|
||||
}
|
||||
|
||||
|
||||
private class ScreenShotPagerAdapter extends FragmentStatePagerAdapter {
|
||||
|
||||
private final String[] screenshots;
|
||||
|
||||
ScreenShotPagerAdapter(FragmentManager fragmentManager, String[] screenshots) {
|
||||
super(fragmentManager);
|
||||
this.screenshots = screenshots;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
return ScreenShotPageFragment.newInstance(screenshots[position]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return screenshots.length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A single screenshot page.
|
||||
*/
|
||||
public static class ScreenShotPageFragment extends Fragment {
|
||||
|
||||
private static final String ARG_SCREENSHOT_URL = "ARG_SCREENSHOT_URL";
|
||||
|
||||
static ScreenShotPageFragment newInstance(String screenshotUrl) {
|
||||
ScreenShotPageFragment fragment = new ScreenShotPageFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_SCREENSHOT_URL, screenshotUrl);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
|
||||
private String screenshotUrl;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
screenshotUrl = getArguments() != null ? getArguments().getString(ARG_SCREENSHOT_URL) : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
|
||||
DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.imageScaleType(ImageScaleType.NONE)
|
||||
.showImageOnLoading(R.drawable.screenshot_placeholder)
|
||||
.showImageForEmptyUri(R.drawable.screenshot_placeholder)
|
||||
.bitmapConfig(Bitmap.Config.RGB_565)
|
||||
.build();
|
||||
|
||||
View rootView = inflater.inflate(R.layout.activity_screenshots_page, container, false);
|
||||
|
||||
ImageView screenshotView = (ImageView) rootView.findViewById(R.id.screenshot);
|
||||
ImageLoader.getInstance().displayImage(screenshotUrl, screenshotView, displayImageOptions);
|
||||
|
||||
return rootView;
|
||||
}
|
||||
}
|
||||
}
|
@ -18,9 +18,12 @@ import org.fdroid.fdroid.data.App;
|
||||
class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
private final String[] screenshots;
|
||||
private final DisplayImageOptions displayImageOptions;
|
||||
private final Listener listener;
|
||||
|
||||
ScreenShotsRecyclerViewAdapter(Context context, App app) {
|
||||
ScreenShotsRecyclerViewAdapter(Context context, App app, Listener listener) {
|
||||
super();
|
||||
this.listener = listener;
|
||||
|
||||
screenshots = app.getAllScreenshots(context);
|
||||
displayImageOptions = new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
@ -33,8 +36,8 @@ class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.V
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
ScreenShotViewHolder vh = (ScreenShotViewHolder) holder;
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
|
||||
final ScreenShotViewHolder vh = (ScreenShotViewHolder) holder;
|
||||
ImageLoader.getInstance().displayImage(screenshots[position],
|
||||
vh.image, displayImageOptions);
|
||||
}
|
||||
@ -51,12 +54,28 @@ class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.V
|
||||
return screenshots.length;
|
||||
}
|
||||
|
||||
private class ScreenShotViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public interface Listener {
|
||||
/**
|
||||
* @param position zero based position of the screenshot
|
||||
* that has been clicked upon
|
||||
*/
|
||||
void onScreenshotClick(int position);
|
||||
}
|
||||
|
||||
|
||||
private class ScreenShotViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
final ImageView image;
|
||||
|
||||
ScreenShotViewHolder(View view) {
|
||||
super(view);
|
||||
image = (ImageView) view.findViewById(R.id.image);
|
||||
image.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
listener.onScreenshotClick(getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
10
app/src/main/res/layout/activity_screenshots.xml
Normal file
10
app/src/main/res/layout/activity_screenshots.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/screenshot_view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="org.fdroid.fdroid.views.ScreenShotsActivity" />
|
||||
|
||||
|
10
app/src/main/res/layout/activity_screenshots_page.xml
Normal file
10
app/src/main/res/layout/activity_screenshots_page.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/screenshot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@null"
|
||||
android:padding="@dimen/layout_horizontal_margin"
|
||||
tools:src="@drawable/screenshot_placeholder" />
|
Loading…
x
Reference in New Issue
Block a user