From 767d0d918d770ecce233079b1c003fb814320ab1 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Wed, 14 Nov 2018 08:48:22 +0530 Subject: [PATCH] v2.2.00 --- .../MainOptionsBottomSheetDialogFragment.java | 3 +- .../ui/activities/base/AbsThemeActivity.java | 12 +- .../RoundedBottomSheetDialogFragment.java | 22 +- app/src/sans/AndroidManifest.xml | 258 ++++++++++++++++++ .../sans/assets/fonts/product_sans_bold.ttf | Bin 0 -> 55548 bytes .../assets/fonts/product_sans_regular.ttf | Bin 0 -> 41116 bytes .../RetroApplication.java | 119 ++++++++ .../monkey/retromusic/RetroApplication.java | 119 ++++++++ app/src/sans/res/values/donottranslate.xml | 2 + 9 files changed, 509 insertions(+), 26 deletions(-) create mode 100644 app/src/sans/AndroidManifest.xml create mode 100755 app/src/sans/assets/fonts/product_sans_bold.ttf create mode 100755 app/src/sans/assets/fonts/product_sans_regular.ttf create mode 100644 app/src/sans/java/code.name.monkey.retromusic/RetroApplication.java create mode 100644 app/src/sans/java/code/name/monkey/retromusic/RetroApplication.java create mode 100644 app/src/sans/res/values/donottranslate.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/MainOptionsBottomSheetDialogFragment.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/MainOptionsBottomSheetDialogFragment.java index 76195632..6c08adaa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/MainOptionsBottomSheetDialogFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/MainOptionsBottomSheetDialogFragment.java @@ -6,7 +6,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import com.google.android.material.button.MaterialButton; @@ -41,7 +40,7 @@ import static code.name.monkey.retromusic.Constants.USER_PROFILE; public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDialogFragment { private static final String TAG = "MainOptionsBottomSheetD"; - private static ButterKnife.Setter textColor = (view, value, index) -> view.setTextColor(ColorStateList.valueOf(value)); + private static ButterKnife.Setter textColor = (view, value, index) -> view.setTextColor(ColorStateList.valueOf(value)); @BindViews({R.id.action_folders, R.id.action_about, R.id.action_buy_pro, R.id.action_rate, diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsThemeActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsThemeActivity.java index 13ea037e..54cb4820 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsThemeActivity.java @@ -174,12 +174,12 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable { } public void setImmersiveFullscreen() { - int flags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_FULLSCREEN | - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; if (PreferenceUtil.getInstance().getFullScreenMode()) { getWindow().getDecorView().setSystemUiVisibility(flags); } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java b/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java index ace01f47..474a7d73 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java @@ -14,6 +14,8 @@ import android.widget.FrameLayout; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialog; +import java.util.Objects; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; @@ -22,6 +24,7 @@ import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.util.VersionUtils; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; +import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroUtil; /** @@ -30,23 +33,6 @@ import code.name.monkey.retromusic.util.RetroUtil; @SuppressLint("RestrictedApi") public class RoundedBottomSheetDialogFragment extends AppCompatDialogFragment { - /* @Override - public int getTheme() { - //noinspection ConstantConditions - if (PreferenceUtil.getInstance().getGeneralTheme() == R.style.Theme_RetroMusic_Light) { - return R.style.BottomSheetDialogTheme; - } else if (PreferenceUtil.getInstance().getGeneralTheme() == R.style.Theme_RetroMusic_Color) { - int color = ThemeStore.primaryColor(getContext()); - if (ColorUtil.isColorLight(color)) { - return R.style.BottomSheetDialogTheme; - } else { - return R.style.BottomSheetDialogThemeDark; - } - } else { - return R.style.BottomSheetDialogTheme; - } - }*/ - @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -95,7 +81,7 @@ public class RoundedBottomSheetDialogFragment extends AppCompatDialogFragment { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int width = getContext().getResources().getDimensionPixelSize(R.dimen.bottom_sheet_width); - getWindow().setLayout(width > 0 ? width : ViewGroup.LayoutParams.MATCH_PARENT, + Objects.requireNonNull(getWindow()).setLayout(width > 0 ? width : ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); } } diff --git a/app/src/sans/AndroidManifest.xml b/app/src/sans/AndroidManifest.xml new file mode 100644 index 00000000..d0bc52db --- /dev/null +++ b/app/src/sans/AndroidManifest.xml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/sans/assets/fonts/product_sans_bold.ttf b/app/src/sans/assets/fonts/product_sans_bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d847195c7600a96700df62b68a5009be200f234d GIT binary patch literal 55548 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 literal 0 HcmV?d00001 diff --git a/app/src/sans/java/code.name.monkey.retromusic/RetroApplication.java b/app/src/sans/java/code.name.monkey.retromusic/RetroApplication.java new file mode 100644 index 00000000..1cc53c5b --- /dev/null +++ b/app/src/sans/java/code.name.monkey.retromusic/RetroApplication.java @@ -0,0 +1,119 @@ +package code.name.monkey.retromusic; + +import android.os.Build; + +import com.anjlab.android.iab.v3.BillingProcessor; +import com.anjlab.android.iab.v3.TransactionDetails; +import com.bumptech.glide.Glide; + +import androidx.annotation.NonNull; +import androidx.multidex.MultiDexApplication; +import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager; +import uk.co.chrisjenx.calligraphy.CalligraphyConfig; + +public class RetroApplication extends MultiDexApplication { + + public static final String PRO_VERSION_PRODUCT_ID = "pro_version"; + + private static RetroApplication app; + + private BillingProcessor billingProcessor; + + public static RetroApplication getInstance() { + return app; + } + + public static boolean isProVersion() { + return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); + } + + public static void deleteAppData() { + try { + // clearing app data + String packageName = app.getPackageName(); + Runtime runtime = Runtime.getRuntime(); + runtime.exec("pm clear " + packageName); + + System.exit(0); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onCreate() { + super.onCreate(); + app = this; + + setupErrorHandler(); + + // default theme + if (!ThemeStore.isConfigured(this, 1)) { + ThemeStore.editTheme(this) + .accentColorRes(R.color.md_green_A200) + .commit(); + } + + CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/circular_std_book.otf") + .setFontAttrId(R.attr.fontPath) + .build() + ); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + new DynamicShortcutManager(this).initDynamicShortcuts(); + } + + // automatically restores purchases + billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, + new BillingProcessor.IBillingHandler() { + @Override + public void onProductPurchased(@NonNull String productId, TransactionDetails details) { + } + + @Override + public void onPurchaseHistoryRestored() { + //Toast.makeText(App.this, R.string.restored_previous_purchase_please_restart, Toast.LENGTH_LONG).show(); + } + + @Override + public void onBillingError(int errorCode, Throwable error) { + } + + @Override + public void onBillingInitialized() { + } + }); + } + + private void setupErrorHandler() { + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable throwable) { + handleUncaughtException(thread, throwable); + } + }); + } + + private void handleUncaughtException(Thread thread, Throwable throwable) { + throwable.printStackTrace(); + deleteAppData(); + //Intent intent = new Intent(this, ErrorHandlerActivity.class); + //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //startActivity(intent); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + Glide.with(this).onLowMemory(); + } + + @Override + public void onTerminate() { + super.onTerminate(); + billingProcessor.release(); + } +} diff --git a/app/src/sans/java/code/name/monkey/retromusic/RetroApplication.java b/app/src/sans/java/code/name/monkey/retromusic/RetroApplication.java new file mode 100644 index 00000000..bd20117a --- /dev/null +++ b/app/src/sans/java/code/name/monkey/retromusic/RetroApplication.java @@ -0,0 +1,119 @@ +package code.name.monkey.retromusic; + +import android.os.Build; + +import com.anjlab.android.iab.v3.BillingProcessor; +import com.anjlab.android.iab.v3.TransactionDetails; +import com.bumptech.glide.Glide; + +import androidx.annotation.NonNull; +import androidx.multidex.MultiDexApplication; +import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager; +import uk.co.chrisjenx.calligraphy.CalligraphyConfig; + +public class RetroApplication2 extends MultiDexApplication { + + public static final String PRO_VERSION_PRODUCT_ID = "pro_version"; + + private static RetroApplication2 app; + + private BillingProcessor billingProcessor; + + public static RetroApplication2 getInstance() { + return app; + } + + public static boolean isProVersion() { + return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); + } + + public static void deleteAppData() { + try { + // clearing app data + String packageName = app.getPackageName(); + Runtime runtime = Runtime.getRuntime(); + runtime.exec("pm clear " + packageName); + + System.exit(0); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onCreate() { + super.onCreate(); + app = this; + + setupErrorHandler(); + + // default theme + if (!ThemeStore.isConfigured(this, 1)) { + ThemeStore.editTheme(this) + .accentColorRes(R.color.md_green_A200) + .commit(); + } + + CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/Product Sans Regular.ttf") + .setFontAttrId(R.attr.fontPath) + .build() + ); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + new DynamicShortcutManager(this).initDynamicShortcuts(); + } + + // automatically restores purchases + billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, + new BillingProcessor.IBillingHandler() { + @Override + public void onProductPurchased(@NonNull String productId, TransactionDetails details) { + } + + @Override + public void onPurchaseHistoryRestored() { + //Toast.makeText(App.this, R.string.restored_previous_purchase_please_restart, Toast.LENGTH_LONG).show(); + } + + @Override + public void onBillingError(int errorCode, Throwable error) { + } + + @Override + public void onBillingInitialized() { + } + }); + } + + private void setupErrorHandler() { + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable throwable) { + handleUncaughtException(thread, throwable); + } + }); + } + + private void handleUncaughtException(Thread thread, Throwable throwable) { + throwable.printStackTrace(); + deleteAppData(); + //Intent intent = new Intent(this, ErrorHandlerActivity.class); + //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //startActivity(intent); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + Glide.with(this).onLowMemory(); + } + + @Override + public void onTerminate() { + super.onTerminate(); + billingProcessor.release(); + } +} diff --git a/app/src/sans/res/values/donottranslate.xml b/app/src/sans/res/values/donottranslate.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/sans/res/values/donottranslate.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file