Repository: chrisjenx/Calligraphy Branch: master Commit: 085e441954d7 Files: 49 Total size: 119.9 KB Directory structure: gitextract_ddbcg5tt/ ├── .gitignore ├── CHANGELOG.md ├── CalligraphySample/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.txt │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── uk/ │ │ └── co/ │ │ └── chrisjenx/ │ │ └── calligraphy/ │ │ └── sample/ │ │ ├── CalligraphyApplication.java │ │ ├── CustomTextView.java │ │ ├── CustomViewWithTypefaceSupport.java │ │ ├── MainActivity.java │ │ ├── PlaceholderFragment.java │ │ └── TextField.java │ └── res/ │ ├── layout/ │ │ ├── activity_main.xml │ │ ├── fragment_main.xml │ │ ├── stub.xml │ │ └── stub_with_font_path.xml │ ├── values/ │ │ ├── attrs.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── values-w820dp/ │ └── dimens.xml ├── LICENSE ├── README.md ├── build.gradle ├── calligraphy/ │ ├── .gitignore │ ├── build.gradle │ ├── consumer-proguard-rules.txt │ ├── gradle.properties │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── uk/ │ │ └── co/ │ │ └── chrisjenx/ │ │ └── calligraphy/ │ │ ├── CalligraphyActivityFactory.java │ │ ├── CalligraphyConfig.java │ │ ├── CalligraphyContextWrapper.java │ │ ├── CalligraphyFactory.java │ │ ├── CalligraphyLayoutInflater.java │ │ ├── CalligraphyTypefaceSpan.java │ │ ├── CalligraphyUtils.java │ │ ├── HasTypeface.java │ │ ├── ReflectionUtils.java │ │ └── TypefaceUtils.java │ └── res/ │ └── values/ │ ├── attrs.xml │ ├── ids.xml │ └── public.xml ├── gradle/ │ ├── deploy.gradle │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # built application files *.apk *.ap_ # files for the dex VM *.dex # Java class files *.class # generated files bin/ gen/ # Local configuration file (sdk path, etc) local.properties /local.properties # Eclipse .classpath .project .settings # Android Studio (InteliJ) .idea/ /.idea/workspace.xml *.iml *.iws *.ipr /*/out /*/build /*/*/production #Gradle .gradletasknamecache .gradle/ build/ bin/ #Crashlytics com_crashlytics_export_strings.xml #OSx .DS_Store ================================================ FILE: CHANGELOG.md ================================================ # Changelog # 2.3.0 (11/05/2017) - Fix Toolbar TextView's layout race condition. [@ansman](https://github.com/ansman) #386, #368, #327, #280, #304, #363 # 2.2.0 (05/04/2016) - Added AppCompat Styles (AppCompatTextView will now pickup textViewStyle etc). Thanks @paul-turner - Fix for Toolbar not inflating `TextView`s upfront. # 2.1.0 (27/04/2015) - Fixed #155, We now clone correctly. - Added Styles for Custom Views. (`builder.addCustomStyle(ToggleButton.class, android.R.attr.buttonStyleToggle)`) # 2.0.2 (05/01/2015) - Fixed `CalligraphyConfig.Builder` missing return statements. - Fixed `createView()` getting the wrong parent context, Fixed: #135, #120 # 2.0.1 (28/01/2014) - Throw exception on passing null into `CalligraphySpan` - Fixed memory bug with `Toolbar`. [@dlew](https://github.com/dlew) # 2.0.0 (16/01/2014) **Breaking changes** This is a massive rewrite of the interception model. Look at `CalligraphyLayoutInflater` and `CalligraphyConfig` for more information on options and changes. - **BREAKING CHANGE** This is an API change to Calligraphy config. Changed CalligraphyConfig to a builder pattern, use `CalligraphyConfig.Builder().build()`; Notable changes: - Removed jar binary, We build an @aar due to the way we tag `View`s. - Intercept View creation at each stage. - Defer view creation to native components (Except CustomViews). - Inject `setPrivateFactory` on the `Activity`. - We wrap Factory not disturbing underlying factory and layout inflater invocation. - Better support for `cloneInContext()` which the compat library uses heavily. # 1.2.0 (20/10/2014) - Fixes issues with `appcompat-v7:21+` (uses underlying `Toolbar` impl). - Lollipop support. - Fast path view with font already set by us. # 1.1.0 (02/08/2014) - Fixes ActionBar Title/SubTitle `textStyles`. - Fixes `textAllCaps` bug, now works correctly. - Fixes some `Spannable` issues reported, we are more careful what we apply `Spannable`'s too now. - Fixes missing Typeface on hint text on `EditText`/`AutoComplete`. - Fixes empty source and javadoc jars on maven. # 1.0.0 (05/07/2014) - Added ActionBar Title/SubTitle support. - Toast support via default style/or TextView theme style. - Removed FontFamily parsing as it lead to users not being able to use `fontFamily` - Added TextAppearance Support - Thanks [@codebutler](https://github.com/codebutler) & [@loganj](https://github.com/loganj) - Default Font no longer required. # 0.8/9 (Skipped major API change) # 0.7.1 (22/04/2014) - Fixed Resources not found Exception - [@Smuldr](https://github.com/Smuldr) # 0.7.0 (28/01/2014) - Added Anti-aliasing support - Added custom font attribute support - Thanks [@Roman Zhilich](https://github.com/RomanZhilich) - Changed Maven groupId to `uk.co.chrisjenx` artifact is now `calligraphy`. `compile 'uk.co.chrisjenx:calligraphy:0.+'` # 0.6.0 (02/01/2014) - Supports all Android implementations of `TextView` - Supports Custom `TextView`s - Thanks [@mironov-nsk](https://github.com/mironov-nsk) - Caches none found fonts as null # 0.5.0 - Added support for `Button` class # 0.4.0 - Initial Release ================================================ FILE: CalligraphySample/.gitignore ================================================ /build ================================================ FILE: CalligraphySample/build.gradle ================================================ apply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode project.ext.versionCodeInt versionName version } buildTypes { debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { implementation project(':calligraphy') implementation "com.android.support:support-v4:${supportLibraryVersion}" implementation "com.android.support:appcompat-v7:${supportLibraryVersion}" implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' // debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.3.1' debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' } ================================================ FILE: CalligraphySample/proguard-rules.txt ================================================ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in /Developer/android-sdk-osx/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* ; } -keepclasseswithmembernames class * { @butterknife.* ; } ================================================ FILE: CalligraphySample/src/main/AndroidManifest.xml ================================================ ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/CalligraphyApplication.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.app.Application; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; /** * Created by chris on 06/05/2014. * For Calligraphy. */ public class CalligraphyApplication extends Application { @Override public void onCreate() { super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/Roboto-ThinItalic.ttf") .setFontAttrId(R.attr.fontPath) .addCustomViewWithSetTypeface(CustomViewWithTypefaceSupport.class) .addCustomStyle(TextField.class, R.attr.textFieldStyle) .build() ); } } ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/CustomTextView.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; public class CustomTextView extends TextView { public CustomTextView(Context context) { super(context); } public CustomTextView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } } ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/CustomViewWithTypefaceSupport.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.os.Build; import android.util.AttributeSet; import android.view.View; /** * @author Dmitriy Tarasov */ public class CustomViewWithTypefaceSupport extends View { private Paint paint; private Rect textBounds; private int width; private int height; public CustomViewWithTypefaceSupport(Context context) { super(context); init(); } public CustomViewWithTypefaceSupport(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomViewWithTypefaceSupport(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public CustomViewWithTypefaceSupport(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } private void init() { paint = new Paint(); paint.setTextSize(50); textBounds = new Rect(); } @Override protected void onDraw(Canvas canvas) { String text = "This is a custom view with setTypeface support"; Paint.FontMetrics fm = paint.getFontMetrics(); paint.getTextBounds(text, 0, text.length(), textBounds); width = textBounds.left + textBounds.right + getPaddingLeft() + getPaddingRight(); height = (int) (Math.abs(fm.top) + fm.bottom); canvas.drawText(text, 0, -fm.top + getPaddingTop(), paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(width, height); } /** * Used by Calligraphy to change view's typeface */ @SuppressWarnings("unused") public void setTypeface(Typeface tf) { paint.setTypeface(tf); invalidate(); } } ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/MainActivity.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; import static butterknife.ButterKnife.findById; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Toolbar toolbar = findById(this, R.id.toolbar); setSupportActionBar(toolbar); // Inject pragmatically getSupportFragmentManager() .beginTransaction() .replace(R.id.container, PlaceholderFragment.getInstance()) .commit(); final Handler handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() { // toolbar.setTitle("Calligraphy Added"); toolbar.setSubtitle("Added subtitle"); } }, 1000); handler.postDelayed(new Runnable() { @Override public void run() { toolbar.setTitle(null); toolbar.setSubtitle("Added subtitle"); } }, 2000); handler.postDelayed(new Runnable() { @Override public void run() { toolbar.setTitle("Calligraphy added back"); toolbar.setSubtitle("Added subtitle"); } }, 3000); } /* Uncomment if you disable PrivateFactory injection. See CalligraphyConfig#disablePrivateFactoryInjection() */ // @Override // @TargetApi(Build.VERSION_CODES.HONEYCOMB) // public View onCreateView(View parent, String name, @NonNull Context context, @NonNull AttributeSet attrs) { // return CalligraphyContextWrapper.onActivityCreateView(this, parent, super.onCreateView(parent, name, context, attrs), name, context, attrs); // } @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } } ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/PlaceholderFragment.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import butterknife.ButterKnife; import butterknife.OnClick; /** * A placeholder fragment containing a simple view. */ public class PlaceholderFragment extends Fragment { public static Fragment getInstance() { return new PlaceholderFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { return inflater.inflate(R.layout.fragment_main, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.bind(this, view); } @OnClick(R.id.button_bold) public void onClickBoldButton() { Toast.makeText(getActivity(), "Custom Typeface toast text", Toast.LENGTH_SHORT).show(); } @OnClick(R.id.button_default) public void onClickDefaultButton() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("Custom Typeface Dialog"); builder.setTitle("Sample Dialog"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } } ================================================ FILE: CalligraphySample/src/main/java/uk/co/chrisjenx/calligraphy/sample/TextField.java ================================================ package uk.co.chrisjenx.calligraphy.sample; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; /** * Created by chris on 17/03/15. * For Calligraphy. */ public class TextField extends TextView { public TextField(final Context context, final AttributeSet attrs) { super(context, attrs, R.attr.textFieldStyle); } } ================================================ FILE: CalligraphySample/src/main/res/layout/activity_main.xml ================================================ ================================================ FILE: CalligraphySample/src/main/res/layout/fragment_main.xml ================================================