1package org.libreoffice;
3import android.graphics.Color;
4import android.graphics.Rect;
5import com.google.android.material.bottomsheet.BottomSheetBehavior;
6import androidx.recyclerview.widget.GridLayoutManager;
7import androidx.recyclerview.widget.RecyclerView;
8import android.view.View;
9import android.widget.AdapterView;
10import android.widget.ArrayAdapter;
11import android.widget.Button;
12import android.widget.ImageButton;
13import android.widget.LinearLayout;
14import android.widget.RelativeLayout;
15import android.widget.Spinner;
17import org.json.JSONArray;
18import org.json.JSONException;
19import org.json.JSONObject;
21import java.util.ArrayList;
22import java.util.HashMap;
23import java.util.Iterator;
33 private final ArrayList<String>
mFontList =
new ArrayList<>();
34 private final ArrayList<String>
mFontSizes =
new ArrayList<>();
35 private final HashMap<String, ArrayList<String>>
mAllFontSizes =
new HashMap<>();
51 public void applyColor(
int color) {
56 public void updateColorPickerPosition(
int color) {
65 final int colorWithAlpha =
color | 0xFF000000;
73 public void applyColor(
int color) {
78 public void updateColorPickerPosition(
int color) {
87 final int colorWithAlpha =
color | 0xFF000000;
94 final ImageButton fontColorPickerButton =
mActivity.findViewById(
R.id.font_color_picker_button);
99 fontColorPickerButton.setBackgroundColor(
color);
105 final ImageButton fontBackColorPickerButton =
mActivity.findViewById(
R.id.font_back_color_picker_button);
110 fontBackColorPickerButton.setBackgroundColor(
color);
117 JSONObject json =
new JSONObject();
118 JSONObject valueJson =
new JSONObject();
119 valueJson.put(
"type",
"string");
120 valueJson.put(
"value", fontName);
121 json.put(
"CharFontName.FamilyName", valueJson);
125 }
catch (JSONException e) {
132 JSONObject json =
new JSONObject();
133 JSONObject valueJson =
new JSONObject();
134 valueJson.put(
"type",
"float");
135 valueJson.put(
"value", fontSize);
136 json.put(
"FontHeight.Height", valueJson);
140 }
catch (JSONException e) {
147 JSONObject json =
new JSONObject();
148 JSONObject valueJson =
new JSONObject();
149 valueJson.put(
"type",
"long");
150 valueJson.put(
"value", keepAlpha ?
color : 0x00FFFFFF &
color);
151 json.put(
"Color", valueJson);
156 }
catch (JSONException e) {
167 JSONObject json =
new JSONObject();
168 JSONObject valueJson =
new JSONObject();
169 valueJson.put(
"type",
"long");
170 valueJson.put(
"value", keepAlpha ?
color : 0x00FFFFFF &
color);
172 json.put(
"BackgroundColor", valueJson);
175 json.put(
"CharBackColor", valueJson);
181 }
catch (JSONException e) {
191 if (parent ==
mActivity.findViewById(
R.id.font_name_spinner)) {
192 String currentFontSelected = parent.getItemAtPosition(
pos).toString();
197 }
else if (parent ==
mActivity.findViewById(
R.id.font_size_spinner)) {
198 String currentFontSizeSelected = parent.getItemAtPosition(
pos).toString();
215 JSONObject jObject =
new JSONObject(json);
216 JSONObject jObject2 = jObject.getJSONObject(
"commandValues");
217 Iterator<String> keys = jObject2.keys();
218 ArrayList<String> fontSizes;
219 while (keys.hasNext()) {
222 JSONArray array = jObject2.getJSONArray(key);
223 fontSizes =
new ArrayList<>();
224 for (
int i = 0;
i < array.length();
i++) {
225 fontSizes.add(array.getString(
i));
229 }
catch (JSONException e) {
246 Spinner fontSpinner =
mActivity.findViewById(
R.id.font_name_spinner);
247 ArrayAdapter<String> dataAdapter =
new ArrayAdapter<>(
mActivity, android.R.layout.simple_spinner_item,
mFontList);
248 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
249 fontSpinner.setAdapter(dataAdapter);
253 Spinner fontSizeSpinner =
mActivity.findViewById(
R.id.font_size_spinner);
254 ArrayAdapter<String> dataAdapter =
new ArrayAdapter<>(
mActivity, android.R.layout.simple_spinner_item,
mFontSizes);
255 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
256 fontSizeSpinner.setAdapter(dataAdapter);
260 LinearLayout colorPickerLayout =
mActivity.findViewById(
R.id.toolbar_color_picker);
262 RecyclerView recyclerView = colorPickerLayout.findViewById(
R.id.fontColorView);
263 GridLayoutManager gridLayoutManager =
new GridLayoutManager(
mActivity, 11, GridLayoutManager.VERTICAL,
true);
264 recyclerView.setHasFixedSize(
true);
265 recyclerView.setLayoutManager(gridLayoutManager);
269 RecyclerView recyclerView2 = colorPickerLayout.findViewById(
R.id.fontColorViewSub);
270 GridLayoutManager gridLayoutManager2 =
new GridLayoutManager(
mActivity,4);
271 recyclerView2.setHasFixedSize(
true);
272 recyclerView2.addItemDecoration(
new RecyclerView.ItemDecoration() {
275 public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
282 recyclerView2.setLayoutManager(gridLayoutManager2);
285 recyclerView2.setAdapter(colorPaletteAdapter);
289 RelativeLayout fontColorPicker =
mActivity.findViewById(
R.id.font_color_picker);
290 ImageButton fontColorPickerButton =
mActivity.findViewById(
R.id.font_color_picker_button);
291 View.OnClickListener clickListener =
new View.OnClickListener(){
293 public void onClick(View view) {
296 mActivity.findViewById(
R.id.search_toolbar).setVisibility(
View.GONE);
299 LinearLayout toolbarBottomLayout =
mActivity.findViewById(
R.id.toolbar_bottom);
303 ImageButton pickerGoBackButton = colorPickerLayout.findViewById(
R.id.button_go_back_color_picker);
304 pickerGoBackButton.setOnClickListener(
new View.OnClickListener() {
306 public void onClick(View view) {
307 toolBarBottomBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
308 colorPickerBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
313 fontColorPicker.setOnClickListener(clickListener);
314 fontColorPickerButton.setOnClickListener(clickListener);
316 final Button autoColorButton = colorPickerLayout.findViewById(
R.id.button_auto_color);
317 autoColorButton.setOnClickListener(view -> {
318 sendFontColorChange(COLOR_AUTO,
true);
323 LinearLayout backColorPickerLayout = mActivity.findViewById(
R.id.toolbar_back_color_picker);
325 RecyclerView recyclerView = backColorPickerLayout.findViewById(
R.id.fontColorView);
326 GridLayoutManager gridLayoutManager =
new GridLayoutManager(mActivity, 11, GridLayoutManager.VERTICAL,
true);
327 recyclerView.setHasFixedSize(
true);
328 recyclerView.setLayoutManager(gridLayoutManager);
332 RecyclerView recyclerView2 = backColorPickerLayout.findViewById(
R.id.fontColorViewSub);
333 GridLayoutManager gridLayoutManager2 =
new GridLayoutManager(mActivity,4);
334 recyclerView2.setHasFixedSize(
true);
335 recyclerView2.addItemDecoration(
new RecyclerView.ItemDecoration() {
338 public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
345 recyclerView2.setLayoutManager(gridLayoutManager2);
348 recyclerView2.setAdapter(colorPaletteAdapter);
350 this.backColorPickerAdapter =
new ColorPickerAdapter(mActivity, colorPaletteAdapter, backColorPaletteListener);
351 recyclerView.setAdapter(backColorPickerAdapter);
352 RelativeLayout fontColorPicker = mActivity.findViewById(
R.id.font_back_color_picker);
353 ImageButton fontColorPickerButton = mActivity.findViewById(
R.id.font_back_color_picker_button);
354 View.OnClickListener clickListener =
new View.OnClickListener(){
356 public void onClick(View view) {
357 toolBarBottomBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
358 backColorPickerBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
359 mActivity.findViewById(
R.id.search_toolbar).setVisibility(
View.GONE);
362 LinearLayout toolbarBottomLayout = mActivity.findViewById(
R.id.toolbar_bottom);
363 backColorPickerBehavior = BottomSheetBehavior.from(backColorPickerLayout);
364 toolBarBottomBehavior = BottomSheetBehavior.from(toolbarBottomLayout);
366 ImageButton pickerGoBackButton = backColorPickerLayout.findViewById(
R.id.button_go_back_color_picker);
367 pickerGoBackButton.setOnClickListener(
new View.OnClickListener() {
369 public void onClick(View view) {
370 toolBarBottomBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
371 backColorPickerBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
376 fontColorPicker.setOnClickListener(clickListener);
377 fontColorPickerButton.setOnClickListener(clickListener);
379 final Button autoColorButton = backColorPickerLayout.findViewById(
R.id.button_auto_color);
380 autoColorButton.setOnClickListener(view -> {
381 sendFontBackColorChange(COLOR_AUTO,
true);
388 selectFontCurrentThread(fontName);
394 Spinner spinner = mActivity.findViewById(
R.id.font_name_spinner);
395 if (!mFontNameSpinnerSet) {
396 spinner.setOnItemSelectedListener(
this);
397 mFontNameSpinnerSet =
true;
400 if (fontName.equals(mCurrentFontSelected))
403 int position = mFontList.indexOf(fontName);
405 mCurrentFontSelected = fontName;
406 spinner.setSelection(
position,
false);
409 resetFontSizes(fontName);
413 if (mAllFontSizes.get(fontName) !=
null) {
415 mFontSizes.addAll(mAllFontSizes.get(fontName));
416 Spinner spinner = mActivity.findViewById(
R.id.font_size_spinner);
417 ArrayAdapter<?> arrayAdapter = (ArrayAdapter<?>)spinner.getAdapter();
418 arrayAdapter.notifyDataSetChanged();
425 selectFontSizeCurrentThread(fontSize);
431 Spinner spinner = mActivity.findViewById(
R.id.font_size_spinner);
432 if (!mFontSizeSpinnerSet) {
433 spinner.setOnItemSelectedListener(
this);
434 mFontSizeSpinnerSet =
true;
437 if (fontSize.equals(mCurrentFontSizeSelected))
440 int position = mFontSizes.indexOf(fontSize);
442 mCurrentFontSizeSelected = fontSize;
443 spinner.setSelection(
position,
false);
void unselectColors()
Switches to first palette, but doesn't mark any color as selected.
void findSelectedTextColor(int color)
void selectFontCurrentThread(String fontName)
void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
void resetFontSizes(String fontName)
static final int COLOR_AUTO
-1 as value in ".uno:Color" et al.
BottomSheetBehavior colorPickerBehavior
String mCurrentFontSizeSelected
boolean mFontSizeSpinnerSet
final ArrayList< String > mFontList
void selectFont(final String fontName)
void changeFontColorBoxColor(final int color)
BottomSheetBehavior backColorPickerBehavior
String mCurrentFontSelected
void sendFontBackColorChange(int color, boolean keepAlpha)
void parseJson(String json)
void sendFontColorChange(int color, boolean keepAlpha)
void onNothingSelected(AdapterView parent)
BottomSheetBehavior toolBarBottomBehavior
void setupFontNameSpinner()
void selectFontSizeCurrentThread(String fontSize)
void changeFontBackColorBoxColor(final int color)
final HashMap< String, ArrayList< String > > mAllFontSizes
void sendFontSizeChange(String fontSize)
final ArrayList< String > mFontSizes
FontController(LibreOfficeMainActivity activity)
void sendFontChange(String fontName)
void setupBackColorPicker()
ColorPickerAdapter colorPickerAdapter
final LibreOfficeMainActivity mActivity
void selectFontSize(final String fontSize)
boolean mFontNameSpinnerSet
ColorPickerAdapter backColorPickerAdapter
void setupFontSizeSpinner()
Events and data that is queued and processed by LOKitThread.
static final int UNO_COMMAND
Common static LOKit functions, functions to send events.
static void sendEvent(LOEvent event)
Make sure LOKitThread is running and send event to it.
static Handler getMainHandler()
Main activity of the LibreOffice App.
LOKitTileProvider getTileProvider()
def run(arg=None, arg2=-1)