diff --git a/play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java b/play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java
index 672b9c9e..3babbb26 100644
--- a/play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java
+++ b/play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java
@@ -19,6 +19,8 @@ package org.microg.gms.auth;
import android.accounts.Account;
import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountManager;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
@@ -88,6 +90,10 @@ public class AskPermissionActivity extends AccountAuthenticatorActivity {
} else {
Log.d(TAG, "No Consent details attached");
}
+
+ NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.cancel(packageName.hashCode());
+
if (getIntent().hasExtra(EXTRA_FROM_ACCOUNT_MANAGER)) fromAccountManager = true;
int callerUid = getIntent().getIntExtra(KEY_CALLER_UID, 0);
PackageUtils.checkPackageUid(this, packageName, callerUid);
@@ -181,6 +187,8 @@ public class AskPermissionActivity extends AccountAuthenticatorActivity {
@Override
public void finish() {
+ NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.cancel(packageName.hashCode());
super.finish();
}
diff --git a/play-services-core/src/main/java/org/microg/gms/auth/AuthManagerServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/auth/AuthManagerServiceImpl.java
index 93fb0468..a2eee641 100644
--- a/play-services-core/src/main/java/org/microg/gms/auth/AuthManagerServiceImpl.java
+++ b/play-services-core/src/main/java/org/microg/gms/auth/AuthManagerServiceImpl.java
@@ -17,14 +17,19 @@
package org.microg.gms.auth;
import android.accounts.Account;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.RemoteException;
+import android.support.v7.app.NotificationCompat;
import android.util.Base64;
import android.util.Log;
import com.google.android.auth.IAuthManagerService;
+import com.google.android.gms.R;
import com.google.android.gms.auth.AccountChangeEventsRequest;
import com.google.android.gms.auth.AccountChangeEventsResponse;
@@ -101,6 +106,15 @@ public class AuthManagerServiceImpl extends IAuthManagerService.Stub {
} catch (Exception e) {
Log.w(TAG, "Can't decode consent data: ", e);
}
+ if (notify) {
+ NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.notify(packageName.hashCode(), new NotificationCompat.Builder(context)
+ .setContentIntent(PendingIntent.getActivity(context, 0, i, 0))
+ .setContentTitle(context.getString(R.string.auth_notification_title))
+ .setContentText(context.getString(R.string.auth_notification_content, getPackageLabel(packageName, context.getPackageManager())))
+ .setSmallIcon(android.R.drawable.stat_notify_error)
+ .build());
+ }
result.putParcelable(KEY_USER_RECOVERY_INTENT, i);
return result;
}
@@ -112,6 +126,14 @@ public class AuthManagerServiceImpl extends IAuthManagerService.Stub {
}
}
+ private static CharSequence getPackageLabel(String packageName, PackageManager pm) {
+ try {
+ return pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0));
+ } catch (PackageManager.NameNotFoundException e) {
+ return packageName;
+ }
+ }
+
@Override
public AccountChangeEventsResponse getChangeEvents(AccountChangeEventsRequest request) {
return new AccountChangeEventsResponse();
diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml
index 37ba75a3..e43d3d37 100644
--- a/play-services-core/src/main/res/values/strings.xml
+++ b/play-services-core/src/main/res/values/strings.xml
@@ -34,6 +34,8 @@ Try again later."
This can take a couple of minutes."
Allow
Deny
+ Authentication required
+ %s requires your authentication to access your Google-Account.
listen to internal status broadcasts
listen to C2DM messages