endian11
2019-11-25 e01f5a72c7782419f01f01b3453d808a71888cb1
使用androidx代替support lib;Room加上注解处理器;修改数据库getID;
29个文件已修改
8个文件已添加
836 ■■■■ 已修改文件
app/build.gradle 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/students_file.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/SeedDatabaseWorker.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/Student.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/StudentDao.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WokViewModel.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WorkRepository.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/MyFragmetAdapter.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/ScoreAdapter.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/customview/ArrowView.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/customview/CircleImageView.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/customview/HouseView.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/FtpConfigFragment.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/PasswordFragment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SingleJudgeFragment.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SysSettingFragment.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/render/GLRender.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
build.gradle 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/RemoteService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
/**