mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -04:00
Settings, i.p. allow changing Zoom (Work in progress)
note that recommendation is actually to use fragment instead of activity on Honeycomb or newer (so reconsider changing it).
This commit is contained in:
parent
6c84338b86
commit
721a2c9d6c
@ -29,6 +29,8 @@ android:anyDensity="true"
|
||||
<data android:pathPattern=".*\\..*\\..*\\..*\\.zim.*"/>
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".KiwixSettings">
|
||||
</activity>
|
||||
<provider
|
||||
android:name=".ZimContentProvider"
|
||||
|
@ -58,6 +58,13 @@
|
||||
android:orderInCategory="0"
|
||||
android:showAsAction="never" />
|
||||
|
||||
<item android:id="@+id/menu_settings"
|
||||
android:title="@string/menu_settings"
|
||||
android:icon="@drawable/navigation_forward"
|
||||
android:orderInCategory="0"
|
||||
android:showAsAction="never"/>
|
||||
|
||||
|
||||
|
||||
|
||||
</menu>
|
||||
|
@ -6,6 +6,7 @@
|
||||
<string name="menu_home">Home</string>
|
||||
<string name="menu_forward">Forward</string>
|
||||
<string name="menu_back">Back</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="menu_search">Search article</string>
|
||||
<string name="menu_searchintext">Find in page</string>
|
||||
<string name="search_label">Search</string>
|
||||
@ -16,4 +17,25 @@
|
||||
<string name="error_fileinvalid">Error: The selected file is not a valid ZIM file.</string>
|
||||
<string name="error_articlenotfound">Error: Loading article \"%1$s\" failed.</string>
|
||||
<string name="error_articleurlnotfound">Error: Loading article (Url: %1$s) failed.</string>
|
||||
<string name="pref_display_title">Display</string>
|
||||
<string name="pref_zoom_title">Zoom</string>
|
||||
<string name="pref_zoom_summary">%s</string>
|
||||
<string name="pref_zoom_dialogtitle">Zoom</string>
|
||||
<string-array
|
||||
name="pref_zoom_entries">
|
||||
<item>Automatic</item>
|
||||
<item>Small</item>
|
||||
<item>Medium</item>
|
||||
<item>Large</item>
|
||||
</string-array>
|
||||
|
||||
<string-array
|
||||
name="pref_zoom_entryvalues"
|
||||
translatable="false">
|
||||
<item>automatic</item>
|
||||
<item>small</item>
|
||||
<item>medium</item>
|
||||
<item>large</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
24
res/xml/preferences.xml
Normal file
24
res/xml/preferences.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory
|
||||
android:key="pref_display"
|
||||
android:title="@string/pref_display_title">
|
||||
|
||||
|
||||
<ListPreference
|
||||
android:key="pref_zoom"
|
||||
android:title="@string/pref_zoom_title"
|
||||
android:summary="@string/pref_zoom_summary"
|
||||
android:dialogTitle="@string/pref_zoom_dialogtitle"
|
||||
android:entries="@array/pref_zoom_entries"
|
||||
android:entryValues="@array/pref_zoom_entryvalues"
|
||||
android:defaultValue="automatic" />
|
||||
|
||||
</PreferenceCategory>
|
||||
<!-- PreferenceCategory
|
||||
android:title="INFO"
|
||||
android:key="pref_key_info">
|
||||
|
||||
|
||||
</PreferenceCategory>-->
|
||||
|
||||
</PreferenceScreen>
|
@ -20,8 +20,11 @@ import android.content.pm.LabeledIntent;
|
||||
import android.content.res.Configuration;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
@ -55,6 +58,7 @@ public class KiwixMobileActivity extends Activity {
|
||||
private ArrayAdapter<String> adapter;
|
||||
protected boolean requestClearHistoryAfterLoad;
|
||||
private static final int ZIMFILESELECT_REQUEST_CODE = 1234;
|
||||
private static final int PREFERENCES_REQUEST_CODE = 1235;
|
||||
private static final String PREFS_KIWIX_MOBILE = "kiwix-mobile";
|
||||
private AutoCompleteTextView articleSearchtextView;
|
||||
private LinearLayout articleSearchBar;
|
||||
@ -225,22 +229,14 @@ public class KiwixMobileActivity extends Activity {
|
||||
}
|
||||
});
|
||||
|
||||
//Pinch to zoom
|
||||
loadPref();
|
||||
//Pinch to zoom
|
||||
webView.getSettings().setBuiltInZoomControls(true);
|
||||
//webView.getSettings().setLoadsImagesAutomatically(false);
|
||||
//Does not make much sense to cache data from zim files.(Not clear whether
|
||||
// this actually has any effect)
|
||||
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
|
||||
//Workaround to avoid that default zoom is very small on tablets
|
||||
// TODO: find better solution, e.g. user configurable zoom setting
|
||||
if (isTablet(getBaseContext())) {
|
||||
Log.d("kiwix", " Device is tablet -> setDefaultZoom(WebSettings.ZoomDensity.CLOSE)");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
|
||||
} else {
|
||||
Log.d("kiwix", " Device is phone-> setDefaultZoom(WebSettings.ZoomDensity.MEDIUM)");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
|
||||
}
|
||||
if (getIntent().getData()!=null) {
|
||||
if (getIntent().getData()!=null) {
|
||||
String filePath = getIntent().getData().getEncodedPath();
|
||||
Log.d("kiwix", " Kiwix started from a filemanager. Intent filePath: "+filePath+" -> open this zimfile and load main page");
|
||||
openZimFile(new File(filePath), false);
|
||||
@ -267,10 +263,27 @@ public class KiwixMobileActivity extends Activity {
|
||||
showWelcome();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void loadPref(){
|
||||
SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
String pref_zoom = mySharedPreferences.getString("pref_zoom", "automatic");
|
||||
if (pref_zoom.equals("automatic")) {
|
||||
setDefaultZoom();
|
||||
} else if (pref_zoom.equals("medium")) {
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
|
||||
} else if (pref_zoom.equals("small")) {
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
|
||||
} else if (pref_zoom.equals("large")) {
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
|
||||
} else {
|
||||
Log.w("kiwix", "pref_displayZoom value ("+pref_zoom+" unknown. Assuming automatic");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
@ -340,8 +353,16 @@ public class KiwixMobileActivity extends Activity {
|
||||
showHelp();
|
||||
break;
|
||||
case R.id.menu_openfile:
|
||||
|
||||
selectZimFile();
|
||||
break;
|
||||
|
||||
case R.id.menu_settings:
|
||||
// Display the fragment as the main content.
|
||||
Intent i = new Intent(this, KiwixSettings.class);
|
||||
startActivityForResult(i, PREFERENCES_REQUEST_CODE);
|
||||
break;
|
||||
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
@ -430,6 +451,11 @@ public class KiwixMobileActivity extends Activity {
|
||||
// Create a File from this Uri
|
||||
openZimFile(file, true);
|
||||
}
|
||||
break;
|
||||
case PREFERENCES_REQUEST_CODE:
|
||||
|
||||
loadPref();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -532,4 +558,35 @@ public class KiwixMobileActivity extends Activity {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(articleSearchtextView.getWindowToken(),0);
|
||||
}
|
||||
}
|
||||
|
||||
private void setDefaultZoom() {
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
|
||||
//Cleaner than approach used in 1.0 to set CLOSE for tables, MEDIUM for phones.
|
||||
// However, unfortunately at least on Samsung Galaxy Tab 2 density is medium.
|
||||
// Anyway, user can now override so it should be ok.
|
||||
switch (metrics.densityDpi) {
|
||||
case DisplayMetrics.DENSITY_HIGH:
|
||||
Log.d("kiwix", "setDefaultZoom for Display DENSITY_HIGH-> ZoomDensity.FAR ");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
|
||||
break;
|
||||
|
||||
case DisplayMetrics.DENSITY_MEDIUM:
|
||||
Log.d("kiwix", "setDefaultZoom for Display DENSITY_MEDIUM-> ZoomDensity.MEDIUM ");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
|
||||
break;
|
||||
|
||||
case DisplayMetrics.DENSITY_LOW:
|
||||
Log.d("kiwix", "setDefaultZoom for Display DENSITY_LOW-> ZoomDensity.CLOSE ");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
|
||||
break;
|
||||
|
||||
default:
|
||||
Log.d("kiwix", "setDefaultZoom for Display OTHER -> ZoomDensity.MEDIUM ");
|
||||
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
15
src/org/kiwix/kiwixmobile/KiwixSettings.java
Normal file
15
src/org/kiwix/kiwixmobile/KiwixSettings.java
Normal file
@ -0,0 +1,15 @@
|
||||
package org.kiwix.kiwixmobile;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
|
||||
public class KiwixSettings extends PreferenceActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// Load the preferences from an XML resource
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user