Skip to content

Commit 93f1e1e

Browse files
Added pending uploads screen (commons-app#5752)
* Added pending uploads screen * Added failed uploads fragment * Improved progress bars * Implemented pause functionality * Improved pause feature * Fixed issue with sorting when adding more pictures during an upload * Improved Tap to View notification * Fixed issue with on going upload deletion * Improved the deletion feature * Fixed indentations and unit tests * Fixed bugs * Fixed failing test * Added error message in Failed Uploads Fragment * Improved error notification * Moved auto-retry from the Main Activity to UploadProgressActivity * Fixed large uploads issue * Minor fixes * Removed HashSet * Fixed issue with progress bar * Bug fixes * Moved Auto Retry to MainActivity * Fixed conflicts * Fixed issue with upload icon * Fixed null ptr issue on changing modes * Improved recycler view * Fixed irrelevant network call * Fixed irrelevant network call * Fixed constantly failing uploads * Fixed constantly failing uploads * Fixed constantly failing uploads * Added error log * Fixed refresh icon visibility in light mode * Changed progress in progress activity * Fixed progress bar issue * Improved icons * Improved deletion and removed cancelledUploads Hashset * Fixed sorting, list size issue * Improved current implementation * Implemented flag for workers * Implemented flag for workers * Fixed sorting bug * Fixed upload icon * Improved pausing * Made changes to visibility implementation * Added image duplicity check on restart of failed image * minor adjustments * added javadoc/kdoc and fixed minor bug * Fixed unit tests * Added synchronized(lock) * Added check to prevent multiple uploads starting at once * Ignored failing test cases * Temporary commit - Added jcenter * Temporary commit - Removed library/commented * Temporary commit - Removed library/commented * Updated com.jraska.livedata:testing-ktx * Ignored failing test - UploadControllerTest.kt * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadModelUnitTest * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadPresenterTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing tests - UploadRepositoryUnitTest.kt * Ignored failing test - UploadRepositoryUnitTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - DepictedItemTest.kt * Ignored failing test - FilesUtilsTest.kt * Ignored failing test - WikiBaseClientUnitTest.kt * Ignored failing test - WikiBaseClientUnitTest.kt * Ignored failing test - WikiBaseClientUnitTest.kt * Ignored failing test - WikidataClientTest.kt * Ignored failing test - WikidataClientTest.kt * Fixed unit tests * Updated kdoc --------- Co-authored-by: Nicolas Raoul <[email protected]>
1 parent 62d6dea commit 93f1e1e

File tree

69 files changed

+2708
-946
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+2708
-946
lines changed

app/src/androidTest/java/fr/free/nrw/commons/MainActivityTest.kt

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -195,36 +195,4 @@ class MainActivityTest {
195195
Espresso.pressBack()
196196
UITestHelper.sleep(1000)
197197
}
198-
199-
@Test
200-
fun testLimitedConnectionModeToggle() {
201-
val isEnabled = defaultKvStore
202-
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
203-
Espresso.onView(
204-
Matchers.allOf(
205-
ViewMatchers.withId(R.id.toggle_limited_connection_mode),
206-
childAtPosition(
207-
childAtPosition(
208-
ViewMatchers.withId(R.id.toolbar),
209-
1
210-
),
211-
0
212-
),
213-
ViewMatchers.isDisplayed()
214-
)
215-
).perform(ViewActions.click())
216-
UITestHelper.sleep(1000)
217-
if (isEnabled) {
218-
Assert.assertFalse(
219-
defaultKvStore
220-
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
221-
)
222-
} else {
223-
Assert.assertTrue(
224-
defaultKvStore
225-
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
226-
)
227-
}
228-
}
229-
230198
}

app/src/main/AndroidManifest.xml

Lines changed: 51 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools">
4+
45
<uses-permission android:name="android.permission.INTERNET" />
56
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
67
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
@@ -13,88 +14,85 @@
1314
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
1415
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
1516
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
16-
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
17-
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
17+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
18+
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
1819
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS" />
19-
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
20+
<uses-permission android:name="android.permission.SET_WALLPAPER" />
2021
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
21-
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
22+
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
2223

