Skip to content

Commit 4db4a93

Browse files
committed
Merge remote-tracking branch 'refs/remotes/commons-app/master'
2 parents 9fd32d6 + 51fb371 commit 4db4a93

File tree

5 files changed

+66
-101
lines changed

5 files changed

+66
-101
lines changed

app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,6 @@ private void performLogin() {
229229
task.execute(canonicalUsername, password);
230230
}
231231

232-
@Override
233-
public boolean onCreateOptionsMenu(Menu menu) {
234-
getMenuInflater().inflate(R.menu.activity_login, menu);
235-
return true;
236-
}
237-
238232
@Override
239233
public boolean onOptionsItemSelected(MenuItem item) {
240234
switch (item.getItemId()) {

app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java

Lines changed: 35 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
package fr.free.nrw.commons.media;
22

3+
import android.Manifest;
34
import android.annotation.SuppressLint;
45
import android.app.DownloadManager;
5-
import android.content.BroadcastReceiver;
66
import android.content.Context;
77
import android.content.Intent;
8-
import android.content.IntentFilter;
9-
import android.database.Cursor;
8+
import android.content.pm.PackageManager;
109
import android.database.DataSetObserver;
1110
import android.net.Uri;
1211
import android.os.Build;
1312
import android.os.Bundle;
1413
import android.os.Environment;
14+
import android.support.design.widget.Snackbar;
15+
import android.support.v4.app.ActivityCompat;
1516
import android.support.v4.app.Fragment;
1617
import android.support.v4.app.FragmentManager;
1718
import android.support.v4.app.FragmentStatePagerAdapter;
19+
import android.support.v4.content.ContextCompat;
20+
import android.support.v4.view.MenuItemCompat;
1821
import android.support.v4.view.ViewPager;
19-
import android.util.Log;
22+
import android.support.v7.widget.ShareActionProvider;
2023
import android.view.LayoutInflater;
2124
import android.view.Menu;
2225
import android.view.MenuInflater;
@@ -84,7 +87,7 @@ public int getCount() {
8487
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
8588
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
8689
pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager);
87-
pager.setOnPageChangeListener(this);
90+
pager.addOnPageChangeListener(this);
8891

8992
final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager());
9093

@@ -130,27 +133,25 @@ public boolean onOptionsItemSelected(MenuItem item) {
130133
Media m = provider.getMediaAtPosition(pager.getCurrentItem());
131134
switch(item.getItemId()) {
132135
case R.id.menu_share_current_image:
136+
// Share - this is just logs it, intent set in onCreateOptionsMenu, around line 252
133137
EventLog.schema(CommonsApplication.EVENT_SHARE_ATTEMPT)
134138
.param("username", app.getCurrentAccount().name)
135139
.param("filename", m.getFilename())
136140
.log();
137-
Intent shareIntent = new Intent();
138-
shareIntent.setAction(Intent.ACTION_SEND);
139-
shareIntent.setType("text/plain");
140-
shareIntent.putExtra(Intent.EXTRA_TEXT, m.getDisplayTitle() + " " + m.getDescriptionUrl());
141-
startActivity(shareIntent);
142141
return true;
143142
case R.id.menu_browser_current_image:
143+
// View in browser
144144
Intent viewIntent = new Intent();
145145
viewIntent.setAction(Intent.ACTION_VIEW);
146146
viewIntent.setData(Uri.parse(m.getDescriptionUrl()));
147147
startActivity(viewIntent);
148148
return true;
149149
case R.id.menu_download_current_image:
150+
// Download
150151
downloadMedia(m);
151152
return true;
152153
case R.id.menu_retry_current_image:
153-
// Is this... sane? :)
154+
// Retry
154155
((ContributionsActivity)getActivity()).retryUpload(pager.getCurrentItem());
155156
getActivity().getSupportFragmentManager().popBackStack();
156157
return true;
@@ -168,68 +169,38 @@ public boolean onOptionsItemSelected(MenuItem item) {
168169
* Start the media file downloading to the local SD card/storage.
169170
* The file can then be opened in Gallery or other apps.
170171
*
171-
* @param m
172+
* @param m Media file to download
172173
*/
173174
private void downloadMedia(Media m) {
174175
String imageUrl = m.getImageUrl(),
175176
fileName = m.getFilename();
176177
// Strip 'File:' from beginning of filename, we really shouldn't store it
177178
fileName = fileName.replaceFirst("^File:", "");
178-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
179-
// Gingerbread DownloadManager has no HTTPS support...
180-
// Download file over HTTP, there'll be no credentials
181-
// sent so it should be safe-ish.
182-
imageUrl = imageUrl.replaceFirst("^https://", "http://");
183-
}
184179
Uri imageUri = Uri.parse(imageUrl);
185180

186181
DownloadManager.Request req = new DownloadManager.Request(imageUri);
187182
//These are not the image title and description fields, they are download descs for notifications
188183
req.setDescription(getString(R.string.app_name));
189184
req.setTitle(m.getDisplayTitle());
190185
req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
191-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
192-
// Modern Android updates the gallery automatically. Yay!
193-
req.allowScanningByMediaScanner();
194-
195-
// On HC/ICS/JB we can leave the download notification up when complete.
196-
// This allows folks to open the file directly in gallery viewer.
197-
// But for some reason it fails on Honeycomb (Google TV). Sigh.
198-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
199-
req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
200-
}
201-
}
202-
203-
final DownloadManager manager = (DownloadManager)getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
204-
final long downloadId = manager.enqueue(req);
205186

206-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
207-
// For Gingerbread compatibility...
208-
BroadcastReceiver onComplete = new BroadcastReceiver() {
209-
@Override
210-
public void onReceive(Context context, Intent intent) {
211-
// Check if the download has completed...
212-
Cursor c = manager.query(new DownloadManager.Query()
213-
.setFilterById(downloadId)
214-
.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL | DownloadManager.STATUS_FAILED)
215-
);
216-
if (c.moveToFirst()) {
217-
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
218-
Log.d("Commons", "Download completed with status " + status);
219-
if (status == DownloadManager.STATUS_SUCCESSFUL) {
220-
// Force Gallery to index the new file
221-
Uri mediaUri = Uri.parse("file://" + Environment.getExternalStorageDirectory());
222-
getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, mediaUri));
187+
// Modern Android updates the gallery automatically. Yay!
188+
req.allowScanningByMediaScanner();
189+
req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
223190

224-
// todo: show a persistent notification?
191+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {
192+
Snackbar.make(getView(), R.string.storage_permission_rationale,
193+
Snackbar.LENGTH_INDEFINITE)
194+
.setAction(R.string.ok, new View.OnClickListener() {
195+
@Override
196+
public void onClick(View view) {
197+
ActivityCompat.requestPermissions(getActivity(),
198+
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
225199
}
226-
} else {
227-
Log.d("Commons", "Couldn't get download status for some reason");
228-
}
229-
getActivity().unregisterReceiver(this);
230-
}
231-
};
232-
getActivity().registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
200+
}).show();
201+
} else {
202+
final DownloadManager manager = (DownloadManager)getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
203+
manager.enqueue(req);
233204
}
234205
}
235206

