add start/install orbot to error notification if applicable. fixes #3846
This commit is contained in:
parent
70c10fd0de
commit
f3362ebde5
|
@ -61,6 +61,7 @@ import eu.siacs.conversations.ui.TimePreference;
|
||||||
import eu.siacs.conversations.utils.AccountUtils;
|
import eu.siacs.conversations.utils.AccountUtils;
|
||||||
import eu.siacs.conversations.utils.Compatibility;
|
import eu.siacs.conversations.utils.Compatibility;
|
||||||
import eu.siacs.conversations.utils.GeoHelper;
|
import eu.siacs.conversations.utils.GeoHelper;
|
||||||
|
import eu.siacs.conversations.utils.TorServiceUtils;
|
||||||
import eu.siacs.conversations.utils.UIHelper;
|
import eu.siacs.conversations.utils.UIHelper;
|
||||||
import eu.siacs.conversations.xmpp.XmppConnection;
|
import eu.siacs.conversations.xmpp.XmppConnection;
|
||||||
import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection;
|
import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection;
|
||||||
|
@ -1092,9 +1093,11 @@ public class NotificationService {
|
||||||
}
|
}
|
||||||
final boolean showAllErrors = QuickConversationsService.isConversations();
|
final boolean showAllErrors = QuickConversationsService.isConversations();
|
||||||
final List<Account> errors = new ArrayList<>();
|
final List<Account> errors = new ArrayList<>();
|
||||||
|
boolean torNotAvailable = false;
|
||||||
for (final Account account : mXmppConnectionService.getAccounts()) {
|
for (final Account account : mXmppConnectionService.getAccounts()) {
|
||||||
if (account.hasErrorStatus() && account.showErrorNotification() && (showAllErrors || account.getLastErrorStatus() == Account.State.UNAUTHORIZED)) {
|
if (account.hasErrorStatus() && account.showErrorNotification() && (showAllErrors || account.getLastErrorStatus() == Account.State.UNAUTHORIZED)) {
|
||||||
errors.add(account);
|
errors.add(account);
|
||||||
|
torNotAvailable |= account.getStatus() == Account.State.TOR_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mXmppConnectionService.foregroundNotificationNeedsUpdatingWhenErrorStateChanges()) {
|
if (mXmppConnectionService.foregroundNotificationNeedsUpdatingWhenErrorStateChanges()) {
|
||||||
|
@ -1113,7 +1116,23 @@ public class NotificationService {
|
||||||
}
|
}
|
||||||
mBuilder.addAction(R.drawable.ic_autorenew_white_24dp,
|
mBuilder.addAction(R.drawable.ic_autorenew_white_24dp,
|
||||||
mXmppConnectionService.getString(R.string.try_again),
|
mXmppConnectionService.getString(R.string.try_again),
|
||||||
createTryAgainIntent());
|
createTryAgainIntent()
|
||||||
|
);
|
||||||
|
if (torNotAvailable) {
|
||||||
|
if (TorServiceUtils.isOrbotInstalled(mXmppConnectionService)) {
|
||||||
|
mBuilder.addAction(
|
||||||
|
R.drawable.ic_play_circle_filled_white_48dp,
|
||||||
|
mXmppConnectionService.getString(R.string.start_orbot),
|
||||||
|
PendingIntent.getActivity(mXmppConnectionService, 147, TorServiceUtils.LAUNCH_INTENT, 0)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
mBuilder.addAction(
|
||||||
|
R.drawable.ic_file_download_white_24dp,
|
||||||
|
mXmppConnectionService.getString(R.string.install_orbot),
|
||||||
|
PendingIntent.getActivity(mXmppConnectionService, 146, TorServiceUtils.INSTALL_INTENT, 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
mBuilder.setDeleteIntent(createDismissErrorIntent());
|
mBuilder.setDeleteIntent(createDismissErrorIntent());
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
mBuilder.setVisibility(Notification.VISIBILITY_PRIVATE);
|
mBuilder.setVisibility(Notification.VISIBILITY_PRIVATE);
|
||||||
|
|
|
@ -16,6 +16,9 @@ public class TorServiceUtils {
|
||||||
private static final Uri ORBOT_PLAYSTORE_URI = Uri.parse("market://details?id=" + URI_ORBOT);
|
private static final Uri ORBOT_PLAYSTORE_URI = Uri.parse("market://details?id=" + URI_ORBOT);
|
||||||
private final static String ACTION_START_TOR = "org.torproject.android.START_TOR";
|
private final static String ACTION_START_TOR = "org.torproject.android.START_TOR";
|
||||||
|
|
||||||
|
public static final Intent INSTALL_INTENT = new Intent(Intent.ACTION_VIEW, ORBOT_PLAYSTORE_URI);
|
||||||
|
public static final Intent LAUNCH_INTENT = new Intent(ACTION_START_TOR);
|
||||||
|
|
||||||
public final static String ACTION_STATUS = "org.torproject.android.intent.action.STATUS";
|
public final static String ACTION_STATUS = "org.torproject.android.intent.action.STATUS";
|
||||||
public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
|
public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
|
||||||
|
|
||||||
|
@ -30,17 +33,14 @@ public class TorServiceUtils {
|
||||||
|
|
||||||
|
|
||||||
public static void downloadOrbot(Activity activity, int requestCode) {
|
public static void downloadOrbot(Activity activity, int requestCode) {
|
||||||
final Intent intent = new Intent(Intent.ACTION_VIEW, ORBOT_PLAYSTORE_URI);
|
|
||||||
try {
|
try {
|
||||||
activity.startActivityForResult(intent, requestCode);
|
activity.startActivityForResult(INSTALL_INTENT, requestCode);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
ToastCompat.makeText(activity, R.string.no_market_app_installed, ToastCompat.LENGTH_SHORT).show();
|
ToastCompat.makeText(activity, R.string.no_market_app_installed, ToastCompat.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startOrbot(Activity activity, int requestCode) {
|
public static void startOrbot(Activity activity, int requestCode) {
|
||||||
final Intent launchIntent = new Intent(URI_ORBOT);
|
activity.startActivityForResult(LAUNCH_INTENT, requestCode);
|
||||||
launchIntent.setAction(ACTION_START_TOR);
|
|
||||||
activity.startActivityForResult(launchIntent, requestCode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
src/main/res/drawable-hdpi/ic_play_circle_filled_white_48dp.png
Normal file
BIN
src/main/res/drawable-hdpi/ic_play_circle_filled_white_48dp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 666 B |
BIN
src/main/res/drawable-mdpi/ic_play_circle_filled_white_48dp.png
Normal file
BIN
src/main/res/drawable-mdpi/ic_play_circle_filled_white_48dp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 464 B |
BIN
src/main/res/drawable-xhdpi/ic_play_circle_filled_white_48dp.png
Normal file
BIN
src/main/res/drawable-xhdpi/ic_play_circle_filled_white_48dp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 883 B |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
Loading…
Reference in a new issue