xiongzhu 4 yıl önce
ebeveyn
işleme
5e3010c544

+ 1 - 1
app/build.gradle

@@ -10,7 +10,7 @@ android {
         applicationId "com.izouma.booster"
         minSdk 23
         targetSdk 30
-        versionCode 3
+        versionCode 4
         versionName "1.0"
         ndk.abiFilters 'armeabi-v7a','arm64-v8a'
 

+ 11 - 5
app/src/main/AndroidManifest.xml

@@ -9,7 +9,6 @@
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
     <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
-
     <uses-permission
         android:name="android.permission.PACKAGE_USAGE_STATS"
         tools:ignore="ProtectedPermissions" />
@@ -21,6 +20,17 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/Theme.Booster">
+        <activity
+            android:name=".activity.SplashActivity"
+            android:exported="true"
+            android:screenOrientation="portrait"
+            android:theme="@style/Theme.Booster.Splash">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
         <activity
             android:name=".activity.AboutActivity"
             android:exported="true"
@@ -76,11 +86,7 @@
             android:exported="true"
             android:screenOrientation="portrait"
             android:theme="@style/Theme.Booster.TransparentStatus">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
 
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
         </activity>
 
         <meta-data

+ 11 - 0
app/src/main/java/com/izouma/booster/activity/AboutActivity.java

@@ -2,6 +2,8 @@ package com.izouma.booster.activity;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 
 import com.izouma.booster.databinding.ActivityAboutBinding;
@@ -19,5 +21,14 @@ public class AboutActivity extends AppCompatActivity {
             finish();
         });
 
+        binding.tvPrivacy.setOnClickListener(v -> {
+            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://sites.google.com/view/boost-zilla-privacy"));
+            startActivity(browserIntent);
+        });
+        binding.tvTos.setOnClickListener(v -> {
+            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://sites.google.com/view/boostzillatos"));
+            startActivity(browserIntent);
+        });
+
     }
 }

+ 29 - 23
app/src/main/java/com/izouma/booster/activity/MainActivity.java

@@ -19,6 +19,7 @@ import androidx.activity.result.contract.ActivityResultContract;
 import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.viewpager2.widget.ViewPager2;
@@ -42,6 +43,7 @@ import java.util.List;
 public class MainActivity extends AppCompatActivity {
     private ActivityMainBinding binding;
     private HomeViewModel viewModel;
+    private AlertDialog permDialog;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -84,36 +86,40 @@ public class MainActivity extends AppCompatActivity {
 
         AdRequest adRequest = new AdRequest.Builder().build();
 
-        InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest, new InterstitialAdLoadCallback() {
-            @Override
-            public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
-                // The mInterstitialAd reference will be null until
-                // an ad is loaded.
-                Log.i("ad", "onAdLoaded");
-                interstitialAd.show(MainActivity.this);
-            }
+        if (hasAppOpsPermission()) {
+            InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest, new InterstitialAdLoadCallback() {
+                @Override
+                public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
+                    // The mInterstitialAd reference will be null until
+                    // an ad is loaded.
+                    Log.i("ad", "onAdLoaded");
+                    interstitialAd.show(MainActivity.this);
+                }
 
-            @Override
-            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
-                // Handle the error
-                Log.i("ad", loadAdError.getMessage());
-            }
-        });
+                @Override
+                public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
+                    // Handle the error
+                    Log.i("ad", loadAdError.getMessage());
+                }
+            });
+        }
     }
 
     @Override
     protected void onResume() {
         super.onResume();
         if (!hasAppOpsPermission()) {
-            new MaterialAlertDialogBuilder(this)
-                    .setMessage("need app usage permission")
-                    .setPositiveButton("open settings", (dialog, which) -> {
-                        dialog.dismiss();
-                        dialog.cancel();
-                        startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
-                    })
-                    .setCancelable(false)
-                    .show();
+            if (permDialog == null || !permDialog.isShowing()) {
+                permDialog = new MaterialAlertDialogBuilder(this)
+                        .setMessage(R.string.need_usage_access)
+                        .setPositiveButton(R.string.open_settings, (dialog, which) -> {
+                            dialog.dismiss();
+                            dialog.cancel();
+                            startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
+                        })
+                        .setCancelable(false)
+                        .show();
+            }
         }
     }
 

+ 42 - 0
app/src/main/java/com/izouma/booster/activity/SplashActivity.java

