Create notification for premium capability purchase

Test: manual test to cancel/timeout/accept/delay/manage
Test: atest TelephonyManagerTest#testPremiumCapabilities
Bug: 245882092
Change-Id: I34b4b549d78a68be15b6d14c8f7f494fdc091385
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 5699ca8..23390cf 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -472,6 +472,19 @@
         }
     }
 
+    private static final class PurchasePremiumCapabilityArgument {
+        public @TelephonyManager.PremiumCapability int capability;
+        public @NonNull String appName;
+        public @NonNull IIntegerConsumer callback;
+
+        PurchasePremiumCapabilityArgument(@TelephonyManager.PremiumCapability int capability,
+                @NonNull String appName, @NonNull IIntegerConsumer callback) {
+            this.capability = capability;
+            this.appName = appName;
+            this.callback = callback;
+        }
+    }
+
     /**
      * A request object for use with {@link MainThreadHandler}. Requesters should wait() on the
      * request after sending. The main thread will notify the request when it is complete.
@@ -2140,35 +2153,38 @@
                     break;
                 }
 
-                case CMD_PURCHASE_PREMIUM_CAPABILITY:
+                case CMD_PURCHASE_PREMIUM_CAPABILITY: {
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE, request);
+                    PurchasePremiumCapabilityArgument arg =
+                            (PurchasePremiumCapabilityArgument) request.argument;
                     SliceStore.getInstance(request.phone).purchasePremiumCapability(
-                            ((Pair<Integer, IIntegerConsumer>) request.argument).first,
-                            onCompleted);
+                            arg.capability, arg.appName, onCompleted);
                     break;
+                }
 
-                case EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE:
+                case EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE: {
                     ar = (AsyncResult) msg.obj;
                     request = (MainThreadRequest) ar.userObj;
-                    Pair<Integer, IIntegerConsumer> pair =
-                            (Pair<Integer, IIntegerConsumer>) request.argument;
+                    PurchasePremiumCapabilityArgument arg =
+                            (PurchasePremiumCapabilityArgument) request.argument;
                     try {
                         int result = (int) ar.result;
-                        pair.second.accept(result);
+                        arg.callback.accept(result);
                         log("purchasePremiumCapability: capability="
-                                + TelephonyManager.convertPremiumCapabilityToString(pair.first)
+                                + TelephonyManager.convertPremiumCapabilityToString(arg.capability)
                                 + ", result= "
                                 + TelephonyManager.convertPurchaseResultToString(result));
                     } catch (RemoteException e) {
                         String logStr = "Purchase premium capability "
-                                + TelephonyManager.convertPremiumCapabilityToString(pair.first)
+                                + TelephonyManager.convertPremiumCapabilityToString(arg.capability)
                                 + " failed: " + e;
                         if (DBG) log(logStr);
                         AnomalyReporter.reportAnomaly(
                                 UUID.fromString(PURCHASE_PREMIUM_CAPABILITY_ERROR_UUID), logStr);
                     }
                     break;
+                }
 
                 case CMD_PREPARE_UNATTENDED_REBOOT:
                     request = (MainThreadRequest) msg.obj;
@@ -11274,8 +11290,15 @@
         }
 
         Phone phone = getPhone(subId);
-        Pair<Integer, IIntegerConsumer> argument = new Pair<>(capability, callback);
-        sendRequestAsync(CMD_PURCHASE_PREMIUM_CAPABILITY, argument, phone, null);
+        String appName;
+        try {
+            appName = mApp.getPackageManager().getApplicationLabel(mApp.getPackageManager()
+                    .getApplicationInfo(getCurrentPackageName(), 0)).toString();
+        } catch (PackageManager.NameNotFoundException e) {
+            appName = "An application";
+        }
+        sendRequestAsync(CMD_PURCHASE_PREMIUM_CAPABILITY,
+                new PurchasePremiumCapabilityArgument(capability, appName, callback), phone, null);
     }
 
     /**