diff --git a/.gitmodules b/.gitmodules index 0eda3b9..7062b20 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "mod_utils"] path = mod_utils - url = git@e.coding.net:slackz/ykbox/mod_utils.git + url = git@192.168.196.173:ykbox/mod_utils.git [submodule "mod_signageapi"] path = mod_signageapi - url = git@e.coding.net:slackz/ykbox/mod_signageapi.git + url = git@192.168.196.173:ykbox/mod_signageapi.git [submodule "mod_serialport"] - path = mod_serialport - url = git@e.coding.net:slackz/ykbox/mod_serialport.git + path = mod_serialport + url = git@192.168.196.173:ykbox/mod_serialport.git diff --git a/fullshow/.gitignore b/app_dashboard/.gitignore similarity index 100% rename from fullshow/.gitignore rename to app_dashboard/.gitignore diff --git a/fullshow/build.gradle b/app_dashboard/build.gradle similarity index 50% rename from fullshow/build.gradle rename to app_dashboard/build.gradle index 4c918ec..e3b38de 100644 --- a/fullshow/build.gradle +++ b/app_dashboard/build.gradle @@ -3,14 +3,14 @@ plugins { } android { - namespace 'cn.ykbox.fullshow' - compileSdk 34 + namespace 'cn.ykbox.dashboard' + compileSdk 35 buildToolsVersion "30.0.3" defaultConfig { - applicationId "cn.ykbox.fullshow" + applicationId "cn.ykbox.dashboard" minSdk 21 - targetSdk 34 + targetSdk 35 versionCode 1 versionName "1.0" @@ -37,18 +37,17 @@ repositories { } dependencies { + implementation libs.appcompat + implementation libs.material + implementation libs.activity + implementation libs.constraintlayout + testImplementation libs.junit + androidTestImplementation libs.ext.junit + androidTestImplementation libs.espresso.core - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.9.0' - testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + implementation libs.utilcodex - implementation project(':signageapi') - implementation project(':utils') - implementation 'com.blankj:utilcodex:1.31.1' - - implementation 'io.github.youth5201314:banner:2.2.2' - implementation 'com.github.bumptech.glide:glide:4.13.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0' + implementation libs.banner + implementation libs.glide + annotationProcessor libs.glidecompiler } \ No newline at end of file diff --git a/fullshow/proguard-rules.pro b/app_dashboard/proguard-rules.pro similarity index 100% rename from fullshow/proguard-rules.pro rename to app_dashboard/proguard-rules.pro diff --git a/fullshow/src/androidTest/java/cn/ykbox/fullshow/ExampleInstrumentedTest.java b/app_dashboard/src/androidTest/java/cn/ykbox/dashboard/ExampleInstrumentedTest.java similarity index 96% rename from fullshow/src/androidTest/java/cn/ykbox/fullshow/ExampleInstrumentedTest.java rename to app_dashboard/src/androidTest/java/cn/ykbox/dashboard/ExampleInstrumentedTest.java index 76e86fa..50c5fed 100644 --- a/fullshow/src/androidTest/java/cn/ykbox/fullshow/ExampleInstrumentedTest.java +++ b/app_dashboard/src/androidTest/java/cn/ykbox/dashboard/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package cn.ykbox.fullshow; +package cn.ykbox.dashboard; import android.content.Context; diff --git a/fullshow/src/main/AndroidManifest.xml b/app_dashboard/src/main/AndroidManifest.xml similarity index 62% rename from fullshow/src/main/AndroidManifest.xml rename to app_dashboard/src/main/AndroidManifest.xml index dbd3bcc..a1f4cb0 100644 --- a/fullshow/src/main/AndroidManifest.xml +++ b/app_dashboard/src/main/AndroidManifest.xml @@ -7,20 +7,26 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.Classtv"> + android:theme="@style/Theme.Dashboard"> + android:exported="false" + android:label="@string/title_activity_building_dashboard" + android:theme="@style/Theme.Dashboard.Fullscreen" /> + - - + + - \ No newline at end of file diff --git a/fullshow/src/main/java/cn/ykbox/fullshow/BaseActivity.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/BaseActivity.java similarity index 97% rename from fullshow/src/main/java/cn/ykbox/fullshow/BaseActivity.java rename to app_dashboard/src/main/java/cn/ykbox/dashboard/BaseActivity.java index eea24dc..0255a4f 100644 --- a/fullshow/src/main/java/cn/ykbox/fullshow/BaseActivity.java +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/BaseActivity.java @@ -1,4 +1,4 @@ -package cn.ykbox.fullshow; +package cn.ykbox.dashboard; import android.os.Build; import android.os.Bundle; @@ -9,7 +9,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import cn.slackz.signageapi.PlatformFactory; +//import cn.slackz.signageapi.PlatformFactory; public class BaseActivity extends AppCompatActivity { final private String TAG = "BaseActivity"; diff --git a/fullshow/src/main/java/cn/ykbox/fullshow/BootBroadcastReceiver.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/BootBroadcastReceiver.java similarity index 75% rename from fullshow/src/main/java/cn/ykbox/fullshow/BootBroadcastReceiver.java rename to app_dashboard/src/main/java/cn/ykbox/dashboard/BootBroadcastReceiver.java index e93a7aa..bb71d3b 100644 --- a/fullshow/src/main/java/cn/ykbox/fullshow/BootBroadcastReceiver.java +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/BootBroadcastReceiver.java @@ -1,12 +1,9 @@ -package cn.ykbox.fullshow; +package cn.ykbox.dashboard; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import com.blankj.utilcode.util.ServiceUtils; - -import cn.ykbox.utils.Log; public class BootBroadcastReceiver extends BroadcastReceiver { @@ -16,7 +13,7 @@ public class BootBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION)) { - Intent myIntent = new Intent(context, FullscreenActivity.class); + Intent myIntent = new Intent(context, StartActivity.class); myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(myIntent); } diff --git a/app_dashboard/src/main/java/cn/ykbox/dashboard/BuildingDashboardActivity.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/BuildingDashboardActivity.java new file mode 100644 index 0000000..57c000c --- /dev/null +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/BuildingDashboardActivity.java @@ -0,0 +1,188 @@ +package cn.ykbox.dashboard; + +import android.annotation.SuppressLint; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowInsets; + +import cn.ykbox.dashboard.databinding.ActivityBuildingDashboardBinding; + +/** + * An example full-screen activity that shows and hides the system UI (i.e. + * status bar and navigation/system bar) with user interaction. + */ +public class BuildingDashboardActivity extends AppCompatActivity { + /** + * Whether or not the system UI should be auto-hidden after + * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. + */ + private static final boolean AUTO_HIDE = true; + + /** + * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after + * user interaction before hiding the system UI. + */ + private static final int AUTO_HIDE_DELAY_MILLIS = 3000; + + /** + * Some older devices needs a small delay between UI widget updates + * and a change of the status and navigation bar. + */ + private static final int UI_ANIMATION_DELAY = 300; + private final Handler mHideHandler = new Handler(Looper.myLooper()); + private View mContentView; + private final Runnable mHidePart2Runnable = new Runnable() { + @SuppressLint("InlinedApi") + @Override + public void run() { + // Delayed removal of status and navigation bar + if (Build.VERSION.SDK_INT >= 30) { + mContentView.getWindowInsetsController().hide( + WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); + } else { + // Note that some of these constants are new as of API 16 (Jelly Bean) + // and API 19 (KitKat). It is safe to use them, as they are inlined + // at compile-time and do nothing on earlier devices. + mContentView.setSystemUiVisibility(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); + } + } + }; + private View mControlsView; + private final Runnable mShowPart2Runnable = new Runnable() { + @Override + public void run() { + // Delayed display of UI elements + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.show(); + } + mControlsView.setVisibility(View.VISIBLE); + } + }; + private boolean mVisible; + private final Runnable mHideRunnable = new Runnable() { + @Override + public void run() { + hide(); + } + }; + /** + * Touch listener to use for in-layout UI controls to delay hiding the + * system UI. This is to prevent the jarring behavior of controls going away + * while interacting with activity UI. + */ + private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch (motionEvent.getAction()) { + case MotionEvent.ACTION_DOWN: + if (AUTO_HIDE) { + delayedHide(AUTO_HIDE_DELAY_MILLIS); + } + break; + case MotionEvent.ACTION_UP: + view.performClick(); + break; + default: + break; + } + return false; + } + }; + private ActivityBuildingDashboardBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityBuildingDashboardBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + mVisible = true; + mControlsView = binding.fullscreenContentControls; + mContentView = binding.fullscreenContent; + + // Set up the user interaction to manually show or hide the system UI. + mContentView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + toggle(); + } + }); + + // Upon interacting with UI controls, delay any scheduled hide() + // operations to prevent the jarring behavior of controls going away + // while interacting with the UI. + binding.dummyButton.setOnTouchListener(mDelayHideTouchListener); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Trigger the initial hide() shortly after the activity has been + // created, to briefly hint to the user that UI controls + // are available. + delayedHide(100); + } + + private void toggle() { + if (mVisible) { + hide(); + } else { + show(); + } + } + + private void hide() { + // Hide UI first + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.hide(); + } + mControlsView.setVisibility(View.GONE); + mVisible = false; + + // Schedule a runnable to remove the status and navigation bar after a delay + mHideHandler.removeCallbacks(mShowPart2Runnable); + mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); + } + + private void show() { + // Show the system bar + if (Build.VERSION.SDK_INT >= 30) { + mContentView.getWindowInsetsController().show( + WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); + } else { + mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + mVisible = true; + + // Schedule a runnable to display UI elements after a delay + mHideHandler.removeCallbacks(mHidePart2Runnable); + mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); + } + + /** + * Schedules a call to hide() in delay milliseconds, canceling any + * previously scheduled calls. + */ + private void delayedHide(int delayMillis) { + mHideHandler.removeCallbacks(mHideRunnable); + mHideHandler.postDelayed(mHideRunnable, delayMillis); + } +} \ No newline at end of file diff --git a/fullshow/src/main/java/cn/ykbox/fullshow/DataBean.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/DataBean.java similarity index 94% rename from fullshow/src/main/java/cn/ykbox/fullshow/DataBean.java rename to app_dashboard/src/main/java/cn/ykbox/dashboard/DataBean.java index 8b80c94..8971756 100644 --- a/fullshow/src/main/java/cn/ykbox/fullshow/DataBean.java +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/DataBean.java @@ -1,6 +1,4 @@ -package cn.ykbox.fullshow; - -import android.content.Context; +package cn.ykbox.dashboard; import java.util.ArrayList; import java.util.List; diff --git a/fullshow/src/main/java/cn/ykbox/fullshow/FullscreenActivity.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/GalleryActivity.java similarity index 77% rename from fullshow/src/main/java/cn/ykbox/fullshow/FullscreenActivity.java rename to app_dashboard/src/main/java/cn/ykbox/dashboard/GalleryActivity.java index f28ead7..88a0ff1 100644 --- a/fullshow/src/main/java/cn/ykbox/fullshow/FullscreenActivity.java +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/GalleryActivity.java @@ -1,40 +1,27 @@ -package cn.ykbox.fullshow; - -import android.annotation.SuppressLint; - -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.FragmentManager; +package cn.ykbox.dashboard; import android.content.Context; -import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.os.Looper; import android.os.SystemClock; import android.util.Log; import android.view.MotionEvent; -import android.view.View; -import android.view.WindowInsets; -import android.widget.Toast; import com.blankj.utilcode.util.ScreenUtils; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.request.RequestOptions; import com.youth.banner.adapter.BannerImageAdapter; import com.youth.banner.holder.BannerImageHolder; import com.youth.banner.indicator.CircleIndicator; -import cn.ykbox.fullshow.databinding.ActivityFullscreenBinding; +import cn.ykbox.dashboard.databinding.ActivityGalleryBinding; /** * An example full-screen activity that shows and hides the system UI (i.e. * status bar and navigation/system bar) with user interaction. */ -public class FullscreenActivity extends BaseActivity { +public class GalleryActivity extends BaseActivity { - private ActivityFullscreenBinding binding; + private ActivityGalleryBinding binding; private Context mContext; private Handler mHandler = new Handler(); @@ -48,13 +35,11 @@ public class FullscreenActivity extends BaseActivity { super.onCreate(savedInstanceState); mContext = this; - binding = ActivityFullscreenBinding.inflate(getLayoutInflater()); + binding = ActivityGalleryBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - binding.banner.setAdapter(new BannerImageAdapter(DataBean.getTestData()) { @Override public void onBindView(BannerImageHolder holder, DataBean data, int position, int size) { - Log.d("fullshow", "load" + data.imageRes); Glide.with(holder.itemView) .load(data.imageRes) diff --git a/app_dashboard/src/main/java/cn/ykbox/dashboard/StartActivity.java b/app_dashboard/src/main/java/cn/ykbox/dashboard/StartActivity.java new file mode 100644 index 0000000..5b418e2 --- /dev/null +++ b/app_dashboard/src/main/java/cn/ykbox/dashboard/StartActivity.java @@ -0,0 +1,38 @@ +package cn.ykbox.dashboard; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class StartActivity extends AppCompatActivity { + private Context mContext; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mContext = this; + EdgeToEdge.enable(this); + setContentView(R.layout.activity_start); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + Intent myIntent = new Intent(mContext, BuildingDashboardActivity.class); + myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(myIntent); + } + }, 3000); + } +} \ No newline at end of file diff --git a/fullshow/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app_dashboard/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from fullshow/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to app_dashboard/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/fullshow/src/main/res/drawable/ic_launcher_background.xml b/app_dashboard/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from fullshow/src/main/res/drawable/ic_launcher_background.xml rename to app_dashboard/src/main/res/drawable/ic_launcher_background.xml diff --git a/fullshow/src/main/res/drawable/image1.jpg b/app_dashboard/src/main/res/drawable/image1.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image1.jpg rename to app_dashboard/src/main/res/drawable/image1.jpg diff --git a/fullshow/src/main/res/drawable/image2.jpg b/app_dashboard/src/main/res/drawable/image2.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image2.jpg rename to app_dashboard/src/main/res/drawable/image2.jpg diff --git a/fullshow/src/main/res/drawable/image3.jpg b/app_dashboard/src/main/res/drawable/image3.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image3.jpg rename to app_dashboard/src/main/res/drawable/image3.jpg diff --git a/fullshow/src/main/res/drawable/image4.jpg b/app_dashboard/src/main/res/drawable/image4.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image4.jpg rename to app_dashboard/src/main/res/drawable/image4.jpg diff --git a/fullshow/src/main/res/drawable/image5.jpg b/app_dashboard/src/main/res/drawable/image5.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image5.jpg rename to app_dashboard/src/main/res/drawable/image5.jpg diff --git a/fullshow/src/main/res/drawable/image6.jpg b/app_dashboard/src/main/res/drawable/image6.jpg similarity index 100% rename from fullshow/src/main/res/drawable/image6.jpg rename to app_dashboard/src/main/res/drawable/image6.jpg diff --git a/app_dashboard/src/main/res/layout/activity_building_dashboard.xml b/app_dashboard/src/main/res/layout/activity_building_dashboard.xml new file mode 100644 index 0000000..9ef558a --- /dev/null +++ b/app_dashboard/src/main/res/layout/activity_building_dashboard.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + +