map preview provider

This commit is contained in:
Riko Sakurauchi 2019-12-17 16:06:28 +08:00
parent 016b4507ec
commit e08e7f5ca6
No known key found for this signature in database
GPG Key ID: 25AC0345B92902AF
9 changed files with 91 additions and 22 deletions

View File

@ -1225,9 +1225,18 @@ public class AndroidUtilities {
return ((long) (value * 1000000)) / 1000000.0;
}
public static String formapMapUrl(int account, double lat, double lon, int width, int height, boolean marker, int zoom) {
public static String formapMapUrl(boolean isSecretChat, double lat, double lon, int width, int height, boolean marker, int zoom) {
int scale = Math.min(2, (int) Math.ceil(AndroidUtilities.density));
int provider = MessagesController.getInstance(account).mapProvider;
int provider = 2;
if (isSecretChat) {
if (SharedConfig.mapPreviewType == 1) {
provider = 1;
}
} else {
if (NekoConfig.mapPreviewProvider == 1) {
provider = 1;
}
}
if (provider == 1 || provider == 3) {
String lang = null;
String[] availableLangs = new String[]{"ru_RU", "tr_TR"};
@ -1246,7 +1255,7 @@ public class AndroidUtilities {
return String.format(Locale.US, "https://static-maps.yandex.ru/1.x/?ll=%.6f,%.6f&z=%d&size=%d,%d&l=map&scale=%d&lang=%s", lon, lat, zoom, width * scale, height * scale, scale, lang);
}
} else {
String k = MessagesController.getInstance(account).mapKey;
String k = "";
if (!TextUtils.isEmpty(k)) {
if (marker) {
return String.format(Locale.US, "https://maps.googleapis.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&maptype=roadmap&scale=%d&markers=color:red%%7Csize:mid%%7C%.6f,%.6f&sensor=false&key=%s", lat, lon, zoom, width, height, scale, lat, lon, k);

View File

@ -170,6 +170,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import tw.nekomimi.nekogram.NekoConfig;
import static org.telegram.messenger.MessageObject.POSITION_FLAG_BOTTOM;
import static org.telegram.messenger.MessageObject.POSITION_FLAG_LEFT;
import static org.telegram.messenger.MessageObject.POSITION_FLAG_RIGHT;
@ -9672,10 +9674,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg
}
imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8), photoWidth, height);
String currentUrl = AndroidUtilities.formapMapUrl(currentAccount, currentBlock.geo.lat, currentBlock.geo._long, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), true, 15);
String currentUrl = AndroidUtilities.formapMapUrl(false, currentBlock.geo.lat, currentBlock.geo._long, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), true, 15);
WebFile currentWebFile = WebFile.createWithGeoPoint(currentBlock.geo, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)));
currentMapProvider = MessagesController.getInstance(currentAccount).mapProvider;
if (NekoConfig.mapPreviewProvider == 0) {
currentMapProvider = 2;
} else if (NekoConfig.mapPreviewProvider == 1) {
currentMapProvider = 1;
} else {
currentMapProvider = -1;
}
if (currentMapProvider == 2) {
if (currentWebFile != null) {
imageView.setImage(ImageLocation.getForWebFile(currentWebFile), null, Theme.chat_locationDrawable[0], null, currentPage, 0);

View File

@ -1961,6 +1961,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
double lat = object.messageOwner.media.geo.lat;
double lon = object.messageOwner.media.geo._long;
String url;
boolean isSecretChat = (int) object.getDialogId() == 0;
if (object.messageOwner.media instanceof TLRPC.TL_messageMediaGeoLive) {
int photoWidth = backgroundWidth - AndroidUtilities.dp(21);
int photoHeight = AndroidUtilities.dp(195);
@ -1969,15 +1970,15 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
double rad = offset / Math.PI;
double y = Math.round(offset - rad * Math.log((1 + Math.sin(lat * Math.PI / 180.0)) / (1 - Math.sin(lat * Math.PI / 180.0))) / 2) - (AndroidUtilities.dp(10.3f) << (21 - 15));
lat = (Math.PI / 2.0 - 2 * Math.atan(Math.exp((y - offset) / rad))) * 180.0 / Math.PI;
url = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), false, 15);
url = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), false, 15);
} else if (!TextUtils.isEmpty(object.messageOwner.media.title)) {
int photoWidth = backgroundWidth - AndroidUtilities.dp(21);
int photoHeight = AndroidUtilities.dp(195);
url = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
url = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
} else {
int photoWidth = backgroundWidth - AndroidUtilities.dp(12);
int photoHeight = AndroidUtilities.dp(195);
url = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
url = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
}
return !url.equals(currentUrl);
} else if (currentPhotoObject == null || currentPhotoObject.location instanceof TLRPC.TL_fileLocationUnavailable) {
@ -3493,6 +3494,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
photoImage.setForcePreview(messageObject.needDrawBluredPreview());
boolean isSecretChat = (int) messageObject.getDialogId() == 0;
if (messageObject.type == 9) {
if (AndroidUtilities.isTablet()) {
backgroundWidth = Math.min(AndroidUtilities.getMinTabletSide() - AndroidUtilities.dp(isChat && messageObject.needDrawAvatar() && !messageObject.isOutOwner() ? 102 : 50), AndroidUtilities.dp(300));
@ -3595,7 +3597,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
double rad = offset / Math.PI;
double y = Math.round(offset - rad * Math.log((1 + Math.sin(lat * Math.PI / 180.0)) / (1 - Math.sin(lat * Math.PI / 180.0))) / 2) - (AndroidUtilities.dp(10.3f) << (21 - 15));
lat = (Math.PI / 2.0 - 2 * Math.atan(Math.exp((y - offset) / rad))) * 180.0 / Math.PI;
currentUrl = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), false, 15);
currentUrl = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), false, 15);
currentWebFile = WebFile.createWithGeoPoint(lat, lon, point.access_hash, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)));
if (!(locationExpired = isCurrentLocationTimeExpired(messageObject))) {
@ -3640,7 +3642,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
photoHeight = AndroidUtilities.dp(195);
mediaBackground = false;
currentUrl = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
currentUrl = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
currentWebFile = WebFile.createWithGeoPoint(point, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)));
docTitleLayout = StaticLayoutEx.createStaticLayout(messageObject.messageOwner.media.title, Theme.chat_locationTitlePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, maxWidth, 1);
@ -3671,10 +3673,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
photoWidth = backgroundWidth - AndroidUtilities.dp(8);
photoHeight = AndroidUtilities.dp(195);
currentUrl = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
currentUrl = AndroidUtilities.formapMapUrl(isSecretChat, lat, lon, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), true, 15);
currentWebFile = WebFile.createWithGeoPoint(point, (int) (photoWidth / AndroidUtilities.density), (int) (photoHeight / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)));
}
if ((int) messageObject.getDialogId() == 0) {
if (isSecretChat) {
if (SharedConfig.mapPreviewType == 0) {
currentMapProvider = 2;
} else if (SharedConfig.mapPreviewType == 1) {
@ -3683,7 +3685,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
currentMapProvider = -1;
}
} else {
currentMapProvider = MessagesController.getInstance(messageObject.currentAccount).mapProvider;
if (NekoConfig.mapPreviewProvider == 0) {
currentMapProvider = 2;
} else if (NekoConfig.mapPreviewProvider == 1) {
currentMapProvider = 1;
} else {
currentMapProvider = -1;
}
}
if (currentMapProvider == -1) {
photoImage.setImage(null, null, Theme.chat_locationDrawable[messageObject.isOutOwner() ? 1 : 0], null, messageObject, 0);

View File

@ -47,6 +47,8 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Locale;
import tw.nekomimi.nekogram.NekoConfig;
public class ContextLinkCell extends View implements DownloadController.FileDownloadProgressListener {
private final static int DOCUMENT_ATTACH_TYPE_NONE = 0;
@ -220,10 +222,10 @@ public class ContextLinkCell extends View implements DownloadController.FileDown
if (inlineResult.send_message instanceof TLRPC.TL_botInlineMessageMediaVenue || inlineResult.send_message instanceof TLRPC.TL_botInlineMessageMediaGeo) {
double lat = inlineResult.send_message.geo.lat;
double lon = inlineResult.send_message.geo._long;
if (MessagesController.getInstance(currentAccount).mapProvider == 2) {
if (NekoConfig.mapPreviewProvider == 0) {
webFile = WebFile.createWithGeoPoint(inlineResult.send_message.geo, 72, 72, 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)));
} else {
urlLocation = AndroidUtilities.formapMapUrl(currentAccount, lat, lon, 72, 72, true, 15);
urlLocation = AndroidUtilities.formapMapUrl(false, lat, lon, 72, 72, true, 15);
}
}
}

View File

@ -696,7 +696,7 @@ public class AlertsCreator {
public static AlertDialog showSecretLocationAlert(Context context, int currentAccount, final Runnable onSelectRunnable, boolean inChat) {
ArrayList<String> arrayList = new ArrayList<>();
int providers = MessagesController.getInstance(currentAccount).availableMapProviders;
int providers = 5; // MessagesController.getInstance(currentAccount).availableMapProviders;
if ((providers & 1) != 0) {
arrayList.add(LocaleController.getString("MapPreviewProviderTelegram", R.string.MapPreviewProviderTelegram));
}

View File

@ -80,6 +80,8 @@ import org.telegram.ui.Components.TypingDotsDrawable;
import java.io.File;
import java.util.ArrayList;
import tw.nekomimi.nekogram.NekoConfig;
public class PopupNotificationActivity extends Activity implements NotificationCenter.NotificationCenterDelegate {
private ActionBar actionBar;
@ -923,10 +925,10 @@ public class PopupNotificationActivity extends Activity implements NotificationC
double lat = geoPoint.lat;
double lon = geoPoint._long;
if (MessagesController.getInstance(messageObject.currentAccount).mapProvider == 2) {
if (NekoConfig.mapPreviewProvider == 0) {
imageView.setImage(ImageLocation.getForWebFile(WebFile.createWithGeoPoint(geoPoint, 100, 100, 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density)))), null, null, null, messageObject);
} else {
String currentUrl = AndroidUtilities.formapMapUrl(messageObject.currentAccount, lat, lon, 100, 100, true, 15);
String currentUrl = AndroidUtilities.formapMapUrl(false, lat, lon, 100, 100, true, 15);
imageView.setImage(currentUrl, null, null);
}
}

View File

@ -719,7 +719,7 @@ public class PrivacySettingsActivity extends BaseFragment implements Notificatio
value = LocaleController.getString("MapPreviewProviderTelegram", R.string.MapPreviewProviderTelegram);
break;
case 1:
value = LocaleController.getString("MapPreviewProviderGoogle", R.string.MapPreviewProviderGoogle);
value = LocaleController.getString("MapPreviewProviderYandex", R.string.MapPreviewProviderYandex);
break;
case 2:
default:

View File

@ -17,6 +17,7 @@ public class NekoConfig {
public static boolean forceTablet = false;
public static int typeface = 0;
public static int nameOrder = 1;
public static int mapPreviewProvider = 0;
public static boolean transparentStatusBar = true;
public static boolean navigationBarTint = true;
public static int navigationBarColor = 2;
@ -46,6 +47,7 @@ public class NekoConfig {
editor.putBoolean("forceTablet", forceTablet);
editor.putInt("typeface", typeface);
editor.putInt("nameOrder", nameOrder);
editor.putInt("mapPreviewProvider", mapPreviewProvider);
editor.putBoolean("transparentStatusBar", transparentStatusBar);
editor.putBoolean("navigationBarTint", navigationBarTint);
editor.putInt("navigationBarColor", navigationBarColor);
@ -76,6 +78,7 @@ public class NekoConfig {
forceTablet = preferences.getBoolean("forceTablet", false);
typeface = preferences.getInt("typeface", 0);
nameOrder = preferences.getInt("nameOrder", 1);
mapPreviewProvider = preferences.getInt("mapPreviewProvider", 0);
transparentStatusBar = preferences.getBoolean("transparentStatusBar", true);
navigationBarTint = preferences.getBoolean("navigationBarTint", true);
navigationBarColor = preferences.getInt("navigationBarColor", 2);
@ -179,6 +182,14 @@ public class NekoConfig {
editor.commit();
}
public static void setMapPreviewProvider(int provider) {
mapPreviewProvider = provider;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("nekoconfig", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("mapPreviewProvider", mapPreviewProvider);
editor.commit();
}
public static void toggleTransparentStatusBar() {
transparentStatusBar = !transparentStatusBar;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("nekoconfig", Activity.MODE_PRIVATE);

View File

@ -65,6 +65,7 @@ public class NekoSettingsActivity extends BaseFragment {
private int inappCameraRow;
private int useSystemEmojiRow;
private int ignoreBlockedRow;
private int mapPreviewRow;
private int chat2Row;
private int settingsRow;
@ -224,6 +225,19 @@ public class NekoSettingsActivity extends BaseFragment {
if (view instanceof TextCheckCell) {
((TextCheckCell) view).setChecked(NekoConfig.typeface == 1);
}
} else if (position == mapPreviewRow) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("MapPreviewProvider", R.string.MapPreviewProvider));
CharSequence[] items = new CharSequence[]{
LocaleController.getString("MapPreviewProviderTelegram", R.string.MapPreviewProviderTelegram),
LocaleController.getString("MapPreviewProviderYandex", R.string.MapPreviewProviderYandex),
LocaleController.getString("MapPreviewProviderNobody", R.string.MapPreviewProviderNobody),
};
builder.setItems(items, (dialog, which) -> {
NekoConfig.setMapPreviewProvider(which);
listAdapter.notifyItemChanged(mapPreviewRow);
});
showDialog(builder.create());
} else if (position == nameOrderRow) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("NameOrder", R.string.NameOrder));
@ -259,6 +273,7 @@ public class NekoSettingsActivity extends BaseFragment {
inappCameraRow = rowCount++;
useSystemEmojiRow = rowCount++;
ignoreBlockedRow = rowCount++;
mapPreviewRow = rowCount++;
chat2Row = rowCount++;
messageMenuRow = rowCount++;
showAddToSavedMessagesRow = rowCount++;
@ -368,6 +383,20 @@ public class NekoSettingsActivity extends BaseFragment {
value = LocaleController.getString("NavigationBarColorBlack", R.string.NavigationBarColorBlack);
}
textCell.setTextAndValue(LocaleController.getString("NavigationBarColor", R.string.NavigationBarColor), value, true);
} else if (position == mapPreviewRow) {
String value;
switch (NekoConfig.mapPreviewProvider) {
case 0:
value = LocaleController.getString("MapPreviewProviderTelegram", R.string.MapPreviewProviderTelegram);
break;
case 1:
value = LocaleController.getString("MapPreviewProviderYandex", R.string.MapPreviewProviderYandex);
break;
case 2:
default:
value = LocaleController.getString("MapPreviewProviderNobody", R.string.MapPreviewProviderNobody);
}
textCell.setTextAndValue(LocaleController.getString("MapPreviewProvider", R.string.MapPreviewProvider), value, false);
}
break;
}
@ -398,7 +427,7 @@ public class NekoSettingsActivity extends BaseFragment {
} else if (position == typefaceRow) {
textCell.setTextAndCheck(LocaleController.getString("TypefaceUseDefault", R.string.TypefaceUseDefault), NekoConfig.typeface == 1, true);
} else if (position == ignoreBlockedRow) {
textCell.setTextAndCheck(LocaleController.getString("IgnoreBlocked", R.string.IgnoreBlocked), NekoConfig.ignoreBlocked, false);
textCell.setTextAndCheck(LocaleController.getString("IgnoreBlocked", R.string.IgnoreBlocked), NekoConfig.ignoreBlocked, true);
} else if (position == forceTabletRow) {
textCell.setTextAndCheck(LocaleController.getString("ForceTabletMode", R.string.ForceTabletMode), NekoConfig.forceTablet, true);
}
@ -427,7 +456,7 @@ public class NekoSettingsActivity extends BaseFragment {
position == useSystemEmojiRow || position == ipv6Row || position == typefaceRow ||
position == showChangePermissionsRow || position == showAdminActionsRow || position == showReportRow ||
position == showPrPrRow || position == showAddToSavedMessagesRow ||
position == nameOrderRow || position == forceTabletRow ||
position == nameOrderRow || position == forceTabletRow || position == mapPreviewRow ||
(position == transparentStatusBarRow && (NekoConfig.navigationBarTint || Build.VERSION.SDK_INT < Build.VERSION_CODES.O)) ||
(position == navigationBarColorRow && NekoConfig.navigationBarTint);
}
@ -468,7 +497,7 @@ public class NekoSettingsActivity extends BaseFragment {
public int getItemViewType(int position) {
if (position == settings2Row || position == messageMenu2Row || position == connection2Row || position == chat2Row) {
return 1;
} else if (position == nameOrderRow || position == navigationBarColorRow) {
} else if (position == nameOrderRow || position == navigationBarColorRow || position == mapPreviewRow) {
return 2;
} else if (position == ipv6Row || position == hidePhoneRow || position == inappCameraRow ||
position == showAddToSavedMessagesRow || position == showPrPrRow || position == showReportRow ||