diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 00c37d6..97bb380 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "com.haodustudio.DailyNotes" minSdk = 24 targetSdk = 33 - versionCode = 3 - versionName = "1.0.2" + versionCode = 4 + versionName = "1.0.3" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/haodustudio/DailyNotes/view/activities/AboutSoftware.kt b/app/src/main/java/com/haodustudio/DailyNotes/view/activities/AboutSoftware.kt index a2141b8..a761af1 100644 --- a/app/src/main/java/com/haodustudio/DailyNotes/view/activities/AboutSoftware.kt +++ b/app/src/main/java/com/haodustudio/DailyNotes/view/activities/AboutSoftware.kt @@ -1,102 +1,123 @@ package com.haodustudio.DailyNotes.view.activities -import android.content.BroadcastReceiver -import android.content.Context import android.content.Intent -import android.content.IntentFilter +import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle -import android.os.Handler -import android.util.Log -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.edit -import androidx.lifecycle.ViewModelProvider -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy +import android.os.Build import com.haodustudio.DailyNotes.BaseApplication import com.haodustudio.DailyNotes.R import com.haodustudio.DailyNotes.databinding.ActivityAboutSoftwareBinding import com.haodustudio.DailyNotes.helper.makeToast -import com.haodustudio.DailyNotes.utils.ViewUtils +import com.haodustudio.DailyNotes.view.activities.ViewImage import com.haodustudio.DailyNotes.view.activities.base.BaseActivity -import com.haodustudio.DailyNotes.viewModel.viewModels.GlobalViewModel - class AboutSoftware : BaseActivity() { private val binding by lazy { ActivityAboutSoftwareBinding.inflate(layoutInflater) } - private val appViewModel = ViewModelProvider( - BaseApplication.instance, - ViewModelProvider.AndroidViewModelFactory.getInstance(BaseApplication.instance) - )[GlobalViewModel::class.java] override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - binding.openSourceText.setOnClickListener { - makeToast("视频加载中\n改编自:@我家邻居全是猫") - val mIntent = Intent(this, ViewImage::class.java) - val videoUrl = BaseApplication.buildServerUrl("/static/about_eggshell_video.mp4") - if (videoUrl == null) { - makeToast("无网络连接") + configureBanner() + configureCards() + } + + private fun configureBanner() { + binding.bannerBadge.text = getString(R.string.about_codename_label) + binding.bannerTitle.text = getString(R.string.about_banner_title) + binding.bannerSubtitle.text = getString(R.string.about_banner_subtitle) + } + + private fun configureCards() { + val versionName = runCatching { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + packageManager.getPackageInfo( + packageName, + PackageManager.PackageInfoFlags.of(0) + ).versionName } else { - mIntent.putExtra("isVideo", true) - mIntent.putExtra("path", videoUrl) - startActivity(mIntent) + @Suppress("DEPRECATION") + packageManager.getPackageInfo(packageName, 0).versionName + } + }.getOrNull() + + binding.cardSoftwareVersion.apply { + title.text = getString(R.string.about_section_version_title) + subtitle.text = versionName?.let { + getString(R.string.about_section_version_subtitle, it) + } ?: getString(R.string.about_section_version_placeholder) + icon.setImageResource(R.drawable.info) + root.contentDescription = getString(R.string.about_section_version_desc) + root.setOnClickListener { + makeToast(subtitle.text.toString()) } } - binding.artPeopleInfo.setOnClickListener { - val mIntent = Intent(this, ViewImage::class.java) - val imageUrl = BaseApplication.buildServerUrl("/static/about_thanks_img.png") - if (imageUrl == null) { - makeToast("无网络连接") - } else { - mIntent.putExtra("path", imageUrl) - mIntent.putExtra("zoomEnabled", false) - startActivity(mIntent) + binding.cardContributors.apply { + title.text = getString(R.string.about_section_contributors_title) + subtitle.text = getString(R.string.about_section_contributors_subtitle) + icon.setImageResource(R.drawable.usergroup) + root.contentDescription = getString(R.string.about_section_contributors_desc) + root.setOnClickListener { + openRemoteAsset("/static/about_thanks_img.png", zoomEnabled = false) } } - binding.haodusWindow.setOnClickListener { - makeToast("诶哟你干嘛 (") + binding.cardRepository.apply { + title.text = getString(R.string.about_section_repo_title) + subtitle.text = getString(R.string.about_section_repo_subtitle) + icon.setImageResource(R.drawable.ic_about_github) + root.contentDescription = getString(R.string.about_section_repo_desc) + root.setOnClickListener { + openExternalUrl("https://github.com/HaoduStudio/DailyNotes") + } + } + + binding.cardPolicy.apply { + title.text = getString(R.string.about_section_policy_title) + subtitle.text = getString(R.string.about_section_policy_subtitle) + icon.setImageResource(R.drawable.ic_about_policy) + root.contentDescription = getString(R.string.about_section_policy_desc) + root.setOnClickListener { + openRemoteAsset("/static/about_user_privacy_policy.png", zoomEnabled = true) + } } - binding.mengxisWindow.setOnClickListener { - makeToast("WebStorm,启动!") + binding.cardPrivacy.apply { + title.text = getString(R.string.about_section_privacy_title) + subtitle.text = getString(R.string.about_section_privacy_subtitle) + icon.setImageResource(R.drawable.ic_about_privacy) + root.contentDescription = getString(R.string.about_section_privacy_desc) + root.setOnClickListener { + makeToast(getString(R.string.about_feature_placeholder)) + } } + } - val verName = packageManager. - getPackageInfo(packageName, 0).versionName - binding.versionInfo.text = "Version $verName" + private fun openRemoteAsset(path: String, zoomEnabled: Boolean) { + val assetUrl = BaseApplication.buildServerUrl(path) + if (assetUrl == null) { + makeToast(getString(R.string.about_network_unavailable)) + return + } - // tot = 2.5, ge ge ge (? - ViewUtils.fadeIn(binding.aboutForeground, 1000) { - binding.aboutForeground.postDelayed({ - ViewUtils.fadeOut(binding.aboutForeground, 500) { - startMainPage() - } - }, 1000) + val viewerIntent = Intent(this, ViewImage::class.java).apply { + putExtra("path", assetUrl) + putExtra("zoomEnabled", zoomEnabled) + if (path.endsWith(".mp4")) { + putExtra("isVideo", true) + } } + startActivity(viewerIntent) } - private fun startMainPage() { - binding.videoView.visibility = View.GONE - binding.aboutForeground.visibility = View.GONE - binding.aboutRoot.visibility = View.VISIBLE -// Glide.with(this).asGif().load(R.drawable.ic_cute_loading).into(binding.userPpImg) - val policyUrl = BaseApplication.buildServerUrl("/static/about_user_privacy_policy.png") - if (policyUrl == null) { - makeToast("无网络连接") + private fun openExternalUrl(url: String) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + if (intent.resolveActivity(packageManager) != null) { + startActivity(intent) } else { - Glide - .with(this) - .load(policyUrl) - .placeholder(R.drawable.ic_cute_loading) - .skipMemoryCache(true) // 不使用内存缓存 - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(binding.userPpImg) + makeToast(url) } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/about_banner.png b/app/src/main/res/drawable/about_banner.png new file mode 100644 index 0000000..ddf5c48 Binary files /dev/null and b/app/src/main/res/drawable/about_banner.png differ diff --git a/app/src/main/res/drawable/bg_about_badge.xml b/app/src/main/res/drawable/bg_about_badge.xml new file mode 100644 index 0000000..6de6a74 --- /dev/null +++ b/app/src/main/res/drawable/bg_about_badge.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_about_banner_gradient.xml b/app/src/main/res/drawable/bg_about_banner_gradient.xml new file mode 100644 index 0000000..64df939 --- /dev/null +++ b/app/src/main/res/drawable/bg_about_banner_gradient.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/drawable/bg_about_banner_placeholder.xml b/app/src/main/res/drawable/bg_about_banner_placeholder.xml new file mode 100644 index 0000000..e25ae72 --- /dev/null +++ b/app/src/main/res/drawable/bg_about_banner_placeholder.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/bg_about_icon_container.xml b/app/src/main/res/drawable/bg_about_icon_container.xml new file mode 100644 index 0000000..1e06be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_about_icon_container.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_about_github.png b/app/src/main/res/drawable/ic_about_github.png new file mode 100644 index 0000000..051500a Binary files /dev/null and b/app/src/main/res/drawable/ic_about_github.png differ diff --git a/app/src/main/res/drawable/ic_about_policy.png b/app/src/main/res/drawable/ic_about_policy.png new file mode 100644 index 0000000..9bf6e4b Binary files /dev/null and b/app/src/main/res/drawable/ic_about_policy.png differ diff --git a/app/src/main/res/drawable/ic_about_privacy.png b/app/src/main/res/drawable/ic_about_privacy.png new file mode 100644 index 0000000..404d37e Binary files /dev/null and b/app/src/main/res/drawable/ic_about_privacy.png differ diff --git a/app/src/main/res/drawable/info.png b/app/src/main/res/drawable/info.png new file mode 100644 index 0000000..70ad045 Binary files /dev/null and b/app/src/main/res/drawable/info.png differ diff --git a/app/src/main/res/drawable/usergroup.png b/app/src/main/res/drawable/usergroup.png new file mode 100644 index 0000000..5e8c0e6 Binary files /dev/null and b/app/src/main/res/drawable/usergroup.png differ diff --git a/app/src/main/res/layout/activity_about_software.xml b/app/src/main/res/layout/activity_about_software.xml index 2a03b9e..a6890c4 100644 --- a/app/src/main/res/layout/activity_about_software.xml +++ b/app/src/main/res/layout/activity_about_software.xml @@ -1,376 +1,198 @@ - - + - - - - - - - - - - + - - - - - - - - - - - + android:text="@string/about" + android:textColor="@color/white" + android:textSize="26sp" + android:fontFamily="sans-serif-medium" + tools:text="关于软件" /> - - + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:clickable="false" + android:focusable="false" + app:cardBackgroundColor="@android:color/transparent" + app:cardCornerRadius="24dp" + app:cardUseCompatPadding="false" + app:strokeColor="@color/about_card_stroke" + app:strokeWidth="1dp"> - - - + + + + + + + android:orientation="vertical" + android:paddingStart="20dp" + android:paddingEnd="20dp" + android:paddingBottom="20dp" + app:layout_constraintBottom_toBottomOf="@id/bannerImage" + app:layout_constraintStart_toStartOf="@id/bannerImage" + app:layout_constraintEnd_toEndOf="@id/bannerImage"> + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="20dp" + android:gravity="center" + android:text="正因为会失去,所以才要去珍惜" + android:textAlignment="center" + android:textColor="@color/about_secondary_text" + android:textSize="14sp" + android:fontFamily="sans-serif" /> - - - - - - - - + + + android:layout_marginTop="16dp" /> - + android:layout_marginTop="16dp" /> - + android:layout_marginTop="16dp" /> - + android:layout_marginTop="16dp" /> - + android:layout_marginTop="16dp" /> - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_about_item.xml b/app/src/main/res/layout/layout_about_item.xml new file mode 100644 index 0000000..50dea14 --- /dev/null +++ b/app/src/main/res/layout/layout_about_item.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f508e8c..4453401 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -24,4 +24,10 @@ #4D000000 + + #101013 + #B3FFFFFF + #18181C + #26FFFFFF + #1FFFFFFF \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b990269..ce4daeb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,30 @@ 个性化 使用指南 关于软件 + 关于软件展示图 + DailyNotes + Community Edition + 代号:Isla + 正因为会失去,所以才要去珍惜 +希望你能好好利用本软件 + 软件版本 + v— + v%1$s + 软件版本卡片 + 贡献者 + 原作者/开发者/美工们 + 贡献者卡片 + 开源仓库 + 在 Github 上查看 + 开源仓库卡片 + EULA与隐私协议 + 阅读协议全文 + EULA与隐私协议卡片 + 隐私设置 + 管理隐私相关选项 + 隐私设置卡片 + 无网络连接 + 敬请期待 请至少写一篇手帐 更新完成