Skip to content

Commit

Permalink
[WIP]
Browse files Browse the repository at this point in the history
TODO
* 認証後にLoginActivityにコールバックする際のURLは変更する。
* LoginActivityのViewModel、Repositoryを作成する。
  • Loading branch information
jageishi committed Nov 7, 2019
1 parent 6d0efe5 commit 7bbdf63
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 4 deletions.
14 changes: 13 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,19 @@
android:theme="@style/AppTheme.ActionBar" />
<activity
android:name=".login.LoginActivity"
android:theme="@style/AppTheme.ActionBar" />
android:launchMode="singleTop"
android:theme="@style/AppTheme.ActionBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />

<data
android:host="ageage.org"
android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
android:theme="@style/AppTheme.ActionBar" />
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/org/ageage/eggplant/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.fragment.app.commit
import kotlinx.android.synthetic.main.activity_main.*
import org.ageage.eggplant.common.enums.Mode
import org.ageage.eggplant.feed.FeedFragment
import org.ageage.eggplant.login.LoginActivity
import org.ageage.eggplant.search.SearchActivity
import org.ageage.eggplant.settings.SettingActivity

Expand Down Expand Up @@ -73,6 +74,9 @@ class MainActivity : AppCompatActivity() {
R.id.settings -> {
startActivity(Intent(this, SettingActivity::class.java))
}
R.id.login -> {
startActivity(Intent(this, LoginActivity::class.java))
}
}

drawerLayout.closeDrawer(GravityCompat.START)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class HatenaOAuthManager(
private var service: OAuth10aService? = null
private var requestToken: OAuth1RequestToken? = null

fun fetchAuthorizationUrl(): Single<String?> {
fun fetchAuthorizationUrl(): Single<String> {
return Single.create {
service = ServiceBuilder(consumerKey)
.apiSecret(consumerSecret)
Expand Down
72 changes: 72 additions & 0 deletions app/src/main/java/org/ageage/eggplant/login/LoginActivity.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,85 @@
package org.ageage.eggplant.login

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_login.*
import org.ageage.eggplant.BuildConfig
import org.ageage.eggplant.R
import org.ageage.eggplant.common.oauth.HatenaOAuthManager

private const val KEY_OAUTH_VERIFIER = "oauth_verifier"

class LoginActivity : AppCompatActivity() {

private val oAuthManager =
HatenaOAuthManager(BuildConfig.CONSUMER_KEY, BuildConfig.CONSUMER_SECRET)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
initViews()
}

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
android.R.id.home -> finish()
}
return super.onOptionsItemSelected(item)
}

override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
intent?.let {
if (it.action == Intent.ACTION_VIEW) {
it.data?.let { uri ->
uri.getQueryParameter(KEY_OAUTH_VERIFIER)?.let { oAuthVerifier ->
oAuthManager.fetchAccessToken(oAuthVerifier)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show()
},
{
Toast.makeText(this, "失敗", Toast.LENGTH_SHORT).show()
}
)
}
}
}
}
}

private fun initViews() {
setupActionBar()
setupLoginButton()
}

private fun setupActionBar() {
supportActionBar?.let {
it.setDisplayHomeAsUpEnabled(true)
it.title = getString(R.string.title_login_activity)
}
}

private fun setupLoginButton() {
buttonLogin.setOnClickListener {
oAuthManager.fetchAuthorizationUrl()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it)))
},
{
}
)
}
}
}
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_account_circle_black_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z" />
</vector>
19 changes: 17 additions & 2 deletions app/src/main/res/layout/activity_login.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".login.LoginActivity">

</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/description_for_cooperation_hatena" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/button_text_for_login_hatena" />

</LinearLayout>
4 changes: 4 additions & 0 deletions app/src/main/res/menu/menu_navigation_drawer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/title_navigation_drawer_settings" />

<item
android:id="@+id/login"
android:icon="@drawable/ic_account_circle_black_24dp"
android:title="@string/title_navigation_drawer_login" />
</menu>
4 changes: 4 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<string name="sort_type_title_popular">人気</string>
<string name="sort_type_title_recent">全て</string>
<string name="title_navigation_drawer_settings">設定</string>
<string name="title_navigation_drawer_login">ログイン</string>
<string name="title_activity_settings">設定</string>
<string name="search_entry_hint">キーワードを入力</string>
<string name="snackbar_text_error_occurred">エラーが発生しました。</string>
Expand All @@ -45,4 +46,7 @@
<string name="search_option_minimum_bookmark_count_fifty">50 users</string>
<string name="search_option_minimum_bookmark_count_one_hundred">100 users</string>
<string name="search_option_minimum_bookmark_count_five_hundred">500 users</string>
<string name="title_login_activity">ログイン</string>
<string name="description_for_cooperation_hatena">はてなにログインして連携を許可することで、Eggplantからブックマークの追加・削除などを行うことができるようになります。</string>
<string name="button_text_for_login_hatena">はてなにログインする</string>
</resources>

0 comments on commit 7bbdf63

Please sign in to comment.