jenkins-bot has submitted this change and it was merged.
Change subject: Turn other Activities into Fragments
......................................................................
Turn other Activities into Fragments
- Things launched from the Nav menu are now Fragments that replace each
other in the PageActivity container, and create a backstack in the
FragmentManager.
- Made full-text search into a Fragment
- Made the PageActivity have a real ActionBar (to be built out in the next
patch), into which the actions of the fragments are added.
- Made sure that savedInstanceState preserves the order of the fragment
backstack.
- Login activity to be dealt with in another patch...
Change-Id: If9c2c11014745e75f3dbde86a724d555470c8f61
---
M wikipedia/AndroidManifest.xml
R wikipedia/res/layout/fragment_history.xml
R wikipedia/res/layout/fragment_nearby.xml
R wikipedia/res/layout/fragment_saved_pages.xml
R wikipedia/res/layout/fragment_search_results.xml
M wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
R wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
R wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
M wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
R wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
R wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
13 files changed, 284 insertions(+), 249 deletions(-)
Approvals:
BearND: Looks good to me, approved
jenkins-bot: Verified
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index 94b7da9..488eb9f 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -43,7 +43,6 @@
<!-- Don't delete the meta-data field above -->
<activity android:name=".page.PageActivity"
- android:theme="@style/NoTitle"
android:windowSoftInputMode="stateHidden"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
>
@@ -59,29 +58,6 @@
<data android:host="*.wikipedia.org"
android:pathPrefix="/wiki/" android:scheme="http" />
<data android:host="*.wikipedia.org"
android:pathPrefix="/wiki/" android:scheme="https" />
</intent-filter>
- </activity>
- <activity
- android:name=".history.HistoryActivity"
- android:label="@string/history_activity_title"
-
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
- android:windowSoftInputMode="stateHidden|adjustResize"
- >
- </activity>
-
- <activity
- android:name=".savedpages.SavedPagesActivity"
- android:label="@string/saved_pages_activity_title"
-
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
- android:windowSoftInputMode="stateHidden|adjustResize"
- >
- </activity>
-
- <activity
- android:name=".nearby.NearbyActivity"
- android:label="@string/nearby_activity_title"
-
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
- android:windowSoftInputMode="stateHidden|adjustResize"
- >
</activity>
<activity android:name="org.acra.CrashReportDialog"
diff --git a/wikipedia/res/layout/activity_history.xml
b/wikipedia/res/layout/fragment_history.xml
similarity index 100%
rename from wikipedia/res/layout/activity_history.xml
rename to wikipedia/res/layout/fragment_history.xml
diff --git a/wikipedia/res/layout/activity_nearby.xml
b/wikipedia/res/layout/fragment_nearby.xml
similarity index 100%
rename from wikipedia/res/layout/activity_nearby.xml
rename to wikipedia/res/layout/fragment_nearby.xml
diff --git a/wikipedia/res/layout/activity_saved_pages.xml
b/wikipedia/res/layout/fragment_saved_pages.xml
similarity index 100%
rename from wikipedia/res/layout/activity_saved_pages.xml
rename to wikipedia/res/layout/fragment_saved_pages.xml
diff --git a/wikipedia/res/layout/dialog_search_results.xml
b/wikipedia/res/layout/fragment_search_results.xml
similarity index 100%
rename from wikipedia/res/layout/dialog_search_results.xml
rename to wikipedia/res/layout/fragment_search_results.xml
diff --git a/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
b/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
index b133898..e6dda14 100644
--- a/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
@@ -13,13 +13,13 @@
import android.widget.TextView;
import android.widget.Toast;
import org.wikipedia.analytics.LoginFunnel;
-import org.wikipedia.nearby.NearbyActivity;
-import org.wikipedia.savedpages.SavedPagesActivity;
+import org.wikipedia.history.HistoryFragment;
import org.wikipedia.events.RequestMainPageEvent;
-import org.wikipedia.history.HistoryActivity;
import org.wikipedia.login.LoginActivity;
+import org.wikipedia.nearby.NearbyFragment;
import org.wikipedia.page.PageActivity;
import org.wikipedia.random.RandomHandler;
+import org.wikipedia.savedpages.SavedPagesFragment;
import org.wikipedia.settings.SettingsActivity;
public class NavDrawerFragment extends Fragment implements
View.OnClickListener {
@@ -136,16 +136,13 @@
app.getBus().post(new RequestMainPageEvent());
break;
case R.id.nav_item_history:
- intent.setClass(this.getActivity(), HistoryActivity.class);
- getActivity().startActivityForResult(intent,
PageActivity.ACTIVITY_REQUEST_HISTORY);
+ ((PageActivity)getActivity()).pushFragment(new
HistoryFragment());
break;
case R.id.nav_item_saved_pages:
- intent.setClass(this.getActivity(), SavedPagesActivity.class);
- getActivity().startActivityForResult(intent,
PageActivity.ACTIVITY_REQUEST_SAVEDPAGES);
+ ((PageActivity)getActivity()).pushFragment(new
SavedPagesFragment());
break;
case R.id.nav_item_nearby:
- intent.setClass(this.getActivity(), NearbyActivity.class);
- getActivity().startActivityForResult(intent,
PageActivity.ACTIVITY_REQUEST_NEARBY);
+ ((PageActivity)getActivity()).pushFragment(new
NearbyFragment());
break;
case R.id.nav_item_more:
intent.setClass(this.getActivity(), SettingsActivity.class);
diff --git a/wikipedia/src/main/java/org/wikipedia/history/HistoryActivity.java
b/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
similarity index 75%
rename from wikipedia/src/main/java/org/wikipedia/history/HistoryActivity.java
rename to wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
index 167832c..723dd7d 100644
--- a/wikipedia/src/main/java/org/wikipedia/history/HistoryActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/history/HistoryFragment.java
@@ -3,20 +3,17 @@
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.text.Editable;
import android.text.TextWatcher;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
+import android.view.*;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
@@ -24,17 +21,14 @@
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import org.wikipedia.R;
-import org.wikipedia.ThemedActionBarActivity;
-import org.wikipedia.Utils;
import org.wikipedia.WikipediaApp;
-import org.wikipedia.page.PageActivity;
+import org.wikipedia.events.NewWikiPageNavigationEvent;
import org.wikipedia.pageimages.PageImage;
import java.text.DateFormat;
import java.util.Date;
-public class HistoryActivity extends ThemedActionBarActivity implements
LoaderManager.LoaderCallbacks<Cursor> {
- public static final int ACTIVITY_RESULT_HISTORY_SELECT = 1;
+public class HistoryFragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor> {
private ListView historyEntryList;
private View historyEmptyContainer;
@@ -47,16 +41,28 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- app = (WikipediaApp)getApplicationContext();
+ app = WikipediaApp.getInstance();
+ setHasOptionsMenu(true);
+ }
- setContentView(R.layout.activity_history);
- historyEntryList = (ListView) findViewById(R.id.history_entry_list);
- historyEmptyContainer = findViewById(R.id.history_empty_container);
- historyEmptyTitle = (TextView) findViewById(R.id.history_empty_title);
- historyEmptyMessage = (TextView)
findViewById(R.id.history_empty_message);
- entryFilter = (EditText) findViewById(R.id.history_search_list);
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_history, container,
false);
- adapter = new HistoryEntryAdapter(this, null, true);
+ historyEntryList = (ListView)
rootView.findViewById(R.id.history_entry_list);
+ historyEmptyContainer =
rootView.findViewById(R.id.history_empty_container);
+ historyEmptyTitle = (TextView)
rootView.findViewById(R.id.history_empty_title);
+ historyEmptyMessage = (TextView)
rootView.findViewById(R.id.history_empty_message);
+ entryFilter = (EditText)
rootView.findViewById(R.id.history_search_list);
+
+ app.adjustDrawableToTheme(((ImageView)
rootView.findViewById(R.id.history_empty_image)).getDrawable());
+ return rootView;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ adapter = new HistoryEntryAdapter(getActivity(), null, true);
historyEntryList.setAdapter(adapter);
historyEntryList.setEmptyView(historyEmptyContainer);
@@ -74,13 +80,11 @@
@Override
public void afterTextChanged(Editable editable) {
- getSupportLoaderManager().restartLoader(0, null,
HistoryActivity.this);
+
getActivity().getSupportLoaderManager().restartLoader(0, null,
HistoryFragment.this);
if (editable.length() == 0) {
historyEmptyTitle.setText(R.string.history_empty_title);
historyEmptyMessage.setVisibility(View.VISIBLE);
} else {
- //getString() is now redundant because this
message no longer has any parameters
- //Left in for backwards compatibility until all
version of this message are translated
historyEmptyTitle.setText(getString(R.string.history_search_empty_message,
editable.toString()));
historyEmptyMessage.setVisibility(View.GONE);
}
@@ -92,29 +96,25 @@
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
HistoryEntry oldEntry = (HistoryEntry) view.getTag();
HistoryEntry newEntry = new
HistoryEntry(oldEntry.getTitle(), HistoryEntry.SOURCE_HISTORY);
-
- Intent intent = new Intent();
- intent.setClass(HistoryActivity.this, PageActivity.class);
- intent.setAction(PageActivity.ACTION_PAGE_FOR_TITLE);
- intent.putExtra(PageActivity.EXTRA_PAGETITLE,
oldEntry.getTitle());
- intent.putExtra(PageActivity.EXTRA_HISTORYENTRY, newEntry);
- setResult(ACTIVITY_RESULT_HISTORY_SELECT, intent);
- finish();
+ app.getBus().post(new
NewWikiPageNavigationEvent(oldEntry.getTitle(), newEntry));
}
});
- getSupportLoaderManager().initLoader(0, null, this);
- app.adjustDrawableToTheme(((ImageView)
findViewById(R.id.history_empty_image)).getDrawable());
+ getActivity().getSupportLoaderManager().initLoader(0, null, this);
+ getActivity().getSupportLoaderManager().restartLoader(0, null, this);
}
@Override
- public void onPause() {
- Utils.hideSoftKeyboard(this);
- super.onPause();
+ public void onDestroyView() {
+ getActivity().getSupportLoaderManager().destroyLoader(0);
+ super.onDestroyView();
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
+ if (!isAdded()) {
+ return null;
+ }
String selection = null;
String[] selectionArgs = null;
historyEmptyContainer.setVisibility(View.GONE);
@@ -126,7 +126,7 @@
selectionArgs = new String[]{"%" + searchStr + "%"};
}
return new CursorLoader(
- this,
+ getActivity(),
Uri.parse(HistoryEntry.PERSISTANCE_HELPER.getBaseContentURI().toString() + "/"
+ PageImage.PERSISTANCE_HELPER.getTableName()),
null,
selection,
@@ -136,8 +136,11 @@
@Override
public void onLoadFinished(Loader<Cursor> cursorLoaderLoader, Cursor
cursorLoader) {
+ if (!isAdded()) {
+ return;
+ }
adapter.swapCursor(cursorLoader);
- supportInvalidateOptionsMenu();
+ getActivity().supportInvalidateOptionsMenu();
}
@Override
@@ -152,7 +155,7 @@
@Override
public View newView(Context context, Cursor cursor, ViewGroup
viewGroup) {
- return getLayoutInflater().inflate(R.layout.item_history_entry,
viewGroup, false);
+ return
getActivity().getLayoutInflater().inflate(R.layout.item_history_entry,
viewGroup, false);
}
private String getDateString(Date date) {
@@ -194,7 +197,7 @@
source.setImageResource(getImageForSource(entry.getSource()));
view.setTag(entry);
- Picasso.with(HistoryActivity.this)
+ Picasso.with(getActivity())
.load(cursor.getString(HistoryEntryContentProvider.COL_INDEX_IMAGE))
.placeholder(R.drawable.ic_pageimage_placeholder)
.error(R.drawable.ic_pageimage_placeholder)
@@ -221,28 +224,28 @@
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_history, menu);
- MenuItem clearAllItem = menu.findItem(R.id.menu_clear_all_history);
- clearAllItem.setVisible(historyEntryList.getCount() > 0);
- app.adjustDrawableToTheme(clearAllItem.getIcon());
- return true;
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.menu_history, menu);
+
app.adjustDrawableToTheme(menu.findItem(R.id.menu_clear_all_history).getIcon());
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
+ public void onPrepareOptionsMenu(Menu menu) {
+ if (historyEntryList == null) {
+ // in API10 this may be called before onCreateView...
+ return;
+ }
menu.findItem(R.id.menu_clear_all_history).setEnabled(historyEntryList.getCount()
> 0);
- return super.onPrepareOptionsMenu(menu);
+ super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
- finish();
- return true;
+ return false;
case R.id.menu_clear_all_history:
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = new
AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_title_clear_history);
builder.setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener() {
@Override
diff --git a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
similarity index 89%
rename from wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
rename to wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
index 4a0bbe4..617f704 100644
--- a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyFragment.java
@@ -3,11 +3,9 @@
import org.wikipedia.PageTitle;
import org.wikipedia.R;
import org.wikipedia.Site;
-import org.wikipedia.ThemedActionBarActivity;
import org.wikipedia.Utils;
import org.wikipedia.WikipediaApp;
import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.page.PageActivity;
import org.mediawiki.api.json.ApiException;
import com.squareup.picasso.Picasso;
import de.keyboardsurfer.android.widget.crouton.Crouton;
@@ -31,18 +29,14 @@
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Settings;
+import android.support.v4.app.Fragment;
import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.Surface;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
+import android.view.*;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
+import org.wikipedia.events.NewWikiPageNavigationEvent;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
@@ -54,8 +48,7 @@
/**
* Displays a list of nearby pages.
*/
-public class NearbyActivity extends ThemedActionBarActivity implements
SensorEventListener {
- public static final int ACTIVITY_RESULT_NEARBY_SELECT = 1;
+public class NearbyFragment extends Fragment implements SensorEventListener {
private static final String PREF_KEY_UNITS = "nearbyUnits";
private static final String NEARBY_LAST_RESULT = "lastRes";
private static final String NEARBY_LAST_LOCATION = "lastLoc";
@@ -108,17 +101,27 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- app = (WikipediaApp) getApplicationContext();
+ app = WikipediaApp.getInstance();
site = app.getPrimarySite();
+ adapter = new NearbyAdapter(getActivity(), new
ArrayList<NearbyPage>());
+ setHasOptionsMenu(true);
+ }
- setContentView(R.layout.activity_nearby);
- nearbyList = (ListView) findViewById(R.id.nearby_list);
- nearbyLoadingContainer = findViewById(R.id.nearby_loading_container);
- nearbyEmptyContainer = findViewById(R.id.nearby_empty_container);
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_nearby, container,
false);
+
+ nearbyList = (ListView) rootView.findViewById(R.id.nearby_list);
+ nearbyLoadingContainer =
rootView.findViewById(R.id.nearby_loading_container);
+ nearbyEmptyContainer =
rootView.findViewById(R.id.nearby_empty_container);
nearbyEmptyContainer.setVisibility(View.GONE);
+ return rootView;
+ }
- adapter = new NearbyAdapter(this, new ArrayList<NearbyPage>());
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
nearbyList.setAdapter(adapter);
nearbyList.setEmptyView(nearbyLoadingContainer);
@@ -128,14 +131,7 @@
NearbyPage nearbyPage = adapter.getItem(position);
PageTitle title = new PageTitle(nearbyPage.getTitle(), site,
nearbyPage.getThumblUrl());
HistoryEntry newEntry = new HistoryEntry(title,
HistoryEntry.SOURCE_NEARBY);
-
- Intent intent = new Intent();
- intent.setClass(NearbyActivity.this, PageActivity.class);
- intent.setAction(PageActivity.ACTION_PAGE_FOR_TITLE);
- intent.putExtra(PageActivity.EXTRA_PAGETITLE, title);
- intent.putExtra(PageActivity.EXTRA_HISTORYENTRY, newEntry);
- setResult(ACTIVITY_RESULT_NEARBY_SELECT, intent);
- finish();
+ app.getBus().post(new NewWikiPageNavigationEvent(title,
newEntry));
}
});
@@ -165,7 +161,7 @@
});
// Acquire a reference to the system Location Manager
- locationManager = (LocationManager)
this.getSystemService(Context.LOCATION_SERVICE);
+ locationManager = (LocationManager)
getActivity().getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
locationListener = new LocationListener() {
@@ -187,13 +183,17 @@
}
};
- mSensorManager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
+ mSensorManager = (SensorManager)
getActivity().getSystemService(Context.SENSOR_SERVICE);
mAccelerometer =
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer =
mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
compassViews = new ArrayList<NearbyCompassView>();
- if (savedInstanceState != null) {
+ if (!adapter.isEmpty()) {
+ //we
+ setupGeomagneticField();
+ showNearbyPages(lastResult);
+ } else if (savedInstanceState != null) {
lastLocation =
savedInstanceState.getParcelable(NEARBY_LAST_LOCATION);
nextLocation =
savedInstanceState.getParcelable(NEARBY_NEXT_LOCATION);
lastResult = savedInstanceState.getParcelable(NEARBY_LAST_RESULT);
@@ -203,7 +203,7 @@
setRefreshingState(true);
}
- SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getActivity());
//do we already have a preference for metric/imperial units?
if (prefs.contains(PREF_KEY_UNITS)) {
setImperialUnits(prefs.getBoolean(PREF_KEY_UNITS, false));
@@ -216,7 +216,7 @@
}
@Override
- protected void onSaveInstanceState(Bundle outState) {
+ public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (lastResult != null) {
outState.putParcelable(NEARBY_LAST_LOCATION, lastLocation);
@@ -226,7 +226,7 @@
}
@Override
- protected void onResume() {
+ public void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer,
SensorManager.SENSOR_DELAY_UI);
mSensorManager.registerListener(this, mMagnetometer,
SensorManager.SENSOR_DELAY_UI);
@@ -268,7 +268,7 @@
}
private void showDialogForSettings() {
- AlertDialog.Builder alert = new AlertDialog.Builder(this);
+ AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setMessage(R.string.nearby_dialog_goto_settings);
alert.setPositiveButton(android.R.string.ok, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
@@ -278,7 +278,6 @@
});
alert.setNegativeButton(android.R.string.cancel, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
- finish();
}
});
alert.setCancelable(false);
@@ -294,7 +293,7 @@
setupGeomagneticField();
if (lastLocation == null || (refreshing && getDistance(lastLocation)
>= MIN_DISTANCE_METERS)) {
- new NearbyFetchTask(NearbyActivity.this, site, location) {
+ new NearbyFetchTask(getActivity(), site, location) {
@Override
public void onFinish(NearbyResult result) {
lastResult = result;
@@ -303,11 +302,14 @@
@Override
public void onCatch(Throwable caught) {
+ if (!isAdded()) {
+ return;
+ }
if (caught instanceof ApiException && caught.getCause()
instanceof UnknownHostException) {
- Crouton.makeText(NearbyActivity.this,
R.string.nearby_no_network, Style.ALERT).show();
+ Crouton.makeText(getActivity(),
R.string.nearby_no_network, Style.ALERT).show();
} else if (caught instanceof NearbyFetchException) {
Log.e("Wikipedia", "Could not get list of nearby
places: " + caught.toString());
- Crouton.makeText(NearbyActivity.this,
R.string.nearby_server_error, Style.ALERT).show();
+ Crouton.makeText(getActivity(),
R.string.nearby_server_error, Style.ALERT).show();
} else {
super.onCatch(caught);
}
@@ -410,7 +412,7 @@
nearbyLoadingContainer.setVisibility(View.GONE);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- invalidateOptionsMenu();
+ getActivity().invalidateOptionsMenu();
}
}
@@ -465,30 +467,28 @@
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_nearby, menu);
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.menu_nearby, menu);
app.adjustDrawableToTheme(menu.findItem(R.id.menu_refresh_nearby).getIcon());
menu.findItem(R.id.menu_metric_imperial).setTitle(showImperial
? getString(R.string.nearby_set_metric)
: getString(R.string.nearby_set_imperial));
- return true;
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
+ public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_refresh_nearby).setEnabled(!refreshing);
menu.findItem(R.id.menu_metric_imperial).setTitle(showImperial
? getString(R.string.nearby_set_metric)
: getString(R.string.nearby_set_imperial));
- return super.onPrepareOptionsMenu(menu);
+ super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
- finish();
- return true;
+ return false;
case R.id.menu_refresh_nearby:
setRefreshingState(true);
requestLocationUpdates();
@@ -504,9 +504,9 @@
private void setImperialUnits(boolean imperial) {
showImperial = imperial;
- SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.edit().putBoolean(PREF_KEY_UNITS, showImperial).commit();
- this.supportInvalidateOptionsMenu();
+ getActivity().supportInvalidateOptionsMenu();
}
@@ -537,8 +537,8 @@
if (nearbyPage.getLocation() != null) {
// set the calculated angle as the base angle for our compass
view
viewHolder.thumbnail.setAngle((float)
calculateAngle(nearbyPage.getLocation()));
-
viewHolder.thumbnail.setMaskColor(getResources().getColor(Utils.getThemedAttributeId(NearbyActivity.this,
R.attr.page_background_color)));
-
viewHolder.thumbnail.setTickColor(getResources().getColor(R.color.button_light));
+
viewHolder.thumbnail.setMaskColor(getResources().getColor(Utils.getThemedAttributeId(getActivity(),
R.attr.page_background_color)));
+
viewHolder.thumbnail.setTickColor(getResources().getColor(R.color.blue_progressive));
if (!compassViews.contains(viewHolder.thumbnail)) {
compassViews.add(viewHolder.thumbnail);
}
@@ -553,7 +553,7 @@
viewHolder.thumbnail.setEnabled(false);
}
- Picasso.with(NearbyActivity.this)
+ Picasso.with(getActivity())
.load(nearbyPage.getThumblUrl())
.placeholder(R.drawable.ic_pageimage_placeholder)
.error(R.drawable.ic_pageimage_placeholder)
@@ -633,7 +633,7 @@
azimuth += declination;
//adjust for device screen rotation
- int rotation = ((WindowManager)
getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
+ int rotation = ((WindowManager)
getActivity().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
switch (rotation) {
case Surface.ROTATION_90:
azimuth += quarterTurn;
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
index 7ee1192..1371a97 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
@@ -8,38 +8,32 @@
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.text.Html;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
+import android.view.View;
import android.view.Window;
+
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
+import org.wikipedia.*;
import org.wikipedia.events.*;
-import org.wikipedia.nearby.NearbyActivity;
import org.wikipedia.onboarding.OnboardingActivity;
-import org.wikipedia.savedpages.SavedPagesActivity;
-import org.wikipedia.NavDrawerFragment;
-import org.wikipedia.PageTitle;
-import org.wikipedia.R;
-import org.wikipedia.Site;
-import org.wikipedia.Utils;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.history.HistoryActivity;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.interlanguage.LangLinksActivity;
import org.wikipedia.recurring.RecurringTasksExecutor;
+import org.wikipedia.search.FullSearchFragment;
import org.wikipedia.search.SearchArticlesFragment;
import org.wikipedia.settings.PrefKeys;
import org.wikipedia.staticdata.MainPageNameData;
import org.wikipedia.theme.ThemeChooserDialog;
-public class PageActivity extends FragmentActivity {
+public class PageActivity extends ThemedActionBarActivity {
public static final String ACTION_PAGE_FOR_TITLE =
"org.wikipedia.page_for_title";
public static final String EXTRA_PAGETITLE = "org.wikipedia.pagetitle";
public static final String EXTRA_HISTORYENTRY =
"org.wikipedia.history.historyentry";
@@ -48,15 +42,13 @@
private static final String KEY_LAST_FRAGMENT = "lastFragment";
private static final String KEY_LAST_FRAGMENT_ARGS = "lastFragmentArgs";
- public static final int ACTIVITY_REQUEST_HISTORY = 0;
- public static final int ACTIVITY_REQUEST_SAVEDPAGES = 1;
- public static final int ACTIVITY_REQUEST_LANGLINKS = 2;
- public static final int ACTIVITY_REQUEST_NEARBY = 3;
- public static final int ACTIVITY_REQUEST_EDIT_SECTION = 4;
+ public static final int ACTIVITY_REQUEST_LANGLINKS = 0;
+ public static final int ACTIVITY_REQUEST_EDIT_SECTION = 1;
private Bus bus;
private WikipediaApp app;
+ private View fragmentContainerView;
private SearchArticlesFragment searchArticlesFragment;
private DrawerLayout drawerLayout;
private NavDrawerFragment fragmentNavdrawer;
@@ -100,7 +92,6 @@
public void onCreate(Bundle savedInstanceState) {
app = (WikipediaApp) getApplicationContext();
setTheme(app.getCurrentTheme());
- requestWindowFeature(Window.FEATURE_NO_TITLE);
requestWindowFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
super.onCreate(savedInstanceState);
@@ -128,6 +119,8 @@
searchArticlesFragment = (SearchArticlesFragment)
getSupportFragmentManager().findFragmentById(R.id.search_fragment);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
fragmentNavdrawer = (NavDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navdrawer);
+
+ fragmentContainerView = findViewById(R.id.content_fragment_container);
searchArticlesFragment.setDrawerLayout(drawerLayout);
@@ -229,6 +222,14 @@
*/
public void popFragment() {
getSupportFragmentManager().popBackStack();
+ }
+
+ public void searchFullText(final String searchTerm) {
+ if (getTopFragment() instanceof FullSearchFragment) {
+ ((FullSearchFragment)getTopFragment()).newSearch(searchTerm);
+ } else {
+ pushFragment(FullSearchFragment.newInstance(searchTerm));
+ }
}
private void displayNewPage(final PageTitle title, final HistoryEntry
entry) {
@@ -523,17 +524,19 @@
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data)
{
+ public void onActivityResult(int requestCode, int resultCode, final Intent
data) {
if (bus == null) {
bus = app.getBus();
bus.register(this);
Log.d("Wikipedia", "Registering bus");
}
- if ((requestCode == ACTIVITY_REQUEST_HISTORY && resultCode ==
HistoryActivity.ACTIVITY_RESULT_HISTORY_SELECT)
- || (requestCode == ACTIVITY_REQUEST_SAVEDPAGES && resultCode ==
SavedPagesActivity.ACTIVITY_RESULT_SAVEDPAGE_SELECT)
- || (requestCode == ACTIVITY_REQUEST_NEARBY && resultCode ==
NearbyActivity.ACTIVITY_RESULT_NEARBY_SELECT)
- || (requestCode == ACTIVITY_REQUEST_LANGLINKS && resultCode ==
LangLinksActivity.ACTIVITY_RESULT_LANGLINK_SELECT)) {
- handleIntent(data);
+ if ((requestCode == ACTIVITY_REQUEST_LANGLINKS && resultCode ==
LangLinksActivity.ACTIVITY_RESULT_LANGLINK_SELECT)) {
+ fragmentContainerView.post(new Runnable() {
+ @Override
+ public void run() {
+ handleIntent(data);
+ }
+ });
} else {
super.onActivityResult(requestCode, resultCode, data);
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index ffcde70..2ce395d 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -17,7 +17,8 @@
import org.mediawiki.api.json.ApiException;
import org.mediawiki.api.json.ApiResult;
import org.mediawiki.api.json.RequestBuilder;
-import org.wikipedia.*;
+import org.wikipedia.NightModeHandler;
+import org.wikipedia.Site;
import org.wikipedia.analytics.ConnectionIssueFunnel;
import org.wikipedia.editing.EditSectionActivity;
import org.wikipedia.events.ShowToCEvent;
@@ -25,6 +26,12 @@
import org.wikipedia.pageimages.PageImagesTask;
import org.wikipedia.views.ObservableWebView;
import org.wikipedia.analytics.SavedPagesFunnel;
+import org.wikipedia.PageTitle;
+import org.wikipedia.QuickReturnHandler;
+import org.wikipedia.R;
+import org.wikipedia.Utils;
+import org.wikipedia.ViewAnimations;
+import org.wikipedia.WikipediaApp;
import org.wikipedia.bridge.CommunicationBridge;
import org.wikipedia.bridge.StyleLoader;
import org.wikipedia.concurrency.SaneAsyncTask;
@@ -270,6 +277,7 @@
searchArticlesFragment.setTocEnabled(false);
savedPagesFunnel =
app.getFunnelManager().getSavedPagesFunnel(title.getSite());
+
connectionIssueFunnel = new ConnectionIssueFunnel(app);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
@@ -287,6 +295,7 @@
bridge = new CommunicationBridge(webView,
"file:///android_asset/index.html");
setupMessageHandlers();
+
Utils.setupDirectionality(title.getSite().getLanguage(),
Locale.getDefault().getLanguage(), bridge);
linkHandler = new LinkHandler(getActivity(), bridge) {
@Override
diff --git
a/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesActivity.java
b/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
similarity index 76%
rename from
wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesActivity.java
rename to
wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
index 944bc85..37ac331 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
@@ -3,35 +3,31 @@
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.view.ActionMode;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.SparseBooleanArray;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
+import android.view.*;
import android.widget.*;
import com.squareup.picasso.Picasso;
import org.wikipedia.R;
-import org.wikipedia.ThemedActionBarActivity;
import org.wikipedia.WikipediaApp;
+import org.wikipedia.events.NewWikiPageNavigationEvent;
import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.page.PageActivity;
import org.wikipedia.pageimages.PageImage;
import java.util.ArrayList;
-public class SavedPagesActivity extends ThemedActionBarActivity implements
LoaderManager.LoaderCallbacks<Cursor> {
- public static final int ACTIVITY_RESULT_SAVEDPAGE_SELECT = 1;
+public class SavedPagesFragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor> {
private ListView savedPagesList;
private View savedPagesEmptyContainer;
@@ -48,17 +44,27 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- app = (WikipediaApp)getApplicationContext();
+ app = WikipediaApp.getInstance();
+ setHasOptionsMenu(true);
+ }
- setContentView(R.layout.activity_saved_pages);
- savedPagesList = (ListView) findViewById(R.id.saved_pages_list);
- savedPagesEmptyContainer =
findViewById(R.id.saved_pages_empty_container);
- savedPagesEmptyTitle = (TextView)
findViewById(R.id.saved_pages_empty_title);
- savedPagesEmptyMessage = (TextView)
findViewById(R.id.saved_pages_empty_message);
- entryFilter = (EditText) findViewById(R.id.saved_pages_search_list);
- savedPagesEmptyImage = (ImageView)
findViewById(R.id.saved_pages_empty_image);
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_saved_pages,
container, false);
- adapter = new SavedPagesAdapter(this, null, true);
+ savedPagesList = (ListView)
rootView.findViewById(R.id.saved_pages_list);
+ savedPagesEmptyContainer =
rootView.findViewById(R.id.saved_pages_empty_container);
+ savedPagesEmptyTitle = (TextView)
rootView.findViewById(R.id.saved_pages_empty_title);
+ savedPagesEmptyMessage = (TextView)
rootView.findViewById(R.id.saved_pages_empty_message);
+ entryFilter = (EditText)
rootView.findViewById(R.id.saved_pages_search_list);
+ savedPagesEmptyImage = (ImageView)
rootView.findViewById(R.id.saved_pages_empty_image);
+ return rootView;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ adapter = new SavedPagesAdapter(getActivity(), null, true);
savedPagesList.setAdapter(adapter);
savedPagesList.setEmptyView(savedPagesEmptyContainer);
@@ -69,7 +75,7 @@
return false;
}
savedPagesList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- actionMode = startSupportActionMode(new ActionMode.Callback() {
+ actionMode =
((ActionBarActivity)getActivity()).startSupportActionMode(new
ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu
menu) {
mode.getMenuInflater().inflate(R.menu.menu_saved_pages_context, menu);
@@ -104,10 +110,10 @@
for (int i = 0; i < checkedItems.size(); i++) {
if (checkedItems.valueAt(i)) {
final SavedPage page =
SavedPage.PERSISTANCE_HELPER.fromCursor((Cursor)
adapter.getItem(checkedItems.keyAt(i)));
- new
DeleteSavedPageTask(SavedPagesActivity.this, page) {
+ new DeleteSavedPageTask(getActivity(), page) {
@Override
public void onFinish(Boolean result) {
-
Toast.makeText(SavedPagesActivity.this, R.string.toast_saved_page_deleted,
Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(),
R.string.toast_saved_page_deleted, Toast.LENGTH_SHORT).show();
}
}.execute();
}
@@ -143,14 +149,12 @@
@Override
public void afterTextChanged(Editable editable) {
- getSupportLoaderManager().restartLoader(0, null,
SavedPagesActivity.this);
+
getActivity().getSupportLoaderManager().restartLoader(0, null,
SavedPagesFragment.this);
if (editable.length() == 0) {
savedPagesEmptyTitle.setText(R.string.saved_pages_empty_title);
savedPagesEmptyImage.setVisibility(View.VISIBLE);
savedPagesEmptyMessage.setVisibility(View.VISIBLE);
} else {
- //getString() is now redundant because this
message no longer has any parameters
- //Left in for backwards compatibility until all
version of this message are translated
savedPagesEmptyTitle.setText(getString(R.string.saved_pages_search_empty_message,
editable.toString()));
savedPagesEmptyImage.setVisibility(View.GONE);
savedPagesEmptyMessage.setVisibility(View.GONE);
@@ -165,24 +169,28 @@
if (actionMode == null) {
SavedPage savedPage = (SavedPage) view.getTag();
HistoryEntry newEntry = new
HistoryEntry(savedPage.getTitle(), HistoryEntry.SOURCE_SAVED_PAGE);
-
- Intent intent = new Intent();
- intent.setClass(SavedPagesActivity.this,
PageActivity.class);
- intent.setAction(PageActivity.ACTION_PAGE_FOR_TITLE);
- intent.putExtra(PageActivity.EXTRA_PAGETITLE,
savedPage.getTitle());
- intent.putExtra(PageActivity.EXTRA_HISTORYENTRY, newEntry);
- setResult(ACTIVITY_RESULT_SAVEDPAGE_SELECT, intent);
- finish();
+ app.getBus().post(new
NewWikiPageNavigationEvent(savedPage.getTitle(), newEntry));
}
}
});
- getSupportLoaderManager().initLoader(0, null, this);
app.adjustDrawableToTheme(savedPagesEmptyImage.getDrawable());
+
+ getActivity().getSupportLoaderManager().initLoader(0, null, this);
+ getActivity().getSupportLoaderManager().restartLoader(0, null, this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ getActivity().getSupportLoaderManager().destroyLoader(0);
+ super.onDestroyView();
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
+ if (!isAdded()) {
+ return null;
+ }
String selection = null;
String[] selectionArgs = null;
savedPagesEmptyContainer.setVisibility(View.GONE);
@@ -194,7 +202,7 @@
selectionArgs = new String[]{"%" + searchStr + "%"};
}
return new CursorLoader(
- this,
+ getActivity(),
Uri.parse(SavedPage.PERSISTANCE_HELPER.getBaseContentURI().toString() + "/" +
PageImage.PERSISTANCE_HELPER.getTableName()),
null,
selection,
@@ -204,8 +212,11 @@
@Override
public void onLoadFinished(Loader<Cursor> cursorLoaderLoader, Cursor
cursorLoader) {
+ if (!isAdded()) {
+ return;
+ }
adapter.swapCursor(cursorLoader);
- supportInvalidateOptionsMenu();
+ getActivity().supportInvalidateOptionsMenu();
}
@Override
@@ -220,7 +231,7 @@
@Override
public View newView(Context context, Cursor cursor, ViewGroup
viewGroup) {
- return getLayoutInflater().inflate(R.layout.item_saved_page_entry,
viewGroup, false);
+ return
getActivity().getLayoutInflater().inflate(R.layout.item_saved_page_entry,
viewGroup, false);
}
@Override
@@ -231,7 +242,7 @@
title.setText(entry.getTitle().getDisplayText());
view.setTag(entry);
- Picasso.with(SavedPagesActivity.this)
+ Picasso.with(getActivity())
.load(cursor.getString(SavedPageContentProvider.COL_INDEX_IMAGE))
.placeholder(R.drawable.ic_pageimage_placeholder)
.error(R.drawable.ic_pageimage_placeholder)
@@ -257,26 +268,28 @@
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_saved_pages, menu);
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.menu_saved_pages, menu);
app.adjustDrawableToTheme(menu.findItem(R.id.menu_refresh_all_saved_pages).getIcon());
app.adjustDrawableToTheme(menu.findItem(R.id.menu_clear_all_saved_pages).getIcon());
- return true;
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
-
menu.findItem(R.id.menu_clear_all_saved_pages).setVisible(savedPagesList.getCount()
> 0);
-
menu.findItem(R.id.menu_refresh_all_saved_pages).setVisible(savedPagesList.getCount()
> 0);
- return super.onPrepareOptionsMenu(menu);
+ public void onPrepareOptionsMenu(Menu menu) {
+ if (savedPagesList == null) {
+ // in API10 this may be called before onCreateView...
+ return;
+ }
+
menu.findItem(R.id.menu_clear_all_saved_pages).setEnabled(savedPagesList.getCount()
> 0);
+
menu.findItem(R.id.menu_refresh_all_saved_pages).setEnabled(savedPagesList.getCount()
> 0);
+ super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
- finish();
- return true;
+ return false;
case R.id.menu_refresh_all_saved_pages:
promptToRefreshAll();
return true;
@@ -289,7 +302,7 @@
}
private void promptToRefreshAll() {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_prompt_refresh_all_saved_pages);
builder.setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener() {
@Override
@@ -302,15 +315,15 @@
}
private void promptToDeleteAll() {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_title_clear_saved_pages);
builder.setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- new DeleteAllSavedPagesTask(SavedPagesActivity.this) {
+ new DeleteAllSavedPagesTask(getActivity()) {
@Override
public void onFinish(Void v) {
- Toast.makeText(SavedPagesActivity.this,
R.string.toast_saved_page_deleted, Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(),
R.string.toast_saved_page_deleted, Toast.LENGTH_SHORT).show();
}
}.execute();
}
@@ -328,7 +341,7 @@
savedPages.add(page);
}
}
- refreshHandler = new RefreshPagesHandler(SavedPagesActivity.this,
savedPages);
+ refreshHandler = new RefreshPagesHandler(getActivity(), savedPages);
refreshHandler.refresh();
}
@@ -338,7 +351,7 @@
SavedPage page = SavedPage.PERSISTANCE_HELPER.fromCursor((Cursor)
adapter.getItem(i));
savedPages.add(page);
}
- refreshHandler = new RefreshPagesHandler(SavedPagesActivity.this,
savedPages);
+ refreshHandler = new RefreshPagesHandler(getActivity(), savedPages);
refreshHandler.refresh();
}
diff --git a/wikipedia/src/main/java/org/wikipedia/search/FullSearchDialog.java
b/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java
similarity index 71%
rename from wikipedia/src/main/java/org/wikipedia/search/FullSearchDialog.java
rename to wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java
index c0cb6e7..82d3939 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/FullSearchDialog.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/FullSearchFragment.java
@@ -1,31 +1,33 @@
package org.wikipedia.search;
-import android.app.Dialog;
-import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
import android.text.Html;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.WindowManager;
import android.widget.*;
import com.squareup.picasso.Picasso;
import org.wikipedia.*;
+import org.wikipedia.events.NewWikiPageNavigationEvent;
+import org.wikipedia.history.HistoryEntry;
import org.wikipedia.pageimages.PageImagesTask;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-public class FullSearchDialog extends Dialog {
+public class FullSearchFragment extends Fragment {
+ private static final String KEY_SEARCH_TERM = "searchTerm";
private WikipediaApp app;
- private SearchArticlesFragment parentFragment;
private View searchResultsContainer;
private ListView searchResultsList;
private SearchResultAdapter adapter;
private TextView resultsStatusText;
- private String searchTerm;
+ private String searchTermCurrent;
private String searchTermOriginal;
private View searchFailedContainer;
@@ -42,64 +44,90 @@
private ParcelableLruCache<String> pageImagesCache
= new ParcelableLruCache<String>(MAX_CACHE_SIZE_IMAGES,
String.class);
- public FullSearchDialog(SearchArticlesFragment parent, String searchTerm) {
- super(parent.getActivity());
- this.parentFragment = parent;
- this.searchTerm = searchTerm;
- this.searchTermOriginal = searchTerm;
+ public static FullSearchFragment newInstance(String searchTerm) {
+ FullSearchFragment f = new FullSearchFragment();
+ Bundle args = new Bundle();
+ args.putString(KEY_SEARCH_TERM, searchTerm);
+ f.setArguments(args);
+ return f;
+ }
+
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
app = WikipediaApp.getInstance();
+ setHasOptionsMenu(true);
+ searchTermOriginal = getArguments().getString(KEY_SEARCH_TERM);
+ }
- LayoutInflater inflater = (LayoutInflater)
parent.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View dlgLayout = inflater.inflate(R.layout.dialog_search_results,
null);
- setContentView(dlgLayout);
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_search_results,
container, false);
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
- lp.copyFrom(getWindow().getAttributes());
- lp.width = WindowManager.LayoutParams.MATCH_PARENT;
- lp.height = WindowManager.LayoutParams.MATCH_PARENT;
- getWindow().setAttributes(lp);
-
//getWindow().setBackgroundDrawableResource(Utils.getThemedAttributeId(parent.getActivity(),
R.attr.window_background_color));
-
- setTitle(app.getString(R.string.search_results_title));
-
- searchResultsContainer =
dlgLayout.findViewById(R.id.search_results_container);
- searchResultsList = (ListView)
dlgLayout.findViewById(R.id.full_search_results_list);
+ searchResultsContainer =
rootView.findViewById(R.id.search_results_container);
+ searchResultsList = (ListView)
rootView.findViewById(R.id.full_search_results_list);
searchResultsList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
- parentFragment.navigateToTitle(((FullSearchResult)
searchResultsList.getAdapter().getItem(position)).getTitle());
- dismiss();
+ PageTitle title = ((FullSearchResult)
searchResultsList.getAdapter().getItem(position)).getTitle();
+ HistoryEntry historyEntry = new HistoryEntry(title,
HistoryEntry.SOURCE_SEARCH);
+ app.getBus().post(new NewWikiPageNavigationEvent(title,
historyEntry));
}
});
adapter = new SearchResultAdapter(inflater);
searchResultsList.setAdapter(adapter);
- resultsStatusText = (TextView)
dlgLayout.findViewById(R.id.search_results_status);
- searchFailedText = (TextView)
dlgLayout.findViewById(R.id.search_failed_text);
- searchFailedContainer =
dlgLayout.findViewById(R.id.search_failed_container);
+ resultsStatusText = (TextView)
rootView.findViewById(R.id.search_results_status);
+ searchFailedText = (TextView)
rootView.findViewById(R.id.search_failed_text);
+ searchFailedContainer =
rootView.findViewById(R.id.search_failed_container);
- searchRetryButton = dlgLayout.findViewById(R.id.search_retry_button);
+ searchRetryButton = rootView.findViewById(R.id.search_retry_button);
searchRetryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- doSearch(FullSearchDialog.this.searchTerm, false, 0);
+ doSearch(searchTermCurrent, false, 0);
}
});
- searchProgressBar = dlgLayout.findViewById(R.id.search_progress_bar);
+ searchProgressBar = rootView.findViewById(R.id.search_progress_bar);
+ return rootView;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
totalResults = new ArrayList<FullSearchResult>();
adapter.setResults(totalResults);
- doSearch(searchTerm, false, 0);
+ // if we already have a search term, then we must have been restored
from state or backstack
+ if (!TextUtils.isEmpty(searchTermOriginal)) {
+ doSearch(searchTermOriginal, false, 0);
+ }
+ }
+
+ public void newSearch(final String searchTerm) {
+ //update this fragment's arguments...
+ getArguments().putString(KEY_SEARCH_TERM, searchTerm);
+ //if we're already attached, then do the search...
+ if (isAdded()) {
+ doSearch(searchTerm, false, 0);
+ }
}
private void doSearch(final String searchTerm, final boolean
fromSuggestion, final int continueOffset) {
+ if (!fromSuggestion) {
+ this.searchTermCurrent = searchTerm;
+ this.searchTermOriginal = searchTerm;
+ }
+
(new FullSearchArticlesTask(app,
app.getAPIForSite(app.getPrimarySite()), app.getPrimarySite(), searchTerm,
continueOffset) {
@Override
public void onFinish(FullSearchResults results) {
+ if (!isAdded()) {
+ return;
+ }
lastResults = results;
totalResults.addAll(lastResults.getResults());
@@ -109,7 +137,7 @@
if (lastResults.getResults().size() == 0) {
searchResultsContainer.setVisibility(View.GONE);
searchFailedContainer.setVisibility(View.VISIBLE);
-
searchFailedText.setText(app.getString(R.string.search_no_results,
FullSearchDialog.this.searchTerm));
+
searchFailedText.setText(app.getString(R.string.search_no_results,
searchTermCurrent));
searchRetryButton.setVisibility(View.GONE);
} else {
searchResultsContainer.setVisibility(View.VISIBLE);
@@ -130,10 +158,13 @@
@Override
public void onCatch(Throwable caught) {
+ if (!isAdded()) {
+ return;
+ }
if (caught instanceof FullSearchSuggestionException) {
if (!fromSuggestion) {
- FullSearchDialog.this.searchTerm =
((FullSearchSuggestionException) caught).getSuggestion();
- doSearch(FullSearchDialog.this.searchTerm, true, 0);
+ searchTermCurrent = ((FullSearchSuggestionException)
caught).getSuggestion();
+ doSearch(searchTermCurrent, true, 0);
}
} else {
if (continueOffset == 0) {
@@ -143,7 +174,7 @@
searchFailedText.setText(app.getString(R.string.error_network_error));
searchRetryButton.setVisibility(View.VISIBLE);
} else {
- Toast.makeText(parentFragment.getActivity(),
parentFragment.getString(R.string.error_network_error),
Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(),
getString(R.string.error_network_error), Toast.LENGTH_SHORT).show();
}
}
}
@@ -255,7 +286,7 @@
//...and lastly, if we've scrolled to the last item in the list,
then
//continue searching!
if (position == results.size() - 1 &&
lastResults.getContinueOffset() > 0) {
- doSearch(searchTerm, false, lastResults.getContinueOffset());
+ doSearch(searchTermCurrent, false,
lastResults.getContinueOffset());
}
return convertView;
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index 5cc7be7..541aecd 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -35,6 +35,7 @@
import org.wikipedia.events.WikipediaZeroStateChangeEvent;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.page.PageActionsHandler;
+import org.wikipedia.page.PageActivity;
import org.wikipedia.page.PopupMenu;
import java.util.List;
@@ -151,7 +152,8 @@
@Override
public void onClick(View view) {
Utils.hideSoftKeyboard(getActivity());
- (new FullSearchDialog(SearchArticlesFragment.this,
searchTermText.getText().toString())).show();
+ hideSearchResults();
+
((PageActivity)getActivity()).searchFullText(searchTermText.getText().toString());
}
});
@@ -216,7 +218,8 @@
PageTitle title = new
PageTitle(searchTermText.getText().toString(), app.getPrimarySite());
navigateToTitle(title);
} else {
- (new FullSearchDialog(SearchArticlesFragment.this,
searchTermText.getText().toString())).show();
+ hideSearchResults();
+
((PageActivity)getActivity()).searchFullText(searchTermText.getText().toString());
}
} else {
hideSearchResults();
--
To view, visit https://gerrit.wikimedia.org/r/161935
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If9c2c11014745e75f3dbde86a724d555470c8f61
Gerrit-PatchSet: 16
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits