diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/AboutActivity.java b/app/src/main/java/com/huanchengfly/tieba/post/activities/AboutActivity.java index eba861c9..5883f195 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/AboutActivity.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/AboutActivity.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; @@ -27,10 +28,12 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener public static final int STATE_ERROR = 0; public static final int STATE_NO_UPDATE = 1; public static final int STATE_UPDATE = 2; + public static final int STATE_LOADING = 3; private View updateTip; private TextView updateTipHeaderTv; private TextView updateTipTitleTv; private TextView updateTipContentTv; + private ProgressBar updateTipProgress; private Button dismissBtn; private Button downloadBtn; @@ -51,14 +54,11 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener RelativeLayout mainView = (RelativeLayout) findViewById(R.id.main); View headerView = View.inflate(this, R.layout.header_about, null); ((ViewGroup) headerView).setLayoutTransition(new LayoutTransition()); - ((ViewGroup) headerView).getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); - ViewGroup tip = headerView.findViewById(R.id.header_update_tip); - tip.setLayoutTransition(new LayoutTransition()); - tip.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); - updateTip = headerView.findViewById(R.id.header_update_tip_shadow); + updateTip = headerView.findViewById(R.id.header_update_tip_card); updateTipHeaderTv = headerView.findViewById(R.id.header_update_tip_header_title); updateTipTitleTv = headerView.findViewById(R.id.header_update_tip_title); updateTipContentTv = headerView.findViewById(R.id.header_update_tip_content); + updateTipProgress = headerView.findViewById(R.id.header_update_tip_progress); dismissBtn = headerView.findViewById(R.id.header_update_tip_button_dismiss); downloadBtn = headerView.findViewById(R.id.header_update_tip_button_download); navigationHelper = NavigationHelper.newInstance(this); @@ -153,6 +153,8 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener */ private void checkUpdate() { + updateState = STATE_LOADING; + refreshUpdateTip(); LiteApi.getInstance().newCheckUpdate(new CommonAPICallback() { @Override public void onSuccess(NewUpdateBean data) { @@ -180,7 +182,10 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener case STATE_NO_UPDATE: downloadBtn.setText(R.string.button_check_update); updateTip.setVisibility(View.VISIBLE); + downloadBtn.setVisibility(View.VISIBLE); dismissBtn.setVisibility(View.GONE); + updateTipProgress.setVisibility(View.GONE); + updateTipContentTv.setVisibility(View.VISIBLE); updateTipHeaderTv.setText(getString(R.string.update_tip_no_header)); updateTipTitleTv.setText(getString(R.string.update_tip_no_title)); updateTipContentTv.setText(getString(R.string.update_tip_no_content)); @@ -189,6 +194,9 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener if (resultBean != null) { downloadBtn.setText(R.string.button_go_to_download); updateTip.setVisibility(View.VISIBLE); + downloadBtn.setVisibility(View.VISIBLE); + updateTipProgress.setVisibility(View.GONE); + updateTipContentTv.setVisibility(View.VISIBLE); boolean cancelable = resultBean.isCancelable(); updateTipHeaderTv.setText(getString(R.string.update_tip_header, resultBean.getVersionType() == 0 ? getString(R.string.tip_release_version) : getString(R.string.tip_version_beta))); updateTipTitleTv.setText(getString(R.string.update_tip_title, resultBean.getVersionName(), String.valueOf(resultBean.getVersionCode()))); @@ -201,6 +209,16 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener dismissBtn.setVisibility(cancelable ? View.VISIBLE : View.GONE); break; } + case STATE_LOADING: + updateTip.setVisibility(View.VISIBLE); + downloadBtn.setVisibility(View.GONE); + dismissBtn.setVisibility(View.GONE); + updateTipContentTv.setVisibility(View.GONE); + updateTipProgress.setVisibility(View.VISIBLE); + updateTipHeaderTv.setText(getString(R.string.update_tip_no_header)); + updateTipTitleTv.setText(getString(R.string.update_tip_loading)); + updateTipContentTv.setText(null); + break; default: updateTip.setVisibility(View.GONE); break; @@ -211,13 +229,11 @@ public class AboutActivity extends BaseActivity implements View.OnClickListener public void onClick(View v) { switch (v.getId()) { case R.id.header_update_tip_button_download: - if (resultBean == null) { - if (updateState != STATE_NO_UPDATE) { - checkUpdate(); - } - return; + if (updateState != STATE_UPDATE) { + checkUpdate(); + } else { + VersionUtil.showDownloadDialog(this, resultBean); } - VersionUtil.showDownloadDialog(this, resultBean); break; case R.id.header_update_tip_button_dismiss: resultBean = null; diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.java b/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.java deleted file mode 100644 index 8452c09c..00000000 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.huanchengfly.tieba.post.ui.about.adapter; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.view.View; -import android.widget.ImageView; -import android.widget.RelativeLayout; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.bumptech.glide.request.RequestOptions; -import com.huanchengfly.tieba.post.ui.about.AboutPage; -import com.huanchengfly.tieba.post.ui.about.ViewHolder; -import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils; -import com.huanchengfly.tieba.post.R; -import com.huanchengfly.tieba.post.utils.DisplayUtil; - -public class AboutPageAdapter extends BaseAdapter { - public AboutPageAdapter(Context context) { - super(context); - } - - public long getItemId(int position) { - return position; - } - - @Override - protected int getItemLayoutId() { - return R.layout.item_about; - } - - @Override - protected void convert(ViewHolder viewHolder, AboutPage.Item item, int position) { - int textColor = ThemeUtils.getColorByAttr(mContext, R.attr.colorText); - int secondaryTextColor = ThemeUtils.getColorByAttr(mContext, R.attr.colorTextSecondary); - viewHolder.setOnClickListener(R.id.item_about_root, item.getOnClickListener()); - viewHolder.setVisibility(R.id.item_about_icon_holder, item.getIcon() == null ? item.getType() == AboutPage.Item.TYPE_TITLE ? View.GONE : View.INVISIBLE : View.VISIBLE); - viewHolder.setVisibility(R.id.item_about_divider, item.getType() == AboutPage.Item.TYPE_TITLE && position > 0 ? View.VISIBLE : View.GONE); - viewHolder.setVisibility(R.id.item_about_subtitle, item.getSubtitle() == null ? View.GONE : View.VISIBLE); - viewHolder.setText(R.id.item_about_title, item.getTitle()); - viewHolder.setText(R.id.item_about_subtitle, item.getSubtitle()); - viewHolder.setTextColor(R.id.item_about_title, item.getTitleTextColor() != -1 ? item.getTitleTextColor() : textColor); - viewHolder.setTextColor(R.id.item_about_subtitle, item.getSubtitleTextColor() != -1 ? item.getSubtitleTextColor() : secondaryTextColor); - if (item.getType() == AboutPage.Item.TYPE_ITEM && item.getIcon() != null) { - switch (item.getIcon().getType()) { - case AboutPage.Icon.TYPE_DRAWABLE: - ImageView iconView = viewHolder.getView(R.id.item_about_icon); - iconView.setImageResource(item.getIcon().getDrawable()); - iconView.setImageTintList(ColorStateList.valueOf(item.getIcon().getIconTint())); - RelativeLayout.LayoutParams iconLayoutParams = (RelativeLayout.LayoutParams) iconView.getLayoutParams(); - iconLayoutParams.width = iconLayoutParams.height = DisplayUtil.dp2px(mContext, 24); - iconView.setLayoutParams(iconLayoutParams); - break; - case AboutPage.Icon.TYPE_URL: - ImageView avatarView = viewHolder.getView(R.id.item_about_icon); - Glide.with(mContext) - .load(item.getIcon().getIconUrl()) - .apply(new RequestOptions() - .placeholder(R.drawable.bg_placeholder_circle) - .circleCrop()) - .transition(DrawableTransitionOptions.withCrossFade()) - .into(avatarView); - avatarView.setImageTintList(null); - RelativeLayout.LayoutParams avatarLayoutParams = (RelativeLayout.LayoutParams) avatarView.getLayoutParams(); - avatarLayoutParams.width = avatarLayoutParams.height = DisplayUtil.dp2px(mContext, 40); - avatarView.setLayoutParams(avatarLayoutParams); - break; - } - } - } -} diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.kt new file mode 100644 index 00000000..7cebd318 --- /dev/null +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/about/adapter/AboutPageAdapter.kt @@ -0,0 +1,92 @@ +package com.huanchengfly.tieba.post.ui.about.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.RelativeLayout +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.bumptech.glide.request.RequestOptions +import com.huanchengfly.tieba.post.R +import com.huanchengfly.tieba.post.dpToPxFloat +import com.huanchengfly.tieba.post.ui.about.AboutPage +import com.huanchengfly.tieba.post.ui.about.ViewHolder +import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils +import com.huanchengfly.tieba.post.utils.DisplayUtil +import com.huanchengfly.tieba.post.utils.getRadiusDrawable + +class AboutPageAdapter(context: Context) : BaseAdapter(context) { + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun getItemLayoutId(): Int { + return R.layout.item_about + } + + protected override fun convert(viewHolder: ViewHolder, item: AboutPage.Item, position: Int) { + val textColor = ThemeUtils.getColorByAttr(mContext, R.attr.colorText) + val secondaryTextColor = ThemeUtils.getColorByAttr(mContext, R.attr.colorTextSecondary) + viewHolder.setOnClickListener(R.id.item_about_root, item.onClickListener) + viewHolder.setVisibility(R.id.item_about_icon_holder, if (item.icon == null) if (item.type == AboutPage.Item.TYPE_TITLE) View.GONE else View.INVISIBLE else View.VISIBLE) + viewHolder.setVisibility(R.id.item_about_divider, if (item.type == AboutPage.Item.TYPE_TITLE && position > 0) View.VISIBLE else View.GONE) + viewHolder.setVisibility(R.id.item_about_subtitle, if (item.subtitle == null) View.GONE else View.VISIBLE) + viewHolder.setText(R.id.item_about_title, item.title) + viewHolder.setText(R.id.item_about_subtitle, item.subtitle) + viewHolder.setTextColor(R.id.item_about_title, if (item.titleTextColor != -1) item.titleTextColor else textColor) + viewHolder.setTextColor(R.id.item_about_subtitle, if (item.subtitleTextColor != -1) item.subtitleTextColor else secondaryTextColor) + if (item.type == AboutPage.Item.TYPE_ITEM && item.icon != null) { + viewHolder.getView(R.id.item_about_root).background = if (position >= itemList.size - 1) { + getRadiusDrawable( + bottomLeftPx = 10f.dpToPxFloat(), + bottomRightPx = 10f.dpToPxFloat(), + ripple = true + ) + } else { + getRadiusDrawable(ripple = true) + } + when (item.icon.type) { + AboutPage.Icon.TYPE_DRAWABLE -> { + val iconView = viewHolder.getView(R.id.item_about_icon) + iconView.setImageResource(item.icon.drawable) + iconView.imageTintList = ColorStateList.valueOf(item.icon.iconTint) + val iconLayoutParams = iconView.layoutParams as RelativeLayout.LayoutParams + run { + iconLayoutParams.height = DisplayUtil.dp2px(mContext, 24f) + iconLayoutParams.width = iconLayoutParams.height + } + iconView.layoutParams = iconLayoutParams + } + AboutPage.Icon.TYPE_URL -> { + val avatarView = viewHolder.getView(R.id.item_about_icon) + Glide.with(mContext) + .load(item.icon.iconUrl) + .apply(RequestOptions() + .placeholder(R.drawable.bg_placeholder_circle) + .circleCrop()) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(avatarView) + avatarView.imageTintList = null + val avatarLayoutParams = avatarView.layoutParams as RelativeLayout.LayoutParams + run { + avatarLayoutParams.height = DisplayUtil.dp2px(mContext, 40f) + avatarLayoutParams.width = avatarLayoutParams.height + } + avatarView.layoutParams = avatarLayoutParams + } + } + } else if (item.type == AboutPage.Item.TYPE_TITLE) { + viewHolder.getView(R.id.item_about_root).apply { + background = getRadiusDrawable( + topLeftPx = 10f.dpToPxFloat(), + topRightPx = 10f.dpToPxFloat() + ) + if (layoutParams is ViewGroup.MarginLayoutParams) { + (layoutParams as ViewGroup.MarginLayoutParams).topMargin = context.resources.getDimensionPixelSize(R.dimen.card_margin) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/utils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/utils.kt index db54d435..78122882 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/utils.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/utils.kt @@ -6,6 +6,7 @@ import android.graphics.Color import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable import android.graphics.drawable.RippleDrawable +import com.huanchengfly.tieba.post.BaseApplication import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.ui.theme.utils.ColorStateListUtils @@ -59,7 +60,7 @@ fun getRadiusDrawable( bottomRightPx: Float = 0f, ripple: Boolean = false ): Drawable { - return GradientDrawable().apply { + val drawable = GradientDrawable().apply { color = ColorStateList.valueOf(Color.WHITE) cornerRadii = floatArrayOf( topLeftPx, topLeftPx, @@ -68,6 +69,9 @@ fun getRadiusDrawable( bottomLeftPx, bottomLeftPx ) } + return if (ripple) + wrapRipple(Util.getColorByAttr(BaseApplication.instance, R.attr.colorControlHighlight, R.color.transparent), drawable) + else drawable } fun wrapRipple(rippleColor: Int, drawable: Drawable): Drawable { diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index c05192a9..e1a103ec 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -3,13 +3,19 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" + app:backgroundTint="@color/default_color_window_background" android:id="@+id/background" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activities.AboutActivity"> + - - + + + + + + + + + + - - - - + android:layout_width="24dp" + android:layout_height="24dp" /> - - - + - + + - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_about.xml b/app/src/main/res/layout/item_about.xml index dc41ab80..cb24fde2 100644 --- a/app/src/main/res/layout/item_about.xml +++ b/app/src/main/res/layout/item_about.xml @@ -3,23 +3,24 @@ android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"> + - + - + \ 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 c594195f..ef5c0b9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -192,7 +192,7 @@ %1$s吧 选择下载方式 您上次阅读到第 %1$s 楼 - 贴吧 Lite 当前已是最新版本 + 当前已是最新版本 更新 检查更新 一键签到服务正在运行中 @@ -201,7 +201,7 @@ 自动签到已开启 当前设置为 %1$s 提示:请您允许贴吧 Lite 的自启动,否则可能无法正常唤醒签到。 - 点击下方按钮重新检查更新 + 点击查看完整更新日志 %1$s吧 编辑资料 https://tieba.baidu.com/mo/q/myinfo? @@ -398,4 +398,5 @@ 签到完成 签到失败 请先登录 + 正在检查更新