Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit fbd8b62

Browse files
committed
toolbar improvements
minor changes
1 parent c8094d4 commit fbd8b62

File tree

4 files changed

+110
-24
lines changed

4 files changed

+110
-24
lines changed

app/src/main/java/de/dlyt/yanndroid/oneuiexample/SplashActivity.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
public class SplashActivity extends AppCompatActivity {
1515

16+
private boolean launchCanceled = false;
17+
1618
@Override
1719
protected void onCreate(Bundle savedInstanceState) {
1820
new ThemeColor(this);
@@ -31,13 +33,30 @@ public void onAnimationStart(Animation animation) {
3133

3234
@Override
3335
public void onAnimationEnd(Animation animation) {
34-
startActivity(new Intent().setClass(getApplicationContext(), MainActivity.class));
35-
finish();
36+
if (!launchCanceled) launchApp();
3637
}
3738

3839
@Override
3940
public void onAnimationRepeat(Animation animation) {
4041
}
4142
});
4243
}
44+
45+
private void launchApp() {
46+
startActivity(new Intent().setClass(getApplicationContext(), MainActivity.class));
47+
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
48+
finish();
49+
}
50+
51+
@Override
52+
protected void onPause() {
53+
super.onPause();
54+
launchCanceled = true;
55+
}
56+
57+
@Override
58+
protected void onResume() {
59+
super.onResume();
60+
if (launchCanceled) launchApp();
61+
}
4362
}

yanndroid/oneui/src/main/java/de/dlyt/yanndroid/oneui/layout/ToolbarLayout.java

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
import androidx.activity.OnBackPressedCallback;
3737
import androidx.activity.result.ActivityResult;
38+
import androidx.annotation.DrawableRes;
3839
import androidx.annotation.IntDef;
3940
import androidx.annotation.MenuRes;
4041
import androidx.annotation.Nullable;
@@ -50,6 +51,7 @@
5051
import java.lang.annotation.RetentionPolicy;
5152
import java.text.NumberFormat;
5253
import java.util.ArrayList;
54+
import java.util.HashMap;
5355
import java.util.Locale;
5456

