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