FB promo dialog.

This commit is contained in:
Dmitry Yunitsky 2014-08-09 22:21:41 +03:00 committed by Alex Zolotarev
parent 34d536c8b3
commit 3739453ee4
4 changed files with 196 additions and 0 deletions

View file

@ -48,6 +48,10 @@
android:label="@string/app_name"
android:theme="@style/MWMMain">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/fb_app_id"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
@ -190,6 +194,8 @@
android:label="@string/more_apps_title"
android:screenOrientation="behind"/>
<activity android:name="com.facebook.LoginActivity"/>
<receiver
android:name="com.mapswithme.maps.background.ConnectivityChangedReceiver"
android:enabled="true"

View file

@ -23,6 +23,9 @@ import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.mapswithme.country.DownloadActivity;
import com.mapswithme.maps.Framework.OnBalloonListener;
import com.mapswithme.maps.LocationButtonImageSetter.ButtonState;
@ -46,6 +49,7 @@ import com.mapswithme.maps.widget.MapInfoView.OnVisibilityChangedListener;
import com.mapswithme.maps.widget.MapInfoView.State;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.Constants;
import com.mapswithme.util.FbUtil;
import com.mapswithme.util.LocationUtils;
import com.mapswithme.util.ShareAction;
import com.mapswithme.util.UiUtils;
@ -95,6 +99,25 @@ public class MWMActivity extends NvEventQueueActivity
private static final String IS_KML_MOVED = "KmlBeenMoved";
private static final String IS_KITKAT_MIGRATION_COMPLETED = "KitKatMigrationCompleted";
private static final String IS_FIRST_RUN = "FirstRun";
// facebook
private static final String PENDING_PUBLISH_KEY = "mShouldReauthorize";
private boolean mShouldReauthorize;
private UiLifecycleHelper mFbUiHelper;
private Session.StatusCallback mFbStatusCallback = new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (state.isOpened())
{
if (mShouldReauthorize &&
state.equals(SessionState.OPENED_TOKEN_UPDATED))
showPromoDialog();
}
}
};
public static Intent createShowMapIntent(Context context, Index index, boolean doAutoDownload)
{
@ -703,6 +726,9 @@ public class MWMActivity extends NvEventQueueActivity
if (value.equals(SCREENSHOTS_TASK_LOCATE))
onMyPositionClicked(null);
}
mFbUiHelper = new UiLifecycleHelper(this, mFbStatusCallback);
mFbUiHelper.onCreate(savedInstanceState);
}
private void setUpToolbars()
@ -769,6 +795,8 @@ public class MWMActivity extends NvEventQueueActivity
Framework.nativeClearBalloonListeners();
super.onDestroy();
mFbUiHelper.onDestroy();
}
@Override
@ -965,6 +993,8 @@ public class MWMActivity extends NvEventQueueActivity
stopWatchingCompassStatusUpdate();
super.onPause();
mFbUiHelper.onPause();
}
@Override
@ -988,6 +1018,47 @@ public class MWMActivity extends NvEventQueueActivity
mInfoView.onResume();
getMwmApplication().onMwmResume(this);
mFbUiHelper.onResume();
if (MWMApplication.get().isProVersion() && MWMApplication.get().nativeGetBoolean(IS_FIRST_RUN, true))
{
MWMApplication.get().nativeSetBoolean(IS_FIRST_RUN, false);
if (FbUtil.isPromoTimeNow())
showPromoDialog();
}
}
private void showPromoDialog()
{
new AlertDialog.Builder(MWMActivity.this)
.setMessage(getString(R.string.maps_me_is_free_today_android))
.setCancelable(true)
.setPositiveButton(android.R.string.ok, new Dialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
if (Session.getActiveSession() != null && Session.getActiveSession().isOpened())
mShouldReauthorize = FbUtil.makeFbPromoPost(MWMActivity.this);
else
{
mShouldReauthorize = true;
Session.openActiveSession(getActivity(), true, mFbStatusCallback);
}
dialog.dismiss();
}
})
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dlg, int which)
{
dlg.dismiss();
}
})
.create()
.show();
}
private void updateExternalStorageState()
@ -1304,8 +1375,14 @@ public class MWMActivity extends NvEventQueueActivity
final Point bmk = ((ParcelablePoint) data.getParcelableExtra(BookmarkActivity.PIN)).getPoint();
onBookmarkActivated(bmk.x, bmk.y);
}
else
{
mFbUiHelper.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
public interface MapTask extends Serializable
@ -1360,4 +1437,18 @@ public class MWMActivity extends NvEventQueueActivity
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putBoolean(PENDING_PUBLISH_KEY, mShouldReauthorize);
mFbUiHelper.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
mShouldReauthorize = savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false);
}
}

