Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/welcome/WelcomeFragmentPermissions....

128 lines
5.1 KiB
Java

/* Copyright (C) 2024 Arjan Schrijver
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.activities.welcome;
import android.content.Context;
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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.util.PermissionsUtils;
public class WelcomeFragmentPermissions extends Fragment {
private static final Logger LOG = LoggerFactory.getLogger(WelcomeFragmentPermissions.class);
private RecyclerView permissionsListView;
private PermissionAdapter permissionAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_welcome_permissions, container, false);
Button requestAllButton = view.findViewById(R.id.button_request_all);
requestAllButton.setOnClickListener(v -> PermissionsUtils.requestAllPermissions(requireActivity()));
// Initialize RecyclerView and data
permissionsListView = view.findViewById(R.id.permissions_list);
// Set up RecyclerView
permissionAdapter = new PermissionAdapter(PermissionsUtils.getRequiredPermissionsList(requireContext()), requireContext());
permissionsListView.setLayoutManager(new LinearLayoutManager(requireContext()));
permissionsListView.setAdapter(permissionAdapter);
return view;
}
@Override
public void onResume() {
super.onResume();
permissionAdapter.notifyDataSetChanged();
}
private class PermissionHolder extends RecyclerView.ViewHolder {
TextView titleTextView;
TextView summaryTextView;
ImageView checkmarkImageView;
Button requestButton;
public PermissionHolder(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.permission_title);
summaryTextView = itemView.findViewById(R.id.permission_summary);
checkmarkImageView = itemView.findViewById(R.id.permission_check);
requestButton = itemView.findViewById(R.id.permission_request);
}
}
private class PermissionAdapter extends RecyclerView.Adapter<PermissionHolder> {
private List<PermissionsUtils.PermissionDetails> permissionList;
private Context context;
public PermissionAdapter(List<PermissionsUtils.PermissionDetails> permissionList, Context context) {
this.permissionList = permissionList;
this.context = context;
}
@NonNull
@Override
public PermissionHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_welcome_permission_row, parent, false);
return new PermissionHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull PermissionHolder holder, int position) {
PermissionsUtils.PermissionDetails permissionData = permissionList.get(position);
holder.titleTextView.setText(permissionData.getTitle());
holder.summaryTextView.setText(permissionData.getSummary());
if (PermissionsUtils.checkPermission(requireContext(), permissionData.getPermission())) {
holder.requestButton.setVisibility(View.INVISIBLE);
holder.requestButton.setEnabled(false);
holder.checkmarkImageView.setVisibility(View.VISIBLE);
} else {
holder.requestButton.setOnClickListener(view -> {
PermissionsUtils.requestPermission(requireActivity(), permissionData.getPermission());
});
}
}
@Override
public int getItemCount() {
return permissionList.size();
}
}
}