Refactor notifications to launch a notification handler

With this change we no can launch external urls. For all I know this
doesn't work without this trick (an intent in the middle).

I also applied a transparent theme to the activity to avoid seeing the
launched activity briefly before opening external urls.

This is based on my experience working on "Share To Clipboard".
pull/2/head
Tom Hacohen 7 years ago
parent d918622ba2
commit 8e7d363128

@ -146,6 +146,10 @@
android:theme="@style/AppTheme.NoActionBar"
android:parentActivityName=".ui.AccountsActivity"/>
<activity
android:name=".NotificationHelper$NotificationHandlerActivity"
android:theme="@style/Theme.Transparent" />
<activity
android:name=".ui.AppSettingsActivity"
android:label="@string/app_settings"

@ -31,6 +31,7 @@ public class Constants {
public static final Uri registrationUrl = webUri.buildUpon().appendEncodedPath("accounts/signup/").build();
public static final Uri reportIssueUri = Uri.parse("https://github.com/etesync/android/issues");
public static final Uri feedbackUri = reportIssueUri;
public static final Uri dashboard = webUri.buildUpon().appendEncodedPath("dashboard/").build();
public static final Uri faqUri = webUri.buildUpon().appendEncodedPath("faq/").build();
public static final Uri helpUri = webUri.buildUpon().appendEncodedPath("usage-guide/").build();

@ -1,18 +1,21 @@
package com.etesync.syncadapter;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v7.app.NotificationCompat;
import java.util.logging.Level;
import com.etesync.syncadapter.journalmanager.Exceptions;
import com.etesync.syncadapter.ui.AccountSettingsActivity;
import com.etesync.syncadapter.ui.DebugInfoActivity;
import java.util.logging.Level;
import at.bitfire.ical4android.CalendarStorageException;
import at.bitfire.vcard4android.ContactsStorageException;
import lombok.Getter;
@ -54,13 +57,8 @@ public class NotificationHelper {
messageString = R.string.sync_error;
}
if (e instanceof Exceptions.UnauthorizedException) {
detailsIntent = new Intent(context, AccountSettingsActivity.class);
} else {
detailsIntent = new Intent(context, DebugInfoActivity.class);
detailsIntent.putExtra(DebugInfoActivity.KEY_THROWABLE, e);
}
detailsIntent = new Intent(context, NotificationHandlerActivity.class);
detailsIntent.putExtra(DebugInfoActivity.KEY_THROWABLE, e);
detailsIntent.setData(Uri.parse("uri://" + getClass().getName() + "/" + notificationTag));
}
@ -81,4 +79,29 @@ public class NotificationHelper {
public void cancel() {
notificationManager.cancel(notificationTag, notificationId);
}
public static class NotificationHandlerActivity extends Activity {
@Override
public void onCreate(Bundle savedBundle) {
super.onCreate(savedBundle);
Bundle extras = getIntent().getExtras();
Exception e = (Exception) extras.get(DebugInfoActivity.KEY_THROWABLE);
Intent detailsIntent;
if (e instanceof Exceptions.UnauthorizedException) {
detailsIntent = new Intent(this, AccountSettingsActivity.class);
} else {
detailsIntent = new Intent(this, DebugInfoActivity.class);
}
detailsIntent.putExtras(getIntent().getExtras());
startActivity(detailsIntent);
}
@Override
public void onStop() {
super.onStop();
finish();
}
}
}

@ -61,6 +61,16 @@
<item name="android:layout_width">match_parent</item>
</style>
<!-- NotificationHandlerActivity -->
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
<!-- stepper (wizard) -->

Loading…
Cancel
Save