Skip to content

Commit 415dfda

Browse files
committed
Refactor UI with Material You design and add animations
Signed-off-by: Dev4Mod <[email protected]>
1 parent 1d459f1 commit 415dfda

37 files changed

+990
-409
lines changed

app/src/main/java/com/wmods/wppenhacer/activities/MainActivity.java

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.view.MenuItem;
1111

1212
import androidx.annotation.NonNull;
13+
import androidx.core.app.ActivityOptionsCompat;
1314
import androidx.fragment.app.Fragment;
1415
import androidx.viewpager2.widget.ViewPager2;
1516

@@ -27,48 +28,51 @@
2728
public class MainActivity extends BaseActivity {
2829

2930
private ActivityMainBinding binding;
30-
3131
private BatteryPermissionHelper batteryPermissionHelper = BatteryPermissionHelper.Companion.getInstance();
3232

3333
@Override
3434
protected void onCreate(Bundle savedInstanceState) {
3535
App.changeLanguage(this);
3636
super.onCreate(savedInstanceState);
3737

38+
binding = ActivityMainBinding.inflate(getLayoutInflater());
39+
setContentView(binding.getRoot());
40+
41+
setSupportActionBar(binding.toolbar);
3842
if (getSupportActionBar() != null) {
39-
getSupportActionBar().setDisplayShowHomeEnabled(true);
40-
getSupportActionBar().setIcon(R.mipmap.launcher);
43+
getSupportActionBar().setDisplayShowTitleEnabled(false);
4144
}
4245

43-
binding = ActivityMainBinding.inflate(getLayoutInflater());
44-
setContentView(binding.getRoot());
46+
binding.toolbar.setTitle(R.string.app_name);
4547

4648
MainPagerAdapter pagerAdapter = new MainPagerAdapter(this);
4749
binding.viewPager.setAdapter(pagerAdapter);
4850

51+
binding.viewPager.setPageTransformer(new DepthPageTransformer());
52+
4953
binding.navView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
5054
@SuppressLint("NonConstantResourceId")
5155
@Override
5256
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
5357
return switch (item.getItemId()) {
5458
case R.id.navigation_chat -> {
55-
binding.viewPager.setCurrentItem(0);
59+
binding.viewPager.setCurrentItem(0, true);
5660
yield true;
5761
}
5862
case R.id.navigation_privacy -> {
59-
binding.viewPager.setCurrentItem(1);
63+
binding.viewPager.setCurrentItem(1, true);
6064
yield true;
6165
}
6266
case R.id.navigation_home -> {
63-
binding.viewPager.setCurrentItem(2);
67+
binding.viewPager.setCurrentItem(2, true);
6468
yield true;
6569
}
6670
case R.id.navigation_media -> {
67-
binding.viewPager.setCurrentItem(3);
71+
binding.viewPager.setCurrentItem(3, true);
6872
yield true;
6973
}
7074
case R.id.navigation_colors -> {
71-
binding.viewPager.setCurrentItem(4);
75+
binding.viewPager.setCurrentItem(4, true);
7276
yield true;
7377
}
7478
default -> false;
@@ -88,7 +92,6 @@ public void onPageSelected(int position) {
8892
FilePicker.registerFilePicker(this);
8993
}
9094

91-
9295
private void createMainDir() {
9396
var nomedia = new File(App.getWaEnhancerFolder(), ".nomedia");
9497
if (nomedia.exists()) {
@@ -118,7 +121,9 @@ public boolean onCreateOptionsMenu(Menu menu) {
118121
@Override
119122
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
120123
if (item.getItemId() == R.id.menu_about) {
121-
startActivity(new Intent(this, AboutActivity.class));
124+
var options = ActivityOptionsCompat.makeCustomAnimation(
125+
this, R.anim.slide_in_right, R.anim.slide_out_left);
126+
startActivity(new Intent(this, AboutActivity.class), options.toBundle());
122127
return true;
123128
} else if (item.getItemId() == R.id.batteryoptimization) {
124129
if (batteryPermissionHelper.isBatterySaverPermissionAvailable(this, true)) {
@@ -142,4 +147,32 @@ public boolean onSupportNavigateUp() {
142147
onBackPressed();
143148
return super.onSupportNavigateUp();
144149
}
150+
151+
private static class DepthPageTransformer implements ViewPager2.PageTransformer {
152+
private static final float MIN_SCALE = 0.85f;
153+
154+
@Override
155+
public void transformPage(@NonNull android.view.View page, float position) {
156+
int pageWidth = page.getWidth();
157+
158+
if (position < -1) {
159+
page.setAlpha(0f);
160+
} else if (position <= 0) {
161+
page.setAlpha(1f);
162+
page.setTranslationX(0f);
163+
page.setTranslationZ(0f);
164+
page.setScaleX(1f);
165+
page.setScaleY(1f);
166+
} else if (position <= 1) {
167+
page.setAlpha(1 - position);
168+
page.setTranslationX(pageWidth * -position);
169+
page.setTranslationZ(-1f);
170+
float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
171+
page.setScaleX(scaleFactor);
172+
page.setScaleY(scaleFactor);
173+
} else {
174+
page.setAlpha(0f);
175+
}
176+
}
177+
}
145178
}

app/src/main/java/com/wmods/wppenhacer/ui/fragments/HomeFragment.java

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.view.LayoutInflater;
1313
import android.view.View;
1414
import android.view.ViewGroup;
15+
import android.view.animation.AnimationUtils;
1516
import android.widget.Toast;
1617

1718
import androidx.annotation.NonNull;
@@ -75,22 +76,63 @@ public View onCreateView(@NonNull LayoutInflater inflater,
7576
checkStateWpp(requireActivity());
7677

7778
binding.rebootBtn.setOnClickListener(view -> {
79+
animateClick(view);
7880
App.getInstance().restartApp(FeatureLoader.PACKAGE_WPP);
7981
disableWpp(requireActivity());
8082
});
8183

8284
binding.rebootBtn2.setOnClickListener(view -> {
85+
animateClick(view);
8386
App.getInstance().restartApp(FeatureLoader.PACKAGE_BUSINESS);
8487
disableBusiness(requireActivity());
8588
});
8689

87-
binding.exportBtn.setOnClickListener(view -> saveConfigs(this.getContext()));
88-
binding.importBtn.setOnClickListener(view -> importConfigs(this.getContext()));
89-
binding.resetBtn.setOnClickListener(view -> resetConfigs(this.getContext()));
90+
binding.exportBtn.setOnClickListener(view -> {
91+
animateClick(view);
92+
saveConfigs(this.getContext());
93+
});
94+
95+
binding.importBtn.setOnClickListener(view -> {
96+
animateClick(view);
97+
importConfigs(this.getContext());
98+
});
99+
100+
binding.resetBtn.setOnClickListener(view -> {
101+
animateClick(view);
102+
resetConfigs(this.getContext());
103+
});
104+
105+
startCardAnimations();
90106

91107
return binding.getRoot();
92108
}
93109

110+
private void startCardAnimations() {
111+
var slideUp = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up);
112+
var fadeIn = AnimationUtils.loadAnimation(getContext(), R.anim.fade_in);
113+
114+
binding.status.startAnimation(slideUp);
115+
116+
binding.status2.postDelayed(() -> {
117+
var anim = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up);
118+
binding.status2.startAnimation(anim);
119+
}, 100);
120+
121+
binding.status3.postDelayed(() -> {
122+
var anim = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up);
123+
binding.status3.startAnimation(anim);
124+
}, 200);
125+
126+
binding.infoCard.postDelayed(() -> {
127+
binding.infoCard.startAnimation(fadeIn);
128+
}, 300);
129+
}
130+
131+
private void animateClick(View view) {
132+
var scaleIn = AnimationUtils.loadAnimation(getContext(), R.anim.scale_in);
133+
view.startAnimation(scaleIn);
134+
}
135+
94136
@Override
95137
public void onResume() {
96138
super.onResume();
@@ -104,10 +146,10 @@ private void receiverBroadcastBusiness(Context context, Intent intent) {
104146
var supported_list = Arrays.asList(context.getResources().getStringArray(R.array.supported_versions_business));
105147
if (version != null && supported_list.stream().anyMatch(s -> version.startsWith(s.replace(".xx", "")))) {
106148
binding.statusSummary3.setText(getString(R.string.version_s, version));
107-
binding.status3.setCardBackgroundColor(context.getColor(R.color.material_state_green));
149+
binding.status3.getChildAt(0).setBackgroundResource(R.drawable.gradient_success);
108150
} else {
109151
binding.statusSummary3.setText(getString(R.string.version_s_not_listed, version));
110-
binding.status3.setCardBackgroundColor(context.getColor(R.color.material_state_yellow));
152+
binding.status3.getChildAt(0).setBackgroundResource(R.drawable.gradient_warning);
111153
}
112154
binding.rebootBtn2.setVisibility(View.VISIBLE);
113155
binding.statusSummary3.setVisibility(View.VISIBLE);
@@ -122,10 +164,10 @@ private void receiverBroadcastWpp(Context context, Intent intent) {
122164

123165
if (version != null && supported_list.stream().anyMatch(s -> version.startsWith(s.replace(".xx", "")))) {
124166
binding.statusSummary1.setText(getString(R.string.version_s, version));
125-
binding.status2.setCardBackgroundColor(context.getColor(R.color.material_state_green));
167+
binding.status2.getChildAt(0).setBackgroundResource(R.drawable.gradient_success);
126168
} else {
127169
binding.statusSummary1.setText(getString(R.string.version_s_not_listed, version));
128-
binding.status2.setCardBackgroundColor(context.getColor(R.color.material_state_yellow));
170+
binding.status2.getChildAt(0).setBackgroundResource(R.drawable.gradient_warning);
129171
}
130172
binding.rebootBtn.setVisibility(View.VISIBLE);
131173
binding.statusSummary1.setVisibility(View.VISIBLE);
@@ -232,11 +274,11 @@ private void checkStateWpp(FragmentActivity activity) {
232274
binding.statusIcon.setImageResource(R.drawable.ic_round_check_circle_24);
233275
binding.statusTitle.setText(R.string.module_enabled);
234276
binding.statusSummary.setText(String.format(getString(R.string.version_s), BuildConfig.VERSION_NAME));
235-
binding.status.setCardBackgroundColor(activity.getColor(R.color.material_state_green));
277+
binding.status.getChildAt(0).setBackgroundResource(R.drawable.gradient_success);
236278
} else {
237279
binding.statusIcon.setImageResource(R.drawable.ic_round_error_outline_24);
238280
binding.statusTitle.setText(R.string.module_disabled);
239-
binding.status.setCardBackgroundColor(activity.getColor(R.color.material_state_red));
281+
binding.status.getChildAt(0).setBackgroundResource(R.drawable.gradient_error);
240282
binding.statusSummary.setVisibility(View.GONE);
241283
}
242284
if (isInstalled(FeatureLoader.PACKAGE_WPP) && App.isOriginalPackage()) {
@@ -275,15 +317,15 @@ private boolean isInstalled(String packageWpp) {
275317
private void disableBusiness(FragmentActivity activity) {
276318
binding.statusIcon3.setImageResource(R.drawable.ic_round_error_outline_24);
277319
binding.statusTitle3.setText(R.string.business_is_not_running_or_has_not_been_activated_in_lsposed);
278-
binding.status3.setCardBackgroundColor(activity.getColor(R.color.material_state_red));
320+
binding.status3.getChildAt(0).setBackgroundResource(R.drawable.gradient_error);
279321
binding.statusSummary3.setVisibility(View.GONE);
280322
binding.rebootBtn2.setVisibility(View.GONE);
281323
}
282324

283325
private void disableWpp(FragmentActivity activity) {
284326
binding.statusIcon2.setImageResource(R.drawable.ic_round_error_outline_24);
285327
binding.statusTitle2.setText(R.string.whatsapp_is_not_running_or_has_not_been_activated_in_lsposed);
286-
binding.status2.setCardBackgroundColor(activity.getColor(R.color.material_state_red));
328+
binding.status2.getChildAt(0).setBackgroundResource(R.drawable.gradient_error);
287329
binding.statusSummary1.setVisibility(View.GONE);
288330
binding.rebootBtn.setVisibility(View.GONE);
289331
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/fast_out_slow_in">
4+
<scale
5+
android:duration="150"
6+
android:fromXScale="1.0"
7+
android:fromYScale="1.0"
8+
android:pivotX="50%"
9+
android:pivotY="50%"
10+
android:toXScale="0.95"
11+
android:toYScale="0.95" />
12+
</set>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/overshoot">
4+
<scale
5+
android:duration="200"
6+
android:fromXScale="0.95"
7+
android:fromYScale="0.95"
8+
android:pivotX="50%"
9+
android:pivotY="50%"
10+
android:toXScale="1.0"
11+
android:toYScale="1.0" />
12+
</set>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/decelerate_quint"
4+
android:shareInterpolator="true">
5+
<alpha
6+
android:duration="400"
7+
android:fromAlpha="0.0"
8+
android:toAlpha="1.0" />
9+
<translate
10+
android:duration="400"
11+
android:fromYDelta="50dp"
12+
android:toYDelta="0" />
13+
</set>

app/src/main/res/anim/fade_in.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:duration="300"
4+
android:fromAlpha="0.0"
5+
android:interpolator="@android:interpolator/decelerate_cubic"
6+
android:toAlpha="1.0" />

app/src/main/res/anim/fade_out.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:duration="250"
4+
android:fromAlpha="1.0"
5+
android:interpolator="@android:interpolator/accelerate_cubic"
6+
android:toAlpha="0.0" />

app/src/main/res/anim/scale_in.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/overshoot">
4+
<scale
5+
android:duration="300"
6+
android:fromXScale="0.8"
7+
android:fromYScale="0.8"
8+
android:pivotX="50%"
9+
android:pivotY="50%"
10+
android:toXScale="1.0"
11+
android:toYScale="1.0" />
12+
<alpha
13+
android:duration="300"
14+
android:fromAlpha="0.0"
15+
android:toAlpha="1.0" />
16+
</set>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/decelerate_cubic">
4+
<translate
5+
android:duration="350"
6+
android:fromXDelta="100%p"
7+
android:toXDelta="0" />
8+
<alpha
9+
android:duration="350"
10+
android:fromAlpha="0.5"
11+
android:toAlpha="1.0" />
12+
</set>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:interpolator="@android:interpolator/accelerate_cubic">
4+
<translate
5+
android:duration="300"
6+
android:fromXDelta="0"
7+
android:toXDelta="-30%p" />
8+
<alpha
9+
android:duration="300"
10+
android:fromAlpha="1.0"
11+
android:toAlpha="0.5" />
12+
</set>

0 commit comments

Comments
 (0)