@@ -140,6 +140,19 @@
</intent-filter>
</receiver>
+ <activity
+ android:enabled="false"
+ android:name=".ui.UnifiedPushDistributor"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data
+ android:host="link"
+ android:scheme="unifiedpush" />
+ </intent-filter>
+ </activity>
+
<receiver
android:name=".receiver.UnifiedPushDistributor"
android:enabled="false"
@@ -34,6 +34,7 @@ import im.conversations.android.xmpp.model.stanza.Iq;
import im.conversations.android.xmpp.model.up.Push;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -263,19 +264,28 @@ public class UnifiedPushBroker {
private void setUnifiedPushDistributorEnabled(final boolean enabled) {
final PackageManager packageManager = service.getPackageManager();
- final ComponentName componentName =
- new ComponentName(service, UnifiedPushDistributor.class);
+ final var componentNames =
+ Arrays.asList(
+ new ComponentName(
+ service.getApplicationContext(),
+ eu.siacs.conversations.ui.UnifiedPushDistributor.class),
+ new ComponentName(
+ service.getApplicationContext(), UnifiedPushDistributor.class));
if (enabled) {
- packageManager.setComponentEnabledSetting(
- componentName,
- PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
- PackageManager.DONT_KILL_APP);
+ for (final var componentName : componentNames) {
+ packageManager.setComponentEnabledSetting(
+ componentName,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP);
+ }
Log.d(Config.LOGTAG, "UnifiedPushDistributor has been enabled");
} else {
- packageManager.setComponentEnabledSetting(
- componentName,
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
- PackageManager.DONT_KILL_APP);
+ for (final var componentName : componentNames) {
+ packageManager.setComponentEnabledSetting(
+ componentName,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+ }
Log.d(Config.LOGTAG, "UnifiedPushDistributor has been disabled");
}
}
@@ -0,0 +1,35 @@
+package eu.siacs.conversations.ui;
+
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import androidx.appcompat.app.AppCompatActivity;
+import com.google.common.base.Strings;
+import eu.siacs.conversations.Config;
+
+public class UnifiedPushDistributor extends AppCompatActivity {
+
+ private static final String DUMMY_APP = "org.unifiedpush.dummy_app";
+ private static final String EXTRA_PENDING_INTENT = "pi";
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final var intent = getIntent();
+ final var callingPackage = getCallingPackage();
+ final var result = new Intent();
+ if (intent == null || Strings.isNullOrEmpty(callingPackage)) {
+ setResult(RESULT_CANCELED, result);
+ finish();
+ ;
+ }
+ Log.d(Config.LOGTAG, "a package (" + callingPackage + ") called our link activity");
+ final var pendingIntent =
+ PendingIntent.getBroadcast(
+ this, 0, new Intent(DUMMY_APP), PendingIntent.FLAG_IMMUTABLE);
+ result.putExtra(EXTRA_PENDING_INTENT, pendingIntent);
+ setResult(RESULT_OK, result);
+ finish();
+ }
+}