2324
<queries>
25+
2426
<!-- Browser -->
2527
<intent>
2628
<action android:name="android.intent.action.VIEW" />
29+
2730
<category android:name="android.intent.category.BROWSABLE" />
31+
2832
<data android:scheme="https" />
2933
</intent>
3034
<!-- Google Maps -->
3135
<package android:name="com.google.android.apps.maps" />
32-
</queries>
33-
34-
35-
<!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
36+
</queries> <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
3637
<uses-feature android:name="android.hardware.___location.gps" />
3738

3839
<application
3940
android:name=".CommonsApplication"
41+
android:appComponentFactory="commons"
4042
android:icon="@mipmap/ic_launcher"
4143
android:label="@string/app_name"
42-
android:theme="@style/LightAppTheme"
4344
android:largeHeap="true"
45+
android:requestLegacyExternalStorage="true"
4446
android:supportsRtl="true"
45-
tools:replace="android:appComponentFactory"
46-
android:appComponentFactory="commons"
47-
android:requestLegacyExternalStorage = "true"
48-
tools:ignore="GoogleAppIndexingWarning">
49-
47+
android:theme="@style/LightAppTheme"
48+
tools:ignore="GoogleAppIndexingWarning"
49+
tools:replace="android:appComponentFactory">
5050
<activity
5151
android:name=".nearby.WikidataFeedback"
5252
android:exported="false" />
53-
5453
<activity
55-
android:theme="@style/EditActivityTheme"
54+
android:name=".upload.UploadProgressActivity"
55+
android:exported="false" />
56+
<activity
5657
android:name=".description.DescriptionEditActivity"
57-
android:exported="true" />
58-
58+
android:exported="true"
59+
android:theme="@style/EditActivityTheme" />
5960
<activity
6061
android:name=".edit.EditActivity"
6162
android:exported="false" />
62-
63-
<activity android:name="org.acra.dialog.CrashReportDialog"
64-
android:process=":acra"
65-
android:launchMode="singleInstance"
63+
<activity
64+
android:name="org.acra.dialog.CrashReportDialog"
6665
android:excludeFromRecents="true"
67-
android:finishOnTaskLaunch="true" />
68-
66+
android:finishOnTaskLaunch="true"
67+
android:launchMode="singleInstance"
68+
android:process=":acra" />
6969
<activity
7070
android:name=".media.ZoomableActivity"
71-
android:label="Zoomable Activity"
7271
android:configChanges="screenSize|keyboard|orientation"
72+
android:label="Zoomable Activity"
7373
android:parentActivityName=".customselector.ui.selector.CustomSelectorActivity" />
74-
75-
<activity android:name=".auth.LoginActivity"
74+
<activity
75+
android:name=".auth.LoginActivity"
7676
android:exported="true">
7777
<intent-filter>
7878
<category android:name="android.intent.category.LAUNCHER" />
7979

8080
<action android:name="android.intent.action.MAIN" />
8181
</intent-filter>
8282

83-
<meta-data android:name="android.app.shortcuts"
83+
<meta-data
84+
android:name="android.app.shortcuts"
8485
android:resource="@xml/shortcuts" />
85-
8686
</activity>
8787
<activity android:name=".WelcomeActivity" />
88-
8988
<activity
90-
android:hardwareAccelerated="false"
9189
android:name=".upload.UploadActivity"
92-
android:exported="true"
9390
android:configChanges="orientation|screenSize|keyboard"
91+
android:exported="true"
92+
android:hardwareAccelerated="false"
9493
android:icon="@mipmap/ic_launcher"
9594
android:label="@string/app_name"
96-
android:windowSoftInputMode="adjustResize"
97-
>
95+
android:windowSoftInputMode="adjustResize">
9896
<intent-filter android:label="@string/intent_share_upload_label">
9997
<action android:name="android.intent.action.SEND" />
10098

