Skip to content

Commit b422e87

Browse files
authored
Merge pull request #6467 from wordpress-mobile/feature/async-promo-dialog
Async promo dialog
2 parents 323ce26 + f4e7063 commit b422e87

18 files changed

+723
-121
lines changed

WordPress/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@
153153
android:label="@string/settings"
154154
android:theme="@style/CalypsoTheme" />
155155
<activity
156-
android:name=".ui.prefs.EditorReleaseNotesActivity"
156+
android:name=".ui.prefs.ReleaseNotesActivity"
157157
android:theme="@style/Calypso.NoActionBar" />
158158
<activity
159159
android:name=".ui.prefs.LicensesActivity"

WordPress/src/main/java/org/wordpress/android/modules/AppComponent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.wordpress.android.ui.accounts.HelpActivity;
1818
import org.wordpress.android.ui.accounts.LoginActivity;
1919
import org.wordpress.android.ui.accounts.LoginEpilogueActivity;
20-
import org.wordpress.android.ui.accounts.login.LoginEpilogueFragment;
2120
import org.wordpress.android.ui.accounts.NewBlogFragment;
2221
import org.wordpress.android.ui.accounts.NewUserFragment;
2322
import org.wordpress.android.ui.accounts.SignInActivity;
@@ -26,6 +25,7 @@
2625
import org.wordpress.android.ui.accounts.login.Login2FaFragment;
2726
import org.wordpress.android.ui.accounts.login.LoginEmailFragment;
2827
import org.wordpress.android.ui.accounts.login.LoginEmailPasswordFragment;
28+
import org.wordpress.android.ui.accounts.login.LoginEpilogueFragment;
2929
import org.wordpress.android.ui.accounts.login.LoginMagicLinkRequestFragment;
3030
import org.wordpress.android.ui.accounts.login.LoginSiteAddressFragment;
3131
import org.wordpress.android.ui.accounts.login.LoginSiteAddressHelpDialogFragment;
@@ -68,9 +68,9 @@
6868
import org.wordpress.android.ui.prefs.AccountSettingsFragment;
6969
import org.wordpress.android.ui.prefs.AppSettingsFragment;
7070
import org.wordpress.android.ui.prefs.BlogPreferencesActivity;
71-
import org.wordpress.android.ui.prefs.EditorReleaseNotesActivity;
7271
import org.wordpress.android.ui.prefs.MyProfileActivity;
7372
import org.wordpress.android.ui.prefs.MyProfileFragment;
73+
import org.wordpress.android.ui.prefs.ReleaseNotesActivity;
7474
import org.wordpress.android.ui.prefs.SiteSettingsFragment;
7575
import org.wordpress.android.ui.prefs.SiteSettingsInterface;
7676
import org.wordpress.android.ui.prefs.notifications.NotificationsSettingsFragment;
@@ -221,7 +221,7 @@ public interface AppComponent {
221221
void inject(ReaderWebView object);
222222
void inject(ReaderPostPagerActivity object);
223223

224-
void inject(EditorReleaseNotesActivity object);
224+
void inject(ReleaseNotesActivity object);
225225
void inject(WPWebViewActivity object);
226226
void inject(WPWebViewClient object);
227227

WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.wordpress.android.ui.prefs.AppSettingsActivity;
3939
import org.wordpress.android.ui.prefs.BlogPreferencesActivity;
4040
import org.wordpress.android.ui.prefs.MyProfileActivity;
41+
import org.wordpress.android.ui.prefs.ReleaseNotesActivity;
4142
import org.wordpress.android.ui.prefs.notifications.NotificationsSettingsActivity;
4243
import org.wordpress.android.ui.publicize.PublicizeListActivity;
4344
import org.wordpress.android.ui.reader.ReaderPostPagerActivity;
@@ -361,6 +362,14 @@ public static void loginWithoutMagicLink(Activity activity) {
361362
activity.startActivityForResult(intent, RequestCodes.DO_LOGIN);
362363
}
363364

365+
public static void showAztecEditorReleaseNotes(Activity activity) {
366+
Intent intent = new Intent(activity, ReleaseNotesActivity.class);
367+
intent.putExtra(ReleaseNotesActivity.KEY_TARGET_URL,
368+
"https://make.wordpress.org/mobile/whats-new-in-beta-android-editor/");
369+
intent.putExtra(ReleaseNotesActivity.KEY_HELPSHIFT_TAG, HelpshiftHelper.Tag.ORIGIN_FEEDBACK_AZTEC);
370+
activity.startActivity(intent);
371+
}
372+
364373
/*
365374
* open the passed url in the device's external browser
366375
*/

WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -303,15 +303,15 @@ private void setTabLayoutElevation(float newElevation){
303303

304304
private void showNewEditorPromoDialogIfNeeded() {
305305
if (AppPrefs.isNewEditorPromoRequired()) {
306-
AppCompatDialogFragment newFragment = PromoDialogEditor.newInstance(
306+
AppCompatDialogFragment newFragment = new PromoDialogEditor.Builder(
307307
R.drawable.img_promo_editor,
308308
R.string.new_editor_promo_title,
309-
R.string.new_editor_promo_title_beta,
310309
R.string.new_editor_promo_description,
311-
R.string.new_editor_promo_link,
312-
R.string.new_editor_promo_button_negative,
313-
R.string.new_editor_promo_button_positive
314-
);
310+
R.string.new_editor_promo_button_positive)
311+
.setLinkText(R.string.new_editor_promo_link)
312+
.setNegativeButtonText(R.string.new_editor_promo_button_negative)
313+
.setTitleBetaText(R.string.new_editor_promo_title_beta)
314+
.build();
315315
newFragment.show(getSupportFragmentManager(), "new-editor-promo");
316316
AppPrefs.setNewEditorPromoRequired(false);
317317
}

WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
import org.wordpress.android.ui.posts.services.AztecImageLoader;
9797
import org.wordpress.android.ui.posts.services.AztecVideoLoader;
9898
import org.wordpress.android.ui.prefs.AppPrefs;
99-
import org.wordpress.android.ui.prefs.EditorReleaseNotesActivity;
99+
import org.wordpress.android.ui.prefs.ReleaseNotesActivity;
100100
import org.wordpress.android.ui.prefs.SiteSettingsInterface;
101101
import org.wordpress.android.ui.uploads.PostEvents;
102102
import org.wordpress.android.ui.uploads.UploadService;
@@ -109,6 +109,7 @@
109109
import org.wordpress.android.util.DateTimeUtils;
110110
import org.wordpress.android.util.DisplayUtils;
111111
import org.wordpress.android.util.FluxCUtils;
112+
import org.wordpress.android.util.HelpshiftHelper;
112113
import org.wordpress.android.util.ImageUtils;
113114
import org.wordpress.android.util.ListUtils;
114115
import org.wordpress.android.util.MediaUtils;
@@ -176,6 +177,7 @@ public class EditPostActivity extends AppCompatActivity implements
176177
private static final int AUTOSAVE_INTERVAL_MILLIS = 60000;
177178

178179
private static final String PHOTO_PICKER_TAG = "photo_picker";
180+
private static final String ASYNC_PROMO_DIALOG_TAG = "async_promo";
179181

180182
private Handler mHandler;
181183
private boolean mShowAztecEditor;
@@ -481,11 +483,17 @@ public void onConfigurationChanged(Configuration newConfig) {
481483
if (orientation != mPhotoPickerOrientation) {
482484
resizePhotoPicker();
483485
}
486+
487+
// If we're showing the Async promo dialog, we need to notify it to take the new orientation into account
488+
PromoDialog fragment = (PromoDialog) getSupportFragmentManager().findFragmentByTag(ASYNC_PROMO_DIALOG_TAG);
489+
if (fragment != null) {
490+
fragment.redrawForOrientationChange();
491+
}
484492
}
485493

486494
@Override
487495
public void onBetaClicked() {
488-
startActivity(new Intent(EditPostActivity.this, EditorReleaseNotesActivity.class));
496+
ActivityLauncher.showAztecEditorReleaseNotes(this);
489497
AnalyticsTracker.track(Stat.EDITOR_AZTEC_BETA_LABEL);
490498
}
491499

@@ -775,7 +783,11 @@ public boolean onOptionsItemSelected(final MenuItem item) {
775783
}
776784

777785
if (itemId == R.id.menu_save_post) {
778-
publishPost();
786+
if (!AppPrefs.isAsyncPromoRequired()) {
787+
publishPost();
788+
} else {
789+
showAsyncPromoDialog();
790+
}
779791
} else {
780792
// Disable other action bar buttons while a media upload is in progress
781793
// (unnecessary for Aztec since it supports progress reattachment)
@@ -2487,7 +2499,7 @@ protected void showSnackbarBeta() {
24872499
new View.OnClickListener() {
24882500
@Override
24892501
public void onClick(View view) {
2490-
startActivity(new Intent(EditPostActivity.this, EditorReleaseNotesActivity.class));
2502+
ActivityLauncher.showAztecEditorReleaseNotes(EditPostActivity.this);
24912503
AnalyticsTracker.track(Stat.EDITOR_AZTEC_BETA_LINK);
24922504
}
24932505
}
@@ -2517,6 +2529,27 @@ public void onClick(View view) {
25172529
}
25182530
}
25192531

2532+
private void showAsyncPromoDialog() {
2533+
PromoDialogAdvanced asyncPromoDialog = new PromoDialogAdvanced.Builder(
2534+
R.drawable.img_promo_async,
2535+
R.string.async_promo_title,
2536+
R.string.async_promo_description,
2537+
android.R.string.ok)
2538+
// TODO: Re-enable once a release notes page exists for Async
2539+
// .setLinkText(R.string.async_promo_link)
2540+
.build();
2541+
2542+
asyncPromoDialog.setPositiveButtonOnClickListener(new View.OnClickListener() {
2543+
@Override
2544+
public void onClick(View v) {
2545+
publishPost();
2546+
}
2547+
});
2548+
2549+
asyncPromoDialog.show(getSupportFragmentManager(), ASYNC_PROMO_DIALOG_TAG);
2550+
AppPrefs.setAsyncPromoRequired(false);
2551+
}
2552+
25202553
// EditPostActivityHook methods
25212554

25222555
@Override

WordPress/src/main/java/org/wordpress/android/ui/posts/PromoDialog.java

Lines changed: 76 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,79 @@
22

33
import android.app.Dialog;
44
import android.os.Bundle;
5+
import android.support.annotation.DrawableRes;
6+
import android.support.annotation.NonNull;
7+
import android.support.annotation.StringRes;
8+
import android.support.v7.app.AppCompatDialog;
59
import android.support.v7.app.AppCompatDialogFragment;
610
import android.view.LayoutInflater;
711
import android.view.View;
812
import android.view.ViewGroup;
913
import android.view.Window;
1014
import android.widget.Button;
1115
import android.widget.ImageView;
16+
import android.widget.LinearLayout;
1217

1318
import org.wordpress.android.R;
19+
import org.wordpress.android.util.DisplayUtils;
1420
import org.wordpress.android.widgets.WPTextView;
1521

1622
public class PromoDialog extends AppCompatDialogFragment {
17-
protected int mButtonPositiveId;
18-
protected int mDescriptionId;
19-
protected int mDrawableId;
20-
protected int mTitleId;
23+
protected static final String KEY_DRAWABLE_RES_ID = "drawableResId";
24+
protected static final String KEY_TITLE_RES_ID = "titleResId";
25+
protected static final String KEY_DESCRIPTION_RES_ID = "descriptionResId";
26+
protected static final String KEY_BUTTON_POSITIVE_RES_ID = "buttonPositiveResId";
2127

22-
public static PromoDialog newInstance(int drawableId, int titleId, int descriptionId, int buttonPositiveId) {
23-
PromoDialog fragment = new PromoDialog();
24-
Bundle args = new Bundle();
25-
args.putInt("drawableId", drawableId);
26-
args.putInt("titleId", titleId);
27-
args.putInt("descriptionId", descriptionId);
28-
args.putInt("buttonPositiveId", buttonPositiveId);
29-
fragment.setArguments(args);
30-
return fragment;
28+
public static class Builder {
29+
@StringRes int buttonPositiveResId;
30+
@StringRes int descriptionResId;
31+
@DrawableRes int drawableResId;
32+
@StringRes int titleResId;
33+
34+
public Builder(@DrawableRes int drawableResId, @StringRes int titleResId, @StringRes int descriptionResId,
35+
@StringRes int buttonPositiveResId) {
36+
this.drawableResId = drawableResId;
37+
this.titleResId = titleResId;
38+
this.descriptionResId = descriptionResId;
39+
this.buttonPositiveResId = buttonPositiveResId;
40+
}
41+
42+
public PromoDialog build() {
43+
PromoDialog fragment = new PromoDialog();
44+
Bundle args = new Bundle();
45+
args.putInt(KEY_DRAWABLE_RES_ID, drawableResId);
46+
args.putInt(KEY_TITLE_RES_ID, titleResId);
47+
args.putInt(KEY_DESCRIPTION_RES_ID, descriptionResId);
48+
args.putInt(KEY_BUTTON_POSITIVE_RES_ID, buttonPositiveResId);
49+
fragment.setArguments(args);
50+
return fragment;
51+
}
3152
}
3253

54+
@StringRes protected int mButtonPositiveResId;
55+
@StringRes protected int mDescriptionResId;
56+
@DrawableRes protected int mDrawableResId;
57+
@StringRes protected int mTitleResId;
58+
59+
protected View.OnClickListener mPositiveButtonOnClickListener;
60+
3361
@Override
34-
public Dialog onCreateDialog(Bundle savedInstanceState) {
62+
public @NonNull Dialog onCreateDialog(Bundle savedInstanceState) {
3563
Dialog dialog = super.onCreateDialog(savedInstanceState);
36-
mDrawableId = getArguments().getInt("drawableId");
37-
mTitleId = getArguments().getInt("titleId");
38-
mDescriptionId = getArguments().getInt("descriptionId");
39-
mButtonPositiveId = getArguments().getInt("buttonPositiveId");
40-
// request a window without the title
41-
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
64+
mDrawableResId = getArguments().getInt(KEY_DRAWABLE_RES_ID);
65+
mTitleResId = getArguments().getInt(KEY_TITLE_RES_ID);
66+
mDescriptionResId = getArguments().getInt(KEY_DESCRIPTION_RES_ID);
67+
mButtonPositiveResId = getArguments().getInt(KEY_BUTTON_POSITIVE_RES_ID);
4268
dialog.setCanceledOnTouchOutside(false);
4369
dialog.setCancelable(false);
4470
return dialog;
4571
}
4672

73+
@Override
74+
public void setupDialog(Dialog dialog, int style) {
75+
((AppCompatDialog) dialog).supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
76+
}
77+
4778
@Override
4879
public View onCreateView(LayoutInflater inflater, ViewGroup container,
4980
Bundle savedInstanceState) {
@@ -53,19 +84,33 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
5384
@Override
5485
public void onViewCreated(View view, Bundle savedInstanceState) {
5586
super.onViewCreated(view, savedInstanceState);
56-
Button btn = (Button) view.findViewById(R.id.promo_dialog_button_positive);
57-
btn.setText(mButtonPositiveId);
5887
ImageView image = (ImageView) view.findViewById(R.id.promo_dialog_image);
59-
image.setImageResource(mDrawableId);
88+
image.setImageResource(mDrawableResId);
6089
WPTextView title = (WPTextView) view.findViewById(R.id.promo_dialog_title);
61-
title.setText(mTitleId);
90+
title.setText(mTitleResId);
6291
WPTextView desc = (WPTextView) view.findViewById(R.id.promo_dialog_description);
63-
desc.setText(mDescriptionId);
64-
btn.setOnClickListener(new View.OnClickListener() {
65-
@Override
66-
public void onClick(View v) {
67-
getDialog().cancel();
68-
}
69-
});
92+
desc.setText(mDescriptionResId);
93+
94+
Button btn = (Button) view.findViewById(R.id.promo_dialog_button_positive);
95+
btn.setText(mButtonPositiveResId);
96+
if (mPositiveButtonOnClickListener == null) {
97+
btn.setOnClickListener(new View.OnClickListener() {
98+
@Override
99+
public void onClick(View v) {
100+
getDialog().cancel();
101+
}
102+
});
103+
} else {
104+
btn.setOnClickListener(mPositiveButtonOnClickListener);
105+
}
106+
}
107+
108+
public void setPositiveButtonOnClickListener(View.OnClickListener listener) {
109+
mPositiveButtonOnClickListener = listener;
110+
}
111+
112+
public void redrawForOrientationChange() {
113+
LinearLayout imageContainer = (LinearLayout) getView().findViewById(R.id.promo_dialog_image_container);
114+
imageContainer.setVisibility(DisplayUtils.isLandscape(getActivity()) ? View.GONE : View.VISIBLE);
70115
}
71116
}

0 commit comments

Comments
 (0)