@@ -249,6 +220,13 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
249220
menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true);
250221
menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true);
251222

223+
// Set ShareActionProvider Intent
224+
ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_share_current_image));
225+
Intent shareIntent = new Intent(Intent.ACTION_SEND);
226+
shareIntent.setType("text/plain");
227+
shareIntent.putExtra(Intent.EXTRA_TEXT, m.getDisplayTitle() + " \n" + m.getDescriptionUrl());
228+
mShareActionProvider.setShareIntent(shareIntent);
229+
252230
if(m instanceof Contribution) {
253231
Contribution c = (Contribution)m;
254232
switch(c.getState()) {
@@ -272,7 +250,6 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
272250
break;
273251
}
274252
}
275-
return;
276253
}
277254
}
278255
}

app/src/main/res/layout/activity_contributions.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
android:layout_width="match_parent"
45
android:layout_height="match_parent"
56
android:orientation="horizontal"
@@ -12,6 +13,6 @@
1213
android:id="@+id/contributionsListFragment"
1314
android:layout_width="match_parent"
1415
android:layout_height="match_parent"
15-
/>
16+
tools:layout="@layout/fragment_contributions" />
1617

1718
</FrameLayout>

app/src/main/res/menu/activity_login.xml

Lines changed: 0 additions & 7 deletions
This file was deleted.

app/src/main/res/menu/fragment_image_detail.xml

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,34 @@
22

33
<menu xmlns:android="http://schemas.android.com/apk/res/android"
44
xmlns:app="http://schemas.android.com/apk/res-auto">
5-
<item android:id="@+id/menu_share_current_image"
6-
app:showAsAction="ifRoom|withText"
7-
android:icon="@android:drawable/ic_menu_share"
8-
android:title="@string/menu_share"
9-
/>
10-
<item android:id="@+id/menu_browser_current_image"
11-
app:showAsAction="never"
12-
android:icon="@android:drawable/ic_menu_view"
13-
android:title="@string/menu_open_in_browser"
14-
/>
15-
<item android:id="@+id/menu_download_current_image"
16-
app:showAsAction="never"
17-
android:icon="@drawable/ic_menu_download"
18-
android:title="@string/menu_download"
19-
/>
20-
<item android:id="@+id/menu_retry_current_image"
21-
app:showAsAction="ifRoom|withText"
22-
android:icon="@android:drawable/ic_menu_revert"
23-
android:title="@string/menu_retry_upload"
24-
android:visible="false"
25-
android:enabled="false"
26-
/>
27-
<item android:id="@+id/menu_cancel_current_image"
28-
app:showAsAction="never"
29-
android:icon="@android:drawable/ic_menu_delete"
30-
android:title="@string/menu_cancel_upload"
31-
android:visible="false"
32-
android:enabled="false"
33-
/>
5+
<item
6+
android:id="@+id/menu_share_current_image"
7+
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
8+
android:title="@string/menu_share"
9+
app:showAsAction="ifRoom|withText" />
10+
<item
11+
android:id="@+id/menu_browser_current_image"
12+
android:icon="@android:drawable/ic_menu_view"
13+
android:title="@string/menu_open_in_browser"
14+
app:showAsAction="never" />
15+
<item
16+
android:id="@+id/menu_download_current_image"
17+
android:icon="@drawable/ic_menu_download"
18+
android:title="@string/menu_download"
19+
app:showAsAction="never" />
20+
<item
21+
android:id="@+id/menu_retry_current_image"
22+
android:enabled="false"
23+
android:icon="@android:drawable/ic_menu_revert"
24+
android:title="@string/menu_retry_upload"
25+
android:visible="false"
26+
app:showAsAction="ifRoom|withText" />
27+
<item
28+
android:id="@+id/menu_cancel_current_image"
29+
android:enabled="false"
30+
android:icon="@android:drawable/ic_menu_delete"
31+
android:title="@string/menu_cancel_upload"
32+
android:visible="false"
33+
app:showAsAction="never" />
3434

3535
</menu>

0 commit comments

Comments
 (0)