Ver código fonte

添加副屏显功能

shanmulinxi 2 anos atrás
pai
commit
25b5ff1cc7

+ 11 - 0
app/src/main/java/com/sunwin/visitorapp/BaseApplication.java

@@ -3,6 +3,10 @@ package com.sunwin.visitorapp;
 import android.app.Application;
 import android.content.Context;
 
+import com.sunwin.visitorapp.utils.PresentationManager;
+
+import timber.log.Timber;
+
 public class BaseApplication extends Application {
     private static BaseApplication mInstance;
 
@@ -10,6 +14,13 @@ public class BaseApplication extends Application {
     public void onCreate() {
         super.onCreate();
         mInstance = this;
+        /**
+         * 仅在Debug时初始化Timber
+         */
+        if (BuildConfig.DEBUG) {
+            Timber.plant(new Timber.DebugTree());
+        }
+        PresentationManager.checkAndShow(this);
     }
 
     public static Context getInstance() {

+ 19 - 0
app/src/main/java/com/sunwin/visitorapp/activity/HomeAc.java

@@ -1,9 +1,13 @@
 package com.sunwin.visitorapp.activity;
 
+import android.app.AlertDialog;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
+import android.content.DialogInterface;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.view.View;
 import android.widget.LinearLayout;
 
@@ -12,6 +16,12 @@ import androidx.fragment.app.FragmentContainerView;
 import com.sunwin.visitorapp.BaseActivity;
 import com.sunwin.visitorapp.R;
 import com.sunwin.visitorapp.fragment.HomeFr;
+import com.sunwin.visitorapp.utils.PresentationManager;
+import com.sunwin.visitorapp.view.DisplayWelcome;
+
+import java.util.Timer;
+
+import timber.log.Timber;
 
 public class HomeAc extends BaseActivity {
 
@@ -34,5 +44,14 @@ public class HomeAc extends BaseActivity {
                 startActivity(new Intent(mContext,VisitorRegisterAc.class));
             }
         });
+
+
+
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
     }
 }

+ 14 - 3
app/src/main/java/com/sunwin/visitorapp/activity/VisitorRegisterAc.java

@@ -3,6 +3,7 @@ package com.sunwin.visitorapp.activity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
 import android.widget.EditText;
 import android.widget.Spinner;
 
@@ -22,7 +23,15 @@ public class VisitorRegisterAc extends BaseActivity {
         uiNav.setData(this,"访客登记");
 
         ViewGroup form = findViewById(R.id.ViewForm);
-//        setFormEnable(form,false);
+        setFormEnable(form,false);
+        //数据绑定自定义下拉布局文件,并且为每列设置下拉列布局,相当Listview
+        String[] ctype = new String[]{"全部","电影","美食","旅游"};
+        ArrayAdapter<String> adpter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,ctype);
+        adpter.setDropDownViewResource(android.R.layout.simple_spinner_item);
+
+        //获取Spinner组件,
+        Spinner spinner = (Spinner) findViewById(R.id.SpinnerReason);
+        spinner.setAdapter(adpter);
     }
 
 
