Skip to content

Commit 2ecf858

Browse files
jeffsieugsantner
authored andcommitted
Add setting to show/hide pictures in device gallery (#67)
Add setting to show/hide pictures in device gallery, fixes #55
1 parent 98c164c commit 2ecf858

File tree

6 files changed

+82
-0
lines changed

6 files changed

+82
-0
lines changed

app/src/main/java/io/github/gsantner/memetastic/activity/SettingsActivity.java

+28
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.FragmentTransaction;
5+
import android.content.ContentResolver;
56
import android.content.Context;
7+
import android.content.Intent;
68
import android.content.SharedPreferences;
9+
import android.net.Uri;
710
import android.os.Bundle;
811
import android.preference.Preference;
912
import android.preference.PreferenceFragment;
1013
import android.preference.PreferenceScreen;
14+
import android.provider.MediaStore;
1115
import android.support.design.widget.AppBarLayout;
1216
import android.support.v7.app.AppCompatActivity;
1317
import android.support.v7.widget.Toolbar;
1418
import android.view.View;
1519

20+
import java.io.File;
21+
import java.io.IOException;
1622
import java.util.Date;
1723

1824
import butterknife.BindView;
@@ -21,6 +27,7 @@
2127
import io.github.gsantner.memetastic.service.AssetUpdater;
2228
import io.github.gsantner.memetastic.service.ThumbnailCleanupTask;
2329
import io.github.gsantner.memetastic.util.AppSettings;
30+
import io.github.gsantner.memetastic.util.MediaStoreUtils;
2431
import io.github.gsantner.memetastic.util.PermissionChecker;
2532

2633
public class SettingsActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -140,6 +147,27 @@ public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference prefere
140147
getActivity().finish();
141148
}
142149
}
150+
if (key.equals(getString(R.string.pref_key__is_show_in_gallery))) {
151+
boolean showInGallery = settings.getDefaultPreferences().getBoolean(key, true);
152+
File memeDirectory = AssetUpdater.getMemesDir(AppSettings.get());
153+
File noMediaFile = new File(memeDirectory, ".nomedia");
154+
if (showInGallery) {
155+
noMediaFile.delete();
156+
MediaStoreUtils.deleteFileFromMediaStore(context, noMediaFile);
157+
File[] files = memeDirectory.listFiles();
158+
for (int i = 0; i < files.length; i++) {
159+
MediaStoreUtils.deleteFileFromMediaStore(context, files[i]);
160+
MediaStoreUtils.addFileToMediaStore(context, files[i]);
161+
}
162+
} else {
163+
try {
164+
noMediaFile.createNewFile();
165+
MediaStoreUtils.addFileToMediaStore(context, noMediaFile);
166+
} catch (IOException e) {
167+
e.printStackTrace();
168+
}
169+
}
170+
}
143171
}
144172
return super.onPreferenceTreeClick(screen, preference);
145173
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.github.gsantner.memetastic.util;
2+
3+
import android.content.ContentResolver;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.net.Uri;
7+
import android.provider.MediaStore;
8+
9+
import java.io.File;
10+
import java.io.IOException;
11+
12+
public class MediaStoreUtils {
13+
public static void addFileToMediaStore(Context context, File file) {
14+
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
15+
}
16+
17+
public static void deleteFileFromMediaStore(Context context, final File file) {
18+
final ContentResolver contentResolver = context.getContentResolver();
19+
20+
String canonicalPath;
21+
try {
22+
canonicalPath = file.getCanonicalPath();
23+
} catch (IOException e) {
24+
canonicalPath = file.getAbsolutePath();
25+
}
26+
final Uri uri = MediaStore.Files.getContentUri("external");
27+
final int result = contentResolver.delete(uri,
28+
MediaStore.Files.FileColumns.DATA + "=?", new String[]{canonicalPath});
29+
if (result == 0) {
30+
final String absolutePath = file.getAbsolutePath();
31+
if (!absolutePath.equals(canonicalPath)) {
32+
contentResolver.delete(uri,
33+
MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
34+
}
35+
}
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M22,16L22,4c0,-1.1 -0.9,-2 -2,-2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zM11,12l2.03,2.71L16,11l4,5L8,16l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6L2,6z"/>
9+
</vector>

app/src/main/res/values/strings-not_translatable.xml

+1
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,6 @@
7070
<string name="pref_key__is_migrated" translatable="false">pref_key__is_migrated</string>
7171
<string name="pref_key__download_assets_try" translatable="false">pref_key__download_assets_try</string>
7272
<string name="pref_key__memelist_view_type" translatable="false">pref_key__memelist_view_type</string>
73+
<string name="pref_key__is_show_in_gallery" translatable="false">pref_key__is_show_in_gallery</string>
7374

7475
</resources>

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
<string name="pref_title__thumbnail_quality__percent">Thumbnail quality</string>
9797
<string name="pref_summary__memelist_view_type">Set view type (Picture grid, Rows with title)</string>
9898
<string name="pref_title__memelist_view_type">View Type</string>
99+
<string name="pref_title__is_show_in_gallery">Show in device gallery</string>
99100

100101
<!-- Language -->
101102
<string name="pref_title__language">Language</string>

app/src/main/res/xml/preferences_master.xml

+6
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@
9292

9393
<PreferenceCategory android:title="@string/miscellaneous">
9494

95+
<CheckBoxPreference
96+
android:defaultValue="true"
97+
android:icon="@drawable/ic_photo_library_black_24dp"
98+
android:key="@string/pref_key__is_show_in_gallery"
99+
android:title="@string/pref_title__is_show_in_gallery"/>
100+
95101
<!--suppress AndroidDomInspection -->
96102
<net.gsantner.opoc.ui.LanguagePreference
97103
android:defaultValue=""

0 commit comments

Comments
 (0)