|
|
@ -6,6 +6,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
|
|
|
|
import android.app.Dialog;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.Intent;
|
|
|
@ -14,6 +15,7 @@ import android.content.pm.PackageManager;
|
|
|
|
import android.content.res.Resources;
|
|
|
|
import android.content.res.Resources;
|
|
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.net.Uri;
|
|
|
|
|
|
|
|
import android.widget.Button;
|
|
|
|
|
|
|
|
|
|
|
|
import com.timsu.astrid.R;
|
|
|
|
import com.timsu.astrid.R;
|
|
|
|
import com.todoroo.andlib.service.ContextManager;
|
|
|
|
import com.todoroo.andlib.service.ContextManager;
|
|
|
@ -44,7 +46,7 @@ public class AddOnService {
|
|
|
|
public static final String POWER_PACK_LABEL = "Astrid Power Pack";
|
|
|
|
public static final String POWER_PACK_LABEL = "Astrid Power Pack";
|
|
|
|
|
|
|
|
|
|
|
|
/** Checks whether power pack should be enabled */
|
|
|
|
/** Checks whether power pack should be enabled */
|
|
|
|
public boolean isPowerPack() {
|
|
|
|
public boolean hasPowerPack() {
|
|
|
|
if (Preferences.getBoolean(PREF_OEM, false))
|
|
|
|
if (Preferences.getBoolean(PREF_OEM, false))
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
else if(isInstalled(POWER_PACK_PACKAGE, true))
|
|
|
|
else if(isInstalled(POWER_PACK_PACKAGE, true))
|
|
|
@ -87,38 +89,48 @@ public class AddOnService {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public static void checkForUpgrades(final Activity activity) {
|
|
|
|
public static void checkForUpgrades(final Activity activity) {
|
|
|
|
final AtomicInteger countdown = new AtomicInteger(10);
|
|
|
|
|
|
|
|
if(DateUtilities.now() > Constants.UPGRADE.getTime()) {
|
|
|
|
if(DateUtilities.now() > Constants.UPGRADE.getTime()) {
|
|
|
|
|
|
|
|
final AtomicInteger countdown = new AtomicInteger(10);
|
|
|
|
final AlertDialog dialog = new AlertDialog.Builder(activity)
|
|
|
|
final AlertDialog dialog = new AlertDialog.Builder(activity)
|
|
|
|
.setTitle(R.string.DLG_information_title)
|
|
|
|
.setTitle(R.string.DLG_information_title)
|
|
|
|
.setMessage(R.string.DLG_please_update)
|
|
|
|
.setMessage(R.string.DLG_please_update)
|
|
|
|
.setIcon(android.R.drawable.ic_dialog_alert)
|
|
|
|
.setIcon(android.R.drawable.ic_dialog_alert)
|
|
|
|
.setPositiveButton(R.string.DLG_to_market,
|
|
|
|
.setPositiveButton(R.string.DLG_to_market,
|
|
|
|
new MarketClickListener(activity, activity.getPackageName()))
|
|
|
|
new MarketClickListener(activity, activity.getPackageName()))
|
|
|
|
.setNegativeButton(countdown.toString(), null)
|
|
|
|
.setNegativeButton(countdown.toString(), new DialogInterface.OnClickListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onClick(DialogInterface myDialog, int which) {
|
|
|
|
|
|
|
|
// do nothing!
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
.setCancelable(false)
|
|
|
|
.setCancelable(false)
|
|
|
|
.show();
|
|
|
|
.show();
|
|
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
|
|
|
|
dialog.setOwnerActivity(activity);
|
|
|
|
|
|
|
|
dialog.getButton(Dialog.BUTTON_NEGATIVE).setEnabled(false);
|
|
|
|
|
|
|
|
|
|
|
|
final Timer timer = new Timer();
|
|
|
|
final Timer timer = new Timer();
|
|
|
|
timer.scheduleAtFixedRate(new TimerTask() {
|
|
|
|
timer.scheduleAtFixedRate(new TimerTask() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
public void run() {
|
|
|
|
final int number = countdown.addAndGet(-1);
|
|
|
|
final int number = countdown.addAndGet(-1);
|
|
|
|
if(number == 0)
|
|
|
|
|
|
|
|
timer.cancel();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
activity.runOnUiThread(new Runnable() {
|
|
|
|
activity.runOnUiThread(new Runnable() {
|
|
|
|
public void run() {
|
|
|
|
public void run() {
|
|
|
|
|
|
|
|
Button negativeButton =
|
|
|
|
|
|
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE);
|
|
|
|
|
|
|
|
if(negativeButton == null)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
if(number == 0)
|
|
|
|
|
|
|
|
timer.cancel();
|
|
|
|
|
|
|
|
|
|
|
|
if(number == 0) {
|
|
|
|
if(number == 0) {
|
|
|
|
dialog.setCancelable(true);
|
|
|
|
dialog.setCancelable(true);
|
|
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
|
|
|
|
negativeButton.setText(
|
|
|
|
android.R.string.ok);
|
|
|
|
android.R.string.ok);
|
|
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
|
|
|
|
negativeButton.setEnabled(true);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setText(
|
|
|
|
negativeButton.setEnabled(false);
|
|
|
|
Integer.toString(number));
|
|
|
|
negativeButton.setText(Integer.toString(number));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -149,6 +161,11 @@ public class AddOnService {
|
|
|
|
* @return
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private boolean isInstalled(String packageName, boolean internal) {
|
|
|
|
private boolean isInstalled(String packageName, boolean internal) {
|
|
|
|
|
|
|
|
if(POWER_PACK_PACKAGE.equals(packageName))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if(LOCALE_PACKAGE.equals(packageName))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
Context context = ContextManager.getContext();
|
|
|
|
Context context = ContextManager.getContext();
|
|
|
|
PackageInfo packageInfo;
|
|
|
|
PackageInfo packageInfo;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -162,6 +179,7 @@ public class AddOnService {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
if(!internal)
|
|
|
|
if(!internal)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
return "30820265308201cea00302010202044954bd9c300d06092a864886f70d01010505003076310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f6173747269642e6c7632352e636f6d311b3019060355040b131241737472696420446576656c6f706d656e74310f300d0603550403130654696d2053753020170d3038313232363131313835325a180f32303633303932393131313835325a3076310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f6173747269642e6c7632352e636f6d311b3019060355040b131241737472696420446576656c6f706d656e74310f300d0603550403130654696d20537530819f300d06092a864886f70d010101050003818d00308189028181008b8f39e02a50e5f50723bb71208e99bd72dd3cb6266054809cce0dc33a38ebf79c2a1ab74264cc6c88d44a5092e34f45fc28c53188ebe5b7511f0e14862598a82e1a84b0c99e62b0603737c09501b92f723d9e561a0eedbc16ab494e93a513d170135e0e55af6bb40a9af1186df4cfe53ec3a6144336f9f8a338341656c5a3bd0203010001300d06092a864886f70d01010505000381810016352860629e5e17d2d747943170ddb8c01f014932cb4462f52295c2f764970e93fa461c73b44a678ecf8ab8480702fb746221a98ade8ab7562cae151be78973dfa47144d70b8d0b73220dd741755f62cc9230264f570ec21a4ab1f11b0528d799d3662d06354b56d0d7d28d05c260876a98151fb4e89b6ce2a5010c52b3e365".equals(packageInfo.signatures[0].toCharsString());
|
|
|
|
return "30820265308201cea00302010202044954bd9c300d06092a864886f70d01010505003076310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f6173747269642e6c7632352e636f6d311b3019060355040b131241737472696420446576656c6f706d656e74310f300d0603550403130654696d2053753020170d3038313232363131313835325a180f32303633303932393131313835325a3076310b3009060355040613025553310b3009060355040813024341311230100603550407130950616c6f20416c746f31183016060355040a130f6173747269642e6c7632352e636f6d311b3019060355040b131241737472696420446576656c6f706d656e74310f300d0603550403130654696d20537530819f300d06092a864886f70d010101050003818d00308189028181008b8f39e02a50e5f50723bb71208e99bd72dd3cb6266054809cce0dc33a38ebf79c2a1ab74264cc6c88d44a5092e34f45fc28c53188ebe5b7511f0e14862598a82e1a84b0c99e62b0603737c09501b92f723d9e561a0eedbc16ab494e93a513d170135e0e55af6bb40a9af1186df4cfe53ec3a6144336f9f8a338341656c5a3bd0203010001300d06092a864886f70d01010505000381810016352860629e5e17d2d747943170ddb8c01f014932cb4462f52295c2f764970e93fa461c73b44a678ecf8ab8480702fb746221a98ade8ab7562cae151be78973dfa47144d70b8d0b73220dd741755f62cc9230264f570ec21a4ab1f11b0528d799d3662d06354b56d0d7d28d05c260876a98151fb4e89b6ce2a5010c52b3e365".equals(packageInfo.signatures[0].toCharsString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|