@@ -32,10 +41,12 @@ public class VisitorRegisterAc extends BaseActivity {
             for (int i = 0;i<_ChildCount;i++){
                 View _Child =  form.getChildAt(i);
 
-                if(_Child instanceof ViewGroup){
-                    setFormEnable((ViewGroup)_Child,bool);
+                if(_Child instanceof Spinner){
+                    _Child.setEnabled(bool);
                 }else if(_Child instanceof EditText){
                     _Child.setEnabled(bool);
+                }else if(_Child instanceof ViewGroup){
+                    setFormEnable((ViewGroup)_Child,bool);
                 }
             }
         }

+ 63 - 7
app/src/main/java/com/sunwin/visitorapp/utils/PresentationManager.java

@@ -1,6 +1,7 @@
 package com.sunwin.visitorapp.utils;
 
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.app.Presentation;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -12,40 +13,95 @@ import android.provider.Settings;
 import android.view.Display;
 import android.view.WindowManager;
 
-import androidx.appcompat.app.AlertDialog;
+import com.sunwin.visitorapp.view.DisplayWelcome;
 
+import java.lang.reflect.Constructor;
 import java.util.Objects;
 
+import timber.log.Timber;
+
 
 /**
  * 多屏显示类
  */
 public class PresentationManager {
 
+    private static volatile Presentation instance;
+
+
+    public static boolean hasInit(){
+        return  instance != null;
+    }
+
+    public static void checkAndShow(Context context){
+        Timber.e("checkAndShow");
+        if(PresentationManager.canMuteScreen(context)){
+            Timber.e("canMuteScreen");
+            if(PresentationManager.permissionsMuteScreen(context)){
+                Timber.e("permissionsMuteScreen");
+                if(!PresentationManager.hasInit())PresentationManager.instanceInit(DisplayWelcome.class,context);
+                PresentationManager.show();
+            }else{
+                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
+                    new AlertDialog.Builder(context).setTitle("开启副屏权限")
+                            .setMessage("需要打开在其他应用上层显示,请去设置中开启此权限")
+                            .setNegativeButton("取消",null)
+                            .setPositiveButton("开启", new DialogInterface.OnClickListener() {
+                                @Override
+                                public void onClick(DialogInterface dialog, int which) {
+                                    Intent intent  = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
+                                    intent.setData(Uri.parse("package:" + context.getPackageName()));
+                                    context.startActivity(intent);
+                                }
+                            }).create().show();
+                }
+
+            }
+        }
+    }
+
     public static boolean canMuteScreen(Context context){
         DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
         Display[] presentationDisplays = displayManager.getDisplays();
         return presentationDisplays.length > 1;
     }
 
-    public static Display[] getMuteScreenDisplays(Context context){
-        DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
-        return displayManager.getDisplays();
-    }
+
     public static boolean permissionsMuteScreen(Context context){
         boolean needApply = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(context);
         return !needApply;
     }
-    public static void presentationShow(Presentation presentation) {
+    public static synchronized boolean instanceInit(Class<? extends Presentation> presentationClass,Context context) {
+        if(instance!=null){
+            instance.dismiss();
+        }
         try {
+            DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
+            Constructor<? extends Presentation> constructor = presentationClass.getConstructor(Context.class,Display.class);
+            Presentation presentation = constructor.newInstance(context,displayManager.getDisplays()[1]);
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 Objects.requireNonNull(presentation.getWindow()).setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
             } else {
                 Objects.requireNonNull(presentation.getWindow()).setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
             }
-            presentation.show();
+            instance = presentation;
+            return true;
         } catch (Exception e) {
             e.printStackTrace();
         }
+        return false;
+    }
+
+    public static synchronized void show() {
+        if(instance!=null)instance.show();
+    }
+    public static synchronized void hide() {
+        if(instance!=null)instance.hide();
+    }
+    public static synchronized void dismiss() {
+        if(instance!=null){
+            instance.dismiss();
+            instance = null;
+        }
     }
 }

+ 14 - 0
app/src/main/java/com/sunwin/visitorapp/view/DisplayWelcome.java

@@ -0,0 +1,14 @@
+package com.sunwin.visitorapp.view;
+
+import android.app.Presentation;
+import android.content.Context;
+import android.view.Display;
+
+import com.sunwin.visitorapp.R;
+
+public class DisplayWelcome extends Presentation {
+    public DisplayWelcome(Context outerContext, Display display) {
+        super(outerContext, display);
+        setContentView(R.layout.display_welcome);
+    }
+}

+ 40 - 14
app/src/main/res/drawable/card_input.xml

@@ -1,16 +1,42 @@
 <?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <!--设置圆角-->
