Java tutorial
package com.pixby.texo.EditTools; /* * Copyright (c) 2016 David Allen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import android.database.Cursor; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageButton; import com.pixby.texo.R; import com.pixby.texo.data.LoaderConstants; import com.pixby.texo.data.StyleContract; import com.pixby.texo.watermark.TextStyle; import com.pixby.texo.watermark.Watermark; public class TextStylesTool extends ToolFragment { private TextStyleAdapter mAdapter; private TextStyle mInitialStyle; public static TextStylesTool newInstance() { TextStylesTool f = new TextStylesTool(); f.mToolViewId = R.layout.text_styles_tool; return f; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new TextStyleAdapter(getActivity().getAssets()); mAdapter.setOnItemClickListener(new TextStyleAdapter.ClickListener() { @Override public void onItemClick(int position) { TextStyle style = mAdapter.getStyleAtPosition(position); setTextStyle(style); } }); loadStyleData(); } @Override public void onStart() { super.onStart(); init(); } private void init() { saveInitialStyle(getWatermark()); } @Override public void onViewCreated(View v, @Nullable Bundle savedInstanceState) { super.onViewCreated(v, savedInstanceState); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); ImageButton okButton = (ImageButton) v.findViewById(R.id.save_button); ImageButton cancelButton = (ImageButton) v.findViewById(R.id.cancel_button); RecyclerView styleList = (RecyclerView) v.findViewById(R.id.styleList); styleList.setHasFixedSize(true); styleList.setLayoutManager(layoutManager); styleList.setAdapter(mAdapter); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getListener().onSave(getTag()); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setTextStyle(getInitialStyle()); getListener().onCancel(getTag()); } }); } private void loadStyleData() { getActivity().getSupportLoaderManager().initLoader(LoaderConstants.STYLE_LOADER, new Bundle(), stylesLoader); } private void setTextStyle(TextStyle style) { TextStyle tempStyle = TextStyle.getInstance(style); TextStyle initialStyle = getInitialStyle(); tempStyle.typeFaceInfo = style.typeFaceInfo; // If style does not set a given property use original watermark values // For example if incoming text is translucent, keep it that way if (style.alpha == TextStyle.IGNORE) { tempStyle.alpha = initialStyle.alpha; } if (style.color == TextStyle.IGNORE) { tempStyle.color = initialStyle.color; } if (style.backgroundColor == TextStyle.IGNORE) { tempStyle.backgroundColor = Color.TRANSPARENT; } getWatermark().setStyle(tempStyle); fitTextToWidth(); getEditView().invalidate(); } // if text size with new font is > image bounds set to fit otherwise leave alone private void fitTextToWidth() { float textWidth = getWatermark().getWidth(); float imageWidth = getEditView().getImageIntrinsicWidth(); float worldSize; if (textWidth > imageWidth) { float newSize = getWatermark().calcTextSize(imageWidth); getWatermark().setTextSize(newSize); worldSize = 1.0f; } else { worldSize = textWidth / imageWidth; } getWatermark().setWorldSize(worldSize); } private void saveInitialStyle(Watermark watermark) { mInitialStyle = new TextStyle(); mInitialStyle.alpha = watermark.getAlpha(); mInitialStyle.color = watermark.getColor(); mInitialStyle.typeFaceInfo = watermark.getTypefaceInfo(); mInitialStyle.backgroundColor = watermark.getBackgroundColor(); } private TextStyle getInitialStyle() { return mInitialStyle; } private final LoaderManager.LoaderCallbacks<Cursor> stylesLoader = new LoaderManager.LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(getActivity(), StyleContract.StyleTable.CONTENT_URI, StyleContract.StyleTable.PROJECTION_ALL, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { mAdapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { mAdapter.swapCursor(null); } }; }