OpenDelta: Add download notification actions
Also reliability improvements to the way the UI reflects current state
This commit is contained in:
parent
34eba98b80
commit
4b90ed7cae
|
@ -90,6 +90,7 @@ public class MainActivity extends Activity {
|
||||||
private TextView mExtraText;
|
private TextView mExtraText;
|
||||||
private TextView mInfoText;
|
private TextView mInfoText;
|
||||||
private ImageView mInfoImage;
|
private ImageView mInfoImage;
|
||||||
|
private boolean mFileSelection;
|
||||||
|
|
||||||
private static final int PERMISSIONS_REQUEST_MANAGE_EXTERNAL_STORAGE = 0;
|
private static final int PERMISSIONS_REQUEST_MANAGE_EXTERNAL_STORAGE = 0;
|
||||||
private static final int ACTIVITY_SELECT_FLASH_FILE = 1;
|
private static final int ACTIVITY_SELECT_FLASH_FILE = 1;
|
||||||
|
@ -548,6 +549,8 @@ public class MainActivity extends Activity {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
handleProgressBar();
|
handleProgressBar();
|
||||||
updateInfoVisibility();
|
updateInfoVisibility();
|
||||||
|
if (!mFileSelection) UpdateService.startCheck(this);
|
||||||
|
else mFileSelection = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -598,7 +601,6 @@ public class MainActivity extends Activity {
|
||||||
mPrefs.edit().putInt(UpdateService.PREF_STOP_DOWNLOAD,
|
mPrefs.edit().putInt(UpdateService.PREF_STOP_DOWNLOAD,
|
||||||
isResume ? UpdateService.PREF_STOP_DOWNLOAD_RESUME
|
isResume ? UpdateService.PREF_STOP_DOWNLOAD_RESUME
|
||||||
: UpdateService.PREF_STOP_DOWNLOAD_PAUSE).commit();
|
: UpdateService.PREF_STOP_DOWNLOAD_PAUSE).commit();
|
||||||
if (isResume) UpdateService.startBuild(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Runnable flashRecoveryWarning = new Runnable() {
|
private final Runnable flashRecoveryWarning = new Runnable() {
|
||||||
|
@ -768,6 +770,7 @@ public class MainActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onButtonSelectFileClick(View v) {
|
public void onButtonSelectFileClick(View v) {
|
||||||
|
mFileSelection = true;
|
||||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
|
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
|
||||||
intent.setType("application/zip");
|
intent.setType("application/zip");
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
|
|
|
@ -177,6 +177,8 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
static final String ACTION_CLEAR_INSTALL_RUNNING =
|
static final String ACTION_CLEAR_INSTALL_RUNNING =
|
||||||
"eu.chainfire.opendelta.action.ACTION_CLEAR_INSTALL_RUNNING";
|
"eu.chainfire.opendelta.action.ACTION_CLEAR_INSTALL_RUNNING";
|
||||||
private static final String ACTION_FLASH_FILE = "eu.chainfire.opendelta.action.FLASH_FILE";
|
private static final String ACTION_FLASH_FILE = "eu.chainfire.opendelta.action.FLASH_FILE";
|
||||||
|
private static final String ACTION_DOWNLOAD_STOP = "eu.chainfire.opendelta.action.DOWNLOAD_STOP";
|
||||||
|
private static final String ACTION_DOWNLOAD_PAUSE = "eu.chainfire.opendelta.action.DOWNLOAD_PAUSE";
|
||||||
|
|
||||||
private static final String NOTIFICATION_CHANNEL_ID = "eu.chainfire.opendelta.notification";
|
private static final String NOTIFICATION_CHANNEL_ID = "eu.chainfire.opendelta.notification";
|
||||||
public static final int NOTIFICATION_BUSY = 1;
|
public static final int NOTIFICATION_BUSY = 1;
|
||||||
|
@ -399,6 +401,13 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
String flashFilename = intent.getStringExtra(EXTRA_FILENAME);
|
String flashFilename = intent.getStringExtra(EXTRA_FILENAME);
|
||||||
setFlashFilename(flashFilename);
|
setFlashFilename(flashFilename);
|
||||||
}
|
}
|
||||||
|
} else if (ACTION_DOWNLOAD_STOP.equals(intent.getAction())) {
|
||||||
|
prefs.edit().putInt(PREF_STOP_DOWNLOAD, PREF_STOP_DOWNLOAD_STOP).commit();
|
||||||
|
} else if (ACTION_DOWNLOAD_PAUSE.equals(intent.getAction())) {
|
||||||
|
final boolean isPaused = state.equals(STATE_ACTION_DOWNLOADING_PAUSED) ||
|
||||||
|
state.equals(STATE_ERROR_DOWNLOAD_RESUME);
|
||||||
|
prefs.edit().putInt(PREF_STOP_DOWNLOAD,
|
||||||
|
isPaused ? PREF_STOP_DOWNLOAD_RESUME : PREF_STOP_DOWNLOAD_PAUSE).commit();
|
||||||
} else {
|
} else {
|
||||||
autoState(false, PREF_AUTO_DOWNLOAD_CHECK, false);
|
autoState(false, PREF_AUTO_DOWNLOAD_CHECK, false);
|
||||||
}
|
}
|
||||||
|
@ -476,13 +485,12 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
break;
|
break;
|
||||||
case PREF_STOP_DOWNLOAD:
|
case PREF_STOP_DOWNLOAD:
|
||||||
stopDownload = sharedPreferences.getInt(PREF_STOP_DOWNLOAD, -1);
|
stopDownload = sharedPreferences.getInt(PREF_STOP_DOWNLOAD, -1);
|
||||||
// TODO: Add support to pause / resume from the notification
|
|
||||||
if (notificationManager != null)
|
if (notificationManager != null)
|
||||||
notificationManager.cancel(NOTIFICATION_BUSY);
|
notificationManager.cancel(NOTIFICATION_BUSY);
|
||||||
|
if (stopDownload == PREF_STOP_DOWNLOAD_STOP) {
|
||||||
// if we have a paused download in progress we need to manually stop it
|
// if we have a paused download in progress we need to manually stop it
|
||||||
if (stopDownload == PREF_STOP_DOWNLOAD_STOP &&
|
if (state.equals(STATE_ERROR_DOWNLOAD_RESUME) ||
|
||||||
(state == STATE_ERROR_DOWNLOAD_RESUME ||
|
state.equals(STATE_ACTION_DOWNLOADING_PAUSED)) {
|
||||||
state == STATE_ACTION_DOWNLOADING_PAUSED)) {
|
|
||||||
// to do so we just need to resume remove the file and update state
|
// to do so we just need to resume remove the file and update state
|
||||||
File[] files = new File(config.getPathBase()).listFiles();
|
File[] files = new File(config.getPathBase()).listFiles();
|
||||||
for (File file : files)
|
for (File file : files)
|
||||||
|
@ -490,6 +498,12 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
file.delete();
|
file.delete();
|
||||||
autoState(true, PREF_AUTO_DOWNLOAD_CHECK, false);
|
autoState(true, PREF_AUTO_DOWNLOAD_CHECK, false);
|
||||||
}
|
}
|
||||||
|
} else if (stopDownload == PREF_STOP_DOWNLOAD_PAUSE) {
|
||||||
|
autoState(true, PREF_AUTO_DOWNLOAD_CHECK, false);
|
||||||
|
} else {
|
||||||
|
// resume
|
||||||
|
startBuild(this);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SettingsActivity.PREF_AUTO_DOWNLOAD:
|
case SettingsActivity.PREF_AUTO_DOWNLOAD:
|
||||||
int autoDownload = getAutoDownloadValue();
|
int autoDownload = getAutoDownloadValue();
|
||||||
|
@ -549,7 +563,6 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
}
|
}
|
||||||
|
|
||||||
// let's check if we have a .part file that is still latest
|
// let's check if we have a .part file that is still latest
|
||||||
stopDownload = -1;
|
|
||||||
List<String> latestFullBuildWithUrl = getNewestFullBuild();
|
List<String> latestFullBuildWithUrl = getNewestFullBuild();
|
||||||
String latestFullBuild;
|
String latestFullBuild;
|
||||||
// if we don't even find a build on dl no sense to continue
|
// if we don't even find a build on dl no sense to continue
|
||||||
|
@ -585,6 +598,10 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
final Long lastTime = prefs.getLong(PREF_LAST_DOWNLOAD_TIME, 0);
|
final Long lastTime = prefs.getLong(PREF_LAST_DOWNLOAD_TIME, 0);
|
||||||
final float progress = ((float) current / (float) total) * 100f;
|
final float progress = ((float) current / (float) total) * 100f;
|
||||||
updateState(STATE_ACTION_DOWNLOADING_PAUSED, progress, current, total, latestFullBuild, lastTime);
|
updateState(STATE_ACTION_DOWNLOADING_PAUSED, progress, current, total, latestFullBuild, lastTime);
|
||||||
|
// display paused notification with the proper title
|
||||||
|
newDownloadNotification(true, getString(R.string.state_action_downloading_paused));
|
||||||
|
mDownloadNotificationBuilder.setProgress(100, Math.round(progress), false);
|
||||||
|
notificationManager.notify(NOTIFICATION_BUSY, mDownloadNotificationBuilder.build());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -683,6 +700,37 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
setFlashNotificationProgress(0, 0);
|
setFlashNotificationProgress(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void newDownloadNotification(boolean isPaused, String title) {
|
||||||
|
List<Notification.Action> actions = new ArrayList<>();
|
||||||
|
// actions
|
||||||
|
Intent stopIntent = new Intent(this, UpdateService.class);
|
||||||
|
stopIntent.setAction(ACTION_DOWNLOAD_STOP);
|
||||||
|
PendingIntent sPI = PendingIntent.getService(this, 0, stopIntent, PendingIntent.FLAG_MUTABLE);
|
||||||
|
Intent pauseIntent = new Intent(this, UpdateService.class);
|
||||||
|
pauseIntent.setAction(ACTION_DOWNLOAD_PAUSE);
|
||||||
|
PendingIntent cPI = PendingIntent.getService(this, 0, pauseIntent, PendingIntent.FLAG_MUTABLE);
|
||||||
|
actions.add(new Notification.Action.Builder(
|
||||||
|
0,
|
||||||
|
getResources().getText(R.string.button_stop_text, ""),
|
||||||
|
sPI
|
||||||
|
).build());
|
||||||
|
actions.add(new Notification.Action.Builder(
|
||||||
|
0,
|
||||||
|
getResources().getText(isPaused
|
||||||
|
? R.string.button_resume_text
|
||||||
|
: R.string.button_pause_text),
|
||||||
|
cPI
|
||||||
|
).build());
|
||||||
|
mDownloadNotificationBuilder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
|
||||||
|
mDownloadNotificationBuilder.setSmallIcon(R.drawable.stat_notify_update)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setShowWhen(false)
|
||||||
|
.setOngoing(true)
|
||||||
|
.setContentIntent(getNotificationIntent(false));
|
||||||
|
for (Notification.Action action : actions)
|
||||||
|
mDownloadNotificationBuilder.addAction(action);
|
||||||
|
}
|
||||||
|
|
||||||
private void startABRebootNotification(String filename) {
|
private void startABRebootNotification(String filename) {
|
||||||
String flashFilename = filename;
|
String flashFilename = filename;
|
||||||
flashFilename = new File(flashFilename).getName();
|
flashFilename = new File(flashFilename).getName();
|
||||||
|
@ -1586,6 +1634,15 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
: STATE_ERROR_DOWNLOAD_RESUME;
|
: STATE_ERROR_DOWNLOAD_RESUME;
|
||||||
Logger.d("download " + (isPause ? "paused" : "error"));
|
Logger.d("download " + (isPause ? "paused" : "error"));
|
||||||
updateState(newState, progress, current, total, imageName, lastTime);
|
updateState(newState, progress, current, total, imageName, lastTime);
|
||||||
|
// display paused notification with the proper title
|
||||||
|
if (notificationManager != null)
|
||||||
|
notificationManager.cancel(NOTIFICATION_BUSY);
|
||||||
|
String title = getString(isPause
|
||||||
|
? R.string.state_action_downloading_paused
|
||||||
|
: R.string.state_error_download_resume);
|
||||||
|
newDownloadNotification(true, title);
|
||||||
|
mDownloadNotificationBuilder.setProgress(100, Math.round(progress), false);
|
||||||
|
notificationManager.notify(NOTIFICATION_BUSY, mDownloadNotificationBuilder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2130,16 +2187,8 @@ public class UpdateService extends Service implements OnNetworkStateListener,
|
||||||
wakeLock.acquire();
|
wakeLock.acquire();
|
||||||
wifiLock.acquire();
|
wifiLock.acquire();
|
||||||
|
|
||||||
String notificationText = getString(R.string.state_action_checking);
|
newDownloadNotification(false,
|
||||||
if (checkOnly > PREF_AUTO_DOWNLOAD_CHECK) {
|
getString(R.string.state_action_downloading));
|
||||||
notificationText = getString(R.string.state_action_downloading);
|
|
||||||
}
|
|
||||||
mDownloadNotificationBuilder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
|
|
||||||
mDownloadNotificationBuilder.setSmallIcon(R.drawable.stat_notify_update)
|
|
||||||
.setContentTitle(notificationText)
|
|
||||||
.setShowWhen(false)
|
|
||||||
.setOngoing(true)
|
|
||||||
.setContentIntent(getNotificationIntent(false));
|
|
||||||
|
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
boolean downloadFullBuild = false;
|
boolean downloadFullBuild = false;
|
||||||
|
|
Loading…
Reference in New Issue