Separate ShareView into an activity + a fragment

This commit is contained in:
YuviPanda 2013-03-28 04:13:50 +05:30
parent f0e9d30bfa
commit 1816f792f8
4 changed files with 156 additions and 84 deletions

View file

@ -12,34 +12,10 @@
android:layout_height="fill_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill"
android:background="#AA000000"
android:orientation="vertical"
android:paddingBottom="8dip"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:paddingTop="8dip" >
<EditText
android:id="@+id/titleEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollHorizontally="false"
android:singleLine="true"
android:hint="@string/share_title_hint"
/>
<EditText
android:id="@+id/descEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:hint="@string/share_description_hint"
/>
</LinearLayout>
<FrameLayout
android:id="@+id/single_upload_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill"
android:background="#AA000000"
android:orientation="vertical"
android:paddingBottom="8dip"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:paddingTop="8dip" >
<EditText
android:id="@+id/titleEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollHorizontally="false"
android:singleLine="true"
android:hint="@string/share_title_hint"
/>
<EditText
android:id="@+id/descEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:hint="@string/share_description_hint"
/>
</LinearLayout>

View file

@ -17,23 +17,23 @@ import org.wikimedia.commons.auth.*;
import org.wikimedia.commons.modifications.PostUploadActivity;
public class ShareActivity extends AuthenticatedActivity {
public class ShareActivity extends AuthenticatedActivity implements SingleUploadFragment.OnUploadActionInitiated {
private SingleUploadFragment shareView;
public ShareActivity() {
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
}
private CommonsApplication app;
private ImageView backgroundImageView;
private EditText titleEdit;
private EditText descEdit;
private String source;
private String mimeType;
private Uri mediaUri;
private ImageView backgroundImageView;
private UploadService uploadService;
private boolean isUploadServiceConnected;
private ServiceConnection uploadServiceConnection = new ServiceConnection() {
@ -48,6 +48,11 @@ public class ShareActivity extends AuthenticatedActivity {
}
};
public void uploadActionInitiated(String title, String description) {
StartUploadTask task = new SingleStartUploadTask(ShareActivity.this, uploadService, title, mediaUri, description, mimeType, source);
task.execute();
}
private class SingleStartUploadTask extends StartUploadTask {
@ -85,29 +90,22 @@ public class ShareActivity extends AuthenticatedActivity {
protected void onAuthCookieAcquired(String authCookie) {
super.onAuthCookieAcquired(authCookie);
app.getApi().setAuthCookie(authCookie);
Intent intent = getIntent();
if(intent.getAction().equals(Intent.ACTION_SEND)) {
mediaUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if(intent.hasExtra(UploadService.EXTRA_SOURCE)) {
source = intent.getStringExtra(UploadService.EXTRA_SOURCE);
} else {
source = Contribution.SOURCE_EXTERNAL;
}
mimeType = intent.getType();
if(mimeType.startsWith("image/")) {
ImageLoader.getInstance().displayImage(mediaUri.toString(), backgroundImageView);
}
Intent uploadServiceIntent = new Intent(getApplicationContext(), UploadService.class);
uploadServiceIntent.setAction(UploadService.ACTION_START_SERVICE);
startService(uploadServiceIntent);
bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE);
shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
if(shareView == null) {
shareView = new SingleUploadFragment();
this.getSupportFragmentManager()
.beginTransaction()
.add(R.id.single_upload_fragment_container, shareView, "shareView")
.commit();
}
Intent uploadServiceIntent = new Intent(getApplicationContext(), UploadService.class);
uploadServiceIntent.setAction(UploadService.ACTION_START_SERVICE);
startService(uploadServiceIntent);
bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onAuthFailure() {
@ -117,8 +115,6 @@ public class ShareActivity extends AuthenticatedActivity {
finish();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -128,28 +124,23 @@ public class ShareActivity extends AuthenticatedActivity {
app = (CommonsApplication)this.getApplicationContext();
backgroundImageView = (ImageView)findViewById(R.id.backgroundImage);
titleEdit = (EditText)findViewById(R.id.titleEdit);
descEdit = (EditText)findViewById(R.id.descEdit);
TextWatcher uploadEnabler = new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { }
Intent intent = getIntent();
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {}
public void afterTextChanged(Editable editable) {
actionMenu.findItem(R.id.menu_upload_single).setEnabled(titleEdit.getText().length() != 0);
if(intent.getAction().equals(Intent.ACTION_SEND)) {
mediaUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if(intent.hasExtra(UploadService.EXTRA_SOURCE)) {
source = intent.getStringExtra(UploadService.EXTRA_SOURCE);
} else {
source = Contribution.SOURCE_EXTERNAL;
}
};
titleEdit.addTextChangedListener(uploadEnabler);
mimeType = intent.getType();
}
ImageLoader.getInstance().displayImage(mediaUri.toString(), backgroundImageView);
requestAuthToken();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
@ -160,25 +151,12 @@ public class ShareActivity extends AuthenticatedActivity {
}
}
private Menu actionMenu;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_share, menu);
actionMenu = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.menu_upload_single:
StartUploadTask task = new SingleStartUploadTask(ShareActivity.this, uploadService, titleEdit.getText().toString(), mediaUri, descEdit.getText().toString(), mimeType, source);
task.execute();
return true;
}
return super.onOptionsItemSelected(item);
}

View file

@ -0,0 +1,88 @@
package org.wikimedia.commons;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.nostra13.universalimageloader.core.ImageLoader;
import org.wikimedia.commons.contributions.Contribution;
public class SingleUploadFragment extends SherlockFragment {
public interface OnUploadActionInitiated {
void uploadActionInitiated(String title, String description);
}
private EditText titleEdit;
private EditText descEdit;
private OnUploadActionInitiated uploadActionInitiatedHandler;
private Menu actionMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.activity_share, menu);
actionMenu = menu;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_upload_single:
uploadActionInitiatedHandler.uploadActionInitiated(titleEdit.getText().toString(), descEdit.getText().toString());
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_single_upload, null);
titleEdit = (EditText)rootView.findViewById(R.id.titleEdit);
descEdit = (EditText)rootView.findViewById(R.id.descEdit);
TextWatcher uploadEnabler = new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { }
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {}
public void afterTextChanged(Editable editable) {
if(actionMenu == null) {
getSherlockActivity().invalidateOptionsMenu();
}
actionMenu.findItem(R.id.menu_upload_single).setEnabled(titleEdit.getText().length() != 0);
}
};
titleEdit.addTextChangedListener(uploadEnabler);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
uploadActionInitiatedHandler = (OnUploadActionInitiated) activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
}