forked from organicmaps/organicmaps
FB promo dialog.
This commit is contained in:
parent
34d536c8b3
commit
3739453ee4
4 changed files with 196 additions and 0 deletions
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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() {}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue