Есть люди, что способны все делать правильно на лету.
А есть те, кто вынужден догонять первых методичным,
маниакальным упорством и самоконтролем.
Гением мне не стать, но мы ещё посмотрим, кто круче.
/**
* Считываем результат дочерней активности
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
boolean isLogging = false;
try {
if (logcat != null) {
isLogging = logcat.isLogging();
logcat.set_Logging(false);
logcat.LogD(this, "Запущена функция onActivityResult");
}
switch (requestCode) { // В зависимости от того, какое дочернее окно вернуло результат
case GoogleAuthProcess.RC_SIGN_IN: // Завершена авторизация
// Считываем результат аутентификации
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (logcat != null) logcat.LogD(this, "Получен результат авторизации...");
// --------------- //
// Проверка успеха //
// --------------- //
if (result.isSuccess()) { // Успешная авторизаци
final GoogleSignInAccount acct = result.getSignInAccount();
final String name = acct.getGivenName();
final String last_name = acct.getFamilyName();
final String email = acct.getEmail();
if (textUserName != null) {
textUserName.setText(name + " " + last_name);
}
if (textUserEMail != null) {
textUserEMail.setText(email);
}
final Uri photoUrl = acct.getPhotoUrl();
if (photoUrl != null) { // Если путь к логотипу получен
getUser().set_photo_Uri(photoUrl);
// ------------------------- //
// Попытка загрузки логотипа //
// ------------------------- //
final String path = photoUrl.toString(); // Преобразуем путь в строку
// Определяем обработчик результатов загрузки изображения
final IBhriguResultListener<Bitmap> listener = get_logo_listenter(); // END: listener
BhriguNetworkUtils._decode_bitmap_from_url( // Запускаем процес загрузки изображения
activity,
path,
TIMER_LOGO,
listener);
} // END: Запуск загрузки логотипа в случае успешной авторизации
mAuthorization_Status = AUTH_STATUS.AUTH_SUCCESS;
// Принудительный переход на вторую страницу
if (getCurrentFrameIndex() == PAGE_SIGNIN)
setCurrentFrameIndex(PAGE_DIRECTORY); // Закончена авторизация
// Прописываем в текущего пользователя полученные из авторизации данные
activity.setUser(getUser().set_name(name).set_lastName(last_name).set_email(email));
activity.runOnUiThread(new Runnable() { // Перерисовка
@Override
public void run() {
activity.setViewInvalidated();
activity.reDraw("Получен профиль пользователя: " + name);
}
});
} else { // Не успешная авторизация
mAuthorization_Status = AUTH_STATUS.AUTH_FAIL;
if (activity.textUserName != null) activity.textUserName.setText("");
if (activity.textUserEMail != null)
activity.textUserEMail.setText("Неуспех авторизации");
if (activity.user_logo_nav != null)
activity.user_logo_nav.setImageResource(android.R.drawable.sym_def_app_icon);
try { // Сообщение пользователю
Toast.makeText(activity, "Не успех авторизации.", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// Ничего не делаем
} // END: Сообщение пользователю
activity.setViewInvalidated();
activity.reDraw("Неуспех получения профиля пользователя.");
} // END: Проверка успешности авторизации
final String text = "Авторизация вернула результат..." + result.getStatus();
if (logcat != null) logcat.LogD(this, text);
break;
case IrmaMainActivity.ID_LIST_OF_FIELDS: // Активность редактирования полей MP3
String message_activity_result_code = ""
+ "Сработал код результата: "
+ "id3_editor.ID_LIST_OF_FIELDS"
+ " (" + IrmaMainActivity.ID_LIST_OF_FIELDS + ")";
logcat.LogD("Обработка результата открытия дочерней активности", message_activity_result_code, "blue");
if (resultCode == RESULT_OK) // Только если не было отмены
if (data != null) { // Проверка, передавало ли окно изменения свойств MP3 какие-либо данные
String error;
try { // Проверяем, пришло ли сообщение об ошибке в сообщении о результате
error = data.getStringExtra(TOKEN_ERROR);
} catch (Exception e) {
String message = ""
+ "Сбой получения описания ошибки в обработке результата возвращенного окном изменения MP3: "
+ e;
throw new Exception(message);
} // END: Проверяем, пришло ли сообщение об ошибке в сообщении о результате
String changes;
try { // Проверяем, пришло ли сообщение об изменнении в файле
changes = data.getStringExtra(TOKEN_CHANGES);
} catch (Exception e) {
String message = "Сбой получения признака изменения MP3 редактором полей ID3: " + e;
throw new Exception(message);
} // END: Проверяем, пришло ли сообщение об изменнении в файле
try { // Выводим на экран сообщение о возникшей ошибке, если таковая присутствовала
if (error != null) { // Если ошибки найдены
logcat.LogE(this, error);
new AlertWindow(logcat).createAlert("Ошибка", error).show();
IrmaDirListFragment dir_list_fragment = (IrmaDirListFragment) get_current_fragment();
dir_list_fragment.refresh_dir();
} else { // Ошибок нет
if (changes != null)
if (changes.equals("YES")) {
IrmaDirListFragment dir_list_fragment = (IrmaDirListFragment) get_current_fragment();
dir_list_fragment.refresh_dir();
}
setViewInvalidated(); // Требуется перезагрузка фрагмента
reDraw("Закрылось окно просмотра содержимого полей ID3.");
}
} catch (Exception e1) {
logcat.LogD(this, "Не удалось вывести диалог с описанием ошибки на экран: " + e1);
}
} else {
logcat.LogE(this, "Окно изменения свойств MP3 не передало данные основному.");
//Refresh_current_fragment();
}
break;
case GoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR: // Обработка реакции пользователя на запрос авторизации на доступ к данным профиля
message_activity_result_code = ""
+ "Сработал код результата: "
+ "GoogleGoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR"
+ " (" + GoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR + ")";
logcat.LogD(
"Обработка результата открытия дочерней активности",
message_activity_result_code, "blue");
requestCode = RESULT_CANCELED;
String message1 = ""
+ "Обнаружена реакция на диалог запроса разрешения от польователя."
+ LogCatLog.EOS
+ "Результат: " + resultCode;
logcat.LogD(this, message1);
if (resultCode == -1) { // Разрешение получено
logcat.LogD("OnActivityResult", "Пользователь подтвердил права доступа к учетной записи...");
} else { // Пользователь не дал разрешение на доступ к учетной записи.
// Создаем диалог
final String message_user_mast_select_profile = ""
+ "Вы должны дать разрешение на доступ к данным "
+ "вашего профиля для завершения регистрации.";
new AlertWindow(logcat)
.createAlert_two_buttons(
"Ошибка", // Заголовок диалога
message_user_mast_select_profile, // Сообщение пользователю
"Повторить", // Заголовок клавиши 1
new Thread() { // Об
@Override
public void run() {
try {
GetUserProfile(getUser()); // Повторный вызов запроса профиля пользователя
} catch (Exception e) {
logcat.LogE(this, "Ошибка получения данных профиля пользователя : " + e);
}
}
},
"Отменить",
new Thread() {
@Override
public void run() {
finish();
}
}
).show();
}
break;
case GoogleAuthProcess.REQUEST_CODE_PICK_ACCOUNT: // Если результат пришел от актвиности выбора аккаунта
message_activity_result_code = ""
+ "Сработал код результата: "
+ "GoogleGoogleAuthProcess.REQUEST_CODE_PICK_ACCOUNT"
+ " (" + GoogleAuthProcess.REQUEST_CODE_PICK_ACCOUNT + ")";
logcat.LogD("onActivityResult", message_activity_result_code, "blue");
if (resultCode == RESULT_OK) { // Если пользователь выбрал
// Считываем из экстра имя аккаунта (email)
String email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
if (email != null)
logcat.LogD(this, "Получен следующий меил пользователя от окна выбора аккаутов: " + email);
else
throw new CriticalException(activity, "Пользователь выбрал аккаунт, но данные почты не пришли.");
getUser().set_email(email);
try { // Запрашиваем из профиля пользователя его учетные данные - имя пользователя
GetUserProfile(getUser());
} catch (CriticalException e) {
throw e;
} catch (OutOfMemoryError e) { // Нехватка памяти - отправляем наверх
try {
logcat.NoMemoryAlert();
} catch (Exception e1) {
e1.printStackTrace();
}
throw e;
} catch (Throwable e) { // Другие ошибки - реагируем
String message = "Ошибка повторного запроса профиля пользователя: " + e;
logcat.LogE(this, message);
}
// Пользователь отказался от выбора аккаунта
} else if (resultCode == RESULT_CANCELED) {
logcat.LogE(this, "Пользователь не выбрал аккаунт. Закрываю программу.");
final String message_to_user_select_account = ""
+ "Хозяин, если вы не выберите аккаунт я вынужден буду закрыть программу! "
+ "Выберите аккаунт или создайте, пожалуйства, новый!";
new AlertWindow(logcat).createAlert_two_buttons(
"Внимание!", // Заголовок окна
message_to_user_select_account, // Сообщение пользователю
"Повторить", // Заголовок клавиши 1
new Thread() { // Реакция на повторить
@Override
public void run() {
pickUserAccount();
}
},
"Закрыть", // Заголовок клавиши 2
new Thread() { // Реакция на закрыть
@Override
public void run() {
// Ничего не делаем
finish();
}
}
).show();
}
break;
case GoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_AUTH_ERROR:
message_activity_result_code = ""
+ "Сработал код результата: "
+ "GoogleGoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_AUTH_ERROR"
+ " (" + GoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_AUTH_ERROR + ")";
logcat.LogD(
"Обработка результата открытия дочерней активности",
message_activity_result_code, "blue");
if (resultCode == RESULT_OK) {
String message = ""
+ "Сработал GoogleGoogleAuthProcess.REQUEST_CODE_RECOVER_FROM_AUTH_ERROR "
+ "или "
+ "REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR";
logcat.LogD("onActivityResult", message);
try {
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// Ничего не делаем
}
return;
}
break;
} // Конец switch
} catch (OutOfMemoryError e) { // Нехватка памяти - отправляем наверх
try {
logcat.NoMemoryAlert();
} catch (Exception e1) {
e1.printStackTrace();
}
throw e;
} catch (Throwable e) { // Другие ошибки - реагируем
String message = "Сбой функции обработки результата активации: " + e;
throw new CriticalException(activity, message);
} finally {
logcat.set_Logging(isLogging);
}
super.onActivityResult(requestCode, resultCode, data);
} // Конец функции onActivityResult