implement info text for notifications permission in GroupBaseActivity
This commit is contained in:
@@ -21,6 +21,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Content.PM;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
@@ -57,8 +58,9 @@ namespace keepass2android
|
||||
{ Resource.Id.child_db_infotext, 13 },
|
||||
{ Resource.Id.fingerprint_infotext, 12 },
|
||||
{ Resource.Id.autofill_infotext, 11 },
|
||||
{ Resource.Id.notification_info_android8_infotext, 10 },
|
||||
{ Resource.Id.infotext, 9 },
|
||||
{ Resource.Id.notification_permission_infotext, 10 },
|
||||
{ Resource.Id.notification_info_android8_infotext, 9 },
|
||||
{ Resource.Id.infotext, 8 },
|
||||
{ Resource.Id.select_other_entry, 20},
|
||||
{ Resource.Id.add_url_entry, 20},
|
||||
};
|
||||
@@ -273,6 +275,7 @@ namespace keepass2android
|
||||
UpdateFingerprintInfo();
|
||||
UpdateAutofillInfo();
|
||||
UpdateAndroid8NotificationInfo();
|
||||
UpdatePostNotificationsPermissionInfo();
|
||||
UpdateInfotexts();
|
||||
|
||||
RefreshIfDirty();
|
||||
@@ -280,6 +283,7 @@ namespace keepass2android
|
||||
SetSearchItemVisibility();
|
||||
}
|
||||
|
||||
|
||||
private void UpdateInfotexts()
|
||||
{
|
||||
|
||||
@@ -385,6 +389,31 @@ namespace keepass2android
|
||||
hasCalledOtherActivity = false;
|
||||
}
|
||||
|
||||
|
||||
private void UpdatePostNotificationsPermissionInfo(bool hideForever=false)
|
||||
{
|
||||
const string prefsKey = "DidShowNotificationPermissionInfo";
|
||||
|
||||
bool canShowNotificationInfo = ((int)Build.VERSION.SdkInt >= 33)
|
||||
&& (!_prefs.GetBoolean(prefsKey, false)
|
||||
&& (CheckSelfPermission(Android.Manifest.Permission.PostNotifications) !=
|
||||
Permission.Granted)
|
||||
&& (ShouldShowRequestPermissionRationale(Android.Manifest.Permission.PostNotifications) //this menthod returns false if we haven't asked yet or if the user has denied permission too often
|
||||
|| !PreferenceManager.GetDefaultSharedPreferences(this).GetBoolean("RequestedPostNotificationsPermission", false))//use a preference to tell the difference between "haven't asked yet" and "have asked too often"
|
||||
);
|
||||
if ((canShowNotificationInfo) && hideForever)
|
||||
{
|
||||
_prefs.Edit().PutBoolean(prefsKey, true).Commit();
|
||||
canShowNotificationInfo = false;
|
||||
}
|
||||
if (canShowNotificationInfo)
|
||||
{
|
||||
RegisterInfoTextDisplay("NotificationPermissionInfo"); //this ensures that we don't show the general info texts too soon
|
||||
}
|
||||
UpdateBottomBarElementVisibility(Resource.Id.notification_permission_infotext, canShowNotificationInfo);
|
||||
|
||||
}
|
||||
|
||||
private void UpdateAndroid8NotificationInfo(bool hideForever = false)
|
||||
{
|
||||
const string prefsKey = "DidShowAndroid8NotificationInfo";
|
||||
@@ -606,6 +635,25 @@ namespace keepass2android
|
||||
|
||||
}
|
||||
|
||||
if (FindViewById(Resource.Id.post_notification_button_allow) != null)
|
||||
{
|
||||
FindViewById(Resource.Id.post_notification_button_allow).Click += (sender, args) =>
|
||||
{
|
||||
//remember that we did ask for permission at least once:
|
||||
var edit = PreferenceManager.GetDefaultSharedPreferences(this).Edit();
|
||||
edit.PutBoolean("RequestedPostNotificationsPermission", true);
|
||||
edit.Commit();
|
||||
|
||||
Android.Support.V4.App.ActivityCompat.RequestPermissions(this, new[] { Android.Manifest.Permission.PostNotifications }, 0);
|
||||
UpdatePostNotificationsPermissionInfo(true);
|
||||
};
|
||||
FindViewById(Resource.Id.post_notification_button_dont_show_again).Click += (sender, args) =>
|
||||
{
|
||||
UpdatePostNotificationsPermissionInfo(true);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -245,6 +245,50 @@
|
||||
style="@style/BottomBarButton" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/notification_permission_infotext"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView android:id="@+id/infotext" android:text="@string/PostNotificationsPermissionInfo_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
android:layout_margin="6dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/notification_permissions_buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<Button
|
||||
android:id="@+id/post_notification_button_allow"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:paddingTop="4dp"
|
||||
android:text="@string/post_notifications_dialog_allow"
|
||||
style="@style/BottomBarButton" />
|
||||
<Button
|
||||
android:id="@+id/post_notification_button_dont_show_again"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingTop="4dp"
|
||||
android:text="@string/dont_show_again"
|
||||
style="@style/BottomBarButton" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/infotext"
|
||||
android:layout_width="match_parent"
|
||||
|
@@ -484,6 +484,10 @@
|
||||
|
||||
<string name="IconVisibilityInfo_Android8_text">Android 8 has introduced new behavior for notifications. If you want to hide the icon for Keepass2Android\'s notifications, please configure this through the system settings. Set the importance of the notification category to Minimum.</string>
|
||||
<string name="IconVisibilityInfo_Android8_btnSettings">Open settings</string>
|
||||
|
||||
<string name="PostNotificationsPermissionInfo_text">Keepass2Android can display a system notification while your database is not locked. For this to work, please grant permission.</string>
|
||||
|
||||
|
||||
<string name="DontCare">I don\'t care</string>
|
||||
|
||||
<string name="DocumentAccessRevoked">The file is no longer accessible to Keepass2Android. Either it was removed or the access permissions have been revoked. Please use re-open the file, e.g. using Change database.</string>
|
||||
|
Reference in New Issue
Block a user