add not-again checkbox to ask-phone-permission dialog

Otherwise if you're saying "no" you keep getting asked each time you
invite.
This commit is contained in:
Eric House 2020-01-10 12:43:25 -08:00
parent e4bc2d99ed
commit 6417236505
6 changed files with 63 additions and 19 deletions

View file

@ -755,8 +755,9 @@ public class BoardDelegate extends DelegateBase
// straight to asking for the permission. // straight to asking for the permission.
private void callInviteChoices( final SentInvitesInfo info ) private void callInviteChoices( final SentInvitesInfo info )
{ {
Perms23.tryGetPerms( this, Perm.READ_PHONE_STATE, Perms23.tryGetPermsNA( this, Perm.READ_PHONE_STATE,
R.string.phone_state_rationale, R.string.phone_state_rationale,
R.string.key_na_perms_phonestate,
Action.ASKED_PHONE_STATE, info ); Action.ASKED_PHONE_STATE, info );
} }
@ -1260,7 +1261,8 @@ public class BoardDelegate extends DelegateBase
break; break;
default: default:
handled = false; handled = super.onDismissed( action, params );
break;
} }
return handled; return handled;
} }

View file

@ -792,9 +792,20 @@ public class DelegateBase implements DlgClickNotify,
public boolean onDismissed( Action action, Object[] params ) public boolean onDismissed( Action action, Object[] params )
{ {
Log.d( TAG, "%s.dlgDismissed(%s)", getClass().getSimpleName(), boolean handled = false;
Log.d( TAG, "%s.onDismissed(%s)", getClass().getSimpleName(),
action.toString() ); action.toString() );
return false;
switch( action ) {
case PERMS_QUERY:
handled = true;
Perms23.onGotPermsAction( this, false, params );
break;
default:
Log.e( TAG, "onDismissed(): not handling action %s", action );
}
return handled;
} }
public void inviteChoiceMade( Action action, DlgClickNotify.InviteMeans means, Object... params ) public void inviteChoiceMade( Action action, DlgClickNotify.InviteMeans means, Object... params )

View file