5557
import de.dlyt.yanndroid.oneui.R;
@@ -111,6 +113,7 @@ public interface OnMenuItemClickListener {
111113
private View overflowMenuPopupAnchor = null;
112114
private PopupMenu overflowPopupMenu;
113115
private Menu toolbarMenu;
116+
private HashMap<MenuItem, Object> toolbarMenuButtons;
114117
private OnMenuItemClickListener onToolbarMenuItemClickListener = item -> {
115118
};
116119

@@ -729,6 +732,7 @@ public void inflateToolbarMenu(@MenuRes int resId) {
729732
actionButtonContainer.removeAllViews();
730733
overflowButton = null;
731734

735+
toolbarMenuButtons = new HashMap<>();
732736
toolbarMenu = new MenuBuilder(getContext());
733737
MenuInflater menuInflater = new SupportMenuInflater(getContext());
734738
menuInflater.inflate(resId, toolbarMenu);
@@ -750,24 +754,25 @@ public void inflateToolbarMenu(@MenuRes int resId) {
750754
private void addActionButton(MenuItem item) {
751755
if (actionButtonContainer.getChildCount() != 0) {
752756
for (int i = 0; i < actionButtonContainer.getChildCount(); i++) {
753-
ToolbarImageButton previousBtn = getOverflowIcon(i);
757+
ToolbarImageButton previousBtn = getOverflowButton(i);
754758
ViewGroup.LayoutParams lp = previousBtn.getLayoutParams();
755759
lp.width = getResources().getDimensionPixelSize(R.dimen.overflow_button_size);
756760
previousBtn.setPaddingRelative(getResources().getDimensionPixelSize(R.dimen.sesl_action_button_padding_horizontal), 0, getResources().getDimensionPixelSize(R.dimen.sesl_action_button_padding_horizontal), 0);
757761
}
758762
}
759763

760-
ToolbarImageButton overflowButton = new ToolbarImageButton(mContext);
764+
ToolbarImageButton actionButton = new ToolbarImageButton(mContext);
761765

762766
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(getResources().getDimensionPixelSize(R.dimen.sesl_overflow_button_min_width), getResources().getDimensionPixelSize(R.dimen.sesl_action_bar_default_height));
763767

764-
overflowButton.setBackgroundResource(R.drawable.sesl_action_bar_item_background);
765-
overflowButton.setImageDrawable(item.getIcon());
766-
overflowButton.setPaddingRelative(getResources().getDimensionPixelSize(R.dimen.sesl_action_bar_overflow_padding_start), 0, getResources().getDimensionPixelSize(R.dimen.sesl_action_bar_overflow_padding_end), 0);
767-
overflowButton.setTooltipText(item.getTitle());
768-
overflowButton.setOnClickListener(v -> onToolbarMenuItemClickListener.onMenuItemClick(item));
768+
actionButton.setBackgroundResource(R.drawable.sesl_action_bar_item_background);
769+
actionButton.setImageDrawable(item.getIcon());
770+
actionButton.setPaddingRelative(getResources().getDimensionPixelSize(R.dimen.sesl_action_bar_overflow_padding_start), 0, getResources().getDimensionPixelSize(R.dimen.sesl_action_bar_overflow_padding_end), 0);
771+
actionButton.setTooltipText(item.getTitle());
772+
actionButton.setOnClickListener(v -> onToolbarMenuItemClickListener.onMenuItemClick(item));
769773

770-
actionButtonContainer.addView(overflowButton, lp);
774+
toolbarMenuButtons.put(item, actionButton);
775+
actionButtonContainer.addView(actionButton, lp);
771776
}
772777

773778
private void setOverflowMenu(ArrayList<MenuItem> overflowItems) {
@@ -781,7 +786,7 @@ private void setOverflowMenu(ArrayList<MenuItem> overflowItems) {
781786
if (overflowButton == null) {
782787
if (actionButtonContainer.getChildCount() != 0) {
783788
for (int i = 0; i < actionButtonContainer.getChildCount(); i++) {
784-
ToolbarImageButton previousBtn = getOverflowIcon(i);
789+
ToolbarImageButton previousBtn = getOverflowButton(i);
785790
ViewGroup.LayoutParams lp = previousBtn.getLayoutParams();
786791
lp.width = getResources().getDimensionPixelSize(R.dimen.overflow_button_size);
787792
previousBtn.setPaddingRelative(getResources().getDimensionPixelSize(R.dimen.sesl_action_button_padding_horizontal), 0, getResources().getDimensionPixelSize(R.dimen.sesl_action_button_padding_horizontal), 0);
@@ -854,7 +859,7 @@ private void showOverflowMenuButtonBadge(int count) {
854859
}
855860
}
856861

857-
private ToolbarImageButton getOverflowIcon(int index) {
862+
private ToolbarImageButton getOverflowButton(int index) {
858863
if (actionButtonContainer != null && actionButtonContainer.getChildCount() != 0) {
859864
return (ToolbarImageButton) actionButtonContainer.getChildAt(index);
860865
} else {
@@ -863,6 +868,40 @@ private ToolbarImageButton getOverflowIcon(int index) {
863868
}
864869
}
865870

871+
public void setToolbarMenuItemIcon(MenuItem item, Drawable drawable) {
872+
if (toolbarMenuButtons.containsKey(item)) {
873+
((ToolbarImageButton) toolbarMenuButtons.get(item)).setImageDrawable(drawable);
874+
}
875+
}
876+
877+
public void setToolbarMenuItemIcon(MenuItem item, @DrawableRes int resId) {
878+
if (toolbarMenuButtons.containsKey(item)) {
879+
((ToolbarImageButton) toolbarMenuButtons.get(item)).setImageResource(resId);
880+
}
881+
}
882+
883+
public void setToolbarMenuItemTitle(MenuItem item, CharSequence title) {
884+
if (toolbarMenuButtons.containsKey(item)) {
885+
((ToolbarImageButton) toolbarMenuButtons.get(item)).setTooltipText(title);
886+
} else {
887+
overflowPopupMenu.setMenuItemTitle(item, title);
888+
}
889+
}
890+
891+
public void setToolbarMenuItemVisibility(MenuItem item, boolean visible) {
892+
if (toolbarMenuButtons.containsKey(item)) {
893+
((ToolbarImageButton) toolbarMenuButtons.get(item)).setVisibility(visible ? VISIBLE : GONE);
894+
}
895+
}
896+
897+
public void setToolbarMenuItemEnabled(MenuItem item, boolean enabled) {
898+
if (toolbarMenuButtons.containsKey(item)) {
899+
((ToolbarImageButton) toolbarMenuButtons.get(item)).setEnabled(enabled);
900+
} else {
901+
overflowPopupMenu.setMenuItemEnabled(item, enabled);
902+
}
903+
}
904+
866905
//
867906
// others
868907
//

yanndroid/oneui/src/main/java/de/dlyt/yanndroid/oneui/view/PopupMenu.java

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,13 @@ public class PopupMenu {
4242
private OnMenuItemClickListener onMenuItemClickListener = item -> {
4343
};
4444

45+
private ArrayList<MenuItem> menuItems;
4546
private Menu menu;
4647
private PopupWindow popupWindow;
4748
private PopupMenuAdapter popupMenuAdapter;
4849
private HashMap<MenuItem, Integer> menuItemBadges = new HashMap<>();
50+
private HashMap<MenuItem, Boolean> menuItemEnabled = new HashMap<>();
51+
4952

5053
public PopupMenu(View anchor) {
5154
this.context = anchor.getContext();
@@ -70,7 +73,7 @@ public void inflate(@MenuRes int menuRes) {
7073
MenuInflater menuInflater = new SupportMenuInflater(context);
7174
menuInflater.inflate(menuRes, menu);
7275

73-
ArrayList<MenuItem> menuItems = new ArrayList<>();
76+
menuItems = new ArrayList<>();
7477

7578
for (int i = 0; i < menu.size(); i++) {
7679
MenuItem item = menu.getItem(i);
@@ -82,8 +85,11 @@ public void inflate(@MenuRes int menuRes) {
8285
public void inflate(ArrayList<MenuItem> menuItems) {
8386
if (menuItems.isEmpty()) return;
8487

88+
this.menuItems = menuItems;
89+
8590
for (MenuItem item : menuItems) {
8691
menuItemBadges.put(item, 0);
92+
menuItemEnabled.put(item, true);
8793
}
8894

8995
if (popupWindow != null) {
@@ -166,6 +172,22 @@ public void setMenuItemBadge(MenuItem item, Integer badge) {
166172
if (popupWindow.isShowing()) popupWindow.dismiss();
167173
}
168174

175+
public void setMenuItemTitle(MenuItem item, CharSequence title) {
176+
for (int i = 0; i < menuItems.size(); i++) {
177+
if (menuItems.get(i) == item) {
178+
item.setTitle(title);
179+
menuItems.set(i, item);
180+
popupMenuAdapter.notifyDataSetChanged();
181+
break;
182+
}
183+
}
184+
}
185+
186+
public void setMenuItemEnabled(MenuItem item, boolean enabled) {
187+
menuItemEnabled.put(item, enabled);
188+
popupMenuAdapter.notifyDataSetChanged();
189+
}
190+
169191
public Integer getMenuItemBadge(MenuItem item) {
170192
return menuItemBadges.get(item);
171193
}
@@ -205,35 +227,37 @@ private AppCompatActivity getActivity() {
205227

206228
private class PopupMenuAdapter extends ArrayAdapter {
207229
Activity activity;
208-
ArrayList<MenuItem> overflowItems;
230+
ArrayList<MenuItem> menuItems;
209231

210-
public PopupMenuAdapter(Activity instance, ArrayList<MenuItem> overflowItems) {
232+
public PopupMenuAdapter(Activity instance, ArrayList<MenuItem> menuItems) {
211233
super(instance, 0);
212234
this.activity = instance;
213-
this.overflowItems = overflowItems;
235+
this.menuItems = menuItems;
214236
}
215237

216238
@Override
217239
public int getCount() {
218-
return overflowItems.size();
240+
return menuItems.size();
219241
}
220242

221243
@Override
222244
public Object getItem(int position) {
223-
return overflowItems.get(position);
245+
return menuItems.get(position);
224246
}
225247

226248
@Override
227249
public View getView(int index, View view, ViewGroup parent) {
250+
//if (!menuItemVisibility.get(menuItems.get(index))) return new View(context);
251+
228252
TextView titleText;
229253
TextView badgeIcon;
230254

231255
view = ((LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.menu_popup_item_layout, parent, false);
232256
titleText = view.findViewById(R.id.more_menu_popup_title_text);
233-
titleText.setText(overflowItems.get(index).getTitle());
257+
titleText.setText(menuItems.get(index).getTitle());
234258

235259
badgeIcon = view.findViewById(R.id.more_menu_popup_badge);
236-
Integer badgeCount = menuItemBadges.get(overflowItems.get(index));
260+
Integer badgeCount = menuItemBadges.get(menuItems.get(index));
237261

238262
if (badgeCount == null) return view;
239263

@@ -256,6 +280,10 @@ public View getView(int index, View view, ViewGroup parent) {
256280
badgeIcon.setVisibility(View.GONE);
257281
}
258282

283+
boolean enabled = menuItemEnabled.get(menuItems.get(index));
284+
view.setEnabled(enabled);
285+
titleText.setEnabled(enabled);
286+
view.setClickable(!enabled); //seems counterintuitive, but it disables the listener
259287
return view;
260288
}
261289
}

yanndroid/oneui/src/main/res/layout/samsung_toolbarlayout_main_toolbar.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
<FrameLayout
8484
android:layout_width="wrap_content"
8585
android:layout_height="?actionBarSize"
86-
android:gravity="end|center_vertical">
86+
android:gravity="center_vertical">
8787

8888
<LinearLayout
8989
android:id="@+id/toolbar_layout_overflow_container"
@@ -93,9 +93,9 @@
9393

9494
<View
9595
android:id="@+id/toolbar_layout_popup_window_anchor"
96-
android:layout_width="1.0px"
97-
android:layout_height="1.0px"
98-
android:layout_gravity="center|top"
96+
android:layout_width="0dp"
97+
android:layout_height="0dp"
98+
android:layout_gravity="end|top"
9999
android:layout_marginEnd="10.0dip" />
100100
</FrameLayout>
101101

0 commit comments

Comments
 (0)