@@ -0,0 +1,42 @@
+package com.izouma.booster.activity;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.app.ActivityOptions;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.transition.Explode;
+import android.view.Window;
+
+import com.izouma.booster.databinding.ActivityAboutBinding;
+import com.izouma.booster.databinding.ActivitySplashBinding;
+
+public class SplashActivity extends AppCompatActivity {
+    private ActivitySplashBinding binding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // inside your activity (if you did not enable transitions in your theme)
+        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
+
+        // set an exit transition
+        getWindow().setExitTransition(new Explode());
+
+        binding = ActivitySplashBinding.inflate(getLayoutInflater());
+        setContentView(binding.getRoot());
+
+
+        Handler handler = new Handler(msg -> {
+            startActivity(new Intent(SplashActivity.this, MainActivity.class));
+            finish();
+            return false;
+        });
+        handler.sendEmptyMessageDelayed(0, 1000);
+
+    }
+}

+ 1 - 1
app/src/main/java/com/izouma/booster/activity/VipActivity.java

@@ -51,7 +51,7 @@ public class VipActivity extends AppCompatActivity {
             binding.tvOrig.setText(R.string.us_10_98);
         });
         binding.btnSubscribe.setOnClickListener(v -> {
-            Toast.makeText(VipActivity.this, "subscribe", Toast.LENGTH_SHORT).show();
+            Toast.makeText(VipActivity.this, getResources().getString(R.string.coming_soon), Toast.LENGTH_SHORT).show();
         });
         binding.scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
             if (scrollY > 10) {

BIN
app/src/main/res/drawable/icon.png


+ 15 - 0
app/src/main/res/drawable/splash_bg.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="@color/white" />
+        </shape>
+    </item>
+    <item
+        android:width="160dp"
+        android:height="160dp"
+        android:drawable="@drawable/icon"
+        android:gravity="center">
+
+    </item>
+</layer-list>

+ 32 - 3
app/src/main/res/layout/activity_about.xml

@@ -19,9 +19,9 @@
 
     <ImageView
         android:id="@+id/logo"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:src="@mipmap/ic_launcher"
+        android:layout_width="160dp"
+        android:layout_height="160dp"
+        android:src="@drawable/icon"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -34,7 +34,36 @@
         android:text="@string/app_name"
         android:textColor="@color/black"
         android:textSize="28sp"
+        android:textStyle="bold"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/logo" />
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="20dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <TextView
+            android:id="@+id/tv_privacy"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/privacy_policy"
+            android:textColor="@color/light_green" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/and" />
+
+        <TextView
+            android:id="@+id/tv_tos"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/terms_of_service"
+            android:textColor="@color/light_green" />
+    </LinearLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 9 - 0
app/src/main/res/layout/activity_splash.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".activity.SplashActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 0
app/src/main/res/values-zh-rCN/strings.xml

@@ -109,4 +109,10 @@
     <string name="uninstall">卸载应用</string>
     <string name="booster_premium">Boost Zilla 会员</string>
     <string name="no_ads_and_popups_2_special_privilege">无广告和弹窗+2项专属特权</string>
+    <string name="coming_soon">即将开放</string>
+    <string name="privacy_policy"><u>隐私政策</u></string>
+    <string name="and">和</string>
+    <string name="terms_of_service"><u>服务协议</u></string>
+    <string name="open_settings">打开设置</string>
+    <string name="need_usage_access">需要打开使用情况访问权限来分析您的设备使用情况</string>
 </resources>

+ 6 - 0
app/src/main/res/values/strings.xml

@@ -109,4 +109,10 @@
     <string name="uninstall">UNINSTALL</string>
     <string name="booster_premium">Boost Zilla Premium</string>
     <string name="no_ads_and_popups_2_special_privilege">No Ads and Popups + 2 Special Privilege</string>
+    <string name="coming_soon">coming soon</string>
+    <string name="privacy_policy"><u>Privacy Policy</u></string>
+    <string name="and">&#160;and&#160;</string>
+    <string name="terms_of_service"><u>Terms of Service</u></string>
+    <string name="open_settings">Open Settings</string>
+    <string name="need_usage_access">we need app usage access to analyze your device usage</string>
 </resources>

+ 5 - 0
app/src/main/res/values/themes.xml

@@ -54,4 +54,9 @@
         <item name="colorControlNormal">@color/black</item>
         <item name="android:windowLightStatusBar">true</item>
     </style>
+
+    <style name="Theme.Booster.Splash" parent="Theme.Booster.TransparentStatus">
+        <item name="android:windowBackground">@drawable/splash_bg</item>
+    </style>
+
 </resources>