forked from organicmaps/organicmaps
[android] Replace PendingIntent with Activity.setResult()
PendingIntent is too low-level mechanism for this task. Activity.setResult() is easier to use for API callers. Signed-off-by: Roman Tsisyk <roman@tsisyk.com>
This commit is contained in:
parent
288e9a3883
commit
b7f48d354d
9 changed files with 73 additions and 106 deletions
|
@ -17,6 +17,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import com.mapswithme.maps.api.ParsedMwmRequest;
|
||||
import com.mapswithme.maps.base.BaseMwmFragmentActivity;
|
||||
import com.mapswithme.maps.dialog.AlertDialog;
|
||||
import com.mapswithme.maps.dialog.AlertDialogCallback;
|
||||
|
@ -44,6 +45,8 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity imp
|
|||
private static final String ERROR_LOADING_DIALOG_TAG = "error_loading_dialog";
|
||||
private static final int ERROR_LOADING_DIALOG_REQ_CODE = 234;
|
||||
|
||||
private static final int REQ_CODE_API_RESULT = 10;
|
||||
|
||||
public static final String EXTRA_COUNTRY = "country";
|
||||
|
||||
// Error codes, should match the same codes in JNI
|
||||
|
@ -89,7 +92,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity imp
|
|||
private final IntentProcessor[] mIntentProcessors = {
|
||||
new Factory.GeoIntentProcessor(),
|
||||
new Factory.HttpGeoIntentProcessor(),
|
||||
new Factory.MapsWithMeIntentProcessor(),
|
||||
new Factory.ApiIntentProcessor(),
|
||||
new Factory.HttpMapsIntentProcessor(),
|
||||
new Factory.OpenCountryTaskProcessor(),
|
||||
new Factory.KmzKmlProcessor(this),
|
||||
|
@ -390,13 +393,32 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity imp
|
|||
intent.putExtra(MwmActivity.EXTRA_TASK, mMapTaskToForward);
|
||||
intent.putExtra(MwmActivity.EXTRA_LAUNCH_BY_DEEP_LINK, true);
|
||||
mMapTaskToForward = null;
|
||||
|
||||
if (ParsedMwmRequest.getCurrentRequest() != null)
|
||||
{
|
||||
// Wait for the result from MwmActivity for API callers.
|
||||
startActivityForResult(intent, REQ_CODE_API_RESULT);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
startActivity(intent);
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||
{
|
||||
switch (requestCode)
|
||||
{
|
||||
case REQ_CODE_API_RESULT:
|
||||
setResult(resultCode, data);
|
||||
finish();
|
||||
break;
|
||||
default:
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
private void finishFilesDownload(int result)
|
||||
{
|
||||
if (result == ERR_NO_MORE_FILES)
|
||||
|
|
|
@ -1127,7 +1127,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
if (request == null)
|
||||
return;
|
||||
|
||||
request.setPointData(object.getLat(), object.getLon(), object.getTitle(), object.getApiId());
|
||||
object.setSubtitle(request.getTitle());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import androidx.annotation.StringRes;
|
|||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.mapswithme.maps.api.Const;
|
||||
import com.mapswithme.maps.base.BaseActivity;
|
||||
import com.mapswithme.maps.base.BaseActivityDelegate;
|
||||
import com.mapswithme.maps.location.LocationHelper;
|
||||
|
@ -29,6 +30,8 @@ public class SplashActivity extends AppCompatActivity implements BaseActivity
|
|||
private static final String EXTRA_ACTIVITY_TO_START = "extra_activity_to_start";
|
||||
public static final String EXTRA_INITIAL_INTENT = "extra_initial_intent";
|
||||
private static final int REQUEST_PERMISSIONS = 1;
|
||||
private static final int REQ_CODE_API_RESULT = 10;
|
||||
|
||||
private static final long DELAY = 100;
|
||||
|
||||
private boolean mCanceled = false;
|
||||
|
@ -190,12 +193,32 @@ public class SplashActivity extends AppCompatActivity implements BaseActivity
|
|||
input.getParcelableExtra(EXTRA_INITIAL_INTENT) :
|
||||
input;
|
||||
result.putExtra(EXTRA_INITIAL_INTENT, initialIntent);
|
||||
if (Const.ACTION_MWM_REQUEST.equals(initialIntent.getAction()))
|
||||
{
|
||||
// Wait for the result from MwmActivity for API callers.
|
||||
startActivityForResult(result, REQ_CODE_API_RESULT);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Counters.setFirstStartDialogSeen(this);
|
||||
startActivity(result);
|
||||
finish();
|
||||
}
|
||||
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||
{
|
||||
switch (requestCode)
|
||||
{
|
||||
case REQ_CODE_API_RESULT:
|
||||
// Propagate the result to API callers
|
||||
setResult(resultCode, data);
|
||||
finish();
|
||||
break;
|
||||
default:
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public Activity get()
|
||||
|
|
|
@ -7,8 +7,6 @@ public class Const
|
|||
static final String AUTHORITY = "com.mapswithme.maps.api";
|
||||
public static final String EXTRA_URL = AUTHORITY + ".url";
|
||||
public static final String EXTRA_TITLE = AUTHORITY + ".title";
|
||||
public static final String EXTRA_HAS_PENDING_INTENT = AUTHORITY + ".has_pen_intent";
|
||||
public static final String EXTRA_CALLER_PENDING_INTENT = AUTHORITY + ".pending_intent";
|
||||
public static final String EXTRA_PICK_POINT = AUTHORITY + ".pick_point";
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
package com.mapswithme.maps.api;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
|
||||
public class ParsedMwmRequest
|
||||
{
|
||||
|
@ -15,33 +9,13 @@ public class ParsedMwmRequest
|
|||
|
||||
// title
|
||||
private String mTitle;
|
||||
// pending intent to call back
|
||||
private PendingIntent mPendingIntent;
|
||||
// pick point mode
|
||||
private boolean mPickPoint;
|
||||
|
||||
// response data
|
||||
private boolean mHasPoint;
|
||||
private double mLat;
|
||||
private double mLon;
|
||||
private double mZoomLevel;
|
||||
|
||||
private String mName;
|
||||
private String mId;
|
||||
|
||||
|
||||
public double getLat() { return mLat; }
|
||||
|
||||
public double getLon() { return mLon; }
|
||||
|
||||
public String getName() { return mName;}
|
||||
|
||||
public static boolean isPickPointMode() { return hasRequest() && getCurrentRequest().mPickPoint; }
|
||||
public boolean isPickPointMode() { return mPickPoint; }
|
||||
|
||||
public static ParsedMwmRequest getCurrentRequest() { return sCurrentRequest; }
|
||||
|
||||
public static boolean hasRequest() { return sCurrentRequest != null; }
|
||||
|
||||
public static void setCurrentRequest(ParsedMwmRequest request) { sCurrentRequest = request; }
|
||||
|
||||
/**
|
||||
|
@ -54,9 +28,6 @@ public class ParsedMwmRequest
|
|||
request.mTitle = data.getStringExtra(Const.EXTRA_TITLE);
|
||||
request.mPickPoint = data.getBooleanExtra(Const.EXTRA_PICK_POINT, false);
|
||||
|
||||
if (data.getBooleanExtra(Const.EXTRA_HAS_PENDING_INTENT, false))
|
||||
request.mPendingIntent = data.getParcelableExtra(Const.EXTRA_CALLER_PENDING_INTENT);
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
|
@ -64,63 +35,6 @@ public class ParsedMwmRequest
|
|||
|
||||
public String getTitle() { return mTitle; }
|
||||
|
||||
// Request data
|
||||
public boolean hasPoint()
|
||||
{
|
||||
return mHasPoint;
|
||||
}
|
||||
|
||||
public void setHasPoint(boolean hasPoint) { mHasPoint = hasPoint; }
|
||||
|
||||
public boolean hasPendingIntent() { return mPendingIntent != null; }
|
||||
|
||||
public void setPointData(double lat, double lon, String name, String id)
|
||||
{
|
||||
mLat = lat;
|
||||
mLon = lon;
|
||||
mName = name;
|
||||
mId = id;
|
||||
}
|
||||
|
||||
public boolean sendResponse(Context context, boolean success)
|
||||
{
|
||||
if (hasPendingIntent())
|
||||
{
|
||||
mZoomLevel = Framework.nativeGetDrawScale();
|
||||
final Intent i = new Intent();
|
||||
if (success)
|
||||
{
|
||||
i.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_LAT, mLat)
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_LON, mLon)
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_NAME, mName)
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_ID, mId)
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_ZOOM, mZoomLevel);
|
||||
}
|
||||
try
|
||||
{
|
||||
mPendingIntent.send(context, success ? Activity.RESULT_OK : Activity.RESULT_CANCELED, i);
|
||||
return true;
|
||||
} catch (final Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void sendResponseAndFinish(final Activity activity, final boolean success)
|
||||
{
|
||||
activity.runOnUiThread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
sendResponse(activity, success);
|
||||
activity.finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Do not use constructor externally. Use {@link ParsedMwmRequest#extractFromIntent(android.content.Intent)} instead.
|
||||
*/
|
||||
|
|
|
@ -48,6 +48,9 @@ public class Factory
|
|||
final String scheme = intent.getScheme();
|
||||
if (!"geo".equals(scheme) && !"ge0".equals(scheme) && !"om".equals(scheme) && !"mapsme".equals(scheme))
|
||||
return null;
|
||||
SearchEngine.INSTANCE.cancelInteractiveSearch();
|
||||
final ParsedMwmRequest request = ParsedMwmRequest.extractFromIntent(intent);
|
||||
ParsedMwmRequest.setCurrentRequest(request);
|
||||
return new OpenUrlTask(uri.toString());
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +80,7 @@ public class Factory
|
|||
/**
|
||||
* Use this to invoke API task.
|
||||
*/
|
||||
public static class MapsWithMeIntentProcessor implements IntentProcessor
|
||||
public static class ApiIntentProcessor implements IntentProcessor
|
||||
{
|
||||
@Nullable
|
||||
@Override
|
||||
|
@ -94,7 +97,7 @@ public class Factory
|
|||
final ParsedMwmRequest request = ParsedMwmRequest.extractFromIntent(intent);
|
||||
ParsedMwmRequest.setCurrentRequest(request);
|
||||
|
||||
if (!ParsedMwmRequest.isPickPointMode())
|
||||
if (request.isPickPointMode())
|
||||
return new OpenUrlTask(apiUrl);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,8 +56,9 @@ public class FloatingSearchToolbarController extends SearchToolbarController
|
|||
public void refreshQuery()
|
||||
{
|
||||
showProgress(false);
|
||||
CharSequence query = ParsedMwmRequest.hasRequest() ?
|
||||
ParsedMwmRequest.getCurrentRequest().getTitle()
|
||||
final ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest();
|
||||
CharSequence query = request != null ?
|
||||
request.getTitle()
|
||||
: SearchEngine.INSTANCE.getQuery();
|
||||
|
||||
if (!TextUtils.isEmpty(query))
|
||||
|
|
|
@ -177,7 +177,7 @@ public enum SearchEngine implements NativeSearchListener,
|
|||
@MainThread
|
||||
private static void cancelApiCall()
|
||||
{
|
||||
if (ParsedMwmRequest.hasRequest())
|
||||
if (ParsedMwmRequest.getCurrentRequest() != null)
|
||||
ParsedMwmRequest.setCurrentRequest(null);
|
||||
Framework.nativeClearApiPoints();
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package com.mapswithme.maps.widget.placepage;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.location.Location;
|
||||
|
@ -36,6 +38,7 @@ import com.mapswithme.maps.Framework;
|
|||
import com.mapswithme.maps.MwmActivity;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.api.Const;
|
||||
import com.mapswithme.maps.api.ParsedMwmRequest;
|
||||
import com.mapswithme.maps.bookmarks.data.Bookmark;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
||||
|
@ -529,16 +532,19 @@ public class PlacePageView extends NestedScrollViewClickFixed
|
|||
return;
|
||||
}
|
||||
|
||||
if (ParsedMwmRequest.hasRequest())
|
||||
final ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest();
|
||||
if (request != null && request.isPickPointMode())
|
||||
{
|
||||
ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest();
|
||||
if (ParsedMwmRequest.isPickPointMode())
|
||||
request.setPointData(mMapObject.getLat(), mMapObject.getLon(), mMapObject.getTitle(), "");
|
||||
|
||||
request.sendResponseAndFinish(getActivity(), true);
|
||||
final Intent result = new Intent();
|
||||
result.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_LAT, mMapObject.getLat())
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_LON, mMapObject.getLon())
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_NAME, mMapObject.getTitle())
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_POINT_ID, mMapObject.getApiId())
|
||||
.putExtra(Const.EXTRA_MWM_RESPONSE_ZOOM, Framework.nativeGetDrawScale());
|
||||
getActivity().setResult(Activity.RESULT_OK, result);
|
||||
ParsedMwmRequest.setCurrentRequest(null);
|
||||
}
|
||||
else
|
||||
getActivity().finish();
|
||||
getActivity().finish();
|
||||
}
|
||||
|
||||
private void onRouteFromBtnClicked()
|
||||
|
@ -1139,7 +1145,8 @@ public class PlacePageView extends NestedScrollViewClickFixed
|
|||
return;
|
||||
}
|
||||
|
||||
if (showBackButton || ParsedMwmRequest.isPickPointMode())
|
||||
final ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest();
|
||||
if (showBackButton || (request != null && request.isPickPointMode()))
|
||||
buttons.add(PlacePageButtons.Item.BACK);
|
||||
|
||||
final boolean hasNumber = mapObject.hasPhoneNumber();
|
||||
|
|
Loading…
Add table
Reference in a new issue