0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 20:03:05 +02:00

Add setting to disable access to the AnkiDroid ContentProvider

Fixes #3717
This commit is contained in:
timrae 2015-10-08 15:42:16 +09:00
parent a4b312c760
commit e2152a16e3
3 changed files with 33 additions and 5 deletions

View File

@ -21,9 +21,11 @@
package com.ichi2.anki;
import android.annotation.TargetApi;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
@ -374,10 +376,11 @@ public class Preferences extends AppCompatPreferenceActivity implements Preferen
Preference pref = screen.findPreference(key);
// Handle special cases
switch (key) {
case "timeoutAnswer":
case "timeoutAnswer": {
CheckBoxPreference keepScreenOn = (CheckBoxPreference) screen.findPreference("keepScreenOn");
keepScreenOn.setChecked(((CheckBoxPreference) pref).isChecked());
break;
}
case LANGUAGE:
closePreferences();
break;
@ -420,24 +423,27 @@ public class Preferences extends AppCompatPreferenceActivity implements Preferen
mCol.getConf().put("addToCur", ((ListPreference) pref).getValue().equals("0"));
mCol.setMod();
break;
case "dayOffset":
case "dayOffset": {
int hours = ((SeekBarPreference) pref).getValue();
Calendar date = new GregorianCalendar();
date.set(Calendar.HOUR_OF_DAY, hours);
mCol.setCrt(date.getTimeInMillis() / 1000);
mCol.setMod();
break;
case "minimumCardsDueForNotification":
}
case "minimumCardsDueForNotification": {
ListPreference listpref = (ListPreference) screen.findPreference("minimumCardsDueForNotification");
if (listpref != null) {
updateNotificationPreference(listpref);
}
break;
case "reportErrorMode":
}
case "reportErrorMode": {
String value = prefs.getString("reportErrorMode", "");
AnkiDroidApp.getInstance().setAcraReportingMode(value);
break;
case "syncAccount":
}
case "syncAccount": {
SharedPreferences preferences = AnkiDroidApp.getSharedPrefs(getBaseContext());
String username = preferences.getString("username", "");
Preference syncAccount = screen.findPreference("syncAccount");
@ -449,6 +455,21 @@ public class Preferences extends AppCompatPreferenceActivity implements Preferen
}
}
break;
}
case "providerEnabled": {
ComponentName providerName = new ComponentName(this, "com.ichi2.anki.provider.CardContentProvider");
PackageManager pm = getPackageManager();
int state;
if (((CheckBoxPreference) pref).isChecked()) {
state = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Timber.i("AnkiDroid ContentProvider enabled by user");
} else {
state = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
Timber.i("AnkiDroid ContentProvider disabled by user");
}
pm.setComponentEnabledSetting(providerName, state, PackageManager.DONT_KILL_APP);
break;
}
}
// Update the summary text to reflect new value
updateSummary(pref);

View File

@ -136,6 +136,8 @@
<string name="filter_google_translate">From Google Translate</string>
<string name="filter_google_translate_summ">Just save source word and translation</string>
<string name="convert_fen_text_summ">Draw chessboard from ForsythEdwards Notation. The notation must be enclosed in [fen][/fen] tags.</string>
<string name="enable_api_title">Enable AnkiDroid API</string>
<string name="enable_api_summary">Let other apps connect to AnkiDroid and read / write data without your intervention</string>
<!-- studyoptions -->
<string name="studyoptions_limit_select_tags">Select tags</string>

View File

@ -68,6 +68,11 @@
<PreferenceCategory
android:key="category_plugins"
android:title="@string/pref_cat_plugins" >
<CheckBoxPreference
android:defaultValue="true"
android:key="providerEnabled"
android:summary="@string/enable_api_summary"
android:title="@string/enable_api_title"/>
<CheckBoxPreference
android:defaultValue="false"
android:key="tts"