@@ -114,67 +112,57 @@
114112
</activity>
115113
<activity
116114
android:name=".contributions.MainActivity"
115+
android:configChanges="screenSize|keyboard|orientation"
117116
android:icon="@mipmap/ic_launcher"
118-
android:label="@string/app_name"
119-
android:configChanges="screenSize|keyboard|orientation" />
117+
android:label="@string/app_name" />
120118
<activity
121119
android:name=".settings.SettingsActivity"
122120
android:label="@string/title_activity_settings" />
123121
<activity
124122
android:name=".AboutActivity"
125123
android:label="@string/title_activity_about"
126124
android:parentActivityName=".contributions.MainActivity" />
127-
128125
<activity
129126
android:name=".auth.SignupActivity"
130127
android:configChanges="orientation|screenLayout|screenSize"
131128
android:label="@string/title_activity_signup" />
132-
133129
<activity
134130
android:name=".notification.NotificationActivity"
135131
android:label="@string/navigation_item_notification" />
136-
137-
<activity android:name=".quiz.QuizActivity"
138-
android:label="@string/quiz"/>
139-
140-
<activity android:name=".quiz.QuizResultActivity"
141-
android:label="@string/result"/>
142-
132+
<activity
133+
android:name=".quiz.QuizActivity"
134+
android:label="@string/quiz" />
135+
<activity
136+
android:name=".quiz.QuizResultActivity"
137+
android:label="@string/result" />
143138
<activity
144139
android:name=".customselector.ui.selector.CustomSelectorActivity"
145-
android:label="@string/title_activity_custom_selector"
146140
android:configChanges="screenSize|keyboard|orientation"
141+
android:label="@string/title_activity_custom_selector"
147142
android:parentActivityName=".contributions.MainActivity" />
148-
149143
<activity
150144
android:name=".category.CategoryDetailsActivity"
151-
android:label="@string/title_activity_featured_images"
152145
android:configChanges="screenSize|keyboard|orientation"
146+
android:label="@string/title_activity_featured_images"
153147
android:parentActivityName=".contributions.MainActivity" />
154-
155148
<activity
156149
android:name=".explore.depictions.WikidataItemDetailsActivity"
157-
android:label="@string/title_activity_featured_images"
158150
android:configChanges="screenSize|keyboard|orientation"
151+
android:label="@string/title_activity_featured_images"
159152
android:parentActivityName=".contributions.MainActivity" />
160-
161153
<activity
162154
android:name=".explore.SearchActivity"
155+
android:configChanges="orientation|keyboardHidden|screenSize"
163156
android:label="@string/title_activity_search"
164157
android:launchMode="singleTop"
165-
android:configChanges="orientation|keyboardHidden|screenSize"
166-
android:parentActivityName=".contributions.MainActivity"
167-
/>
168-
158+
android:parentActivityName=".contributions.MainActivity" />
169159
<activity
170160
android:name=".profile.ProfileActivity"
171161
android:configChanges="orientation|screenSize|keyboard"
172162
android:label="@string/Profile" />
173-
174163
<activity
175164
android:name=".review.ReviewActivity"
176165
android:label="@string/title_activity_review" />
177-
178166
<activity
179167
android:name=".LocationPicker.LocationPickerActivity"
180168
android:label="Location Picker" />
@@ -186,11 +174,11 @@
186174
<intent-filter>
187175
<action android:name="android.accounts.AccountAuthenticator" />
188176
</intent-filter>
177+
189178
<meta-data
190179
android:name="android.accounts.AccountAuthenticator"
191180
android:resource="@xml/authenticator" />
192181
</service>
193-
194182
<service
195183
android:name="org.acra.sender.SenderService"
196184
android:exported="false"
@@ -205,50 +193,45 @@
205193
android:name="android.support.FILE_PROVIDER_PATHS"
206194
android:resource="@xml/provider_paths" />
207195
</provider>
208-
209196
<provider
210197
android:name=".category.CategoryContentProvider"
211198
android:authorities="${applicationId}.categories.contentprovider"
212199
android:exported="false"
213200
android:label="@string/provider_categories"
214201
android:syncable="false" />
215-
216202
<provider
217203
android:name=".explore.recentsearches.RecentSearchesContentProvider"
218204
android:authorities="${applicationId}.explore.recentsearches.contentprovider"
219205
android:exported="false"
220206
android:label="@string/provider_searches"
221207
android:syncable="false" />
222-
223208
<provider
224209
android:name=".recentlanguages.RecentLanguagesContentProvider"
225210
android:authorities="${applicationId}.recentlanguages.contentprovider"
226211
android:exported="false"
227212
android:label="@string/provider_recent_languages"
228213
android:syncable="false" />
229-
230214
<provider
231215
android:name=".bookmarks.pictures.BookmarkPicturesContentProvider"
232216
android:authorities="${applicationId}.bookmarks.contentprovider"
233217
android:exported="false"
234218
android:label="@string/provider_bookmarks"
235219
android:syncable="false" />
236-
237220
<provider
238221
android:name=".bookmarks.locations.BookmarkLocationsContentProvider"
239222
android:authorities="${applicationId}.bookmarks.locations.contentprovider"
240223
android:exported="false"
241224
android:label="@string/provider_bookmarks_location"
242225
android:syncable="false" />
243-
244226
<provider
245227
android:name=".bookmarks.items.BookmarkItemsContentProvider"
246228
android:authorities="${applicationId}.bookmarks.items.contentprovider"
247229
android:exported="false"
248230
android:label="@string/provider_bookmarks_location"
249231
android:syncable="false" />
250232

251-
<receiver android:name=".widget.PicOfDayAppWidget"
233+
<receiver
234+
android:name=".widget.PicOfDayAppWidget"
252235
android:exported="true">
253236
<intent-filter>
254237
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -259,8 +242,9 @@
259242
android:resource="@xml/pic_of_day_app_widget_info" />
260243
</receiver>
261244

262-
<uses-library android:name="org.apache.http.legacy" android:required="false" />
263-
245+
<uses-library
246+
android:name="org.apache.http.legacy"
247+
android:required="false" />
264248
</application>
265249

266250
</manifest>

app/src/main/java/fr/free/nrw/commons/CommonsApplication.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,7 @@ public AppLanguageLookUpTable getLanguageLookUpTable() {
142142
@Inject
143143
ContributionDao contributionDao;
144144

145-
/**
146-
* In-memory list of contributions whose uploads have been paused by the user
147-
*/
148-
public static Map<String, Boolean> pauseUploads = new HashMap<>();
149-
150-
/**
151-
* In-memory list of uploads that have been cancelled by the user
152-
*/
153-
public static HashSet<String> cancelledUploads = new HashSet<>();
145+
public static Boolean isPaused = false;
154146

155147
/**
156148
* Used to declare and initialize various components and dependencies

app/src/main/java/fr/free/nrw/commons/contributions/Contribution.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ data class Contribution constructor(
2828
var dateCreatedSource: String? = null,
2929
var wikidataPlace: WikidataPlace? = null,
3030
var chunkInfo: ChunkInfo? = null,
31+
var errorInfo: String? = null,
3132
/**
3233
* @return array list of entityids for the depictions
3334
*/
@@ -42,6 +43,7 @@ data class Contribution constructor(
4243
var dateCreated: Date? = null,
4344
var dateCreatedString: String? = null,
4445
var dateModified: Date? = null,
46+
var dateUploadStarted: Date? = null,
4547
var hasInvalidLocation : Int = 0,
4648
var contentUri: Uri? = null,
4749
var countryCode : String? = null,
@@ -99,7 +101,6 @@ data class Contribution constructor(
99101
const val STATE_QUEUED = 2
100102
const val STATE_IN_PROGRESS = 3
101103
const val STATE_PAUSED = 4
102-
const val STATE_QUEUED_LIMITED_CONNECTION_MODE=5
103104

104105
/**
105106
* Formatting captions to the Wikibase format for sending labels
@@ -127,11 +128,8 @@ data class Contribution constructor(
127128
return chunkInfo != null && chunkInfo!!.totalChunks == chunkInfo!!.indexOfNextChunkToUpload
128129
}
129130

130-
fun isPaused(): Boolean {
131-
return CommonsApplication.pauseUploads[pageId] ?: false
131+
fun dateUploadStartedInMillis(): Long {
132+
return dateUploadStarted!!.time
132133
}
133134

134-
fun unpause() {
135-
CommonsApplication.pauseUploads[pageId] = false
136-
}
137135
}

0 commit comments

Comments
 (0)