diff --git a/res/values/strings.xml b/res/values/strings.xml
index edcd6ac31b..f0402fce6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1320,6 +1320,8 @@
Migrating Signal database
New locked message
Unlock to view pending messages
+ Unlock to complete update
+ Please unlock Signal to complete update
diff --git a/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java b/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
index 828c628dfb..d2e1ae8183 100644
--- a/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
+++ b/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
@@ -13,8 +13,6 @@ import android.support.annotation.StringRes;
import android.support.v4.app.NotificationCompat;
import android.support.v4.view.ViewPager;
import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
import com.melnykov.fab.FloatingActionButton;
import com.nineoldandroids.animation.ArgbEvaluator;
@@ -144,12 +142,7 @@ public class ExperienceUpgradeActivity extends BaseActionBarActivity {
pager.setAdapter(new IntroPagerAdapter(getSupportFragmentManager(), upgrade.get().getPages()));
- fab.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- onContinue(upgrade);
- }
- });
+ fab.setOnClickListener(v -> onContinue(upgrade));
getWindow().setBackgroundDrawable(new ColorDrawable(upgrade.get().getPage(0).backgroundColor));
ServiceUtil.getNotificationManager(this).cancel(NOTIFICATION_ID);
@@ -166,7 +159,7 @@ public class ExperienceUpgradeActivity extends BaseActionBarActivity {
intent.putExtra("next_intent", nextIntent);
startActivity(intent);
} else {
- startActivity((Intent) getIntent().getParcelableExtra("next_intent"));
+ startActivity(getIntent().getParcelableExtra("next_intent"));
}
finish();
@@ -225,6 +218,24 @@ public class ExperienceUpgradeActivity extends BaseActionBarActivity {
if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction()) &&
intent.getData().getSchemeSpecificPart().equals(context.getPackageName()))
{
+ if (TextSecurePreferences.getLastExperienceVersionCode(context) < 339 &&
+ !TextSecurePreferences.isPasswordDisabled(context))
+ {
+ Notification notification = new NotificationCompat.Builder(context)
+ .setSmallIcon(R.drawable.icon_notification)
+ .setColor(context.getResources().getColor(R.color.signal_primary))
+ .setContentTitle(context.getString(R.string.ExperienceUpgradeActivity_unlock_to_complete_update))
+ .setContentText(context.getString(R.string.ExperienceUpgradeActivity_please_unlock_signal_to_complete_update))
+ .setStyle(new NotificationCompat.BigTextStyle().bigText(context.getString(R.string.ExperienceUpgradeActivity_please_unlock_signal_to_complete_update)))
+ .setAutoCancel(true)
+ .setContentIntent(PendingIntent.getActivity(context, 0,
+ context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()),
+ PendingIntent.FLAG_UPDATE_CURRENT))
+ .build();
+
+ ServiceUtil.getNotificationManager(context).notify(NOTIFICATION_ID, notification);
+ }
+
Optional experienceUpgrade = getExperienceUpgrade(context);
if (!experienceUpgrade.isPresent()) {
diff --git a/src/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/src/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
index 3c109cb40b..f623e5c1a9 100644
--- a/src/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
+++ b/src/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
@@ -9,6 +9,7 @@ import android.util.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult;
import org.thoughtcrime.securesms.database.SmsDatabase;
+import org.thoughtcrime.securesms.jobs.requirements.MasterSecretRequirement;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
@@ -31,6 +32,7 @@ public class SmsReceiveJob extends ContextJob {
super(context, JobParameters.newBuilder()
.withPersistence()
.withWakeLock(true)
+ .withRequirement(new MasterSecretRequirement(context))
.create());
this.pdus = pdus;