-    <!--  按顺序分别对应:左下角的角度、右下角的角度、左上角的角度、右上角的角度-->
-    <corners
-        android:bottomLeftRadius="@dimen/CardInputRadius"
-        android:bottomRightRadius="@dimen/CardInputRadius"
-        android:topLeftRadius="@dimen/CardInputRadius"
-        android:topRightRadius="@dimen/CardInputRadius" />
-    <!--设置圆角背景色-->
-    <!--  设置边框大小与背景色-->
-    <stroke
-        android:width="2dp"
-        android:color="@color/ColorGray" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
-</shape>
+    <item  android:state_enabled="true">
+        <shape >
+            <!--设置圆角-->
+            <!--  按顺序分别对应:左下角的角度、右下角的角度、左上角的角度、右上角的角度-->
+            <corners
+                android:bottomLeftRadius="@dimen/CardInputRadius"
+                android:bottomRightRadius="@dimen/CardInputRadius"
+                android:topLeftRadius="@dimen/CardInputRadius"
+                android:topRightRadius="@dimen/CardInputRadius" />
+            <!--设置圆角背景色-->
+            <!--  设置边框大小与背景色-->
+            <stroke
+                android:width="2dp"
+                android:color="@color/ColorGray" />
+
+        </shape>
+    </item>
+    <item  android:state_enabled="false" >
+        <shape >
+            <!--设置圆角-->
+            <!--  按顺序分别对应:左下角的角度、右下角的角度、左上角的角度、右上角的角度-->
+            <corners
+                android:bottomLeftRadius="@dimen/CardInputRadius"
+                android:bottomRightRadius="@dimen/CardInputRadius"
+                android:topLeftRadius="@dimen/CardInputRadius"
+                android:topRightRadius="@dimen/CardInputRadius" />
+            <!--设置圆角背景色-->
+            <!--  设置边框大小与背景色-->
+
+            <solid android:color="@color/ColorGray_O_6"/>
+            <stroke
+                android:width="2dp"
+
+                android:color="@color/ColorGray" />
+
+        </shape>
+    </item>
+
+</selector>

+ 3 - 0
app/src/main/res/layout/ac_visitor_register.xml

@@ -83,6 +83,7 @@
                 android:text="访客信息"
                 />
             <LinearLayout
+                android:id="@+id/ViewFormVisitor"
                 android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -125,6 +126,7 @@
                             />
                         <Spinner
                             style="@style/StyleInputContent"
+
                             android:id="@+id/SpinnerReason"
                             android:layout_weight="2"
                             android:layout_width="0dp"
@@ -287,6 +289,7 @@
                 android:text="被访人员信息"
                 />
             <LinearLayout
+                android:id="@+id/ViewFormVisitorBy"
                 android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"

+ 29 - 0
app/src/main/res/layout/display_welcome.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/ColorPrimary"
+
+    >
+
+    <ImageView
+        android:id="@+id/ImageWelcome"
+        android:src="@color/ColorGray_O_6"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="3"/>
+    <LinearLayout
+        android:layout_weight="1"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:orientation="vertical">
+        <TextView
+            style="@style/StyleTextBig"
+            android:text="欢迎光临"
+            android:textColor="@color/ColorWhite"
+            android:textFontWeight="Bold"
+            />
+    </LinearLayout>
+</LinearLayout>

+ 5 - 3
app/src/main/res/values/style.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
     <dimen name="TextSizeBig">30.0sp</dimen>
     <dimen name="TextSizeLarge">25.0sp</dimen>
@@ -19,8 +19,9 @@
         <item name="android:textSize">@dimen/TextSizeContent</item>
     </style>
     <style name="StyleInputContent" parent="StyleTextContent">
-        <item name="android:padding">5dp</item>
-        <item name="android:layout_margin">2dp</item>
+        <item name="android:padding">3dp</item>
+        <item name="android:layout_marginVertical">2dp</item>
+        <item name="android:layout_marginHorizontal">5dp</item>
         <item name="android:background">@drawable/card_input</item>
     </style>
     <color name="NavBackgroundColor">#00FFFFFF</color>
@@ -30,6 +31,7 @@
     <color name="ColorWhite">#eeeeee</color>
     <color name="ColorPrimary">#409eff</color>
     <color name="ColorGray">#c9c9c9</color>
+    <color name="ColorGray_O_6">#66c9c9c9</color>
     <dimen name="Home_Menu_Item_Radius">10dp</dimen>
     <dimen name="Home_Menu_Item_StrokeWidth">2dp</dimen>