diff --git a/app/build.gradle b/app/build.gradle index 2451864d..0b13f841 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 19 targetSdkVersion 23 - versionCode 142 + versionCode 143 versionName "2.0.13 Beta2" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true @@ -118,7 +118,7 @@ dependencies { compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.1' // Tasker Plugin - compile group: 'com.twofortyfouram', name: 'android-plugin-client-sdk-for-locale', version: '[4.0.2, 5.0[' + compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:[4.0.2, 5.0[' compile 'com.android.volley:volley:1.0.0' compile 'com.flurry.android:analytics:7.0.0@aar' compile 'com.pushtorefresh.storio:sqlite:1.12.3' @@ -134,4 +134,5 @@ dependencies { compile project(':automator') compile project(':common') compile project(':autojs') + compile files('libs/GDTUnionSDK.4.9.545.min.jar') } \ No newline at end of file diff --git a/app/libs/GDTUnionSDK.4.9.545.min.jar b/app/libs/GDTUnionSDK.4.9.545.min.jar new file mode 100644 index 00000000..6fd58f48 Binary files /dev/null and b/app/libs/GDTUnionSDK.4.9.545.min.jar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7fd65ad3..c5eb4e22 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,10 +9,11 @@ - - + + + + + + + + + + + - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/stardust/scriptdroid/Constants.java b/app/src/main/java/com/stardust/scriptdroid/Constants.java new file mode 100644 index 00000000..37416f50 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/Constants.java @@ -0,0 +1,10 @@ +package com.stardust.scriptdroid; + +/** + * Created by Stardust on 2017/7/7. + */ + +public final class Constants { + public static final String APP_ID = "1105513627"; + public static final String SPLASH_POS_ID = "3050728349211259"; +} diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java index 7ac1de80..ec102dff 100644 --- a/app/src/main/java/com/stardust/scriptdroid/Pref.java +++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java @@ -11,6 +11,8 @@ import com.stardust.scriptdroid.autojs.AutoJs; import org.mozilla.javascript.tools.debugger.Dim; import org.mozilla.javascript.tools.debugger.GuiCallback; +import java.util.concurrent.TimeUnit; + /** * Created by Stardust on 2017/1/31. */ @@ -19,6 +21,8 @@ public class Pref { private static final SharedPreferences DISPOSABLE_BOOLEAN = App.getApp().getSharedPreferences("DISPOSABLE_BOOLEAN", Context.MODE_PRIVATE); private static final String KEY_SERVER_ADDRESS = "Still love you...17.5.14"; private static final String KEY_SHOULD_SHOW_ANNUNCIATION = "Sing about all the things you forgot, things you are not"; + private static final String KEY_FIRST_SHOW_AD = "En, Today is 17.7.7, but, I'm still love you so...."; + private static final String KEY_LAST_SHOW_AD_MILLIS = "But... it seems that...you will not come back any more..."; private static SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { @@ -129,4 +133,26 @@ public class Pref { public static boolean shouldShowAnnunciation() { return getDisposableBoolean(KEY_SHOULD_SHOW_ANNUNCIATION, true); } + + public static boolean shouldShowAd() { + String adShowingMode = def().getString(getString(R.string.key_ad_showing_mode), "Default"); + switch (adShowingMode) { + case "Default": + return true; + case "OncePerDay": + long lastShowMillis = def().getLong(KEY_LAST_SHOW_AD_MILLIS, 0); + if (System.currentTimeMillis() - lastShowMillis < TimeUnit.DAYS.toMillis(1)) { + return false; + } + def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply(); + return true; + case "Off": + return false; + } + return true; + } + + public static boolean isFirstShowingAd() { + return getDisposableBoolean(KEY_FIRST_SHOW_AD, true); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java index 777668ca..bd86ad45 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java @@ -15,6 +15,8 @@ import com.stardust.scriptdroid.tool.UpdateChecker; import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.error.IssueReporterActivity; import com.stardust.scriptdroid.ui.main.MainActivity; +import com.stardust.scriptdroid.ui.splash.SplashActivity; +import com.stardust.scriptdroid.ui.splash.SplashActivity_; import com.stardust.scriptdroid.ui.update.UpdateCheckDialog; import com.stardust.util.IntentUtil; import com.stardust.util.MapEntries; @@ -114,6 +116,15 @@ public class SettingsActivity extends BaseActivity { Toast.makeText(getActivity(), R.string.text_already_reset, Toast.LENGTH_SHORT).show(); } }) + .entry(getString(R.string.show_ad), new Runnable() { + @Override + public void run() { + SplashActivity_.intent(getActivity()) + .extra(SplashActivity.NOT_START_MAIN_ACTIVITY, true) + .extra(SplashActivity.FORCE_SHOW_AD, true) + .start(); + } + }) .entry(getString(R.string.text_check_update), new Runnable() { @Override public void run() { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java new file mode 100644 index 00000000..68095211 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java @@ -0,0 +1,139 @@ +package com.stardust.scriptdroid.ui.splash; + +import android.Manifest; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.qq.e.ads.splash.SplashAD; +import com.qq.e.ads.splash.SplashADListener; +import com.stardust.scriptdroid.Constants; +import com.stardust.scriptdroid.Pref; +import com.stardust.scriptdroid.R; +import com.stardust.scriptdroid.ui.BaseActivity; +import com.stardust.scriptdroid.ui.main.MainActivity_; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.ViewById; + +import java.util.Locale; + +/** + * Created by Stardust on 2017/7/7. + */ +@EActivity(R.layout.activity_splash) +public class SplashActivity extends BaseActivity { + + public static final String NOT_START_MAIN_ACTIVITY = "Eating...I...really...love...you..."; + public static final String FORCE_SHOW_AD = "I will be better but can you take just a glance at me..."; + + private static final String LOG_TAG = SplashActivity.class.getSimpleName(); + + @ViewById(R.id.logo) + ImageView mLogo; + + @ViewById(R.id.skip_view) + TextView mSkipView; + + @ViewById(R.id.ad_container) + View mAdContainer; + + @ViewById(R.id.ad) + FrameLayout mAd; + + private SplashAD mSplashAD; + private boolean mCanEnterNextActivity = false; + private boolean mNotStartMainActivity; + private boolean mForceShowAd = false; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNotStartMainActivity = getIntent().getBooleanExtra(NOT_START_MAIN_ACTIVITY, false); + mForceShowAd = getIntent().getBooleanExtra(FORCE_SHOW_AD, false); + if (!mForceShowAd && !Pref.shouldShowAd()) { + enterNextActivity(); + return; + } + if (Pref.isFirstShowingAd()) { + Toast.makeText(this, R.string.text_can_close_ad_in_settings, Toast.LENGTH_SHORT).show(); + } + checkPermission(Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE); + } + + @AfterViews + void setUpViews() { + fetchSplashAD(); + } + + void enterNextActivity() { + if (!mNotStartMainActivity) + MainActivity_.intent(this).start(); + finish(); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + } + + @Override + protected void onResume() { + super.onResume(); + enterNextActivityIfNeeded(); + } + + @Override + protected void onPause() { + super.onPause(); + mCanEnterNextActivity = false; + } + + private void enterNextActivityIfNeeded() { + if (mCanEnterNextActivity) { + enterNextActivity(); + return; + } + mCanEnterNextActivity = true; + } + + private void fetchSplashAD() { + mSplashAD = new SplashAD(this, mAd, mSkipView, Constants.APP_ID, Constants.SPLASH_POS_ID, new SplashADListener() { + @Override + public void onADDismissed() { + Log.v(LOG_TAG, "onADDismissed"); + enterNextActivityIfNeeded(); + } + + @Override + public void onNoAD(int errno) { + Log.e(LOG_TAG, "onNoAD: " + errno); + enterNextActivity(); + } + + @Override + public void onADPresent() { + Log.v(LOG_TAG, "onADPresent"); + mSkipView.setVisibility(View.VISIBLE); + } + + @Override + public void onADClicked() { + Log.v(LOG_TAG, "onADClicked"); + } + + @Override + public void onADTick(long l) { + mSkipView.setText(String.format(Locale.getDefault(), getString(R.string.format_skip), Math.round(l / 1000f))); + } + }, 4000); + } +} diff --git a/app/src/main/res/drawable/skip_circle_bg.xml b/app/src/main/res/drawable/skip_circle_bg.xml new file mode 100644 index 00000000..c198aa58 --- /dev/null +++ b/app/src/main/res/drawable/skip_circle_bg.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 00000000..a4eff12d --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 73d3ea7b..ce20eb9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -190,6 +190,13 @@ 在布局范围中查看 更多 分享 + 跳过 %d + 广告可以在设置中关闭 + key_ad_showing_mode + 广告 + 欣赏广告 + 广告显示设置 + Default @@ -205,4 +212,16 @@ KEY_CAMERA + + 默认 + 每天显示一次 + 不显示 + + + + Default + OncePerDay + Off + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1594db63..07486379 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -18,8 +18,7 @@ true false - - @drawable/background_splash + true