View file

@ -14,6 +14,7 @@ public class Constants
public static final String HTTP_GE0_PREFIX = "http://ge0.me/";
public static final String PLAY_MARKET_APP_PREFIX = "market://details?id=";
public static final String PLAY_MARKET_HTTP_APP_PREFIX = "http://play.google.com/store/apps/details?id=";
public static final String GEOLOCATION_SERVER_MAPSME = "http://geolocation.server/";
public static final String FB_MAPSME_COMMUNITY_HTTP = "http://www.facebook.com/MapsWithMe";

View file

@ -1,19 +1,38 @@
package com.mapswithme.util;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import com.facebook.AppEventsLogger;
import com.facebook.FacebookRequestError;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.RequestAsyncTask;
import com.facebook.Response;
import com.facebook.Session;
import com.mapswithme.maps.MWMApplication;
import com.mapswithme.maps.R;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.SimpleLogger;
import com.mapswithme.util.statistics.Statistics;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
public class FbUtil
{
public static final String PROMO_IMAGE_URL = "http://static.mapswithme.com/images/17th_august_promo.jpg";
private static final String PROMO_MARKET_URL = "http://maps.me/get?17auga";
public static Logger mLogger = SimpleLogger.get("MWM_FB");
private static final List<String> PUBLISH_PERMISSIONS = Arrays.asList("publish_actions");
public static void activate(Context context)
{
if (!Statistics.INSTANCE.isStatisticsEnabled(context))
@ -23,5 +42,84 @@ public class FbUtil
AppEventsLogger.activateApp(context, context.getString(R.string.fb_app_id));
}
public static boolean isSubsetOf(Collection<String> subset, Collection<String> superset)
{
for (String string : subset)
{
if (!superset.contains(string))
return false;
}
return true;
}
/**
* Tries to get session with publish permissions and create a promo post.
*
* @param activity
* @return true, if should reauthorize
*/
public static boolean makeFbPromoPost(Activity activity)
{
Session session = Session.getActiveSession();
if (session != null)
{
// check publish permissions
List<String> permissions = session.getPermissions();
if (!FbUtil.isSubsetOf(PUBLISH_PERMISSIONS, permissions))
{
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(activity, PUBLISH_PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return true;
}
final Bundle postParams = new Bundle();
postParams.putString("message", activity.getString(R.string.maps_me_is_free_today_facebook_post_android));
postParams.putString("link", PROMO_MARKET_URL);
postParams.putString("picture", PROMO_IMAGE_URL);
Request.Callback callback = new Request.Callback()
{
public void onCompleted(Response response)
{
FacebookRequestError error = response.getError();
if (error != null)
Utils.toastShortcut(MWMApplication.get(), error.getErrorMessage());
}
};
Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
return false;
}
public static boolean isPromoTimeNow()
{
final int promoYear = 2014;
final int promoDateStart = 17;
final int promoDateEnd = 18;
final int promoHourStart = 2;
final int promoHourEnd = 22;
final Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, promoYear);
calendar.set(Calendar.MONTH, Calendar.AUGUST);
calendar.set(Calendar.DAY_OF_MONTH, promoDateStart);
calendar.set(Calendar.HOUR_OF_DAY, promoHourStart);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
final long startMillis = calendar.getTimeInMillis();
calendar.set(Calendar.DAY_OF_MONTH, promoDateEnd);
calendar.set(Calendar.HOUR_OF_DAY, promoHourEnd);
final long endMillis = calendar.getTimeInMillis();
return System.currentTimeMillis() > startMillis && System.currentTimeMillis() < endMillis;
}
private FbUtil() {}
}