package org.commcare.fragments; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import org.commcare.dalvik.R; import org.commcare.interfaces.RuntimePermissionRequester; import org.commcare.utils.Permissions; import org.javarosa.core.services.locale.Localization; /** * Block user until they accept necessary permissions. Shows permissions * requirement rationale and allows user to ask for permissions again. * * NOTE: Pressing the 'Never show again' on the permission request dialog * results in the Android platform denying future permission requests w/o UI * queues, hence show permission request attempt count to user. * * @author Phillip Mates (pmates@dimagi.com). */ public class InstallPermissionsFragment extends Fragment { private int attemptCount = 0; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.install_permission_requester, container, false); TextView neededPermDetails = (TextView)view.findViewById(R.id.perms_rationale_message); neededPermDetails.setText(Localization.get("install.perms.rationale.message")); Button requestPermsButton = (Button)view.findViewById(R.id.get_perms_button); requestPermsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { RuntimePermissionRequester permissionRequester = (RuntimePermissionRequester)getActivity(); Permissions.acquireAllAppPermissions(getActivity(), permissionRequester, Permissions.ALL_PERMISSIONS_REQUEST); } }); requestPermsButton.setText(Localization.get("permission.acquire.required")); return view; } public void updateDeniedState() { attemptCount++; View currentView = getView(); if (currentView != null) { TextView deniedDetails = (TextView)currentView.findViewById(R.id.needed_perms_message); deniedDetails.setText(Localization.get("install.perms.denied.message", new String[]{attemptCount + ""})); } } }