mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Start using Fragments appropriately
This commit is contained in:
parent
540b760c76
commit
9476ec6484
4 changed files with 171 additions and 113 deletions
|
|
@ -1,17 +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="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<GridView android:id="@+id/contributionsList"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:stretchMode="columnWidth"
|
||||
android:columnWidth="240dp"
|
||||
android:numColumns="auto_fit"
|
||||
android:listSelector="@null"
|
||||
android:fadingEdge="none"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
<fragment
|
||||
android:name="org.wikimedia.commons.contributions.ContributionsListFragment"
|
||||
android:id="@+id/contributionsListFragment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
17
commons/res/layout/fragment_contributions.xml
Normal file
17
commons/res/layout/fragment_contributions.xml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<GridView android:id="@+id/contributionsList"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:stretchMode="columnWidth"
|
||||
android:columnWidth="240dp"
|
||||
android:numColumns="auto_fit"
|
||||
android:listSelector="@null"
|
||||
android:fadingEdge="none"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package org.wikimedia.commons.contributions;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
import android.os.IBinder;
|
||||
|
|
@ -11,41 +10,27 @@ import android.support.v4.content.Loader;
|
|||
import android.content.*;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.*;
|
||||
import android.support.v4.widget.CursorAdapter;
|
||||
import android.support.v4.widget.SimpleCursorAdapter;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import com.actionbarsherlock.view.ActionMode;
|
||||
import android.widget.AdapterView;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
||||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
||||
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
|
||||
import org.wikimedia.commons.*;
|
||||
import org.wikimedia.commons.auth.AuthenticatedActivity;
|
||||
import org.wikimedia.commons.auth.WikiAccountAuthenticator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
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> {
|
||||
public class ContributionsActivity extends AuthenticatedActivity implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
|
||||
|
||||
private final static int SELECT_FROM_GALLERY = 1;
|
||||
private final static int SELECT_FROM_CAMERA = 2;
|
||||
|
||||
private TextView progressUpdateTextView;
|
||||
private Cursor allContributions;
|
||||
private ContributionsListFragment contributionsList;
|
||||
|
||||
public ContributionsActivity() {
|
||||
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
|
||||
|
|
@ -63,60 +48,7 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
}
|
||||
};
|
||||
|
||||
private class ContributionAdapter extends CursorAdapter {
|
||||
|
||||
public ContributionAdapter(Context context, Cursor c, int flags) {
|
||||
super(context, c, flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
|
||||
return getLayoutInflater().inflate(R.layout.layout_contribution, viewGroup, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(View view, Context context, Cursor cursor) {
|
||||
ImageView imageView = (ImageView)view.findViewById(R.id.contributionImage);
|
||||
TextView titleView = (TextView)view.findViewById(R.id.contributionTitle);
|
||||
TextView stateView = (TextView)view.findViewById(R.id.contributionState);
|
||||
|
||||
Contribution contribution = Contribution.fromCursor(cursor);
|
||||
|
||||
String actualUrl = TextUtils.isEmpty(contribution.getImageUrl()) ? contribution.getLocalUri().toString() : contribution.getThumbnailUrl(320);
|
||||
Log.d("Commons", "Trying URL " + actualUrl);
|
||||
|
||||
Log.d("Commons", "For " + contribution.toContentValues());
|
||||
|
||||
if(imageView.getTag() == null || !imageView.getTag().equals(actualUrl)) {
|
||||
Log.d("Commons", "Tag is " + imageView.getTag() + " url is " + actualUrl); //+ " equals is " + imageView.getTag().equals(actualUrl) + " the other thing is " + (imageView.getTag() == null));
|
||||
|
||||
ImageLoader.getInstance().displayImage(actualUrl, imageView, contributionDisplayOptions);
|
||||
imageView.setTag(actualUrl);
|
||||
}
|
||||
|
||||
titleView.setText(Utils.displayTitleFromTitle(contribution.getFilename()));
|
||||
switch(contribution.getState()) {
|
||||
case Contribution.STATE_COMPLETED:
|
||||
Date uploaded = contribution.getDateUploaded();
|
||||
stateView.setText(SimpleDateFormat.getDateInstance().format(uploaded));
|
||||
break;
|
||||
case Contribution.STATE_QUEUED:
|
||||
stateView.setText(R.string.contribution_state_queued);
|
||||
break;
|
||||
case Contribution.STATE_IN_PROGRESS:
|
||||
stateView.setText(R.string.contribution_state_starting);
|
||||
long total = contribution.getDataLength();
|
||||
long transferred = contribution.getTransferred();
|
||||
String stateString = String.format(getString(R.string.contribution_state_in_progress), (int)(((double)transferred / (double)total) * 100));
|
||||
stateView.setText(stateString);
|
||||
break;
|
||||
case Contribution.STATE_FAILED:
|
||||
stateView.setText(R.string.contribution_state_failed);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
|
|
@ -124,12 +56,6 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
unbindService(uploadServiceConnection);
|
||||
}
|
||||
|
||||
private GridView contributionsList;
|
||||
|
||||
private ContributionAdapter contributionsAdapter;
|
||||
|
||||
private DisplayImageOptions contributionDisplayOptions;
|
||||
|
||||
private String CONTRIBUTION_SELECTION = "";
|
||||
/*
|
||||
This sorts in the following order:
|
||||
|
|
@ -156,34 +82,16 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
protected void onAuthCookieAcquired(String authCookie) {
|
||||
// Do a sync everytime we get here!
|
||||
ContentResolver.requestSync(((CommonsApplication)getApplicationContext()).getCurrentAccount(), ContributionsContentProvider.AUTHORITY, new Bundle());
|
||||
contributionDisplayOptions = new DisplayImageOptions.Builder().cacheInMemory()
|
||||
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
|
||||
.displayer(new FadeInBitmapDisplayer(300))
|
||||
.cacheInMemory()
|
||||
.cacheOnDisc()
|
||||
.resetViewBeforeLoading().build();
|
||||
Intent uploadServiceIntent = new Intent(this, UploadService.class);
|
||||
uploadServiceIntent.setAction(UploadService.ACTION_START_SERVICE);
|
||||
startService(uploadServiceIntent);
|
||||
bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE);
|
||||
|
||||
Cursor allContributions = getContentResolver().query(ContributionsContentProvider.BASE_URI, Contribution.Table.ALL_FIELDS, CONTRIBUTION_SELECTION, null, CONTRIBUTION_SORT);
|
||||
contributionsAdapter = new ContributionAdapter(this, allContributions, 0);
|
||||
contributionsList.setAdapter(contributionsAdapter);
|
||||
allContributions = getContentResolver().query(ContributionsContentProvider.BASE_URI, Contribution.Table.ALL_FIELDS, CONTRIBUTION_SELECTION, null, CONTRIBUTION_SORT);
|
||||
|
||||
getSupportLoaderManager().initLoader(0, null, this);
|
||||
|
||||
contributionsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int position, long item) {
|
||||
Cursor cursor = (Cursor)adapterView.getItemAtPosition(position);
|
||||
Contribution c = Contribution.fromCursor(cursor);
|
||||
if(c.getState() == Contribution.STATE_FAILED) {
|
||||
uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c);
|
||||
Log.d("Commons", "Restarting for" + c.toContentValues().toString());
|
||||
}
|
||||
Log.d("Commons", "You clicked on:" + c.toContentValues().toString());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -191,7 +99,8 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
super.onCreate(savedInstanceState);
|
||||
setTitle(R.string.title_activity_contributions);
|
||||
setContentView(R.layout.activity_contributions);
|
||||
contributionsList = (GridView)findViewById(R.id.contributionsList);
|
||||
|
||||
contributionsList = (ContributionsListFragment)getSupportFragmentManager().findFragmentById(R.id.contributionsListFragment);
|
||||
|
||||
requestAuthToken();
|
||||
}
|
||||
|
|
@ -286,6 +195,16 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
}
|
||||
}
|
||||
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int position, long item) {
|
||||
Cursor cursor = (Cursor)adapterView.getItemAtPosition(position);
|
||||
Contribution c = Contribution.fromCursor(cursor);
|
||||
if(c.getState() == Contribution.STATE_FAILED) {
|
||||
uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c);
|
||||
Log.d("Commons", "Restarting for" + c.toContentValues().toString());
|
||||
}
|
||||
Log.d("Commons", "You clicked on:" + c.toContentValues().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getSupportMenuInflater().inflate(R.menu.activity_contributions, menu);
|
||||
|
|
@ -297,11 +216,12 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
|
|||
}
|
||||
|
||||
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
|
||||
contributionsAdapter.swapCursor(cursor);
|
||||
allContributions = cursor;
|
||||
contributionsList.setCursor(cursor);
|
||||
}
|
||||
|
||||
public void onLoaderReset(Loader<Cursor> cursorLoader) {
|
||||
contributionsAdapter.swapCursor(null);
|
||||
contributionsList.setCursor(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,122 @@
|
|||
package org.wikimedia.commons.contributions;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.CursorAdapter;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.GridView;
|
||||
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.R;
|
||||
import org.wikimedia.commons.UploadService;
|
||||
import org.wikimedia.commons.Utils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class ContributionsListFragment extends SherlockFragment {
|
||||
|
||||
private GridView contributionsList;
|
||||
|
||||
private ContributionsListAdapter contributionsAdapter;
|
||||
|
||||
private DisplayImageOptions contributionDisplayOptions;
|
||||
private Cursor allContributions;
|
||||
|
||||
private class ContributionsListAdapter extends CursorAdapter {
|
||||
|
||||
public ContributionsListAdapter(Context context, Cursor c, int flags) {
|
||||
super(context, c, flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
|
||||
return getActivity().getLayoutInflater().inflate(R.layout.layout_contribution, viewGroup, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(View view, Context context, Cursor cursor) {
|
||||
ImageView imageView = (ImageView)view.findViewById(R.id.contributionImage);
|
||||
TextView titleView = (TextView)view.findViewById(R.id.contributionTitle);
|
||||
TextView stateView = (TextView)view.findViewById(R.id.contributionState);
|
||||
|
||||
Contribution contribution = Contribution.fromCursor(cursor);
|
||||
|
||||
String actualUrl = TextUtils.isEmpty(contribution.getImageUrl()) ? contribution.getLocalUri().toString() : contribution.getThumbnailUrl(320);
|
||||
Log.d("Commons", "Trying URL " + actualUrl);
|
||||
|
||||
Log.d("Commons", "For " + contribution.toContentValues());
|
||||
|
||||
if(imageView.getTag() == null || !imageView.getTag().equals(actualUrl)) {
|
||||
Log.d("Commons", "Tag is " + imageView.getTag() + " url is " + actualUrl); //+ " equals is " + imageView.getTag().equals(actualUrl) + " the other thing is " + (imageView.getTag() == null));
|
||||
|
||||
ImageLoader.getInstance().displayImage(actualUrl, imageView, contributionDisplayOptions);
|
||||
imageView.setTag(actualUrl);
|
||||
}
|
||||
|
||||
titleView.setText(Utils.displayTitleFromTitle(contribution.getFilename()));
|
||||
switch(contribution.getState()) {
|
||||
case Contribution.STATE_COMPLETED:
|
||||
Date uploaded = contribution.getDateUploaded();
|
||||
stateView.setText(SimpleDateFormat.getDateInstance().format(uploaded));
|
||||
break;
|
||||
case Contribution.STATE_QUEUED:
|
||||
stateView.setText(R.string.contribution_state_queued);
|
||||
break;
|
||||
case Contribution.STATE_IN_PROGRESS:
|
||||
stateView.setText(R.string.contribution_state_starting);
|
||||
long total = contribution.getDataLength();
|
||||
long transferred = contribution.getTransferred();
|
||||
String stateString = String.format(getString(R.string.contribution_state_in_progress), (int)(((double)transferred / (double)total) * 100));
|
||||
stateView.setText(stateString);
|
||||
break;
|
||||
case Contribution.STATE_FAILED:
|
||||
stateView.setText(R.string.contribution_state_failed);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_contributions, container, false);
|
||||
}
|
||||
|
||||
public void setCursor(Cursor cursor) {
|
||||
if(allContributions == null) {
|
||||
contributionsAdapter = new ContributionsListAdapter(this.getActivity(), cursor, 0);
|
||||
contributionsList.setAdapter(contributionsAdapter);
|
||||
}
|
||||
allContributions = cursor;
|
||||
contributionsAdapter.swapCursor(cursor);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
contributionsList = (GridView)getView().findViewById(R.id.contributionsList);
|
||||
contributionDisplayOptions = new DisplayImageOptions.Builder().cacheInMemory()
|
||||
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
|
||||
.displayer(new FadeInBitmapDisplayer(300))
|
||||
.cacheInMemory()
|
||||
.cacheOnDisc()
|
||||
.resetViewBeforeLoading().build();
|
||||
|
||||
contributionsList.setOnItemClickListener((AdapterView.OnItemClickListener)getActivity());
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue