diff --git a/app/build.gradle b/app/build.gradle
index f0d391a..67ea50b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,6 +33,8 @@ android {
}
dependencies {
+ implementation('com.google.android.material:material:1.3.0')
+ implementation "androidx.drawerlayout:drawerlayout:1.1.1"
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
api 'com.google.android:flexbox:1.0.0'
implementation ('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 36a5513..ffd38fc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
-
-
-
+
+
+
+
diff --git a/app/src/main/java/com/lsp/view/login/LoginActivity.kt b/app/src/main/java/com/lsp/view/login/LoginActivity.kt
new file mode 100644
index 0000000..7fb768b
--- /dev/null
+++ b/app/src/main/java/com/lsp/view/login/LoginActivity.kt
@@ -0,0 +1,73 @@
+package com.lsp.view.login
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.Environment
+import android.util.Log
+import android.widget.EditText
+import android.widget.TextView
+import com.google.android.material.floatingactionbutton.FloatingActionButton
+import com.lsp.view.R
+import com.lsp.view.main.MainActivity
+import okhttp3.*
+import java.io.File
+import java.security.MessageDigest
+import java.security.NoSuchAlgorithmException
+import java.util.ArrayList
+import java.util.concurrent.TimeUnit
+import kotlin.concurrent.thread
+
+class LoginActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_login)
+ val login = findViewById(R.id.login)
+
+ AlertDialog.Builder(this).apply {
+ setMessage("目前阶段登录没有任何实质的用处,仅会保存你输入的用户名用于搜索你的收藏夹,而通过登录获取到的Cookie在将来可能会有实质的用处,Cookie将不会保存,如你不需要使用收藏夹,请直接点击登录按钮。")
+ setTitle("关于登录")
+ setPositiveButton("确定"){it,_->
+ it.dismiss()
+ }
+ }.create().show()
+
+ login.setOnClickListener {
+ val username = findViewById(R.id.username)
+ val password = findViewById(R.id.password)
+ val sPassword = "choujin-steiner--${password.text.toString()}--"
+ val hash1Password = StrToHash1.shaEncrypt(sPassword)
+ thread {
+ conn(username.text.toString(),hash1Password)
+ }
+ val intent = Intent(this,MainActivity::class.java)
+ startActivity(intent)
+
+ }
+
+
+
+ }
+ fun conn(username:String,hash1: String):String{
+ val cookies = ArrayList()
+ val client = OkHttpClient.Builder()
+ .connectTimeout(60,TimeUnit.SECONDS)
+ .cookieJar(object : CookieJar{
+ override fun saveFromResponse(url: HttpUrl, cookies: MutableList) {
+ }
+
+ override fun loadForRequest(url: HttpUrl): MutableList {
+ return cookies
+ }
+
+ })
+ .build()
+ val request = Request.Builder()
+ .url("https://yande.re/?username=$username&password=$hash1")
+ .build()
+ return client.newCall(request).execute().body()!!.string()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/lsp/view/login/StrToHash1.java b/app/src/main/java/com/lsp/view/login/StrToHash1.java
new file mode 100644
index 0000000..c9fbb34
--- /dev/null
+++ b/app/src/main/java/com/lsp/view/login/StrToHash1.java
@@ -0,0 +1,35 @@
+package com.lsp.view.login;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class StrToHash1 {
+ public static String shaEncrypt(String strSrc){
+ MessageDigest md = null;
+ String strDes = null;
+ byte[] bt = strSrc.getBytes();
+ try {
+ md = MessageDigest.getInstance("SHA-1");
+ md.update(bt);
+ strDes = bytes2Hex(md.digest());
+
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ return strDes;
+
+
+ }
+ private static String bytes2Hex(byte[] bts){
+ StringBuilder des = new StringBuilder();
+ String tmp = null;
+ for (int i =0;i()
@@ -56,6 +65,10 @@ class MainActivity : AppCompatActivity() {
val close = findViewById(R.id.close)
val editCard = findViewById(R.id.editCard)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.ic_baseline_menu_24)
+ }
searchBar = findViewById(R.id.search_bar)
shortAnnotationDuration = resources.getInteger(android.R.integer.config_shortAnimTime)
@@ -84,6 +97,23 @@ class MainActivity : AppCompatActivity() {
nowPage = 1
loadPost(this, null, searchTag,nowPage.toString())
}
+ //登录
+ /**
+ val headerView = LayoutInflater.from(this).inflate(R.layout.nav_header,null)
+ val name = headerView.findViewById(R.id.name)
+ name.setOnClickListener {
+
+ val intent = Intent(this,LoginActivity::class.java)
+ startActivity(intent)
+ }*/
+ //侧边栏
+
+
+ val nav = findViewById(R.id.nav)
+ nav.setCheckedItem(R.id.photo)
+ nav.setNavigationItemSelectedListener {
+ true
+ }
}
@@ -108,6 +138,14 @@ class MainActivity : AppCompatActivity() {
}
}
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ val drawerLayout = findViewById(R.id.drawerLayout)
+ when(item.itemId){
+ android.R.id.home -> drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+
private fun hideIm(){
val imm: InputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
@@ -138,7 +176,7 @@ class MainActivity : AppCompatActivity() {
val fbtn = findViewById(
R.id.fbtn
)
- Snackbar.make(fbtn,"请检查网络连接",Snackbar.LENGTH_SHORT).show()
+ Snackbar.make(fbtn,"请检查网络连接",Snackbar.LENGTH_LONG).show()
}
override fun onResponse(call: Call>, response: Response>) {
@@ -174,7 +212,7 @@ class MainActivity : AppCompatActivity() {
adapter = PostAdapter(context, postList)
recyclerView.adapter = adapter
}
- adapter.setLoadMoreListener(object :PostAdapter.OnLoadMoreListener{
+ adapter.setLoadMoreListener(object : PostAdapter.OnLoadMoreListener{
override fun loadMore(position: Int) {
nowPage++
swipeRefreshLayout.isRefreshing = true
diff --git a/app/src/main/java/com/lsp/view/adapter/PostAdapter.kt b/app/src/main/java/com/lsp/view/main/PostAdapter.kt
similarity index 78%
rename from app/src/main/java/com/lsp/view/adapter/PostAdapter.kt
rename to app/src/main/java/com/lsp/view/main/PostAdapter.kt
index 09546a9..9f66e7d 100644
--- a/app/src/main/java/com/lsp/view/adapter/PostAdapter.kt
+++ b/app/src/main/java/com/lsp/view/main/PostAdapter.kt
@@ -1,4 +1,4 @@
-package com.lsp.view.adapter
+package com.lsp.view.main
import android.content.Context
import android.content.Intent
@@ -9,8 +9,10 @@ import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
+import com.bumptech.glide.load.model.GlideUrl
+import com.bumptech.glide.load.model.LazyHeaders
import com.lsp.view.bean.Post
-import com.lsp.view.PicActivity
+import com.lsp.view.pic.PicActivity
import com.lsp.view.R
class PostAdapter(val context:Context, private val postList: List) :RecyclerView.Adapter(){
@@ -26,7 +28,7 @@ class PostAdapter(val context:Context, private val postList: List) :Recycl
val position = viewHolder.adapterPosition
Log.e("position",position.toString())
Log.e("url",postList[position].sample_url)
- val intent = Intent(context,PicActivity::class.java)
+ val intent = Intent(context, PicActivity::class.java)
intent.putExtra("id",postList[position].id)
intent.putExtra("sample_url",postList[position].sample_url)
intent.putExtra("file_url",postList[position].file_url)
@@ -40,7 +42,7 @@ class PostAdapter(val context:Context, private val postList: List) :Recycl
return viewHolder
}
- private lateinit var mLoadMoreListener:OnLoadMoreListener
+ private lateinit var mLoadMoreListener: OnLoadMoreListener
interface OnLoadMoreListener{
fun loadMore(position: Int)
@@ -53,7 +55,8 @@ class PostAdapter(val context:Context, private val postList: List) :Recycl
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val post = postList[position]
- Glide.with(context).load(post.preview_url).into(holder.picImage)
+ val glideUrl = GlideUrl(post.preview_url, LazyHeaders.Builder().addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36").build())
+ Glide.with(context).load(glideUrl).into(holder.picImage)
if (position==postList.size-1&&postList.size>6){
//到达底部
mLoadMoreListener.loadMore(position)
diff --git a/app/src/main/java/com/lsp/view/adapter/AuthorAdapter.kt b/app/src/main/java/com/lsp/view/pic/AuthorAdapter.kt
similarity index 97%
rename from app/src/main/java/com/lsp/view/adapter/AuthorAdapter.kt
rename to app/src/main/java/com/lsp/view/pic/AuthorAdapter.kt
index d7e3c3c..3f16a72 100644
--- a/app/src/main/java/com/lsp/view/adapter/AuthorAdapter.kt
+++ b/app/src/main/java/com/lsp/view/pic/AuthorAdapter.kt
@@ -1,4 +1,4 @@
-package com.lsp.view.adapter
+package com.lsp.view.pic
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/java/com/lsp/view/adapter/IdAdapter.kt b/app/src/main/java/com/lsp/view/pic/IdAdapter.kt
similarity index 97%
rename from app/src/main/java/com/lsp/view/adapter/IdAdapter.kt
rename to app/src/main/java/com/lsp/view/pic/IdAdapter.kt
index 749c006..222a881 100644
--- a/app/src/main/java/com/lsp/view/adapter/IdAdapter.kt
+++ b/app/src/main/java/com/lsp/view/pic/IdAdapter.kt
@@ -1,4 +1,4 @@
-package com.lsp.view.adapter
+package com.lsp.view.pic
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/java/com/lsp/view/PicActivity.kt b/app/src/main/java/com/lsp/view/pic/PicActivity.kt
similarity index 90%
rename from app/src/main/java/com/lsp/view/PicActivity.kt
rename to app/src/main/java/com/lsp/view/pic/PicActivity.kt
index a6d33ec..5ff817d 100644
--- a/app/src/main/java/com/lsp/view/PicActivity.kt
+++ b/app/src/main/java/com/lsp/view/pic/PicActivity.kt
@@ -1,38 +1,37 @@
-package com.lsp.view
+package com.lsp.view.pic
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.content.Intent
import android.content.pm.PackageManager
-import android.content.res.Configuration
import android.graphics.drawable.Drawable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.os.Looper
import android.util.Log
-import android.util.TypedValue
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
+import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
+import com.bumptech.glide.load.model.GlideUrl
+import com.bumptech.glide.load.model.LazyHeaders
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.github.chrisbanes.photoview.PhotoView
import com.google.android.flexbox.*
import com.google.android.material.snackbar.Snackbar
-import com.lsp.view.adapter.AuthorAdapter
-import com.lsp.view.adapter.IdAdapter
-import com.lsp.view.adapter.SizeAdapter
-import com.lsp.view.adapter.TagAdapter
+import com.lsp.view.R
import com.lsp.view.bean.Author
import com.lsp.view.bean.ID
import com.lsp.view.bean.Size
import com.lsp.view.bean.Tags
+import com.lsp.view.main.MainActivity
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.*
@@ -83,8 +82,10 @@ class PicActivity : AppCompatActivity() {
sharedPreferences.putBoolean("FirstRun",false)
val FileD = File("${Environment.getExternalStorageDirectory()}/${Environment.DIRECTORY_PICTURES}/LspMake")
FileD.mkdirs()
+
}
+
val id = intent.getStringExtra("id")
if (id!=null){
loadTags(id)
@@ -94,10 +95,11 @@ class PicActivity : AppCompatActivity() {
loadPic(it)
}
-
val file_url = intent.getStringExtra("file_url")
val file_ext = intent.getStringExtra("file_ext")
- val fbtn = findViewById(R.id.fbtn)
+ val fbtn = findViewById(
+ R.id.fbtn
+ )
val path = "${Environment.getExternalStorageDirectory()}/${Environment.DIRECTORY_PICTURES}/LspMake/" +
"${time}.$file_ext"
@@ -171,7 +173,9 @@ class PicActivity : AppCompatActivity() {
) {
val file_ext = intent.getStringExtra("file_ext")
val file_url = intent.getStringExtra("file_url")
- val fbtn = findViewById(R.id.fbtn)
+ val fbtn = findViewById(
+ R.id.fbtn
+ )
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when(requestCode){
@@ -242,8 +246,9 @@ class PicActivity : AppCompatActivity() {
}
private fun loadPic(url:String){
+ val glideUrl = GlideUrl(url, LazyHeaders.Builder().addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36").build())
- Glide.with(this).load(url).listener(object :RequestListener{
+ Glide.with(this).load(glideUrl).listener(object :RequestListener{
override fun onLoadFailed(
e: GlideException?,
model: Any?,
@@ -251,7 +256,17 @@ class PicActivity : AppCompatActivity() {
isFirstResource: Boolean
): Boolean {
val pb = findViewById(R.id.pb)
- Snackbar.make(pb,"加载错误",Snackbar.LENGTH_SHORT).show()
+ Log.e("erroe",e.toString())
+ Snackbar.make(pb,"加载错误",Snackbar.LENGTH_LONG).setAction("查看Log"){
+ AlertDialog.Builder(this@PicActivity).apply {
+ setTitle("Log")
+ setMessage(e.toString())
+ setNegativeButton("确定",null)
+ create()
+ show()
+ }
+ }.show()
+ pb.visibility = View.INVISIBLE
return false
}
@@ -299,9 +314,9 @@ class PicActivity : AppCompatActivity() {
tagList.add(Tags(tag))
}
val adapter = TagAdapter(tagList)
- adapter.setOnItemClickListener(object :TagAdapter.OnItemClickListener{
+ adapter.setOnItemClickListener(object : TagAdapter.OnItemClickListener{
override fun onItemClick(view: View, position: Int) {
- val intent = Intent(this@PicActivity,MainActivity::class.java)
+ val intent = Intent(this@PicActivity, MainActivity::class.java)
intent.putExtra("searchTag",tagList[position].tag)
startActivity(intent)
}
diff --git a/app/src/main/java/com/lsp/view/adapter/SizeAdapter.kt b/app/src/main/java/com/lsp/view/pic/SizeAdapter.kt
similarity index 97%
rename from app/src/main/java/com/lsp/view/adapter/SizeAdapter.kt
rename to app/src/main/java/com/lsp/view/pic/SizeAdapter.kt
index fd0d391..da61bdd 100644
--- a/app/src/main/java/com/lsp/view/adapter/SizeAdapter.kt
+++ b/app/src/main/java/com/lsp/view/pic/SizeAdapter.kt
@@ -1,4 +1,4 @@
-package com.lsp.view.adapter
+package com.lsp.view.pic
import android.util.Log
import android.view.LayoutInflater
diff --git a/app/src/main/java/com/lsp/view/adapter/TagAdapter.kt b/app/src/main/java/com/lsp/view/pic/TagAdapter.kt
similarity index 97%
rename from app/src/main/java/com/lsp/view/adapter/TagAdapter.kt
rename to app/src/main/java/com/lsp/view/pic/TagAdapter.kt
index 4905962..2d63423 100644
--- a/app/src/main/java/com/lsp/view/adapter/TagAdapter.kt
+++ b/app/src/main/java/com/lsp/view/pic/TagAdapter.kt
@@ -1,4 +1,4 @@
-package com.lsp.view.adapter
+package com.lsp.view.pic
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/res/drawable/ic_baseline_favorite_24.xml b/app/src/main/res/drawable/ic_baseline_favorite_24.xml
new file mode 100644
index 0000000..2d9d13c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_favorite_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_insert_photo_24.xml b/app/src/main/res/drawable/ic_baseline_insert_photo_24.xml
new file mode 100644
index 0000000..d35859d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_insert_photo_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_label_24.xml b/app/src/main/res/drawable/ic_baseline_label_24.xml
new file mode 100644
index 0000000..1b84119
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_label_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_login_24.xml b/app/src/main/res/drawable/ic_baseline_login_24.xml
new file mode 100644
index 0000000..4c94f52
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_login_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_menu_24.xml b/app/src/main/res/drawable/ic_baseline_menu_24.xml
new file mode 100644
index 0000000..470db52
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_menu_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_navigate_next_24.xml b/app/src/main/res/drawable/ic_baseline_navigate_next_24.xml
new file mode 100644
index 0000000..9d4dcfd
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_navigate_next_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..3ac9b2e
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4121fb2..441822e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,10 +1,17 @@
-
+ tools:context=".main.MainActivity">
+
+
@@ -77,8 +84,6 @@
android:paddingStart="10dp"
android:textSize="20sp"
android:layout_width="match_parent"
- android:textColor="#000"
- android:background="@drawable/edit_bg"
android:layout_height="?attr/actionBarSize"
android:id="@+id/search"/>
-
-
-
-
-
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_pic.xml b/app/src/main/res/layout/activity_pic.xml
index 3779ab4..9fe08d7 100644
--- a/app/src/main/res/layout/activity_pic.xml
+++ b/app/src/main/res/layout/activity_pic.xml
@@ -8,7 +8,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".PicActivity">
+ tools:context=".pic.PicActivity">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/nav_menu.xml b/app/src/main/res/menu/nav_menu.xml
index 2e0b078..308f417 100644
--- a/app/src/main/res/menu/nav_menu.xml
+++ b/app/src/main/res/menu/nav_menu.xml
@@ -2,13 +2,16 @@
\ No newline at end of file