@ -783,8 +783,9 @@ public class GameConfigDelegate extends DelegateBase
private void showConnAfterCheck() private void showConnAfterCheck()
{ {
if ( null == SMSPhoneInfo.get( m_activity ) ) { if ( null == SMSPhoneInfo.get( m_activity ) ) {
Perms23.tryGetPerms( this, Perms23.Perm.READ_PHONE_STATE, Perms23.tryGetPermsNA( this, Perms23.Perm.READ_PHONE_STATE,
R.string.phone_state_rationale, R.string.phone_state_rationale,
R.string.key_na_perms_phonestate,
Action.ASKED_PHONE_STATE ); Action.ASKED_PHONE_STATE );
} else { } else {
showDialogFragment( DlgID.CHANGE_CONN, m_conTypes ); showDialogFragment( DlgID.CHANGE_CONN, m_conTypes );

View file

@ -203,23 +203,26 @@ public class Perms23 {
private static class QueryInfo { private static class QueryInfo {
private Action m_action; private Action m_action;
private Perm[] m_perms; private Perm[] m_perms;
private int mNAKey;
private DelegateBase m_delegate; private DelegateBase m_delegate;
private String m_rationaleMsg; private String m_rationaleMsg;
private Object[] m_params; private Object[] m_params;
private QueryInfo( DelegateBase delegate, Action action, private QueryInfo( DelegateBase delegate, Action action,
Perm[] perms, String msg, Object[] params ) { Perm[] perms, String msg, int naKey,
Object[] params ) {
m_delegate = delegate; m_delegate = delegate;
m_action = action; m_action = action;
m_perms = perms; m_perms = perms;
m_rationaleMsg = msg; m_rationaleMsg = msg;
mNAKey = naKey;
m_params = params; m_params = params;
} }
private QueryInfo( DelegateBase delegate, Object[] params ) private QueryInfo( DelegateBase delegate, Object[] params )
{ {
this( delegate, (Action)params[0], (Perm[])params[1], (String)params[2], this( delegate, (Action)params[0], (Perm[])params[1], (String)params[2],
(Object[])params[3] ); 0, (Object[])params[3] );
} }
private Object[] getParams() private Object[] getParams()
@ -260,6 +263,7 @@ public class Perms23 {
.setPosButton( R.string.button_ask_again ) .setPosButton( R.string.button_ask_again )
.setNegButton( R.string.button_skip ) .setNegButton( R.string.button_skip )
.setParams( QueryInfo.this.getParams() ) .setParams( QueryInfo.this.getParams() )
.setNAKey( mNAKey )
.show(); .show();
} }
} ); } );
@ -319,30 +323,36 @@ public class Perms23 {
* Request permissions, giving rationale once, then call with action and * Request permissions, giving rationale once, then call with action and
* either positive or negative, the former if permission granted. * either positive or negative, the former if permission granted.
*/ */
private static void tryGetPermsImpl( DelegateBase delegate, Perm[] perms,
String rationaleMsg, int naKey,
final Action action, Object... params )
{
// Log.d( TAG, "tryGetPerms(%s)", perm.toString() );
new QueryInfo( delegate, action, perms, rationaleMsg, naKey, params )
.doIt( true );
}
public static void tryGetPerms( DelegateBase delegate, Perm[] perms, int rationaleId, public static void tryGetPerms( DelegateBase delegate, Perm[] perms, int rationaleId,
final Action action, Object... params ) final Action action, Object... params )
{ {
// Log.d( TAG, "tryGetPerms(%s)", perm.toString() ); // Log.d( TAG, "tryGetPerms(%s)", perm.toString() );
Context context = XWApp.getContext(); String msg = LocUtils.getStringOrNull( rationaleId );
String msg = rationaleId == 0 tryGetPermsImpl( delegate, perms, msg, 0, action, params );
? null : LocUtils.getString( context, rationaleId );
tryGetPerms( delegate, perms, msg, action, params );
} }
public static void tryGetPerms( DelegateBase delegate, Perm[] perms, public static void tryGetPerms( DelegateBase delegate, Perm[] perms,
String rationaleMsg, final Action action, String rationaleMsg, final Action action,
Object... params ) Object... params )
{ {
// Log.d( TAG, "tryGetPerms(%s)", perm.toString() ); tryGetPermsImpl( delegate, perms, rationaleMsg, 0, action, params );
new QueryInfo( delegate, action, perms, rationaleMsg, params )
.doIt( true );
} }
public static void tryGetPerms( DelegateBase delegate, Perm perm, public static void tryGetPerms( DelegateBase delegate, Perm perm,
String rationaleMsg, final Action action, String rationaleMsg, final Action action,
Object... params ) Object... params )
{ {
tryGetPerms( delegate, new Perm[]{ perm }, rationaleMsg, action, params ); tryGetPermsImpl( delegate, new Perm[]{ perm }, rationaleMsg, 0,
action, params );
} }
public static void tryGetPerms( DelegateBase delegate, Perm perm, int rationaleId, public static void tryGetPerms( DelegateBase delegate, Perm perm, int rationaleId,
@ -351,6 +361,15 @@ public class Perms23 {
tryGetPerms( delegate, new Perm[]{perm}, rationaleId, action, params ); tryGetPerms( delegate, new Perm[]{perm}, rationaleId, action, params );
} }
public static void tryGetPermsNA( DelegateBase delegate, Perm perm,
int rationaleId, int naKey,
Action action, Object... params )
{
tryGetPermsImpl( delegate, new Perm[] {perm},
LocUtils.getStringOrNull( rationaleId ), naKey,
action, params );
}
public static void onGotPermsAction( DelegateBase delegate, boolean positive, public static void onGotPermsAction( DelegateBase delegate, boolean positive,
Object[] params ) Object[] params )
{ {

View file

@ -265,6 +265,16 @@ public class LocUtils {
return getString( context, true, id ); return getString( context, true, id );
} }
public static String getStringOrNull( int id )
{
String result = null;
if ( 0 != id ) {
Context context = XWApp.getContext();
result = getString( context, true, id );
}
return result;
}
public static String getString( Context context, boolean canUseDB, int id ) public static String getString( Context context, boolean canUseDB, int id )
{ {
String result = null; String result = null;

View file

@ -145,6 +145,7 @@
<string name="key_na_bt_badproto">key_na_bt_badproto</string> <string name="key_na_bt_badproto">key_na_bt_badproto</string>
<string name="key_na_sms_banned">key_na_sms_banned</string> <string name="key_na_sms_banned">key_na_sms_banned</string>
<string name="key_na_longtap_lookup">key_na_longtap_lookup</string> <string name="key_na_longtap_lookup">key_na_longtap_lookup</string>
<string name="key_na_perms_phonestate">key_na_perms_phonestate</string>
<!-- Nor is my email address --> <!-- Nor is my email address -->
<string name="email_author_email">xwords@eehouse.org</string> <string name="email_author_email">xwords@eehouse.org</string>