From 8167c776d7f57fef7c86931d8363d2b982fca5e8 Mon Sep 17 00:00:00 2001 From: Mikhail Krupskiy Date: Wed, 9 Jan 2019 11:44:49 +0000 Subject: [PATCH] Ability to select an Icon instead of text. --- .../space/neothefox/laytray/IconService.java | 23 +++++-- .../space/neothefox/laytray/IconsAdapter.java | 56 ++++++++++++++++ .../space/neothefox/laytray/MainActivity.java | 66 ++++++++++++++++--- app/src/main/res/drawable/ic_flag_belarus.xml | 6 ++ app/src/main/res/drawable/ic_flag_gb.xml | 5 ++ app/src/main/res/drawable/ic_flag_russia.xml | 6 ++ app/src/main/res/drawable/ic_flag_ukr.xml | 5 ++ .../main/res/drawable/ic_language_default.xml | 9 +++ app/src/main/res/layout/spinner_item.xml | 24 +++++++ app/src/main/res/values-be/strings.xml | 2 + app/src/main/res/values-cs/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 13 files changed, 194 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/space/neothefox/laytray/IconsAdapter.java create mode 100644 app/src/main/res/drawable/ic_flag_belarus.xml create mode 100644 app/src/main/res/drawable/ic_flag_gb.xml create mode 100644 app/src/main/res/drawable/ic_flag_russia.xml create mode 100644 app/src/main/res/drawable/ic_flag_ukr.xml create mode 100644 app/src/main/res/drawable/ic_language_default.xml create mode 100644 app/src/main/res/layout/spinner_item.xml diff --git a/app/src/main/java/space/neothefox/laytray/IconService.java b/app/src/main/java/space/neothefox/laytray/IconService.java index 95b0d76..fd8d19f 100644 --- a/app/src/main/java/space/neothefox/laytray/IconService.java +++ b/app/src/main/java/space/neothefox/laytray/IconService.java @@ -8,6 +8,7 @@ import android.app.NotificationManager; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -33,6 +34,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener private final AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo(); private SharedPreferences layouts; + private SharedPreferences iconsPrefs; private SharedPreferences options; private String lastToast; @@ -50,6 +52,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener serviceInfo.notificationTimeout = 100; this.setServiceInfo(serviceInfo); layouts = getSharedPreferences("layouts", 0); + iconsPrefs = getSharedPreferences("icons", 0); options = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); lastToast = "EMPT"; options.registerOnSharedPreferenceChangeListener(this); @@ -90,11 +93,20 @@ implements SharedPreferences.OnSharedPreferenceChangeListener layoutsEditor.apply(); textIcon = "??"; } - Icon smallIcon = Icon.createWithBitmap(textAsBitmap(textIcon, - Integer.parseInt(options.getString("textSize", "48")), - options.getBoolean("textFakeBold", true), - Integer.parseInt(options.getString("textMode", "0")), - Color.WHITE)); + + Icon smallIcon; + + if (Integer.parseInt(options.getString("textMode", "0")) == 4) { + // Icon selected + smallIcon = Icon.createWithResource(this, iconsPrefs.getInt(toast, R.drawable.ic_language_default)); + } else { + // Text variations + smallIcon = Icon.createWithBitmap(textAsBitmap(textIcon, + Integer.parseInt(options.getString("textSize", "48")), + options.getBoolean("textFakeBold", true), + Integer.parseInt(options.getString("textMode", "0")), + Color.WHITE)); + } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -104,6 +116,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener .setOngoing(true) .setVisibility(Notification.VISIBILITY_SECRET) .build(); + } else { diff --git a/app/src/main/java/space/neothefox/laytray/IconsAdapter.java b/app/src/main/java/space/neothefox/laytray/IconsAdapter.java new file mode 100644 index 0000000..c4d7c9a --- /dev/null +++ b/app/src/main/java/space/neothefox/laytray/IconsAdapter.java @@ -0,0 +1,56 @@ +package space.neothefox.laytray; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.Spinner; + +public class IconsAdapter extends BaseAdapter { + private Context context; + private int flags[]; + private LayoutInflater inflter; + + public IconsAdapter(Context applicationContext, int[] flags) { + this.context = applicationContext; + this.flags = flags; + inflter = (LayoutInflater.from(applicationContext)); + } + + @Override + public int getCount() { + return flags.length; + } + + @Override + public Object getItem(int i) { + return flags[i]; + } + + @Override + public long getItemId(int i) { + return 0; + } + + public int getPosition(int value) { + int position = -1; + for (int i = 0; i < flags.length; i++) { + if (value == flags[i]) { + position = i; + break; + } + } + return position; + } + + @Override + public View getView(int i, View convertView, ViewGroup parent) { + convertView = inflter.inflate(R.layout.spinner_item, null); + ImageView icon = (ImageView) convertView.findViewById(R.id.imageView); + icon.setImageResource(flags[i]); + + return convertView; + } +} \ No newline at end of file diff --git a/app/src/main/java/space/neothefox/laytray/MainActivity.java b/app/src/main/java/space/neothefox/laytray/MainActivity.java index 0a2c2be..bd08123 100644 --- a/app/src/main/java/space/neothefox/laytray/MainActivity.java +++ b/app/src/main/java/space/neothefox/laytray/MainActivity.java @@ -19,13 +19,14 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Space; +import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; - import java.util.Map; public class MainActivity extends AppCompatActivity @@ -35,6 +36,8 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen private LinearLayout layoutLister; private SharedPreferences layouts; + private SharedPreferences iconsPrefs; + private boolean shouldRefresh = true; @Override protected void onCreate(Bundle savedInstanceState) @@ -43,6 +46,7 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen setContentView(R.layout.activity_main); layoutLister = findViewById(R.id.scrollLinearLayout); layouts = getSharedPreferences("layouts", 0); + iconsPrefs = getSharedPreferences("icons", 0); updateLayouts(); FloatingActionButton addButton = findViewById(R.id.floatingActionButton); @@ -82,8 +86,13 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen entry.getValue().toString()); i++; - if(!entry.getKey().equals("EMPT")) - addLine(layoutLister, entry.getKey(), entry.getValue().toString()); + if(!entry.getKey().equals("EMPT")) { + addLine( + layoutLister, entry.getKey(), + entry.getValue().toString(), + iconsPrefs.getInt(entry.getKey(), R.drawable.ic_language_default) + ); + } } if(i == 0) populateLayouts(); @@ -97,14 +106,20 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen { Log.d("map values", "Shared Prefs are empty"); SharedPreferences.Editor layoutsEditor = layouts.edit(); + SharedPreferences.Editor iconsEditor = iconsPrefs.edit(); + iconsEditor.clear(); layoutsEditor.clear(); layoutsEditor.putString("Русский", "RU"); layoutsEditor.putString("Буквы (АБВ)", "EN"); layoutsEditor.putString("EMPT", "??"); + + shouldRefresh = false; + iconsEditor.apply(); + shouldRefresh = true; layoutsEditor.apply(); } - private void addLine(LinearLayout parent, String name, String icon) + private void addLine(LinearLayout parent, String name, String icon, int iconDrawableId) { final LinearLayout layoutLine = new LinearLayout(getApplicationContext()); layoutLine.setOrientation(LinearLayout.HORIZONTAL); @@ -123,11 +138,29 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen layoutIcon.setText(icon); layoutLine.addView(layoutIcon); + + // Icons Dropdown + final int[] iconFlags = { + R.drawable.ic_language_default, + R.drawable.ic_flag_russia, + R.drawable.ic_flag_gb, + R.drawable.ic_flag_belarus, + R.drawable.ic_flag_ukr + }; + IconsAdapter arrayAdapter = new IconsAdapter(this, iconFlags); + final Spinner iconSpinner = new Spinner(this); + iconSpinner.setAdapter(arrayAdapter); + iconSpinner.setSelection(arrayAdapter.getPosition(iconDrawableId)); + layoutLine.addView(iconSpinner); + iconSpinner.setSelection(arrayAdapter.getPosition(iconDrawableId)); + + Space space = new Space(getApplicationContext()); space.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, 2)); + ViewGroup.LayoutParams.MATCH_PARENT, 2)); layoutLine.addView(space); + final Button removeButton = new Button(getApplicationContext()); removeButton.setText("➖"); removeButton.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, @@ -155,23 +188,35 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen if (count != 0) { SharedPreferences.Editor layoutsEditor = layouts.edit(); + SharedPreferences.Editor iconsEditor = iconsPrefs.edit(); layoutsEditor.clear(); + iconsEditor.clear(); for (int i=0; i < count; i++) { LinearLayout layoutLine = (LinearLayout)parent.getChildAt(i); TextView layoutName = (TextView)layoutLine.getChildAt(0); EditText layoutIcon = (EditText)layoutLine.getChildAt(1); + Spinner layoutDropdown = (Spinner)layoutLine.getChildAt(2); String layoutNameValue = layoutName.getText().toString(); String layoutIconValue = layoutIcon.getText().toString(); + int layoutDropdownValue = (int)layoutDropdown.getSelectedItem(); if(!layoutNameValue.equals("")) { - if(!layoutIconValue.equals("")) + if(!layoutIconValue.equals("")) { layoutsEditor.putString(layoutNameValue, layoutIconValue); - else + iconsEditor.putInt(layoutNameValue, layoutDropdownValue); + } else { layoutsEditor.putString(layoutNameValue, "??"); + iconsEditor.putInt(layoutNameValue, layoutDropdownValue); + } } } + shouldRefresh = false; + iconsEditor.apply(); + shouldRefresh = true; layoutsEditor.apply(); + } else { + populateLayouts(); } } @@ -264,8 +309,11 @@ implements View.OnClickListener, DialogInterface.OnClickListener, SharedPreferen @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - layouts = getSharedPreferences("layouts", 0); - updateLayouts(); + if (shouldRefresh) { + layouts = getSharedPreferences("layouts", 0); + iconsPrefs = getSharedPreferences("icons", 0); + updateLayouts(); + } } private boolean isPackageInstalled(String packageName, PackageManager packageManager) diff --git a/app/src/main/res/drawable/ic_flag_belarus.xml b/app/src/main/res/drawable/ic_flag_belarus.xml new file mode 100644 index 0000000..68f1e9b --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_belarus.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_flag_gb.xml b/app/src/main/res/drawable/ic_flag_gb.xml new file mode 100644 index 0000000..2e689ed --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_gb.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_flag_russia.xml b/app/src/main/res/drawable/ic_flag_russia.xml new file mode 100644 index 0000000..553ee43 --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_russia.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_flag_ukr.xml b/app/src/main/res/drawable/ic_flag_ukr.xml new file mode 100644 index 0000000..18c14c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_flag_ukr.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_language_default.xml b/app/src/main/res/drawable/ic_language_default.xml new file mode 100644 index 0000000..d07324c --- /dev/null +++ b/app/src/main/res/drawable/ic_language_default.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/spinner_item.xml b/app/src/main/res/layout/spinner_item.xml new file mode 100644 index 0000000..d961042 --- /dev/null +++ b/app/src/main/res/layout/spinner_item.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 48e5c43..7dcc392 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -37,12 +37,14 @@ Тэкст у крузе Тэкст у квадраце Тэкст у квадраце з абрысам + Іконка 0 1 2 3 + 4 Рэдактар іконак diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 358cac6..9ad7b3d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -42,12 +42,14 @@ Text v kruhu Text ve čtverci Text v obrysu čtverce + Ikona 0 1 2 3 + 4 Vytváření ikony diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c21d6ec..5f467b7 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -37,12 +37,14 @@ Текст в круге Текст в квадрате Текст в квадрате с обводкой + Иконка 0 1 2 3 + 4 Редактор иконок diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5da3c2..63c3356 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,12 +43,14 @@ Text in circle Text in a square Text in a square outline + Icon 0 1 2 3 + 4 Icon builder