mirror of
https://github.com/whyorean/AuroraStore.git
synced 2026-06-16 03:31:02 -04:00
Issue #19 fix. Error reporting on download errors and dl dir problems
This commit is contained in:
@@ -12,6 +12,7 @@ import android.content.IntentFilter;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
@@ -37,6 +38,7 @@ import android.widget.Toast;
|
||||
import com.github.yeriomin.yalpstore.model.App;
|
||||
import com.github.yeriomin.yalpstore.model.Review;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -61,15 +63,29 @@ public class DetailsActivity extends Activity {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Bundle extras = intent.getExtras();
|
||||
if (null != extras) {
|
||||
long id = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID);
|
||||
System.out.println("downloadId=" + downloadId + " id=" + id);
|
||||
if (downloadId == id) {
|
||||
Button button = (Button) findViewById(R.id.download);
|
||||
button.setText(R.string.details_install);
|
||||
button.setEnabled(true);
|
||||
}
|
||||
if (null == extras) {
|
||||
return;
|
||||
}
|
||||
long id = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID);
|
||||
if (downloadId != id) {
|
||||
return;
|
||||
}
|
||||
DownloadManager.Query q = new DownloadManager.Query();
|
||||
q.setFilterById(id);
|
||||
DownloadManager dm = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
|
||||
Cursor cursor = dm.query(q);
|
||||
if (!cursor.moveToFirst()) {
|
||||
return;
|
||||
}
|
||||
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
|
||||
int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
|
||||
Button button = (Button) findViewById(R.id.download);
|
||||
if (status == DownloadManager.STATUS_SUCCESSFUL || reason == DownloadManager.ERROR_FILE_ALREADY_EXISTS) {
|
||||
button.setText(R.string.details_install);
|
||||
} else {
|
||||
button.setText(R.string.details_download);
|
||||
}
|
||||
button.setEnabled(true);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -356,10 +372,22 @@ public class DetailsActivity extends Activity {
|
||||
getString(R.string.dialog_message_purchasing_app),
|
||||
getString(R.string.dialog_title_purchasing_app)
|
||||
);
|
||||
if (checkPermission()) {
|
||||
task.execute();
|
||||
File dir = PlayStoreApiWrapper.getApkPath(app).getParentFile();
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
if (dir.exists() && dir.isDirectory() && dir.canWrite()) {
|
||||
if (checkPermission()) {
|
||||
task.execute();
|
||||
} else {
|
||||
requestPermission();
|
||||
}
|
||||
} else {
|
||||
requestPermission();
|
||||
Toast.makeText(
|
||||
getApplicationContext(),
|
||||
getString(R.string.error_downloads_directory_not_writable),
|
||||
Toast.LENGTH_LONG
|
||||
).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -21,45 +21,84 @@ import static android.content.Context.DOWNLOAD_SERVICE;
|
||||
public class DownloadBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Bundle extras = intent.getExtras();
|
||||
public void onReceive(Context c, Intent i) {
|
||||
Bundle extras = i.getExtras();
|
||||
DownloadManager.Query q = new DownloadManager.Query();
|
||||
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
|
||||
|
||||
DownloadManager dm = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
|
||||
Cursor c = dm.query(q);
|
||||
if (c.moveToFirst()) {
|
||||
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
|
||||
int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON));
|
||||
DownloadManager dm = (DownloadManager) c.getSystemService(DOWNLOAD_SERVICE);
|
||||
Cursor cursor = dm.query(q);
|
||||
if (cursor.moveToFirst()) {
|
||||
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
|
||||
int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
|
||||
String packageName = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));
|
||||
if (status == DownloadManager.STATUS_SUCCESSFUL || reason == DownloadManager.ERROR_FILE_ALREADY_EXISTS) {
|
||||
File file = new File(Uri.parse(c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))).getPath());
|
||||
Intent i = PlayStoreApiWrapper.getOpenApkIntent(context, file);
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
File file = new File(Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))).getPath());
|
||||
Intent openApkIntent = PlayStoreApiWrapper.getOpenApkIntent(c, file);
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
|
||||
if (sharedPreferences.getBoolean(PreferenceActivity.PREFERENCE_AUTO_INSTALL, false)) {
|
||||
context.startActivity(i);
|
||||
c.startActivity(openApkIntent);
|
||||
} else {
|
||||
String title = c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE));
|
||||
createNotification(context, i, title);
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.notification_download_complete_toast, title),
|
||||
Toast.LENGTH_LONG
|
||||
).show();
|
||||
createNotification(c, openApkIntent, packageName, c.getString(R.string.notification_download_complete));
|
||||
toast(c, c.getString(R.string.notification_download_complete_toast, packageName));
|
||||
}
|
||||
} else if (reason > 0) {
|
||||
String error = getErrorString(c, reason);
|
||||
toast(c, error);
|
||||
createNotification(c, new Intent(), packageName, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createNotification(Context context, Intent intent, String packageName) {
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, 0);
|
||||
private void toast(Context c, String message) {
|
||||
Toast.makeText(c, message, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
private String getErrorString(Context context, int reason) {
|
||||
int stringId;
|
||||
switch (reason) {
|
||||
case DownloadManager.ERROR_CANNOT_RESUME:
|
||||
stringId = R.string.download_manager_ERROR_CANNOT_RESUME;
|
||||
break;
|
||||
case DownloadManager.ERROR_DEVICE_NOT_FOUND:
|
||||
stringId = R.string.download_manager_ERROR_DEVICE_NOT_FOUND;
|
||||
break;
|
||||
case DownloadManager.ERROR_FILE_ERROR:
|
||||
stringId = R.string.download_manager_ERROR_FILE_ERROR;
|
||||
break;
|
||||
case DownloadManager.ERROR_HTTP_DATA_ERROR:
|
||||
stringId = R.string.download_manager_ERROR_HTTP_DATA_ERROR;
|
||||
break;
|
||||
case DownloadManager.ERROR_INSUFFICIENT_SPACE:
|
||||
stringId = R.string.download_manager_ERROR_INSUFFICIENT_SPACE;
|
||||
break;
|
||||
case DownloadManager.ERROR_TOO_MANY_REDIRECTS:
|
||||
stringId = R.string.download_manager_ERROR_TOO_MANY_REDIRECTS;
|
||||
break;
|
||||
case DownloadManager.ERROR_UNHANDLED_HTTP_CODE:
|
||||
stringId = R.string.download_manager_ERROR_UNHANDLED_HTTP_CODE;
|
||||
break;
|
||||
case 1010: // This constant hasn't been introduced in api 9
|
||||
stringId = R.string.download_manager_ERROR_BLOCKED;
|
||||
break;
|
||||
case DownloadManager.ERROR_UNKNOWN:
|
||||
default:
|
||||
stringId = R.string.download_manager_ERROR_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
return context.getString(stringId);
|
||||
}
|
||||
|
||||
private void createNotification(Context c, Intent intent, String packageName, String message) {
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(c, 1, intent, 0);
|
||||
Notification notification = NotificationUtil.createNotification(
|
||||
context,
|
||||
c,
|
||||
pendingIntent,
|
||||
packageName,
|
||||
context.getString(R.string.notification_download_complete),
|
||||
message,
|
||||
R.mipmap.ic_launcher
|
||||
);
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(packageName.hashCode(), notification);
|
||||
NotificationManager manager = (NotificationManager) c.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
manager.notify(packageName.hashCode(), notification);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
<string name="error_no_network">Нет соединения с сетью.</string>
|
||||
<string name="error_network_other" formatted="false">Сетевая ошибка: %s</string>
|
||||
<string name="error_not_purchased">Похоже, это приложение не было куплено.</string>
|
||||
<string name="error_downloads_directory_not_writable">Каталог закачек недоступен для записи.</string>
|
||||
<string name="details_installs" formatted="false">%s ↓</string>
|
||||
<string name="details_rating" formatted="false">%.1f★</string>
|
||||
<string name="details_rating_specific" formatted="false">%d★ %d</string>
|
||||
@@ -67,4 +68,13 @@
|
||||
<string name="pref_auto_install">Устанавливать приложения сразу</string>
|
||||
<string name="pref_clear_ignored_apps">Очистить список игнорируемых приложений</string>
|
||||
<string name="pref_done">Готово</string>
|
||||
<string name="download_manager_ERROR_UNKNOWN">Неизвестная ошибка.</string>
|
||||
<string name="download_manager_ERROR_FILE_ERROR">Неизвестная ошибка сохранения файла.</string>
|
||||
<string name="download_manager_ERROR_UNHANDLED_HTTP_CODE">Сетевая ошибка. Попробуйте позднее.</string>
|
||||
<string name="download_manager_ERROR_HTTP_DATA_ERROR">Сетевая ошибка. Попробуйте позднее.</string>
|
||||
<string name="download_manager_ERROR_TOO_MANY_REDIRECTS">Сетевая ошибка. Слишком много редиректов.</string>
|
||||
<string name="download_manager_ERROR_INSUFFICIENT_SPACE">Недостаточно места на устройстве.</string>
|
||||
<string name="download_manager_ERROR_DEVICE_NOT_FOUND">Устройство хранения недоступно. Вынули SD карту?</string>
|
||||
<string name="download_manager_ERROR_CANNOT_RESUME">Сетевая ошибка. Попробуйте позднее.</string>
|
||||
<string name="download_manager_ERROR_BLOCKED">Загрузка прервана из-за настроек безопасности NetworkPolicyManager.</string>
|
||||
</resources>
|
||||
@@ -32,6 +32,7 @@
|
||||
<string name="error_no_network">No network connection.</string>
|
||||
<string name="error_network_other" formatted="false">Network error: %s</string>
|
||||
<string name="error_not_purchased">The app does not seem to be purchased.</string>
|
||||
<string name="error_downloads_directory_not_writable">Downloads directory could not be created or is not writable.</string>
|
||||
<string name="details_installs" formatted="false">%s ↓</string>
|
||||
<string name="details_rating" formatted="false">%.1f★</string>
|
||||
<string name="details_rating_specific" formatted="false">%d★ %d</string>
|
||||
@@ -67,4 +68,13 @@
|
||||
<string name="pref_auto_install">Install apps immediately</string>
|
||||
<string name="pref_clear_ignored_apps">Clear ignored apps list</string>
|
||||
<string name="pref_done">Done</string>
|
||||
<string name="download_manager_ERROR_UNKNOWN">Unknown error.</string>
|
||||
<string name="download_manager_ERROR_FILE_ERROR">Unknown file storage error.</string>
|
||||
<string name="download_manager_ERROR_UNHANDLED_HTTP_CODE">HTTP code was received that download manager can not handle. This is a server error.</string>
|
||||
<string name="download_manager_ERROR_HTTP_DATA_ERROR">Error receiving or processing data occurred at the HTTP level.</string>
|
||||
<string name="download_manager_ERROR_TOO_MANY_REDIRECTS">Too many redirects.</string>
|
||||
<string name="download_manager_ERROR_INSUFFICIENT_SPACE">Insufficient storage space.</string>
|
||||
<string name="download_manager_ERROR_DEVICE_NOT_FOUND">No external storage device was found. Maybe the SD card is not mounted.</string>
|
||||
<string name="download_manager_ERROR_CANNOT_RESUME">Some possibly transient error occurred but we can not resume the download. Retry later.</string>
|
||||
<string name="download_manager_ERROR_BLOCKED">Download has failed because of NetworkPolicyManager controls on the requesting application. Check your settings.</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user