Skip to content

Commit c4ec4df

Browse files
author
ehowlsla
committed
webapp app card update
1 parent b4d4bdc commit c4ec4df

File tree

4 files changed

+99
-56
lines changed

4 files changed

+99
-56
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ allprojects {
3232
```gradle
3333
dependencies {
3434
...
35-
implementation 'com.github.bootpay:client_android_java:2.0.121'
35+
implementation 'com.github.bootpay:client_android_java:2.0.123'
3636
}
3737
```
3838

bootpay/src/main/java/kr/co/bootpay/analytics/BootpayAnalyticsPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal class BootpayAnalyticsPresenter(context: Context) {
1717
private val rest: RestService by lazy { RestService(context) }
1818
private val executor: Scheduler by lazy { Schedulers.from(Executors.newCachedThreadPool()) }
1919

20-
private val ver = "2.0.121"
20+
private val ver = "2.0.123"
2121

2222
fun login(
2323
id: String?,

sample/src/main/java/bootpay/co/kr/samplepayment/LocalHtmlActivity.java

Lines changed: 49 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Activity;
44
import android.app.AlertDialog;
55
import android.content.ActivityNotFoundException;
6+
import android.content.Context;
67
import android.content.Intent;
78
import android.content.pm.PackageManager;
89
import android.content.pm.ResolveInfo;
@@ -90,10 +91,6 @@ public void done(String data) {
9091

9192
private class BWebviewClient extends WebViewClient {
9293
private boolean isLoaded = false;
93-
public static final String INTENT_PROTOCOL_START = "intent:";
94-
public static final String INTENT_PROTOCOL_INTENT = "#Intent;";
95-
public static final String INTENT_PROTOCOL_END = ";end;";
96-
public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";
9794

9895
@Override
9996
public void onPageFinished(WebView view, String url) {
@@ -106,30 +103,55 @@ public void onPageFinished(WebView view, String url) {
106103

107104
@Override
108105
public boolean shouldOverrideUrlLoading(WebView view, String url) {
109-
// market 일 경우 있으면 실행하고, 없으면 다운받게
110-
if (url.startsWith(GOOGLE_PLAY_STORE_PREFIX) || url.startsWith(INTENT_PROTOCOL_START)) {
111-
final int endIndex = url.indexOf(INTENT_PROTOCOL_END);
112-
try {
113-
Intent intent = new Intent().parseUri(url, Intent.URI_INTENT_SCHEME);
114-
final int s = url.indexOf(INTENT_PROTOCOL_INTENT) + INTENT_PROTOCOL_INTENT.length();
115-
116-
PackageManager packageManager = view.getContext().getPackageManager();
117-
ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
118-
if (info != null) {
119-
view.getContext().startActivity(intent);
120-
} else {
121-
final String packageName = url.substring(s, endIndex < 0 ? url.length() : endIndex);
122-
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
123-
}
124-
return true;
125-
} catch (ActivityNotFoundException e) {
126-
final int s = url.indexOf(INTENT_PROTOCOL_INTENT) + INTENT_PROTOCOL_INTENT.length();
127-
final String packageName = url.substring(s, endIndex < 0 ? url.length() : endIndex);
128-
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
129-
} catch (URISyntaxException e) {
130-
e.printStackTrace();
131-
}
106+
Intent intent = parse(url);
107+
if (isIntent(url)) {
108+
if (isExistInfo(intent, view.getContext()) || isExistPackage(intent, view.getContext()))
109+
return start(intent, view.getContext());
110+
else
111+
gotoMarket(intent, view.getContext());
112+
} else if (isMarket(url)) {
113+
return start(intent, view.getContext());
132114
}
115+
return url.contains("https://bootpaymark");
116+
}
117+
118+
private Intent parse(String url) {
119+
try {
120+
return Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
121+
} catch (URISyntaxException e) {
122+
e.printStackTrace();
123+
return null;
124+
}
125+
}
126+
127+
private Boolean isIntent(String url) {
128+
return url.matches("^intent:?\\w*://\\S+$");
129+
}
130+
131+
private Boolean isMarket(String url) {
132+
return url.matches("^market://\\S+$");
133+
}
134+
135+
private Boolean isExistInfo(Intent intent, Context context) {
136+
try {
137+
return intent != null && context.getPackageManager().getPackageInfo(intent.getPackage(), PackageManager.GET_ACTIVITIES) != null;
138+
} catch (PackageManager.NameNotFoundException e) {
139+
e.printStackTrace();
140+
return false;
141+
}
142+
}
143+
144+
private Boolean isExistPackage(Intent intent, Context context) {
145+
return intent != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
146+
}
147+
148+
private boolean start(Intent intent, Context context) {
149+
context.startActivity(intent);
150+
return true;
151+
}
152+
153+
private boolean gotoMarket(Intent intent, Context context) {
154+
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + intent.getPackage())));
133155
return true;
134156
}
135157
}

sample/src/main/java/bootpay/co/kr/samplepayment/WebAppActivity.java

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ public void done(String data) {
105105

106106
private class BWebviewClient extends WebViewClient {
107107
private boolean isLoaded = false;
108-
public static final String INTENT_PROTOCOL_START = "intent:";
109-
public static final String INTENT_PROTOCOL_INTENT = "#Intent;";
110-
public static final String INTENT_PROTOCOL_END = ";end;";
111-
public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";
112108

113109

114110
@Override
@@ -124,30 +120,55 @@ public void onPageFinished(WebView view, String url) {
124120

125121
@Override
126122
public boolean shouldOverrideUrlLoading(WebView view, String url) {
127-
// market 일 경우 있으면 실행하고, 없으면 다운받게
128-
if (url.startsWith(GOOGLE_PLAY_STORE_PREFIX) || url.startsWith(INTENT_PROTOCOL_START)) {
129-
final int endIndex = url.indexOf(INTENT_PROTOCOL_END);
130-
try {
131-
Intent intent = new Intent().parseUri(url, Intent.URI_INTENT_SCHEME);
132-
final int s = url.indexOf(INTENT_PROTOCOL_INTENT) + INTENT_PROTOCOL_INTENT.length();
133-
134-
PackageManager packageManager = view.getContext().getPackageManager();
135-
ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
136-
if (info != null) {
137-
view.getContext().startActivity(intent);
138-
} else {
139-
final String packageName = url.substring(s, endIndex < 0 ? url.length() : endIndex);
140-
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
141-
}
142-
return true;
143-
} catch (ActivityNotFoundException e) {
144-
final int s = url.indexOf(INTENT_PROTOCOL_INTENT) + INTENT_PROTOCOL_INTENT.length();
145-
final String packageName = url.substring(s, endIndex < 0 ? url.length() : endIndex);
146-
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
147-
} catch (URISyntaxException e) {
148-
e.printStackTrace();
149-
}
123+
Intent intent = parse(url);
124+
if (isIntent(url)) {
125+
if (isExistInfo(intent, view.getContext()) || isExistPackage(intent, view.getContext()))
126+
return start(intent, view.getContext());
127+
else
128+
gotoMarket(intent, view.getContext());
129+
} else if (isMarket(url)) {
130+
return start(intent, view.getContext());
150131
}
132+
return url.contains("https://bootpaymark");
133+
}
134+
135+
private Intent parse(String url) {
136+
try {
137+
return Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
138+
} catch (URISyntaxException e) {
139+
e.printStackTrace();
140+
return null;
141+
}
142+
}
143+
144+
private Boolean isIntent(String url) {
145+
return url.matches("^intent:?\\w*://\\S+$");
146+
}
147+
148+
private Boolean isMarket(String url) {
149+
return url.matches("^market://\\S+$");
150+
}
151+
152+
private Boolean isExistInfo(Intent intent, Context context) {
153+
try {
154+
return intent != null && context.getPackageManager().getPackageInfo(intent.getPackage(), PackageManager.GET_ACTIVITIES) != null;
155+
} catch (PackageManager.NameNotFoundException e) {
156+
e.printStackTrace();
157+
return false;
158+
}
159+
}
160+
161+
private Boolean isExistPackage(Intent intent, Context context) {
162+
return intent != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
163+
}
164+
165+
private boolean start(Intent intent, Context context) {
166+
context.startActivity(intent);
167+
return true;
168+
}
169+
170+
private boolean gotoMarket(Intent intent, Context context) {
171+
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + intent.getPackage())));
151172
return true;
152173
}
153174
}

0 commit comments

Comments
 (0)