From 8ee04ba82a1455ac08bb2e6a729bdc7ebbe6c4da Mon Sep 17 00:00:00 2001 From: endian11 <Dana_Lee1016@126.com> Date: 星期一, 09 九月 2019 18:52:40 +0800 Subject: [PATCH] 加入权限管理类;加入日志写入SD文件 --- app/src/main/java/safeluck/drive/evaluation/app.java | 11 app/src/main/java/safeluck/drive/evaluation/MainActivity.java | 59 ++++++ settings.gradle | 2 app/src/main/res/drawable/ic_face.xml | 4 app/src/main/res/layout/layout_take_photo.xml | 17 + app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java | 17 + app/src/main/AndroidManifest.xml | 1 gradle/wrapper/gradle-wrapper.properties | 4 app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java | 87 +++++++++ app/build.gradle | 4 app/src/main/java/safeluck/drive/evaluation/util/MyLog.java | 314 ++++++++++++++++++++++++++++++++++ 11 files changed, 497 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b20516c..7584826 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,14 +22,14 @@ 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' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0a0e0bd..d67b1f7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ 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" diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java index f977e6f..a8d8d37 100644 --- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java +++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java @@ -1,23 +1,31 @@ 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) { @@ -26,13 +34,43 @@ 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()); } }); @@ -42,4 +80,17 @@ 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); + } } diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java index 2f0c4b1..aa76e5e 100644 --- a/app/src/main/java/safeluck/drive/evaluation/app.java +++ b/app/src/main/java/safeluck/drive/evaluation/app.java @@ -2,13 +2,14 @@ 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 @@ -27,7 +28,7 @@ .handleException(new ExceptionHandler() { @Override public void onException(@NonNull Exception e) { - Log.i(TAG, "onException: "+e.getMessage()); + MyLog.i(TAG, "onException: "+e.getMessage()); } }) .install(); @@ -39,18 +40,18 @@ @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); } } diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java index 64403ee..a7272a5 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/HomeFragment.java @@ -1,19 +1,31 @@ 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; /** * 棣栭〉 @@ -85,6 +97,7 @@ } }).show(); + break; case R.id.system_setting: //鎵撳紑杈撳叆瀵嗙爜鐣岄潰 @@ -95,7 +108,7 @@ } else { start(passwordFragment); } -// extraTransaction().startDontHideSelf(PasswordFragment.newInstance()); + break; } } diff --git a/app/src/main/java/safeluck/drive/evaluation/util/MyLog.java b/app/src/main/java/safeluck/drive/evaluation/util/MyLog.java new file mode 100644 index 0000000..9a8ba13 --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/util/MyLog.java @@ -0,0 +1,314 @@ +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;// 鏃ュ織鍐欏叆鏂囦欢寮�鍏� + + // 杈撳叆鏃ュ織绫诲瀷锛寃浠h〃鍙緭鍑哄憡璀︿俊鎭瓑锛寁浠h〃杈撳嚭鎵�鏈変俊鎭� + private static char MYLOG_TYPE = 'v'; + + // 鏃ュ織鏂囦欢鍦╯dcard涓殑璺緞 + 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 { +/**鍚庨潰杩欎釜鍙傛暟浠h〃鏄笉鏄鎺ヤ笂鏂囦欢涓師鏉ョ殑鏁版嵁锛屼笉杩涜瑕嗙洊**/ + 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(); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java b/app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java new file mode 100644 index 0000000..53d8792 --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/util/PermissionManager.java @@ -0,0 +1,87 @@ +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); + } +} diff --git a/app/src/main/res/drawable/ic_face.xml b/app/src/main/res/drawable/ic_face.xml new file mode 100644 index 0000000..9c0c5ea --- /dev/null +++ b/app/src/main/res/drawable/ic_face.xml @@ -0,0 +1,4 @@ +<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> diff --git a/app/src/main/res/layout/layout_take_photo.xml b/app/src/main/res/layout/layout_take_photo.xml index 8e01b4c..e6b6573 100644 --- a/app/src/main/res/layout/layout_take_photo.xml +++ b/app/src/main/res/layout/layout_take_photo.xml @@ -2,12 +2,15 @@ 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" @@ -22,7 +25,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:text="鐓х墖" /> + android:text="鎷嶇収" /> <ImageButton android:id="@+id/info" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c427fd4..514e9a8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#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 diff --git a/settings.gradle b/settings.gradle index e7b4def..3cbe249 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app' +include ':app', ':lib' -- Gitblit v1.8.0