app/build.gradle
@@ -37,6 +37,11 @@ implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' api "android.arch.lifecycle:extensions:1.1.1" implementation "androidx.room:room-runtime:$rootProject.roomVersion" annotationProcessor "androidx.room:room-compiler:$rootProject.roomVersion" implementation "androidx.work:work-runtime:$rootProject.workVersion" implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion" implementation 'com.android.support.constraint:constraint-layout:1.1.3' // To get SwipeBack feature, rely on both fragmentation & fragmentation-swipeback implementation 'me.yokeyword:fragmentation:1.3.6' @@ -48,4 +53,5 @@ androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation project(path: ':lib') implementation 'com.google.code.gson:gson:2.8.6' } app/src/main/assets/students_file.json
New file @@ -0,0 +1,14 @@ [ { "stu_id":1000, "ID": "410923198910162546", "name": "张三", "sex":1 }, { "stu_id":1001, "ID": "410923198910162545", "name": "李四", "sex":2 } ] app/src/main/java/safeluck/drive/evaluation/DB/SeedDatabaseWorker.java
New file @@ -0,0 +1,55 @@ package safeluck.drive.evaluation.DB; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.work.WorkRequest; import androidx.work.Worker; import androidx.work.WorkerParameters; import androidx.work.impl.model.WorkSpec; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import java.util.Set; import java.util.UUID; /** * MyApplication2 * Created by lzw on 2019/11/25. 13:11:57 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class SeedDatabaseWorker extends Worker { private static final String TAG = "SeedDatabaseWorker"; public SeedDatabaseWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork() { Log.i(TAG, "doWork: "+Thread.currentThread().getId()); try { InputStream inputStream = getApplicationContext().getAssets().open("students_file.json"); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); JsonReader jsonReader = new JsonReader(inputStreamReader); jsonReader.beginObject(); Gson gson = new Gson(); List<Student> mstus=gson.fromJson(jsonReader,Student.class); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getstudentDao().insertAll(mstus); } catch (IOException e) { e.printStackTrace(); return Result.failure(); } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/DB/Student.java
New file @@ -0,0 +1,75 @@ package safeluck.drive.evaluation.DB; import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; /** * MyApplication2 * Created by lzw on 2019/11/25. 10:43:57 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Entity(tableName = "student_table") public class Student { @PrimaryKey @NonNull @ColumnInfo(name = "stu_id") private long stu_ID; @NonNull @ColumnInfo(name = "name") private String name; //身份证 @ColumnInfo(name = "ID") private String mID; //性别 0-男 1-女 @ColumnInfo(name = "sex") private int sex; public long getStu_ID() { return stu_ID; } public void setStu_ID(long stu_ID) { this.stu_ID = stu_ID; } public String getID() { return mID; } public void setID(String mID) { this.mID = mID; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } @NonNull public String getName() { return name; } public void setName(@NonNull String name) { this.name = name; } @Override public String toString() { return "Student{" + "stu_ID=" + stu_ID + ", name='" + name + '\'' + ", mID='" + mID + '\'' + ", sex=" + sex + '}'; } } app/src/main/java/safeluck/drive/evaluation/DB/StudentDao.java
New file @@ -0,0 +1,32 @@ package safeluck.drive.evaluation.DB; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import java.util.List; /** * MyApplication2 * Created by lzw on 2019/11/25. 10:51:02 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Dao public interface StudentDao { @Insert(onConflict = OnConflictStrategy.IGNORE) void insert(Student student); @Query("SELECT * from student_table") LiveData<List<Student>> getAllStudents(); @Delete void deleteStu(Student student); @Insert(onConflict = OnConflictStrategy.REPLACE) void insertAll(List<Student> students); } app/src/main/java/safeluck/drive/evaluation/DB/WokViewModel.java
New file @@ -0,0 +1,36 @@ package safeluck.drive.evaluation.DB; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import java.util.List; /** * MyApplication2 * Created by lzw on 2019/11/25. 11:34:24 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class WokViewModel extends AndroidViewModel { public WokViewModel(@NonNull Application application) { super(application); workRepository = new WorkRepository(application); mStudents = workRepository.getAllStudents(); } private WorkRepository workRepository; private LiveData<List<Student>> mStudents; public LiveData<List<Student>> getStudents() { return mStudents; } public void insertStudent(Student student){ workRepository.insert(student); } } app/src/main/java/safeluck/drive/evaluation/DB/WorkRepository.java
New file @@ -0,0 +1,37 @@ package safeluck.drive.evaluation.DB; import android.app.Application; import androidx.lifecycle.LiveData; import java.util.List; /** * MyApplication2 * Created by lzw on 2019/11/25. 11:20:26 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class WorkRepository { private StudentDao studentDao; private LiveData<List<Student>> mStudents; public WorkRepository(Application application){ WorkRoomDataBase db = WorkRoomDataBase.getWorkRoomDataBase(application); studentDao = db.getstudentDao(); mStudents = studentDao.getAllStudents(); } public LiveData<List<Student>> getAllStudents(){ return mStudents; } void insert(final Student student){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { studentDao.insert(student); } }); } } app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
New file @@ -0,0 +1,54 @@ package safeluck.drive.evaluation.DB; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * MyApplication2 * Created by lzw on 2019/11/25. 11:13:23 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Database(entities = {Student.class},version = 1,exportSchema = false) public abstract class WorkRoomDataBase extends RoomDatabase { private static final String TAG = "WorkRoomDataBase"; public abstract StudentDao getstudentDao(); private static volatile WorkRoomDataBase workRoomDataBase; private static final int NUMBER_OF_THREADS = 4; static final ExecutorService dataBaseWriteExecutor = Executors.newFixedThreadPool(NUMBER_OF_THREADS); public static WorkRoomDataBase getWorkRoomDataBase(final Context mContext){ if (workRoomDataBase == null){ synchronized (WorkRoomDataBase.class){ if (workRoomDataBase == null){ workRoomDataBase = Room.databaseBuilder(mContext.getApplicationContext(),WorkRoomDataBase.class,"work_database") .addCallback(new Callback() { @Override public void onCreate(@NonNull SupportSQLiteDatabase db) { super.onCreate(db); OneTimeWorkRequest oneTimeWorkRequest = OneTimeWorkRequest.from(SeedDatabaseWorker.class); Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据"); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest); } }) .build(); } } } return workRoomDataBase; } } app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -3,16 +3,18 @@ import android.Manifest; import android.app.AlertDialog; import android.arch.lifecycle.Observer; import android.arch.lifecycle.ViewModelProviders; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import me.yokeyword.fragmentation.SupportActivity; import safeluck.drive.evaluation.fragment.HomeFragment; app/src/main/java/safeluck/drive/evaluation/adapter/MyFragmetAdapter.java
@@ -1,15 +1,14 @@ package safeluck.drive.evaluation.adapter; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.fragment.BaseSettingFragment; import safeluck.drive.evaluation.fragment.SingleJudgeFragment; import safeluck.drive.evaluation.fragment.VPFragment; /** * MyApplication2 app/src/main/java/safeluck/drive/evaluation/adapter/ScoreAdapter.java
@@ -2,7 +2,6 @@ import android.content.Context; import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java
@@ -1,15 +1,17 @@ package safeluck.drive.evaluation.adapter; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.fragment.BaseDatasFragment; import safeluck.drive.evaluation.fragment.FtpConfigFragment; import safeluck.drive.evaluation.fragment.JiaXiaoFragment; import safeluck.drive.evaluation.fragment.VPFragment; /** * MyApplication2 app/src/main/java/safeluck/drive/evaluation/app.java
@@ -1,9 +1,10 @@ package safeluck.drive.evaluation; import android.app.Application; import android.support.annotation.NonNull; import android.util.Log; import androidx.annotation.NonNull; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.IAYExamListener; @@ -13,6 +14,7 @@ import com.anyun.exam.lib.MyLog; import com.anyun.exam.lib.crash.CrashHandler; import safeluck.drive.evaluation.DB.WorkRoomDataBase; import safeluck.drive.evaluation.util.SystemUtil; /** @@ -47,6 +49,7 @@ AYSdk.getInstance().registListener(this); Log.i(TAG, "onCreate: "); MyLog.createIfNotExist(); } } app/src/main/java/safeluck/drive/evaluation/customview/ArrowView.java
@@ -6,14 +6,13 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.support.annotation.Nullable; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import androidx.annotation.Nullable; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.util.Utils; app/src/main/java/safeluck/drive/evaluation/customview/CircleImageView.java
@@ -14,10 +14,13 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.util.AttributeSet; import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.appcompat.widget.AppCompatImageView; import safeluck.drive.evaluation.R; @@ -31,7 +34,7 @@ public class CircleImageView extends android.support.v7.widget.AppCompatImageView { public class CircleImageView extends AppCompatImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; app/src/main/java/safeluck/drive/evaluation/customview/HouseView.java
@@ -6,13 +6,13 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import androidx.annotation.Nullable; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.util.Utils; app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java
@@ -1,8 +1,8 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java
@@ -2,20 +2,19 @@ import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.viewpager.widget.ViewPager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.google.android.material.tabs.TabLayout; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.MyFragmetAdapter; app/src/main/java/safeluck/drive/evaluation/fragment/FtpConfigFragment.java
@@ -1,8 +1,8 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java
@@ -1,22 +1,16 @@ package safeluck.drive.evaluation.fragment; import android.app.ActionBar; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.Toast; import com.google.zxing.WriterException; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.io.File; import java.io.FileOutputStream; app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java
@@ -3,14 +3,16 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
@@ -1,12 +1,14 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -1,93 +1,72 @@ package safeluck.drive.evaluation.fragment; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathDashPathEffect; import android.graphics.Rect; import android.graphics.RectF; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; /** * MyApplication2 * Created by lzw on 2019/9/26. 15:20:58 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class MapFragment extends SupportFragment implements SurfaceHolder.Callback { private boolean isDrawing = false; public static SupportFragment newInstance(){ return new MapFragment(); } private SurfaceView mSurfaceView; private SurfaceHolder holder; Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); Path path = new Path(); private Canvas canvas; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mSurfaceView = new SurfaceView(getActivity()); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); holder = mSurfaceView.getHolder(); holder.addCallback(this); mSurfaceView.setLayoutParams(layoutParams); mSurfaceView.setKeepScreenOn(true); return mSurfaceView; } @Override public void surfaceCreated(final SurfaceHolder holder) { isDrawing = true; //开启线程 进行画图 new Thread(new Runnable() { @Override public void run() { while (isDrawing){ drawPath(); } } }).start(); } private void drawPath() { try { canvas = holder.lockCanvas(); paint.setColor(Color.RED); path.addCircle(mSurfaceView.getWidth()/2,mSurfaceView.getHeight()/2,70, Path.Direction.CW); path.addOval(new RectF(new Rect(100,100,200,200)), Path.Direction.CW); canvas.drawPath(path,paint); } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null){ holder.unlockCanvasAndPost(canvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { isDrawing = false; } } //package safeluck.drive.evaluation.fragment; // //import android.graphics.Canvas; //import android.graphics.Color; //import android.graphics.Paint; //import android.graphics.Path; //import android.graphics.PathDashPathEffect; //import android.graphics.Rect; //import android.graphics.RectF; //import android.opengl.GLSurfaceView; //import android.os.Bundle; //import android.support.annotation.NonNull; //import android.support.annotation.Nullable; //import android.support.v7.widget.Toolbar; //import android.util.Log; //import android.view.LayoutInflater; //import android.view.SurfaceHolder; //import android.view.SurfaceView; //import android.view.View; //import android.view.ViewGroup; //import android.widget.LinearLayout; // //import javax.security.auth.login.LoginException; // //import me.yokeyword.fragmentation.SupportFragment; //import safeluck.drive.evaluation.R; ////import safeluck.drive.evaluation.render.GLRender; // // ///** // * MyApplication2 // * Created by lzw on 2019/9/26. 15:20:58 // * 邮箱:632393724@qq.com // * All Rights Saved! Chongqing AnYun Tech co. LTD // */ //public class MapFragment extends SupportFragment{ // private boolean isDrawing = false; // // public static SupportFragment newInstance(){ // return new MapFragment(); // } // private GLSurfaceView mGLSurfaceView; // private static final String TAG = "MapFragment"; // private SurfaceHolder holder; // Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // Path path = new Path(); // private Canvas canvas; // private int x=-1; // private int y = -1; // private Toolbar toolbar; // // private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view, // // @Nullable // @Override // public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // View view = inflater.inflate(R.layout.layout_mapfragment,container,false); // initView(view); // return view; // } // // private void initView(View view) { // toolbar = view.findViewById(R.id.toolbar); // toolbar.setTitle("简单地图"); // // mGLSurfaceView = view.findViewById(R.id.glsurface); // mGLSurfaceView.setRenderer(new GLRender()); // } // // // //} app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -1,15 +1,16 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.util.ArrayList; import java.util.List; app/src/main/java/safeluck/drive/evaluation/fragment/PasswordFragment.java
@@ -1,8 +1,7 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +10,9 @@ import android.widget.EditText; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -2,9 +2,6 @@ import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,6 +13,10 @@ import android.widget.ListView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import java.util.ArrayList; import java.util.List; app/src/main/java/safeluck/drive/evaluation/fragment/SingleJudgeFragment.java
@@ -1,13 +1,13 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; app/src/main/java/safeluck/drive/evaluation/fragment/SysSettingFragment.java
@@ -1,22 +1,23 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.viewpager.widget.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.google.android.material.tabs.TabLayout; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.MyFragmetAdapter; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; /** * 系统配置UI 目前没有用 app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java
@@ -28,11 +28,13 @@ import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import android.util.Log; import android.util.SparseIntArray; import android.view.LayoutInflater; app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -1,16 +1,28 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TextInputEditText; import android.support.v7.widget.AppCompatEditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import androidx.appcompat.widget.AppCompatEditText; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.google.android.material.textfield.TextInputEditText; import java.util.List; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.DB.Student; import safeluck.drive.evaluation.DB.WokViewModel; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.tcp.ConnectThread; @@ -39,6 +51,16 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_tcpclient, container, false); initView(view); WokViewModel workViewModel =ViewModelProviders.of(this).get(WokViewModel.class); workViewModel.getStudents().observe((LifecycleOwner) this, new Observer<List<Student>>() { @Override public void onChanged(List<Student> students) { for (Student student:students){ Log.i("Students", "onChanged: "+student.toString()); } } }); return view; } app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -1,8 +1,9 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java
@@ -1,14 +1,16 @@ package safeluck.drive.evaluation.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import me.yokeyword.fragmentation.SupportFragment; /** app/src/main/java/safeluck/drive/evaluation/render/GLRender.java
New file @@ -0,0 +1,125 @@ //package safeluck.drive.evaluation.render; // //import android.opengl.GLSurfaceView; // //import java.nio.ByteBuffer; // //import javax.microedition.khronos.egl.EGLConfig; //import javax.microedition.khronos.opengles.GL10; // ///** // * MyApplication2 // * Created by lzw on 2019/9/29. 13:31:28 // * 邮箱:632393724@qq.com // * All Rights Saved! Chongqing AnYun Tech co. LTD // */ //public class GLRender implements GLSurfaceView.Renderer { // //控制旋转的角度 // private float rotate; // @Override // public void onSurfaceCreated(GL10 gl, EGLConfig config) { // //关闭抗抖动 // gl.glDisable(GL10.GL_DITHER); // //设置系统对透视进行修正 // gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); // gl.glClearColor(0, 0, 0, 0); // //设置阴影平滑模式 // gl.glShadeModel(GL10.GL_SMOOTH); // //启动深度测试 // gl.glEnable(GL10.GL_DEPTH_TEST); // //设置深度测试的类型 // gl.glDepthFunc(GL10.GL_LEQUAL); // // } // // @Override // public void onSurfaceChanged(GL10 gl, int width, int height) { // //设置3D视窗的大小及位置 // gl.glViewport(0, 0, width, height); // //将当前矩阵模式设为投影矩形 // gl.glMatrixMode(GL10.GL_PROJECTION); // //初始化单位矩阵 // gl.glLoadIdentity(); // //计算透视窗口的宽度高度比 // float ratio = (float) width / height; // //调用此方法设置透视窗口的空间大小 // gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // // } // // @Override // public void onDrawFrame(GL10 gl) { // //清除屏幕缓存和深度缓存 // gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // //启用顶点坐标数据 // gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // //启用顶点颜色数据 // gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // //设置当前矩阵堆栈为模型堆栈 // gl.glMatrixMode(GL10.GL_MODELVIEW); // //------绘制第一个图形----- // //重置当前的模型视图矩阵 // gl.glLoadIdentity(); // gl.glTranslatef(0.95f, -0.8f, -1.5f); //1️⃣ // //设置顶点位置数据 // gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.triangleData)); // //设置顶点颜色数据 // gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(PointData.triangleColor)); // //根据顶点数据绘制平面图形 // gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // // //-----绘制第二个图形----- // //重置当前的模型视图矩阵 // gl.glLoadIdentity(); // gl.glTranslatef(0.95f, 0.8f, -1.5f); // //设置顶点位置数据 // gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.rectData)); // //设置顶点颜色数据 // gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(PointData.rectColor)); // //更具顶点数据绘制平面图形 // gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // // //-----绘制第三个图形---- // //重置当前的模型视图矩阵 // gl.glLoadIdentity(); // gl.glTranslatef(-0.95f, 0.8f, -1.5f); // //设置顶点位置数据 // gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.rectData2)); // //根据顶点数据绘制平面图形 // gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // // //-----绘制第四个图形----- // //重置当前的模型视图矩阵 // gl.glLoadIdentity(); // gl.glTranslatef(-0.95f, -0.8f, -1.5f); // //设置使用纯色填充 **需要注意: 使用纯色填充需要禁用顶点颜色数组 // gl.glColor4f(1.0f, 0.2f, 0.2f, 0.0f); // gl.glDisableClientState(GL10.GL_COLOR_ARRAY); // //设置顶点位置数据 // gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.pentacle)); // //根据顶点数据绘制图形 // gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5); // // //----绘制第五个图形--- // //重置当前的模型视图矩阵 // gl.glLoadIdentity(); // gl.glTranslatef(0f, 0f, -1.5f); // gl.glRotatef(rotate, 0f, 0.2f, 0f); // //设置顶点位置数据 // gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(TDPointData.taperVertices)); // //启用顶点颜色组 // gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // //设置顶点颜色数据 // gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(TDPointData.taperColors)); // //按taperFacetsBuffer指定的面绘制三角形 // ByteBuffer byteBuffer = PointData.byteBufferUtil(TDPointData.taperFacets); // gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, byteBuffer.remaining(), GL10.GL_UNSIGNED_BYTE, byteBuffer); // // // //绘制结束 // gl.glFinish(); // gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // //旋转角度+1 // rotate += 1; // } //} app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java
@@ -7,9 +7,11 @@ import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.ArrayList; @@ -67,7 +69,7 @@ } } public void recheckPermissions(int requestCode, @NonNull String[] permissions,@NonNull int[] grantReuslts){ public void recheckPermissions(int requestCode, @NonNull String[] permissions, @NonNull int[] grantReuslts){ for (int grantResult : grantReuslts) { if (grantResult == PackageManager.PERMISSION_DENIED) { app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java
@@ -1,11 +1,12 @@ package safeluck.drive.evaluation.viewmodels; import android.arch.lifecycle.LiveData; import android.arch.lifecycle.MutableLiveData; import android.arch.lifecycle.ViewModel; import android.util.Log; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import java.util.concurrent.atomic.AtomicInteger; import com.anyun.exam.lib.MyLog; build.gradle
@@ -6,6 +6,11 @@ jcenter() } ext{ roomVersion ='2.2.1' workVersion ='2.2.0' lifecycleVersion = '2.1.0' } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -5,9 +5,10 @@ import android.os.IBinder; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.support.annotation.Nullable; import android.util.Log; import androidx.annotation.Nullable; import java.util.concurrent.atomic.AtomicBoolean; /**