Index: mobile/android/thirdparty/org/adblockplus/browser/StartPane.java |
diff --git a/mobile/android/thirdparty/org/adblockplus/browser/StartPane.java b/mobile/android/thirdparty/org/adblockplus/browser/StartPane.java |
index b8fafcfe204dc68c1ae8d47697a464936f032492..fcd689c084f3a6fd73e9580655db1c591b41d1dd 100644 |
--- a/mobile/android/thirdparty/org/adblockplus/browser/StartPane.java |
+++ b/mobile/android/thirdparty/org/adblockplus/browser/StartPane.java |
@@ -17,14 +17,24 @@ |
package org.adblockplus.browser; |
+import java.io.File; |
+import java.io.FileOutputStream; |
+import java.io.IOException; |
+import java.io.InputStream; |
+import java.util.ArrayList; |
+import java.util.HashMap; |
+import java.util.List; |
+import java.util.Map; |
+ |
import org.mozilla.gecko.R; |
import android.content.Context; |
import android.content.DialogInterface; |
import android.content.DialogInterface.OnKeyListener; |
+import android.graphics.Typeface; |
import android.os.Bundle; |
import android.support.v4.app.DialogFragment; |
-import android.text.Html; |
+import android.util.Log; |
import android.view.KeyEvent; |
import android.view.LayoutInflater; |
import android.view.View; |
@@ -41,12 +51,66 @@ public class StartPane extends DialogFragment implements OnClickListener, OnKeyL |
private static final String TAG = "AdblockBrowser.StartPane"; |
private int currentStep = 1; |
private static final int NUMBER_OF_STEPS = 3; |
+ private static final HashMap<String, Integer> FONTS = new HashMap<String, Integer>(); |
+ private HashMap<String, Typeface> loadedFonts = new HashMap<String, Typeface>(); |
+ |
+ static |
+ { |
+ FONTS.put("ttf_opensans_light", R.raw.opensans_light); |
+ FONTS.put("ttf_opensans_semibold", R.raw.opensans_semibold); |
+ } |
+ |
+ static Typeface typefaceFromResource(final Context context, final int resId) |
+ { |
+ Typeface ret = null; |
+ try |
+ { |
+ context.getCacheDir().mkdir(); |
+ final File output = File.createTempFile("abb_font", ".ttf"); |
+ final byte[] buffer = new byte[4096]; |
+ final InputStream in = context.getResources().openRawResource(resId); |
+ final FileOutputStream out = new FileOutputStream(output); |
+ for (;;) |
+ { |
+ final int read = in.read(buffer); |
+ if (read < 0) |
+ { |
+ break; |
+ } |
+ out.write(buffer, 0, read); |
+ } |
+ in.close(); |
+ out.close(); |
+ ret = Typeface.createFromFile(output); |
+ output.delete(); |
+ } |
+ catch (IOException e) |
+ { |
+ Log.e(TAG, "Failed to load typeface: " + e.getMessage(), e); |
+ } |
+ return ret; |
+ } |
+ |
+ private void loadTypefaces() |
+ { |
+ final Context context = this.getActivity(); |
+ this.loadedFonts.clear(); |
+ for (Map.Entry<String, Integer> e : FONTS.entrySet()) |
+ { |
+ final Typeface t = typefaceFromResource(context, e.getValue().intValue()); |
+ if (t != null) |
+ { |
+ this.loadedFonts.put(e.getKey(), t); |
+ } |
+ } |
+ } |
@Override |
public void onCreate(Bundle savedInstanceState) |
{ |
super.onCreate(savedInstanceState); |
this.setStyle(DialogFragment.STYLE_NO_TITLE, 0); |
+ this.loadTypefaces(); |
} |
@Override |
@@ -54,7 +118,6 @@ public class StartPane extends DialogFragment implements OnClickListener, OnKeyL |
{ |
final View view = inflater.inflate(R.layout.abb_start_pane, container, false); |
- this.setTextViewTextHtml(view, R.id.abb_app_title, "Adblock <b>Browser</b>"); |
this.updateContents(view); |
this.getDialog().setOnKeyListener(this); |
@@ -101,6 +164,27 @@ public class StartPane extends DialogFragment implements OnClickListener, OnKeyL |
return false; |
} |
+ private static List<View> listViews(final View parent) |
+ { |
+ final List<View> views = new ArrayList<View>(); |
+ listViews(parent, views); |
+ return views; |
+ } |
+ |
+ private static void listViews(final View parent, final List<View> views) |
+ { |
+ views.add(parent); |
+ if (parent instanceof ViewGroup) |
+ { |
+ final ViewGroup vg = (ViewGroup) parent; |
+ final int childCount = vg.getChildCount(); |
+ for (int i = 0; i < childCount; i++) |
+ { |
+ listViews(vg.getChildAt(i), views); |
+ } |
+ } |
+ } |
+ |
private void updateContents(final View view) |
{ |
final LinearLayout ll = (LinearLayout) view.findViewById(R.id.abb_main_content); |
@@ -117,12 +201,27 @@ public class StartPane extends DialogFragment implements OnClickListener, OnKeyL |
this.getResources().getIdentifier("abb_frp_button_" + this.currentStep, |
"string", |
this.getActivity().getPackageName())); |
- } |
- private void setTextViewTextHtml(final View view, final int viewId, final String text) |
- { |
- final TextView tv = (TextView) view.findViewById(viewId); |
- tv.setText(Html.fromHtml(text)); |
+ final List<View> views = listViews(view); |
+ for (View v : views) |
+ { |
+ final Object tag = v.getTag(); |
+ if (tag != null) |
Felix Dahlke
2015/05/22 11:50:57
Shouldn't we also check that the tags starts with
René Jeschke
2015/05/22 12:04:44
We are matching non-null tags against the font has
Felix Dahlke
2015/05/22 12:09:57
Yeah true.
|
+ { |
+ Typeface t = this.loadedFonts.get(tag.toString()); |
+ if (t != null) |
+ { |
+ if (v instanceof TextView) |
+ { |
+ ((TextView) v).setTypeface(t); |
+ } |
+ else if (v instanceof Button) |
+ { |
+ ((Button) v).setTypeface(t); |
+ } |
+ } |
+ } |
+ } |
} |
private void setButtonText(final View view, final int viewId, final int resId) |