jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/325424 )
Change subject: Description editing tutorial
......................................................................
Description editing tutorial
TODO (in separate patches to follow):
* Add ViewPager position indicator
* Add view tests.
Bug: T148205
Change-Id: I67c9d0960e979929ab832323e6435c4d1ce3dd6d
---
M app/src/main/AndroidManifest.xml
M app/src/main/java/org/wikipedia/Constants.java
A
app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialActivity.java
A
app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialFragment.java
A app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPage.java
A
app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPageView.java
A
app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPagerAdapter.java
M app/src/main/java/org/wikipedia/onboarding/OnboardingStateMachine.java
M app/src/main/java/org/wikipedia/onboarding/PrefsOnboardingStateMachine.java
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M app/src/main/java/org/wikipedia/settings/Prefs.java
M app/src/main/java/org/wikipedia/views/GoneIfEmptyTextView.java
A app/src/main/res/drawable-hdpi/illustration_description_onboard_1.png
A app/src/main/res/drawable-hdpi/illustration_description_onboard_2.png
A app/src/main/res/drawable-mdpi/illustration_description_onboard_1.png
A app/src/main/res/drawable-mdpi/illustration_description_onboard_2.png
A app/src/main/res/drawable-xhdpi/illustration_description_onboard_1.png
A app/src/main/res/drawable-xhdpi/illustration_description_onboard_2.png
A app/src/main/res/drawable-xxhdpi/illustration_description_onboard_1.png
A app/src/main/res/drawable-xxhdpi/illustration_description_onboard_2.png
A app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_1.png
A app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_2.png
A app/src/main/res/drawable/description_edit_tutorial_background.xml
A app/src/main/res/layout/fragment_description_edit_tutorial.xml
A app/src/main/res/layout/inflate_description_edit_tutorial_page_one.xml
A app/src/main/res/layout/inflate_description_edit_tutorial_page_two.xml
A app/src/main/res/layout/view_description_edit_tutorial_page.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/attrs.xml
M app/src/main/res/values/preference_keys.xml
M app/src/main/res/values/strings.xml
M app/src/main/res/xml/developer_preferences.xml
33 files changed, 501 insertions(+), 8 deletions(-)
Approvals:
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0903136..9044f98 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -159,6 +159,10 @@
<activity android:name=".descriptions.DescriptionEditHelpActivity"
android:theme="@style/AppTheme"/>
+ <activity
+ android:name=".descriptions.DescriptionEditTutorialActivity"
+ android:theme="@style/PageTheme"/>
+
<provider
android:authorities="${applicationId}"
android:name=".database.AppContentProvider"
diff --git a/app/src/main/java/org/wikipedia/Constants.java
b/app/src/main/java/org/wikipedia/Constants.java
index 2d95471..4f9d1dc 100644
--- a/app/src/main/java/org/wikipedia/Constants.java
+++ b/app/src/main/java/org/wikipedia/Constants.java
@@ -17,6 +17,7 @@
public static final int ACTIVITY_REQUEST_GALLERY = 52;
public static final int ACTIVITY_REQUEST_LOGIN = 53;
public static final int ACTIVITY_REQUEST_DESCRIPTION_EDIT_SUCCESS = 54;
+ public static final int ACTIVITY_REQUEST_DESCRIPTION_EDIT_TUTORIAL = 56;
public static final String INTENT_RETURN_TO_MAIN = "returnToMain";
public static final String INTENT_SEARCH_FROM_WIDGET = "searchFromWidget";
diff --git
a/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialActivity.java
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialActivity.java
new file mode 100644
index 0000000..32dfb65
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialActivity.java
@@ -0,0 +1,39 @@
+package org.wikipedia.descriptions;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+
+import org.wikipedia.activity.SingleFragmentActivity;
+
+public class DescriptionEditTutorialActivity
+ extends SingleFragmentActivity<DescriptionEditTutorialFragment>
+ implements DescriptionEditTutorialFragment.Callback {
+
+ public static Intent newIntent(@NonNull Context context) {
+ return new Intent(context, DescriptionEditTutorialActivity.class);
+ }
+
+ @TargetApi(18) @Override public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // Setting this in the manifest will not suffice since any manifest
screenOrientation
+ // setting is overridden by the call to
ActivityUtil.requestFullUserOrientation() in the
+ // base ActionBarActivity's onCreate().
+ setRequestedOrientation(Build.VERSION.SDK_INT >=
Build.VERSION_CODES.JELLY_BEAN_MR2
+ ? ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
+ : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+
+ @Override protected DescriptionEditTutorialFragment createFragment() {
+ return DescriptionEditTutorialFragment.newInstance();
+ }
+
+ @Override public void onStartEditingClick() {
+ setResult(RESULT_OK);
+ finish();
+ }
+}
diff --git
a/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialFragment.java
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialFragment.java
new file mode 100644
index 0000000..be546ac
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialFragment.java
@@ -0,0 +1,84 @@
+package org.wikipedia.descriptions;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.wikipedia.R;
+import org.wikipedia.activity.FragmentUtil;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
+public class DescriptionEditTutorialFragment extends Fragment {
+ @BindView(R.id.fragment_description_edit_tutorial_view_pager) ViewPager
viewPager;
+ private Unbinder unbinder;
+
+ private PagerAdapter adapter;
+
+ public interface Callback {
+ void onStartEditingClick();
+ }
+
+ @NonNull public static DescriptionEditTutorialFragment newInstance() {
+ return new DescriptionEditTutorialFragment();
+ }
+
+ @Override public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ adapter = new DescriptionEditTutorialPagerAdapter(new
PageViewCallback());
+ }
+
+ @Override public View onCreateView(LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ View view =
inflater.inflate(R.layout.fragment_description_edit_tutorial, container, false);
+ unbinder = ButterKnife.bind(this, view);
+ viewPager.setAdapter(adapter);
+ return view;
+ }
+
+ @Override public void onDestroyView() {
+ viewPager.setAdapter(null);
+ unbinder.unbind();
+ unbinder = null;
+ super.onDestroyView();
+ }
+
+ @Override public void onDestroy() {
+ adapter = null;
+ super.onDestroy();
+ }
+
+ private void onStartEditingClick() {
+ if (callback() != null) {
+ callback().onStartEditingClick();
+ }
+ }
+
+ private void advancePage() {
+ int nextPageIndex = viewPager.getCurrentItem() + 1;
+ int lastPageIndex = viewPager.getAdapter().getCount() - 1;
+ viewPager.setCurrentItem(Math.min(nextPageIndex, lastPageIndex), true);
+ }
+
+ private Callback callback() {
+ return FragmentUtil.getCallback(this,
DescriptionEditTutorialFragment.Callback.class);
+ }
+
+ private class PageViewCallback implements
DescriptionEditTutorialPagerAdapter.Callback {
+ @Override public void onButtonClick(@NonNull
DescriptionEditTutorialPage page) {
+ if (page.isLast()) {
+ onStartEditingClick();
+ } else {
+ advancePage();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPage.java
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPage.java
new file mode 100644
index 0000000..5c8a110
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPage.java
@@ -0,0 +1,42 @@
+package org.wikipedia.descriptions;
+
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+
+import org.wikipedia.R;
+import org.wikipedia.model.EnumCode;
+import org.wikipedia.model.EnumCodeMap;
+
+enum DescriptionEditTutorialPage implements EnumCode {
+ PAGE_ONE(R.layout.inflate_description_edit_tutorial_page_one),
+ PAGE_TWO(R.layout.inflate_description_edit_tutorial_page_two);
+
+ private static EnumCodeMap<DescriptionEditTutorialPage> MAP
+ = new EnumCodeMap<>(DescriptionEditTutorialPage.class);
+
+ @LayoutRes private final int layout;
+
+ int getLayout() {
+ return layout;
+ }
+
+ @NonNull public static DescriptionEditTutorialPage of(int code) {
+ return MAP.get(code);
+ }
+
+ public boolean isLast() {
+ return ordinal() == size() - 1;
+ }
+
+ public static int size() {
+ return MAP.size();
+ }
+
+ @Override public int code() {
+ return ordinal();
+ }
+
+ DescriptionEditTutorialPage(@LayoutRes int layout) {
+ this.layout = layout;
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPageView.java
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPageView.java
new file mode 100644
index 0000000..9cfe297
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPageView.java
@@ -0,0 +1,88 @@
+package org.wikipedia.descriptions;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.support.annotation.AttrRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StyleRes;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.wikipedia.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+public class DescriptionEditTutorialPageView extends LinearLayout {
+ interface Callback {
+ void onButtonClick(@NonNull DescriptionEditTutorialPageView view);
+ }
+
+ @BindView(R.id.view_description_edit_tutorial_page_image) ImageView
imageView;
+ @BindView(R.id.view_description_edit_tutorial_page_primary_text) TextView
primaryTextView;
+ @BindView(R.id.view_description_edit_tutorial_page_secondary_text)
TextView secondaryTextView;
+ @BindView(R.id.view_description_edit_tutorial_page_tertiary_text) TextView
tertiaryTextView;
+ @BindView(R.id.view_description_edit_tutorial_page_button) TextView button;
+
+ @Nullable private Callback callback;
+
+ public DescriptionEditTutorialPageView(Context context) {
+ super(context);
+ init(null, 0, 0);
+ }
+
+ public DescriptionEditTutorialPageView(Context context, AttributeSet
attrs) {
+ super(context, attrs);
+ init(attrs, 0, 0);
+ }
+
+ public DescriptionEditTutorialPageView(Context context, AttributeSet
attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(attrs, defStyleAttr, 0);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public DescriptionEditTutorialPageView(Context context, AttributeSet
attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ init(attrs, defStyleAttr, defStyleRes);
+ }
+
+ public void setCallback(@Nullable Callback callback) {
+ this.callback = callback;
+ }
+
+ @OnClick(R.id.view_description_edit_tutorial_page_button) void
onButtonClick() {
+ if (callback != null) {
+ callback.onButtonClick(this);
+ }
+ }
+
+ private void init(@Nullable AttributeSet attrs, @AttrRes int defStyleAttr,
@StyleRes int defStyleRes) {
+ inflate(getContext(), R.layout.view_description_edit_tutorial_page,
this);
+ ButterKnife.bind(this);
+ if (attrs != null) {
+ TypedArray array = getContext().obtainStyledAttributes(attrs,
+ R.styleable.DescriptionEditTutorialPageView, defStyleAttr,
defStyleRes);
+ Drawable image =
array.getDrawable(R.styleable.DescriptionEditTutorialPageView_image);
+ String primaryText =
array.getString(R.styleable.DescriptionEditTutorialPageView_primaryText);
+ String secondaryText =
array.getString(R.styleable.DescriptionEditTutorialPageView_secondaryText);
+ String tertiaryText =
array.getString(R.styleable.DescriptionEditTutorialPageView_tertiaryText);
+ String buttonText =
array.getString(R.styleable.DescriptionEditTutorialPageView_buttonText);
+
+ imageView.setImageDrawable(image);
+ primaryTextView.setText(primaryText);
+ secondaryTextView.setText(secondaryText);
+ tertiaryTextView.setText(tertiaryText);
+ button.setText(buttonText);
+
+ array.recycle();
+ }
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPagerAdapter.java
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPagerAdapter.java
new file mode 100644
index 0000000..7cae100
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/descriptions/DescriptionEditTutorialPagerAdapter.java
@@ -0,0 +1,60 @@
+package org.wikipedia.descriptions;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.view.PagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+class DescriptionEditTutorialPagerAdapter extends PagerAdapter {
+ interface Callback {
+ void onButtonClick(@NonNull DescriptionEditTutorialPage page);
+ }
+
+ @Nullable private Callback callback;
+ @NonNull private final ViewCallback viewCallback = new ViewCallback();
+
+ DescriptionEditTutorialPagerAdapter(@Nullable Callback callback) {
+ this.callback = callback;
+ }
+
+ @Override public Object instantiateItem(ViewGroup container, int position)
{
+ DescriptionEditTutorialPage page =
DescriptionEditTutorialPage.of(position);
+ DescriptionEditTutorialPageView view = inflate(page, container);
+ view.setTag(position);
+ view.setCallback(viewCallback);
+ return view;
+ }
+
+ @NonNull public DescriptionEditTutorialPageView inflate(@NonNull
DescriptionEditTutorialPage page,
+ @NonNull ViewGroup
parent) {
+ LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+ DescriptionEditTutorialPageView view =
+ (DescriptionEditTutorialPageView)
inflater.inflate(page.getLayout(), parent, false);
+ parent.addView(view);
+ return view;
+ }
+
+ @Override public void destroyItem(ViewGroup container, int position,
Object object) {
+ DescriptionEditTutorialPageView view =
((DescriptionEditTutorialPageView) object);
+ view.setCallback(null);
+ view.setTag(-1);
+ }
+
+ @Override public int getCount() {
+ return DescriptionEditTutorialPage.size();
+ }
+
+ @Override public boolean isViewFromObject(View view, Object object) {
+ return view == object;
+ }
+
+ private class ViewCallback implements
DescriptionEditTutorialPageView.Callback {
+ @Override public void onButtonClick(@NonNull
DescriptionEditTutorialPageView view) {
+ if (callback != null) {
+ callback.onButtonClick(DescriptionEditTutorialPage.of((int)
view.getTag()));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/onboarding/OnboardingStateMachine.java
b/app/src/main/java/org/wikipedia/onboarding/OnboardingStateMachine.java
index b755f1f..3ec115e 100644
--- a/app/src/main/java/org/wikipedia/onboarding/OnboardingStateMachine.java
+++ b/app/src/main/java/org/wikipedia/onboarding/OnboardingStateMachine.java
@@ -9,4 +9,6 @@
void setShareTutorial();
boolean isReadingListTutorialEnabled();
void setReadingListTutorial();
+ boolean isDescriptionEditTutorialEnabled();
+ void setDescriptionEditTutorial();
}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/onboarding/PrefsOnboardingStateMachine.java
b/app/src/main/java/org/wikipedia/onboarding/PrefsOnboardingStateMachine.java
index 14cc227..bbbe76b 100644
---
a/app/src/main/java/org/wikipedia/onboarding/PrefsOnboardingStateMachine.java
+++
b/app/src/main/java/org/wikipedia/onboarding/PrefsOnboardingStateMachine.java
@@ -64,6 +64,16 @@
Prefs.setReadingListTutorialEnabled(false);
}
+ @Override
+ public boolean isDescriptionEditTutorialEnabled() {
+ return Prefs.isDescriptionEditTutorialEnabled();
+ }
+
+ @Override
+ public void setDescriptionEditTutorial() {
+ Prefs.setDescriptionEditTutorialEnabled(false);
+ }
+
private void updateTimeSinceLastTutorial() {
millisSinceLastTutorial = System.currentTimeMillis();
}
diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index 1324def..7a1a9c1 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -46,10 +46,12 @@
import org.wikipedia.bridge.CommunicationBridge;
import org.wikipedia.concurrency.CallbackTask;
import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.descriptions.DescriptionEditActivity;
import org.wikipedia.edit.EditHandler;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.history.UpdateHistoryTask;
import org.wikipedia.language.LangLinksActivity;
+import org.wikipedia.onboarding.PrefsOnboardingStateMachine;
import org.wikipedia.page.action.PageActionTab;
import org.wikipedia.page.action.PageActionToolbarHideHandler;
import org.wikipedia.page.gallery.GalleryActivity;
@@ -87,6 +89,7 @@
import java.util.List;
import java.util.concurrent.TimeUnit;
+import static android.app.Activity.RESULT_OK;
import static butterknife.ButterKnife.findById;
import static org.wikipedia.util.DimenUtil.getContentTopOffset;
import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
@@ -700,6 +703,10 @@
FeedbackUtil.showMessage(getActivity(),
R.string.edit_saved_successfully);
// and reload the page...
loadPage(model.getTitleOriginal(), model.getCurEntry(),
PageLoadStrategy.Cache.FALLBACK, false);
+ } else if (requestCode ==
Constants.ACTIVITY_REQUEST_DESCRIPTION_EDIT_TUTORIAL
+ && resultCode == RESULT_OK) {
+
PrefsOnboardingStateMachine.getInstance().setDescriptionEditTutorial();
+ startActivity(DescriptionEditActivity.newIntent(getContext(),
getTitle()));
}
}
diff --git
a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index 0343c9c..fac18d5 100755
--- a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -22,6 +22,7 @@
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.descriptions.DescriptionEditActivity;
import org.wikipedia.descriptions.DescriptionEditFragment;
+import org.wikipedia.descriptions.DescriptionEditTutorialActivity;
import org.wikipedia.page.Page;
import org.wikipedia.page.PageFragment;
import org.wikipedia.page.PageTitle;
@@ -32,6 +33,7 @@
import org.wikipedia.views.FaceAndColorDetectImageView;
import org.wikipedia.views.ObservableWebView;
+import static org.wikipedia.settings.Prefs.isDescriptionEditTutorialEnabled;
import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
public class LeadImagesHandler {
@@ -241,12 +243,12 @@
articleHeaderView.setCallback(new ArticleHeaderView.Callback() {
@Override
public void onDescriptionClicked() {
-
parentFragment.startActivity(DescriptionEditActivity.newIntent(getActivity(),
getTitle()));
+ startDescriptionEditActivity();
}
@Override
public void onEditDescription() {
-
parentFragment.startActivity(DescriptionEditActivity.newIntent(getActivity(),
getTitle()));
+ startDescriptionEditActivity();
}
@Override
@@ -256,6 +258,16 @@
});
}
+ private void startDescriptionEditActivity() {
+ if (isDescriptionEditTutorialEnabled()) {
+
parentFragment.startActivityForResult(DescriptionEditTutorialActivity.newIntent(parentFragment.getContext()),
+ Constants.ACTIVITY_REQUEST_DESCRIPTION_EDIT_TUTORIAL);
+ return;
+ }
+
+
parentFragment.startActivity(DescriptionEditActivity.newIntent(getActivity(),
getTitle()));
+ }
+
private void initWebView() {
webView.addOnScrollChangeListener(articleHeaderView);
diff --git a/app/src/main/java/org/wikipedia/settings/Prefs.java
b/app/src/main/java/org/wikipedia/settings/Prefs.java
index 0a76b42..869cfc7 100644
--- a/app/src/main/java/org/wikipedia/settings/Prefs.java
+++ b/app/src/main/java/org/wikipedia/settings/Prefs.java
@@ -479,6 +479,14 @@
return getBoolean(R.string.preference_key_memory_leak_test, false);
}
+ public static boolean isDescriptionEditTutorialEnabled() {
+ return
getBoolean(R.string.preference_key_description_edit_tutorial_enabled, true);
+ }
+
+ public static void setDescriptionEditTutorialEnabled(boolean enabled) {
+ setBoolean(R.string.preference_key_description_edit_tutorial_enabled,
enabled);
+ }
+
private static boolean isDevRelease() {
return WikipediaApp.getInstance().isDevRelease();
}
diff --git a/app/src/main/java/org/wikipedia/views/GoneIfEmptyTextView.java
b/app/src/main/java/org/wikipedia/views/GoneIfEmptyTextView.java
index 8edede0..d752ddd 100644
--- a/app/src/main/java/org/wikipedia/views/GoneIfEmptyTextView.java
+++ b/app/src/main/java/org/wikipedia/views/GoneIfEmptyTextView.java
@@ -7,9 +7,8 @@
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
-import android.widget.TextView;
-public class GoneIfEmptyTextView extends TextView {
+public class GoneIfEmptyTextView extends AppTextView {
public GoneIfEmptyTextView(Context context) {
super(context);
init();
diff --git
a/app/src/main/res/drawable-hdpi/illustration_description_onboard_1.png
b/app/src/main/res/drawable-hdpi/illustration_description_onboard_1.png
new file mode 100644
index 0000000..4d6d53c
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/illustration_description_onboard_1.png
Binary files differ
diff --git
a/app/src/main/res/drawable-hdpi/illustration_description_onboard_2.png
b/app/src/main/res/drawable-hdpi/illustration_description_onboard_2.png
new file mode 100644
index 0000000..bd104b6
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/illustration_description_onboard_2.png
Binary files differ
diff --git
a/app/src/main/res/drawable-mdpi/illustration_description_onboard_1.png
b/app/src/main/res/drawable-mdpi/illustration_description_onboard_1.png
new file mode 100644
index 0000000..7bdfc78
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/illustration_description_onboard_1.png
Binary files differ
diff --git
a/app/src/main/res/drawable-mdpi/illustration_description_onboard_2.png
b/app/src/main/res/drawable-mdpi/illustration_description_onboard_2.png
new file mode 100644
index 0000000..0240d4f
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/illustration_description_onboard_2.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xhdpi/illustration_description_onboard_1.png
b/app/src/main/res/drawable-xhdpi/illustration_description_onboard_1.png
new file mode 100644
index 0000000..b579880
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/illustration_description_onboard_1.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xhdpi/illustration_description_onboard_2.png
b/app/src/main/res/drawable-xhdpi/illustration_description_onboard_2.png
new file mode 100644
index 0000000..8e35e3e
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/illustration_description_onboard_2.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_1.png
b/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_1.png
new file mode 100644
index 0000000..51191c1
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_1.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_2.png
b/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_2.png
new file mode 100644
index 0000000..d67ed00
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/illustration_description_onboard_2.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_1.png
b/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_1.png
new file mode 100644
index 0000000..b0224b3
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_1.png
Binary files differ
diff --git
a/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_2.png
b/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_2.png
new file mode 100644
index 0000000..93ab904
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/illustration_description_onboard_2.png
Binary files differ
diff --git a/app/src/main/res/drawable/description_edit_tutorial_background.xml
b/app/src/main/res/drawable/description_edit_tutorial_background.xml
new file mode 100644
index 0000000..e5ca461
--- /dev/null
+++ b/app/src/main/res/drawable/description_edit_tutorial_background.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="#00af89"
+ android:endColor="#3366cc"
+ android:angle="90"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_description_edit_tutorial.xml
b/app/src/main/res/layout/fragment_description_edit_tutorial.xml
new file mode 100644
index 0000000..59b4754
--- /dev/null
+++ b/app/src/main/res/layout/fragment_description_edit_tutorial.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v4.view.ViewPager
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/fragment_description_edit_tutorial_view_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
\ No newline at end of file
diff --git
a/app/src/main/res/layout/inflate_description_edit_tutorial_page_one.xml
b/app/src/main/res/layout/inflate_description_edit_tutorial_page_one.xml
new file mode 100644
index 0000000..d97b653
--- /dev/null
+++ b/app/src/main/res/layout/inflate_description_edit_tutorial_page_one.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<org.wikipedia.descriptions.DescriptionEditTutorialPageView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@drawable/description_edit_tutorial_background"
+ app:image="@drawable/illustration_description_onboard_1"
+ app:primaryText="@string/description_edit_tutorial_title_descriptions"
+
app:secondaryText="@string/description_edit_tutorial_title_descriptions_summary"
+ app:buttonText="@string/description_edit_tutorial_button_label_continue" />
\ No newline at end of file
diff --git
a/app/src/main/res/layout/inflate_description_edit_tutorial_page_two.xml
b/app/src/main/res/layout/inflate_description_edit_tutorial_page_two.xml
new file mode 100644
index 0000000..b1dc118
--- /dev/null
+++ b/app/src/main/res/layout/inflate_description_edit_tutorial_page_two.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<org.wikipedia.descriptions.DescriptionEditTutorialPageView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@drawable/description_edit_tutorial_background"
+ app:image="@drawable/illustration_description_onboard_2"
+ app:primaryText="@string/description_edit_tutorial_keep_it_short"
+
app:secondaryText="@string/description_edit_tutorial_keep_it_short_instructions"
+ app:tertiaryText="@string/description_edit_tutorial_promise"
+
app:buttonText="@string/description_edit_tutorial_button_label_start_editing" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_description_edit_tutorial_page.xml
b/app/src/main/res/layout/view_description_edit_tutorial_page.xml
new file mode 100644
index 0000000..0f6cdcf
--- /dev/null
+++ b/app/src/main/res/layout/view_description_edit_tutorial_page.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+
tools:parentTag="org.wikipedia.descriptions.DescriptionEditTutorialPageView"
+ tools:layout_width="match_parent"
+ tools:layout_height="match_parent">
+
+ <ImageView
+ android:id="@+id/view_description_edit_tutorial_page_image"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="50"
+ android:layout_marginTop="72dp"
+ android:layout_marginLeft="45dp"
+ android:layout_marginRight="45dp"
+ android:contentDescription="@null" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="50"
+ android:orientation="vertical"
+ android:background="@color/light_blue"
+ android:gravity="center">
+
+ <org.wikipedia.views.AppTextView
+ android:id="@+id/view_description_edit_tutorial_page_primary_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="8dp"
+ android:textColor="@android:color/black"
+ android:textSize="24sp"
+ android:fontFamily="sans-serif-medium" />
+
+ <!-- todo: decide on a policy for handling unique color values -->
+ <org.wikipedia.views.AppTextView
+
android:id="@+id/view_description_edit_tutorial_page_secondary_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="24dp"
+ android:layout_marginRight="24dp"
+ android:textSize="16sp"
+ android:gravity="center"
+ android:textAlignment="center"
+ android:textColor="#8a000000" />
+
+ <org.wikipedia.views.AppTextView
+ android:id="@+id/view_description_edit_tutorial_page_button"
+ android:layout_width="wrap_content"
+ android:layout_height="36dp"
+ android:fontFamily="sans-serif-medium"
+ android:textAlignment="center"
+ android:layout_marginTop="28dp"
+ android:paddingLeft="17dp"
+ android:paddingRight="17dp"
+ android:textSize="14sp"
+ android:textAllCaps="true"
+ style="@style/ButtonBlue" />
+
+ <org.wikipedia.views.GoneIfEmptyTextView
+ android:id="@+id/view_description_edit_tutorial_page_tertiary_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/description_edit_tutorial_promise"
+ android:gravity="center"
+ android:textAlignment="center"
+ android:textSize="12sp"
+ android:textColor="#54595d" />
+
+ </LinearLayout>
+</merge>
\ No newline at end of file
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index f24a3e5..1b333c5 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -271,9 +271,6 @@
Followed by {{msg-wm|Wikipedia-android-strings-alpha update notification
text}}.</string>
<string name="wiktionary_no_definitions_found">Message shown when a user
requests a definition from Wiktionary but no definition is found.</string>
<string name="alpha_update_notification_title">Title for notification when
new alpha update is available.
-
-
-
Followed by {{msg-wm|Wikipedia-android-strings-alpha update notification
text}}.</string>
<string name="alpha_update_notification_text">Text for notification when new
alpha update is available.
@@ -464,4 +461,11 @@
<string name="description_edit_success_did_you_know">Heading for a tip about
editing articles in the app
{{Identical|Did you know}}</string>
<string name="description_edit_success_article_edit_hint">A message
informing the user about how to edit articles in the app. The \"^1\" symbol is
replaced with an edit pencil icon.</string>
+ <string name="description_edit_tutorial_title_descriptions">Heading for a
tutorial about editing page title descriptions.</string>
+ <string name="description_edit_tutorial_title_descriptions_summary">Summary
of what page title descriptions are for.</string>
+ <string name="description_edit_tutorial_button_label_continue">Label for a
button the user can push to continue to the next page of the tutorial.</string>
+ <string name="description_edit_tutorial_keep_it_short">An instruction for
the user to keep descriptions short.</string>
+ <string
name="description_edit_tutorial_keep_it_short_instructions">Instructions for
the description the user creates to be one line only and between two to twelve
words.</string>
+ <string name="description_edit_tutorial_button_label_start_editing">Label
for a button the user can push when ready to start editing.</string>
+ <string name="description_edit_tutorial_promise">A statement that the user
promises not to misuse the feature.</string>
</resources>
diff --git a/app/src/main/res/values/attrs.xml
b/app/src/main/res/values/attrs.xml
index e0f9b64..c461d33 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -68,4 +68,11 @@
<attr name="navTabViewStyle" format="reference" />
</declare-styleable>
-</resources>
+ <declare-styleable name="DescriptionEditTutorialPageView">
+ <attr name="image" format="reference" />
+ <attr name="primaryText" format="string" />
+ <attr name="secondaryText" format="string" />
+ <attr name="tertiaryText" format="string" />
+ <attr name="buttonText" format="string" />
+ </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/preference_keys.xml
b/app/src/main/res/values/preference_keys.xml
index 3bb5dbd..5b4ee8b 100644
--- a/app/src/main/res/values/preference_keys.xml
+++ b/app/src/main/res/values/preference_keys.xml
@@ -49,4 +49,5 @@
<string name="preference_key_page_last_shown">pageLastShown</string>
<string name="preference_key_feed_hidden_cards">feedHiddenCards</string>
<string name="preference_key_memory_leak_test">memoryLeakTest</string>
+ <string
name="preference_key_description_edit_tutorial_enabled">descriptionEditTutorialEnabled</string>
</resources>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index eb74b59..95f2fc9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -353,4 +353,14 @@
<string name="description_edit_success_did_you_know">Did you know?</string>
<string name="description_edit_success_article_edit_hint">You can also
edit articles within this app. Try fixing typos and small sentences by clicking
on the ^1 icon next time</string>
<!-- /Description editing success -->
+
+ <!-- Description editing tutorial -->
+ <string name="description_edit_tutorial_title_descriptions">Title
descriptions</string>
+ <string
name="description_edit_tutorial_title_descriptions_summary">Summarizes an
article to help readers understand the subject at a glance</string>
+ <string
name="description_edit_tutorial_button_label_continue">Continue</string>
+ <string name="description_edit_tutorial_keep_it_short">Keep it
short</string>
+ <string
name="description_edit_tutorial_keep_it_short_instructions">Ideally one line,
between two to twelve words</string>
+ <string name="description_edit_tutorial_button_label_start_editing">Start
editing</string>
+ <string name="description_edit_tutorial_promise">By starting, I promise
not to misuse this feature.</string>
+ <!-- /Description editing tutorial -->
</resources>
diff --git a/app/src/main/res/xml/developer_preferences.xml
b/app/src/main/res/xml/developer_preferences.xml
index 435b41a..522f50e 100644
--- a/app/src/main/res/xml/developer_preferences.xml
+++ b/app/src/main/res/xml/developer_preferences.xml
@@ -141,6 +141,10 @@
<PreferenceCategory
android:title="@string/preferences_developer_onboarding_heading">
<SwitchPreferenceCompat
+
android:key="@string/preference_key_description_edit_tutorial_enabled"
+
android:title="@string/preference_key_description_edit_tutorial_enabled" />
+
+ <SwitchPreferenceCompat
android:key="@string/preference_key_toc_tutorial_enabled"
android:title="@string/preference_key_toc_tutorial_enabled" />
--
To view, visit https://gerrit.wikimedia.org/r/325424
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I67c9d0960e979929ab832323e6435c4d1ce3dd6d
Gerrit-PatchSet: 14
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits