mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
* Localisation updates from https://translatewiki.net. * Fixes #4357 After switching to different account, contributions screen shows pictures of previous account (#4421) * Update UploadMediaDetailFragment.java * Update LoginActivity.java Clear CompositeDisposable after logging in successfully. It may help solve the problem of saving the contribution to the previous account * Revert "Update UploadMediaDetailFragment.java" This reverts commitb1b4257f20. Co-authored-by: Obsidian_zero <1198474846@qq.com> * Remove unnecessary whitespace from a message (#4439) * Merge v3.0.1 into master (#4446) * Versioning and changelog for v3.0.0 (#4152) * Versioning for v3.0.0 * Update changelog.md * Handled migration 8-9-10 in BookmarksLocationDao (#4154) * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 * Fixes #4179 (#4180) * Handled null pointer exception in MainActivity->ContributionsFragment#backButtonClicked() * Updated >ContributionsFragment#backButtonClicked() to handle back press properly * Fixes #4179 (#4181) * Handled possible null check on MediaDetails in BookmarkListRootFragment#backPressed() * Cherrypick for hotfix3.1 (#4205) * Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. * fixed bug: App crashes on viewing review in Review Fragment #4132 (#4146) * fixed bug:app crashes on viewing review in Review Fragment #4135 * Fixed the issue with back button in contribution tab. (#4177) Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> * Fixed the issue with back navigation button on toolbar in explore tab. (#4175) * Fix (#4148) Issues on theme change * fixed themeChange crashes * fixed comments * Overlooked the title bar Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Aditya-Srivastav <54016427+4D17Y4@users.noreply.github.com> * Fixes #4173 (#4396) * Fix #4147 Pre-fill desc in Nearby uploads with Wikidata item's label + description (#4390) * Update query to fetch descriptions * Make description added to NearbyResultItem * Make string operations to display description and label in a combined way * Fix reviews, remove long description from list and swap label and description texts * Fix repeated information issue * Fix double information issue * fix style issues * Remove douplicated information * Changes made (#4354) * Remove nonexistent method * Fix #4283 IllegalStateException (#4440) * Fix #4283 IllegalStateException * Fix flickering issue * Versioning for v3.0.1 * Update changelog.md Co-authored-by: Ashish <ashishkumar468@gmail.com> Co-authored-by: neslihanturan <tur.neslihan@gmail.com> Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Aditya-Srivastav <54016427+4D17Y4@users.noreply.github.com> Co-authored-by: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Co-authored-by: Vinayak Aggarwal <56196007+vinayak0505@users.noreply.github.com> * Localisation updates from https://translatewiki.net. * Added a feature for editing coordinates (#4418) * not * Place Picker added * Pick location and API call linked * minor warnings resolved * Code conventions followed * issue fixed * Wikitext edited properly * minor modification * Location Picker added * Bottom sheet removed * Location picker fully implemented * credit added * credit added * issues fixed * issues fixed * minor issue fixed * Some build issues occured merging release v3.0 are fixed. One paranthesis issue is solved, a method about UploadService is removed, since we don't use it anymore. (#4451) * Localisation updates from https://translatewiki.net. * Fixes 4344 - Duplicate Uploads (#4442) * Fixes 4344 - Update the retention policy of the Work Manager to ExistingWorkPolicy.APPEND_OR_REPLACE- which would append the new work to the end of existing one. This helps remove the while loop in UploadWorker which was meant to handle the cases where a new worker would be created for retries. The while loop seemed to have race conditions uploading duplicate entries. * Update states to IN_PROGRESS before uploads are processed * Fixes #3694 Pre-select places as depictions (#4452) * WikidataEditService: stop automatically adding WikidataPlace as a depiction When the user initiates the upload process from Nearby and also manually adds the place as a depiction, the depiction is added twice. Since this behavior is invisible to the user, it is being removed in preparation for auto-selecting the place as a depiction on the DepictsFragment screen. * DepictsFragment: auto-select place as a depiction Pass the Place reference from UploadActivity to DepictsFragment and select the corresponding DepictedItem. Using the place id, retrieve the corresponding Entity to create and select a DepictedItem. * UploadRepository: use Place from UploadItem to obtain a DepictedItem Instead of passing a Place object from UploadActivity to DepictsFragment and then passing the Place object up the chain to obtain and select a DepictedItem, retrieve the Place object directly within UploadRepository * DepictsFragment: select Place depiction when fragment becomes visible * UploadDepictsAdapter: make adapter aware of selection state Update selection state when recycled list items are automatically selected, preventing automatically selected items from appearing as unselected until they are forced to re-bind (i.e. after scrolling) * DepictsFragment: pre-select place depictions for all UploadItems If several images are selected and set to different places, pre-select all place depictions to reinforce the intended upload workflow philosophy (i.e. all images in a set are intended to be from/of the same place). See discussion in commons-app/apps-android-commons#3694 * DepictsFragment: scroll to the top every time list is updated * Typo fixes (#4461) * Fixed typo on class documentation of TextUtils * corrected comma placement in documentation * Fixed typos in comments * fix-issue-4424 (#4445) Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> * fix edit categories ui (#4414) Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> * Fix doom version issue (#4463) * Update db version * DBOpenHelper version update * fix :Back Pressed Event not work in Explore tab when user not login (#4404) * fix :Back Pressed Event not work in Explore tab * minor changes * fix :Upload count or number of contribution does not get updated when media is successful uploaded (#4399) * * fix:Number of Contributions not updated * Add javadocs * minor changes * made minor changes * String was nonsense and untranslatible, fixed (#4466) * Ability to show captions and descriptions in all entered languages (#4355) * implement Ability to show captions and descriptions in all entered languages *Add Javadoc * handle Back event of fragment(mediaDetailFragment) * fix minor bugs * add internationalization * revert previous changes * fix visibility bug * resolve conflict * Fixes #4437 - Changed indentation on files with 2 spaces to 4 spaces (#4462) * Edited Project.xml to make indent size 4 * Changed files with 2 space indentation to use 4 space indentation * Edited Project.xml to make indent size 4 * changed files with 2 space indent to 4 space indent * fix :Back Pressed Event not work in Explore tab when user not login (#4404) * fix :Back Pressed Event not work in Explore tab * minor changes * fix :Upload count or number of contribution does not get updated when media is successful uploaded (#4399) * * fix:Number of Contributions not updated * Add javadocs * minor changes * made minor changes * String was nonsense and untranslatible, fixed (#4466) * Ability to show captions and descriptions in all entered languages (#4355) * implement Ability to show captions and descriptions in all entered languages *Add Javadoc * handle Back event of fragment(mediaDetailFragment) * fix minor bugs * add internationalization * revert previous changes * fix visibility bug * resolve conflict Co-authored-by: Prince kushwaha <65972015+Prince-kushwaha@users.noreply.github.com> Co-authored-by: neslihanturan <tur.neslihan@gmail.com> * Use more understandable strings (#4470) * Fix #3792 Missing Column Issue (#4468) * Fix Missing Column Issue * Fix tests * Add UploadCategoriesFragment Unit Tests (#4473) * Panorama (#4467) * panoramic images fixed * made requested changes * Minor refactoring Co-authored-by: Aditya Srivastava <iamaditya2009@gmail.com> * Localisation updates from https://translatewiki.net. * Main activity title is sometimes "Contributions", sometimes "Commons" (#4472) Fixes #4438 Replace == with equals() in onRestoreInstanceState * Localisation updates from https://translatewiki.net. * caption and description copyable (#4481) * Removed next button in quiz (#4382) * issues resolved * modification done * warning fixed * issues resolved * Button added * don't know function added * Button added * modification done * modification done * Localisation updates from https://translatewiki.net. * Added option to show and modify location while uploading (#4475) * initial commit * Everything done * minor modification * minor modification * Issues fixed * minor modifications * issue fixed * Issues fixed * Tutorial removed from log out state (#4479) * tutorial removed from log out state * Issue removed * Update changelog.md * Versioning for v3.0.2 * Fix #4482 (#4484) * Fix crash when image resolution is very high (#4483) * Localisation updates from https://translatewiki.net. * Add Contributions Fragment Unit Tests (#4490) * Fix Tests Errors (#4491) * Add UploadMediaDetailFragment Unit Tests (#4492) * Localisation updates from https://translatewiki.net. * Localisation updates from https://translatewiki.net. * Localisation updates from https://translatewiki.net. * Initialised xmls, made folder and image item. * xmls done * xmls completed * removed unwanted attribute * Created models, adapters and view models (#4441) * created models, adapters and view models * Added Image Fragment * back button linked * Documentation and refractor * spaces * Butterknife annotation * DiffUtil * Added Examples * Extended Custom selector From Base Activity * made view model injectable * [GSOC] Added Image Fetch (#4449) * Added basic Fetch * added permission request * Folder count rectified * Loaded thumbnail * disabled overlay * Added sha1 function * Documented the code * [GSoC] Image Selection (#4457) * Localisation updates from https://translatewiki.net. * Fixes #4357 After switching to different account, contributions screen shows pictures of previous account (#4421) * Update UploadMediaDetailFragment.java * Update LoginActivity.java Clear CompositeDisposable after logging in successfully. It may help solve the problem of saving the contribution to the previous account * Revert "Update UploadMediaDetailFragment.java" This reverts commitb1b4257f20. Co-authored-by: Obsidian_zero <1198474846@qq.com> * Remove unnecessary whitespace from a message (#4439) * Merge v3.0.1 into master (#4446) * Versioning and changelog for v3.0.0 (#4152) * Versioning for v3.0.0 * Update changelog.md * Handled migration 8-9-10 in BookmarksLocationDao (#4154) * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 * Fixes #4179 (#4180) * Handled null pointer exception in MainActivity->ContributionsFragment#backButtonClicked() * Updated >ContributionsFragment#backButtonClicked() to handle back press properly * Fixes #4179 (#4181) * Handled possible null check on MediaDetails in BookmarkListRootFragment#backPressed() * Cherrypick for hotfix3.1 (#4205) * Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. * fixed bug: App crashes on viewing review in Review Fragment #4132 (#4146) * fixed bug:app crashes on viewing review in Review Fragment #4135 * Fixed the issue with back button in contribution tab. (#4177) Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> * Fixed the issue with back navigation button on toolbar in explore tab. (#4175) * Fix (#4148) Issues on theme change * fixed themeChange crashes * fixed comments * Overlooked the title bar Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Aditya-Srivastav <54016427+4D17Y4@users.noreply.github.com> * Fixes #4173 (#4396) * Fix #4147 Pre-fill desc in Nearby uploads with Wikidata item's label + description (#4390) * Update query to fetch descriptions * Make description added to NearbyResultItem * Make string operations to display description and label in a combined way * Fix reviews, remove long description from list and swap label and description texts * Fix repeated information issue * Fix double information issue * fix style issues * Remove douplicated information * Changes made (#4354) * Remove nonexistent method * Fix #4283 IllegalStateException (#4440) * Fix #4283 IllegalStateException * Fix flickering issue * Versioning for v3.0.1 * Update changelog.md Co-authored-by: Ashish <ashishkumar468@gmail.com> Co-authored-by: neslihanturan <tur.neslihan@gmail.com> Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Aditya-Srivastav <54016427+4D17Y4@users.noreply.github.com> Co-authored-by: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Co-authored-by: Vinayak Aggarwal <56196007+vinayak0505@users.noreply.github.com> * Localisation updates from https://translatewiki.net. * Added basic Fetch * added permission request * Folder count rectified * Loaded thumbnail * disabled overlay * Added sha1 function * Documented the code * Added a feature for editing coordinates (#4418) * not * Place Picker added * Pick location and API call linked * minor warnings resolved * Code conventions followed * issue fixed * Wikitext edited properly * minor modification * Location Picker added * Bottom sheet removed * Location picker fully implemented * credit added * credit added * issues fixed * issues fixed * minor issue fixed * Some build issues occured merging release v3.0 are fixed. One paranthesis issue is solved, a method about UploadService is removed, since we don't use it anymore. (#4451) * Localisation updates from https://translatewiki.net. * Fixes 4344 - Duplicate Uploads (#4442) * Fixes 4344 - Update the retention policy of the Work Manager to ExistingWorkPolicy.APPEND_OR_REPLACE- which would append the new work to the end of existing one. This helps remove the while loop in UploadWorker which was meant to handle the cases where a new worker would be created for retries. The while loop seemed to have race conditions uploading duplicate entries. * Update states to IN_PROGRESS before uploads are processed * Image selection added * Forwarded activity result to upload wizard * Initialised xmls, made folder and image item. * xmls done * xmls completed * removed unwanted attribute * Created models, adapters and view models (#4441) * created models, adapters and view models * Added Image Fragment * back button linked * Documentation and refractor * spaces * Butterknife annotation * DiffUtil * Added Examples * Extended Custom selector From Base Activity * made view model injectable * Added basic Fetch * added permission request * Folder count rectified * Loaded thumbnail * disabled overlay * Added sha1 function * Documented the code * Image selection added * Forwarded activity result to upload wizard * [GSOC] Added Image Fetch (#4449) * Added basic Fetch * added permission request * Folder count rectified * Loaded thumbnail * disabled overlay * Added sha1 function * Documented the code * fixed merge errors * Documented the remaining function Co-authored-by: translatewiki.net <l10n-bot@translatewiki.net> Co-authored-by: obsidian-zero <63155026+obsidian-zero@users.noreply.github.com> Co-authored-by: Obsidian_zero <1198474846@qq.com> Co-authored-by: Amir E. Aharoni <amir.aharoni@mail.huji.ac.il> Co-authored-by: Josephine Lim <josephinelim86@gmail.com> Co-authored-by: Ashish <ashishkumar468@gmail.com> Co-authored-by: neslihanturan <tur.neslihan@gmail.com> Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Co-authored-by: Vinayak Aggarwal <56196007+vinayak0505@users.noreply.github.com> Co-authored-by: Ayan Sarkar <71203077+Ayan-10@users.noreply.github.com> * [GSoC] Show uploaded images differently. (#4464) * uploaded images shown differently * Loaded images before query * Handled exceptions, Made ImageLoader injectable, Document and clean code * [GSoC] Added Uploaded status table in room database. (#4476) * added Uploaded status table in room database * Added unique property, minor refractoring * Database intigrated * Database integrated * Handled result null exception * Exceptions handled and refractored * Introduced constants * moved to sealed class * No database insert on network error * queried original image * documented the code * Updated uploaded status on upload success * Image Helper test (#4485) * [GSoC] Adapter Tests (#4488) * Added FolderAdapterTest * Image Adapter Test * merge fix * rebase fix Co-authored-by: translatewiki.net <l10n-bot@translatewiki.net> Co-authored-by: obsidian-zero <63155026+obsidian-zero@users.noreply.github.com> Co-authored-by: Obsidian_zero <1198474846@qq.com> Co-authored-by: Amir E. Aharoni <amir.aharoni@mail.huji.ac.il> Co-authored-by: Josephine Lim <josephinelim86@gmail.com> Co-authored-by: Ashish <ashishkumar468@gmail.com> Co-authored-by: neslihanturan <tur.neslihan@gmail.com> Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 <Pratham2305@users.noreply.github.com> Co-authored-by: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Co-authored-by: Vinayak Aggarwal <56196007+vinayak0505@users.noreply.github.com> Co-authored-by: Ayan Sarkar <71203077+Ayan-10@users.noreply.github.com> Co-authored-by: Brigham Byerly <6891883+byerlyb20@users.noreply.github.com> Co-authored-by: Jamie Brown <jamiejbrown521@gmail.com> Co-authored-by: Prince kushwaha <65972015+Prince-kushwaha@users.noreply.github.com> Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com> Co-authored-by: Ashar <asharalikhan200@gmail.com>
362 lines
12 KiB
Java
362 lines
12 KiB
Java
package fr.free.nrw.commons;
|
|
|
|
import static fr.free.nrw.commons.data.DBOpenHelper.CONTRIBUTIONS_TABLE;
|
|
import static org.acra.ReportField.ANDROID_VERSION;
|
|
import static org.acra.ReportField.APP_VERSION_CODE;
|
|
import static org.acra.ReportField.APP_VERSION_NAME;
|
|
import static org.acra.ReportField.PHONE_MODEL;
|
|
import static org.acra.ReportField.STACK_TRACE;
|
|
import static org.acra.ReportField.USER_COMMENT;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.app.NotificationChannel;
|
|
import android.app.NotificationManager;
|
|
import android.content.Context;
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
import android.database.sqlite.SQLiteException;
|
|
import android.os.Build;
|
|
import android.os.Process;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.multidex.MultiDexApplication;
|
|
import com.facebook.drawee.backends.pipeline.Fresco;
|
|
import com.facebook.imagepipeline.core.ImagePipeline;
|
|
import com.facebook.imagepipeline.core.ImagePipelineConfig;
|
|
import com.mapbox.mapboxsdk.Mapbox;
|
|
import com.squareup.leakcanary.LeakCanary;
|
|
import com.squareup.leakcanary.RefWatcher;
|
|
import fr.free.nrw.commons.auth.SessionManager;
|
|
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
|
|
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao;
|
|
import fr.free.nrw.commons.category.CategoryDao;
|
|
import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler;
|
|
import fr.free.nrw.commons.concurrency.ThreadPoolService;
|
|
import fr.free.nrw.commons.contributions.ContributionDao;
|
|
import fr.free.nrw.commons.data.DBOpenHelper;
|
|
import fr.free.nrw.commons.di.ApplicationlessInjection;
|
|
import fr.free.nrw.commons.kvstore.JsonKvStore;
|
|
import fr.free.nrw.commons.logging.FileLoggingTree;
|
|
import fr.free.nrw.commons.logging.LogUtils;
|
|
import fr.free.nrw.commons.media.CustomOkHttpNetworkFetcher;
|
|
import fr.free.nrw.commons.settings.Prefs;
|
|
import fr.free.nrw.commons.upload.FileUtils;
|
|
import fr.free.nrw.commons.utils.ConfigUtils;
|
|
import io.reactivex.Completable;
|
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
import io.reactivex.internal.functions.Functions;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import io.reactivex.schedulers.Schedulers;
|
|
import java.io.File;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Named;
|
|
import org.acra.ACRA;
|
|
import org.acra.annotation.AcraCore;
|
|
import org.acra.annotation.AcraDialog;
|
|
import org.acra.annotation.AcraMailSender;
|
|
import org.acra.data.StringFormat;
|
|
import org.wikipedia.AppAdapter;
|
|
import org.wikipedia.language.AppLanguageLookUpTable;
|
|
import timber.log.Timber;
|
|
|
|
@AcraCore(
|
|
buildConfigClass = BuildConfig.class,
|
|
resReportSendSuccessToast = R.string.crash_dialog_ok_toast,
|
|
reportFormat = StringFormat.KEY_VALUE_LIST,
|
|
reportContent = {USER_COMMENT, APP_VERSION_CODE, APP_VERSION_NAME, ANDROID_VERSION, PHONE_MODEL,
|
|
STACK_TRACE}
|
|
)
|
|
|
|
@AcraMailSender(
|
|
mailTo = "commons-app-android-private@googlegroups.com",
|
|
reportAsFile = false
|
|
)
|
|
|
|
@AcraDialog(
|
|
resTheme = R.style.Theme_AppCompat_Dialog,
|
|
resText = R.string.crash_dialog_text,
|
|
resTitle = R.string.crash_dialog_title,
|
|
resCommentPrompt = R.string.crash_dialog_comment_prompt
|
|
)
|
|
|
|
public class CommonsApplication extends MultiDexApplication {
|
|
|
|
public static final String IS_LIMITED_CONNECTION_MODE_ENABLED = "is_limited_connection_mode_enabled";
|
|
@Inject
|
|
SessionManager sessionManager;
|
|
@Inject
|
|
DBOpenHelper dbOpenHelper;
|
|
|
|
@Inject
|
|
@Named("default_preferences")
|
|
JsonKvStore defaultPrefs;
|
|
|
|
@Inject
|
|
CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher;
|
|
|
|
/**
|
|
* Constants begin
|
|
*/
|
|
public static final int OPEN_APPLICATION_DETAIL_SETTINGS = 1001;
|
|
|
|
public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using [[COM:MOA|Commons Mobile App]]";
|
|
|
|
public static final String FEEDBACK_EMAIL = "commons-app-android@googlegroups.com";
|
|
|
|
public static final String FEEDBACK_EMAIL_SUBJECT = "Commons Android App Feedback";
|
|
|
|
public static final String NOTIFICATION_CHANNEL_ID_ALL = "CommonsNotificationAll";
|
|
|
|
public static final String FEEDBACK_EMAIL_TEMPLATE_HEADER = "-- Technical information --";
|
|
|
|
/**
|
|
* Constants End
|
|
*/
|
|
|
|
private RefWatcher refWatcher;
|
|
|
|
private static CommonsApplication INSTANCE;
|
|
|
|
public static CommonsApplication getInstance() {
|
|
return INSTANCE;
|
|
}
|
|
|
|
private AppLanguageLookUpTable languageLookUpTable;
|
|
|
|
public AppLanguageLookUpTable getLanguageLookUpTable() {
|
|
return languageLookUpTable;
|
|
}
|
|
|
|
@Inject
|
|
ContributionDao contributionDao;
|
|
|
|
/**
|
|
* In memory list of contributios whose uploads ahve been paused by the user
|
|
*/
|
|
public static Map<String, Boolean> pauseUploads = new HashMap<>();
|
|
|
|
/**
|
|
* Used to declare and initialize various components and dependencies
|
|
*/
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
|
|
INSTANCE = this;
|
|
ACRA.init(this);
|
|
Mapbox.getInstance(this, getString(R.string.mapbox_commons_app_token));
|
|
|
|
ApplicationlessInjection
|
|
.getInstance(this)
|
|
.getCommonsApplicationComponent()
|
|
.inject(this);
|
|
|
|
AppAdapter.set(new CommonsAppAdapter(sessionManager, defaultPrefs));
|
|
|
|
initTimber();
|
|
|
|
if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) {
|
|
Set<String> defaultExifTagsSet = defaultPrefs.getStringSet(Prefs.MANAGED_EXIF_TAGS);
|
|
if (null == defaultExifTagsSet) {
|
|
defaultExifTagsSet = new HashSet<>();
|
|
}
|
|
defaultExifTagsSet.add(getString(R.string.exif_tag_location));
|
|
defaultPrefs.putStringSet(Prefs.MANAGED_EXIF_TAGS, defaultExifTagsSet);
|
|
}
|
|
|
|
// Set DownsampleEnabled to True to downsample the image in case it's heavy
|
|
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
|
|
.setNetworkFetcher(customOkHttpNetworkFetcher)
|
|
.setDownsampleEnabled(true)
|
|
.build();
|
|
try {
|
|
Fresco.initialize(this, config);
|
|
} catch (Exception e) {
|
|
Timber.e(e);
|
|
// TODO: Remove when we're able to initialize Fresco in test builds.
|
|
}
|
|
|
|
createNotificationChannel(this);
|
|
|
|
languageLookUpTable = new AppLanguageLookUpTable(this);
|
|
|
|
// This handler will catch exceptions thrown from Observables after they are disposed,
|
|
// or from Observables that are (deliberately or not) missing an onError handler.
|
|
RxJavaPlugins.setErrorHandler(Functions.emptyConsumer());
|
|
|
|
if (setupLeakCanary() == RefWatcher.DISABLED) {
|
|
return;
|
|
}
|
|
// Fire progress callbacks for every 3% of uploaded content
|
|
System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0");
|
|
}
|
|
|
|
/**
|
|
* Plants debug and file logging tree. Timber lets you plant your own logging trees.
|
|
*/
|
|
private void initTimber() {
|
|
boolean isBeta = ConfigUtils.isBetaFlavour();
|
|
String logFileName =
|
|
isBeta ? "CommonsBetaAppLogs" : "CommonsAppLogs";
|
|
String logDirectory = LogUtils.getLogDirectory();
|
|
//Delete stale logs if they have exceeded the specified size
|
|
deleteStaleLogs(logFileName, logDirectory);
|
|
|
|
FileLoggingTree tree = new FileLoggingTree(
|
|
Log.VERBOSE,
|
|
logFileName,
|
|
logDirectory,
|
|
1000,
|
|
getFileLoggingThreadPool());
|
|
|
|
Timber.plant(tree);
|
|
Timber.plant(new Timber.DebugTree());
|
|
}
|
|
|
|
/**
|
|
* Deletes the logs zip file at the specified directory and file locations specified in the
|
|
* params
|
|
*
|
|
* @param logFileName
|
|
* @param logDirectory
|
|
*/
|
|
private void deleteStaleLogs(String logFileName, String logDirectory) {
|
|
try {
|
|
File file = new File(logDirectory + "/zip/" + logFileName + ".zip");
|
|
if (file.exists() && file.getTotalSpace() > 1000000) {// In Kbs
|
|
file.delete();
|
|
}
|
|
} catch (Exception e) {
|
|
Timber.e(e);
|
|
}
|
|
}
|
|
|
|
public static boolean isRoboUnitTest() {
|
|
return "robolectric".equals(Build.FINGERPRINT);
|
|
}
|
|
|
|
private ThreadPoolService getFileLoggingThreadPool() {
|
|
return new ThreadPoolService.Builder("file-logging-thread")
|
|
.setPriority(Process.THREAD_PRIORITY_LOWEST)
|
|
.setPoolSize(1)
|
|
.setExceptionHandler(new BackgroundPoolExceptionHandler())
|
|
.build();
|
|
}
|
|
|
|
public static void createNotificationChannel(@NonNull Context context) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
NotificationManager manager = (NotificationManager) context
|
|
.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
NotificationChannel channel = manager
|
|
.getNotificationChannel(NOTIFICATION_CHANNEL_ID_ALL);
|
|
if (channel == null) {
|
|
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID_ALL,
|
|
context.getString(R.string.notifications_channel_name_all),
|
|
NotificationManager.IMPORTANCE_DEFAULT);
|
|
manager.createNotificationChannel(channel);
|
|
}
|
|
}
|
|
}
|
|
|
|
public String getUserAgent() {
|
|
return "Commons/" + ConfigUtils.getVersionNameWithSha(this)
|
|
+ " (https://mediawiki.org/wiki/Apps/Commons) Android/" + Build.VERSION.RELEASE;
|
|
}
|
|
|
|
/**
|
|
* Helps in setting up LeakCanary library
|
|
*
|
|
* @return instance of LeakCanary
|
|
*/
|
|
protected RefWatcher setupLeakCanary() {
|
|
if (LeakCanary.isInAnalyzerProcess(this)) {
|
|
return RefWatcher.DISABLED;
|
|
}
|
|
return LeakCanary.install(this);
|
|
}
|
|
|
|
/**
|
|
* Provides a way to get member refWatcher
|
|
*
|
|
* @param context Application context
|
|
* @return application member refWatcher
|
|
*/
|
|
public static RefWatcher getRefWatcher(Context context) {
|
|
CommonsApplication application = (CommonsApplication) context.getApplicationContext();
|
|
return application.refWatcher;
|
|
}
|
|
|
|
/**
|
|
* clears data of current application
|
|
*
|
|
* @param context Application context
|
|
* @param logoutListener Implementation of interface LogoutListener
|
|
*/
|
|
@SuppressLint("CheckResult")
|
|
public void clearApplicationData(Context context, LogoutListener logoutListener) {
|
|
File cacheDirectory = context.getCacheDir();
|
|
File applicationDirectory = new File(cacheDirectory.getParent());
|
|
if (applicationDirectory.exists()) {
|
|
String[] fileNames = applicationDirectory.list();
|
|
for (String fileName : fileNames) {
|
|
if (!fileName.equals("lib")) {
|
|
FileUtils.deleteFile(new File(applicationDirectory, fileName));
|
|
}
|
|
}
|
|
}
|
|
|
|
sessionManager.logout()
|
|
.andThen(Completable.fromAction(() -> {
|
|
Timber.d("All accounts have been removed");
|
|
clearImageCache();
|
|
//TODO: fix preference manager
|
|
defaultPrefs.clearAll();
|
|
defaultPrefs.putBoolean("firstrun", false);
|
|
updateAllDatabases();
|
|
}
|
|
))
|
|
.subscribeOn(Schedulers.io())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribe(logoutListener::onLogoutComplete, Timber::e);
|
|
}
|
|
|
|
/**
|
|
* Clear all images cache held by Fresco
|
|
*/
|
|
private void clearImageCache() {
|
|
ImagePipeline imagePipeline = Fresco.getImagePipeline();
|
|
imagePipeline.clearCaches();
|
|
}
|
|
|
|
/**
|
|
* Deletes all tables and re-creates them.
|
|
*/
|
|
private void updateAllDatabases() {
|
|
dbOpenHelper.getReadableDatabase().close();
|
|
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
|
|
|
|
CategoryDao.Table.onDelete(db);
|
|
dbOpenHelper.deleteTable(db,
|
|
CONTRIBUTIONS_TABLE);//Delete the contributions table in the existing db on older versions
|
|
|
|
try {
|
|
contributionDao.deleteAll();
|
|
} catch (SQLiteException e) {
|
|
Timber.e(e);
|
|
}
|
|
BookmarkPicturesDao.Table.onDelete(db);
|
|
BookmarkLocationsDao.Table.onDelete(db);
|
|
}
|
|
|
|
|
|
/**
|
|
* Interface used to get log-out events
|
|
*/
|
|
public interface LogoutListener {
|
|
|
|
void onLogoutComplete();
|
|
}
|
|
}
|