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 00000000..d847195c Binary files /dev/null and b/app/src/sans/assets/fonts/product_sans_bold.ttf differ diff --git a/app/src/sans/assets/fonts/product_sans_regular.ttf b/app/src/sans/assets/fonts/product_sans_regular.ttf new file mode 100755 index 00000000..c0442ee2 Binary files /dev/null and b/app/src/sans/assets/fonts/product_sans_regular.ttf differ 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