From 9476ec6484feaec6c6f976033add54a7ab0d0ac8 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Thu, 21 Feb 2013 12:14:53 +0530 Subject: [PATCH] Start using Fragments appropriately --- commons/res/layout/activity_contributions.xml | 23 ++-- commons/res/layout/fragment_contributions.xml | 17 +++ .../contributions/ContributionsActivity.java | 122 +++--------------- .../ContributionsListFragment.java | 122 ++++++++++++++++++ 4 files changed, 171 insertions(+), 113 deletions(-) create mode 100644 commons/res/layout/fragment_contributions.xml create mode 100644 commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java diff --git a/commons/res/layout/activity_contributions.xml b/commons/res/layout/activity_contributions.xml index 0beebf685..91778bf8a 100644 --- a/commons/res/layout/activity_contributions.xml +++ b/commons/res/layout/activity_contributions.xml @@ -1,17 +1,16 @@ - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal" + > + \ No newline at end of file diff --git a/commons/res/layout/fragment_contributions.xml b/commons/res/layout/fragment_contributions.xml new file mode 100644 index 000000000..0beebf685 --- /dev/null +++ b/commons/res/layout/fragment_contributions.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index 3cc062f7d..637029ca3 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -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 { +public class ContributionsActivity extends AuthenticatedActivity implements LoaderManager.LoaderCallbacks, 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 cursorLoader, Cursor cursor) { - contributionsAdapter.swapCursor(cursor); + allContributions = cursor; + contributionsList.setCursor(cursor); } public void onLoaderReset(Loader cursorLoader) { - contributionsAdapter.swapCursor(null); + contributionsList.setCursor(null); } } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java new file mode 100644 index 000000000..c22109dc0 --- /dev/null +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsListFragment.java @@ -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()); + + } +}