blob: c899a565c4ae2eea6ebffd9c188a62c3f9bdc905 [file] [log] [blame]
Jose Pascoalb690af12014-10-06 18:29:26 +01001package com.fairphone.updater.fragments;
2
Jose Pascoal54b3ae62014-10-07 20:29:58 +01003import java.io.File;
4import java.io.IOException;
5import java.util.concurrent.TimeoutException;
6
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +00007import android.annotation.SuppressLint;
Jose Pascoal75392162014-10-15 18:29:01 +01008import android.app.AlertDialog;
Jose Pascoalb690af12014-10-06 18:29:26 +01009import android.app.DownloadManager;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010010import android.app.ProgressDialog;
11import android.content.BroadcastReceiver;
12import android.content.Context;
Jose Pascoal75392162014-10-15 18:29:01 +010013import android.content.DialogInterface;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010014import android.content.Intent;
15import android.content.IntentFilter;
Tiago Costa87925fe2014-12-02 17:57:51 +000016import android.content.SharedPreferences.Editor;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010017import android.content.res.Resources;
18import android.content.res.Resources.NotFoundException;
Jose Pascoalb690af12014-10-06 18:29:26 +010019import android.database.Cursor;
Filipe Gonçalvesd28bd622014-11-05 11:40:12 +000020import android.net.ConnectivityManager;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010021import android.os.AsyncTask;
Jose Pascoalb690af12014-10-06 18:29:26 +010022import android.os.Bundle;
23import android.os.Environment;
24import android.util.Log;
25import android.view.LayoutInflater;
26import android.view.View;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010027import android.view.View.OnClickListener;
Jose Pascoalb690af12014-10-06 18:29:26 +010028import android.view.ViewGroup;
29import android.widget.Button;
30import android.widget.LinearLayout;
31import android.widget.ProgressBar;
32import android.widget.TextView;
33import android.widget.Toast;
34
Jose Pascoal7bf83a02014-10-13 18:30:18 +010035import com.fairphone.updater.FairphoneUpdater.HeaderType;
36import com.fairphone.updater.FairphoneUpdater.UpdaterState;
Jose Pascoalb690af12014-10-06 18:29:26 +010037import com.fairphone.updater.R;
Jose Pascoal02d86242014-12-17 18:50:08 +000038import com.fairphone.updater.UpdaterService;
Jose Pascoal1c049e02014-12-17 13:03:09 +000039import com.fairphone.updater.data.DownloadableItem;
Tiago Costa198bf3d2014-12-16 15:23:18 +000040import com.fairphone.updater.data.Store;
Jose Pascoal7bf83a02014-10-13 18:30:18 +010041import com.fairphone.updater.data.Version;
Jose Pascoalc2545cc2014-12-18 16:51:52 +000042import com.fairphone.updater.data.VersionParserHelper;
Jose Pascoalb690af12014-10-06 18:29:26 +010043import com.fairphone.updater.tools.Utils;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010044import com.stericson.RootTools.RootTools;
45import com.stericson.RootTools.exceptions.RootDeniedException;
46import com.stericson.RootTools.execution.CommandCapture;
47import com.stericson.RootTools.execution.Shell;
Jose Pascoalb690af12014-10-06 18:29:26 +010048
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000049@SuppressLint("ValidFragment")
Jose Pascoal810950b2014-10-09 17:16:08 +010050public class DownloadAndRestartFragment extends BaseFragment
51{
Jose Pascoalb690af12014-10-06 18:29:26 +010052
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +000053 private static final int PROGRESS_BAR_UPDATE_FREQUENCY_IN_MILLIS = 1000;
54
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000055 private static final String TAG = DownloadAndRestartFragment.class.getSimpleName();
Jose Pascoalb690af12014-10-06 18:29:26 +010056
Jose Pascoal810950b2014-10-09 17:16:08 +010057 private TextView mDownloadVersionName;
58 private LinearLayout mVersionDownloadingGroup;
59 private ProgressBar mVersionDownloadProgressBar;
60 private LinearLayout mVersionInstallGroup;
61 private Button mRestartButton;
62 private Button mCancelButton;
63 private Version mSelectedVersion;
Tiago Costa198bf3d2014-12-16 15:23:18 +000064 private Store mSelectedStore;
Jose Pascoalb690af12014-10-06 18:29:26 +010065
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000066 private final boolean mIsVersion;
Jose Pascoal1c049e02014-12-17 13:03:09 +000067
Jose Pascoal810950b2014-10-09 17:16:08 +010068 private DownloadManager mDownloadManager;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010069
Jose Pascoal810950b2014-10-09 17:16:08 +010070 private DownloadBroadCastReceiver mDownloadBroadCastReceiver;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010071
Tiago Costa73eda412014-11-18 14:37:42 +000072 private BroadcastReceiver mNetworkStateReceiver;
73
Jose Pascoal810950b2014-10-09 17:16:08 +010074 private long mLatestUpdateDownloadId;
Jose Pascoal54b3ae62014-10-07 20:29:58 +010075
Jose Pascoal1c049e02014-12-17 13:03:09 +000076 public DownloadAndRestartFragment(boolean isVersion)
77 {
Tiago Costa198bf3d2014-12-16 15:23:18 +000078 super();
Jose Pascoal1c049e02014-12-17 13:03:09 +000079
Tiago Costa198bf3d2014-12-16 15:23:18 +000080 mIsVersion = isVersion;
81 }
Jose Pascoal1c049e02014-12-17 13:03:09 +000082
Jose Pascoal810950b2014-10-09 17:16:08 +010083 @Override
84 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
85 {
86 // Inflate the layout for this fragment
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +000087 View view;
Jose Pascoal1c049e02014-12-17 13:03:09 +000088 if (mIsVersion)
89 {
Tiago Costa198bf3d2014-12-16 15:23:18 +000090 mSelectedVersion = mainActivity.getSelectedVersion();
91 view = inflateViewByImageType(inflater, container);
Jose Pascoal1c049e02014-12-17 13:03:09 +000092 mSelectedStore = null;
93 }
94 else
95 {
Tiago Costa198bf3d2014-12-16 15:23:18 +000096 mSelectedStore = mainActivity.getSelectedStore();
97 view = inflateStoreView(inflater, container);
Jose Pascoal1c049e02014-12-17 13:03:09 +000098 mSelectedVersion = null;
Tiago Costa198bf3d2014-12-16 15:23:18 +000099 }
Jose Pascoal1c049e02014-12-17 13:03:09 +0000100
Jose Pascoal810950b2014-10-09 17:16:08 +0100101 setupLayout(view);
Jose Pascoalaa579a82014-11-05 22:17:16 +0000102
Jose Pascoal810950b2014-10-09 17:16:08 +0100103 return view;
104 }
Jose Pascoal1c049e02014-12-17 13:03:09 +0000105
Tiago Costa198bf3d2014-12-16 15:23:18 +0000106 private View inflateViewByImageType(LayoutInflater inflater, ViewGroup container)
107 {
108 View view = inflater.inflate(R.layout.fragment_download_fairphone, container, false);
109 if (mSelectedVersion != null)
110 {
111 if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mSelectedVersion.getImageType()))
112 {
113 view = inflater.inflate(R.layout.fragment_download_android, container, false);
114 }
115 else if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mSelectedVersion.getImageType()))
116 {
117 view = inflater.inflate(R.layout.fragment_download_fairphone, container, false);
118 }
119 }
120 return view;
121 }
122
123 private View inflateStoreView(LayoutInflater inflater, ViewGroup container)
124 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000125
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000126 return inflater.inflate(R.layout.fragment_download_app_store, container, false);
Tiago Costa198bf3d2014-12-16 15:23:18 +0000127 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100128
Jose Pascoal810950b2014-10-09 17:16:08 +0100129 private void toggleDownloadProgressAndRestart()
130 {
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100131 UpdaterState state = mainActivity.getCurrentUpdaterState();
132 switch (state)
Jose Pascoal810950b2014-10-09 17:16:08 +0100133 {
134 case DOWNLOAD:
135 setupDownloadState();
Jose Pascoalb690af12014-10-06 18:29:26 +0100136
Jose Pascoal810950b2014-10-09 17:16:08 +0100137 mVersionInstallGroup.setVisibility(View.GONE);
138 mVersionDownloadingGroup.setVisibility(View.VISIBLE);
139 break;
Jose Pascoalb690af12014-10-06 18:29:26 +0100140
Jose Pascoal810950b2014-10-09 17:16:08 +0100141 case PREINSTALL:
142 setupPreInstallState();
Jose Pascoalb690af12014-10-06 18:29:26 +0100143
Jose Pascoal810950b2014-10-09 17:16:08 +0100144 mVersionDownloadingGroup.setVisibility(View.GONE);
145 mVersionInstallGroup.setVisibility(View.VISIBLE);
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100146
147 mRestartButton.setOnClickListener(new OnClickListener()
148 {
149
150 @Override
151 public void onClick(View v)
152 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000153 if (mIsVersion)
154 {
155 showEraseAllDataWarning();
156 }
157 else if (mSelectedStore != null)
158 {
159 startPreInstall();
160 }
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100161 }
162 });
163
Jose Pascoal810950b2014-10-09 17:16:08 +0100164 break;
Jose Pascoalb690af12014-10-06 18:29:26 +0100165
Jose Pascoal810950b2014-10-09 17:16:08 +0100166 default:
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100167 Log.w(TAG, "Wrong State: " + state + "\nOnly DOWNLOAD and PREINSTALL are supported");
Jose Pascoal87758742015-01-28 20:00:22 +0000168 mainActivity.onBackPressed();
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100169 return;
170
Jose Pascoal810950b2014-10-09 17:16:08 +0100171 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100172
Jose Pascoal810950b2014-10-09 17:16:08 +0100173 mCancelButton.setOnClickListener(new OnClickListener()
174 {
Jose Pascoalb690af12014-10-06 18:29:26 +0100175
Jose Pascoal810950b2014-10-09 17:16:08 +0100176 @Override
177 public void onClick(View v)
178 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000179 abortUpdateProcess();
Jose Pascoal87758742015-01-28 20:00:22 +0000180 mainActivity.onBackPressed();
Jose Pascoal810950b2014-10-09 17:16:08 +0100181 }
182 });
183 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100184
Jose Pascoal75392162014-10-15 18:29:01 +0100185 private void showEraseAllDataWarning()
186 {
Tiago Costa73eda412014-11-18 14:37:42 +0000187 if (mSelectedVersion != null && mSelectedVersion.hasEraseAllPartitionWarning())
Jose Pascoal75392162014-10-15 18:29:01 +0100188 {
189 new AlertDialog.Builder(mainActivity).setTitle(android.R.string.dialog_alert_title).setMessage(R.string.erase_all_partitions_warning_message)
190 .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()
191 {
192
193 @Override
194 public void onClick(DialogInterface dialog, int which)
195 {
196 startPreInstall();
197 }
198 }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener()
199 {
200 public void onClick(DialogInterface dialog, int which)
201 {
202 // do nothing
203 }
204 }).show();
205 }
206 else
207 {
208 startPreInstall();
209 }
210 }
211
Jose Pascoal1c049e02014-12-17 13:03:09 +0000212 private void updateHeader()
213 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000214 if (mIsVersion && mSelectedVersion != null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100215 {
216 if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mSelectedVersion.getImageType()))
217 {
Tiago Costa3855faa2014-11-14 17:55:05 +0000218 mainActivity.updateHeader(HeaderType.MAIN_FAIRPHONE, "", false);
Jose Pascoal810950b2014-10-09 17:16:08 +0100219 }
220 else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mSelectedVersion.getImageType()))
221 {
Tiago Costa3855faa2014-11-14 17:55:05 +0000222 mainActivity.updateHeader(HeaderType.MAIN_ANDROID, "", false);
Jose Pascoal810950b2014-10-09 17:16:08 +0100223 }
224 }
Jose Pascoal02d86242014-12-17 18:50:08 +0000225 else if (mSelectedStore != null)
226 {
227 mainActivity.updateHeader(HeaderType.MAIN_APP_STORE, "", false);
228 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100229 else
230 {
Tiago Costa3855faa2014-11-14 17:55:05 +0000231 mainActivity.updateHeader(HeaderType.MAIN_FAIRPHONE, "", false);
Jose Pascoal810950b2014-10-09 17:16:08 +0100232 }
233 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100234
Jose Pascoal810950b2014-10-09 17:16:08 +0100235 private void startDownloadProgressUpdateThread()
236 {
237 new Thread(new Runnable()
238 {
Jose Pascoalb690af12014-10-06 18:29:26 +0100239
Jose Pascoal810950b2014-10-09 17:16:08 +0100240 @Override
241 public void run()
242 {
Jose Pascoal810950b2014-10-09 17:16:08 +0100243 boolean downloading = true;
Jose Pascoalb690af12014-10-06 18:29:26 +0100244
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000245 long latestUpdateDownloadId = mainActivity.getLatestDownloadId();
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000246
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000247 int count = 12;
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000248
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000249 // Wait a sensible amount of time to get a correct reference to the download
250 while ((latestUpdateDownloadId <= 0) && count > 0)
Jose Pascoal1c049e02014-12-17 13:03:09 +0000251 {
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000252 try
253 {
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000254 Thread.sleep(500);
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000255 count--;
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000256 latestUpdateDownloadId = mainActivity.getLatestDownloadId();
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000257 } catch (InterruptedException e)
258 {
259 e.printStackTrace();
260 }
261 }
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000262
Jose Pascoalaa579a82014-11-05 22:17:16 +0000263 while (mDownloadManager != null && latestUpdateDownloadId != 0 && downloading)
Jose Pascoal810950b2014-10-09 17:16:08 +0100264 {
Jose Pascoalb690af12014-10-06 18:29:26 +0100265
Jose Pascoal810950b2014-10-09 17:16:08 +0100266 DownloadManager.Query q = new DownloadManager.Query();
267 q.setFilterById(latestUpdateDownloadId);
Jose Pascoalb690af12014-10-06 18:29:26 +0100268
Jose Pascoalaa579a82014-11-05 22:17:16 +0000269 Cursor cursor = mDownloadManager != null ? mDownloadManager.query(q) : null;
Jose Pascoal1c049e02014-12-17 13:03:09 +0000270
Jose Pascoalda015b12014-11-06 12:47:11 +0000271 if (cursor != null && cursor.moveToFirst())
Jose Pascoal810950b2014-10-09 17:16:08 +0100272 {
Jose Pascoal810950b2014-10-09 17:16:08 +0100273 try
274 {
275 int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
276 int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
Jose Pascoalb690af12014-10-06 18:29:26 +0100277
Jose Pascoal810950b2014-10-09 17:16:08 +0100278 if ((bytes_total + 10000) > Utils.getAvailablePartitionSizeInBytes(Environment.getExternalStorageDirectory()))
279 {
280 downloading = false;
Pedro Arelo773bd822014-10-10 11:57:34 +0100281 Toast.makeText(mainActivity, getResources().getString(R.string.no_space_available_sd_card_message), Toast.LENGTH_LONG).show();
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000282 abortUpdateProcess();
Jose Pascoal810950b2014-10-09 17:16:08 +0100283 }
Jose Pascoalaa579a82014-11-05 22:17:16 +0000284 else
Jose Pascoal810950b2014-10-09 17:16:08 +0100285 {
Jose Pascoalaa579a82014-11-05 22:17:16 +0000286 switch (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)))
287 {
288 case DownloadManager.STATUS_SUCCESSFUL:
289 case DownloadManager.STATUS_FAILED:
290 downloading = false;
Jose Pascoalb690af12014-10-06 18:29:26 +0100291
Jose Pascoalaa579a82014-11-05 22:17:16 +0000292 bytes_downloaded = 0;
293 bytes_total = 0;
294 break;
295 }
296
297 mVersionDownloadProgressBar.setProgress(bytes_downloaded);
298 mVersionDownloadProgressBar.setMax(bytes_total);
Jose Pascoal810950b2014-10-09 17:16:08 +0100299 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100300 } catch (Exception e)
301 {
302 downloading = false;
303 Log.e(TAG, "Error updating download progress: " + e.getMessage());
304 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100305
Jose Pascoal810950b2014-10-09 17:16:08 +0100306 cursor.close();
307 try
308 {
Filipe Gonçalves8ad8bfb2015-01-15 14:14:50 +0000309 Thread.sleep(PROGRESS_BAR_UPDATE_FREQUENCY_IN_MILLIS);
Jose Pascoal810950b2014-10-09 17:16:08 +0100310 } catch (InterruptedException e)
311 {
312 e.printStackTrace();
313 }
314 }
Jose Pascoalaa579a82014-11-05 22:17:16 +0000315 else
316 {
Jose Pascoalda015b12014-11-06 12:47:11 +0000317 if (cursor != null)
318 {
319 downloading = false;
320 cursor.close();
321 }
Jose Pascoalaa579a82014-11-05 22:17:16 +0000322 if (mDownloadManager == null)
323 {
324 downloading = false;
325 }
326 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100327 }
328 }
329 }).start();
330 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100331
Jose Pascoal810950b2014-10-09 17:16:08 +0100332 private void setupLayout(View view)
333 {
334 mDownloadVersionName = (TextView) view.findViewById(R.id.download_version_name_text);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100335
Jose Pascoal810950b2014-10-09 17:16:08 +0100336 // download in progress group
337 mVersionDownloadingGroup = (LinearLayout) view.findViewById(R.id.version_downloading_group);
338 mVersionDownloadProgressBar = (ProgressBar) view.findViewById(R.id.version_download_progress_bar);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100339
Jose Pascoal810950b2014-10-09 17:16:08 +0100340 // restart group
341 mVersionInstallGroup = (LinearLayout) view.findViewById(R.id.version_install_group);
342 mRestartButton = (Button) view.findViewById(R.id.restart_button);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100343
Jose Pascoal810950b2014-10-09 17:16:08 +0100344 mCancelButton = (Button) view.findViewById(R.id.cancel_button);
345 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100346
Jose Pascoal810950b2014-10-09 17:16:08 +0100347 @Override
348 public void onResume()
349 {
350 super.onResume();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100351
Jose Pascoal810950b2014-10-09 17:16:08 +0100352 setupInstallationReceivers();
353 registerDownloadBroadCastReceiver();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100354
Tiago Costa73eda412014-11-18 14:37:42 +0000355 registerNetworkStatusBoradcastReceiver();
356
Jose Pascoal8ed98d62014-10-09 20:41:11 +0100357 updateHeader();
Jose Pascoal1c049e02014-12-17 13:03:09 +0000358
Jose Pascoal02d86242014-12-17 18:50:08 +0000359 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
360 if (item != null)
Jose Pascoal1c049e02014-12-17 13:03:09 +0000361 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000362 mDownloadVersionName.setText(mainActivity.getItemName(item));
Tiago Costa198bf3d2014-12-16 15:23:18 +0000363 }
Jose Pascoal1c049e02014-12-17 13:03:09 +0000364
Jose Pascoal810950b2014-10-09 17:16:08 +0100365 toggleDownloadProgressAndRestart();
366 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100367
Tiago Costa73eda412014-11-18 14:37:42 +0000368 private void registerNetworkStatusBoradcastReceiver()
369 {
370 // Setup monitoring for future connectivity status changes
371 if (mNetworkStateReceiver != null)
372 {
373 mNetworkStateReceiver = new BroadcastReceiver()
374 {
375 @Override
376 public void onReceive(Context context, Intent intent)
377 {
378 if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false))
379 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000380 abortUpdateProcess();
Tiago Costa73eda412014-11-18 14:37:42 +0000381 }
382 }
383 };
384 }
385
386 IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
387 mainActivity.registerReceiver(mNetworkStateReceiver, filter);
388 }
389
390 private void unregisterNetworkStatusBoradcastReceiver()
391 {
392 if (mNetworkStateReceiver != null)
393 {
394 mainActivity.unregisterReceiver(mNetworkStateReceiver);
395
396 mNetworkStateReceiver = null;
397 }
398 }
399
Jose Pascoal810950b2014-10-09 17:16:08 +0100400 @Override
401 public void onPause()
402 {
403 super.onPause();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100404
Jose Pascoal810950b2014-10-09 17:16:08 +0100405 unregisterBroadCastReceiver();
Tiago Costa73eda412014-11-18 14:37:42 +0000406
407 unregisterNetworkStatusBoradcastReceiver();
Jose Pascoal810950b2014-10-09 17:16:08 +0100408 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100409
Jose Pascoal810950b2014-10-09 17:16:08 +0100410 private void setupInstallationReceivers()
411 {
412 mDownloadManager = (DownloadManager) mainActivity.getSystemService(Context.DOWNLOAD_SERVICE);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100413
Jose Pascoal810950b2014-10-09 17:16:08 +0100414 mDownloadBroadCastReceiver = new DownloadBroadCastReceiver();
415 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100416
Jose Pascoal810950b2014-10-09 17:16:08 +0100417 private void registerDownloadBroadCastReceiver()
418 {
419 mainActivity.registerReceiver(mDownloadBroadCastReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
420 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100421
Jose Pascoal810950b2014-10-09 17:16:08 +0100422 private void unregisterBroadCastReceiver()
423 {
424 mainActivity.unregisterReceiver(mDownloadBroadCastReceiver);
425 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100426
Jose Pascoal810950b2014-10-09 17:16:08 +0100427 private class DownloadBroadCastReceiver extends BroadcastReceiver
428 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100429
Jose Pascoal810950b2014-10-09 17:16:08 +0100430 @Override
431 public void onReceive(Context context, Intent intent)
432 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100433
Jose Pascoal810950b2014-10-09 17:16:08 +0100434 mainActivity.getLatestUpdateDownloadIdFromSharedPreference();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100435
Jose Pascoal810950b2014-10-09 17:16:08 +0100436 updateDownloadFile();
437 }
438 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100439
Jose Pascoal810950b2014-10-09 17:16:08 +0100440 private void updateDownloadFile()
441 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100442
Jose Pascoal810950b2014-10-09 17:16:08 +0100443 long downloadId = mainActivity.getLatestDownloadId();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100444
Jose Pascoal810950b2014-10-09 17:16:08 +0100445 if (downloadId != 0)
446 {
447 DownloadManager.Query query = new DownloadManager.Query();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100448
Jose Pascoal810950b2014-10-09 17:16:08 +0100449 query.setFilterById(downloadId);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100450
Jose Pascoalaa579a82014-11-05 22:17:16 +0000451 Cursor cursor = mDownloadManager != null ? mDownloadManager.query(query) : null;
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100452
Jose Pascoalaa579a82014-11-05 22:17:16 +0000453 if (cursor != null && cursor.moveToFirst())
Jose Pascoal810950b2014-10-09 17:16:08 +0100454 {
455 int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
456 int status = cursor.getInt(columnIndex);
457
458 switch (status)
459 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000460
Jose Pascoal810950b2014-10-09 17:16:08 +0100461 case DownloadManager.STATUS_SUCCESSFUL:
462 mainActivity.updateStatePreference(UpdaterState.PREINSTALL);
463 toggleDownloadProgressAndRestart();
464 break;
465 case DownloadManager.STATUS_RUNNING:
Tiago Costa7c47e2d2014-11-18 16:50:35 +0000466 case DownloadManager.STATUS_PENDING:
Jose Pascoal810950b2014-10-09 17:16:08 +0100467 startDownloadProgressUpdateThread();
468 break;
469 case DownloadManager.STATUS_FAILED:
470 Resources resources = getResources();
Jose Pascoal02d86242014-12-17 18:50:08 +0000471 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
472 if (item != null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100473 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000474 String downloadTitle = Utils.getDownloadTitleFromDownloadableItem(getResources(), item);
Jose Pascoal1c049e02014-12-17 13:03:09 +0000475 Toast.makeText(mainActivity, resources.getString(R.string.error_downloading) + " " + downloadTitle, Toast.LENGTH_LONG).show();
476 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100477 else
478 {
Pedro Arelo773bd822014-10-10 11:57:34 +0100479 Toast.makeText(mainActivity, resources.getString(R.string.error_downloading), Toast.LENGTH_LONG).show();
Jose Pascoal810950b2014-10-09 17:16:08 +0100480 }
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000481 abortUpdateProcess();
Jose Pascoal810950b2014-10-09 17:16:08 +0100482 break;
483 }
484 }
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100485 else
486 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000487 abortUpdateProcess();
Jose Pascoal3bc3a842014-10-16 19:03:21 +0100488 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100489
Jose Pascoalaa579a82014-11-05 22:17:16 +0000490 if (cursor != null)
491 {
492 cursor.close();
493 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100494 }
495 }
496
497 // ************************************************************************************
498 // PRE INSTALL
499 // ************************************************************************************
500
Jose Pascoal1c049e02014-12-17 13:03:09 +0000501 private void setupPreInstallState()
Tiago Costa198bf3d2014-12-16 15:23:18 +0000502 {
503 Resources resources = mainActivity.getResources();
Jose Pascoal1c049e02014-12-17 13:03:09 +0000504 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
505 if (item != null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100506 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000507 File file = new File(getDownloadPath(item));
Jose Pascoal810950b2014-10-09 17:16:08 +0100508
509 if (file.exists())
510 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000511 if (Utils.checkMD5(item.getMd5Sum(), file))
Jose Pascoal810950b2014-10-09 17:16:08 +0100512 {
513 copyUpdateToCache(file);
Jose Pascoal810950b2014-10-09 17:16:08 +0100514 }
515 else
516 {
Pedro Arelo773bd822014-10-10 11:57:34 +0100517 Toast.makeText(mainActivity, resources.getString(R.string.invalid_md5_download_message), Toast.LENGTH_LONG).show();
Jose Pascoal810950b2014-10-09 17:16:08 +0100518 removeLastUpdateDownload();
519 }
520 }
521 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100522 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100523
Jose Pascoal810950b2014-10-09 17:16:08 +0100524 // ************************************************************************************
525 // DOWNLOAD UPDATE
526 // ************************************************************************************
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100527
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000528 void setupDownloadState()
Jose Pascoal810950b2014-10-09 17:16:08 +0100529 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000530 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
Tiago Costa198bf3d2014-12-16 15:23:18 +0000531
Jose Pascoal810950b2014-10-09 17:16:08 +0100532 // setup the download state views
Jose Pascoal1c049e02014-12-17 13:03:09 +0000533 if (item == null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100534 {
535 Resources resources = getResources();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100536
Jose Pascoal810950b2014-10-09 17:16:08 +0100537 // we don't have the lastest.xml so get back to initial state
538 File updateDir = new File(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder));
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100539
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000540 final boolean delete = updateDir.delete();
541 if(!delete) {
542 Log.d(TAG, "Unable to delete "+updateDir.getAbsolutePath());
543 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100544
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000545 abortUpdateProcess();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100546
Jose Pascoal810950b2014-10-09 17:16:08 +0100547 return;
548 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100549
Jose Pascoal810950b2014-10-09 17:16:08 +0100550 // if there is a download ID on the shared preferences
551 if (mLatestUpdateDownloadId == 0)
552 {
553 mLatestUpdateDownloadId = mainActivity.getLatestUpdateDownloadIdFromSharedPreference();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100554
Jose Pascoal810950b2014-10-09 17:16:08 +0100555 // invalid download Id
556 if (mLatestUpdateDownloadId == 0)
557 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000558 abortUpdateProcess();
Jose Pascoal810950b2014-10-09 17:16:08 +0100559 return;
560 }
561 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100562
Jose Pascoal810950b2014-10-09 17:16:08 +0100563 updateDownloadFile();
564 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100565
Jose Pascoal810950b2014-10-09 17:16:08 +0100566 private void startPreInstall()
567 {
Filipe Gonçalves72dac942014-12-15 18:05:58 +0000568 Resources resources = getResources();
Jose Pascoal1c049e02014-12-17 13:03:09 +0000569 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
570
Jose Pascoal02d86242014-12-17 18:50:08 +0000571 File f = new File("/" + resources.getString(R.string.recoveryCachePath) + "/" + Utils.getFilenameFromDownloadableItem(item));
Filipe Gonçalves72dac942014-12-15 18:05:58 +0000572 if (!f.exists())
573 {
574 abortUpdateProcess();
Jose Pascoal1c049e02014-12-17 13:03:09 +0000575 }
576 else if (item != null && RootTools.isAccessGiven())
Jose Pascoal810950b2014-10-09 17:16:08 +0100577 {
578 // set the command for the recovery
Jose Pascoal810950b2014-10-09 17:16:08 +0100579 try
580 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100581
Jose Pascoal810950b2014-10-09 17:16:08 +0100582 Shell.runRootCommand(new CommandCapture(0, "rm -f /cache/recovery/command"));
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100583
Jose Pascoal810950b2014-10-09 17:16:08 +0100584 Shell.runRootCommand(new CommandCapture(0, "rm -f /cache/recovery/extendedcommand"));
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100585
Jose Pascoal810950b2014-10-09 17:16:08 +0100586 Shell.runRootCommand(new CommandCapture(0, "echo '--wipe_cache' >> /cache/recovery/command"));
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100587
Jose Pascoal0a5be012014-11-17 16:55:40 +0000588 if (Utils.hasUnifiedPartition(resources))
Jose Pascoal810950b2014-10-09 17:16:08 +0100589 {
590 Shell.runRootCommand(new CommandCapture(0, "echo '--update_package=/" + resources.getString(R.string.recoveryCachePath) + "/"
Jose Pascoal02d86242014-12-17 18:50:08 +0000591 + Utils.getFilenameFromDownloadableItem(item) + "' >> /cache/recovery/command"));
Jose Pascoal810950b2014-10-09 17:16:08 +0100592 }
593 else
594 {
595 Shell.runRootCommand(new CommandCapture(0, "echo '--update_package=/" + resources.getString(R.string.recoverySdCardPath)
Jose Pascoal02d86242014-12-17 18:50:08 +0000596 + resources.getString(R.string.updaterFolder) + Utils.getFilenameFromDownloadableItem(item) + "' >> /cache/recovery/command"));
Jose Pascoal810950b2014-10-09 17:16:08 +0100597 }
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000598 } catch (IOException | NotFoundException | TimeoutException | RootDeniedException e)
Jose Pascoal810950b2014-10-09 17:16:08 +0100599 {
Jose Pascoal810950b2014-10-09 17:16:08 +0100600 e.printStackTrace();
601 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100602
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000603 Editor editor = mSharedPreferences.edit();
Tiago Costa87925fe2014-12-02 17:57:51 +0000604 editor.remove(UpdaterService.PREFERENCE_REINSTALL_GAPPS);
Tiago Costa87925fe2014-12-02 17:57:51 +0000605 editor.commit();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100606
Jose Pascoal0a5be012014-11-17 16:55:40 +0000607 if (Utils.hasUnifiedPartition(resources))
Jose Pascoal810950b2014-10-09 17:16:08 +0100608 {
609 removeLastUpdateDownload();
610 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100611
Jose Pascoal810950b2014-10-09 17:16:08 +0100612 // remove the update files from data
613 removeUpdateFilesFromData();
Jose Pascoal733b84e2014-10-17 14:49:02 +0100614
Jose Pascoal810950b2014-10-09 17:16:08 +0100615 // reboot the device into recovery
Jose Pascoal810950b2014-10-09 17:16:08 +0100616 try
617 {
618 mainActivity.updateStatePreference(UpdaterState.NORMAL);
Jose Pascoal02d86242014-12-17 18:50:08 +0000619 mainActivity.clearSelectedItems();
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000620 clearConfigFile();
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000621 editor = mSharedPreferences.edit();
622 editor.remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS);
623 editor.remove(MainFragment.SHARED_PREFERENCES_ENABLE_GAPPS);
624 editor.commit();
Jose Pascoal810950b2014-10-09 17:16:08 +0100625 Shell.runRootCommand(new CommandCapture(0, "reboot recovery"));
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000626 } catch (IOException | TimeoutException | RootDeniedException e)
Jose Pascoal810950b2014-10-09 17:16:08 +0100627 {
Jose Pascoal810950b2014-10-09 17:16:08 +0100628 e.printStackTrace();
629 }
630 }
631 else
632 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000633 abortUpdateProcess();
Jose Pascoal810950b2014-10-09 17:16:08 +0100634 }
635 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100636
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000637 private void clearConfigFile()
638 {
639 long cfgFile = mainActivity.getConfigFileDownloadIdFromSharedPreference();
640 if (cfgFile != 0 && mDownloadManager != null)
641 {
642 mDownloadManager.remove(cfgFile);
643 }
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000644 mainActivity.clearConfigFileDownloadId();
Jose Pascoalc2545cc2014-12-18 16:51:52 +0000645 VersionParserHelper.removeConfigFiles(mainActivity);
646 }
647
Jose Pascoal810950b2014-10-09 17:16:08 +0100648 private void copyUpdateToCache(File file)
649 {
Jose Pascoal0a5be012014-11-17 16:55:40 +0000650 if (Utils.canCopyToCache(file))
Jose Pascoal810950b2014-10-09 17:16:08 +0100651 {
Jose Pascoal1c049e02014-12-17 13:03:09 +0000652 DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
Jose Pascoal733b84e2014-10-17 14:49:02 +0100653 CopyFileToCacheTask copyTask = new CopyFileToCacheTask();
Jose Pascoal1c049e02014-12-17 13:03:09 +0000654 if (item != null)
655 {
Jose Pascoal02d86242014-12-17 18:50:08 +0000656 copyTask.execute(file.getPath(), Environment.getDownloadCacheDirectory() + "/" + Utils.getFilenameFromDownloadableItem(item));
Jose Pascoal1c049e02014-12-17 13:03:09 +0000657 }
658 else
659 {
660 Toast.makeText(mainActivity, getResources().getString(R.string.no_space_available_cache_message), Toast.LENGTH_LONG).show();
661 abortUpdateProcess();
662 }
Jose Pascoal810950b2014-10-09 17:16:08 +0100663 }
664 else
665 {
Jose Pascoal0a5be012014-11-17 16:55:40 +0000666 if (Utils.hasUnifiedPartition(getResources()))
Jose Pascoal810950b2014-10-09 17:16:08 +0100667 {
Jose Pascoal0a5be012014-11-17 16:55:40 +0000668 Log.d(TAG, "No space on cache. Defaulting to Sdcard");
669 Toast.makeText(mainActivity, getResources().getString(R.string.no_space_available_cache_message), Toast.LENGTH_LONG).show();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100670
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000671 abortUpdateProcess();
Jose Pascoal810950b2014-10-09 17:16:08 +0100672 }
673 }
674 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100675
Jose Pascoal810950b2014-10-09 17:16:08 +0100676 // ************************************************************************************
677 // Update Removal
678 // ************************************************************************************
679 private void removeUpdateFilesFromData()
680 {
681 try
682 {
683 Shell.runRootCommand(new CommandCapture(0, getResources().getString(R.string.removePlayStoreCommand), getResources().getString(
684 R.string.removeGooglePlusCommand), getResources().getString(R.string.removeSoundSearchCommand), getResources().getString(
685 R.string.removeGmailCommand), getResources().getString(R.string.removePlayServicesCommand), getResources().getString(
686 R.string.removeQuicksearchCommand), getResources().getString(R.string.removeTalkbackCommand), getResources().getString(
687 R.string.removeText2SpeechCommand)));
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000688 } catch (IOException | TimeoutException | RootDeniedException e)
Jose Pascoal810950b2014-10-09 17:16:08 +0100689 {
690 e.printStackTrace();
691 }
692 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100693
Filipe Gonçalvesb31d5862015-02-04 17:28:58 +0000694 void removeLastUpdateDownload()
Jose Pascoal810950b2014-10-09 17:16:08 +0100695 {
696 long latestUpdateDownloadId = mainActivity.getLatestUpdateDownloadIdFromSharedPreference();
Jose Pascoalaa579a82014-11-05 22:17:16 +0000697 if (latestUpdateDownloadId != 0 && mDownloadManager != null)
Jose Pascoal810950b2014-10-09 17:16:08 +0100698 {
699 // residue download ID
700 mDownloadManager.remove(latestUpdateDownloadId);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100701
Jose Pascoal810950b2014-10-09 17:16:08 +0100702 mainActivity.resetLastUpdateDownloadId();
703 }
704 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100705
Jose Pascoal810950b2014-10-09 17:16:08 +0100706 private class CopyFileToCacheTask extends AsyncTask<String, Integer, Integer>
707 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100708
Jose Pascoal810950b2014-10-09 17:16:08 +0100709 ProgressDialog mProgress;
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100710
Jose Pascoal810950b2014-10-09 17:16:08 +0100711 @Override
712 protected Integer doInBackground(String... params)
713 {
714 // check the correct number of
715 if (params.length != 2)
716 {
717 return -1;
718 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100719
Jose Pascoal810950b2014-10-09 17:16:08 +0100720 String originalFilePath = params[0];
721 String destinyFilePath = params[1];
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100722
Jose Pascoal810950b2014-10-09 17:16:08 +0100723 if (RootTools.isAccessGiven())
724 {
Jose Pascoal0a5be012014-11-17 16:55:40 +0000725 Utils.clearCache();
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100726
Jose Pascoal810950b2014-10-09 17:16:08 +0100727 File otaFilePath = new File(originalFilePath);
728 File otaFileCache = new File(destinyFilePath);
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100729
Jose Pascoal810950b2014-10-09 17:16:08 +0100730 if (!otaFileCache.exists())
731 {
732 RootTools.copyFile(otaFilePath.getPath(), otaFileCache.getPath(), false, false);
733 }
734 }
Jose Pascoal733b84e2014-10-17 14:49:02 +0100735 else
736 {
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000737 abortUpdateProcess();
Jose Pascoal733b84e2014-10-17 14:49:02 +0100738 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100739
Jose Pascoal810950b2014-10-09 17:16:08 +0100740 return 1;
741 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100742
Jose Pascoal810950b2014-10-09 17:16:08 +0100743 protected void onProgressUpdate(Integer... progress)
744 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100745
Jose Pascoal810950b2014-10-09 17:16:08 +0100746 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100747
Jose Pascoal810950b2014-10-09 17:16:08 +0100748 protected void onPreExecute()
749 {
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100750
Jose Pascoal810950b2014-10-09 17:16:08 +0100751 if (mProgress == null)
752 {
753 String title = "";
Pedro Arelo773bd822014-10-10 11:57:34 +0100754 String message = mainActivity.getResources().getString(R.string.please_be_patient);
Jose Pascoal810950b2014-10-09 17:16:08 +0100755 mProgress = ProgressDialog.show(mainActivity, title, message, true, false);
756 }
757 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100758
Jose Pascoal810950b2014-10-09 17:16:08 +0100759 protected void onPostExecute(Integer result)
760 {
761 // disable the spinner
762 if (mProgress != null)
763 {
764 mProgress.dismiss();
765 mProgress = null;
766 }
767 }
768 }
Jose Pascoal54b3ae62014-10-07 20:29:58 +0100769
Jose Pascoal1c049e02014-12-17 13:03:09 +0000770 private String getDownloadPath(DownloadableItem item)
Jose Pascoal810950b2014-10-09 17:16:08 +0100771 {
772 Resources resources = mainActivity.getResources();
Jose Pascoal02d86242014-12-17 18:50:08 +0000773 return Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder) + Utils.getFilenameFromDownloadableItem(item);
Tiago Costa198bf3d2014-12-16 15:23:18 +0000774 }
Jose Pascoalb397dc62014-10-13 19:26:58 +0100775
Filipe Gonçalvescd0f33d2014-12-15 15:05:15 +0000776 public void abortUpdateProcess()
Jose Pascoalb397dc62014-10-13 19:26:58 +0100777 {
Tiago Costa73eda412014-11-18 14:37:42 +0000778 removeLastUpdateDownload();
779
Jose Pascoal87758742015-01-28 20:00:22 +0000780 mainActivity.clearSelectedItems();
781 mainActivity.updateStatePreference(UpdaterState.NORMAL);
Jose Pascoalb397dc62014-10-13 19:26:58 +0100782 }
Jose Pascoalb690af12014-10-06 18:29:26 +0100783}