Wallisyn/app/src/main/java/com/example/wallisyn/fragment/AppSettingsFragment.java
2025-12-05 17:21:33 +08:00

148 lines
5.3 KiB
Java

package com.example.wallisyn.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import com.example.wallisyn.R;
public class AppSettingsFragment extends Fragment {
private int selectedRating = 0;
private AlertDialog ratingDialog;
// 静态实例化方法
public static AppSettingsFragment newInstance() {
return new AppSettingsFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_app_settings, container, false);
initViews(view);
return view;
}
private void initViews(View view) {
if (getActivity() == null) return;
// 仅保留Rate us功能
View rateUsLayout = view.findViewById(R.id.rate_us_layout);
if (rateUsLayout != null) {
rateUsLayout.setOnClickListener(v -> showCustomRatingDialog());
}
}
/**
* 显示自定义评分弹窗
*/
private void showCustomRatingDialog() {
if (getContext() == null || ratingDialog != null && ratingDialog.isShowing()) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_rating, null);
builder.setView(dialogView);
ratingDialog = builder.create();
if (ratingDialog.getWindow() != null) {
ratingDialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
}
ratingDialog.setCancelable(true);
// 初始化星星控件
ImageView star1 = dialogView.findViewById(R.id.star1);
ImageView star2 = dialogView.findViewById(R.id.star2);
ImageView star3 = dialogView.findViewById(R.id.star3);
ImageView star4 = dialogView.findViewById(R.id.star4);
ImageView star5 = dialogView.findViewById(R.id.star5);
if (star1 == null || star2 == null || star3 == null || star4 == null || star5 == null) {
ratingDialog.dismiss();
return;
}
// 星星点击监听器
View.OnClickListener starClickListener = v -> {
if (v.getTag() == null) return;
try {
int rating = Integer.parseInt(v.getTag().toString());
updateStars(rating, star1, star2, star3, star4, star5);
selectedRating = rating;
TextView descriptionText = dialogView.findViewById(R.id.descriptionText);
if (descriptionText != null) {
descriptionText.setTextColor(getResources().getColor(android.R.color.black));
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
};
star1.setOnClickListener(starClickListener);
star2.setOnClickListener(starClickListener);
star3.setOnClickListener(starClickListener);
star4.setOnClickListener(starClickListener);
star5.setOnClickListener(starClickListener);
// 按钮事件
Button cancelButton = dialogView.findViewById(R.id.cancelButton);
Button confirmButton = dialogView.findViewById(R.id.confirmButton);
if (cancelButton != null) {
cancelButton.setOnClickListener(v -> ratingDialog.dismiss());
}
if (confirmButton != null) {
confirmButton.setOnClickListener(v -> onConfirmRating(dialogView));
}
ratingDialog.show();
}
/**
* 处理评分确认逻辑(删除应用商店跳转,仅提示评分成功)
*/
private void onConfirmRating(View dialogView) {
if (selectedRating == 0) {
TextView descriptionText = dialogView.findViewById(R.id.descriptionText);
if (descriptionText != null) {
descriptionText.setText("Please select a rating first!");
descriptionText.setTextColor(getResources().getColor(android.R.color.holo_red_dark));
}
return;
}
// 提示用户评分成功,替换原应用商店跳转逻辑
Toast.makeText(getContext(), "Thanks for your " + selectedRating + "-star rating!", Toast.LENGTH_SHORT).show();
ratingDialog.dismiss();
}
/**
* 更新星星显示状态
*/
private void updateStars(int rating, ImageView... stars) {
for (ImageView star : stars) {
star.setImageResource(R.drawable.ic_star_empty);
}
for (int i = 0; i < rating && i < stars.length; i++) {
stars[i].setImageResource(R.drawable.ic_star_filled);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (ratingDialog != null && ratingDialog.isShowing()) {
ratingDialog.dismiss();
}
}
}