Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/281304
Change subject: [Hackathon] "Edit here" context button.
......................................................................
[Hackathon] "Edit here" context button.
Bug: T119887
Change-Id: I54a2c68741851d81f4aa5ac25f7f91d4be309c31
---
M app/src/main/assets/bundle.js
M app/src/main/java/org/wikipedia/editing/EditHandler.java
M app/src/main/java/org/wikipedia/editing/EditSectionActivity.java
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/snippet/ShareHandler.java
A app/src/main/res/drawable-hdpi/ic_mode_edit_white_24dp.png
A app/src/main/res/drawable-mdpi/ic_mode_edit_white_24dp.png
A app/src/main/res/drawable-xhdpi/ic_mode_edit_white_24dp.png
A app/src/main/res/drawable-xxhdpi/ic_mode_edit_white_24dp.png
A app/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_24dp.png
M app/src/main/res/layout/activity_edit_section.xml
M app/src/main/res/menu/menu_text_select.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
M www/js/sections.js
15 files changed, 97 insertions(+), 12 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/04/281304/1
diff --git a/app/src/main/assets/bundle.js b/app/src/main/assets/bundle.js
index 357e66e..84c289f 100644
--- a/app/src/main/assets/bundle.js
+++ b/app/src/main/assets/bundle.js
@@ -422,7 +422,16 @@
if (text.length > 250) {
text = text.substring(0, 249);
}
- bridge.sendMessage( "onGetTextSelection", { "purpose" : payload.purpose,
"text" : text } );
+ if (payload.purpose === "edit_here") {
+ var range = window.getSelection().getRangeAt(0);
+ var newRangeStart = range.startOffset - 20;
+ if (newRangeStart < 0) {
+ newRangeStart = 0;
+ }
+ range.setStart(range.startContainer, newRangeStart);
+ text = range.toString();
+ }
+ bridge.sendMessage( "onGetTextSelection", { "purpose" : payload.purpose,
"text" : text, "sectionID" : getCurrentSection() } );
});
bridge.registerListener( "displayLeadSection", function( payload ) {
diff --git a/app/src/main/java/org/wikipedia/editing/EditHandler.java
b/app/src/main/java/org/wikipedia/editing/EditHandler.java
index e93dab0..985efc5 100644
--- a/app/src/main/java/org/wikipedia/editing/EditHandler.java
+++ b/app/src/main/java/org/wikipedia/editing/EditHandler.java
@@ -32,6 +32,18 @@
this.funnel = new
ProtectedEditAttemptFunnel(WikipediaApp.getInstance(),
page.getTitle().getSite());
}
+ public void startEditingSection(int sectionID, String highlightText) {
+ Section section = currentPage.getSections().get(sectionID);
+ Intent intent = new Intent(fragment.getActivity(),
EditSectionActivity.class);
+ intent.setAction(EditSectionActivity.ACTION_EDIT_SECTION);
+ intent.putExtra(EditSectionActivity.EXTRA_SECTION_ID, section.getId());
+ intent.putExtra(EditSectionActivity.EXTRA_SECTION_HEADING,
section.getHeading());
+ intent.putExtra(EditSectionActivity.EXTRA_TITLE,
currentPage.getTitle());
+ intent.putExtra(EditSectionActivity.EXTRA_PAGE_PROPS,
currentPage.getPageProperties());
+ intent.putExtra(EditSectionActivity.EXTRA_HIGHLIGHT_TEXT,
highlightText);
+ fragment.startActivityForResult(intent,
PageActivity.ACTIVITY_REQUEST_EDIT_SECTION);
+ }
+
private void showUneditableDialog() {
new AlertDialog.Builder(fragment.getActivity())
.setCancelable(false)
@@ -85,15 +97,7 @@
showUneditableDialog();
return;
}
- int id = messagePayload.optInt("sectionID");
- Section section = currentPage.getSections().get(id);
- Intent intent = new Intent(fragment.getActivity(),
EditSectionActivity.class);
- intent.setAction(EditSectionActivity.ACTION_EDIT_SECTION);
- intent.putExtra(EditSectionActivity.EXTRA_SECTION_ID,
section.getId());
- intent.putExtra(EditSectionActivity.EXTRA_SECTION_HEADING,
section.getHeading());
- intent.putExtra(EditSectionActivity.EXTRA_TITLE,
currentPage.getTitle());
- intent.putExtra(EditSectionActivity.EXTRA_PAGE_PROPS,
currentPage.getPageProperties());
- fragment.startActivityForResult(intent,
PageActivity.ACTIVITY_REQUEST_EDIT_SECTION);
+ startEditingSection(messagePayload.optInt("sectionID"), null);
if (wasRefreshed) {
savedPagesFunnel.logEditAfterRefresh();
}
diff --git a/app/src/main/java/org/wikipedia/editing/EditSectionActivity.java
b/app/src/main/java/org/wikipedia/editing/EditSectionActivity.java
index f5291c5..6db3650 100644
--- a/app/src/main/java/org/wikipedia/editing/EditSectionActivity.java
+++ b/app/src/main/java/org/wikipedia/editing/EditSectionActivity.java
@@ -22,6 +22,7 @@
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ScrollView;
import android.widget.TextView;
import com.squareup.otto.Bus;
import org.mediawiki.api.json.Api;
@@ -55,6 +56,7 @@
public static final String EXTRA_SECTION_ID =
"org.wikipedia.edit_section.sectionid";
public static final String EXTRA_SECTION_HEADING =
"org.wikipedia.edit_section.sectionheading";
public static final String EXTRA_PAGE_PROPS =
"org.wikipedia.edit_section.pageprops";
+ public static final String EXTRA_HIGHLIGHT_TEXT =
"org.wikipedia.edit_section.highlight";
private WikipediaApp app;
private Bus bus;
@@ -67,6 +69,7 @@
private int sectionID;
private String sectionHeading;
private PageProperties pageProps;
+ private String textToHighlight;
private String sectionWikitext;
private SyntaxHighlighter syntaxHighlighter;
@@ -111,6 +114,7 @@
sectionID = getIntent().getIntExtra(EXTRA_SECTION_ID, 0);
sectionHeading = getIntent().getStringExtra(EXTRA_SECTION_HEADING);
pageProps = getIntent().getParcelableExtra(EXTRA_PAGE_PROPS);
+ textToHighlight = getIntent().getStringExtra(EXTRA_HIGHLIGHT_TEXT);
progressDialog = new ProgressDialog(this);
progressDialog.setIndeterminate(true);
@@ -602,6 +606,7 @@
sectionText.setText(sectionWikitext);
ViewAnimations.crossFade(sectionProgress, sectionContainer);
supportInvalidateOptionsMenu();
+ highlightText();
if (pageProps != null && pageProps.getEditProtectionStatus() != null) {
String message;
@@ -620,6 +625,42 @@
}
}
+ private void highlightText() {
+ if (TextUtils.isEmpty(textToHighlight)) {
+ return;
+ }
+
+ sectionText.post(new Runnable() {
+ @Override
+ public void run() {
+ ((ScrollView)
sectionContainer).setSmoothScrollingEnabled(false);
+ ((ScrollView) sectionContainer).fullScroll(View.FOCUS_DOWN);
+ final int scrollDelayMs = 500;
+ sectionText.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ String[] words = textToHighlight.split("\\s+");
+ int pos = 0;
+ for (int i = 0; i < words.length; i++) {
+ pos = sectionWikitext.indexOf(words[i], pos);
+ if (pos == -1) {
+ break;
+ }
+ }
+ if (pos == -1) {
+ pos = sectionWikitext.indexOf(words[words.length -
1]);
+ }
+ if (pos > 0) {
+ sectionText.setSelection(pos, pos +
words[words.length - 1].length());
+ sectionText.performLongClick();
+ }
+ }
+ }, scrollDelayMs);
+ }
+ });
+
+ }
+
/**
* Shows the custom edit summary input fragment, where the user may enter
a summary
* that's different from the standard summary tags.
diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index 719f57d..3b61b30 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -204,6 +204,10 @@
savedPageCheckComplete = complete;
}
+ public EditHandler getEditHandler() {
+ return editHandler;
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/app/src/main/java/org/wikipedia/page/snippet/ShareHandler.java
b/app/src/main/java/org/wikipedia/page/snippet/ShareHandler.java
index e0453f2..4d22620 100755
--- a/app/src/main/java/org/wikipedia/page/snippet/ShareHandler.java
+++ b/app/src/main/java/org/wikipedia/page/snippet/ShareHandler.java
@@ -54,6 +54,7 @@
private static final String PAYLOAD_PURPOSE_KEY = "purpose";
private static final String PAYLOAD_PURPOSE_SHARE = "share";
private static final String PAYLOAD_PURPOSE_DEFINE = "define";
+ private static final String PAYLOAD_PURPOSE_EDIT_HERE = "edit_here";
private static final String PAYLOAD_TEXT_KEY = "text";
@ColorRes private static final int SHARE_TOOL_TIP_COLOR =
R.color.blue_liberal;
@@ -87,6 +88,9 @@
case PAYLOAD_PURPOSE_DEFINE:
onDefinePayload(text);
break;
+ case PAYLOAD_PURPOSE_EDIT_HERE:
+ onEditHerePayload(messagePayload.optInt("sectionID",
0), text);
+ break;
default:
L.d("Unknown purpose=" + purpose);
}
@@ -109,6 +113,10 @@
private void onDefinePayload(String text) {
showWiktionaryDefinition(text.toLowerCase());
+ }
+
+ private void onEditHerePayload(int sectionID, String text) {
+
activity.getCurPageFragment().getEditHandler().startEditingSection(sectionID,
text);
}
private void showCopySnackbar() {
@@ -193,6 +201,8 @@
defineItem.setVisible(true);
defineItem.setOnMenuItemClickListener(new
RequestTextSelectOnMenuItemClickListener(PAYLOAD_PURPOSE_DEFINE));
}
+ MenuItem editItem = menu.findItem(R.id.menu_text_edit_here);
+ editItem.setOnMenuItemClickListener(new
RequestTextSelectOnMenuItemClickListener(PAYLOAD_PURPOSE_EDIT_HERE));
createFunnel();
funnel.logHighlight();
diff --git a/app/src/main/res/drawable-hdpi/ic_mode_edit_white_24dp.png
b/app/src/main/res/drawable-hdpi/ic_mode_edit_white_24dp.png
new file mode 100644
index 0000000..595ff10
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_mode_edit_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_mode_edit_white_24dp.png
b/app/src/main/res/drawable-mdpi/ic_mode_edit_white_24dp.png
new file mode 100644
index 0000000..12b09f1
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_mode_edit_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_mode_edit_white_24dp.png
b/app/src/main/res/drawable-xhdpi/ic_mode_edit_white_24dp.png
new file mode 100644
index 0000000..5a06bff
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_mode_edit_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_mode_edit_white_24dp.png
b/app/src/main/res/drawable-xxhdpi/ic_mode_edit_white_24dp.png
new file mode 100644
index 0000000..02e19d0
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_mode_edit_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_24dp.png
b/app/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_24dp.png
new file mode 100644
index 0000000..d6668a0
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_edit_section.xml
b/app/src/main/res/layout/activity_edit_section.xml
index 4ffb171..933e4c4 100644
--- a/app/src/main/res/layout/activity_edit_section.xml
+++ b/app/src/main/res/layout/activity_edit_section.xml
@@ -37,7 +37,8 @@
android:id="@+id/edit_section_container"
android:visibility="gone"
tools:visibility="visible"
- android:layout_width="match_parent"
android:layout_height="match_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<org.wikipedia.views.PlainPasteEditText
android:id="@+id/edit_section_text"
android:layout_width="match_parent"
diff --git a/app/src/main/res/menu/menu_text_select.xml
b/app/src/main/res/menu/menu_text_select.xml
index 4548566..bfbd284 100644
--- a/app/src/main/res/menu/menu_text_select.xml
+++ b/app/src/main/res/menu/menu_text_select.xml
@@ -12,6 +12,11 @@
android:icon="?actionModeShareDrawable"
app:showAsAction="ifRoom" />
+ <item android:id="@+id/menu_text_edit_here"
+ android:title="@string/menu_text_select_edit_here"
+ android:icon="@drawable/ic_mode_edit_white_24dp"
+ app:showAsAction="ifRoom" />
+
<item android:id="@+id/menu_text_select_define"
android:title="@string/menu_text_select_define"
android:icon="@drawable/define_light"
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index d6f5626..a5b8c8c 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -77,6 +77,7 @@
{{Identical|Define}}</string>
<string name="menu_text_select_share">Menu item caption for sharing text and
images with other apps such as Email and Twitter.
{{Identical|Share}}</string>
+ <string name="menu_text_select_edit_here">Menu item caption for editing the
current section at the currently highlighted word.</string>
<string name="nav_item_nearby">Entry in nav drawer for Nearby feature
{{Identical|Nearby}}</string>
<string name="nearby_distance_in_meters">Distance to the place mentioned in
the nearby page in meters. Please leave the %d as is. It represents an integer
decimal number up to 999.</string>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index 1fe8821..21c8044 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -56,6 +56,7 @@
<string name="menu_text_select_copy">Copy</string>
<string name="menu_text_select_define">Define</string>
<string name="menu_text_select_share">Share</string>
+ <string name="menu_text_select_edit_here">Edit here</string>
<!-- Nearby -->
<string name="nav_item_nearby">Nearby</string>
diff --git a/www/js/sections.js b/www/js/sections.js
index 3214df7..747757b 100644
--- a/www/js/sections.js
+++ b/www/js/sections.js
@@ -50,7 +50,16 @@
if (text.length > 250) {
text = text.substring(0, 249);
}
- bridge.sendMessage( "onGetTextSelection", { "purpose" : payload.purpose,
"text" : text } );
+ if (payload.purpose === "edit_here") {
+ var range = window.getSelection().getRangeAt(0);
+ var newRangeStart = range.startOffset - 20;
+ if (newRangeStart < 0) {
+ newRangeStart = 0;
+ }
+ range.setStart(range.startContainer, newRangeStart);
+ text = range.toString();
+ }
+ bridge.sendMessage( "onGetTextSelection", { "purpose" : payload.purpose,
"text" : text, "sectionID" : getCurrentSection() } );
});
bridge.registerListener( "displayLeadSection", function( payload ) {
--
To view, visit https://gerrit.wikimedia.org/r/281304
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I54a2c68741851d81f4aa5ac25f7f91d4be309c31
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits