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 @@ + android:id="@+id/photo" + android:icon="@drawable/ic_baseline_insert_photo_24" + android:title="Photo"/> + android:id="@+id/fav" + android:icon="@drawable/ic_baseline_favorite_24" + android:title="Favorite"/> + - \ No newline at end of file