diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 77241097c..7306b8144 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ @@ -29,29 +28,35 @@ + + + + android:screenOrientation="sensorLandscape"> - + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/bear/MainActivity.java b/app/src/main/java/com/fongmi/bear/MainActivity.java deleted file mode 100644 index 7f13db800..000000000 --- a/app/src/main/java/com/fongmi/bear/MainActivity.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.fongmi.bear; - -import android.os.Bundle; - -import androidx.fragment.app.FragmentActivity; - -public class MainActivity extends FragmentActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/bear/ui/BaseActivity.java b/app/src/main/java/com/fongmi/bear/ui/BaseActivity.java new file mode 100644 index 000000000..d761d4039 --- /dev/null +++ b/app/src/main/java/com/fongmi/bear/ui/BaseActivity.java @@ -0,0 +1,42 @@ +package com.fongmi.bear.ui; + +import android.content.res.Configuration; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewbinding.ViewBinding; + +import com.fongmi.bear.utils.Utils; + +public abstract class BaseActivity extends AppCompatActivity { + + protected abstract ViewBinding getBinding(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getBinding().getRoot()); + Utils.hideSystemUI(this); + initView(); + initEvent(); + } + + protected void initView() { + } + + protected void initEvent() { + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + Utils.hideSystemUI(this); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) Utils.hideSystemUI(this); + } +} diff --git a/app/src/main/java/com/fongmi/bear/ui/HomeActivity.java b/app/src/main/java/com/fongmi/bear/ui/HomeActivity.java new file mode 100644 index 000000000..cb6399337 --- /dev/null +++ b/app/src/main/java/com/fongmi/bear/ui/HomeActivity.java @@ -0,0 +1,15 @@ +package com.fongmi.bear.ui; + +import androidx.viewbinding.ViewBinding; + +import com.fongmi.bear.databinding.ActivityHomeBinding; + +public class HomeActivity extends BaseActivity { + + private ActivityHomeBinding binding; + + @Override + protected ViewBinding getBinding() { + return binding = ActivityHomeBinding.inflate(getLayoutInflater()); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/bear/ui/SplashActivity.java b/app/src/main/java/com/fongmi/bear/ui/SplashActivity.java new file mode 100644 index 000000000..1551fe8e5 --- /dev/null +++ b/app/src/main/java/com/fongmi/bear/ui/SplashActivity.java @@ -0,0 +1,33 @@ +package com.fongmi.bear.ui; + +import android.content.Intent; +import android.os.Handler; + +import androidx.viewbinding.ViewBinding; + +import com.fongmi.bear.databinding.ActivitySplashBinding; + +public class SplashActivity extends BaseActivity { + + @Override + protected ViewBinding getBinding() { + return ActivitySplashBinding.inflate(getLayoutInflater()); + } + + @Override + protected void initView() { + loadConfig(); + openHome(); + } + + private void loadConfig() { + + } + + private void openHome() { + new Handler().postDelayed(() -> { + startActivity(new Intent(this, HomeActivity.class)); + finish(); + }, 2000); + } +} diff --git a/app/src/main/java/com/fongmi/bear/utils/Prefers.java b/app/src/main/java/com/fongmi/bear/utils/Prefers.java new file mode 100644 index 000000000..d32216a5e --- /dev/null +++ b/app/src/main/java/com/fongmi/bear/utils/Prefers.java @@ -0,0 +1,42 @@ +package com.fongmi.bear.utils; + +import android.content.SharedPreferences; + +import androidx.preference.PreferenceManager; + +import com.fongmi.bear.App; + +public class Prefers { + + private static SharedPreferences getPreferences() { + return PreferenceManager.getDefaultSharedPreferences(App.get()); + } + + private static String getString(String key, String defaultValue) { + return getPreferences().getString(key, defaultValue); + } + + private static void putString(String key, String value) { + getPreferences().edit().putString(key, value).apply(); + } + + private static int getInt(String key, int defaultValue) { + return getPreferences().getInt(key, defaultValue); + } + + private static void putInt(String key, int value) { + getPreferences().edit().putInt(key, value).apply(); + } + + private static boolean getBoolean(String key) { + return getBoolean(key, false); + } + + private static boolean getBoolean(String key, boolean defaultValue) { + return getPreferences().getBoolean(key, defaultValue); + } + + private static void putBoolean(String key, boolean value) { + getPreferences().edit().putBoolean(key, value).apply(); + } +} diff --git a/app/src/main/java/com/fongmi/bear/utils/Utils.java b/app/src/main/java/com/fongmi/bear/utils/Utils.java new file mode 100644 index 000000000..742e21d5b --- /dev/null +++ b/app/src/main/java/com/fongmi/bear/utils/Utils.java @@ -0,0 +1,109 @@ +package com.fongmi.bear.utils; + +import android.app.Activity; +import android.app.PictureInPictureParams; +import android.content.pm.PackageManager; +import android.os.Build; +import android.provider.Settings; +import android.util.DisplayMetrics; +import android.util.Rational; +import android.view.KeyEvent; +import android.view.View; + +import com.fongmi.bear.App; +import com.google.android.exoplayer2.util.Util; + +public class Utils { + + private static DisplayMetrics getDisplayMetrics() { + return App.get().getResources().getDisplayMetrics(); + } + + public static String getString(int resId) { + return App.get().getString(resId); + } + + public static boolean hasEvent(KeyEvent event) { + return isArrowKey(event) || isBackKey(event) || isMenuKey(event) || isDigitKey(event) || event.isLongPress(); + } + + private static boolean isArrowKey(KeyEvent event) { + return isEnterKey(event) || isUpKey(event) || isDownKey(event) || isLeftKey(event) || isRightKey(event); + } + + static boolean isBackKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_BACK; + } + + static boolean isMenuKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_MENU; + } + + public static boolean isDigitKey(KeyEvent event) { + return event.getKeyCode() >= KeyEvent.KEYCODE_0 && event.getKeyCode() <= KeyEvent.KEYCODE_9 || event.getKeyCode() >= KeyEvent.KEYCODE_NUMPAD_0 && event.getKeyCode() <= KeyEvent.KEYCODE_NUMPAD_9; + } + + static boolean isEnterKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode() == KeyEvent.KEYCODE_ENTER || event.getKeyCode() == KeyEvent.KEYCODE_SPACE || event.getKeyCode() == KeyEvent.KEYCODE_NUMPAD_ENTER; + } + + static boolean isUpKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP || event.getKeyCode() == KeyEvent.KEYCODE_CHANNEL_UP || event.getKeyCode() == KeyEvent.KEYCODE_PAGE_UP || event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PREVIOUS; + } + + static boolean isDownKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN || event.getKeyCode() == KeyEvent.KEYCODE_CHANNEL_DOWN || event.getKeyCode() == KeyEvent.KEYCODE_PAGE_DOWN || event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_NEXT; + } + + static boolean isLeftKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT; + } + + static boolean isRightKey(KeyEvent event) { + return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT; + } + + public static void showViews(View... views) { + for (View view : views) showView(view); + } + + public static void hideViews(View... views) { + for (View view : views) hideView(view); + } + + public static void showView(View view) { + view.setVisibility(View.VISIBLE); + } + + public static void hideView(View view) { + view.setVisibility(View.GONE); + } + + public static void hideSystemUI(Activity activity) { + int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + activity.getWindow().getDecorView().setSystemUiVisibility(flags); + } + + public static boolean hasPIP() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && App.get().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE); + } + + public static void enterPIP(Activity activity) { + try { + if (!hasPIP() || activity.isInPictureInPictureMode()) return; + PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder(); + builder.setAspectRatio(new Rational(16, 9)).build(); + activity.enterPictureInPictureMode(builder.build()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String getUUID() { + return Settings.Secure.getString(App.get().getContentResolver(), Settings.Secure.ANDROID_ID); + } + + public static String getUserAgent() { + return Util.getUserAgent(App.get(), App.get().getPackageName().concat(".").concat(getUUID())); + } +} diff --git a/app/src/main/res/drawable-nodpi/wallpaper_1.webp b/app/src/main/res/drawable-nodpi/wallpaper_1.webp new file mode 100644 index 000000000..1ca38f6e1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/wallpaper_1.webp differ diff --git a/app/src/main/res/drawable-nodpi/wallpaper_2.webp b/app/src/main/res/drawable-nodpi/wallpaper_2.webp new file mode 100644 index 000000000..19185f77d Binary files /dev/null and b/app/src/main/res/drawable-nodpi/wallpaper_2.webp differ diff --git a/app/src/main/res/drawable-nodpi/wallpaper_3.webp b/app/src/main/res/drawable-nodpi/wallpaper_3.webp new file mode 100644 index 000000000..a89e0a1a1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/wallpaper_3.webp differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_home.xml similarity index 100% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/activity_home.xml 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 000000000..53586687b --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 39162f5a6..ef6fe047a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,6 +6,7 @@ #000000 #FFFFFF + #2196F3 #616161 #212121