diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6726641..c4907fc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -43,6 +43,8 @@ android { } dependencies { + implementation("androidx.viewpager2:viewpager2:1.0.0") + // Shizuku API implementation("dev.rikka.shizuku:api:13.1.5") implementation("dev.rikka.shizuku:provider:13.1.5") diff --git a/app/src/main/java/com/dhangofa/networktoggle/MainActivity.java b/app/src/main/java/com/dhangofa/networktoggle/MainActivity.java index 3ac7cab..60d77ee 100644 --- a/app/src/main/java/com/dhangofa/networktoggle/MainActivity.java +++ b/app/src/main/java/com/dhangofa/networktoggle/MainActivity.java @@ -29,9 +29,16 @@ import android.os.Bundle; import android.view.View; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; +import androidx.viewpager2.widget.ViewPager2; +import com.dhangofa.networktoggle.ui.SetupCarouselAdapter; +import java.util.ArrayList; +import java.util.List; +import android.widget.ImageView; +import android.widget.LinearLayout; import com.dhangofa.networktoggle.config.AppPreferences; import com.dhangofa.networktoggle.model.ExecutionMode; @@ -72,6 +79,10 @@ public class MainActivity extends Activity implements android.content.SharedPref private RadioButton radioSim1; private RadioButton radioSim2; private TextView autoSimWarningText; + private ViewPager2 setupCarouselPager; + private android.widget.LinearLayout setupCarouselContainer; + private LinearLayout carouselIndicators; + private ImageView faqLink; private View separatorRootShizuku; private View separatorAutoSim1; @@ -166,6 +177,84 @@ protected void onCreate(Bundle savedInstanceState) { updateSeparatorVisibility(); } + private void setupCarousel() { + List carouselItems = new ArrayList<>(); + carouselItems.add(new SetupCarouselAdapter.SetupItem("New to NetToggle?", "Learn how to set up Execution Modes", "Read Guide", "https://github.com/Dhangofa/NetToggle/wiki/1.-Execution-Mode-Configuration", R.drawable.ic_terminal, R.color.first_pg_bg, R.color.exec_accent, R.color.view_guide_button_bg)); + carouselItems.add(new SetupCarouselAdapter.SetupItem("Target SIM & Cycle", "Learn how to configure your modes", "Read Guide", "https://github.com/Dhangofa/NetToggle/wiki/2.-Target-SIM-Setup-&-Quick-Tile-Cycle-Guide", R.drawable.ic_sim_card, R.color.second_pg_bg, R.color.accent_orange, R.color.view_guide_button_bg)); + carouselItems.add(new SetupCarouselAdapter.SetupItem("Quick Settings Ready", "Add the tile to your Control Center", "View Guide", "https://github.com/Dhangofa/NetToggle/wiki/3.-Adding-the-Tile-to-Quick-Settings", R.drawable.ic_network_bars, R.color.third_pg_bg, R.color.accent_pink, R.color.view_guide_button_bg)); + + if (setupCarouselContainer != null) { + setupCarouselContainer.removeAllViews(); + for (int i = 0; i < carouselItems.size(); i++) { + SetupCarouselAdapter.SetupItem item = carouselItems.get(i); + View view = getLayoutInflater().inflate(R.layout.item_setup_carousel, setupCarouselContainer, false); + android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); + if (i > 0) params.setMarginStart(12); + if (i < carouselItems.size() - 1) params.setMarginEnd(12); + view.setLayoutParams(params); + + ((TextView) view.findViewById(R.id.carouselTitle)).setText(item.title); + ((TextView) view.findViewById(R.id.carouselDesc)).setText(item.description); + ((TextView) view.findViewById(R.id.carouselButtonText)).setText(item.buttonText); + ((TextView) view.findViewById(R.id.carouselButtonText)).setTextColor(getColor(item.accentColorRes)); + + ImageView icon = view.findViewById(R.id.carouselIcon); + icon.setImageResource(item.iconRes); + icon.setColorFilter(getColor(item.accentColorRes)); + + ImageView btnIcon = view.findViewById(R.id.carouselButtonIcon); + btnIcon.setColorFilter(getColor(item.accentColorRes)); + + view.findViewById(R.id.carouselBackground).setBackgroundTintList(android.content.res.ColorStateList.valueOf(getColor(item.bgColorRes))); + view.findViewById(R.id.carouselButton).setBackgroundTintList(android.content.res.ColorStateList.valueOf(getColor(item.btnBgColorRes))); + view.findViewById(R.id.carouselIconContainer).setBackgroundTintList(android.content.res.ColorStateList.valueOf(getColor(item.btnBgColorRes))); + + view.findViewById(R.id.carouselButton).setOnClickListener(v -> { + try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(item.url))); } catch (Exception e) {} + }); + + setupCarouselContainer.addView(view); + } + } else if (setupCarouselPager != null) { + SetupCarouselAdapter adapter = new SetupCarouselAdapter(this, carouselItems); + setupCarouselPager.setAdapter(adapter); + setupCarouselIndicators(carouselItems.size()); + setupCarouselPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + updateCarouselIndicators(position); + } + }); + } + } + + + private void setupCarouselIndicators(int count) { + if (carouselIndicators == null) return; + carouselIndicators.removeAllViews(); + for (int i = 0; i < count; i++) { + android.widget.ImageView dot = new android.widget.ImageView(this); + dot.setImageDrawable(getDrawable(R.drawable.shape_dot_inactive)); + android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(16, 16); + params.setMargins(8, 0, 8, 0); + dot.setLayoutParams(params); + carouselIndicators.addView(dot); + } + } + + private void updateCarouselIndicators(int position) { + if (carouselIndicators == null) return; + for (int i = 0; i < carouselIndicators.getChildCount(); i++) { + android.widget.ImageView dot = (android.widget.ImageView) carouselIndicators.getChildAt(i); + if (i == position) { + dot.setImageDrawable(getDrawable(R.drawable.shape_dot_active)); + } else { + dot.setImageDrawable(getDrawable(R.drawable.shape_dot_inactive)); + } + } + } + private void configureStatusBar() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return; @@ -177,6 +266,11 @@ private void configureStatusBar() { } private void bindViews() { + setupCarouselPager = findViewById(R.id.setupCarouselPager); + setupCarouselContainer = findViewById(R.id.setupCarouselContainer); + carouselIndicators = findViewById(R.id.carouselIndicators); + faqLink = findViewById(R.id.faqLink); + setupCarousel(); radioGroup = findViewById(R.id.modeRadioGroup); radioRoot = findViewById(R.id.radioRoot); radioShizuku = findViewById(R.id.radioShizuku); @@ -202,6 +296,12 @@ private void bindViews() { } private void bindLinks() { + if (faqLink != null) { + faqLink.setOnClickListener(v -> { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/Dhangofa/NetToggle/wiki/Frequently-Asked-Questions-(FAQ)")); + try { startActivity(browserIntent); } catch (Exception e) { android.widget.Toast.makeText(MainActivity.this, "No web browser installed to open this link.", android.widget.Toast.LENGTH_SHORT).show(); } + }); + } githubLink.setOnClickListener(v -> openUrl("https://github.com/Dhangofa/NetToggle")); telegramLink.setOnClickListener(v -> openUrl("https://t.me/dhangofas_projects_chat")); } @@ -551,6 +651,9 @@ private void setStatus(String text, int color) { private boolean isUIAuthorized = true; private void updateAuthorizationUI(boolean authorized) { + if (setupCarouselPager != null) { + setupCarouselPager.setCurrentItem(authorized ? 2 : 0, true); + } if (isUIAuthorized == authorized) return; isUIAuthorized = authorized; @@ -587,6 +690,7 @@ private void openUrl(String url) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); } catch (Exception ignored) { + android.widget.Toast.makeText(MainActivity.this, "No web browser installed to open this link.", android.widget.Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/com/dhangofa/networktoggle/NetworkTileService.java b/app/src/main/java/com/dhangofa/networktoggle/NetworkTileService.java index 6579114..ddc8a28 100644 --- a/app/src/main/java/com/dhangofa/networktoggle/NetworkTileService.java +++ b/app/src/main/java/com/dhangofa/networktoggle/NetworkTileService.java @@ -188,7 +188,7 @@ public void onClick() { if (!isAuthError) { appPreferences.setTileErrorState(AppPreferences.TILE_ERROR_CMD); - appPreferences.setLastError(result.getCommand(), result.getStderr()); + appPreferences.setLastError(result.getCommand(), result.getExitCode(), result.getStdout(), result.getStderr(), result.getExceptionMessage()); } mainHandler.post(() -> { diff --git a/app/src/main/java/com/dhangofa/networktoggle/config/AppPreferences.java b/app/src/main/java/com/dhangofa/networktoggle/config/AppPreferences.java index fdc95fb..d56dd31 100644 --- a/app/src/main/java/com/dhangofa/networktoggle/config/AppPreferences.java +++ b/app/src/main/java/com/dhangofa/networktoggle/config/AppPreferences.java @@ -87,10 +87,15 @@ public void setAutoSimError(boolean hasError) { preferences.edit().putBoolean(KEY_AUTO_SIM_ERROR, hasError).apply(); } - public void setLastError(String command, String stderr) { + public void setLastError(String command, int exitCode, String stdout, String stderr, String exceptionMsg) { preferences.edit() .putString(KEY_LAST_ERROR_CMD, command) + .putInt("last_error_exit_code", exitCode) + .putString("last_error_stdout", stdout) + .putString(KEY_LAST_ERROR_STDERR, stderr) + .putString("last_error_exception", exceptionMsg) + .putLong(KEY_LAST_ERROR_TIMESTAMP, System.currentTimeMillis()) .apply(); } @@ -98,10 +103,13 @@ public void setLastError(String command, String stderr) { public com.dhangofa.networktoggle.model.DiagnosticError getLastError() { String cmd = preferences.getString(KEY_LAST_ERROR_CMD, null); String stderr = preferences.getString(KEY_LAST_ERROR_STDERR, null); + int exitCode = preferences.getInt("last_error_exit_code", -1); + String stdout = preferences.getString("last_error_stdout", ""); + String exceptionMsg = preferences.getString("last_error_exception", ""); long time = preferences.getLong(KEY_LAST_ERROR_TIMESTAMP, 0); if (cmd == null && stderr == null) return null; - return new com.dhangofa.networktoggle.model.DiagnosticError(cmd, stderr, time); + return new com.dhangofa.networktoggle.model.DiagnosticError(cmd, exitCode, stdout, stderr, exceptionMsg, time); } public void clearLastError() { diff --git a/app/src/main/java/com/dhangofa/networktoggle/model/DiagnosticError.java b/app/src/main/java/com/dhangofa/networktoggle/model/DiagnosticError.java index 713143d..f040ac8 100644 --- a/app/src/main/java/com/dhangofa/networktoggle/model/DiagnosticError.java +++ b/app/src/main/java/com/dhangofa/networktoggle/model/DiagnosticError.java @@ -2,12 +2,18 @@ public class DiagnosticError { public final String command; + public final int exitCode; + public final String stdout; public final String stderr; + public final String exceptionMessage; public final long timestamp; - public DiagnosticError(String command, String stderr, long timestamp) { + public DiagnosticError(String command, int exitCode, String stdout, String stderr, String exceptionMessage, long timestamp) { this.command = command; + this.exitCode = exitCode; + this.stdout = stdout; this.stderr = stderr; + this.exceptionMessage = exceptionMessage; this.timestamp = timestamp; } } diff --git a/app/src/main/java/com/dhangofa/networktoggle/ui/SetupCarouselAdapter.java b/app/src/main/java/com/dhangofa/networktoggle/ui/SetupCarouselAdapter.java new file mode 100644 index 0000000..792ecf8 --- /dev/null +++ b/app/src/main/java/com/dhangofa/networktoggle/ui/SetupCarouselAdapter.java @@ -0,0 +1,113 @@ +package com.dhangofa.networktoggle.ui; + +import android.content.Context; +import android.content.Intent; +import android.content.res.ColorStateList; +import android.net.Uri; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import androidx.core.content.ContextCompat; + +import com.dhangofa.networktoggle.R; + +import java.util.List; + +public class SetupCarouselAdapter extends RecyclerView.Adapter { + + public static class SetupItem { + public String title; + public String description; + public String buttonText; + public String url; + public int iconRes; + public int bgColorRes; + public int accentColorRes; + public int btnBgColorRes; + + public SetupItem(String title, String description, String buttonText, String url, int iconRes, int bgColorRes, int accentColorRes, int btnBgColorRes) { + this.title = title; + this.description = description; + this.buttonText = buttonText; + this.url = url; + this.iconRes = iconRes; + this.bgColorRes = bgColorRes; + this.accentColorRes = accentColorRes; + this.btnBgColorRes = btnBgColorRes; + } + } + + private List items; + private Context context; + + public SetupCarouselAdapter(Context context, List items) { + this.context = context; + this.items = items; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_setup_carousel, parent, false); + // Important: Ensure the item fills the ViewPager2 width + view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + SetupItem item = items.get(position); + holder.title.setText(item.title); + holder.desc.setText(item.description); + holder.buttonText.setText(item.buttonText); + holder.icon.setImageResource(item.iconRes); + + int bgColor = ContextCompat.getColor(context, item.bgColorRes); + int accentColor = ContextCompat.getColor(context, item.accentColorRes); + + holder.background.setBackgroundTintList(ColorStateList.valueOf(bgColor)); + + holder.buttonText.setTextColor(accentColor); + holder.buttonIcon.setColorFilter(accentColor); + holder.icon.setColorFilter(accentColor); + int btnBgColor = ContextCompat.getColor(context, item.btnBgColorRes); + holder.button.setBackgroundTintList(ColorStateList.valueOf(btnBgColor)); + holder.iconContainer.setBackgroundTintList(ColorStateList.valueOf(btnBgColor)); + + holder.button.setOnClickListener(v -> { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.url)); + try { context.startActivity(browserIntent); } catch (Exception e) { android.widget.Toast.makeText(context, "No web browser installed to open this link.", android.widget.Toast.LENGTH_SHORT).show(); } + }); + } + + @Override + public int getItemCount() { + return items.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + View background; + TextView title, desc, buttonText; + ImageView icon, buttonIcon; + LinearLayout button; + View iconContainer; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + background = itemView.findViewById(R.id.carouselBackground); + title = itemView.findViewById(R.id.carouselTitle); + desc = itemView.findViewById(R.id.carouselDesc); + buttonText = itemView.findViewById(R.id.carouselButtonText); + icon = itemView.findViewById(R.id.carouselIcon); + buttonIcon = itemView.findViewById(R.id.carouselButtonIcon); + button = itemView.findViewById(R.id.carouselButton); + iconContainer = itemView.findViewById(R.id.carouselIconContainer); + } + } +} diff --git a/app/src/main/java/com/dhangofa/networktoggle/util/DiagnosticReporter.java b/app/src/main/java/com/dhangofa/networktoggle/util/DiagnosticReporter.java index c70c9e0..ad57e4a 100644 --- a/app/src/main/java/com/dhangofa/networktoggle/util/DiagnosticReporter.java +++ b/app/src/main/java/com/dhangofa/networktoggle/util/DiagnosticReporter.java @@ -9,7 +9,6 @@ import java.util.Locale; public class DiagnosticReporter { - public static String generateReport(AppPreferences prefs, SimResolver simResolver) { DiagnosticError error = prefs.getLastError(); if (error == null) { @@ -33,16 +32,26 @@ public static String generateReport(AppPreferences prefs, SimResolver simResolve sb.append("[APP STATE]\n"); sb.append("Execution Mode: ").append(prefs.getExecutionMode().name()).append("\n"); sb.append("Target SIM Setting: ").append(prefs.getTargetSim().name()).append("\n"); - + int slotIndex = simResolver.resolveTargetSlotIndex(prefs.getExecutionMode()); sb.append("Resolved Slot Index: ").append(slotIndex).append("\n\n"); sb.append("[ERROR DETAILS]\n"); sb.append("Command Attempted:\n").append(error.command).append("\n\n"); - sb.append("Standard Error (stderr):\n").append(error.stderr).append("\n\n"); - - sb.append("--- END OF REPORT ---"); + sb.append("Exit Code: ").append(error.exitCode).append("\n\n"); + + if (error.exceptionMessage != null && !error.exceptionMessage.isEmpty()) { + sb.append("Exception Message:\n").append(error.exceptionMessage).append("\n\n"); + } + + if (error.stdout != null && !error.stdout.isEmpty()) { + sb.append("Standard Output (stdout):\n").append(error.stdout).append("\n\n"); + } + + sb.append("Standard Error (stderr):\n").append(error.stderr != null && !error.stderr.isEmpty() ? error.stderr : "(empty)").append("\n\n"); + + sb.append("--- END OF REPORT ---"); return sb.toString(); } } diff --git a/app/src/main/res/drawable/ic_help_outline.xml b/app/src/main/res/drawable/ic_help_outline.xml new file mode 100644 index 0000000..cdd7a83 --- /dev/null +++ b/app/src/main/res/drawable/ic_help_outline.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_book.xml b/app/src/main/res/drawable/ic_menu_book.xml new file mode 100644 index 0000000..1564a49 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_book.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_open_in_new.xml b/app/src/main/res/drawable/ic_open_in_new.xml new file mode 100644 index 0000000..95f40fc --- /dev/null +++ b/app/src/main/res/drawable/ic_open_in_new.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sim_card.xml b/app/src/main/res/drawable/ic_sim_card.xml new file mode 100644 index 0000000..fd09856 --- /dev/null +++ b/app/src/main/res/drawable/ic_sim_card.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/drawable/ic_terminal.xml b/app/src/main/res/drawable/ic_terminal.xml new file mode 100644 index 0000000..a02c6c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_terminal.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/shape_code_block.xml b/app/src/main/res/drawable/shape_code_block.xml new file mode 100644 index 0000000..c2207d2 --- /dev/null +++ b/app/src/main/res/drawable/shape_code_block.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_dialog_bg.xml b/app/src/main/res/drawable/shape_dialog_bg.xml index 98d1f63..b9a57cd 100644 --- a/app/src/main/res/drawable/shape_dialog_bg.xml +++ b/app/src/main/res/drawable/shape_dialog_bg.xml @@ -1,8 +1,6 @@ - - + + diff --git a/app/src/main/res/drawable/shape_dot_active.xml b/app/src/main/res/drawable/shape_dot_active.xml new file mode 100644 index 0000000..cd0e886 --- /dev/null +++ b/app/src/main/res/drawable/shape_dot_active.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_dot_inactive.xml b/app/src/main/res/drawable/shape_dot_inactive.xml new file mode 100644 index 0000000..bf61b4d --- /dev/null +++ b/app/src/main/res/drawable/shape_dot_inactive.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 34f4c44..f3d2c27 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -126,7 +126,18 @@ android:background="@drawable/social_icon_bg" android:clickable="true" android:focusable="true" /> - + + @@ -160,56 +171,18 @@ android:textColor="@color/text_secondary" android:textSize="12sp" /> - + - - - - - - - - - - - - - + android:baselineAligned="false" + android:clipChildren="false" + android:clipToPadding="false" + android:layout_marginBottom="12dp" /> - + - - - - - - - - - - - - - - - + + + + + + + - + - + + diff --git a/app/src/main/res/layout/dialog_diagnostic.xml b/app/src/main/res/layout/dialog_diagnostic.xml index 3420ff4..e348fcd 100644 --- a/app/src/main/res/layout/dialog_diagnostic.xml +++ b/app/src/main/res/layout/dialog_diagnostic.xml @@ -3,8 +3,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="20dp" - android:background="@drawable/shape_segmented_container"> + android:paddingTop="20dp" + android:paddingBottom="12dp" + android:paddingHorizontal="16dp" + android:background="@drawable/shape_dialog_bg"> + android:layout_marginBottom="12dp" + android:layout_marginStart="4dp" /> + android:layout_marginBottom="12dp"> + android:textColor="@color/text_secondary" /> @@ -54,7 +58,7 @@ android:textSize="14sp" android:fontFamily="sans-serif-medium" android:textStyle="bold" - android:textColor="@color/text_secondary" + android:textColor="@color/text_primary" android:padding="8dp" android:layout_marginEnd="16dp" android:clickable="true" diff --git a/app/src/main/res/layout/item_setup_carousel.xml b/app/src/main/res/layout/item_setup_carousel.xml new file mode 100644 index 0000000..3eb5a12 --- /dev/null +++ b/app/src/main/res/layout/item_setup_carousel.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/view_execution_card.xml b/app/src/main/res/layout/view_execution_card.xml index 9171237..8994720 100644 --- a/app/src/main/res/layout/view_execution_card.xml +++ b/app/src/main/res/layout/view_execution_card.xml @@ -13,16 +13,22 @@ android:layout_marginBottom="10dp"> + android:gravity="center_vertical" + android:layout_alignParentStart="true" + android:layout_centerVertical="true" + android:layout_marginEnd="8dp"> + + - + android:layout_centerVertical="true" + android:layout_toEndOf="@id/execModeTitleGroup" + android:gravity="end|center_vertical"> + + + + @@ -109,18 +125,24 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp"> + + android:layout_centerVertical="true" + android:layout_alignParentStart="true" + android:layout_marginEnd="8dp"> + + + - + android:visibility="gone" /> + + + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 7b9931a..229b26e 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -36,6 +36,12 @@ #FFB782 #F48FB1 + + #11161A + #1A130F + #160309 + #2B2930 + #1A130F #3D210F diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 262aeb9..9352d40 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -36,6 +36,12 @@ #D96509 #C2185B + + #F2F8FF + #FFF8F3 + #FCE9F1 + #FFFFFF + #FFF8F3 #FFE0C2