diff --git a/app/build.gradle b/app/build.gradle index a7a89c0..9ed4f3c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,11 +10,11 @@ android { compileSdkVersion = 34 defaultConfig { - applicationId "com.lsp.view" + applicationId "moe.uni.moe" minSdkVersion 29 targetSdkVersion 34 - versionCode 221022 - versionName "1.2.7" + versionCode 240629 + versionName "2.0.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { @@ -27,12 +27,10 @@ android { debuggable true minifyEnabled false shrinkResources false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { @@ -42,7 +40,7 @@ android { kotlinOptions { jvmTarget = '1.8' } - namespace 'com.lsp.view' + namespace 'moe.uni.view' buildFeatures { compose true } @@ -58,7 +56,6 @@ android { dependencies { implementation("androidx.navigation:navigation-compose:2.7.7") - implementation("com.squareup.okhttp3:logging-interceptor:4.9.1") implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.2' @@ -73,29 +70,18 @@ dependencies { androidTestImplementation 'androidx.compose.ui:ui-test-junit4' debugImplementation 'androidx.compose.ui:ui-tooling' debugImplementation 'androidx.compose.ui:ui-test-manifest' - def room_version = "2.5.0" implementation("io.coil-kt:coil-compose:2.6.0") + def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" ksp "androidx.room:room-compiler:$room_version" - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.2" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" - implementation("com.google.android.material:material:1.10.0") - implementation 'jp.wasabeef:recyclerview-animators:4.0.2' - implementation 'com.github.chrisbanes:PhotoView:2.3.0' - implementation 'com.google.android.flexbox:flexbox:3.0.0' - implementation ('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0') + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2") implementation ('com.squareup.retrofit2:retrofit:2.9.0') implementation ('com.squareup.retrofit2:converter-gson:2.9.0') - implementation 'com.github.bumptech.glide:glide:4.12.0' - implementation 'androidx.navigation:navigation-fragment-ktx:2.7.5' - implementation "androidx.navigation:navigation-ui-ktx:2.7.5" - annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.22" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0" implementation 'androidx.core:core-ktx:1.13.1' implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7eab7e4..b28bfa9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ - - \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/MainViewModel.kt b/app/src/main/java/com/lsp/view/ui/MainViewModel.kt deleted file mode 100644 index 83a895d..0000000 --- a/app/src/main/java/com/lsp/view/ui/MainViewModel.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.lsp.view.ui - -import android.content.Context -import android.os.Bundle -import androidx.lifecycle.AbstractSavedStateViewModelFactory -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.lsp.view.ui.fragment.adapter.PostAdapter -import com.lsp.view.repository.network.PostRepository -import androidx.savedstate.SavedStateRegistryOwner -import com.lsp.view.YandViewApplication -import com.lsp.view.bean.YandPost -import com.lsp.view.repository.datasource.CollectDatabase -import com.lsp.view.repository.datasource.CollectRepository -import com.lsp.view.repository.datasource.CollectRepositoryImpl -import com.lsp.view.repository.datasource.model.Collect -import com.lsp.view.repository.exception.NetworkErrorException -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.async -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch - -class MainViewModel(private val repository: PostRepository, context: Context):ViewModel() { - private val _uiState = MutableStateFlow(UiState()) - val uiState:StateFlow - get() = _uiState.asStateFlow() - private var fetchJob: Job? = null - private val TAG = this::class.java.simpleName - private val _toastMessage = MutableLiveData() - val toastMessage - get() = _toastMessage as LiveData - - private val _postList = MutableLiveData>() - val postList get() = _postList as LiveData> - val adapter by lazy { - fetchPostByRefresh() - PostAdapter(context) - } - private val _collectList:MutableLiveData> = MutableLiveData() - val collectList:LiveData> - get() = _collectList - - private val collectRepository: CollectRepository by lazy { - CollectRepositoryImpl(CollectDatabase.getDatabase(context).collectDao()) - } - - @Volatile private var isProcessing = false - private val _tagsList = MutableLiveData>() - val tagsList get() = _tagsList as LiveData> - - - companion object { - fun provideFactory( - repository: PostRepository, - context: Context, - owner: SavedStateRegistryOwner, - defaultArgs: Bundle? = null, - - ): AbstractSavedStateViewModelFactory = - object : AbstractSavedStateViewModelFactory(owner, defaultArgs) { - @Suppress("UNCHECKED_CAST") - override fun create( - key: String, - modelClass: Class, - handle: SavedStateHandle - ): T { - return MainViewModel(repository, context) as T - } - } - } - - - - init { - //初始化写入 - val configSp = context.getSharedPreferences("com.lsp.view_preferences", 0) - if (configSp.getString("source_name", null) == null) { - configSp.edit().putString("source_name", "yande.re").apply() - configSp.edit().putString("type", "0").apply() - } - - _uiState.update { - it.apply { - it.nowSourceName.postValue(configSp.getString("source_name",null)) - } - - it.copy(isSafe = configSp.getBoolean("safe_mode",true)) - } - - } - - private fun fetchNewPost() { - fetchJob?.cancel() - fetchJob = viewModelScope.launch(Dispatchers.IO) { - _uiState.value.isRefreshing.postValue(true) - try { - val newPosts = repository.fetchPostData( - _uiState.value.nowSearchText.value, - _uiState.value.nowPage - ) - val currentPosts = _postList.value ?: arrayListOf() - currentPosts.addAll(0,newPosts) - _postList.postValue(currentPosts) - } catch (e: NetworkErrorException) { - postNewToast(e.message.toString()) - } - _uiState.value.isRefreshing.postValue(false) - } - } - - - - fun fetchPostByRefresh(){ - _uiState.update { - it.copy(nowPage = 1) - } - - fetchNewPost() - } - - fun fetchPostBySearch(searchTarget:String){ - _uiState.update { - it.apply { - it.nowSearchText.postValue(searchTarget) - } - } - - fetchNewPost() - } - - fun fetchMore(){ - _uiState.value.nowPage++ - fetchNewPost() - } - - fun updateSafeMode(mode:Boolean){ - _uiState.update { - it.copy(isSafe = mode) - } - fetchNewPost() - } - - fun updateNowSource(source:String){ - _uiState.value.nowSourceName.postValue(source) - fetchPostByRefresh() - } - - fun getCollectList(){ - viewModelScope.launch { - _collectList.postValue(collectRepository.getAllCollect()) - } - } - - fun addCollect(collect: Collect){ - if (!isProcessing){ - viewModelScope.launch { - collectRepository.addNewCollect(collect) - - } - } - } - - fun removeCollect(collect:Collect){ - - if (!isProcessing){ - viewModelScope.launch { - collectRepository.removeCollect(collect) - - } - } - - } - - suspend fun getCollectByPostId(postId:String) = viewModelScope.async { - val type = YandViewApplication.context?.getSharedPreferences("com.lsp.view_preferences",Context.MODE_PRIVATE)?.getString("source_name", "yande.re") - collectRepository.getCollectByPostId(postId,type!!) - } - - fun postNewToast(content:String){ - _toastMessage.postValue(content) - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/UiState.kt b/app/src/main/java/com/lsp/view/ui/UiState.kt deleted file mode 100644 index 5948409..0000000 --- a/app/src/main/java/com/lsp/view/ui/UiState.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.lsp.view.ui - -import androidx.lifecycle.MutableLiveData - -data class UiState( - var showSearchBar:Boolean = false, - val isRefreshing:MutableLiveData = MutableLiveData(), - var nowSearchText:MutableLiveData = MutableLiveData(""), - val nowSourceName: MutableLiveData = MutableLiveData(), - val isSafe: Boolean = true, //安全模式 - var nowPage:Int = 1, -) diff --git a/app/src/main/java/com/lsp/view/ui/activity/MainActivity.kt b/app/src/main/java/com/lsp/view/ui/activity/MainActivity.kt deleted file mode 100644 index f7daccf..0000000 --- a/app/src/main/java/com/lsp/view/ui/activity/MainActivity.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.lsp.view.ui.activity - -import android.os.Bundle -import android.util.Log -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.ui.setupWithNavController -import com.google.android.material.bottomnavigation.BottomNavigationView -import com.lsp.view.R -import com.lsp.view.ui.MainViewModel -import com.lsp.view.repository.network.PostRepository - - -class MainActivity : AppCompatActivity() { - val TAG = javaClass.simpleName - lateinit var viewModel: MainViewModel - lateinit var bottomNav:BottomNavigationView - val repository = PostRepository() - - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - - viewModel = MainViewModel.provideFactory(repository, this,this).create(MainViewModel::class.java) - - bottomNav = findViewById(R.id.bottom_navigation) - - viewModel.toastMessage.observe(this){ - Toast.makeText(this,it,Toast.LENGTH_SHORT).show() - } - - val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment - val navController = navHostFragment.navController - bottomNav.setupWithNavController(navController) - - } - - override fun onResume() { - super.onResume() - - //加载源改变 - val configSp = getSharedPreferences("com.lsp.view_preferences", 0) - - val nowSourceName = configSp.getString("source_name", null) - - if (nowSourceName != null && viewModel.uiState.value.nowSourceName.value != nowSourceName){ - viewModel.updateNowSource(nowSourceName) - } - - val nowMode = configSp.getBoolean("safe_mode", true) - if (viewModel.uiState.value.isSafe != nowMode){ - viewModel.updateSafeMode(nowMode) - Log.e(TAG,nowMode.toString()) - } - - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/fragment/CollectFragment.kt b/app/src/main/java/com/lsp/view/ui/fragment/CollectFragment.kt deleted file mode 100644 index 7765230..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/CollectFragment.kt +++ /dev/null @@ -1,81 +0,0 @@ -package com.lsp.view.ui.fragment - -import android.os.Bundle -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.AnimationUtils -import androidx.navigation.Navigation -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.StaggeredGridLayoutManager -import com.lsp.view.ui.fragment.adapter.PostAdapter -import com.lsp.view.R -import com.lsp.view.ui.activity.MainActivity -import com.lsp.view.bean.Post - -/** - * A simple [Fragment] subclass. - * create an instance of this fragment. - */ -class CollectFragment : Fragment() { - private lateinit var activityContext: MainActivity - private val collectAdapter by lazy { - PostAdapter(activityContext) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - activityContext = requireActivity() as MainActivity - - activityContext.viewModel.getCollectList() - - activityContext.viewModel.collectList.observe(this){ - collectAdapter.pushNewData(it) - } - - } - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_collect, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - //刷新 - val refresh = - view.findViewById(R.id.swipeRefreshLayout) - - activityContext.viewModel.uiState.value.isRefreshing.observe(activityContext) { - refresh.isRefreshing = it - } - - collectAdapter.setOnListItemClick(object : PostAdapter.OnListItemClick { - override fun setOnListItemClick(post: Post) { - ImageFragment.navigationToImageFragment(activityContext,post,view,R.id.action_collectFragment_to_imageFragment) - } - - }) - - view.findViewById(R.id.recyclerview).apply { - val layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) - this.layoutManager = layoutManager - this.adapter = collectAdapter - } - - } - - override fun onResume() { - super.onResume() - if (activityContext.bottomNav.visibility == View.GONE){ - val slideOutAnimation = AnimationUtils.loadAnimation(context, R.anim.slide_on_bottom) - activityContext.bottomNav.startAnimation(slideOutAnimation) - activityContext.bottomNav.visibility = View.VISIBLE - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/fragment/ImageFragment.kt b/app/src/main/java/com/lsp/view/ui/fragment/ImageFragment.kt deleted file mode 100644 index 6edbefe..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/ImageFragment.kt +++ /dev/null @@ -1,218 +0,0 @@ -package com.lsp.view.ui.fragment - -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager -import android.content.pm.ResolveInfo -import android.graphics.Bitmap -import android.os.Build -import android.os.Bundle -import android.os.Environment -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.MenuItem -import android.view.View -import android.view.ViewGroup -import android.view.animation.AnimationUtils -import android.widget.ImageView -import androidx.core.content.FileProvider -import androidx.lifecycle.lifecycleScope -import androidx.navigation.Navigation -import com.bumptech.glide.Glide -import com.bumptech.glide.load.model.GlideUrl -import com.bumptech.glide.load.model.LazyHeaders -import com.google.android.material.bottomappbar.BottomAppBar -import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.lsp.view.R -import com.lsp.view.YandViewApplication -import com.lsp.view.ui.activity.MainActivity -import com.lsp.view.bean.Post -import com.lsp.view.repository.datasource.model.Collect -import com.lsp.view.repository.datasource.model.Collect.Companion.toCollect -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.io.File - -class ImageFragment : Fragment() { - private val post by lazy { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - arguments?.getParcelable("post",Post::class.java) - }else{ - arguments?.getParcelable("post") - } - } - @Volatile private var isCollect = false - private val activityContext : MainActivity by lazy { - requireActivity() as MainActivity - } - private lateinit var collectBtn:MenuItem - private lateinit var collect:Collect - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_image, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val bottomAppBar = view.findViewById(R.id.bottomAppBar) - collectBtn = bottomAppBar.menu.findItem(R.id.collect_menu_btn) - collectBtn.setIcon(R.drawable.ic_bashline_unfavorite_24) - bottomAppBar.setOnMenuItemClickListener { - when(it.itemId){ - R.id.share_menu_btn ->{ - post?.sampleUrl?.let { it1 -> share(it1,activityContext) } - true - } - R.id.collect_menu_btn ->{ - if (!isCollect){ - collect = post!!.toCollect() - collectIt(collect) - }else{ - unCollectIt(collect) - } - true - } - - else -> {false} - } - } - - lifecycleScope.launch { - post?.postId?.let { - val collectPost = activityContext.viewModel.getCollectByPostId(it) - val result = collectPost.await() - if (result != null){ - collect = result - collectBtn.setIcon(R.drawable.ic_baseline_favorite_24) - isCollect = true - } - } - } - - val downloadBtn = view.findViewById(R.id.download_btn) - downloadBtn.setOnClickListener { - lifecycleScope.launch { - if (post!=null){ - download(post!!.fileUrl) - } - } - } - - if (post!=null){ - val imageContent = view.findViewById(R.id.image_content) - val glideUrl = GlideUrl( - post!!.sampleUrl, - LazyHeaders.Builder().addHeader("User-Agent", YandViewApplication.UA) - .build() - ) - Glide.with(this).load(glideUrl).into(imageContent) - - } - - - } - - - private fun collectIt(collect: Collect){ - activityContext.viewModel.addCollect(collect) - collectBtn.setIcon(R.drawable.ic_baseline_favorite_24) - isCollect = true - } - - private fun unCollectIt(collect:Collect){ - activityContext.viewModel.removeCollect(collect) - collectBtn.setIcon(R.drawable.ic_bashline_unfavorite_24) - isCollect = false - } - - private fun download(fileUrl: String){ - - } - - private fun share(url:String,context: Context){ - lifecycleScope.launch(Dispatchers.IO) { - val bitmap = Glide.with(context).asBitmap().load(url).submit().get() - val path = File("${context.cacheDir}/image") - val split = url.split("/") - val fileName = split[split.size - 1] - if (!path.exists()) - path.mkdirs() - - - var file = File("${context.cacheDir}/image/$fileName") - val downloadFile = - File("${Environment.getExternalStorageDirectory()}/${Environment.DIRECTORY_PICTURES}/LspMake/$fileName") - - if (downloadFile.exists()){ - file = downloadFile - }else if (!file.exists()) { - file.outputStream().apply { - bitmap.compress(Bitmap.CompressFormat.PNG, 100, this) - } - } - val imageUri = FileProvider.getUriForFile( - context, - "com.lsp.view.fileprovider", - file - - ) - context.grantUriPermission( - "com.lsp.view", - imageUri, - Intent.FLAG_GRANT_WRITE_URI_PERMISSION - ) - val shareIntent = Intent(Intent.ACTION_SEND) - shareIntent.type = "image/*" - shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri) - shareIntent.putExtra(Intent.EXTRA_TITLE,fileName) - val intent = Intent.createChooser(shareIntent, R.string.title_share.toString()) - val resInfoList: List = if (Build.VERSION.SDK_INT < 33) { - context.packageManager - .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) - } else { - context.packageManager.queryIntentActivities( - intent, - PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong()) - ) - } - for (resolveInfo in resInfoList) { - val packageName = resolveInfo.activityInfo.packageName - context.grantUriPermission( - packageName, - imageUri, - Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION - ) - } - context.startActivity(intent) - } - - - } - - companion object{ - fun navigationToImageFragment(context:MainActivity ,post:Post,view:View,fragmentId:Int){ - val bundle = Bundle() - bundle.putParcelable("post",post) - val tags = post.tags?.split(",")?.toList() - - context.viewModel.tagsList.value?.apply { - clear() - tags?.let { addAll(it) } - } - - Navigation.findNavController(view).navigate(fragmentId,bundle) - val slideOutAnimation = AnimationUtils.loadAnimation(context, - R.anim.slide_out_bottom - ) - context.bottomNav.startAnimation(slideOutAnimation) - context.bottomNav.visibility = View.GONE - } - } - - - -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/fragment/PostListFragment.kt b/app/src/main/java/com/lsp/view/ui/fragment/PostListFragment.kt deleted file mode 100644 index 318d85e..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/PostListFragment.kt +++ /dev/null @@ -1,108 +0,0 @@ -package com.lsp.view.ui.fragment - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.AnimationUtils -import android.view.inputmethod.EditorInfo -import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider -import androidx.navigation.Navigation -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.StaggeredGridLayoutManager -import com.google.android.material.search.SearchBar -import com.google.android.material.search.SearchView -import com.lsp.view.ui.fragment.adapter.PostAdapter -import com.lsp.view.R -import com.lsp.view.ui.activity.MainActivity -import com.lsp.view.bean.Post -import com.lsp.view.ui.MainViewModel - -class PostListFragment:Fragment() { - private val viewModel: MainViewModel by lazy { - ViewModelProvider(requireActivity(), - MainViewModel.provideFactory(activityContext.repository,requireContext(),this)).get( - MainViewModel::class.java) - } - private lateinit var activityContext: MainActivity - - - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_list, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - activityContext = requireActivity() as MainActivity - val searchBar = view.findViewById(R.id.search_bar) - - val searchView = view.findViewById(R.id.search_view) - searchView.editText.setOnEditorActionListener { v, actionId, event -> - if (actionId == EditorInfo.IME_ACTION_SEARCH) { - viewModel.fetchPostBySearch(searchView.text.toString()) - searchBar.setText(searchView.text) - searchView.hide() - } - - return@setOnEditorActionListener false - } - - viewModel.uiState.value.nowSearchText.observe(requireActivity()){ - searchView.setText(it) - searchBar.setText(it) - } - - //刷新 - val refresh = - view.findViewById(R.id.swipeRefreshLayout) - viewModel.uiState.value.isRefreshing.observe(activityContext) { - refresh.isRefreshing = it - } - refresh.setOnRefreshListener { - viewModel.fetchPostByRefresh() - } - - viewModel.postList.observe(activityContext){ - viewModel.adapter.pushNewData(it) - } - - viewModel.adapter.apply { - setLoadMoreListener(object : PostAdapter.OnScrollToBottom { - override fun event(position: Int) { - viewModel.fetchMore() - } - }) - } - - view.findViewById(R.id.recyclerview).apply { - val layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) - this.layoutManager = layoutManager - this.adapter = viewModel.adapter - } - - viewModel.adapter.setOnListItemClick(object : PostAdapter.OnListItemClick { - override fun setOnListItemClick(post: Post) { - ImageFragment.navigationToImageFragment(activityContext,post,view,R.id.action_postListFragment_to_imageFragment) - } - - }) - - - - } - - override fun onResume() { - super.onResume() - if (activityContext.bottomNav.visibility == View.GONE){ - val slideOutAnimation = AnimationUtils.loadAnimation(context, R.anim.slide_on_bottom) - activityContext.bottomNav.startAnimation(slideOutAnimation) - activityContext.bottomNav.visibility = View.VISIBLE - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/fragment/SettingsFragment.kt b/app/src/main/java/com/lsp/view/ui/fragment/SettingsFragment.kt deleted file mode 100644 index da9a34d..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/SettingsFragment.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.lsp.view.ui.fragment - -import android.os.Bundle -import androidx.preference.PreferenceFragmentCompat -import com.lsp.view.R - -class SettingsFragment : PreferenceFragmentCompat() { - - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.root_preferences, rootKey) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/ui/fragment/adapter/PostAdapter.kt b/app/src/main/java/com/lsp/view/ui/fragment/adapter/PostAdapter.kt deleted file mode 100644 index c7f0a0f..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/adapter/PostAdapter.kt +++ /dev/null @@ -1,143 +0,0 @@ -package com.lsp.view.ui.fragment.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -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.R -import com.lsp.view.YandViewApplication -import com.lsp.view.bean.Post - - -class PostAdapter(val context: Context,private val postList: ArrayList = ArrayList()): - RecyclerView.Adapter() { - val TAG = this::class.java.simpleName - private var inBottom:Boolean = false//当前列表是否在底部 - - inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - val picImage: ImageView = view.findViewById(R.id.image) - - } - - fun pushNewData(list: List) { - if (inBottom) { - //在底部,则追加数据 - val pos = postList.size - postList.addAll(list) - notifyItemRangeInserted(pos - 1, list.size) - } else { - //不在则刷新数据 - val oldSize = postList.size - postList.clear() - notifyItemRangeRemoved(0, oldSize) - postList.addAll(list) - notifyItemRangeInserted(0, list.size) - } - - inBottom = false//加入新数据后不在底部,若仍在底部说明无更多数据,也不必处理 - - } - - - private lateinit var mOnListItemClick: OnListItemClick - interface OnListItemClick { - fun setOnListItemClick(post:Post) - } - fun setOnListItemClick(mOnListItemClick: OnListItemClick) { - this.mOnListItemClick = mOnListItemClick - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = LayoutInflater.from(context).inflate(R.layout.img_item_layout, parent, false) - val viewHolder = ViewHolder(view) - - viewHolder.picImage.setOnClickListener { - val position = viewHolder.adapterPosition - mOnListItemClick.setOnListItemClick(postList[position]) - } - - - return viewHolder - } - - private lateinit var mScrollToBottom: OnScrollToBottom - - interface OnScrollToBottom { - fun event(position: Int) - } - - fun setLoadMoreListener(mLoadMoreListener: OnScrollToBottom) { - this.mScrollToBottom = mLoadMoreListener - } - - private fun preLoad(p:Int){ - if (p%20==0){ - //执行预加载 - val last:Int = if (postList.size-p<20){ - postList.size-1 - }else{ - p+19 - } - for(index in p..last){ - if (p>6) { - val source: String = postList[index].sampleUrl - val glideUrl = GlideUrl( - source, - LazyHeaders.Builder().addHeader("User-Agent", YandViewApplication.UA) - .build() - ) - Glide.with(context).download(glideUrl).preload() - } - } - } - - - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - preLoad(position) - - val post = postList[position] - - val source: String = post.sampleUrl - - val height = postList[position].sampleHeight - val width = postList[position].sampleWidth - - //图片过长则缩减高度以保证显示完整 - if (width > height){ - holder.picImage.layoutParams.height = height / 2 - }else { - holder.picImage.layoutParams.height = height - } - - - val glideUrl = GlideUrl( - source, - LazyHeaders.Builder().addHeader("User-Agent", YandViewApplication.UA) - .build() - ) - Glide.with(context).load(glideUrl).into(holder.picImage) - - if (position == postList.size - 1 && postList.size > 6 ) { - //到达底部 - inBottom = true - if (this::mScrollToBottom.isInitialized) { - mScrollToBottom.event(position) - } - } - - - } - - override fun getItemCount(): Int { - return postList.size - } - - -} diff --git a/app/src/main/java/com/lsp/view/ui/fragment/adapter/TagsAdapter.kt b/app/src/main/java/com/lsp/view/ui/fragment/adapter/TagsAdapter.kt deleted file mode 100644 index 7bdd13e..0000000 --- a/app/src/main/java/com/lsp/view/ui/fragment/adapter/TagsAdapter.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.lsp.view.ui.fragment.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.lsp.view.R - -class TagsAdapter(private val tagList:List):RecyclerView.Adapter() { - inner class ViewHolder(view:View):RecyclerView.ViewHolder(view) { - val tagItem = view.findViewById(R.id.tag) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = - LayoutInflater.from(parent.context).inflate(R.layout.tags_item_layout, parent, false) - val viewHolder = ViewHolder(view) - - return viewHolder - } - - override fun getItemCount() = tagList.size - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.tagItem.text = tagList[position] - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/YandViewApplication.kt b/app/src/main/java/moe/uni/view/YandViewApplication.kt similarity index 79% rename from app/src/main/java/com/lsp/view/YandViewApplication.kt rename to app/src/main/java/moe/uni/view/YandViewApplication.kt index 5489253..3c3d4cb 100644 --- a/app/src/main/java/com/lsp/view/YandViewApplication.kt +++ b/app/src/main/java/moe/uni/view/YandViewApplication.kt @@ -1,9 +1,8 @@ -package com.lsp.view +package moe.uni.view import android.app.Application import androidx.lifecycle.DefaultLifecycleObserver import android.content.Context -import com.google.android.material.color.DynamicColors class YandViewApplication : Application(), DefaultLifecycleObserver { @@ -11,8 +10,6 @@ class YandViewApplication : Application(), DefaultLifecycleObserver { override fun onCreate() { super.onCreate() context = applicationContext - - DynamicColors.applyToActivitiesIfAvailable(this) } companion object { diff --git a/app/src/main/java/com/lsp/view/bean/Post.kt b/app/src/main/java/moe/uni/view/bean/Post.kt similarity index 98% rename from app/src/main/java/com/lsp/view/bean/Post.kt rename to app/src/main/java/moe/uni/view/bean/Post.kt index 526060e..559f807 100644 --- a/app/src/main/java/com/lsp/view/bean/Post.kt +++ b/app/src/main/java/moe/uni/view/bean/Post.kt @@ -1,4 +1,4 @@ -package com.lsp.view.bean +package moe.uni.view.bean import android.os.Parcel import android.os.Parcelable diff --git a/app/src/main/java/com/lsp/view/bean/YandPost.kt b/app/src/main/java/moe/uni/view/bean/YandPost.kt similarity index 95% rename from app/src/main/java/com/lsp/view/bean/YandPost.kt rename to app/src/main/java/moe/uni/view/bean/YandPost.kt index 08b1426..e18780b 100644 --- a/app/src/main/java/com/lsp/view/bean/YandPost.kt +++ b/app/src/main/java/moe/uni/view/bean/YandPost.kt @@ -1,4 +1,4 @@ -package com.lsp.view.bean +package moe.uni.view.bean import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/lsp/view/common/Config.kt b/app/src/main/java/moe/uni/view/common/Config.kt similarity index 96% rename from app/src/main/java/com/lsp/view/common/Config.kt rename to app/src/main/java/moe/uni/view/common/Config.kt index 677d71b..c6d2ca0 100644 --- a/app/src/main/java/com/lsp/view/common/Config.kt +++ b/app/src/main/java/moe/uni/view/common/Config.kt @@ -1,4 +1,4 @@ -package com.lsp.view.common +package moe.uni.view.common class Config(val safeMode:Boolean,val source:String) { companion object{ diff --git a/app/src/main/java/com/lsp/view/common/ImageUtils.kt b/app/src/main/java/moe/uni/view/common/ImageUtils.kt similarity index 97% rename from app/src/main/java/com/lsp/view/common/ImageUtils.kt rename to app/src/main/java/moe/uni/view/common/ImageUtils.kt index f2435a4..4944810 100644 --- a/app/src/main/java/com/lsp/view/common/ImageUtils.kt +++ b/app/src/main/java/moe/uni/view/common/ImageUtils.kt @@ -1,4 +1,4 @@ -package com.lsp.view.common +package moe.uni.view.common import android.annotation.SuppressLint import android.content.Context @@ -13,7 +13,7 @@ import androidx.core.content.FileProvider import androidx.core.graphics.drawable.toBitmap import coil.ImageLoader import coil.request.ImageRequest -import com.lsp.view.R +import moe.uni.view.R import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -95,7 +95,7 @@ suspend fun getImageInfo(url: String, context: Context): ImageInfo { } val imageUri = FileProvider.getUriForFile( context, - "com.lsp.view.fileprovider", + "moe.uni.view.fileprovider", file ) return ImageInfo(path = file.path, name = fileName, uri = imageUri) diff --git a/app/src/main/java/com/lsp/view/common/PreKV.kt b/app/src/main/java/moe/uni/view/common/PreKV.kt similarity index 59% rename from app/src/main/java/com/lsp/view/common/PreKV.kt rename to app/src/main/java/moe/uni/view/common/PreKV.kt index 1a5b415..34f936a 100644 --- a/app/src/main/java/com/lsp/view/common/PreKV.kt +++ b/app/src/main/java/moe/uni/view/common/PreKV.kt @@ -1,4 +1,4 @@ -package com.lsp.view.common +package moe.uni.view.common object PreKV { const val SOURCE_NAME = "source_name" @@ -6,5 +6,5 @@ object PreKV { } object Pre{ - const val NAME = "com.lsp.view_preferences" + const val NAME = "moe.uni.view_preferences" } \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/common/Utils.kt b/app/src/main/java/moe/uni/view/common/Utils.kt similarity index 89% rename from app/src/main/java/com/lsp/view/common/Utils.kt rename to app/src/main/java/moe/uni/view/common/Utils.kt index 830f17b..7b984b0 100644 --- a/app/src/main/java/com/lsp/view/common/Utils.kt +++ b/app/src/main/java/moe/uni/view/common/Utils.kt @@ -1,7 +1,7 @@ -package com.lsp.view.common +package moe.uni.view.common import android.content.Context -import com.lsp.view.YandViewApplication +import moe.uni.view.YandViewApplication object PreUtils { private val PRE = YandViewApplication.context!!.getSharedPreferences(Pre.NAME,Context.MODE_PRIVATE) diff --git a/app/src/main/java/com/lsp/view/repository/datasource/CollectDatabase.kt b/app/src/main/java/moe/uni/view/repository/datasource/CollectDatabase.kt similarity index 80% rename from app/src/main/java/com/lsp/view/repository/datasource/CollectDatabase.kt rename to app/src/main/java/moe/uni/view/repository/datasource/CollectDatabase.kt index 09f01d5..be799b9 100644 --- a/app/src/main/java/com/lsp/view/repository/datasource/CollectDatabase.kt +++ b/app/src/main/java/moe/uni/view/repository/datasource/CollectDatabase.kt @@ -1,11 +1,11 @@ -package com.lsp.view.repository.datasource +package moe.uni.view.repository.datasource import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -import com.lsp.view.repository.datasource.dao.CollectDao -import com.lsp.view.repository.datasource.model.Collect +import moe.uni.view.repository.datasource.dao.CollectDao +import moe.uni.view.repository.datasource.model.Collect @Database(entities = [Collect::class], version = 1,exportSchema = false) abstract class CollectDatabase: RoomDatabase(){ diff --git a/app/src/main/java/com/lsp/view/repository/datasource/CollectRepository.kt b/app/src/main/java/moe/uni/view/repository/datasource/CollectRepository.kt similarity index 71% rename from app/src/main/java/com/lsp/view/repository/datasource/CollectRepository.kt rename to app/src/main/java/moe/uni/view/repository/datasource/CollectRepository.kt index 024d543..0bb40db 100644 --- a/app/src/main/java/com/lsp/view/repository/datasource/CollectRepository.kt +++ b/app/src/main/java/moe/uni/view/repository/datasource/CollectRepository.kt @@ -1,6 +1,6 @@ -package com.lsp.view.repository.datasource +package moe.uni.view.repository.datasource -import com.lsp.view.repository.datasource.model.Collect +import moe.uni.view.repository.datasource.model.Collect interface CollectRepository { suspend fun addNewCollect(collect: Collect) diff --git a/app/src/main/java/com/lsp/view/repository/datasource/CollectRepositoryImpl.kt b/app/src/main/java/moe/uni/view/repository/datasource/CollectRepositoryImpl.kt similarity index 78% rename from app/src/main/java/com/lsp/view/repository/datasource/CollectRepositoryImpl.kt rename to app/src/main/java/moe/uni/view/repository/datasource/CollectRepositoryImpl.kt index d37c572..cb65e57 100644 --- a/app/src/main/java/com/lsp/view/repository/datasource/CollectRepositoryImpl.kt +++ b/app/src/main/java/moe/uni/view/repository/datasource/CollectRepositoryImpl.kt @@ -1,7 +1,7 @@ -package com.lsp.view.repository.datasource +package moe.uni.view.repository.datasource -import com.lsp.view.repository.datasource.dao.CollectDao -import com.lsp.view.repository.datasource.model.Collect +import moe.uni.view.repository.datasource.dao.CollectDao +import moe.uni.view.repository.datasource.model.Collect class CollectRepositoryImpl(private val collectDao:CollectDao):CollectRepository { override suspend fun addNewCollect(collect: Collect) { diff --git a/app/src/main/java/com/lsp/view/repository/datasource/dao/CollectDao.kt b/app/src/main/java/moe/uni/view/repository/datasource/dao/CollectDao.kt similarity index 85% rename from app/src/main/java/com/lsp/view/repository/datasource/dao/CollectDao.kt rename to app/src/main/java/moe/uni/view/repository/datasource/dao/CollectDao.kt index 788ba9b..7000af5 100644 --- a/app/src/main/java/com/lsp/view/repository/datasource/dao/CollectDao.kt +++ b/app/src/main/java/moe/uni/view/repository/datasource/dao/CollectDao.kt @@ -1,10 +1,10 @@ -package com.lsp.view.repository.datasource.dao +package moe.uni.view.repository.datasource.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import com.lsp.view.repository.datasource.model.Collect +import moe.uni.view.repository.datasource.model.Collect @Dao interface CollectDao { diff --git a/app/src/main/java/com/lsp/view/repository/datasource/model/Collect.kt b/app/src/main/java/moe/uni/view/repository/datasource/model/Collect.kt similarity index 83% rename from app/src/main/java/com/lsp/view/repository/datasource/model/Collect.kt rename to app/src/main/java/moe/uni/view/repository/datasource/model/Collect.kt index 704f6cd..d1e2c02 100644 --- a/app/src/main/java/com/lsp/view/repository/datasource/model/Collect.kt +++ b/app/src/main/java/moe/uni/view/repository/datasource/model/Collect.kt @@ -1,11 +1,11 @@ -package com.lsp.view.repository.datasource.model +package moe.uni.view.repository.datasource.model import android.content.Context import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import com.lsp.view.YandViewApplication -import com.lsp.view.bean.Post +import moe.uni.view.YandViewApplication +import moe.uni.view.bean.Post @Entity(tableName = "collect") data class Collect( @@ -28,7 +28,7 @@ data class Collect( sampleWeight:Int, tags:String? ): this(0, postId, sampleUrl, rating, fileUrl, sampleHeight, sampleWeight, - YandViewApplication.context?.getSharedPreferences("com.lsp.view_preferences",Context.MODE_PRIVATE)?.getString("source_name", "yande.re")!!,tags) + YandViewApplication.context?.getSharedPreferences("moe.uni.view_preferences",Context.MODE_PRIVATE)?.getString("source_name", "yande.re")!!,tags) companion object{ fun Post.toCollect():Collect = Collect(this.postId,this.sampleUrl,this.rating,this.fileUrl,this.sampleHeight,this.sampleWidth ,this.tags) diff --git a/app/src/main/java/com/lsp/view/repository/exception/LoggerException.kt b/app/src/main/java/moe/uni/view/repository/exception/LoggerException.kt similarity index 84% rename from app/src/main/java/com/lsp/view/repository/exception/LoggerException.kt rename to app/src/main/java/moe/uni/view/repository/exception/LoggerException.kt index 6cea422..778986b 100644 --- a/app/src/main/java/com/lsp/view/repository/exception/LoggerException.kt +++ b/app/src/main/java/moe/uni/view/repository/exception/LoggerException.kt @@ -1,4 +1,4 @@ -package com.lsp.view.repository.exception +package moe.uni.view.repository.exception import android.util.Log diff --git a/app/src/main/java/com/lsp/view/repository/exception/NetworkUnableConnectException.kt b/app/src/main/java/moe/uni/view/repository/exception/NetworkUnableConnectException.kt similarity index 55% rename from app/src/main/java/com/lsp/view/repository/exception/NetworkUnableConnectException.kt rename to app/src/main/java/moe/uni/view/repository/exception/NetworkUnableConnectException.kt index 20be587..26af999 100644 --- a/app/src/main/java/com/lsp/view/repository/exception/NetworkUnableConnectException.kt +++ b/app/src/main/java/moe/uni/view/repository/exception/NetworkUnableConnectException.kt @@ -1,6 +1,4 @@ -package com.lsp.view.repository.exception - -import okhttp3.ResponseBody +package moe.uni.view.repository.exception class NetworkErrorException(override val message: String?) : LoggerException(message) { } \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/repository/exception/UnableConstructObjectException.kt b/app/src/main/java/moe/uni/view/repository/exception/UnableConstructObjectException.kt similarity index 58% rename from app/src/main/java/com/lsp/view/repository/exception/UnableConstructObjectException.kt rename to app/src/main/java/moe/uni/view/repository/exception/UnableConstructObjectException.kt index 3a5c74c..765e80f 100644 --- a/app/src/main/java/com/lsp/view/repository/exception/UnableConstructObjectException.kt +++ b/app/src/main/java/moe/uni/view/repository/exception/UnableConstructObjectException.kt @@ -1,6 +1,4 @@ -package com.lsp.view.repository.exception - -import java.lang.Exception +package moe.uni.view.repository.exception class UnableConstructObjectException(override val message: String?):LoggerException(message) { } \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/repository/network/PostDataSource.kt b/app/src/main/java/moe/uni/view/repository/network/PostDataSource.kt similarity index 60% rename from app/src/main/java/com/lsp/view/repository/network/PostDataSource.kt rename to app/src/main/java/moe/uni/view/repository/network/PostDataSource.kt index b859bd5..7b5a0dd 100644 --- a/app/src/main/java/com/lsp/view/repository/network/PostDataSource.kt +++ b/app/src/main/java/moe/uni/view/repository/network/PostDataSource.kt @@ -1,14 +1,9 @@ -package com.lsp.view.repository.network +package moe.uni.view.repository.network -import com.lsp.view.R -import com.lsp.view.YandViewApplication -import com.lsp.view.repository.exception.UnableConstructObjectException -import com.lsp.view.repository.network.api.PostApi -import com.lsp.view.repository.network.api.PostApiImpl -import com.lsp.view.bean.YandPost -import com.lsp.view.common.Config -import com.lsp.view.common.Pre -import com.lsp.view.common.PreKV +import moe.uni.view.repository.network.api.PostApi +import moe.uni.view.repository.network.api.PostApiImpl +import moe.uni.view.bean.YandPost +import moe.uni.view.common.Config class PostDataSource { companion object{ diff --git a/app/src/main/java/com/lsp/view/repository/network/PostRepository.kt b/app/src/main/java/moe/uni/view/repository/network/PostRepository.kt similarity index 87% rename from app/src/main/java/com/lsp/view/repository/network/PostRepository.kt rename to app/src/main/java/moe/uni/view/repository/network/PostRepository.kt index cf5f362..07871c4 100644 --- a/app/src/main/java/com/lsp/view/repository/network/PostRepository.kt +++ b/app/src/main/java/moe/uni/view/repository/network/PostRepository.kt @@ -1,7 +1,7 @@ -package com.lsp.view.repository.network +package moe.uni.view.repository.network -import com.lsp.view.bean.YandPost -import com.lsp.view.common.Config +import moe.uni.view.bean.YandPost +import moe.uni.view.common.Config class PostRepository { diff --git a/app/src/main/java/com/lsp/view/repository/network/api/PostApi.kt b/app/src/main/java/moe/uni/view/repository/network/api/PostApi.kt similarity index 82% rename from app/src/main/java/com/lsp/view/repository/network/api/PostApi.kt rename to app/src/main/java/moe/uni/view/repository/network/api/PostApi.kt index fe17e5f..9dfc0d8 100644 --- a/app/src/main/java/com/lsp/view/repository/network/api/PostApi.kt +++ b/app/src/main/java/moe/uni/view/repository/network/api/PostApi.kt @@ -1,9 +1,9 @@ -package com.lsp.view.repository.network.api +package moe.uni.view.repository.network.api -import com.lsp.view.repository.network.Load -import com.lsp.view.bean.Post -import com.lsp.view.bean.YandPost -import com.lsp.view.repository.exception.NetworkErrorException +import moe.uni.view.repository.network.Load +import moe.uni.view.bean.Post +import moe.uni.view.bean.YandPost +import moe.uni.view.repository.exception.NetworkErrorException import retrofit2.Call interface PostApi { diff --git a/app/src/main/java/com/lsp/view/repository/network/api/PostApiImpl.kt b/app/src/main/java/moe/uni/view/repository/network/api/PostApiImpl.kt similarity index 66% rename from app/src/main/java/com/lsp/view/repository/network/api/PostApiImpl.kt rename to app/src/main/java/moe/uni/view/repository/network/api/PostApiImpl.kt index f737aef..1b74a87 100644 --- a/app/src/main/java/com/lsp/view/repository/network/api/PostApiImpl.kt +++ b/app/src/main/java/moe/uni/view/repository/network/api/PostApiImpl.kt @@ -1,9 +1,9 @@ -package com.lsp.view.repository.network.api +package moe.uni.view.repository.network.api -import com.lsp.view.repository.network.Load -import com.lsp.view.repository.network.retrofit.PostService -import com.lsp.view.repository.network.retrofit.ServiceCreator -import com.lsp.view.bean.YandPost +import moe.uni.view.repository.network.Load +import moe.uni.view.repository.network.retrofit.PostService +import moe.uni.view.repository.network.retrofit.ServiceCreator +import moe.uni.view.bean.YandPost import retrofit2.Call import kotlin.collections.ArrayList diff --git a/app/src/main/java/com/lsp/view/repository/network/retrofit/PostService.kt b/app/src/main/java/moe/uni/view/repository/network/retrofit/PostService.kt similarity index 77% rename from app/src/main/java/com/lsp/view/repository/network/retrofit/PostService.kt rename to app/src/main/java/moe/uni/view/repository/network/retrofit/PostService.kt index 4ac243e..55ce31f 100644 --- a/app/src/main/java/com/lsp/view/repository/network/retrofit/PostService.kt +++ b/app/src/main/java/moe/uni/view/repository/network/retrofit/PostService.kt @@ -1,6 +1,6 @@ -package com.lsp.view.repository.network.retrofit +package moe.uni.view.repository.network.retrofit -import com.lsp.view.bean.YandPost +import moe.uni.view.bean.YandPost import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query diff --git a/app/src/main/java/com/lsp/view/repository/network/retrofit/ServiceCreator.kt b/app/src/main/java/moe/uni/view/repository/network/retrofit/ServiceCreator.kt similarity index 94% rename from app/src/main/java/com/lsp/view/repository/network/retrofit/ServiceCreator.kt rename to app/src/main/java/moe/uni/view/repository/network/retrofit/ServiceCreator.kt index 22fa61a..c50e654 100644 --- a/app/src/main/java/com/lsp/view/repository/network/retrofit/ServiceCreator.kt +++ b/app/src/main/java/moe/uni/view/repository/network/retrofit/ServiceCreator.kt @@ -1,4 +1,4 @@ -package com.lsp.view.repository.network.retrofit +package moe.uni.view.repository.network.retrofit import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor diff --git a/app/src/main/java/com/lsp/view/service/DownloadService.kt b/app/src/main/java/moe/uni/view/service/DownloadService.kt similarity index 96% rename from app/src/main/java/com/lsp/view/service/DownloadService.kt rename to app/src/main/java/moe/uni/view/service/DownloadService.kt index d4a6b7b..99e5007 100644 --- a/app/src/main/java/com/lsp/view/service/DownloadService.kt +++ b/app/src/main/java/moe/uni/view/service/DownloadService.kt @@ -1,11 +1,11 @@ -package com.lsp.view.service +package moe.uni.view.service import android.app.Service import android.content.Context import android.content.Intent import android.media.MediaScannerConnection import android.os.* -import com.lsp.view.repository.network.retrofit.ServiceCreator +import moe.uni.view.repository.network.retrofit.ServiceCreator import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/lsp/view/ui/compose/PostActivity.kt b/app/src/main/java/moe/uni/view/ui/compose/PostActivity.kt similarity index 93% rename from app/src/main/java/com/lsp/view/ui/compose/PostActivity.kt rename to app/src/main/java/moe/uni/view/ui/compose/PostActivity.kt index 13a0b74..ab2e673 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/PostActivity.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/PostActivity.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose +package moe.uni.view.ui.compose import android.content.ComponentName import android.content.Intent @@ -14,14 +14,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.lsp.view.ui.compose.theme.LspViewTheme +import moe.uni.view.ui.compose.theme.LspViewTheme import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.lsp.view.service.DownloadService -import com.lsp.view.ui.compose.screen.DetailScreen -import com.lsp.view.ui.compose.screen.PostListScreen +import moe.uni.view.service.DownloadService +import moe.uni.view.ui.compose.screen.DetailScreen +import moe.uni.view.ui.compose.screen.PostListScreen import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/lsp/view/ui/compose/PostUiState.kt b/app/src/main/java/moe/uni/view/ui/compose/PostUiState.kt similarity index 82% rename from app/src/main/java/com/lsp/view/ui/compose/PostUiState.kt rename to app/src/main/java/moe/uni/view/ui/compose/PostUiState.kt index 2e86da2..1442160 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/PostUiState.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/PostUiState.kt @@ -1,8 +1,8 @@ -package com.lsp.view.ui.compose +package moe.uni.view.ui.compose import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import com.lsp.view.bean.Post +import moe.uni.view.bean.Post data class PostUiState( var refresh:MutableState = mutableStateOf(true), diff --git a/app/src/main/java/com/lsp/view/ui/compose/PostViewModel.kt b/app/src/main/java/moe/uni/view/ui/compose/PostViewModel.kt similarity index 88% rename from app/src/main/java/com/lsp/view/ui/compose/PostViewModel.kt rename to app/src/main/java/moe/uni/view/ui/compose/PostViewModel.kt index 1fa66a5..97d07fe 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/PostViewModel.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/PostViewModel.kt @@ -1,12 +1,12 @@ -package com.lsp.view.ui.compose +package moe.uni.view.ui.compose import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.lsp.view.bean.YandPost -import com.lsp.view.repository.exception.NetworkErrorException -import com.lsp.view.repository.network.PostRepository -import com.lsp.view.service.Result +import moe.uni.view.bean.YandPost +import moe.uni.view.repository.exception.NetworkErrorException +import moe.uni.view.repository.network.PostRepository +import moe.uni.view.service.Result import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/lsp/view/ui/compose/screen/DetailScreen.kt b/app/src/main/java/moe/uni/view/ui/compose/screen/DetailScreen.kt similarity index 92% rename from app/src/main/java/com/lsp/view/ui/compose/screen/DetailScreen.kt rename to app/src/main/java/moe/uni/view/ui/compose/screen/DetailScreen.kt index 857b273..03e94fc 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/screen/DetailScreen.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/screen/DetailScreen.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.screen +package moe.uni.view.ui.compose.screen import android.widget.Toast import androidx.compose.foundation.background @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Share import androidx.compose.material3.ExperimentalMaterial3Api @@ -29,10 +30,10 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.navigation.NavController import coil.compose.AsyncImage -import com.lsp.view.R -import com.lsp.view.common.setWallpaper -import com.lsp.view.common.share -import com.lsp.view.ui.compose.PostViewModel +import moe.uni.view.R +import moe.uni.view.common.setWallpaper +import moe.uni.view.common.share +import moe.uni.view.ui.compose.PostViewModel @OptIn(ExperimentalMaterial3Api::class) @@ -77,7 +78,7 @@ fun DetailScreen(navController: NavController, viewModel: PostViewModel) { title = {}, navigationIcon = { IconButton(onClick = { navController.popBackStack() }) { - Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = R.string.description_back.toString()) + Icon(imageVector = Icons.AutoMirrored.Default.ArrowBack, contentDescription = R.string.description_back.toString()) } }, actions = { diff --git a/app/src/main/java/com/lsp/view/ui/compose/screen/PostScreen.kt b/app/src/main/java/moe/uni/view/ui/compose/screen/PostScreen.kt similarity index 97% rename from app/src/main/java/com/lsp/view/ui/compose/screen/PostScreen.kt rename to app/src/main/java/moe/uni/view/ui/compose/screen/PostScreen.kt index e79411c..d96aa96 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/screen/PostScreen.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/screen/PostScreen.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.screen +package moe.uni.view.ui.compose.screen import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween @@ -53,11 +53,11 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.SubcomposeAsyncImage import coil.compose.SubcomposeAsyncImageContent -import com.lsp.view.bean.Post -import com.lsp.view.common.Config -import com.lsp.view.ui.compose.NAV_ROUTE_DETAIL_SCREEN -import com.lsp.view.ui.compose.PostViewModel -import com.lsp.view.ui.compose.widget.SearchBar +import moe.uni.view.bean.Post +import moe.uni.view.common.Config +import moe.uni.view.ui.compose.NAV_ROUTE_DETAIL_SCREEN +import moe.uni.view.ui.compose.PostViewModel +import moe.uni.view.ui.compose.widget.SearchBar import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map diff --git a/app/src/main/java/com/lsp/view/ui/compose/theme/Color.kt b/app/src/main/java/moe/uni/view/ui/compose/theme/Color.kt similarity index 86% rename from app/src/main/java/com/lsp/view/ui/compose/theme/Color.kt rename to app/src/main/java/moe/uni/view/ui/compose/theme/Color.kt index 9bca4c8..a7d154c 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/theme/Color.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/theme/Color.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.theme +package moe.uni.view.ui.compose.theme import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/com/lsp/view/ui/compose/theme/Theme.kt b/app/src/main/java/moe/uni/view/ui/compose/theme/Theme.kt similarity index 98% rename from app/src/main/java/com/lsp/view/ui/compose/theme/Theme.kt rename to app/src/main/java/moe/uni/view/ui/compose/theme/Theme.kt index 3dd1ca4..098513b 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/theme/Theme.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.theme +package moe.uni.view.ui.compose.theme import android.app.Activity import android.os.Build diff --git a/app/src/main/java/com/lsp/view/ui/compose/theme/Type.kt b/app/src/main/java/moe/uni/view/ui/compose/theme/Type.kt similarity index 96% rename from app/src/main/java/com/lsp/view/ui/compose/theme/Type.kt rename to app/src/main/java/moe/uni/view/ui/compose/theme/Type.kt index e2a4e31..7b0a91a 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/theme/Type.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/theme/Type.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.theme +package moe.uni.view.ui.compose.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle diff --git a/app/src/main/java/com/lsp/view/ui/compose/widget/Widget.kt b/app/src/main/java/moe/uni/view/ui/compose/widget/Widget.kt similarity index 98% rename from app/src/main/java/com/lsp/view/ui/compose/widget/Widget.kt rename to app/src/main/java/moe/uni/view/ui/compose/widget/Widget.kt index f9c4695..8a08871 100644 --- a/app/src/main/java/com/lsp/view/ui/compose/widget/Widget.kt +++ b/app/src/main/java/moe/uni/view/ui/compose/widget/Widget.kt @@ -1,4 +1,4 @@ -package com.lsp.view.ui.compose.widget +package moe.uni.view.ui.compose.widget import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/app/src/main/res/anim/slide_on_bottom.xml b/app/src/main/res/anim/slide_on_bottom.xml deleted file mode 100644 index bcbfbc3..0000000 --- a/app/src/main/res/anim/slide_on_bottom.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/slide_out_bottom.xml b/app/src/main/res/anim/slide_out_bottom.xml deleted file mode 100644 index cebd633..0000000 --- a/app/src/main/res/anim/slide_out_bottom.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ 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 deleted file mode 100644 index a043707..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_collect.xml b/app/src/main/res/layout/fragment_collect.xml deleted file mode 100644 index 4b29de0..0000000 --- a/app/src/main/res/layout/fragment_collect.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_image.xml b/app/src/main/res/layout/fragment_image.xml deleted file mode 100644 index e8937ab..0000000 --- a/app/src/main/res/layout/fragment_image.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_list.xml b/app/src/main/res/layout/fragment_list.xml deleted file mode 100644 index e183d2b..0000000 --- a/app/src/main/res/layout/fragment_list.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/img_item_layout.xml b/app/src/main/res/layout/img_item_layout.xml deleted file mode 100644 index 56ad3a6..0000000 --- a/app/src/main/res/layout/img_item_layout.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/post_list_layout.xml b/app/src/main/res/layout/post_list_layout.xml deleted file mode 100644 index 051fe93..0000000 --- a/app/src/main/res/layout/post_list_layout.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml deleted file mode 100644 index faf87eb..0000000 --- a/app/src/main/res/layout/settings_activity.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/tags_item_layout.xml b/app/src/main/res/layout/tags_item_layout.xml deleted file mode 100644 index b28b0ac..0000000 --- a/app/src/main/res/layout/tags_item_layout.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/image_bottom_menu.xml b/app/src/main/res/menu/image_bottom_menu.xml deleted file mode 100644 index 40a0d40..0000000 --- a/app/src/main/res/menu/image_bottom_menu.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ 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 deleted file mode 100644 index fd6495b..0000000 --- a/app/src/main/res/menu/nav_menu.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml deleted file mode 100644 index 031ce34..0000000 --- a/app/src/main/res/navigation/nav_graph.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index d69f9d4..0bb9555 100644 --- a/build.gradle +++ b/build.gradle @@ -6,9 +6,9 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.3.1' + classpath 'com.android.tools.build:gradle:8.3.2' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10' - classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.7.5" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/settings.gradle b/settings.gradle index 313c6ab..6a332f1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ include ':app' -rootProject.name = "LspView" \ No newline at end of file +rootProject.name = "YandView" \ No newline at end of file