| | |
| | | implementation fileTree(dir: 'libs', include: ['*.jar']) |
| | | 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 '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' |
| | | // Swipeback is based on fragmentation. Refer to SwipeBackActivity/Fragment for your Customized SupportActivity/Fragment |
| | | implementation 'me.yokeyword:fragmentation-swipeback:1.3.6' |
| | | |
| | | |
| | | implementation 'me.dm7.barcodescanner:zxing:1.9.8' |
| | | testImplementation 'junit:junit:4.12' |
| | | androidTestImplementation 'com.android.support.test:runner:1.0.2' |
| | | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' |
| | |
| | | package="safeluck.drive.evaluation"> |
| | | |
| | | <uses-permission android:name="android.permission.CAMERA" /> |
| | | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
| | | <application |
| | | android:allowBackup="true" |
| | | android:icon="@mipmap/ic_launcher" |
| | |
| | | package safeluck.drive.evaluation; |
| | | |
| | | |
| | | import android.Manifest; |
| | | import android.app.AlertDialog; |
| | | import android.arch.lifecycle.Observer; |
| | | import android.arch.lifecycle.ViewModelProvider; |
| | | 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 me.yokeyword.fragmentation.SupportActivity; |
| | | import safeluck.drive.evaluation.fragment.HomeFragment; |
| | | import safeluck.drive.evaluation.util.MyLog; |
| | | import safeluck.drive.evaluation.util.PermissionManager; |
| | | import safeluck.drive.evaluation.viewmodels.MainViewModel; |
| | | |
| | | public class MainActivity extends SupportActivity { |
| | | |
| | | private static final int PERMISSIONS_REQUEST_CODE = 1001; |
| | | private String TAG = MainActivity.class.getCanonicalName(); |
| | | |
| | | private PermissionManager mPermissionsManager ; |
| | | String[] PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA}; |
| | | |
| | | @Override |
| | | protected void onCreate(Bundle savedInstanceState) { |
| | |
| | | |
| | | setContentView(R.layout.activity_main); |
| | | |
| | | mPermissionsManager = new PermissionManager(this) { |
| | | @Override |
| | | public void authorized(int requestCode) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void noAuthorization(int requestCode, String[] lackPermissions) { |
| | | AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); |
| | | builder.setTitle("提示"); |
| | | builder.setMessage("缺少"+lackPermissions+"权限"); |
| | | builder.setPositiveButton("设置权限", new DialogInterface.OnClickListener() { |
| | | @Override |
| | | public void onClick(DialogInterface dialog, int which) { |
| | | PermissionManager.startAppSettings(getApplicationContext()); |
| | | } |
| | | }); |
| | | builder.create().show(); |
| | | } |
| | | |
| | | @Override |
| | | public void ignore() { |
| | | |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class); |
| | | mainViewModel.getJson().observe(this, new Observer<String>() { |
| | | @Override |
| | | public void onChanged(@Nullable String json) { |
| | | Toast.makeText(MainActivity.this, json, Toast.LENGTH_SHORT).show(); |
| | | Log.i(TAG,"json=========="+json); |
| | | Log.i(TAG,"json=========="+Thread.currentThread().getName()); |
| | | MyLog.i(TAG,"json=========="+json); |
| | | MyLog.i(TAG,"json=========="+Thread.currentThread().getName()); |
| | | } |
| | | }); |
| | | |
| | |
| | | loadRootFragment(R.id.fl_container,HomeFragment.newInstance()); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | protected void onResume() { |
| | | super.onResume(); |
| | | mPermissionsManager.checkPermissions(PERMISSIONS_REQUEST_CODE,PERMISSIONS); |
| | | } |
| | | |
| | | @Override |
| | | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { |
| | | super.onRequestPermissionsResult(requestCode, permissions, grantResults); |
| | | mPermissionsManager.recheckPermissions(PERMISSIONS_REQUEST_CODE,permissions,grantResults); |
| | | } |
| | | } |
| | |
| | | |
| | | import android.app.Application; |
| | | import android.support.annotation.NonNull; |
| | | import android.util.Log; |
| | | |
| | | |
| | | import com.anyun.exam.lib.AYSdk; |
| | | import com.anyun.exam.lib.IAYExamListener; |
| | | |
| | | import me.yokeyword.fragmentation.Fragmentation; |
| | | import me.yokeyword.fragmentation.helper.ExceptionHandler; |
| | | import safeluck.drive.evaluation.util.MyLog; |
| | | |
| | | /** |
| | | * MyApplication2 |
| | |
| | | .handleException(new ExceptionHandler() { |
| | | @Override |
| | | public void onException(@NonNull Exception e) { |
| | | Log.i(TAG, "onException: "+e.getMessage()); |
| | | MyLog.i(TAG, "onException: "+e.getMessage()); |
| | | } |
| | | }) |
| | | .install(); |
| | |
| | | @Override |
| | | public void onTerminate() { |
| | | super.onTerminate(); |
| | | Log.e(TAG,"OnTerminate()"); |
| | | MyLog.e(TAG,"OnTerminate()"); |
| | | AYSdk.getInstance().uninit(); |
| | | } |
| | | |
| | | @Override |
| | | public void onLowMemory() { |
| | | super.onLowMemory(); |
| | | Log.e(TAG,"OnTerminate()"); |
| | | MyLog.e(TAG,"OnTerminate()"); |
| | | } |
| | | |
| | | @Override |
| | | public void callBackMsg(String json) { |
| | | Log.d(TAG,"收到=="+json); |
| | | MyLog.d(TAG,"收到=="+json); |
| | | } |
| | | } |
| | |
| | | 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.support.v7.app.AlertDialog; |
| | | 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 java.io.File; |
| | | import java.io.FileOutputStream; |
| | | import java.nio.ByteBuffer; |
| | | |
| | | import me.yokeyword.fragmentation.ISupportFragment; |
| | | import me.yokeyword.fragmentation.SupportFragment; |
| | | import safeluck.drive.evaluation.R; |
| | | import safeluck.drive.evaluation.util.DimenUtil; |
| | | |
| | | /** |
| | | * 首页 |
| | |
| | | } |
| | | }).show(); |
| | | |
| | | |
| | | break; |
| | | case R.id.system_setting: |
| | | //打开输入密码界面 |
| | |
| | | } else { |
| | | start(passwordFragment); |
| | | } |
| | | // extraTransaction().startDontHideSelf(PasswordFragment.newInstance()); |
| | | |
| | | break; |
| | | } |
| | | } |
New file |
| | |
| | | package safeluck.drive.evaluation.util; |
| | | |
| | | /** |
| | | * anyunProject(20190906) |
| | | * Created by lzw on 2019/9/6. 17:23:17 |
| | | * 邮箱:632393724@qq.com |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | |
| | | |
| | | import android.content.Context; |
| | | import android.os.Environment; |
| | | import android.util.Log; |
| | | |
| | | import java.io.BufferedWriter; |
| | | import java.io.File; |
| | | import java.io.FileWriter; |
| | | import java.io.IOException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | |
| | | public class MyLog { |
| | | |
| | | |
| | | |
| | | private static final String TAG = "AYJiaKao"; |
| | | private static Boolean MYLOG_SWITCH = true; // 日志文件总开关 |
| | | |
| | | private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关 |
| | | |
| | | // 输入日志类型,w代表只输出告警信息等,v代表输出所有信息 |
| | | private static char MYLOG_TYPE = 'v'; |
| | | |
| | | // 日志文件在sdcard中的路径 |
| | | private static String MYLOG_PATH_SDCARD_DIR = "/sdcard/nvlog"; |
| | | |
| | | private static int SDCARD_LOG_FILE_SAVE_DAYS = 3;// sd卡中日志文件的最多保存天数 |
| | | |
| | | private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称 |
| | | |
| | | private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式 |
| | | |
| | | private static SimpleDateFormat logfile = new SimpleDateFormat("yyyy-MM-dd");// 日志文件格式 |
| | | |
| | | public Context context; |
| | | |
| | | |
| | | |
| | | public static void w(String tag, Object msg) { // 警告信息 |
| | | |
| | | log(tag, msg.toString(), 'w'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void e(String tag, Object msg) { // 错误信息 |
| | | |
| | | log(tag, msg.toString(), 'e'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void d(String tag, Object msg) {// 调试信息 |
| | | |
| | | log(tag, msg.toString(), 'd'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void i(String tag, Object msg) {// |
| | | |
| | | log(tag, msg.toString(), 'i'); |
| | | |
| | | } |
| | | public static void i(Object msg) {// |
| | | |
| | | log(TAG, msg.toString(), 'i'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void v(String tag, Object msg) { |
| | | |
| | | log(tag, msg.toString(), 'v'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void w(String tag, String text) { |
| | | |
| | | log(tag, text, 'w'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void e(String tag, String text) { |
| | | |
| | | log(tag, text, 'e'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void d(String tag, String text) { |
| | | |
| | | log(tag, text, 'd'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void i(String tag, String text) { |
| | | |
| | | log(tag, text, 'i'); |
| | | |
| | | } |
| | | public static void i( String text) { |
| | | |
| | | log(TAG, text, 'i'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public static void v(String tag, String text) { |
| | | |
| | | log(tag, text, 'v'); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | |
| | | * 根据tag, msg和等级,输出日志 |
| | | |
| | | * @param tag |
| | | |
| | | * @param msg |
| | | |
| | | * @param level |
| | | |
| | | */ |
| | | |
| | | private static void log(String tag, String msg, char level) { |
| | | |
| | | if (MYLOG_SWITCH) {//日志文件总开关 |
| | | |
| | | if ('e' == level && ('e' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { // 输出错误信息 |
| | | |
| | | Log.e(tag, msg); |
| | | |
| | | } else if ('w' == level && ('w' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { |
| | | |
| | | Log.w(tag, msg); |
| | | |
| | | } else if ('d' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { |
| | | |
| | | Log.d(tag, msg); |
| | | |
| | | } else if ('i' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { |
| | | |
| | | Log.i(tag, msg); |
| | | |
| | | } else { |
| | | |
| | | Log.v(tag, msg); |
| | | |
| | | } |
| | | |
| | | if (MYLOG_WRITE_TO_FILE)//日志写入文件开关 |
| | | |
| | | writeLogtoFile(String.valueOf(level), tag, msg); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | |
| | | * 打开日志文件并写入日志 |
| | | |
| | | * @param mylogtype |
| | | |
| | | * @param tag |
| | | |
| | | * @param text |
| | | |
| | | */ |
| | | |
| | | private static void writeLogtoFile(String mylogtype, final String tag, final String text) {// 新建或打开日志文件 |
| | | |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | delFile(); |
| | | Date nowtime = new Date(); |
| | | |
| | | String needWriteFiel = logfile.format(nowtime); |
| | | |
| | | String needWriteMessage = myLogSdf.format(nowtime) + " "+ tag + " " + text; |
| | | |
| | | |
| | | |
| | | |
| | | File dirsFile = new File(MYLOG_PATH_SDCARD_DIR); |
| | | |
| | | if (!dirsFile.exists()){ |
| | | |
| | | dirsFile.mkdirs(); |
| | | |
| | | } |
| | | |
| | | //Log.i("创建文件","创建文件"); |
| | | |
| | | File file = new File(dirsFile.toString(), needWriteFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR |
| | | |
| | | if (!file.exists()) { |
| | | |
| | | try { |
| | | |
| | | //在指定的文件夹中创建文件 |
| | | |
| | | file.createNewFile(); |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | try { |
| | | /**后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖**/ |
| | | FileWriter filerWriter = new FileWriter(file, true); |
| | | |
| | | BufferedWriter bufWriter = new BufferedWriter(filerWriter); |
| | | |
| | | bufWriter.write(needWriteMessage); |
| | | |
| | | bufWriter.newLine(); |
| | | |
| | | bufWriter.close(); |
| | | |
| | | filerWriter.close(); |
| | | |
| | | } catch (IOException e) { |
| | | |
| | | e.printStackTrace(); |
| | | |
| | | } |
| | | } |
| | | }).start(); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | |
| | | * 删除制定的日志文件 |
| | | |
| | | */ |
| | | |
| | | public static void delFile() {// 删除日志文件 |
| | | |
| | | String needDelFiel = logfile.format(getDateBefore()); |
| | | |
| | | String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/nvlog"; |
| | | |
| | | File file = new File(dirPath, needDelFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR |
| | | |
| | | if (file.exists()) { |
| | | |
| | | file.delete(); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | |
| | | * 得到现在时间前的几天日期,用来得到需要删除的日志文件名 |
| | | |
| | | */ |
| | | |
| | | private static Date getDateBefore() { |
| | | |
| | | Date nowtime = new Date(); |
| | | |
| | | Calendar now = Calendar.getInstance(); |
| | | |
| | | now.setTime(nowtime); |
| | | |
| | | now.set(Calendar.DATE, now.get(Calendar.DATE) - SDCARD_LOG_FILE_SAVE_DAYS); |
| | | |
| | | return now.getTime(); |
| | | |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package safeluck.drive.evaluation.util; |
| | | |
| | | import android.app.Activity; |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.pm.PackageManager; |
| | | 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 java.util.ArrayList; |
| | | |
| | | /** |
| | | * MyApplication2 |
| | | * Created by lzw on 2019/9/9. 17:45:48 |
| | | * 邮箱:632393724@qq.com |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | public abstract class PermissionManager { |
| | | private static final String PACKAGE_URL_SCHEME = "package:"; |
| | | private Activity mTargetActivity; |
| | | |
| | | /** |
| | | * 权限通过 |
| | | * @param requestCode |
| | | */ |
| | | public abstract void authorized(int requestCode); |
| | | |
| | | /** |
| | | * 有权限没通过 |
| | | * @param requestCode |
| | | * @param lackPermissions |
| | | */ |
| | | public abstract void noAuthorization(int requestCode,String[] lackPermissions); |
| | | |
| | | /** |
| | | * Android 6.0以下的系统不设置校验权限 |
| | | */ |
| | | public abstract void ignore(); |
| | | |
| | | public PermissionManager(Activity targetActivity){ |
| | | this.mTargetActivity = targetActivity; |
| | | } |
| | | |
| | | public void checkPermissions(int requestCode,String... permissions){ |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ |
| | | ArrayList<String> lacks = new ArrayList<>(); |
| | | for (String permission:permissions){ |
| | | if (ContextCompat.checkSelfPermission(mTargetActivity.getApplicationContext(),permission) == PackageManager.PERMISSION_DENIED){ |
| | | lacks.add(permission); |
| | | } |
| | | } |
| | | if (!lacks.isEmpty()){ |
| | | //有权限没有授权 |
| | | String[] lacksPermissions = new String[lacks.size()]; |
| | | lacksPermissions = lacks.toArray(lacksPermissions); |
| | | ActivityCompat.requestPermissions(mTargetActivity,lacksPermissions,requestCode); |
| | | }else{ |
| | | authorized(requestCode); |
| | | } |
| | | }else{ |
| | | // 6.0以下版本不校验权限 |
| | | ignore(); |
| | | } |
| | | } |
| | | |
| | | public void recheckPermissions(int requestCode, @NonNull String[] permissions,@NonNull int[] grantReuslts){ |
| | | for (int grantResult : |
| | | grantReuslts) { |
| | | if (grantResult == PackageManager.PERMISSION_DENIED) { |
| | | //未授权 |
| | | noAuthorization(requestCode,permissions); |
| | | } |
| | | } |
| | | authorized(requestCode); |
| | | } |
| | | |
| | | public static void startAppSettings(Context context){ |
| | | Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); |
| | | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| | | intent.setData(Uri.parse(PACKAGE_URL_SCHEME + context.getApplicationContext().getPackageName() )); |
| | | context.startActivity(intent); |
| | | } |
| | | } |
New file |
| | |
| | | <vector android:height="24dp" android:viewportHeight="1024" |
| | | android:viewportWidth="1024" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> |
| | | <path android:fillColor="#ffffff" android:pathData="M848,64h-84c-7.2,0 -14.3,2.7 -19.8,8.2 -5.5,5.5 -8.2,12.6 -8.2,19.8 0,7.2 2.7,14.3 8.2,19.8 5.5,5.5 12.6,8.2 19.8,8.2h84v84c0,7.2 2.7,14.3 8.2,19.8 5.5,5.5 12.6,8.2 19.8,8.2s14.3,-2.7 19.8,-8.2c5.5,-5.5 8.2,-12.6 8.2,-19.8v-84c0,-30.9 -25.1,-56 -56,-56zM876,512c-7.2,0 -14.3,2.7 -19.8,8.2 -5.5,5.5 -8.2,12.6 -8.2,19.8v84h-84c-7.2,0 -14.3,2.7 -19.8,8.2 -1.5,1.5 -2.3,3.4 -3.4,5.2 -31.6,-30.4 -67.1,-55.4 -106.4,-72C714.2,517.7 764.7,426 749.2,323c-14.6,-96.7 -89.6,-177.5 -185.3,-197.5 -17.6,-3.7 -35,-5.4 -51.9,-5.4 -132.6,0 -240,107.4 -240,240 0,87.6 47.5,163.5 117.6,205.4 -39.2,16.6 -74.8,41.6 -106.4,72 -1.1,-1.8 -1.9,-3.7 -3.4,-5.2 -5.5,-5.5 -12.6,-8.2 -19.8,-8.2h-84v-84c0,-7.2 -2.7,-14.3 -8.2,-19.8 -5.5,-5.5 -12.6,-8.2 -19.8,-8.2s-14.3,2.7 -19.8,8.2c-5.5,5.5 -8.2,12.6 -8.2,19.8v84c0,30.9 25.1,56 56,56h69c-46.8,60.6 -79.3,136.5 -89.5,221.3 -3.8,31.2 21.1,58.7 52.5,58.7h608c31.4,0 56.2,-27.6 52.5,-58.7 -10.2,-84.9 -42.7,-160.8 -89.5,-221.4h69c30.9,0 56,-25.1 56,-56v-84c0,-7.2 -2.7,-14.3 -8.2,-19.8 -5.5,-5.5 -12.6,-8.2 -19.8,-8.2zM211.5,905c16.9,-132.8 93.3,-242.9 199.9,-288 19.4,-8.2 32.6,-26.7 34.1,-47.7 1.5,-21.1 -9,-41.1 -27.2,-52C361.8,483.6 328,424.7 328,360c0,-101.5 82.5,-184 184,-184 13.4,0 27,1.4 40.4,4.3 72.1,15.1 130.3,77.2 141.4,151.1 11.4,75.5 -22.4,146.8 -88.2,186 -18.1,10.8 -28.6,30.9 -27.2,52 1.5,21.1 14.6,39.5 34.1,47.7C719,661.9 795.3,771.7 812.4,904l-600.9,1zM148,232c7.2,0 14.3,-2.7 19.8,-8.2 5.5,-5.5 8.2,-12.6 8.2,-19.8v-84h84c7.2,0 14.3,-2.7 19.8,-8.2 5.5,-5.5 8.2,-12.6 8.2,-19.8 0,-7.2 -2.7,-14.3 -8.2,-19.8 -5.5,-5.5 -12.6,-8.2 -19.8,-8.2h-84c-30.9,0 -56,25.1 -56,56v84c0,7.2 2.7,14.3 8.2,19.8 5.5,5.5 12.6,8.2 19.8,8.2z"/> |
| | | </vector> |
| | |
| | | android:layout_width="match_parent" |
| | | android:layout_height="match_parent"> |
| | | |
| | | <safeluck.drive.evaluation.customview.AutoFitTextureView |
| | | android:id="@+id/texture" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:layout_alignParentStart="true" |
| | | android:layout_alignParentTop="true" /> |
| | | |
| | | <safeluck.drive.evaluation.customview.AutoFitTextureView |
| | | android:id="@+id/texture" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:layout_alignParentStart="true" |
| | | android:layout_alignParentTop="true" /> |
| | | |
| | | |
| | | |
| | | <FrameLayout |
| | | android:id="@+id/control" |
| | |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="wrap_content" |
| | | android:layout_gravity="center" |
| | | android:text="照片" /> |
| | | android:text="拍照" /> |
| | | |
| | | <ImageButton |
| | | android:id="@+id/info" |
| | |
| | | #Fri Mar 15 10:07:01 CST 2019 |
| | | #Fri May 10 10:06:28 CST 2019 |
| | | distributionBase=GRADLE_USER_HOME |
| | | distributionPath=wrapper/dists |
| | | zipStoreBase=GRADLE_USER_HOME |
| | | zipStorePath=wrapper/dists |
| | | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip |
| | | distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip |
| | |
| | | include ':app' |
| | | include ':app', ':lib' |