Improved ski maps plugin

This commit is contained in:
Alexey Kulish 2016-12-09 17:37:50 +03:00
parent 4f886351a0
commit 1e6ea8386c
9 changed files with 271 additions and 26 deletions

View file

@ -13,6 +13,7 @@
android:label="OsmAnd Ski Maps" > android:label="OsmAnd Ski Maps" >
<activity <activity
android:name="net.osmand.skimaps.SkiMapsActivity" android:name="net.osmand.skimaps.SkiMapsActivity"
android:theme="@style/AppTheme"
android:label="@string/app_name" > android:label="@string/app_name" >
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View file

@ -1,7 +1,7 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
android { android {
compileSdkVersion 21 compileSdkVersion 23
buildToolsVersion "23.0.1" buildToolsVersion "23.0.1"
signingConfigs { signingConfigs {
@ -64,4 +64,11 @@ repositories {
} }
dependencies { dependencies {
compile 'com.google.firebase:firebase-core:9.8.0'
compile 'com.google.firebase:firebase-config:9.8.0'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
} }
println "Apply GMS plugin"
apply plugin: 'com.google.gms.google-services'

View file

@ -0,0 +1,125 @@
{
"project_info": {
"project_number": "521675454867",
"firebase_url": "https://osmand-1e236.firebaseio.com",
"project_id": "osmand-1e236",
"storage_bucket": "osmand-1e236.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:521675454867:android:be0477f14dc015f4",
"android_client_info": {
"package_name": "net.osmand"
}
},
"oauth_client": [
{
"client_id": "521675454867-te1hdssotqq2dhu7pj2pjm17eulm1tvf.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "net.osmand",
"certificate_hash": "49A9ACE0BFEE7BB91506D7921F93A47808CB62AB"
}
},
{
"client_id": "521675454867-ttjur3617a74qj0a9rkbkbcjavvuebjp.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyBMaRMiPY-mS3J_-aX30sRBFB-WGIm-M-U"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 2,
"other_platform_oauth_client": [
{
"client_id": "521675454867-ttjur3617a74qj0a9rkbkbcjavvuebjp.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "521675454867-ta1aisohg7g0k542gdh9fbeb2v4qsncf.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "net.osmand.maps",
"app_store_id": "934850257"
}
}
]
},
"ads_service": {
"status": 2
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:521675454867:android:89d7051c910a2ed6",
"android_client_info": {
"package_name": "net.osmand.plus"
}
},
"oauth_client": [
{
"client_id": "521675454867-ttjur3617a74qj0a9rkbkbcjavvuebjp.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyBMaRMiPY-mS3J_-aX30sRBFB-WGIm-M-U"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:521675454867:android:7e1b6333fdbe27e4",
"android_client_info": {
"package_name": "net.osmand.skimapsPlugin"
}
},
"oauth_client": [
{
"client_id": "521675454867-ttjur3617a74qj0a9rkbkbcjavvuebjp.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyBMaRMiPY-mS3J_-aX30sRBFB-WGIm-M-U"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

View file

@ -1,13 +1,71 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" > android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/blue_background"
android:orientation="horizontal"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView <TextView
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="@string/plugin_title"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingTop="24dp"
android:paddingBottom="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/descriptionTextView"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal" android:text="@string/plugin_description"
android:text="@string/parking_plugin_installed" android:textColor="@color/primary_text_light"
android:textSize="22sp"/> android:textSize="16sp"/>
</LinearLayout>
<android.support.v7.widget.AppCompatButton
android:id="@+id/buyButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:backgroundTint="@color/blue_background"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="16dp"
android:text="@string/install_osmand"/>
</LinearLayout>
</FrameLayout> </FrameLayout>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="blue_background">#2e73ef</color>
<color name="white">#fff</color>
<color name="primary_text_light">#de000000</color>
<color name="secondary_text_light">#8a000000</color>
</resources>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="plugin_title">Ski Map — OsmAnd</string>
<string name="plugin_description">Thank you for installing Ski Map!<br/><br/>It\'s a plugin for OsmAnd Maps &amp; Navigation. To start using ski maps, please install &lt;b&gt;OsmAnd Maps &amp; Navigation&lt;/b&gt;.</string>
<string name="install_osmand">Install OsmAnd</string>
<string name="shared_string_no">No</string> <string name="shared_string_no">No</string>
<string name="shared_string_yes">Yes</string> <string name="shared_string_yes">Yes</string>
<string name="osmand_app_not_found">OsmAnd is not installed</string> <string name="osmand_app_not_found">OsmAnd is not installed</string>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:buttonStyle">@style/AppButton</item>
</style>
<style name="AppButton" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/white</item>
</style>
</resources>

View file

@ -1,61 +1,87 @@
package net.osmand.skimaps; package net.osmand.skimaps;
import net.osmand.skimapsPlugin.R;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.DialogInterface; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.TextView;
import net.osmand.skimapsPlugin.R;
import java.lang.reflect.Method;
public class SkiMapsActivity extends Activity { public class SkiMapsActivity extends Activity {
private static final String OSMAND_COMPONENT = "net.osmand"; //$NON-NLS-1$ private static final String OSMAND_COMPONENT = "net.osmand"; //$NON-NLS-1$
private static final String OSMAND_COMPONENT_PLUS = "net.osmand.plus"; //$NON-NLS-1$ private static final String OSMAND_COMPONENT_PLUS = "net.osmand.plus"; //$NON-NLS-1$
private static final String OSMAND_ACTIVITY = "net.osmand.plus.activities.MapActivity"; //$NON-NLS-1$ private static final String OSMAND_ACTIVITY = "net.osmand.plus.activities.MapActivity"; //$NON-NLS-1$
/** Called when the activity is first created. */ /**
* Called when the activity is first created.
*/
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.main); setContentView(R.layout.main);
TextView descriptionTextView = (TextView) findViewById(R.id.descriptionTextView);
descriptionTextView.setText(Html.fromHtml(getString(R.string.plugin_description)));
Intent intentPlus = new Intent(); Intent intentPlus = new Intent();
intentPlus.setComponent(new ComponentName(OSMAND_COMPONENT_PLUS, OSMAND_ACTIVITY)); intentPlus.setComponent(new ComponentName(OSMAND_COMPONENT_PLUS, OSMAND_ACTIVITY));
intentPlus.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); intentPlus.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
ResolveInfo resolved = getPackageManager().resolveActivity(intentPlus, PackageManager.MATCH_DEFAULT_ONLY); ResolveInfo resolved = getPackageManager().resolveActivity(intentPlus, PackageManager.MATCH_DEFAULT_ONLY);
if(resolved != null) { if (resolved != null) {
logEvent(this, "open_osmand_plus");
stopService(intentPlus); stopService(intentPlus);
startActivity(intentPlus); startActivity(intentPlus);
finish();
} else { } else {
Intent intentNormal = new Intent(); Intent intentNormal = new Intent();
intentNormal.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); intentNormal.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intentNormal.setComponent(new ComponentName(OSMAND_COMPONENT, OSMAND_ACTIVITY)); intentNormal.setComponent(new ComponentName(OSMAND_COMPONENT, OSMAND_ACTIVITY));
resolved = getPackageManager().resolveActivity(intentNormal, PackageManager.MATCH_DEFAULT_ONLY); resolved = getPackageManager().resolveActivity(intentNormal, PackageManager.MATCH_DEFAULT_ONLY);
if (resolved != null) { if (resolved != null) {
logEvent(this, "open_osmand");
stopService(intentNormal); stopService(intentNormal);
startActivity(intentNormal); startActivity(intentNormal);
finish();
} else { } else {
AlertDialog.Builder builder = new AlertDialog.Builder(this); logEvent(this, "open_dialog");
builder.setMessage(getString(R.string.osmand_app_not_found)); findViewById(R.id.buyButton).setOnClickListener(new View.OnClickListener() {
builder.setPositiveButton(getString(R.string.shared_string_yes), new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + OSMAND_COMPONENT)); String appName = OSMAND_COMPONENT;
logEvent(SkiMapsActivity.this, "open_play_store_" + appName);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + appName));
try { try {
stopService(intent); //stopService(intent);
startActivity(intent); startActivity(intent);
finish();
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
// ignore
} }
} }
}); });
builder.setNegativeButton(getString(R.string.shared_string_no), null);
builder.show();
} }
} }
} }
public void logEvent(Activity ctx, String event) {
try {
Class<?> cl = Class.forName("com.google.firebase.analytics.FirebaseAnalytics");
Method mm = cl.getMethod("getInstance", Context.class);
Object inst = mm.invoke(null, ctx == null ? this : ctx);
Method log = cl.getMethod("logEvent", String.class, Bundle.class);
log.invoke(inst, event, new Bundle());
} catch (Exception e) {
e.printStackTrace();
}
}
} }

View file

@ -1,6 +1,8 @@
include ':OsmAnd-java', ':OsmAndCore-sample' include ':OsmAnd-java', ':OsmAndCore-sample', ':Osmand-Skimaps', ':Osmand-Nautical'
include ':OsmAnd' include ':OsmAnd'
include ':plugins:OsmAnd-AddressPlugin' include ':plugins:OsmAnd-AddressPlugin'
include ':plugins:Osmand-ParkingPlugin' include ':plugins:Osmand-ParkingPlugin'
include ':plugins:Osmand-Sherpafy' include ':plugins:Osmand-Sherpafy'
include ':plugins:Osmand-SRTMPlugin' include ':plugins:Osmand-SRTMPlugin'
project(':Osmand-Skimaps').projectDir = new File('plugins/Osmand-Skimaps')
project(':Osmand-Nautical').projectDir = new File('plugins/Osmand-Nautical')