Compare commits
No commits in common. "a9a9c22899050b22e3057d83698cba7377f03c22" and "6f73fb31c122589cba0aec63796c0d4729cf629e" have entirely different histories.
a9a9c22899
...
6f73fb31c1
|
@ -1,16 +1,7 @@
|
|||
package com.dspread.pos.common.adapters;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.LinearGradient;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffXfermode;
|
||||
import android.graphics.Shader;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
@ -133,108 +124,4 @@ public class BindingAdapters {
|
|||
}
|
||||
|
||||
|
||||
@BindingAdapter("android:background")
|
||||
public static void setBackgroundResource(View view, ObservableField<Integer> backgroundResId) {
|
||||
if (backgroundResId != null && backgroundResId.get() != null) {
|
||||
view.setBackgroundResource(backgroundResId.get());
|
||||
}
|
||||
}
|
||||
|
||||
// Optional: Also add one for regular Integer for flexibility
|
||||
@BindingAdapter("android:background")
|
||||
public static void setBackgroundResource(View view, Integer resourceId) {
|
||||
if (resourceId != null) {
|
||||
view.setBackgroundResource(resourceId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@BindingAdapter({"android:src", "primaryColor", "secondaryColor", "isBankMode"})
|
||||
public static void setIconWithGradientTint(ImageView imageView, Object icon,
|
||||
String primaryColor, String secondaryColor,
|
||||
Boolean isBankMode) {
|
||||
// Set the icon first
|
||||
if (icon instanceof Integer) {
|
||||
imageView.setImageResource((Integer) icon);
|
||||
} else if (icon instanceof Bitmap) {
|
||||
imageView.setImageBitmap((Bitmap) icon);
|
||||
}
|
||||
|
||||
// Remove any previous color filter
|
||||
imageView.setColorFilter(null);
|
||||
|
||||
// Apply gradient tint or remove filter
|
||||
if (false) {
|
||||
// No tint in bank mode - already cleared above
|
||||
} else if (primaryColor != null && secondaryColor != null) {
|
||||
try {
|
||||
// Parse colors
|
||||
int startColor = Color.parseColor(primaryColor);
|
||||
int endColor = Color.parseColor(secondaryColor);
|
||||
|
||||
// Create a temporary bitmap to apply gradient
|
||||
applyGradientToImageView(imageView, startColor, endColor);
|
||||
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Fallback to single color if gradient fails
|
||||
if (primaryColor != null) {
|
||||
try {
|
||||
int color = Color.parseColor(primaryColor);
|
||||
imageView.setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (primaryColor != null) {
|
||||
try {
|
||||
int color = Color.parseColor(primaryColor);
|
||||
imageView.setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void applyGradientToImageView(ImageView imageView, int startColor, int endColor) {
|
||||
Drawable drawable = imageView.getDrawable();
|
||||
if (drawable == null) return;
|
||||
|
||||
// Get drawable dimensions
|
||||
int width = drawable.getIntrinsicWidth();
|
||||
int height = drawable.getIntrinsicHeight();
|
||||
|
||||
if (width <= 0) width = 100;
|
||||
if (height <= 0) height = 100;
|
||||
|
||||
// Create gradient bitmap
|
||||
Bitmap gradientBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Canvas gradientCanvas = new Canvas(gradientBitmap);
|
||||
|
||||
Paint gradientPaint = new Paint();
|
||||
LinearGradient gradient = new LinearGradient(
|
||||
0, 0, 0, height, // Top to bottom
|
||||
startColor, endColor,
|
||||
Shader.TileMode.CLAMP
|
||||
);
|
||||
gradientPaint.setShader(gradient);
|
||||
gradientCanvas.drawRect(0, 0, width, height, gradientPaint);
|
||||
|
||||
// Create icon bitmap
|
||||
Bitmap iconBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Canvas iconCanvas = new Canvas(iconBitmap);
|
||||
drawable.setBounds(0, 0, width, height);
|
||||
drawable.draw(iconCanvas);
|
||||
|
||||
// Combine gradient and icon using SRC_IN mode
|
||||
Paint combinePaint = new Paint();
|
||||
combinePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||||
|
||||
Canvas resultCanvas = new Canvas(iconBitmap);
|
||||
resultCanvas.drawBitmap(gradientBitmap, 0, 0, combinePaint);
|
||||
|
||||
imageView.setImageBitmap(iconBitmap);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -29,6 +29,7 @@ public class MulberryFragment extends BaseFragment<FragmentMulberryBinding, Mulb
|
|||
binding.footerContainer,
|
||||
binding.centerContainer,
|
||||
binding.getRoot()
|
||||
|
||||
);
|
||||
|
||||
// Handle fragment navigation
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package com.dspread.pos.ui.mulberry;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.databinding.Observable;
|
||||
import androidx.databinding.ObservableField;
|
||||
|
||||
import com.dspread.pos.utils.PosParameters;
|
||||
|
@ -20,11 +17,6 @@ public class MulberryItemViewModel extends ItemViewModel<MulberryViewModel> {
|
|||
// Display properties
|
||||
public final ObservableField<String> title = new ObservableField<>();
|
||||
public final ObservableField<Object> icon = new ObservableField<>(); // Can be Integer(resId), Bitmap, or String(path)
|
||||
public final ObservableField<Boolean> bankMode = new ObservableField<>(false);
|
||||
public final ObservableField<Integer> textColor = new ObservableField<>(Color.WHITE);
|
||||
public final ObservableField<String> primaryColor = new ObservableField<>("#000000");
|
||||
public final ObservableField<String> secondaryColor = new ObservableField<>("#000000");
|
||||
|
||||
|
||||
|
||||
// Click handler
|
||||
|
@ -32,8 +24,6 @@ public class MulberryItemViewModel extends ItemViewModel<MulberryViewModel> {
|
|||
viewModel.onItemClick(this);
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Master constructor for all navigation items
|
||||
* @param viewModel Parent ViewModel
|
||||
|
@ -52,33 +42,7 @@ public class MulberryItemViewModel extends ItemViewModel<MulberryViewModel> {
|
|||
this.activityClass = activityClass;
|
||||
this.title.set(title);
|
||||
this.icon.set(iconSource);
|
||||
this.primaryColor.set(viewModel.primaryColor.get());
|
||||
this.secondaryColor.set(viewModel.secondaryColor.get());
|
||||
|
||||
|
||||
// Initialize with parent's bankMode value
|
||||
if (viewModel != null && viewModel.bankMode != null) {
|
||||
this.bankMode.set(viewModel.bankMode.get());
|
||||
|
||||
// Listen for parent bankMode changes
|
||||
viewModel.bankMode.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
|
||||
@Override
|
||||
public void onPropertyChanged(Observable sender, int propertyId) {
|
||||
bankMode.set(viewModel.bankMode.get());
|
||||
updateTextColor();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateTextColor();
|
||||
|
||||
}
|
||||
private void updateTextColor() {
|
||||
if (Boolean.TRUE.equals(bankMode.get())) {
|
||||
textColor.set(Color.BLACK);
|
||||
} else {
|
||||
textColor.set(Color.WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,7 +5,6 @@ import static com.dspread.pos.utils.PosParameters.NAV_HOME;
|
|||
import android.app.Application;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
@ -67,14 +66,9 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
public final ObservableField<Bitmap> footerLogoBitmap = new ObservableField<>();
|
||||
public final ObservableField<Boolean> logoVisibility = PosParameters.footerLogoVisibility;
|
||||
public final ObservableField<Boolean> logoTextVisibility = PosParameters.footerTextVisibility;
|
||||
public final ObservableField<Boolean> bankMode = PosParameters.bankmode;
|
||||
public final ObservableField<Integer> backgroundResId = new ObservableField<>();
|
||||
public final ObservableField<Integer> footerTextColor = new ObservableField<>(Color.WHITE);
|
||||
|
||||
public final ObservableField<String> greetingText = PosParameters.footerGreetingText;
|
||||
public final ObservableField<String> footerText = PosParameters.footerText;
|
||||
public final ObservableField<String> primaryColor = PosParameters.primaryColor;
|
||||
public final ObservableField<String> secondaryColor = PosParameters.secondaryColor;
|
||||
|
||||
// Navigation
|
||||
public final SingleLiveEvent<Integer> navigateToFragment = new SingleLiveEvent<>();
|
||||
|
@ -97,22 +91,6 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
Log.d(TAG, "MulberryViewModel constructor called");
|
||||
|
||||
|
||||
// Initialize background
|
||||
backgroundResId.set(R.drawable.wallpaper_8f25c3);
|
||||
|
||||
// Add listener to bankMode changes
|
||||
bankMode.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
|
||||
@Override
|
||||
public void onPropertyChanged(Observable sender, int propertyId) {
|
||||
if (Boolean.TRUE.equals(bankMode.get())) {
|
||||
Log.d(TAG, "background for bankmode");
|
||||
backgroundResId.set(R.drawable.keyboard_keybg_white);
|
||||
} else {
|
||||
backgroundResId.set(R.drawable.white_wallpaper);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add this to track initialization
|
||||
Log.d(TAG, "ViewModel hash: " + this.hashCode());
|
||||
// if (Build.MODEL.equalsIgnoreCase("D70") ||
|
||||
|
@ -142,16 +120,6 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
initialize();
|
||||
}
|
||||
|
||||
public void updateBackground() {
|
||||
if (Boolean.TRUE.equals(bankMode.get())) {
|
||||
backgroundResId.set(R.drawable.keyboard_keybg_white);
|
||||
footerTextColor.set(Color.BLACK);
|
||||
} else {
|
||||
backgroundResId.set(R.drawable.wallpaper_8f25c3);
|
||||
footerTextColor.set(Color.WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
public void adjustMulberryView(ImageView logoImageView,
|
||||
LinearLayout containerLayout,
|
||||
LinearLayout footerContainer,
|
||||
|
@ -256,17 +224,8 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
if (fullRefresh) {
|
||||
imagesLoaded.postValue(true);
|
||||
}
|
||||
|
||||
// Your existing code...
|
||||
bankMode.set(PosParameters.bankmode.get());
|
||||
|
||||
// Add this line to update background when config changes
|
||||
updateBackground();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void updateMainConfig(boolean loadImages) {
|
||||
Log.d(TAG, "Updating main configuration");
|
||||
|
||||
|
@ -276,16 +235,6 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
greetingText.set(PosParameters.footerGreetingText.get());
|
||||
footerText.set(PosParameters.footerText.get());
|
||||
primaryColor.set(PosParameters.primaryColor.get());
|
||||
secondaryColor.set(PosParameters.secondaryColor.get());
|
||||
bankMode.set(PosParameters.bankmode.get());
|
||||
|
||||
// Log.d(TAG, "bankMode is: " + bankMode.get());
|
||||
|
||||
if (Boolean.TRUE.equals(bankMode.get())){
|
||||
Log.d(TAG, "bankMode is: zzzzz " + bankMode.get());
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Load images if requested
|
||||
if (loadImages) {
|
||||
|
@ -448,8 +397,6 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
super.onConfigurationUpdated();
|
||||
Log.d(TAG, "onConfigurationUpdated called - hash: " + this.hashCode());
|
||||
|
||||
|
||||
|
||||
// Check if ViewModel is still active
|
||||
if (navItems == null) {
|
||||
Log.w(TAG, "navItems is null - ViewModel might be cleared");
|
||||
|
@ -545,7 +492,6 @@ public class MulberryViewModel extends BaseAppViewModel {
|
|||
footerText.set(prefs.getString("footer_text", ""));
|
||||
primaryColor.set(prefs.getString("primary_color", "#000000"));
|
||||
logoVisibility.set(prefs.getBoolean("footer_logo_visibility", true));
|
||||
bankMode.set(prefs.getBoolean("bank_mode", true));
|
||||
|
||||
// 2. Load navigation items from prefs
|
||||
// String savedNavItemsJson = prefs.getString("PREF_NAV_ITEMS", null);
|
||||
|
|
|
@ -25,17 +25,10 @@ public class PosParameters {
|
|||
// Preference keys
|
||||
private static final String PREF_MAIN_LOGO = "main_logo";
|
||||
private static final String PREF_FOOTER_LOGO = "footer_logo";
|
||||
private static final String PREF_PRINT_LOGO = "print_logo";
|
||||
|
||||
private static final String PREF_FOOTER_LOGO_VISIBILITY = "footer_logo_visibility";
|
||||
private static final String PREF_FOOTER_GREETING_TEXT = "footer_greeting_text";
|
||||
private static final String PREF_FOOTER_TEXT = "footer_text";
|
||||
private static final String PREF_PRIMARY_COLOR = "primary_color";
|
||||
private static final String PREF_SECONDARY_COLOR = "secondary_color";
|
||||
|
||||
private static final String PREF_BANK_MODE = "bank_mode";
|
||||
private static final String PREF_PRINT_URL_TEXT = "print_url_text";
|
||||
|
||||
private static final String PREF_RAW_JSON = "raw_json";
|
||||
private static final String PREF_NAV_ITEMS = "nav_items";
|
||||
|
||||
|
@ -50,31 +43,19 @@ public class PosParameters {
|
|||
// Default values
|
||||
private static final int DEFAULT_MAIN_LOGO = R.drawable.am_mulberry_logo_wide_color;
|
||||
private static final int DEFAULT_FOOTER_LOGO = R.drawable.am_mulberry_logo_wide_color;
|
||||
private static final int DEFAULT_PRINT_LOGO = R.drawable.am_mulberry_logo_wide_color;
|
||||
private static final boolean DEFAULT_FOOTER_LOGO_VISIBILITY = true;
|
||||
private static final boolean DEFAULT_BANK_MODE = true;
|
||||
|
||||
private static final String DEFAULT_FOOTER_GREETING_TEXT = "Hello";
|
||||
private static final String DEFAULT_FOOTER_TEXT = "Mulberry ©2025 www.mulberrypos.com";
|
||||
private static final String DEFAULT_PRINT_URL_TEXT = "www.mulberrypos.com";
|
||||
|
||||
private static final String DEFAULT_PRIMARY_COLOR = "#3d3d3d";
|
||||
private static final String DEFAULT_SECONDARY_COLOR = "#ed2140ff";
|
||||
|
||||
// Observable fields
|
||||
public static final ObservableField<Integer> mainLogo = new ObservableField<>(DEFAULT_MAIN_LOGO);
|
||||
public static final ObservableField<Integer> footerLogo = new ObservableField<>(DEFAULT_FOOTER_LOGO);
|
||||
public static final ObservableField<Integer> printlogo = new ObservableField<>(DEFAULT_PRINT_LOGO);
|
||||
|
||||
public static final ObservableField<Boolean> footerLogoVisibility = new ObservableField<>(DEFAULT_FOOTER_LOGO_VISIBILITY);
|
||||
public static final ObservableField<Boolean> bankmode = new ObservableField<>(DEFAULT_BANK_MODE);
|
||||
|
||||
public static final ObservableField<Boolean> footerTextVisibility = new ObservableField<>(false);
|
||||
public static final ObservableField<String> footerGreetingText = new ObservableField<>(DEFAULT_FOOTER_GREETING_TEXT);
|
||||
public static final ObservableField<String> footerText = new ObservableField<>(DEFAULT_FOOTER_TEXT);
|
||||
public static final ObservableField<String> printUrlText = new ObservableField<>(DEFAULT_PRINT_URL_TEXT);
|
||||
public static final ObservableField<String> primaryColor = new ObservableField<>(DEFAULT_PRIMARY_COLOR);
|
||||
public static final ObservableField<String> secondaryColor = new ObservableField<>(DEFAULT_SECONDARY_COLOR);
|
||||
|
||||
// Navigation items storage
|
||||
public static final Map<Integer, List<NavItem>> NAV_ITEMS = new HashMap<>();
|
||||
|
@ -248,7 +229,7 @@ public class PosParameters {
|
|||
}
|
||||
}
|
||||
|
||||
// Footer Logo
|
||||
// Footer Logo (same pattern)
|
||||
if (config.has("footerLogo")) {
|
||||
JSONObject logoConfig = config.getJSONObject("footerLogo");
|
||||
Object logoSource = processIcon(logoConfig, context);
|
||||
|
@ -264,40 +245,15 @@ public class PosParameters {
|
|||
}
|
||||
}
|
||||
|
||||
// Print Logo
|
||||
if (config.has("printLogo")) {
|
||||
JSONObject logoConfig = config.getJSONObject("printLogo");
|
||||
Object logoSource = processIcon(logoConfig, context);
|
||||
|
||||
if (logoSource instanceof Integer) {
|
||||
printlogo.set((Integer) logoSource);
|
||||
prefs.saveInt("print_logo", (Integer) logoSource);
|
||||
prefs.remove("print_logo_path");
|
||||
} else if (logoSource instanceof String) {
|
||||
printlogo.set(-1);
|
||||
prefs.saveInt("print_logo", -1);
|
||||
prefs.saveString("print_logo_path", (String) logoSource);
|
||||
}
|
||||
}
|
||||
|
||||
// Visibility
|
||||
boolean logoVisible = config.optBoolean("footerLogoVisibility", DEFAULT_FOOTER_LOGO_VISIBILITY);
|
||||
footerLogoVisibility.set(logoVisible);
|
||||
footerTextVisibility.set(!logoVisible);
|
||||
|
||||
// Bank Mode
|
||||
boolean bankMode = config.optBoolean("bankMode", DEFAULT_BANK_MODE);
|
||||
bankmode.set(bankMode);
|
||||
|
||||
// Texts
|
||||
footerGreetingText.set(config.optString("footerGreetingText", DEFAULT_FOOTER_GREETING_TEXT));
|
||||
|
||||
printUrlText.set(config.optString("printUrlText", DEFAULT_PRINT_URL_TEXT));
|
||||
|
||||
footerText.set(config.optString("footerText", DEFAULT_FOOTER_TEXT));
|
||||
primaryColor.set(config.optString("primaryColor", DEFAULT_PRIMARY_COLOR));
|
||||
secondaryColor.set(config.optString("secondaryColor", DEFAULT_SECONDARY_COLOR));
|
||||
|
||||
|
||||
Log.d(TAG, "Main config updated");
|
||||
}
|
||||
|
@ -333,26 +289,16 @@ public class PosParameters {
|
|||
private static void saveCurrentConfigToPrefs(PreferencesManager prefs) {
|
||||
prefs.saveInt(PREF_MAIN_LOGO, mainLogo.get());
|
||||
prefs.saveInt(PREF_FOOTER_LOGO, footerLogo.get());
|
||||
prefs.saveInt(PREF_PRINT_LOGO, printlogo.get());
|
||||
|
||||
prefs.saveString(PREF_FOOTER_GREETING_TEXT, footerGreetingText.get());
|
||||
prefs.saveString(PREF_PRINT_URL_TEXT, printUrlText.get());
|
||||
|
||||
prefs.saveString(PREF_FOOTER_TEXT, footerText.get());
|
||||
prefs.saveString(PREF_PRIMARY_COLOR, primaryColor.get());
|
||||
prefs.saveString(PREF_SECONDARY_COLOR, secondaryColor.get());
|
||||
|
||||
prefs.saveBoolean(PREF_FOOTER_LOGO_VISIBILITY, footerLogoVisibility.get());
|
||||
prefs.saveBoolean(PREF_BANK_MODE, bankmode.get());
|
||||
|
||||
// Debug log for each config value being saved
|
||||
Log.d(TAG, "Saved current config to prefs: \n"
|
||||
+ " * footerGreetingText: " + footerGreetingText.get() + " \n"
|
||||
+ " * footerText: " + footerText.get() + " \n"
|
||||
+ " * primaryColor: " + primaryColor.get() + " \n"
|
||||
+ " * printUrlText: " + printUrlText.get()
|
||||
+ " * secondaryColor: " + secondaryColor.get()
|
||||
+ " * bankmode: " + bankmode.get()
|
||||
+ " * footerLogoVisibility: " + footerLogoVisibility.get()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 MiB |
|
@ -17,13 +17,12 @@
|
|||
<!-- binding:onClickCommand="@{viewModel.actionCommand}"-->
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/full_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
android:padding="16dp"
|
||||
android:gravity="center"
|
||||
android:background="@{viewModel.backgroundResId}"
|
||||
android:background="@drawable/wallpaper_8f25c3"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_constraintHorizontal_chainStyle="packed">
|
||||
|
||||
|
@ -181,7 +180,7 @@
|
|||
app:layout_constraintEnd_toEndOf="parent">
|
||||
|
||||
<TextView
|
||||
android:textColor="@{viewModel.footerTextColor}"
|
||||
android:textColor="@color/white"
|
||||
android:id="@+id/footertext"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -32,14 +32,11 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="100dp"
|
||||
android:src="@{viewModel.icon}"
|
||||
app:primaryColor="@{viewModel.primaryColor}"
|
||||
app:secondaryColor="@{viewModel.secondaryColor}"
|
||||
app:isBankMode="@{viewModel.bankMode}"
|
||||
android:scaleType="fitCenter"
|
||||
tools:src="@drawable/ax_card_grey" /> <!-- Use your actual default drawable -->
|
||||
|
||||
<TextView
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
android:textColor="@color/white"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
|
|
Loading…
Reference in New Issue