mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Add minimal detail view as a fragment
This commit is contained in:
parent
de39502292
commit
0cb11284ff
7 changed files with 238 additions and 7 deletions
|
|
@ -1,16 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:id="@+id/contributionsFragmentContainer"
|
||||
>
|
||||
<fragment
|
||||
android:name="org.wikimedia.commons.contributions.ContributionsListFragment"
|
||||
android:id="@+id/contributionsListFragment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
42
commons/res/layout/fragment_media_detail.xml
Normal file
42
commons/res/layout/fragment_media_detail.xml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:background="@android:color/background_dark"
|
||||
>
|
||||
|
||||
<ImageView android:id="@+id/mediaDetailImage"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:scaleType="fitCenter"
|
||||
/>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center|bottom"
|
||||
android:background="#AA000000"
|
||||
android:padding="8dp"
|
||||
>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/mediaDetailTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFFFF"
|
||||
style="?android:textAppearanceMedium"
|
||||
android:typeface="serif" />
|
||||
<!-- <TextView
|
||||
android:id="@+id/mediaDetailDescription"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/mediaDetailTitle"
|
||||
android:layout_alignParentBottom="true"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:textColor="#FFFFFFFF"
|
||||
/> -->
|
||||
</RelativeLayout>
|
||||
|
||||
</FrameLayout>
|
||||
16
commons/res/layout/fragment_media_detail_pager.xml
Normal file
16
commons/res/layout/fragment_media_detail_pager.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/mediaDetailsPager"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fadingEdge="none"
|
||||
>
|
||||
|
||||
</android.support.v4.view.ViewPager>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -34,4 +34,5 @@
|
|||
<string name="menu_from_camera">Take photo</string>
|
||||
|
||||
<string name="provider_contributions">My contributions</string>
|
||||
<string name="share">Share</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package org.wikimedia.commons.contributions;
|
||||
|
||||
import android.*;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
import android.os.IBinder;
|
||||
|
|
@ -16,21 +17,27 @@ import android.widget.AdapterView;
|
|||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import org.wikimedia.commons.*;
|
||||
import org.wikimedia.commons.R;
|
||||
import org.wikimedia.commons.auth.AuthenticatedActivity;
|
||||
import org.wikimedia.commons.auth.WikiAccountAuthenticator;
|
||||
import org.wikimedia.commons.media.MediaDetailPagerFragment;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
// Inherit from SherlockFragmentActivity but not use Fragments. Because Loaders are available only from FragmentActivities
|
||||
public class ContributionsActivity extends AuthenticatedActivity implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
|
||||
public class ContributionsActivity
|
||||
extends AuthenticatedActivity
|
||||
implements LoaderManager.LoaderCallbacks<Cursor>,
|
||||
AdapterView.OnItemClickListener,
|
||||
MediaDetailPagerFragment.MediaDetailProvider {
|
||||
|
||||
private final static int SELECT_FROM_GALLERY = 1;
|
||||
private final static int SELECT_FROM_CAMERA = 2;
|
||||
|
||||
private Cursor allContributions;
|
||||
private ContributionsListFragment contributionsList;
|
||||
private MediaDetailPagerFragment mediaDetails;
|
||||
|
||||
public ContributionsActivity() {
|
||||
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
|
||||
|
|
@ -105,6 +112,19 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
requestAuthToken();
|
||||
}
|
||||
|
||||
private void showDetail(int i) {
|
||||
if(mediaDetails == null ||!mediaDetails.isVisible()) {
|
||||
mediaDetails = new MediaDetailPagerFragment();
|
||||
this.getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.contributionsFragmentContainer, mediaDetails)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
this.getSupportFragmentManager().executePendingTransactions();
|
||||
}
|
||||
mediaDetails.showImage(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
outState.putParcelable("lastGeneratedCaptureURI", lastGeneratedCaptureURI);
|
||||
|
|
@ -201,6 +221,9 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
if(c.getState() == Contribution.STATE_FAILED) {
|
||||
uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c);
|
||||
Log.d("Commons", "Restarting for" + c.toContentValues().toString());
|
||||
} else {
|
||||
Log.d("Commons", "CLicking for " + c.toContentValues());
|
||||
showDetail(position);
|
||||
}
|
||||
Log.d("Commons", "You clicked on:" + c.toContentValues().toString());
|
||||
}
|
||||
|
|
@ -224,4 +247,15 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
contributionsList.setCursor(null);
|
||||
}
|
||||
|
||||
public Media getItem(int i) {
|
||||
allContributions.moveToPosition(i);
|
||||
return Contribution.fromCursor(allContributions);
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
if(allContributions == null) {
|
||||
return 0;
|
||||
}
|
||||
return allContributions.getCount();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
package org.wikimedia.commons.media;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import com.actionbarsherlock.app.SherlockFragment;
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
||||
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
|
||||
import org.wikimedia.commons.Media;
|
||||
import org.wikimedia.commons.R;
|
||||
import org.wikimedia.commons.Utils;
|
||||
|
||||
public class MediaDetailFragment extends SherlockFragment {
|
||||
|
||||
private Media media;
|
||||
private DisplayImageOptions displayOptions;
|
||||
|
||||
public static MediaDetailFragment forMedia(Media media) {
|
||||
MediaDetailFragment mf = new MediaDetailFragment();
|
||||
mf.media = media;
|
||||
return mf;
|
||||
}
|
||||
|
||||
private ImageView image;
|
||||
private TextView title;
|
||||
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable("media", media);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
if(media == null) {
|
||||
media = (Media)savedInstanceState.get("media");
|
||||
}
|
||||
View view = inflater.inflate(R.layout.fragment_media_detail, container, false);
|
||||
image = (ImageView) view.findViewById(R.id.mediaDetailImage);
|
||||
title = (TextView) view.findViewById(R.id.mediaDetailTitle);
|
||||
String actualUrl = TextUtils.isEmpty(media.getImageUrl()) ? media.getLocalUri().toString() : media.getThumbnailUrl(640);
|
||||
ImageLoader.getInstance().displayImage(actualUrl, image, displayOptions);
|
||||
title.setText(Utils.displayTitleFromTitle(media.getFilename()));
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
displayOptions = new DisplayImageOptions.Builder().cacheInMemory()
|
||||
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
|
||||
.displayer(new FadeInBitmapDisplayer(300))
|
||||
.cacheInMemory()
|
||||
.cacheOnDisc()
|
||||
.resetViewBeforeLoading().build();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package org.wikimedia.commons.media;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
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.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import com.actionbarsherlock.app.SherlockFragment;
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.actionbarsherlock.widget.ShareActionProvider;
|
||||
import org.wikimedia.commons.Media;
|
||||
import org.wikimedia.commons.R;
|
||||
|
||||
public class MediaDetailPagerFragment extends SherlockFragment {
|
||||
private ViewPager pager;
|
||||
private ShareActionProvider shareActionProvider;
|
||||
|
||||
public interface MediaDetailProvider {
|
||||
public Media getItem(int i);
|
||||
public int getCount();
|
||||
}
|
||||
private class MediaDetailAdapter extends FragmentStatePagerAdapter {
|
||||
|
||||
public MediaDetailAdapter(FragmentManager fm) {
|
||||
super(fm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int i) {
|
||||
Media m = ((MediaDetailProvider)getActivity()).getItem(i);
|
||||
return MediaDetailFragment.forMedia((m));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return ((MediaDetailProvider)getActivity()).getCount();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
|
||||
pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager);
|
||||
pager.setAdapter(new MediaDetailAdapter(getChildFragmentManager()));
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
|
||||
public void showImage(int i) {
|
||||
pager.setCurrentItem(i);
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue