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:
cip 2013-04-06 10:04:49 +02:00
parent 6c84338b86
commit 721a2c9d6c
6 changed files with 140 additions and 13 deletions

View File

@ -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"

View File

@ -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>

View File

@ -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
View 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>

View File

@ -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;
}
}
}

View 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);
}
}