commit
c1b34bd382
6 changed files with 134 additions and 74 deletions
|
@ -297,12 +297,7 @@ public class IntentHelper {
|
||||||
Uri uri = intent.getData();
|
Uri uri = intent.getData();
|
||||||
if (uri.toString().startsWith("osmand-oauth")) {
|
if (uri.toString().startsWith("osmand-oauth")) {
|
||||||
String oauthVerifier = uri.getQueryParameter("oauth_verifier");
|
String oauthVerifier = uri.getQueryParameter("oauth_verifier");
|
||||||
app.getOsmOAuthHelper().authorize(oauthVerifier);
|
app.getOsmOAuthHelper().authorize(oauthVerifier, getOnAuthorizeListener());
|
||||||
for (Fragment fragment : mapActivity.getSupportFragmentManager().getFragments()) {
|
|
||||||
if (fragment instanceof OsmAuthorizationListener) {
|
|
||||||
((OsmAuthorizationListener) fragment).authorizationCompleted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mapActivity.setIntent(null);
|
mapActivity.setIntent(null);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -310,6 +305,19 @@ public class IntentHelper {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OsmAuthorizationListener getOnAuthorizeListener() {
|
||||||
|
return new OsmAuthorizationListener() {
|
||||||
|
@Override
|
||||||
|
public void authorizationCompleted() {
|
||||||
|
for (Fragment fragment : mapActivity.getSupportFragmentManager().getFragments()) {
|
||||||
|
if (fragment instanceof OsmAuthorizationListener) {
|
||||||
|
((OsmAuthorizationListener) fragment).authorizationCompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private boolean handleSendText(Intent intent) {
|
private boolean handleSendText(Intent intent) {
|
||||||
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
|
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
|
||||||
if (!Algorithms.isEmpty(sharedText)) {
|
if (!Algorithms.isEmpty(sharedText)) {
|
||||||
|
|
|
@ -62,7 +62,6 @@ import net.osmand.plus.osmedit.FileTypeBottomSheetDialogFragment.FileTypeFragmen
|
||||||
import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener;
|
import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener;
|
||||||
import net.osmand.plus.osmedit.OsmPoint.Group;
|
import net.osmand.plus.osmedit.OsmPoint.Group;
|
||||||
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
|
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
|
||||||
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.PoiUploaderType;
|
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
@ -638,12 +637,12 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
||||||
&& !Algorithms.isEmpty(settings.USER_PASSWORD.get());
|
&& !Algorithms.isEmpty(settings.USER_PASSWORD.get());
|
||||||
if (hasPoiGroup(points)) {
|
if (hasPoiGroup(points)) {
|
||||||
if (isLogged) {
|
if (isLogged) {
|
||||||
SendPoiBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), points);
|
SendPoiBottomSheetFragment.showInstance(getChildFragmentManager(), points);
|
||||||
} else {
|
} else {
|
||||||
LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), this);
|
LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), this);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SendOsmNoteBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), points);
|
SendOsmNoteBottomSheetFragment.showInstance(getChildFragmentManager(), points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package net.osmand.plus.osmedit.dialogs;
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
|
@ -171,9 +172,16 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRightBottomButtonClick() {
|
protected void onRightBottomButtonClick() {
|
||||||
ProgressDialogPoiUploader progressDialogPoiUploader;
|
ProgressDialogPoiUploader progressDialogPoiUploader = null;
|
||||||
progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) getActivity());
|
Activity activity = getActivity();
|
||||||
progressDialogPoiUploader.showProgressDialog(poi, false, uploadAnonymously.isChecked());
|
if (activity instanceof MapActivity) {
|
||||||
|
progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity);
|
||||||
|
} else if (getParentFragment() instanceof ProgressDialogPoiUploader) {
|
||||||
|
progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment();
|
||||||
|
}
|
||||||
|
if (progressDialogPoiUploader != null) {
|
||||||
|
progressDialogPoiUploader.showProgressDialog(poi, false, uploadAnonymously.isChecked());
|
||||||
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package net.osmand.plus.osmedit.dialogs;
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -109,19 +110,25 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRightBottomButtonClick() {
|
protected void onRightBottomButtonClick() {
|
||||||
final ProgressDialogPoiUploader progressDialogPoiUploader;
|
ProgressDialogPoiUploader progressDialogPoiUploader = null;
|
||||||
progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) getActivity());
|
Activity activity = getActivity();
|
||||||
|
if (activity instanceof MapActivity) {
|
||||||
String comment = messageEditText.getText().toString();
|
progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity);
|
||||||
if (comment.length() > 0) {
|
} else if (getParentFragment() instanceof ProgressDialogPoiUploader) {
|
||||||
for (OsmPoint osmPoint : poi) {
|
progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment();
|
||||||
if (osmPoint.getGroup() == OsmPoint.Group.POI) {
|
}
|
||||||
((OpenstreetmapPoint) osmPoint).setComment(comment);
|
if (progressDialogPoiUploader != null) {
|
||||||
break;
|
String comment = messageEditText.getText().toString();
|
||||||
|
if (comment.length() > 0) {
|
||||||
|
for (OsmPoint osmPoint : poi) {
|
||||||
|
if (osmPoint.getGroup() == OsmPoint.Group.POI) {
|
||||||
|
((OpenstreetmapPoint) osmPoint).setComment(comment);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
progressDialogPoiUploader.showProgressDialog(poi, closeChangeSet.isChecked(), false);
|
||||||
}
|
}
|
||||||
progressDialogPoiUploader.showProgressDialog(poi, closeChangeSet.isChecked(), false);
|
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
package net.osmand.plus.osmedit.oauth;
|
package net.osmand.plus.osmedit.oauth;
|
||||||
|
|
||||||
import android.net.TrafficStats;
|
import android.net.TrafficStats;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.github.scribejava.core.model.OAuth1AccessToken;
|
import com.github.scribejava.core.model.OAuth1AccessToken;
|
||||||
import com.github.scribejava.core.model.OAuth1RequestToken;
|
import com.github.scribejava.core.model.OAuth1RequestToken;
|
||||||
import com.github.scribejava.core.model.OAuthAsyncRequestCallback;
|
import com.github.scribejava.core.model.OAuthAsyncRequestCallback;
|
||||||
|
@ -16,18 +19,22 @@ import net.osmand.osm.oauth.OsmOAuthAuthorizationClient;
|
||||||
import net.osmand.plus.BuildConfig;
|
import net.osmand.plus.BuildConfig;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
|
import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.*;
|
||||||
|
|
||||||
public class OsmOAuthAuthorizationAdapter {
|
public class OsmOAuthAuthorizationAdapter {
|
||||||
|
|
||||||
private static final int THREAD_ID = 10101;
|
private static final int THREAD_ID = 10101;
|
||||||
private static final String OSM_USER = "user";
|
private static final String OSM_USER = "user";
|
||||||
private static final String DISPLAY_NAME = "display_name";
|
private static final String DISPLAY_NAME = "display_name";
|
||||||
private static final String OSM_USER_DETAILS_URL = "https://api.openstreetmap.org/api/0.6/user/details";
|
private static final String OSM_USER_DETAILS_URL = "https://api.openstreetmap.org/api/0.6/user/details";
|
||||||
|
public final static Log log = PlatformUtil.getLog(OsmOAuthAuthorizationAdapter.class);
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
private OsmOAuthAuthorizationClient client =
|
private OsmOAuthAuthorizationClient client =
|
||||||
|
@ -61,9 +68,8 @@ public class OsmOAuthAuthorizationAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startOAuth(ViewGroup rootLayout) {
|
public void startOAuth(final ViewGroup rootLayout) {
|
||||||
OAuth1RequestToken requestToken = client.startOAuth();
|
new StartOAuthAsyncTask(rootLayout).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
||||||
loadWebView(rootLayout, client.getService().getAuthorizationUrl(requestToken));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveToken() {
|
private void saveToken() {
|
||||||
|
@ -93,30 +99,91 @@ public class OsmOAuthAuthorizationAdapter {
|
||||||
return client.performRequestWithoutAuth(url, method, body);
|
return client.performRequestWithoutAuth(url, method, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void authorize(String oauthVerifier) {
|
public void authorize(String oauthVerifier, final OsmOAuthHelper helper, final OsmAuthorizationListener listener) {
|
||||||
client.authorize(oauthVerifier);
|
new AuthorizeAsyncTask(helper, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, oauthVerifier);
|
||||||
saveToken();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserName() throws InterruptedException, ExecutionException, IOException, XmlPullParserException {
|
private class StartOAuthAsyncTask extends AsyncTask<Void, Void, OAuth1RequestToken> {
|
||||||
Response response = getOsmUserDetails();
|
|
||||||
return parseUserName(response);
|
private final ViewGroup rootLayout;
|
||||||
|
|
||||||
|
public StartOAuthAsyncTask(ViewGroup rootLayout) {
|
||||||
|
this.rootLayout = rootLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected OAuth1RequestToken doInBackground(Void... params) {
|
||||||
|
return client.startOAuth();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(@NonNull OAuth1RequestToken requestToken) {
|
||||||
|
loadWebView(rootLayout, client.getService().getAuthorizationUrl(requestToken));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException {
|
private class AuthorizeAsyncTask extends AsyncTask<String, Void, Void> {
|
||||||
return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String parseUserName(Response response) throws XmlPullParserException, IOException {
|
private final OsmOAuthHelper helper;
|
||||||
String userName = null;
|
private final OsmAuthorizationListener listener;
|
||||||
XmlPullParser parser = PlatformUtil.newXMLPullParser();
|
|
||||||
parser.setInput(response.getStream(), "UTF-8");
|
public AuthorizeAsyncTask(OsmOAuthHelper helper, OsmAuthorizationListener listener) {
|
||||||
int tok;
|
this.helper = helper;
|
||||||
while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
|
this.listener = listener;
|
||||||
if (tok == XmlPullParser.START_TAG && OSM_USER.equals(parser.getName())) {
|
}
|
||||||
userName = parser.getAttributeValue("", DISPLAY_NAME);
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(String... oauthVerifier) {
|
||||||
|
client.authorize(oauthVerifier[0]);
|
||||||
|
saveToken();
|
||||||
|
updateUserName();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.authorizationCompleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return userName;
|
|
||||||
|
public void updateUserName() {
|
||||||
|
String userName = "";
|
||||||
|
try {
|
||||||
|
userName = getUserName();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.error(e);
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
log.error(e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(e);
|
||||||
|
} catch (XmlPullParserException e) {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
|
app.getSettings().USER_DISPLAY_NAME.set(userName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() throws InterruptedException, ExecutionException, IOException, XmlPullParserException {
|
||||||
|
Response response = getOsmUserDetails();
|
||||||
|
return parseUserName(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException {
|
||||||
|
return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String parseUserName(Response response) throws XmlPullParserException, IOException {
|
||||||
|
String userName = null;
|
||||||
|
XmlPullParser parser = PlatformUtil.newXMLPullParser();
|
||||||
|
parser.setInput(response.getStream(), "UTF-8");
|
||||||
|
int tok;
|
||||||
|
while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
|
||||||
|
if (tok == XmlPullParser.START_TAG && OSM_USER.equals(parser.getName())) {
|
||||||
|
userName = parser.getAttributeValue("", DISPLAY_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,25 +4,13 @@ import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import net.osmand.PlatformUtil;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
|
|
||||||
public class OsmOAuthHelper {
|
public class OsmOAuthHelper {
|
||||||
|
|
||||||
private static final Log log = PlatformUtil.getLog(OsmOAuthHelper.class);
|
|
||||||
|
|
||||||
private final OsmandApplication app;
|
|
||||||
|
|
||||||
private final OsmOAuthAuthorizationAdapter authorizationAdapter;
|
private final OsmOAuthAuthorizationAdapter authorizationAdapter;
|
||||||
|
|
||||||
public OsmOAuthHelper(@NonNull OsmandApplication app) {
|
public OsmOAuthHelper(@NonNull OsmandApplication app) {
|
||||||
this.app = app;
|
|
||||||
authorizationAdapter = new OsmOAuthAuthorizationAdapter(app);
|
authorizationAdapter = new OsmOAuthAuthorizationAdapter(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,31 +18,14 @@ public class OsmOAuthHelper {
|
||||||
authorizationAdapter.startOAuth(view);
|
authorizationAdapter.startOAuth(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void authorize(String oauthVerifier) {
|
public void authorize(String oauthVerifier, OsmAuthorizationListener listener) {
|
||||||
authorizationAdapter.authorize(oauthVerifier);
|
authorizationAdapter.authorize(oauthVerifier, this, listener);
|
||||||
updateUserName();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OsmOAuthAuthorizationAdapter getAuthorizationAdapter() {
|
public OsmOAuthAuthorizationAdapter getAuthorizationAdapter() {
|
||||||
return authorizationAdapter;
|
return authorizationAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUserName() {
|
|
||||||
String userName = "";
|
|
||||||
try {
|
|
||||||
userName = authorizationAdapter.getUserName();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
log.error(e);
|
|
||||||
} catch (ExecutionException e) {
|
|
||||||
log.error(e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e);
|
|
||||||
} catch (XmlPullParserException e) {
|
|
||||||
log.error(e);
|
|
||||||
}
|
|
||||||
app.getSettings().USER_DISPLAY_NAME.set(userName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface OsmAuthorizationListener {
|
public interface OsmAuthorizationListener {
|
||||||
void authorizationCompleted();
|
void authorizationCompleted();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue