Skip to content

Commit 56a17af

Browse files
committed
add login webview
1 parent 65e3415 commit 56a17af

File tree

9 files changed

+152
-38
lines changed

9 files changed

+152
-38
lines changed

app/src/main/AndroidManifest.xml

+2-15
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,12 @@
2222
<category android:name="android.intent.category.BROWSABLE"/>
2323

2424
<data
25-
android:scheme="jlubecki"
25+
android:scheme="vpaliy"
2626
android:host="soundcloud"
27-
android:pathPrefix="/redirect"
28-
/>
27+
android:pathPrefix="/redirect" />
2928
</intent-filter>
3029
</activity>
3130

32-
<activity android:name=".SingleActivity"
33-
android:launchMode="singleTop">
34-
<intent-filter>
35-
<action android:name="android.intent.action.VIEW" />
36-
<category android:name="android.intent.category.DEFAULT" />
37-
<category android:name="android.intent.category.BROWSABLE" />
38-
39-
<data android:scheme="soundcloudapi"
40-
android:host="soundcloud"
41-
android:pathPrefix="/redirect"/>
42-
</intent-filter>
43-
</activity>
4431
</application>
4532

4633
</manifest>

app/src/main/java/com/vpaliy/soundcloud_api/MainActivity.java

+17
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package com.vpaliy.soundcloud_api;
22

3+
import android.content.Intent;
4+
import android.net.Uri;
35
import android.support.v7.app.AppCompatActivity;
46
import android.os.Bundle;
57
import android.util.Log;
68

79
import com.vpaliy.soundcloud.SoundCloud;
810
import com.vpaliy.soundcloud.SoundCloudService;
11+
import com.vpaliy.soundcloud.auth.SoundCloudAuth;
912
import com.vpaliy.soundcloud.model.App;
1013
import com.vpaliy.soundcloud.model.Page;
14+
import com.vpaliy.soundcloud.model.Token;
1115
import com.vpaliy.soundcloud.model.Track;
1216
import com.vpaliy.soundcloud.model.User;
1317

1418
import java.util.List;
1519

1620
import rx.android.schedulers.AndroidSchedulers;
1721
import rx.functions.Action1;
22+
import rx.functions.Func1;
1823
import rx.schedulers.Schedulers;
1924

2025
public class MainActivity extends AppCompatActivity {
@@ -25,5 +30,17 @@ public class MainActivity extends AppCompatActivity {
2530
protected void onCreate(Bundle savedInstanceState) {
2631
super.onCreate(savedInstanceState);
2732
setContentView(R.layout.activity_main);
33+
34+
SoundCloudAuth.create(Config.CLIENT_ID,Config.CLIENT_SECRET_ID)
35+
.loginWithActivity(this,Config.REDIRECT_URI,1);
36+
}
37+
38+
@Override
39+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
40+
super.onActivityResult(requestCode, resultCode, data);
41+
String string=data.getDataString();
42+
String code= Uri.parse(string).getQueryParameter("code");
43+
44+
Log.d(TAG,code);
2845
}
2946
}

app/src/main/java/com/vpaliy/soundcloud_api/SingleActivity.java

-14
This file was deleted.

soundcloud-api@/src/main/AndroidManifest.xml

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
package="com.vpaliy.soundcloud">
44

5-
<application android:allowBackup="true" android:label="@string/app_name"
5+
<application
6+
android:allowBackup="true"
7+
android:label="@string/app_name"
68
android:supportsRtl="true">
7-
9+
<activity
10+
android:name=".auth.LoginActivity"
11+
android:theme="@style/Theme.AppCompat.NoActionBar"/>
812
</application>
913

1014
</manifest>

soundcloud-api@/src/main/java/com/vpaliy/soundcloud/SoundCloud.java

-7
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33

44
import android.content.Context;
55

6-
import com.google.gson.FieldNamingPolicy;
7-
import com.google.gson.Gson;
8-
import com.google.gson.GsonBuilder;
96
import com.vpaliy.soundcloud.model.Token;
10-
117
import java.util.concurrent.TimeUnit;
128
import okhttp3.Cache;
139
import okhttp3.HttpUrl;
@@ -73,9 +69,6 @@ private OkHttpClient provideOkHttpClient(Context context, Interceptor intercepto
7369
}
7470

7571
private Retrofit provideRetrofit(OkHttpClient okHttpClient) {
76-
Gson gson = new GsonBuilder()
77-
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
78-
.create();
7972
return new Retrofit.Builder()
8073
.baseUrl("https://api.soundcloud.com/")
8174
.addConverterFactory(GsonConverterFactory.create())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.vpaliy.soundcloud.auth;
2+
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
@SuppressWarnings({"unused","WeakerAccess"})
7+
class Connect implements Parcelable{
8+
final String url;
9+
final String redirectUri;
10+
11+
public Connect(Parcel parcel){
12+
this.url=parcel.readString();
13+
this.redirectUri=parcel.readString();
14+
}
15+
16+
public Connect(String url, String redirectUri){
17+
this.url=url;
18+
this.redirectUri=redirectUri;
19+
}
20+
21+
@Override
22+
public int describeContents() {
23+
return 0;
24+
}
25+
26+
@Override
27+
public void writeToParcel(Parcel dest, int flags) {
28+
dest.writeString(url);
29+
dest.writeString(redirectUri);
30+
}
31+
32+
public static Creator<Connect> CREATOR=new Creator<Connect>() {
33+
@Override
34+
public Connect createFromParcel(Parcel source) {
35+
return new Connect(source);
36+
}
37+
38+
@Override
39+
public Connect[] newArray(int size) {
40+
return new Connect[size];
41+
}
42+
};
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.vpaliy.soundcloud.auth;
2+
3+
import android.content.Intent;
4+
import android.net.Uri;
5+
import android.os.Bundle;
6+
import android.support.annotation.Nullable;
7+
import android.support.v7.app.AppCompatActivity;
8+
import android.webkit.WebView;
9+
import android.webkit.WebViewClient;
10+
import com.vpaliy.soundcloud.R;
11+
12+
public class LoginActivity extends AppCompatActivity {
13+
14+
static final String EXTRA_CONNECT_DATA=LoginActivity.class.getCanonicalName()+"Extra.Connect.Data";
15+
private Connect connect;
16+
17+
@Override
18+
protected void onCreate(@Nullable Bundle savedInstanceState) {
19+
super.onCreate(savedInstanceState);
20+
setContentView(R.layout.activity_web);
21+
WebView webView=WebView.class.cast(findViewById(R.id.web));
22+
webView.getSettings().setJavaScriptEnabled(true);
23+
webView.setWebViewClient(new WebViewAuthClient());
24+
connect =getIntent().getParcelableExtra(EXTRA_CONNECT_DATA);
25+
if(connect.url!=null){
26+
webView.loadUrl(connect.url);
27+
}else{
28+
finish();
29+
}
30+
}
31+
32+
private class WebViewAuthClient extends WebViewClient {
33+
34+
private Intent resultIntent = new Intent();
35+
36+
@Override
37+
public void onPageFinished(WebView view, String url) {
38+
super.onPageFinished(view, url);
39+
40+
if (url.startsWith(connect.redirectUri)) {
41+
Uri data = Uri.parse(url);
42+
resultIntent.setData(data);
43+
if(url.contains("?code=")) {
44+
setResult(RESULT_OK, resultIntent);
45+
}else {
46+
setResult(RESULT_CANCELED, resultIntent);
47+
}
48+
finish();
49+
}
50+
}
51+
}
52+
}

soundcloud-api@/src/main/java/com/vpaliy/soundcloud/auth/SoundCloudAuth.java

+20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.vpaliy.soundcloud.auth;
22

3+
import android.app.Activity;
4+
import android.content.Context;
5+
import android.content.Intent;
36
import android.text.TextUtils;
47
import com.vpaliy.soundcloud.model.Token;
58
import java.util.HashMap;
@@ -132,6 +135,23 @@ public Observable<Token> refreshToken(Token token){
132135
return service.requestToken(fieldMap);
133136
}
134137

138+
public void loginWithActivity(Activity activity, String redirectUri, int requestCode){
139+
if(TextUtils.isEmpty(redirectUri)){
140+
throw new IllegalArgumentException("redirectUri is empty");
141+
}
142+
String url="https://www.soundcloud.com/connect?" +
143+
"client_id=" + clientId +
144+
"&redirect_uri=" + redirectUri +
145+
"&response_type=" + "code" +
146+
"&scope=" + "non-expiring" +
147+
"&display=" + "popup" +
148+
"&state=" + "asdf";
149+
Connect connect=new Connect(url,redirectUri);
150+
Intent intent=new Intent(activity,LoginActivity.class);
151+
intent.putExtra(LoginActivity.EXTRA_CONNECT_DATA,connect);
152+
activity.startActivityForResult(intent,requestCode);
153+
}
154+
135155
public static SoundCloudAuth create(String clientId,String clientSecret){
136156
return new SoundCloudAuth(clientId,clientSecret);
137157
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<LinearLayout
2+
xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:orientation="vertical"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent">
6+
7+
<WebView
8+
android:id="@+id/web"
9+
android:layout_width="match_parent"
10+
android:layout_height="match_parent"/>
11+
12+
</LinearLayout>

0 commit comments

Comments
 (0)