Skip to content

Commit 5ab967e

Browse files
committed
Calculate icon size once, add DrawableRes annotation, organize and comment code
1 parent b57b220 commit 5ab967e

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

reactbutton/src/main/java/com/amrdeveloper/reactbutton/ReactButton.java

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import android.widget.Button;
1919
import android.widget.GridView;
2020

21+
import androidx.annotation.DrawableRes;
22+
2123
import java.util.ArrayList;
2224
import java.util.Arrays;
2325
import java.util.List;
@@ -69,6 +71,18 @@ public class ReactButton
6971
*/
7072
private int mReactDialogShape = R.drawable.react_dialog_shape;
7173

74+
/**
75+
* The size of reaction icon in dp
76+
* Icon size + icon padding * 2
77+
*/
78+
private static final int ICON_SIZE_WITH_PADDING = 55;
79+
80+
/**
81+
* Full reaction icon size converted from dp
82+
*/
83+
private final int REACTION_ICON_SIZE = (ICON_SIZE_WITH_PADDING *
84+
getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
85+
7286
public interface OnReactionDialogStateListener {
7387
void onDialogOpened();
7488

@@ -133,15 +147,18 @@ private void onReactionButtonClick() {
133147
* Show Reaction dialog when user long click on react button
134148
*/
135149
private void showReactionsDialog() {
136-
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
137-
138-
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
150+
final Context context = getContext();
151+
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
139152
View dialogView = inflater.inflate(R.layout.react_dialog_layout, null);
140-
GridView reactionsGrid = dialogView.findViewById(R.id.reactionsList);
141153

142-
ReactionAdapter adapter = new ReactionAdapter(getContext(), mReactions);
154+
GridView reactionsGrid = dialogView.findViewById(R.id.reactionsList);
155+
ReactionAdapter adapter = new ReactionAdapter(context, mReactions);
143156
reactionsGrid.setAdapter(adapter);
144157

158+
// Setup the columns number
159+
if (mDialogColumnsNumber == 0) mDialogColumnsNumber = mReactions.size();
160+
reactionsGrid.setNumColumns(mDialogColumnsNumber);
161+
145162
reactionsGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
146163
@Override
147164
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
@@ -151,29 +168,24 @@ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
151168
}
152169
});
153170

171+
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
154172
dialogBuilder.setView(dialogView);
155173
mReactAlertDialog = dialogBuilder.create();
156174
mReactAlertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
157175

158176
Window window = mReactAlertDialog.getWindow();
159-
window.setGravity(Gravity.CENTER);
160177
window.setBackgroundDrawableResource(mReactDialogShape);
178+
179+
// Setup dialog gravity and dynamic position
161180
WindowManager.LayoutParams windowManagerAttributes = window.getAttributes();
162181
windowManagerAttributes.gravity = Gravity.TOP | Gravity.START;
163182
windowManagerAttributes.x = (int) getX() + (getWidth() / 2);
164183
windowManagerAttributes.y = (int) getY() + (getHeight() / 2);
165184

166-
if (mDialogColumnsNumber == 0) mDialogColumnsNumber = mReactions.size();
167-
168-
reactionsGrid.setNumColumns(mDialogColumnsNumber);
169-
170185
mReactAlertDialog.show();
171186
if (mOnReactionDialogStateListener != null) mOnReactionDialogStateListener.onDialogOpened();
172187

173-
int iconFullSize = 55; // Icon size + icon padding * 2
174-
int reactIconSize = (iconFullSize * getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
175-
176-
int dialogWidth = reactIconSize * mDialogColumnsNumber;
188+
int dialogWidth = REACTION_ICON_SIZE * mDialogColumnsNumber;
177189
window.setLayout(dialogWidth, WindowManager.LayoutParams.WRAP_CONTENT);
178190

179191
mReactAlertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@@ -187,10 +199,10 @@ public void onDismiss(DialogInterface dialogInterface) {
187199
}
188200

189201
/**
190-
* @param shapeId : set xml Shape for react dialog layout
202+
* @param drawableShape : set xml Shape for react dialog layout
191203
*/
192-
public void setReactionDialogShape(int shapeId) {
193-
this.mReactDialogShape = shapeId;
204+
public void setReactionDialogShape(@DrawableRes int drawableShape) {
205+
this.mReactDialogShape = drawableShape;
194206
}
195207

196208
/**

0 commit comments

Comments
 (0)